{"version":3,"sources":["webpack:///./node_modules/core-js/internals/to-string-tag-support.js","webpack:///./node_modules/core-js/internals/function-bind-context.js","webpack:///./node_modules/core-js/modules/es.array.flat.js","webpack:///./node_modules/core-js/internals/function-bind.js","webpack:///./node_modules/core-js/internals/object-get-own-property-names-external.js","webpack:///./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","webpack:///./node_modules/core-js/internals/object-get-own-property-descriptor.js","webpack:///../../../src/components/transitions/createTransition.ts","webpack:///../../../src/components/transitions/expand-transition.ts","webpack:///../../../src/components/transitions/index.ts","webpack:///./node_modules/core-js/modules/es.object.values.js","webpack:///./node_modules/axios/lib/core/Axios.js","webpack:///./node_modules/core-js/internals/to-index.js","webpack:///./node_modules/rxjs/_esm5/internal/util/hostReportError.js","webpack:///./node_modules/core-js/internals/ie8-dom-define.js","webpack:///./node_modules/axios/lib/helpers/spread.js","webpack:///../../../src/components/VGrid/VRow.ts","webpack:///../../../src/components/VSheet/index.ts","webpack:///./node_modules/xlsx/xlsx.js","webpack:///./node_modules/core-js/internals/string-repeat.js","webpack:///./node_modules/core-js/modules/es.string.split.js","webpack:///./node_modules/core-js/internals/same-value.js","webpack:///./node_modules/date-fns/esm/_lib/startOfUTCWeekYear/index.js","webpack:///./node_modules/date-fns/esm/_lib/getUTCWeek/index.js","webpack:///../../../src/components/VIcon/VIcon.ts","webpack:///./node_modules/core-js/modules/es.array.reduce.js","webpack:///./node_modules/rxjs/_esm5/internal/Subscriber.js","webpack:///./node_modules/core-js/internals/array-copy-within.js","webpack:///./node_modules/core-js/internals/regexp-exec-abstract.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/pluck.js","webpack:///./node_modules/core-js/modules/web.dom-collections.for-each.js","webpack:///./node_modules/xlsx/jszip.js","webpack:///./node_modules/core-js/modules/es.typed-array.subarray.js","webpack:///./node_modules/core-js/internals/array-for-each.js","webpack:///./node_modules/rxjs/_esm5/internal/util/isScheduler.js","webpack:///./node_modules/rxjs/_esm5/internal/scheduled/scheduleArray.js","webpack:///./node_modules/rxjs/_esm5/internal/observable/fromArray.js","webpack:///./node_modules/rxjs/_esm5/internal/observable/of.js","webpack:///./node_modules/core-js/internals/to-offset.js","webpack:///./node_modules/core-js/modules/es.string.anchor.js","webpack:///./node_modules/core-js/internals/an-instance.js","webpack:///./node_modules/survey-vue/survey-vue.js","webpack:///../../../src/components/VItemGroup/VItemGroup.ts","webpack:///../../../src/components/VList/VListItemGroup.ts","webpack:///./node_modules/core-js/internals/html.js","webpack:///./node_modules/core-js/internals/a-function.js","webpack:///./node_modules/core-js/internals/check-correctness-of-iteration.js","webpack:///../../../src/mixins/routable/index.ts","webpack:///./node_modules/core-js/internals/engine-is-ios.js","webpack:///./node_modules/axios/lib/helpers/bind.js","webpack:///./node_modules/core-js/internals/require-object-coercible.js","webpack:///./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","webpack:///./node_modules/core-js/internals/array-method-has-species-support.js","webpack:///./node_modules/base64-js/index.js","webpack:///./node_modules/core-js/modules/es.typed-array.sort.js","webpack:///./node_modules/file-saver/dist/FileSaver.min.js","webpack:///./node_modules/date-fns/esm/_lib/format/longFormatters/index.js","webpack:///./node_modules/xlsx/dist/cpexcel.js","webpack:///./node_modules/core-js/internals/iterate.js","webpack:///./node_modules/core-js/internals/to-absolute-index.js","webpack:///./node_modules/core-js/internals/export.js","webpack:///./node_modules/core-js/internals/object-get-own-property-names.js","webpack:///./node_modules/date-fns/esm/_lib/getTimezoneOffsetInMilliseconds/index.js","webpack:///./node_modules/axios/lib/defaults.js","webpack:///../../../src/mixins/measurable/index.ts","webpack:///./node_modules/core-js/modules/es.string.includes.js","webpack:///./node_modules/core-js/modules/es.typed-array.reduce-right.js","webpack:///./node_modules/core-js/modules/es.regexp.to-string.js","webpack:///./node_modules/core-js/internals/set-species.js","webpack:///./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack:///./node_modules/@babel/runtime/helpers/esm/inherits.js","webpack:///./node_modules/vue-loader/lib/runtime/componentNormalizer.js","webpack:///./node_modules/core-js/modules/es.typed-array.slice.js","webpack:///../../../src/components/VProgressLinear/VProgressLinear.ts","webpack:///../../../src/components/VProgressLinear/index.ts","webpack:///../../../src/mixins/loadable/index.ts","webpack:///./node_modules/vue/dist/vue.runtime.esm.js","webpack:///./node_modules/core-js/modules/es.object.is.js","webpack:///./node_modules/rxjs/_esm5/internal/util/ObjectUnsubscribedError.js","webpack:///./node_modules/rxjs/_esm5/internal/SubjectSubscription.js","webpack:///./node_modules/rxjs/_esm5/internal/Subject.js","webpack:///./node_modules/core-js/modules/es.string.starts-with.js","webpack:///./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","webpack:///./node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","webpack:///./node_modules/@babel/runtime/helpers/esm/createSuper.js","webpack:///./node_modules/date-fns/esm/_lib/setUTCDay/index.js","webpack:///./node_modules/date-fns/esm/_lib/setUTCISODay/index.js","webpack:///./node_modules/date-fns/esm/_lib/setUTCISOWeek/index.js","webpack:///./node_modules/date-fns/esm/_lib/setUTCWeek/index.js","webpack:///./node_modules/date-fns/esm/parse/_lib/parsers/index.js","webpack:///./node_modules/date-fns/esm/parse/index.js","webpack:///./node_modules/core-js/internals/task.js","webpack:///./node_modules/core-js/internals/engine-v8-version.js","webpack:///./node_modules/axios/lib/core/createError.js","webpack:///./node_modules/axios/lib/cancel/isCancel.js","webpack:///./node_modules/vuex/dist/vuex.esm.js","webpack:///./node_modules/rxjs/_esm5/internal/symbol/rxSubscriber.js","webpack:///./node_modules/axios/lib/helpers/buildURL.js","webpack:///./node_modules/rxjs/_esm5/internal/util/isObject.js","webpack:///../../../src/mixins/registrable/index.ts","webpack:///./node_modules/core-js/modules/es.typed-array.last-index-of.js","webpack:///./node_modules/core-js/modules/es.object.get-prototype-of.js","webpack:///./node_modules/core-js/internals/engine-user-agent.js","webpack:///../../../src/components/VList/VListItemIcon.ts","webpack:///./node_modules/core-js/internals/get-iterator-method.js","webpack:///./node_modules/core-js/internals/object-define-properties.js","webpack:///./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","webpack:///./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","webpack:///./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","webpack:///./node_modules/@babel/runtime/helpers/esm/slicedToArray.js","webpack:///./node_modules/axios/lib/core/enhanceError.js","webpack:///./node_modules/core-js/modules/es.string.repeat.js","webpack:///./node_modules/axios/lib/helpers/isURLSameOrigin.js","webpack:///./node_modules/core-js/modules/es.typed-array.find-index.js","webpack:///./node_modules/core-js/internals/a-possible-prototype.js","webpack:///./node_modules/core-js/modules/es.typed-array.set.js","webpack:///./node_modules/core-js/modules/es.string.iterator.js","webpack:///./node_modules/date-fns/esm/parseJSON/index.js","webpack:///./node_modules/core-js/modules/es.math.cbrt.js","webpack:///./node_modules/core-js/internals/iterators.js","webpack:///./node_modules/core-js/modules/es.typed-array.map.js","webpack:///./node_modules/core-js/modules/es.array.unscopables.flat.js","webpack:///./node_modules/core-js/internals/this-number-value.js","webpack:///../../../src/directives/scroll/index.ts","webpack:///../../../src/mixins/applicationable/index.ts","webpack:///../../../src/mixins/scrollable/index.ts","webpack:///../../../src/components/VAppBar/VAppBar.ts","webpack:///./node_modules/core-js/modules/es.array.for-each.js","webpack:///./node_modules/core-js/internals/path.js","webpack:///./node_modules/node-libs-browser/mock/process.js","webpack:///./node_modules/core-js/internals/indexed-object.js","webpack:///./node_modules/core-js/internals/add-to-unscopables.js","webpack:///./node_modules/core-js/internals/host-report-errors.js","webpack:///./node_modules/core-js/internals/is-regexp.js","webpack:///./node_modules/core-js/modules/es.array.some.js","webpack:///./node_modules/core-js/modules/es.string.match.js","webpack:///./node_modules/axios/lib/core/settle.js","webpack:///./node_modules/core-js/internals/species-constructor.js","webpack:///./node_modules/core-js/internals/native-symbol.js","webpack:///./node_modules/core-js/modules/es.string.trim.js","webpack:///./node_modules/axios/lib/core/mergeConfig.js","webpack:///./node_modules/core-js/modules/es.reflect.construct.js","webpack:///./node_modules/date-fns/esm/_lib/getUTCWeekYear/index.js","webpack:///../../../src/components/VForm/VForm.ts","webpack:///./node_modules/core-js/internals/array-includes.js","webpack:///./node_modules/core-js/modules/es.array.filter.js","webpack:///./node_modules/core-js/internals/array-from.js","webpack:///../../../src/mixins/groupable/index.ts","webpack:///./node_modules/core-js/modules/es.map.js","webpack:///./node_modules/core-js/internals/to-length.js","webpack:///./node_modules/core-js/internals/has.js","webpack:///./node_modules/axios/lib/core/dispatchRequest.js","webpack:///./node_modules/core-js/modules/es.string.replace.js","webpack:///./node_modules/@babel/runtime/helpers/esm/typeof.js","webpack:///./node_modules/@babel/runtime/helpers/esm/objectSpread2.js","webpack:///../../../src/directives/ripple/index.ts","webpack:///./node_modules/core-js/internals/shared.js","webpack:///./node_modules/core-js/internals/own-keys.js","webpack:///./node_modules/core-js/internals/whitespaces.js","webpack:///./node_modules/core-js/internals/string-trim.js","webpack:///../../src/util/mixins.ts","webpack:///./node_modules/core-js/internals/not-a-regexp.js","webpack:///./node_modules/core-js/internals/create-property-descriptor.js","webpack:///./node_modules/core-js/modules/es.typed-array.uint8-array.js","webpack:///../../../src/components/VList/VListGroup.ts","webpack:///../../../src/components/VList/VListItemAction.ts","webpack:///../../../src/components/VAvatar/VAvatar.ts","webpack:///../../../src/components/VAvatar/index.ts","webpack:///../../../src/components/VList/VListItemAvatar.ts","webpack:///../../../src/components/VList/index.ts","webpack:///./node_modules/core-js/modules/es.typed-array.join.js","webpack:///./node_modules/vue-class-component/dist/vue-class-component.esm.js","webpack:///./node_modules/vue-property-decorator/lib/vue-property-decorator.js","webpack:///./node_modules/core-js/modules/es.typed-array.iterator.js","webpack:///./node_modules/core-js/internals/object-assign.js","webpack:///./node_modules/core-js/internals/array-buffer.js","webpack:///../../../src/components/VGrid/VCol.ts","webpack:///./node_modules/core-js/modules/es.typed-array.some.js","webpack:///./node_modules/vuetify-loader/lib/runtime/installComponents.js","webpack:///./node_modules/core-js/internals/string-multibyte.js","webpack:///./node_modules/core-js/internals/collection-strong.js","webpack:///./node_modules/core-js/internals/array-species-create.js","webpack:///./node_modules/core-js/internals/internal-state.js","webpack:///./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","webpack:///./node_modules/core-js/internals/collection.js","webpack:///./node_modules/core-js/internals/redefine.js","webpack:///./node_modules/core-js/internals/object-to-array.js","webpack:///./node_modules/core-js/internals/inherit-if-required.js","webpack:///../../../src/components/VToolbar/VToolbar.ts","webpack:///./node_modules/core-js/modules/es.typed-array.to-string.js","webpack:///./node_modules/core-js/modules/es.typed-array.fill.js","webpack:///./node_modules/core-js/internals/object-get-own-property-symbols.js","webpack:///./node_modules/core-js/internals/define-well-known-symbol.js","webpack:///../../../src/components/VApp/VApp.ts","webpack:///./node_modules/core-js/internals/typed-array-constructor.js","webpack:///../../../src/mixins/themeable/index.ts","webpack:///./node_modules/core-js/internals/ieee754.js","webpack:///./node_modules/core-js/internals/enum-bug-keys.js","webpack:///./node_modules/axios/lib/cancel/Cancel.js","webpack:///./node_modules/axios/lib/helpers/cookies.js","webpack:///./node_modules/core-js/internals/to-object.js","webpack:///../../src/util/colorUtils.ts","webpack:///./node_modules/core-js/internals/object-create.js","webpack:///./node_modules/core-js/modules/es.array.find.js","webpack:///./node_modules/core-js/internals/define-iterator.js","webpack:///../../../src/mixins/binds-attrs/index.ts","webpack:///./node_modules/core-js/internals/native-weak-map.js","webpack:///../../src/util/helpers.ts","webpack:///./node_modules/core-js/internals/array-fill.js","webpack:///./node_modules/core-js/internals/an-object.js","webpack:///./node_modules/date-fns/esm/_lib/getUTCISOWeekYear/index.js","webpack:///./node_modules/core-js/modules/es.typed-array.includes.js","webpack:///../../../src/components/VProgressCircular/VProgressCircular.ts","webpack:///../../../src/components/VProgressCircular/index.ts","webpack:///../../../src/components/VBtn/VBtn.ts","webpack:///./node_modules/core-js/internals/descriptors.js","webpack:///./node_modules/axios/lib/core/buildFullPath.js","webpack:///./node_modules/date-fns/esm/addMilliseconds/index.js","webpack:///./node_modules/date-fns/esm/subMilliseconds/index.js","webpack:///./node_modules/core-js/internals/create-property.js","webpack:///./node_modules/core-js/internals/create-html.js","webpack:///./node_modules/core-js/internals/is-object.js","webpack:///../../../src/components/VLabel/VLabel.ts","webpack:///../../../src/components/VLabel/index.ts","webpack:///../../../src/components/VMessages/VMessages.ts","webpack:///../../../src/components/VMessages/index.ts","webpack:///../../../src/mixins/validatable/index.ts","webpack:///../../../src/components/VInput/VInput.ts","webpack:///../../../src/components/VInput/index.ts","webpack:///../../../src/components/VCounter/VCounter.ts","webpack:///../../../src/components/VCounter/index.ts","webpack:///../../../src/mixins/intersectable/index.ts","webpack:///../../../src/components/VTextField/VTextField.ts","webpack:///../../../src/components/VList/VList.ts","webpack:///./node_modules/rxjs/_esm5/internal/config.js","webpack:///./node_modules/date-fns/esm/locale/en-US/_lib/formatDistance/index.js","webpack:///./node_modules/date-fns/esm/locale/_lib/buildFormatLongFn/index.js","webpack:///./node_modules/date-fns/esm/locale/en-US/_lib/formatLong/index.js","webpack:///./node_modules/date-fns/esm/locale/en-US/_lib/formatRelative/index.js","webpack:///./node_modules/date-fns/esm/locale/_lib/buildLocalizeFn/index.js","webpack:///./node_modules/date-fns/esm/locale/en-US/_lib/localize/index.js","webpack:///./node_modules/date-fns/esm/locale/_lib/buildMatchPatternFn/index.js","webpack:///./node_modules/date-fns/esm/locale/_lib/buildMatchFn/index.js","webpack:///./node_modules/date-fns/esm/locale/en-US/_lib/match/index.js","webpack:///./node_modules/date-fns/esm/locale/en-US/index.js","webpack:///./node_modules/core-js/internals/inspect-source.js","webpack:///./node_modules/core-js/internals/advance-string-index.js","webpack:///./node_modules/core-js/internals/typed-array-constructors-require-wrappers.js","webpack:///./node_modules/rxjs/_esm5/internal/util/isArray.js","webpack:///./node_modules/vue-router/dist/vue-router.esm.js","webpack:///./node_modules/date-fns/esm/_lib/requiredArgs/index.js","webpack:///../../../src/util/color/transformSRGB.ts","webpack:///../../../src/mixins/elevatable/index.ts","webpack:///../../../src/components/VSheet/VSheet.ts","webpack:///./node_modules/axios/lib/cancel/CancelToken.js","webpack:///../../../src/directives/intersect/index.ts","webpack:///./node_modules/core-js/internals/uid.js","webpack:///./node_modules/core-js/internals/create-non-enumerable-property.js","webpack:///./node_modules/ieee754/index.js","webpack:///./node_modules/core-js/internals/regexp-exec.js","webpack:///./node_modules/core-js/internals/is-forced.js","webpack:///./node_modules/date-fns/esm/_lib/startOfUTCISOWeekYear/index.js","webpack:///./node_modules/date-fns/esm/_lib/getUTCISOWeek/index.js","webpack:///./node_modules/regenerator-runtime/runtime.js","webpack:///./node_modules/core-js/modules/es.string.link.js","webpack:///./node_modules/core-js/modules/es.array.concat.js","webpack:///../../../src/components/VCard/index.ts","webpack:///./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","webpack:///./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","webpack:///./node_modules/core-js/modules/es.typed-array.copy-within.js","webpack:///./node_modules/tslib/tslib.es6.js","webpack:///./node_modules/core-js/internals/call-with-safe-iteration-closing.js","webpack:///./node_modules/core-js/internals/object-define-property.js","webpack:///../../../src/components/VIcon/index.ts","webpack:///../../../src/mixins/bootable/index.ts","webpack:///./node_modules/core-js/internals/create-iterator-constructor.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/takeUntil.js","webpack:///./node_modules/core-js/internals/regexp-sticky-helpers.js","webpack:///./node_modules/core-js/internals/typed-array-from.js","webpack:///./node_modules/core-js/modules/es.array.join.js","webpack:///../../../src/mixins/roundable/index.ts","webpack:///./node_modules/core-js/internals/flatten-into-array.js","webpack:///./node_modules/core-js/modules/es.array.splice.js","webpack:///../../../src/mixins/proxyable/index.ts","webpack:///./node_modules/core-js/modules/es.symbol.js","webpack:///../../../src/components/VGrid/grid.ts","webpack:///../../../src/components/VGrid/VContainer.ts","webpack:///./node_modules/core-js/modules/es.array.every.js","webpack:///./node_modules/core-js/modules/es.array.from.js","webpack:///./node_modules/core-js/internals/array-method-is-strict.js","webpack:///./node_modules/core-js/internals/to-integer.js","webpack:///./node_modules/rxjs/_esm5/internal/util/UnsubscriptionError.js","webpack:///./node_modules/rxjs/_esm5/internal/Subscription.js","webpack:///../../../src/components/VContent/VContent.ts","webpack:///./node_modules/core-js/modules/es.promise.finally.js","webpack:///./node_modules/core-js/modules/es.typed-array.every.js","webpack:///./node_modules/core-js/internals/array-buffer-native.js","webpack:///../../../src/mixins/colorable/index.ts","webpack:///./node_modules/core-js/modules/es.number.constructor.js","webpack:///./node_modules/core-js/internals/correct-is-regexp-logic.js","webpack:///./node_modules/core-js/modules/es.regexp.exec.js","webpack:///./node_modules/core-js/internals/regexp-flags.js","webpack:///../../../src/components/VResponsive/VResponsive.ts","webpack:///../../../src/components/VResponsive/index.ts","webpack:///../../../src/components/VImg/VImg.ts","webpack:///./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack:///./node_modules/core-js/internals/array-method-uses-to-length.js","webpack:///./node_modules/core-js/internals/iterators-core.js","webpack:///./node_modules/core-js/internals/string-html-forced.js","webpack:///../../../src/mixins/sizeable/index.ts","webpack:///./node_modules/core-js/internals/object-to-string.js","webpack:///../../../src/components/VCard/VCard.ts","webpack:///./node_modules/core-js/modules/es.function.name.js","webpack:///./node_modules/date-fns/esm/isValid/index.js","webpack:///./node_modules/date-fns/esm/_lib/addLeadingZeros/index.js","webpack:///./node_modules/date-fns/esm/_lib/format/lightFormatters/index.js","webpack:///./node_modules/date-fns/esm/_lib/getUTCDayOfYear/index.js","webpack:///./node_modules/date-fns/esm/_lib/format/formatters/index.js","webpack:///./node_modules/date-fns/esm/format/index.js","webpack:///./node_modules/core-js/modules/es.typed-array.to-locale-string.js","webpack:///./node_modules/axios/lib/adapters/xhr.js","webpack:///./node_modules/core-js/internals/microtask.js","webpack:///./node_modules/core-js/internals/well-known-symbol.js","webpack:///./node_modules/buffer/index.js","webpack:///./node_modules/core-js/modules/es.object.keys.js","webpack:///./node_modules/core-js/modules/es.number.to-fixed.js","webpack:///./node_modules/date-fns/esm/_lib/startOfUTCISOWeek/index.js","webpack:///./node_modules/core-js/internals/array-iteration.js","webpack:///./node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js","webpack:///./node_modules/core-js/internals/freezing.js","webpack:///./node_modules/axios/index.js","webpack:///./node_modules/@babel/runtime/helpers/esm/createClass.js","webpack:///./node_modules/core-js/internals/to-primitive.js","webpack:///./node_modules/core-js/modules/es.typed-array.filter.js","webpack:///./node_modules/axios/lib/helpers/parseHeaders.js","webpack:///./node_modules/axios/lib/core/transformData.js","webpack:///./node_modules/core-js/internals/is-pure.js","webpack:///./node_modules/axios/lib/utils.js","webpack:///./node_modules/rxjs/_esm5/internal/symbol/observable.js","webpack:///./node_modules/core-js/internals/classof-raw.js","webpack:///./node_modules/core-js/internals/shared-store.js","webpack:///./node_modules/core-js/modules/es.array.find-index.js","webpack:///./node_modules/core-js/modules/es.string.fixed.js","webpack:///./node_modules/axios/lib/helpers/normalizeHeaderName.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/core-js/internals/string-trim-forced.js","webpack:///./node_modules/core-js/modules/es.string.small.js","webpack:///./node_modules/core-js/modules/es.array.index-of.js","webpack:///./node_modules/core-js/internals/object-keys-internal.js","webpack:///./node_modules/core-js/modules/es.typed-array.reduce.js","webpack:///./node_modules/core-js/modules/es.array.includes.js","webpack:///./node_modules/core-js/modules/es.array.fill.js","webpack:///./node_modules/core-js/internals/document-create-element.js","webpack:///./node_modules/core-js/modules/es.object.assign.js","webpack:///./node_modules/core-js/modules/es.typed-array.reverse.js","webpack:///./node_modules/core-js/internals/promise-resolve.js","webpack:///./node_modules/rxjs/_esm5/internal/observable/fromEvent.js","webpack:///./node_modules/rxjs/_esm5/internal/util/noop.js","webpack:///./node_modules/rxjs/_esm5/internal/observable/never.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/refCount.js","webpack:///./node_modules/rxjs/_esm5/internal/observable/ConnectableObservable.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/multicast.js","webpack:///./node_modules/vue-rx/dist/vue-rx.esm.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/share.js","webpack:///./node_modules/core-js/internals/set-global.js","webpack:///./node_modules/axios/lib/axios.js","webpack:///./node_modules/rxjs/_esm5/internal/util/subscribeToPromise.js","webpack:///./node_modules/rxjs/_esm5/internal/symbol/iterator.js","webpack:///./node_modules/rxjs/_esm5/internal/util/subscribeToIterable.js","webpack:///./node_modules/rxjs/_esm5/internal/util/subscribeToObservable.js","webpack:///./node_modules/rxjs/_esm5/internal/util/isArrayLike.js","webpack:///./node_modules/rxjs/_esm5/internal/util/isPromise.js","webpack:///./node_modules/rxjs/_esm5/internal/util/subscribeTo.js","webpack:///./node_modules/rxjs/_esm5/internal/innerSubscribe.js","webpack:///./node_modules/core-js/internals/hidden-keys.js","webpack:///./node_modules/core-js/internals/fails.js","webpack:///./node_modules/core-js/internals/get-built-in.js","webpack:///../../../src/mixins/ssr-bootable/index.ts","webpack:///./node_modules/core-js/modules/es.typed-array.find.js","webpack:///./node_modules/core-js/internals/object-property-is-enumerable.js","webpack:///./node_modules/core-js/modules/es.symbol.iterator.js","webpack:///./node_modules/core-js/internals/object-set-prototype-of.js","webpack:///./node_modules/core-js/modules/es.object.to-string.js","webpack:///./node_modules/core-js/internals/set-to-string-tag.js","webpack:///./node_modules/@babel/runtime/helpers/esm/classCallCheck.js","webpack:///./node_modules/core-js/internals/array-reduce.js","webpack:///./node_modules/core-js/modules/es.typed-array.for-each.js","webpack:///./node_modules/date-fns/esm/_lib/startOfUTCWeek/index.js","webpack:///./node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js","webpack:///./node_modules/rxjs/_esm5/internal/util/isFunction.js","webpack:///./node_modules/core-js/modules/es.array.map.js","webpack:///./node_modules/axios/lib/helpers/isAbsoluteURL.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/finalize.js","webpack:///../../src/util/console.ts","webpack:///../../src/util/mergeData.ts","webpack:///../../../src/components/VList/VListItem.ts","webpack:///./node_modules/core-js/internals/global.js","webpack:///./node_modules/core-js/modules/es.object.get-own-property-descriptors.js","webpack:///./node_modules/core-js/modules/es.object.freeze.js","webpack:///./node_modules/date-fns/esm/_lib/protectedTokens/index.js","webpack:///./node_modules/core-js/modules/web.dom-collections.iterator.js","webpack:///./node_modules/core-js/internals/object-keys.js","webpack:///./node_modules/path-browserify/index.js","webpack:///./node_modules/core-js/modules/es.symbol.description.js","webpack:///./node_modules/core-js/internals/object-get-prototype-of.js","webpack:///./node_modules/core-js/internals/correct-prototype-getter.js","webpack:///./node_modules/core-js/modules/es.array.iterator.js","webpack:///./node_modules/core-js/internals/redefine-all.js","webpack:///./node_modules/isarray/index.js","webpack:///./node_modules/date-fns/esm/parseISO/index.js","webpack:///./node_modules/core-js/modules/es.object.get-own-property-descriptor.js","webpack:///./node_modules/core-js/internals/well-known-symbol-wrapped.js","webpack:///./node_modules/core-js/internals/array-last-index-of.js","webpack:///./node_modules/core-js/internals/perform.js","webpack:///./node_modules/axios/lib/helpers/combineURLs.js","webpack:///./node_modules/core-js/modules/es.promise.js","webpack:///./node_modules/core-js/internals/copy-constructor-properties.js","webpack:///./node_modules/core-js/internals/is-array.js","webpack:///./node_modules/core-js/modules/es.typed-array.index-of.js","webpack:///./node_modules/core-js/internals/is-array-iterator-method.js","webpack:///./node_modules/rxjs/_esm5/internal/Observer.js","webpack:///./node_modules/rxjs/_esm5/internal/util/canReportError.js","webpack:///./node_modules/rxjs/_esm5/internal/util/toSubscriber.js","webpack:///./node_modules/rxjs/_esm5/internal/util/identity.js","webpack:///./node_modules/rxjs/_esm5/internal/util/pipe.js","webpack:///./node_modules/rxjs/_esm5/internal/Observable.js","webpack:///./node_modules/core-js/internals/array-buffer-view-core.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/map.js","webpack:///./node_modules/date-fns/esm/compareAsc/index.js","webpack:///./node_modules/date-fns/esm/differenceInCalendarMonths/index.js","webpack:///./node_modules/date-fns/esm/differenceInMonths/index.js","webpack:///./node_modules/date-fns/esm/differenceInMilliseconds/index.js","webpack:///./node_modules/date-fns/esm/differenceInSeconds/index.js","webpack:///./node_modules/date-fns/esm/_lib/cloneObject/index.js","webpack:///./node_modules/date-fns/esm/formatDistance/index.js","webpack:///./node_modules/date-fns/esm/formatDistanceToNow/index.js","webpack:///./node_modules/core-js/internals/new-promise-capability.js","webpack:///./node_modules/core-js/internals/internal-metadata.js","webpack:///../../../src/mixins/toggleable/index.ts","webpack:///../src/install.ts","webpack:///./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","webpack:///./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","webpack:///../../src/locale/en.ts","webpack:///../../../src/presets/default/index.ts","webpack:///../../../src/services/service/index.ts","webpack:///../../../src/services/presets/index.ts","webpack:///../../../src/services/application/index.ts","webpack:///../../../src/services/breakpoint/index.ts","webpack:///../../../src/services/goto/easing-patterns.ts","webpack:///../../../src/services/goto/util.ts","webpack:///../../../src/services/goto/index.ts","webpack:///../../../../src/services/icons/presets/mdi-svg.ts","webpack:///../../../../src/services/icons/presets/md.ts","webpack:///../../../../src/services/icons/presets/mdi.ts","webpack:///../../../../src/services/icons/presets/fa.ts","webpack:///../../../../src/services/icons/presets/fa4.ts","webpack:///../../../../src/services/icons/presets/fa-svg.ts","webpack:///../../../../src/services/icons/presets/index.ts","webpack:///../../../src/services/icons/index.ts","webpack:///../../../src/services/lang/index.ts","webpack:///../../../src/util/color/transformCIELAB.ts","webpack:///../../../src/services/theme/utils.ts","webpack:///../../../src/services/theme/index.ts","webpack:///../src/framework.ts","webpack:///./node_modules/rxjs/_esm5/internal/operators/catchError.js","webpack:///./node_modules/core-js/internals/classof.js","webpack:///./node_modules/axios/lib/core/InterceptorManager.js","webpack:///../../../src/components/VMain/VMain.ts","webpack:///./node_modules/core-js/internals/math-sign.js","webpack:///./node_modules/core-js/internals/shared-key.js","webpack:///./node_modules/date-fns/esm/_lib/assign/index.js","webpack:///./node_modules/core-js/internals/to-positive-integer.js","webpack:///./node_modules/rxjs/_esm5/internal/util/subscribeToArray.js","webpack:///./node_modules/core-js/modules/es.array.slice.js","webpack:///./node_modules/core-js/internals/to-indexed-object.js","webpack:///./node_modules/date-fns/esm/toDate/index.js","webpack:///./node_modules/core-js/internals/dom-iterables.js","webpack:///./node_modules/core-js/internals/use-symbol-as-uid.js","webpack:///./node_modules/date-fns/esm/_lib/toInteger/index.js","webpack:///../../../src/mixins/positionable/index.ts","webpack:///./node_modules/core-js/internals/native-promise-constructor.js"],"names":["wellKnownSymbol","TO_STRING_TAG","test","module","exports","String","aFunction","fn","that","length","undefined","call","a","b","c","apply","arguments","$","flattenIntoArray","toObject","toLength","toInteger","arraySpeciesCreate","target","proto","flat","depthArg","O","this","sourceLen","A","isObject","slice","factories","construct","C","argsLength","args","list","i","Function","join","bind","partArgs","boundFunction","concat","prototype","toIndexedObject","nativeGetOwnPropertyNames","f","toString","windowNames","window","Object","getOwnPropertyNames","getWindowNames","it","error","_unsupportedIterableToArray","o","minLen","arrayLikeToArray","n","constructor","name","Array","from","DESCRIPTORS","propertyIsEnumerableModule","createPropertyDescriptor","toPrimitive","has","IE8_DOM_DEFINE","nativeGetOwnPropertyDescriptor","getOwnPropertyDescriptor","P","mergeTransitions","dest","origin","functional","props","group","type","default","hideOnLeave","leaveAbsolute","mode","render","tag","context","data","on","beforeEnter","el","h","mergeData","functions","expandedParentClass","x","sizeProperty","offsetProperty","transition","overflow","enter","initialStyle","offset","requestAnimationFrame","afterEnter","enterCancelled","leave","afterLeave","leaveCancelled","resetStyles","size","VFadeTransition","createSimpleTransition","VSlideXTransition","VExpandTransition","createJavascriptTransition","$values","values","stat","utils","buildURL","InterceptorManager","dispatchRequest","mergeConfig","Axios","instanceConfig","defaults","interceptors","request","response","config","url","method","toLowerCase","chain","promise","Promise","resolve","forEach","interceptor","unshift","fulfilled","rejected","push","then","shift","getUri","params","paramsSerializer","replace","number","RangeError","hostReportError","err","setTimeout","fails","createElement","defineProperty","get","callback","arr","breakpoints","ALIGNMENT","makeProps","prefix","def","alignValidator","str","alignProps","validator","justifyValidator","justifyProps","alignContentValidator","alignContentProps","propMap","align","justify","alignContent","classMap","breakpointClass","className","val","breakpoint","prop","cache","dense","noGutters","children","cacheKey","classList","value","staticClass","class","make_xlsx_lib","XLSX","version","current_codepage","current_ansi","cptable","global","VALID_ANSI","CS2CP","0","1","2","77","128","129","130","134","136","161","162","163","177","178","186","204","222","238","255","69","set_ansi","cp","indexOf","reset_ansi","set_cp","reset_cp","char_codes","len","charCodeAt","utf16leread","fromCharCode","utf16beread","debom","c1","c2","_getchar","_getansi","decode","DENSE","DIF_XL","Base64","map","encode","input","c3","e1","e2","e3","e4","isNaN","charAt","has_buf","Buffer","process","versions","node","Buffer_from","nbfs","e","buf","enc","alloc","allocUnsafe","new_raw_buf","new_unsafe_buf","s2a","s","split","s2ab","ArrayBuffer","view","Uint8Array","a2s","isArray","a2u","Error","ab2a","bconcat","bufs","chr0","chr1","SSF","make_ssf","_strrev","fill","l","pad0","v","d","t","pad_","rpad_","pad0r1","Math","round","pad0r2","p2_32","pow","pad0r","isgeneral","days","months","init_table","table_fmt","default_map","defi","default_str","frac","D","mixed","sgn","B","P_2","P_1","Q_2","Q_1","Q","floor","q","parse_date_code","opts","b2","date","time","dow","dout","out","T","u","y","m","H","M","S","abs","date1904","Date","setDate","getDate","getFullYear","getMonth","getDay","fix_hijri","basedate","dnthresh","getTime","base1904","datenum_local","epoch","getTimezoneOffset","general_fmt_int","_general_int","general_fmt_num","trailing_zeroes_and_decimal","strip_decimal","mantissa_zeroes_and_decimal","exp_with_single_digit","normalize_exp","small_exp","w","toFixed","toPrecision","toExponential","large_exp","general_fmt_num_base","V","log","LOG10E","substr","toUpperCase","general_fmt","format","write_date","fmt","ss0","ss","tt","outl","outstr","commaify","j","_general_num","_general","write_num","pct1","write_num_pct","sfmt","mul","write_num_cm","idx","write_num_exp","match","period","ee","fakee","$$","$1","$2","$3","frac1","write_num_f1","r","aval","sign","den","parseInt","rr","base","myn","myd","write_num_f2","dec1","closeparen","phone","hashq","cc","rnd","dd","dec","_frac","carry","flr","write_num_flt","ffmt","ri","ff","oa","min","max","lres","rres","write_num_cm2","write_num_pct2","write_num_exp2","write_num_int","lastIndexOf","split_fmt","in_str","_split","abstime","fmt_is_date","eval_fmt","flen","dt","lst","hr","ssm","bt","jj","nstr","myv","ostr","vv","decpt","lasti","retval","is_date","_eval","cfregex","cfregex2","chkcond","thresh","parseFloat","choose_fmt","lat","m1","m2","dateNF","table","load_entry","load","_table","get_table","load_table","tbl","XLMLFormatMap","SSFImplicit","dateNFregex","dateNF_regex","RegExp","dateNF_fix","Y","datestr","timestr","CRC32","DO_NOT_EXPORT_CFB","factory","signed_crc_table","Int32Array","crc32_bstr","bstr","seed","L","crc32_buf","crc32_buf_8","crc32_str","_fs","CFB","fs","namecmp","R","Z","dirname","p","filename","write_dos_date","hms","getHours","getMinutes","getSeconds","write_shift","ymd","parse_dos_date","read_shift","setMilliseconds","setFullYear","setMonth","setHours","setMinutes","setSeconds","parse_extra_field","blob","prep_blob","flags","sz","tgt","mtime","atime","ctime","mt","get_fs","parse","file","options","parse_zip","mver","ssz","nmfs","difat_sec_cnt","dir_start","minifat_start","difat_start","fat_addrs","mv","check_get_mver","header","check_shifts","dir_cnt","chk","sectors","sectorify","sleuth_fat","sector_list","make_sector_list","ENDOFCHAIN","files","Paths","FileIndex","FullPaths","read_directory","build_full_paths","raw","HEADER_SIGNATURE","nsectors","ceil","FI","FP","pl","dad","get_mfat_entry","entry","payload","mini","start","MSSZ","__readInt32LE","new_buf","cnt","sector","get_sector_list","chkd","buf_chain","modulus","addr","nodes","__toBuffer","sl","k","seen","minifat_store","namelen","__utf16le","color","clsid","state","ct","read_date","storage","content","__readUInt32LE","read_file","readFileSync","read","init_cfb","cfb","root","CLSID","seed_cfb","nm","find","rebuild_cfb","gc","_file","pop","now","HEADER_CLSID","sort","elt","_write","_opts","fileType","write_zip","mini_size","fat_size","mini_cnt","mfat_cnt","fat_base","fat_cnt","difat_cnt","HEADER_SIG","chainit","consts","DIFSECT","FATSECT","_nm","path","UCFullPaths","UCPaths","UCPath","_zlib","MAXREGSECT","FREESECT","HEADER_MINOR_VERSION","MAXREGSID","NOSTREAM","EntryTypes","write_file","writeFileSync","write","use_zlib","zlib","InflateRaw","InflRaw","_processChunk","_finishFlushFlag","bytesRead","console","message","_inflateRawSync","usz","_inflate","_deflateRawSync","deflateRawSync","_deflate","CLEN_ORDER","LEN_LN","DST_LN","bit_swap_8","use_typed_arrays","bitswap8","bit_swap_n","rev","read_bits_2","bl","read_bits_3","read_bits_4","read_bits_5","read_bits_7","read_bits_n","realloc","copy","set","zero_fill_array","_deflateRaw","boff","off","build_tree","clens","cmap","MAX","maxlen","ccode","bl_count","Uint16Array","ctree","cleni","fix_lmap","fix_dmap","dlens","dyn_lmap","dyn_dmap","dyn_cmap","dyn_len_1","dyn_len_2","dyn","_HLIT","_HDIST","_HCLEN","next_code","hcodes","h1","h2","inflate","outbuf","woff","OL","max_len_1","max_len_2","bits","code","len_eb","dst_eb","dst","warn_or_throw","wrn","msg","fcnt","start_cd","csz","efsz","fcsz","EF","parse_local_file","meth","crc32","_csz","_usz","ef","_crc32","cfb_add","unsafe","cdirs","compression","desc","fp","fi","crcs","sz_cd","namebuf","cfb_new","fpath","cfb_gc","cfb_del","splice","cfb_mov","old_name","new_name","writeFile","ReadShift","CheckField","_inflateRaw","blobify","write_dl","fname","utf8write","IE_SaveFile","Blob","navigator","msSaveBlob","saveAs","URL","document","createObjectURL","chrome","downloads","download","revokeObjectURL","href","body","appendChild","click","removeChild","File","Folder","open","encoding","close","read_binary","infile","keys","ks","o2","hasOwnProperty","evert_key","obj","key","K","evert","evert_num","evert_arr","datenum","refdate","refoffset","numdate","setTime","parse_isodur","sec","good_pd_date","good_pd","parseDate","fixdate","cc2str","dup","JSON","stringify","fuzzynum","Number","wt","fuzzydate","NaN","getYear","jszip","safe_split_regex","split_regex","re","getdatastr","asNodeBuffer","asBinary","_data","getContent","getdatabin","getdata","safegetzipfile","zip","g","getzipfile","getzipdata","safe","getzipstr","zipentries","zip_add_file","zip_new","zip_read","base64","resolve_path","result","step","JSZipSync","XML_HEADER","attregexg","tagregex","nsregex","nsregex2","parsexmltag","skip_root","skip_LC","z","eq","quot","trim","strip_ns","encodings","rencoding","unescapexml","encregex","coderegex","text","decregex","charegex","escapexml","escapexmltag","htmlcharegex","escapehtml","escapexlml","xlml_fixstr","entregex","entrepl","xlml_unfixstr","parsexmlbool","utf8read","orig","utf8readb","ww","corpus","utf8readc","matchtag","mtcache","htmldecode","entities","vtregex","vt_cache","vtvregex","vtmregex","parseVector","matches","baseType","res","WTF","wtregex","writetag","wxt_helper","writextag","write_w3cdtf","toISOString","write_vt","xlsx","XMLNS","XLMLNS","read_double_le","Infinity","write_double_le","bs","av","isFinite","LN2","__lpp4","___lpp4","___toBuffer","__readUInt16LE","___utf16le","__hexlify","___hexlify","__utf8","__readUInt8","___utf8","__lpstr","___lpstr","__cpstr","___cpstr","__lpwstr","___lpwstr","__double","___double","__8lpp4","___8lpp4","is_buf","isBuffer","readUInt32LE","readDoubleLE","__readInt16LE","__readInt32BE","oI","oR","loc","oo","lens","__writeUInt32LE","__writeInt32LE","__writeUInt16LE","WriteShift","cppayload","end","hexstr","fld","pos","parsenoop","recordhopper","cb","tmpbyte","cntbyte","RT","XLSBRecordEnum","buf_array","blksz","newblk","curbuf","endbuf","next","_bufs","write_record","ba","XLSBRE","shift_cell_xls","cell","cRel","rRel","biff","shift_range_xls","range","encode_cell_xls","encode_cell","fix_col","fix_row","encode_range_xls","encode_row","encode_col","OFFCRYPTO","make_offcrypto","_crypto","crypto","rc4","md5","hex","createHash","update","digest","decode_row","rowstr","unfix_row","row","cstr","decode_col","colstr","unfix_col","col","split_cell","decode_cell","decode_range","encode_range","cs","ce","safe_decode_range","safe_format_cell","XF","numFmtId","format_cell","sheet_to_workbook","sheet","sheets","SheetNames","Sheets","sheet_add_aoa","_ws","ws","_R","_C","_origin","_range","__R","__C","sheetStubs","cellDates","cell_ref","aoa_to_sheet","write_UInt32LE","parse_XLWideString","cchCharacters","write_XLWideString","_null","parse_StrRun","ich","ifnt","write_StrRun","run","parse_RichStr","rgsStrRun","dwSizeStrRun","write_RichStr","parse_BrtCommentText","write_BrtCommentText","parse_XLSBCell","iStyleRef","write_XLSBCell","parse_XLSBCodeName","write_XLSBCodeName","parse_XLNullableWideString","write_XLNullableWideString","parse_XLNameWideString","parse_RelID","write_RelID","parse_RkNumber","fX100","fInt","RK","write_RkNumber","d100","parse_RfX","write_RfX","parse_UncheckedRfX","write_UncheckedRfX","parse_Xnum","write_Xnum","parse_BrtColor","xColorType","index","nTS","bR","bG","bB","auto","icv","XLSIcv","rgb","rgb2Hex","theme","tint","write_BrtColor","parse_FontFlags","fBold","fItalic","fUnderline","fStrikeout","fOutline","fShadow","fCondense","fExtend","write_FontFlags","font","grbit","italic","strike","outline","shadow","condense","extend","parse_ClipboardFormatOrString","ClipFmt","3","8","14","parse_ClipboardFormatOrAnsiString","parse_ClipboardFormatOrUnicodeString","VT_I2","VT_I4","VT_BOOL","VT_VARIANT","VT_UI4","VT_LPSTR","VT_FILETIME","VT_BLOB","VT_CF","VT_VECTOR","VT_STRING","VT_USTR","VT_CUSTOM","DocSummaryPIDDSI","SummaryPIDSI","SpecialProperties","DocSummaryRE","SummaryRE","CountryEnum","XLSFillPattern","rgbify","_XLSIcv","BErr","RBErr","ct2type","CT_LIST","workbooks","xlsm","xlsb","xlam","xltx","strs","comments","charts","dialogs","macros","styles","type2ct","new_ct","rels","links","coreprops","extprops","custprops","themes","calcchains","vba","drawings","TODO","xmlns","parse_ct","ctext","Extension","ContentType","PartName","CT","calcchain","sst","style","CTYPE_XML_ROOT","xsd","xsi","CTYPE_DEFAULTS","write_ct","f1","bookType","f2","f3","RELS","WB","SHEET","HLINK","VML","XPATH","XMISS","XLINK","CXML","CXMLP","VBA","get_rels_path","parse_rels","currentFilePath","hash","rel","Type","Target","Id","TargetMode","canonictarget","RELS_ROOT","write_rels","rid","RELS_EXTERN","add_rels","rId","relobj","targetmode","CT_ODS","parse_manifest","Rn","FEtag","xlml_normalize","xlmlregex","exec","write_manifest","manifest","write_rdf_type","write_rdf_has","write_rdf","rdf","write_meta_ods","CORE_PROPS","CORE_PROPS_REGEX","parse_core_props","cur","CORE_PROPS_XML_ROOT","dc","dcterms","dcmitype","cp_doit","write_core_props","Props","CreatedDate","ModifiedDate","EXT_PROPS","PseudoPropsPairs","load_props_pairs","HP","TOP","hp","parts","Worksheets","NamedRanges","DefinedNames","Chartsheets","ChartNames","parse_ext_props","xml","HeadingPairs","TitlesOfParts","EXT_PROPS_XML_ROOT","vt","write_ext_props","W","Application","CUST_PROPS","custregex","parse_cust_props","toks","warn","CUST_PROPS_XML_ROOT","write_cust_props","pid","XLMLDocPropsMap","Title","Subject","Author","Keywords","Comments","LastAuthor","RevNumber","LastPrinted","Category","Manager","Company","AppVersion","ContentStatus","Identifier","Language","evert_XLMLDPM","xlml_set_prop","xlml_write_docprops","xlml_write_custprops","Custprops","BLACKLIST","parse_FILETIME","dwLowDateTime","dwHighDateTime","write_FILETIME","parse_lpstr","pad","parse_lpwstr","parse_VtStringBase","stringType","parse_VtString","parse_VtUnalignedString","parse_VtVecUnalignedLpstrValue","ret","parse_VtVecUnalignedLpstr","parse_VtHeadingPair","headingString","parse_TypedPropertyValue","headerParts","parse_VtVecHeadingPairValue","cElements","parse_VtVecHeadingPair","parse_dictionary","CodePage","dict","parse_BLOB","bytes","parse_ClipboardData","Size","write_TypedPropertyValue","parse_PropertySet","PIDSI","start_addr","NumProps","Dictionary","DictObj","PropID","Offset","PropH","fail","piddsi","oldpos","parsebool","XLSPSSkip","guess_property_type","write_PropertySet","entries","RE","hdr","piao","pr","pio","pinfo","parse_PropertySetStream","NumSets","FMTID0","FMTID1","Offset0","Offset1","SystemIdentifier","PSet1","PSet0","rval","FMTID","write_PropertySetStream","entries2","clsid2","ps0","ps1","parsenoop2","writezeroes","parslurp","writebool","parseuint16","writeuint16","parseuint16a","parse_Bes","write_Bes","parse_ShortXLUnicodeString","cch","fHighByte","parse_XLUnicodeRichExtendedString","cbExtRst","fExtSt","fRichSt","width","cRun","write_XLUnicodeRichExtendedString","xlstr","nfmts","otext","parse_XLUnicodeStringNoCch","parse_XLUnicodeString","parse_XLUnicodeString2","write_XLUnicodeString","parse_ControlInfo","accel","parse_URLMoniker","extra","parse_FileMoniker","ansiPath","unicodePath","parse_HyperlinkMoniker","parse_HyperlinkString","parse_Hyperlink","sVer","displayName","targetFrameName","moniker","oleMoniker","guid","fileTime","Loc","Tooltip","write_Hyperlink","hl","F","parse_LongRGBA","parse_LongRGB","parse_XLSCell","rw","ixfe","write_XLSCell","parse_frtHeader","rt","parse_OptXLUnicodeString","parse_XTI","iSupBook","itabFirst","itabLast","parse_RkRec","parse_AddinUdf","udfName","parse_Ref8U","rwFirst","rwLast","colFirst","colLast","write_Ref8U","parse_RefU","parse_Ref","parse_FtCmo","ot","id","parse_FtNts","fSharedNote","parse_FtCf","cf","parse_FtSkip","FtTab","parse_FtArray","fts","ft","parse_BOF","BIFFVer","write_BOF","wb","parse_InterfaceHdr","parse_WriteAccess","UserName","write_WriteAccess","b8","parse_WsBool","fDialog","parse_BoundSheet8","hidden","hs","write_BoundSheet8","parse_SST","ucnt","Count","Unique","write_SST","parse_ExtSST","extsst","dsst","parse_Row","miyRw","level","hpt","parse_ForceFullCalculation","fullcalc","parse_RecalcId","parse_DefaultRowHeight","fl","Unsynced","DyZero","ExAsc","ExDsc","parse_Window1","xWn","yWn","dxWn","dyWn","iTabCur","iTabFirst","ctabSel","wTabRatio","Pos","Dim","Flags","CurTab","FirstTab","Selected","TabRatio","write_Window1","parse_Window2","RTL","write_Window2","parse_Pane","parse_Font","dyHeight","write_Font","b5","parse_LabelSst","isst","write_LabelSst","os","parse_Label","write_Label","parse_Format","fmtstr","write_Format","parse_BIFF2Format","parse_Dimensions","write_Dimensions","parse_RK","rkrec","rknum","parse_MulRk","rkrecs","lastcol","parse_MulBlank","ixfes","parse_CellStyleXF","patternType","cellStyles","alc","fWrap","alcV","fJustLast","trot","cIndent","fShrinkToFit","iReadOrder","fAtrNum","fAtrFnt","fAtrAlc","fAtrBdr","fAtrPat","fAtrProt","dgLeft","dgRight","dgTop","dgBottom","icvLeft","icvRight","grbitDiag","icvTop","icvBottom","icvDiag","dgDiag","icvFore","icvBack","fsxButton","parse_XF","fStyle","write_XF","ixfeP","parse_Guts","write_Guts","guts","parse_BoolErr","write_BoolErr","parse_Number","xnum","write_Number","parse_XLHeaderFooter","parse_SupBook","ctab","sbcch","virtPath","rgst","parse_ExternName","fBuiltIn","fWantAdvise","fWantPict","fOle","fOleLink","fIcon","Name","XLSLblBuiltIn","parse_Lbl","chKey","cce","itab","npflen","rgce","parse_NameParsedFormula","parse_ExternSheet","parse_BIFF5ExternSheet","parse_NameCmt","cchName","cchComment","comment","parse_ShrFmla","ref","cUse","parse_SharedParsedFormula","parse_Array","parse_ArrayParsedFormula","parse_MTRSettings","fMTREnabled","fUserSetThreadCount","cUserThreadCount","parse_NoteSh","idObj","stAuthor","parse_Note","parse_MergeCells","merges","cmcs","write_MergeCells","parse_Obj","parse_BIFF5Obj","cmo","parse_BIFF5OT","parse_TxO","texts","lastobj","cchText","parse_HLink","hlink","write_HLink","parse_HLinkTooltip","wzTooltip","write_HLinkTooltip","TT","parse_Country","write_Country","parse_ClrtClient","ccv","parse_Palette","parse_XFCRC","cxfs","crc","parse_ColInfo","coldx","parse_Setup","footer","parse_ShtProps","area","write_RRTabId","parse_Blank","parse_Scl","parse_String","parse_ImData","env","lcb","parse_BIFF2STR","parse_BIFF2NUM","num","write_BIFF2NUM","write_BIFF2Cell","parse_BIFF2INT","write_BIFF2INT","parse_BIFF2STRING","parse_BIFF2FONTXTRA","parse_RString","DBF","dbf_codepage_map","dbf_reverse_map","DBF_SUPPORTED_VERSIONS","dbf_to_aoa","memo","vfp","l7","nrow","fpos","rlen","current_cp","fields","field","hend","sheetRows","dbf_to_sheet","dbf_to_workbook","_RLEN","sheet_to_dbf","codepage","aoa","sheet_to_json","headers","hcnt","coltypes","guess","_guess","hf","_f","hb","rout","_s","to_workbook","to_sheet","from_sheet","SYLK","sylk_escapes","AA","BA","CA","DA","HA","JA","AE","BE","CE","HE","AI","BI","CI","HI","AO","BO","CO","DO","HO","AU","BU","CU","HU","Aa","Ba","Ca","Da","Ha","Ja","Ae","Be","Ce","He","Ai","Bi","Ci","Hi","Ao","Bo","Co","Do","Ho","Au","Bu","Cu","Hu","KC","Kc","DN","Dn","Hy","5","6","7","sylk_char_regex","sylk_char_fn","_","decode_sylk_char","newcc","sylk_to_aoa","sylk_to_aoa_str","records","rj","formats","next_cell_format","sht","rowinfo","colinfo","cw","Mval","rstr","record","C_seen_K","C_seen_X","formula","rc_to_a1","F_seen","wch","process_col","hpx","pt2px","sylk_to_sheet","aoasht","sylk_to_workbook","write_ws_cell_sylk","a1_to_rc","write_ws_cols_sylk","cols","rec","wpx","width2px","px2char","write_ws_rows_sylk","rows","px2pt","sheet_to_sylk","preamble","RS","coord","DIF","dif_to_aoa","dif_to_aoa_str","metadata","dif_to_sheet","dif_to_workbook","sheet_to_dif","push_field","topic","push_value","ETH","eth_to_aoa","eth_to_sheet","eth_to_workbook","sep","meta","sheet_to_eth_data","sheet_to_eth","PRN","set_text_arr","prn_to_aoa_str","lines","guess_seps","guess_sep_weights","guess_sep","instr","dsv_to_sheet_str","sepcc","_re","finish_cell","fuzzyfmla","cellText","cellNF","outer","prn_to_sheet_str","prn_to_sheet","firstbyte","prn_to_workbook","sheet_to_prn","read_wb_ID","OLD_WTF","WK_","lotushopper","Enum","WK1Enum","lotus_to_workbook","lotus_to_workbook_buf","sidx","snames","refguess","WK3Enum","qpro","vers","parse_RANGE","parse_cell","parse_LABEL","parse_INTEGER","parse_NUMBER","parse_FORMULA","parse_cell_3","parse_LABEL_16","parse_NUMBER_18","parse_NUMBER_17","v1","v2","parse_FORMULA_19","parse_NUMBER_25","parse_NUMBER_27","parse_FORMULA_28","parse_rpr","rpr","pass","uval","family","valign","parse_rs","tregex","rpregex","parse_r","rregex","rend","rs","filter","rs_to_html","nlregex","parse_rpr2","intro","outro","r_to_html","terms","sitregex","sirregex","sirphregex","parse_si","html","cellHTML","sstr0","sstr1","sstr2","parse_sst_xml","count","uniqueCount","SST","straywsregex","write_sst_xml","bookSST","main","sitag","parse_BrtBeginSst","parse_sst_bin","R_n","write_BrtBeginSst","write_BrtSSTItem","write_sst_bin","_JS2ANSI","parse_CRYPTOVersion","Major","Minor","parse_DataSpaceVersionInfo","U","parse_DataSpaceMapEntry","comps","parse_DataSpaceMap","parse_DataSpaceDefinition","parse_TransformInfoHeader","parse_Primary","ename","cmode","parse_EncryptionHeader","AlgID","valid","AlgIDHash","KeySize","ProviderType","CSPName","parse_EncryptionVerifier","Salt","Verifier","VerifierHash","parse_EncryptionInfo","parse_EncInfoStd","parse_EncInfoExt","parse_EncInfoAgl","verifier","KeyData","encryptedHmacKey","encryptedHmacValue","encs","uri","parse_RC4CryptoHeader","EncryptionVersionInfo","EncryptionHeader","EncryptionVerifier","parse_RC4Header","EncryptedVerifier","EncryptedVerifierHash","crypto_CreatePasswordVerifier_Method1","Password","PasswordArray","PasswordByte","Intermediate1","Intermediate2","Intermediate3","PasswordDecoded","crypto_CreateXorArray_Method1","PadArray","InitialCode","XorMatrix","Ror","Byte","XorRor","byte1","byte2","CreateXorKey_Method1","XorKey","CurrentElement","Char","password","Temp","PasswordLastChar","PadIndex","Index","ObfuscationArray","crypto_DecryptData_Method1","Data","XorArrayIndex","XorArray","Value","crypto_MakeXorDecryptor","parse_XORObfuscation","verificationBytes","insitu","parse_FilePassHeader","Info","parse_FilePass","RTF","rtf_to_sheet","rtf_to_sheet_str","rtf_to_workbook","sheet_to_rtf","hex2RGB","rgb2HSL","G","H6","L2","hsl2RGB","hsl","X","h6","rgb_tint","DEF_MDW","MAX_MDW","MIN_MDW","MDW","px","char2width","chr","cycle_width","collw","find_mdw_colw","delta","_MDW","coll","customWidth","DEF_PPI","PPI","pt","XLMLPatternTypeMap","parse_borders","Borders","border","diagonalUp","diagonalDown","parse_fills","Fills","bgColor","indexed","fgColor","parse_fonts","Fonts","bold","underline","vertAlign","scheme","themeElements","clrScheme","parse_numFmts","NumberFmt","formatCode","write_numFmts","NF","cellXF_uint","cellXF_bool","parse_cellXfs","xf","CellXf","alignment","vertical","horizontal","textRotation","indent","wrapText","write_cellXfs","cellXfs","parse_sty_xml","numFmtRegex","cellXfRegex","fillsRegex","fontsRegex","bordersRegex","STYLES_XML_ROOT","write_sty_xml","parse_BrtFmt","stFmtCode","write_BrtFmt","parse_BrtFont","bls","bCharSet","charset","write_BrtFont","sss","STY","XLSBFillPTNames","rev_XLSBFillPTNames","parse_BrtFill","write_BrtFill","fls","parse_BrtXF","ixfeParent","ifmt","write_BrtXF","flow","write_Blxf","parse_BrtBorder","write_BrtBorder","write_BrtStyle","xfId","builtinId","write_BrtBeginTableStyles","defTableStyle","defPivotStyle","parse_sty_bin","write_FMTS_bin","write_FONTS_bin","write_FILLS_bin","write_BORDERS_bin","write_CELLSTYLEXFS_bin","fontId","fillId","borderId","write_CELLXFS_bin","write_STYLES_bin","write_DXFS_bin","write_TABLESTYLES_bin","write_COLORPALETTE_bin","write_sty_bin","THEME","XLSXThemeClrScheme","parse_clrScheme","lastClr","parse_fontScheme","parse_fmtScheme","clrsregex","fntsregex","fmtsregex","parse_themeElements","themeltregex","parse_theme_xml","write_theme","Themes","themeXLSX","parse_Theme","dwThemeVersion","themeXML","parse_ColorTheme","parse_FullColorExt","xclrType","nTintShade","xclrValue","parse_IcvXF","parse_XFExtGradient","parse_ExtProp","extType","parse_XFExt","cexts","ext","update_xfext","xfext","xfe","parse_cc_xml","parse_BrtCalcChainItem$","parse_cc_bin","parse_xlink_xml","parse_xlink_bin","parse_drawing","IMG","DRAW","_shapeid","write_comments_vml","csize","bbox","joinstyle","gradientshapeok","coordsize","fillopts","angle","fillparm","fillxml","shadata","fillcolor","strokecolor","sheet_insert_comments","encoded","author","parse_comments_xml","authors","commentList","authtag","cmnttag","cm","authorId","textMatch","CMNT","CMNT_XML_ROOT","write_comments_xml","iauthor","parse_BrtBeginComment","rfx","write_BrtBeginComment","parse_BrtCommentAuthor","write_BrtCommentAuthor","parse_comments_bin","write_comments_bin","CT_VBA","make_vba_xls","newcfb","newpath","fill_vba_xls","VBAFMTS","parse_ds_bin","parse_ds_xml","parse_ms_bin","parse_ms_xml","DS","MS","rcregex","rcbase","rcfunc","fstr","crefregex","$0","$4","$5","shift_formula_str","shift_formula_xlsx","_xlfn","parseread1","parse_ColRelU","parse_RgceArea","parse_RgceArea_BIFF2","parse_RgceAreaRel","parse_RgceLoc","parse_RgceLoc_BIFF2","parse_RgceElfLoc","fQuoted","parse_RgceLocRel","parse_RgceLocRel_BIFF2","cl","rl","parse_PtgArea","parse_PtgArea3d","ixti","parse_PtgAreaErr","parse_PtgAreaErr3d","parse_PtgAreaN","parse_PtgArray","parse_PtgAttrBaxcel","bitSemi","bitBaxcel","parse_PtgAttrChoose","parse_PtgAttrGoto","bitGoto","parse_PtgAttrIf","bitIf","parse_PtgAttrIfError","parse_PtgAttrSemi","parse_PtgAttrSpaceType","parse_PtgAttrSpace","parse_PtgAttrSpaceSemi","parse_PtgRef","parse_PtgRefN","parse_PtgRef3d","parse_PtgFunc","iftab","FtabArgc","Ftab","parse_PtgFuncVar","cparams","tab","parsetab","Cetab","parse_PtgAttrSum","parse_PtgExp","parse_PtgErr","parse_PtgInt","parse_PtgBool","parse_PtgNum","parse_PtgStr","parse_SerAr","parse_PtgExtraMem","parse_PtgExtraArray","parse_PtgName","nameindex","parse_PtgNameX","parse_PtgNameX_BIFF5","parse_PtgMemArea","parse_PtgMemFunc","parse_PtgRefErr","parse_PtgRefErr3d","parse_PtgMemErr","parse_PtgMemNoMem","parse_PtgTbl","parse_PtgElfLoc","parse_PtgElfNoop","parse_PtgElfCol","parse_PtgElfColS","parse_PtgElfColSV","parse_PtgElfColV","parse_PtgElfLel","parse_PtgElfRadical","parse_PtgElfRadicalLel","parse_PtgElfRadicalS","parse_PtgElfRw","parse_PtgElfRwV","PtgListRT","parse_PtgList","coltype","parse_PtgSxName","parse_PtgSheet","parse_PtgEndSheet","parse_PtgMemAreaN","parse_PtgMemNoMemN","parse_PtgAttrNoop","PtgTypes","PtgDupes","Ptg18","Ptg19","parse_RgbExtra","parse_Rgce","ptgs","stringify_array","PtgBinOp","PtgAdd","PtgConcat","PtgDiv","PtgEq","PtgGe","PtgGt","PtgLe","PtgLt","PtgMul","PtgNe","PtgPower","PtgSub","quoteCharacters","formula_quote_sheet_name","sname","get_ixti_raw","supbooks","XTI","SID","get_ixti","stringify_formula","stack","nameidx","last_sp","sp","fflen","argc","func","lbl","names","XLSXFutureFunctions","externbook","bookidx","ixtidata","lp","rp","sharedf","parsedf","fnd","arrayf","PtgNonDisp","_left","rgcb","parse_XLSCellParsedFormula","parse_FormulaValue","write_FormulaValue","parse_Formula","cbf","shared","write_Formula","o1","o3","bf","parse_XLSBParsedFormula","parse_XLSBArrayParsedFormula","parse_XLSBCellParsedFormula","parse_XLSBNameParsedFormula","parse_XLSBSharedParsedFormula","ods_to_csf_formula","csf_to_ods_formula","ods_to_csf_3D","csf_to_ods_3D","_ssfopts","WS","browser_has_Map","Map","get_sst_id","revarr","col_obj_w","default_margins","margins","defs","left","right","top","bottom","get_cell_style","revssf","ssf","applyNumberFormat","safe_format","fmtid","fillid","raw_rgb","check_ws","parse_ws_xml_dim","mergecregex","sheetdataregex","hlinkregex","dimregex","colregex","afregex","marginregex","sheetprregex","svsregex","parse_ws_xml","data1","data2","mtch","sheetPr","parse_ws_xml_sheetpr","ridx","svs","parse_ws_xml_sheetviews","columns","parse_ws_xml_cols","parse_ws_xml_data","afilter","parse_ws_xml_autofilter","_merge","parse_ws_xml_hlinks","parse_ws_xml_margins","tmpref","write_ws_xml_merges","codeName","CodeName","write_ws_xml_sheetpr","needed","vbaraw","cname","Workbook","sheetprot_deffalse","sheetprot_deftrue","write_ws_xml_protection","location","Rel","tooltip","rng","margin","write_ws_xml_margins","seencol","coli","colm","colM","write_ws_xml_cols","write_ws_xml_autofilter","Names","Sheet","Ref","sviewregex","Views","rightToLeft","write_ws_xml_sheetviews","sview","workbookViewId","write_ws_xml_cell","oldt","oldv","Strings","revStrings","cellregex","rowregex","isregex","refregex","match_v","match_f","sdata","sstr","ftag","cells","cref","tagr","tagc","do_format","rowobj","rowrite","marr","marrlen","xlen","ht","outlineLevel","rslice","cellFormula","xlfn","___f","si","_tag","_r","write_ws_xml_data","height","_cell","customHeight","WS_XML_ROOT","write_ws_xml","rdata","_drawing","sheetFormat","defaultRowHeight","baseColWidth","outlineLevelRow","relc","ignoreEC","numberStoredAsText","sqref","parse_BrtRowHdr","write_BrtRowHdr","ncolspan","lcs","caddr","first","last","write_row_header","parse_BrtWsDim","write_BrtWsDim","parse_BrtWsFmtInfo","parse_BrtWsProp","write_BrtWsProp","parse_BrtCellBlank","write_BrtCellBlank","ncell","parse_BrtCellBool","fBool","write_BrtCellBool","parse_BrtCellError","bError","parse_BrtCellIsst","write_BrtCellIsst","parse_BrtCellReal","write_BrtCellReal","parse_BrtCellRk","write_BrtCellRk","parse_BrtCellSt","write_BrtCellSt","parse_BrtFmlaBool","parse_BrtFmlaError","parse_BrtFmlaNum","parse_BrtFmlaString","parse_BrtMergeCell","write_BrtMergeCell","write_BrtBeginMergeCells","parse_BrtHLink","relId","display","write_BrtHLink","locidx","parse_BrtPane","parse_BrtArrFmla","fAlwaysCalc","parse_BrtShrFmla","write_BrtColInfo","BrtMarginKeys","parse_BrtMargins","write_BrtMargins","parse_BrtBeginWsView","write_BrtBeginWsView","write_BrtCellIgnoreEC","write_BrtSheetProtection","parse_BrtDVal","parse_BrtDVal14","parse_ws_bin","ai","af","aii","_d","write_ws_bin_cell","write_CELLTABLE","cap","write_MERGECELLS","write_COLINFOS","write_IGNOREECS","write_HLINKS","write_LEGACYDRAWING","write_AUTOFILTER","write_WSVIEWS2","write_WSFMTINFO","write_SHEETPROTECT","write_ws_bin","parse_Cache","nf","parse_chart","csheet","nc","CHART","CHARTEX","CS","parse_cs_xml","parse_BrtCsProp","parse_cs_bin","WBPropsDef","WBViewDef","SheetDef","CalcPrDef","push_defaults_array","push_defaults","parse_wb_defaults","WBProps","CalcPr","WBView","safe1904","badchars","check_ws_name","_good","check_wb_names","N","codes","cn","check_wb","wbnsregex","parse_wb_xml","dname","dnstart","Hidden","Comment","localSheetId","WB_XML_ROOT","write_wb_xml","write_names","workbookPr","sheetId","parse_BrtBundleSh","iTabID","strRelID","write_BrtBundleSh","parse_BrtWbProp","defaultThemeVersion","strName","autoCompressPictures","backupFile","checkCompatibility","filterPrivacy","hidePivotFieldList","promptedSolutions","publishItems","refreshAllConnections","saveExternalLinkValues","showBorderUnselectedTables","showInkAnnotation","showObjects","showPivotChartFilter","updateLinks","write_BrtWbProp","parse_BrtFRTArchID$","ArchID","parse_BrtName","Ptg","parse_wb_bin","write_BUNDLESHS","viz","write_BrtFileVersion","write_BrtBookView","write_BOOKVIEWS","vistab","write_wb_bin","parse_wb","parse_ws","parse_cs","parse_ms","parse_ds","parse_sty","parse_theme","parse_sst","parse_cmnt","parse_cc","parse_xlink","write_wb","write_ws","write_sty","write_sst","write_cmnt","attregexg2","attregex2","xlml_parsexmltag","words","xlml_parsexmltagobj","xlml_format","xlml_set_custprop","oval","safe_format_xlml","process_style_xlml","stag","Interior","I","Pattern","ID","parse_xlml_data","csty","sid","StyleID","interiors","Parent","UTC","Formula","ArrayRange","xlml_clean_comment","parse_xlml_xml","opening","ishtml","HTML_","tmp","sheetnames","cursheet","sheetname","dtag","didx","fidx","pidx","cstys","wsprops","lastIndex","raw_Rn3","HRef","HRefScreenTip","MergeAcross","MergeDown","cma","cmd","AutoFitHeight","Height","Format","ssfidx","Width","_col","Span","_NamedRange","_DefinedName","RefersTo","AutoFilter","Range","parse_fods","Margin","pagemargins","Top","Left","Right","Bottom","bookSheets","bookProps","parse_xlml","fix_read_opts","write_props_xlml","write_wb_xlml","write_sty_xlml","write_name_xlml","write_names_xlml","write_ws_xlml_names","write_ws_xlml_wsopts","objects","scenarios","selectLockedCells","selectUnlockedCells","write_ws_xlml_comment","write_ws_xlml_cell","attr","mi","_v","write_ws_xlml_row","write_ws_xlml_table","skip","write_ws_xlml","write_xlml","parse_compobj","AnsiUserType","AnsiClipboardFormat","Reserved1","UnicodeClipboardFormat","Reserved2","slurp","XLSRecordEnum","ll","safe_format_xf","make_cell","parse_workbook","lastcell","cmnt","rngC","rngR","temp_val","country","Directory","last_formula","cur_sheet","Preamble","last_cell","cell_valid","XFs","palette","get_rgb","process_cell_style","line","xfd","addcell","file_depth","afi","rrtabid","lastuser","winlocked","wtf","last_lbl","last_Rn","BIFF2Fmt","BIFF2FmtTable","FilterDatabases","seen_codepage","RecordType","Date1904","WriteProtect","cpval","CalcRefMode","FullCalc","ExternCount","tmpri","fakebs8","_fr","_fc","_fe","_arraystart","_j","_ixfe","b4idx","b2idx","TxO","ImData","noteobj","Encryption","Metadata","Country","PSCLSID","SI","DSI","UDI","parse_xls_props","DocSummary","Summary","write_xls_props","Keys","DSEntries","SEntries","CEntries","CEntries2","parse_xlscfb","CompObj","WorkbookP","bookVBA","bookFiles","write_xlscfb","wbpath","write_biff_buf","XLSRE","write_biff_rec","write_biff_continue","write_BIFF2BERR","write_BIFF2LABEL","write_ws_biff2_cell","write_ws_biff2","write_biff2_buf","write_FONTS_biff8","write_FMTS_biff8","write_FEAT","write_CELLXFS_biff8","write_ws_biff8_hlinks","HL","write_ws_biff8_cell","write_ws_biff8","_WB","_sheet","MAX_ROWS","write_biff8_global","_sheets","_wb","blen","write_biff8_buf","fix_write_opts","html_to_sheet","mtch2","hd","midx","colspan","rowspan","_t","html_to_book","make_html_row","editable","make_html_preamble","_BEGIN","_END","sheet_to_html","_row","BEGIN","END","_preamble","sheet_add_dom","or_R","or_C","getElementsByTagName","is_dom_element_hidden","elts","hasAttribute","getAttribute","innerHTML","parse_dom_table","table_to_book","element","get_computed_style","get_get_computed_style_function","getPropertyValue","ownerDocument","defaultView","getComputedStyle","parse_content_xml","parse_text_p","fixed","number_formats","day","month","year","hours","minutes","seconds","era","quarter","sheetag","rowtag","textptag","NFtag","ctag","textp","textpidx","textR","row_ol","number_format_map","mrange","mR","mC","rowpeat","colpeat","atag","_Ref","creator","creatoridx","isstub","intable","rptR","rpt","nrange","ptp","parse_ods","ods","write_styles_ods","write_content_ods","write_text_p","null_cell_xml","covered_cell_xml","_Fref","text_p","_tgt","write_automatic_styles_ods","fods","write_ods","write_sheet_index","write_obj_str","write_htm_str","write_csv_str","sheet_to_csv","write_slk_str","write_dif_str","write_prn_str","write_rtf_str","write_txt_str","sheet_to_txt","write_dbf_buf","write_eth_str","fix_opts_func","get_sheet_type","safe_parse_wbrels","wbrels","safe_parse_sheet","relsPath","sheetRels","stype","dfile","drelsp","draw","chartp","crelsp","strip_front_slash","binname","dir","link","propdata","deps","bookDeps","wbsheets","wbext","wbrelsi","wbrelsfile","nmode","wsloop","snjseen","snj","Deps","Styles","bin","parse_xlsxcfb","dsm","seds","einfo","decrypt_agile","decrypt_std76","foo","vbafmt","_sn","_i","wsrels","_type","need_vml","rId1","read_cfb","read_zip","read_plaintext","read_plaintext_raw","read_utf16","bstrify","read_prn","readSync","ab","vu","write_cfb_ctr","write_zip_type","oopts","generate","encrypt_agile","write_cfb_type","write_string_type","bom","write_stxt_type","write_binary_type","writeSync","resolve_book_type","_BT","writeFileAsync","_cb","make_json_row","defval","isempty","enumerable","__rowNum__","rawNumbers","outi","counter","CC","blankrows","qreg","make_csv_row","FS","txt","forceQuotes","endregex","skipHidden","strip","sheet_to_formulae","cmds","sheet_add_json","js","skipHeader","JS","sheet_get_cell","json_to_sheet","get_formulae","make_csv","make_json","make_formulae","table_to_sheet","sheet_to_row_object_array","add_consts","get_default","ws_get_cell_stub","RC","wb_sheet_idx","sh","book_new","book_append_sheet","book_set_sheet_visibility","vis","cell_set_number_format","cell_set_hyperlink","cell_set_internal_link","cell_add_comment","sheet_set_array_formula","rngstr","Readable","write_csv_stream","stream","BOM","_read","write_html_stream","write_json_stream","objectMode","to_json","to_html","to_csv","readFile","requireObjectCoercible","repeat","fixRegExpWellKnownSymbolLogic","isRegExp","anObject","speciesConstructor","advanceStringIndex","callRegExpExec","regexpExec","arrayPush","MAX_UINT32","SUPPORTS_Y","SPLIT","nativeSplit","maybeCallNative","internalSplit","separator","limit","string","lim","lastLength","output","ignoreCase","multiline","unicode","sticky","lastLastIndex","separatorCopy","source","splitter","regexp","done","rx","unicodeMatching","is","startOfUTCWeekYear","dirtyDate","dirtyOptions","requiredArgs","locale","localeFirstWeekContainsDate","firstWeekContainsDate","defaultFirstWeekContainsDate","getUTCWeekYear","firstWeek","setUTCFullYear","setUTCHours","startOfUTCWeek","MILLISECONDS_IN_WEEK","getUTCWeek","toDate","diff","isFontAwesome5","some","iconType","isSvgPath","icon","SIZE_MAP","VIcon","disabled","required","computed","medium","hasClickListener","Boolean","listeners$","methods","getIcon","iconName","$slots","getSize","sizes","xSmall","small","large","xLarge","explicitSize","getDefaultData","attrs","attrs$","applyColors","themeClasses","renderFontIcon","newChildren","delimiterIndex","isMaterialIcon","fontSize","renderSvgIcon","wrapperData","svgData","viewBox","role","renderSvgIconComponent","component","$_wrapperFor","$reduce","arrayMethodIsStrict","arrayMethodUsesToLength","STRICT_METHOD","USES_TO_LENGTH","forced","reduce","callbackfn","Subscriber","_super","destinationOrNext","complete","_this","syncErrorValue","syncErrorThrown","syncErrorThrowable","isStopped","destination","add","SafeSubscriber","create","subscriber","_next","_error","_complete","unsubscribe","closed","_unsubscribeAndRecycle","_parentOrParents","_parentSubscriber","observerOrNext","_context","useDeprecatedSynchronousErrorHandling","__tryOrSetError","__tryOrUnsub","wrappedComplete","parent","_unsubscribe","toAbsoluteIndex","copyWithin","to","inc","classof","TypeError","pluck","properties","plucker","mapper","currentProp","DOMIterables","createNonEnumerableProperty","COLLECTION_NAME","Collection","CollectionPrototype","DO_NOT_EXPORT_JSZIP","globalThis","self","require","_dereq_","_keyStr","utf8","chr2","chr3","enc1","enc2","enc3","enc4","CompressedObject","compressedSize","uncompressedSize","compressionMethod","compressedContent","getCompressedContent","STORE","magic","compress","uncompress","compressInputType","uncompressInputType","DEFLATE","4","getTypeOf","iTop","DataReader","checkOffset","checkIndex","newIndex","setIndex","byteAt","readInt","readString","transformTo","readData","lastIndexOfSignature","sig","readDate","dostime","binary","createFolders","string2binary","string2Uint8Array","uint8Array2String","array","string2Blob","buffer","arrayBuffer2Blob","outputType","checkSupport","MAX_VALUE_16BITS","MAX_VALUE_32BITS","pretty","findCompression","object","USE_TYPEDARRAY","Uint32Array","pako","deflateRaw","inflateRaw","9","clone","newObj","support","compressions","10","ZipEntries","zipEntries","fileName","decompressed","optimizedBinaryString","fileComment","zipComment","11","12","Uint8ArrayReader","NodeBufferReader","13","signature","nodeBuffer","StringWriter","Uint8ArrayWriter","getRawData","getBinaryData","nodebuffer","dataToString","asUTF8","utf8decode","utf8encode","ZipObject","_initialMetadata","asText","asUint8Array","asArrayBuffer","decToHex","prepareFileAttrs","fileAdd","dataType","parentFolder","folderAdd","substring","lastSlash","generateCompressedObjectFrom","generateZipParts","compressedObject","dosTime","dosDate","utfEncodedFileName","utfEncodedComment","useUTF8ForFileName","useUTF8ForComment","extraFields","unicodePathExtraField","unicodeCommentExtraField","fileRecord","LOCAL_FILE_HEADER","dirRecord","CENTRAL_FILE_HEADER","search","relativePath","fileClone","folder","arg","newFolder","remove","kids","writer","zipData","localDirLength","centralDirLength","compressionName","zipPart","dirEnd","CENTRAL_DIRECTORY_END","typeName","append","finalize","ZIP64_CENTRAL_DIRECTORY_LOCATOR","ZIP64_CENTRAL_DIRECTORY_END","DATA_DESCRIPTOR","15","StringReader","16","17","arraybuffer","uint8array","Builder","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","builder","getBlob","18","sig0","sig1","sig2","sig3","subarray","19","20","_utf8len","string2buf","m_pos","str_len","buf_len","utf8border","buf2string","c_len","utf16buf","applyFromCharCode","chunk","nextBoundary","21","identity","stringToArrayLike","arrayLikeToString","canUseApply","resultStr","arrayLikeToArrayLike","arrayFrom","arrayTo","transform","byteLength","inputType","supported","22","ZipEntry","jszipProto","loadOptions","checkSignature","expectedSignature","reader","readBlockEndOfCentral","diskNumber","diskWithCentralDirStart","centralDirRecordsOnThisDisk","centralDirRecords","centralDirSize","centralDirOffset","zipCommentLength","readBlockZip64EndOfCentral","zip64EndOfCentralSize","versionMadeBy","versionNeeded","zip64ExtensibleData","extraFieldId","extraFieldLength","extraFieldValue","extraDataSize","readBlockZip64EndOfCentralLocator","diskWithZip64CentralDirStart","relativeOffsetEndOfZip64CentralDir","disksCount","readLocalFiles","localHeaderOffset","readLocalPart","handleUTF8","readCentralDir","zip64","readCentralPart","readEndOfCentral","prepareReader","23","isEncrypted","bitFlag","useUTF8","prepareCompressedContent","previousIndex","compressedFileData","prepareContent","uncompressedFileData","localExtraFieldsLength","fileNameLength","checkCRC32","extraFieldsLength","fileCommentLength","diskNumberStart","internalFileAttributes","externalFileAttributes","readExtraFields","parseZIP64ExtraField","extraReader","upath","findExtraFieldUnicodePath","ucomment","findExtraFieldUnicodeComment","upathField","ucommentField","24","assign","deflate","constants","25","zlib_deflate","strings","zstream","Z_NO_FLUSH","Z_FINISH","Z_OK","Z_STREAM_END","Z_DEFAULT_COMPRESSION","Z_DEFAULT_STRATEGY","Z_DEFLATED","Deflate","chunkSize","windowBits","memLevel","strategy","opt","gzip","ended","chunks","strm","avail_out","status","deflateInit2","deflateSetHeader","deflator","_mode","next_in","avail_in","Buf8","next_out","onEnd","onData","buf2binstring","shrinkBuf","deflateEnd","flattenChunks","26","zlib_inflate","gzheader","Inflate","inflateInit2","inflateGetHeader","inflator","next_out_utf8","tail","utf8str","binstring2buf","arraySet","inflateEnd","ungzip","27","TYPED_OK","sources","fnTyped","src","src_offs","dest_offs","fnUntyped","setTyped","Buf16","Buf32","28","STR_APPLY_OK","STR_APPLY_UIA_OK","__","29","adler32","adler","s1","s2","30","Z_PARTIAL_FLUSH","Z_SYNC_FLUSH","Z_FULL_FLUSH","Z_BLOCK","Z_TREES","Z_NEED_DICT","Z_ERRNO","Z_STREAM_ERROR","Z_DATA_ERROR","Z_BUF_ERROR","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_BINARY","Z_TEXT","Z_UNKNOWN","31","makeTable","crcTable","32","trees","MAX_MEM_LEVEL","MAX_WBITS","DEF_MEM_LEVEL","LENGTH_CODES","LITERALS","L_CODES","D_CODES","BL_CODES","HEAP_SIZE","MAX_BITS","MIN_MATCH","MAX_MATCH","MIN_LOOKAHEAD","PRESET_DICT","INIT_STATE","EXTRA_STATE","NAME_STATE","COMMENT_STATE","HCRC_STATE","BUSY_STATE","FINISH_STATE","BS_NEED_MORE","BS_BLOCK_DONE","BS_FINISH_STARTED","BS_FINISH_DONE","OS_CODE","errorCode","rank","zero","flush_pending","pending","pending_buf","pending_out","total_out","flush_block_only","_tr_flush_block","block_start","strstart","put_byte","putShortMSB","read_buf","wrap","total_in","longest_match","cur_match","chain_length","max_chain_length","scan","best_len","prev_length","nice_match","w_size","_win","wmask","w_mask","prev","strend","scan_end1","scan_end","good_match","lookahead","match_start","fill_window","more","_w_size","window_size","hash_size","head","insert","ins_h","hash_shift","hash_mask","deflate_stored","flush","max_block_size","pending_buf_size","max_start","deflate_fast","hash_head","bflush","match_length","_tr_tally","max_lazy_match","last_lit","deflate_slow","max_insert","prev_match","match_available","deflate_rle","deflate_huff","configuration_table","Config","good_length","max_lazy","nice_length","max_chain","lm_init","DeflateState","gzhead","gzindex","last_flush","w_bits","hash_bits","dyn_ltree","dyn_dtree","bl_tree","l_desc","d_desc","bl_desc","heap","heap_len","heap_max","depth","l_buf","lit_bufsize","d_buf","opt_len","static_len","bi_buf","bi_valid","deflateResetKeep","data_type","_tr_init","deflateReset","deflateInit","old_flush","beg","hcrc","level_flags","bstate","_tr_align","_tr_stored_block","deflateInfo","33","GZheader","xflags","extra_len","34","BAD","TYPE","_in","_out","dmax","wsize","whave","wnext","hold","lcode","dcode","lmask","dmask","here","op","dist","from_source","lencode","distcode","lenbits","distbits","dolen","dodist","sane","35","inflate_fast","inflate_table","CODES","LENS","DISTS","Z_MEM_ERROR","HEAD","FLAGS","TIME","OS","EXLEN","EXTRA","NAME","COMMENT","HCRC","DICTID","DICT","TYPEDO","STORED","COPY_","COPY","TABLE","LENLENS","CODELENS","LEN_","LEN","LENEXT","DIST","DISTEXT","MATCH","LIT","CHECK","LENGTH","DONE","MEM","SYNC","ENOUGH_LENS","ENOUGH_DISTS","DEF_WBITS","ZSWAP32","InflateState","havedict","check","total","wbits","ncode","nlen","ndist","have","work","lendyn","distdyn","back","was","inflateResetKeep","inflateReset","inflateReset2","inflateInit","lenfix","distfix","virgin","fixedtables","sym","updatewindow","put","here_bits","here_op","here_val","last_bits","last_op","last_val","hbuf","order","inf_leave","inflateInfo","36","MAXBITS","lbase","lext","dbase","dext","lens_index","table_index","incr","low","mask","curr","drop","used","huff","base_index","offs","extra_index","37","38","STORED_BLOCK","STATIC_TREES","DYN_TREES","Buf_size","MAX_BL_BITS","END_BLOCK","REP_3_6","REPZ_3_10","REPZ_11_138","extra_lbits","extra_dbits","extra_blbits","bl_order","DIST_CODE_LEN","static_ltree","static_dtree","_dist_code","_length_code","base_length","base_dist","static_l_desc","static_d_desc","static_bl_desc","StaticTreeDesc","static_tree","extra_bits","extra_base","elems","max_length","has_stree","TreeDesc","dyn_tree","stat_desc","max_code","d_code","put_short","send_bits","send_code","tree","bi_reverse","bi_flush","gen_bitlen","xbits","stree","gen_codes","tr_static_init","init_block","bi_windup","copy_block","smaller","_n2","_m2","pqdownheap","compress_block","ltree","dtree","lc","lx","scan_tree","curlen","prevlen","nextlen","max_count","min_count","send_tree","build_bl_tree","max_blindex","send_all_trees","lcodes","dcodes","blcodes","detect_data_type","black_mask","static_init_done","stored_len","opt_lenb","static_lenb","39","ZStream","ArrayBufferViewCore","aTypedArray","exportTypedArrayMethod","begin","beginIndex","byteOffset","BYTES_PER_ELEMENT","$forEach","isScheduler","schedule","scheduleArray","scheduler","Observable","sub","Subscription","fromArray","subscribeToArray","of","toPositiveInteger","BYTES","createHTML","forcedStringHTMLMethod","anchor","Constructor","__WEBPACK_EXTERNAL_MODULE_vue__","modules","installedModules","__webpack_require__","moduleId","getter","Symbol","toStringTag","__esModule","ns","property","__webpack_module__","__webpack_exports__","Point","Bezier","startPoint","control1","control2","endPoint","throttle","wait","timeout","previous","later","leading","remaining","clearTimeout","trailing","SignaturePad","canvas","velocityFilterWeight","minWidth","maxWidth","minDistance","_strokeMoveUpdate","_strokeUpdate","dotSize","penColor","backgroundColor","onBegin","_canvas","_ctx","getContext","clear","_handleMouseDown","event","which","_mouseButtonDown","_strokeBegin","_handleMouseMove","_handleMouseUp","_strokeEnd","_handleTouchStart","targetTouches","touch","changedTouches","_handleTouchMove","preventDefault","_handleTouchEnd","wasCanvasTouched","velocityFrom","distanceTo","sqrt","equals","other","steps","py","cx","_point","cy","xdiff","ydiff","ctx","fillStyle","clearRect","fillRect","_reset","_isEmpty","fromDataURL","dataUrl","image","Image","ratio","devicePixelRatio","onload","drawImage","toDataURL","_toSVG","_len","_key","_handleMouseEvents","_handleTouchEvents","removeEventListener","isEmpty","clientX","clientY","point","_createPoint","lastPointGroup","lastPoint","isLastPointTooClose","_addPoint","curve","widths","_drawCurve","canDrawCurve","points","_drawDot","addEventListener","msTouchAction","touchAction","_lastVelocity","_lastWidth","rect","getBoundingClientRect","_calculateCurveControlPoints","_calculateCurveWidths","s3","dx1","dy1","dx2","dy2","l1","l2","dxm","dym","tx","ty","velocity","newWidth","_strokeWidth","_drawPoint","moveTo","arc","PI","startWidth","endWidth","widthDelta","drawSteps","beginPath","ttt","uu","uuu","closePath","_fromData","pointGroups","drawCurve","drawDot","rawPoint","_addPoint2","_rawPoint","_this2","minX","minY","maxX","maxY","svg","createElementNS","setAttributeNS","setAttribute","circle","dummy","childNodes","cloneNode","btoa","fromData","_this3","toData","_typeof","iterator","_defineProperty","configurable","writable","_extends","_objectSpread","ownKeys","getOwnPropertySymbols","_objectWithoutPropertiesLoose","excluded","sourceKeys","_objectWithoutProperties","sourceSymbolKeys","propertyIsEnumerable","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","arr2","iter","MultiDragPlugin","Sortable","SwapPlugin","userAgent","pattern","IE11OrLess","Edge","FireFox","Safari","IOS","ChromeForAndroid","captureMode","capture","passive","selector","msMatchesSelector","webkitMatchesSelector","getParentOrHost","host","nodeType","parentNode","closest","includeCTX","_throttleTimeout","R_SPACE","toggleClass","css","currentStyle","matrix","selfOnly","appliedTransforms","matrixFn","DOMMatrix","WebKitCSSMatrix","CSSMatrix","MSCSSMatrix","tagName","getWindowScrollingElement","scrollingElement","documentElement","getRect","relativeToContainingBlock","relativeToNonStaticParent","undoScale","container","elRect","innerHeight","innerWidth","containerRect","elMatrix","scaleX","scaleY","isScrolledPast","elSide","parentSide","getParentAutoScrollElement","elSideVal","parentSideVal","visible","getChild","childNum","currentChild","ghost","dragged","draggable","lastChild","lastElementChild","previousElementSibling","nodeName","getRelativeScrollOffset","offsetLeft","offsetTop","winScroller","scrollLeft","scrollTop","indexOfObject","includeSelf","elem","gotSelf","clientWidth","scrollWidth","clientHeight","scrollHeight","elemCSS","overflowX","overflowY","isRectEqual","rect1","rect2","ms","cancelThrottle","scrollBy","Polymer","jQuery","Zepto","dom","setRect","unsetRect","expando","AnimationStateManager","animationCallbackId","animationStates","captureAnimationState","animation","child","fromRect","thisAnimationDuration","childMatrix","addAnimationState","removeAnimationState","animateAll","animating","animationTime","toRect","prevFromRect","prevToRect","animatingRect","targetMatrix","calculateRealTime","animate","animationResetTimer","currentRect","duration","translateX","translateY","animatingX","animatingY","forRepaintDummy","repaint","easing","animated","offsetWidth","plugins","initializeByDefault","PluginManager","mount","plugin","option","pluginName","pluginEvent","eventName","sortable","evt","eventCanceled","cancel","eventNameGlobal","initializePlugins","initialized","modified","modifyOption","getEventProperties","eventProperties","modifiedValue","optionListeners","dispatchEvent","_ref","rootEl","targetEl","cloneEl","toEl","fromEl","oldIndex","oldDraggableIndex","newDraggableIndex","originalEvent","putSortable","extraEventProperties","onName","CustomEvent","createEvent","initEvent","bubbles","cancelable","item","pullMode","lastPutMode","allEventProperties","dragEl","parentEl","ghostEl","nextEl","lastDownEl","cloneHidden","dragStarted","moved","activeSortable","active","hideGhostForTarget","_hideGhostForTarget","unhideGhostForTarget","_unhideGhostForTarget","cloneNowHidden","cloneNowShown","dispatchSortableEvent","_dispatchEvent","info","activeGroup","tapEvt","touchEvt","lastDx","lastDy","tapDistanceLeft","tapDistanceTop","lastTarget","lastDirection","targetMoveDistance","ghostRelativeParent","awaitingDragStarted","ignoreNextClick","sortables","pastFirstInvertThresh","isCircumstantialInvert","ghostRelativeParentInitialScroll","_silent","savedInputChecked","documentExists","PositionGhostAbsolutely","CSSFloatProperty","supportDraggable","supportCssPointerEvents","cssText","pointerEvents","_detectDirection","elCSS","elWidth","paddingLeft","paddingRight","borderLeftWidth","borderRightWidth","child1","child2","firstChildCSS","secondChildCSS","firstChildWidth","marginLeft","marginRight","secondChildWidth","flexDirection","gridTemplateColumns","touchingSideChild2","_dragElInRowColumn","dragRect","targetRect","dragElS1Opp","dragElS2Opp","dragElOppLength","targetS1Opp","targetS2Opp","targetOppLength","_detectNearestEmptySortable","threshold","emptyInsertThreshold","insideHorizontally","insideVertically","_prepareGroup","toFn","pull","sameGroup","otherGroup","originalGroup","checkPull","checkPut","revertClone","stopPropagation","stopImmediatePropagation","nearestEmptyInsertDetectEvent","touches","nearest","_onDragOver","_checkOutsideTargetEl","_isOutsideThisEl","store","handle","swapThreshold","invertSwap","invertedSwapThreshold","removeCloneOnHide","direction","ghostClass","chosenClass","dragClass","ignore","preventOnFilter","setData","dataTransfer","textContent","dropBubble","dragoverBubble","dataIdAttr","delay","delayOnTouchOnly","touchStartThreshold","forceFallback","fallbackClass","fallbackOnBody","fallbackTolerance","fallbackOffset","supportPointer","nativeDraggable","_onTapStart","_globalDragOver","dropEffect","_onMove","willInsertAfter","retVal","onMoveFn","onMove","draggedRect","related","relatedRect","_disableDraggable","_unsilent","_ghostIsLast","spacer","_getSwapDirection","isLastTarget","mouseOnAxis","targetLength","targetS1","targetS2","invert","_getInsertDirection","_generateId","sum","_saveInputCheckedState","inputs","checked","_nextTick","_cancelNextTick","contains","_getDirection","pointerType","originalTarget","shadowRoot","composedPath","button","isContentEditable","criteria","_prepareDragStart","dragStartFn","nextSibling","_lastX","_lastY","_onDrop","_disableDelayedDragEvents","_triggerDragStart","_disableDelayedDrag","_delayedDragTouchMoveHandler","_dragStartTimer","_onTouchMove","_onDragStart","selection","empty","getSelection","removeAllRanges","_dragStarted","fallback","_appendGhost","_nulling","_emulateDragOver","elementFromPoint","inserted","ghostMatrix","relativeScrollOffset","dx","dy","cssMatrix","_hideClone","cloneId","insertBefore","_loopId","setInterval","effectAllowed","_dragStartId","revert","isOwner","canSort","fromSortable","completedFired","dragOverEvent","_ignoreWhileAnimating","completed","elLastChild","changed","targetBeforeFirstSwap","sibling","differentLevel","differentRowCol","side1","scrolledPastTop","scrollBefore","dragIndex","nextElementSibling","after","moveVector","axis","insertion","_showClone","_offMoveEvents","_offUpEvents","clearInterval","save","handleEvent","toArray","useAnimation","items","destroy","querySelectorAll","removeAttribute","nextTick","cancelNextTick","detectDirection","scrollEl","scrollRootEl","lastAutoScrollX","lastAutoScrollY","touchEvt$1","pointerElemChangedInterval","autoScrolls","scrolling","AutoScrollPlugin","AutoScroll","scroll","scrollSensitivity","scrollSpeed","bubbleScroll","_handleAutoScroll","_handleFallbackAutoScroll","dragOverCompleted","_ref2","dragOverBubble","clearPointerElemChangedInterval","clearAutoScrolls","nulling","autoScroll","ogElemScroller","newElem","lastSwapEl","isFallback","scrollCustomFn","sens","speed","scrollThisInstance","scrollFn","layersOut","currentParent","canScrollX","canScrollY","scrollPosX","scrollPosY","vx","vy","layer","scrollOffsetY","scrollOffsetX","toSortable","onSpill","Revert","Remove","Swap","swapClass","dragStart","dragOverValid","swap","prevSwapEl","_ref3","swapNodes","swapItem","n1","n2","i1","i2","p1","p2","isEqualNode","startIndex","_ref4","parentSortable","lastMultiDragSelect","multiDragSortable","dragEl$1","clonesFromRect","clonesHidden","multiDragElements","multiDragClones","initialFolding","folding","MultiDrag","_deselectMultiDrag","_checkKeyDown","_checkKeyUp","selectedClass","multiDragKey","multiDragElement","multiDragKeyDown","isMultiDrag","delayStartGlobal","delayEnded","setupClone","sortableIndex","insertMultiDragClones","showClone","hideClone","_ref5","dragStartGlobal","_ref6","multiDrag","_ref7","removeMultiDragElements","dragOver","_ref8","_ref9","insertMultiDragElements","_ref10","dragRectAbsolute","clonesHiddenBefore","dragOverAnimationCapture","_ref11","dragMatrix","dragOverAnimationComplete","_ref12","originalEvt","shiftKey","currentIndex","multiDragIndex","nullingGlobal","destroyGlobal","select","deselect","oldIndicies","newIndicies","clones","clonesInserted","elementsInserted","BooleanCheckbox","vue__WEBPACK_IMPORTED_MODULE_0__","vue__WEBPACK_IMPORTED_MODULE_0___default","vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__","_boolean__WEBPACK_IMPORTED_MODULE_2__","survey_core__WEBPACK_IMPORTED_MODULE_3__","__extends","extendStatics","setPrototypeOf","__proto__","__decorate","decorators","Reflect","decorate","Instance","registerRenderer","BooleanSwitch","ButtonGroup","vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__","_question__WEBPACK_IMPORTED_MODULE_1__","getModel","question","ButtonGroupItem","vue__WEBPACK_IMPORTED_MODULE_1__","vue__WEBPACK_IMPORTED_MODULE_1___default","survey_core__WEBPACK_IMPORTED_MODULE_2__","_base__WEBPACK_IMPORTED_MODULE_3__","model","Checkbox","_question__WEBPACK_IMPORTED_MODULE_2__","getItemClass","CheckboxItem","_base__WEBPACK_IMPORTED_MODULE_2__","isAllSelected","getLabelClass","change","keyup","isInputTextUpdate","ActionBarItemDropdownViewModel","_action_bar_item_vue__WEBPACK_IMPORTED_MODULE_2__","ActionBarItemViewModel","ActionBarSeparatorViewModel","innerCss","ActionBarViewModel","_action_vue__WEBPACK_IMPORTED_MODULE_3__","_action_bar_item_vue__WEBPACK_IMPORTED_MODULE_4__","_action_bar_item_dropdown_vue__WEBPACK_IMPORTED_MODULE_5__","_action_bar_separator_vue__WEBPACK_IMPORTED_MODULE_6__","ActionViewModel","getComponentName","DefaultTitle","vue_class_component__WEBPACK_IMPORTED_MODULE_1__","vue_property_decorator__WEBPACK_IMPORTED_MODULE_2__","isCollapsed","isExpanded","changeExpanded","toggleState","getIconCss","iconExpanded","mounted","stateChangedCallback","List","SurveyQuestionMatrixDetailButton","SurveyQuestionMatrixDynamicDragDropIcon","SurveyQuestionMatrixDynamicRemoveButton","PopupContainer","showModal","clickInside","onUpdated","prevIsVisible","isVisible","updateOnShowing","componentName","onApply","onCancel","popupModel","popupViewModel","initializePopupContainer","popup","propsData","onHide","$destroy","destroyPopupContainer","Popup","_popup_container_vue__WEBPACK_IMPORTED_MODULE_3__","_base__WEBPACK_IMPORTED_MODULE_4__","onMounted","$el","parentElement","popupContainer","destroyed","SvgIcon","onSizePropertyChanged","onWidthPropertyChanged","onHeightPropertyChanged","onIconNamePropertyChanged","svgIconElement","$refs","TitleActions","getTitleToolbar","Composite","contentPanel","Custom","contentQuestion","customWidget","getTemplate","CustomWidget","isDefaultRender","hasVueComponent","htmlTemplate","components","afterRender","updated","beforeDestroy","willUnmount","Dropdown","hasOther","isOtherSelected","SurveyElementVue","getType","isDefaultRendering","getRootClass","cssRoot","isReadOnly","cssClasses","getContentClass","cssContent","isPanel","survey","questionErrorLocation","ElementHeader","getTitleClass","cssTitle","getHeaderClass","cssHeader","clickTitleFunction","Empty","Errors","classes","additionalClasses","locationTop","locationBottom","Expression","onDragOver","returnValue","onDrop","onChange","doChange","srcElement","doClean","needConfirmRemoveFile","isConfirmed","confirmRemoveAllMessage","doRemoveFile","getConfirmRemoveMessage","removeFile","doDownloadFile","getPlaceholderClass","placeholderInput","allowCount","allowMultiple","loadFiles","FlowPanel","isCollapsedValue","rootNodeValue","beforeMount","onCustomHtmlProducing","onGetHtmlForQuestion","renderQuestion","setRootNode","produceHtml","doc","DOMParser","parseFromString","afterRenderPanel","registerFunctionOnPropertyValueChanged","renderWidth","title","expand","collapse","getTitleStyle","panel","titleExpandable","FlowPanelElement","FlowPanelElement_1","getStyle","fontWeight","fontStyle","textDecoration","elementIdValue","idValue","hasTextChildNodesOnly","getQuestionByName","getChildDomNodes","domNodes","SurveyHeader","doAfterRenderHeader","Html","QuestionImage","ImagePicker","Matrix","cellClick","column","isInputReadOnly","MatrixCell","showErrorOnTop","showErrorOnBottom","getHeaders","getCellStyle","isDisabled","isEnabled","isChecked","renderedValue","allowHover","itemClass","itemDisabled","itemChecked","itemHover","hasQuestion","onVisibilityChanged","cellQuestion","htmlElement","matrixAfterCellRender","MatrixDropdown","MatrixDynamic","addRowClick","addRowUI","MatrixTable","renderedTable","MultipleText","Navigation","showPrevBtn","showNextBtn","showCompleteBtn","onPropertyChanged","oldValue","onCreated","updateShowButtons","onCurrentPageChanged","sender","isFirstPage","isShowPrevButton","isLastPage","nextButtonMouseDown","mouseDownPage","currentPage","navigationMouseDown","buttonMouseDown","prevPage","nextPage","completeLastPage","showPreview","OtherChoice","isSurveyInputTextUpdate","Page","isCurrentPageChanged","onPagePropertyChanged","page","afterRenderPage","$nextTick","scrollToTopOnPageChange","_showTitle","_showDescription","Panel","cancelPreview","requiredText","PanelDynamic","isRenderModeList","panels","currentPanel","addPanelClick","addPanel","getButtonAddCss","btnClasses","buttonAdd","renderMode","PanelDynamicProgress","isProgressTopShowing","progressTop","progressBottom","panelCount","addPanelUI","prevPanelClick","goToPrevPanel","nextPanelClick","goToNextPanel","changeRange","getButtonPrevCss","buttonPrev","isPrevButtonShowing","getButtonNextCss","buttonNext","isNextButtonShowing","rangeMax","PanelDynamicRemove","unRegisterFunctionOnPropertyValueChanged","removePanelClick","removePanelUI","Progress","progressValue","ProgressButtons","hasScroller","updateScroller","progressButtonsModel","listContainerElement","isListElementClickable","getListElementCss","clickListElement","getScrollButtonCss","isLeftScroll","scrollCss","progressButtonsImageButtonLeft","progressButtonsImageButtonRight","progressButtonsImageButtonHidden","clickScrollButton","Radiogroup","visibleChoices","RadiogroupItem","getControlLabelClass","RankingItem","Ranking","Rating","Row","isNeedRender","rowContainerDiv","startLazyRendering","isLazyRendering","SurveyStringEditor","onInput","locString","innerText","onClick","editableRenderer","SurveyStringViewer","defaultRenderer","SurveyString","Survey","currentPageId","forceUpdate","$forceUpdate","surveyOnMounted","onPageVisibleChanged","doAfterRenderSurvey","renderCallback","startTimerFromUI","stopTimer","showTitle","showCompletedPage","getCompletedPageClasses","completedPage","getProcessedCompletedHtml","hasCompletedPage","processedCompletedHtmlValue","processedCompletedHtml","getCompletedStateClasses","saveData","completedState","doTrySaveAgain","doComplete","currentType","newType","applyTheme","QuestionText","inputWidth","TimerPanel","timerInfoText","TitleContent","Window","_surveyModel__WEBPACK_IMPORTED_MODULE_2__","surveyWindow","isexpanded","closeOnCompleteTimeout","isShowing","closeWindowOnCompleteCallback","doHide","getCss","buttonCollapsed","buttonExpanded","doExpand","createDecorator","mixins","reflectionIsSupported","defineMetadata","getOwnMetadataKeys","copyReflectionMetadata","forwardMetadata","propertyKey","metaKeys","metaKey","getOwnMetadata","fakeArray","hasProto","Ctor","__decorators__","Ctors","isPrimitive","collectDataFromConstructor","vm","Component","originalInit","_init","$options","plainData","$internalHooks","componentFactory","_componentTag","descriptor","superProto","getPrototypeOf","Super","Extended","forwardStaticMembers","reservedPropertyNames","shouldIgnore","callee","caller","Original","extendedDescriptor","superDescriptor","registerHooks","staticRenderFns","_vm","_h","$createElement","_c","_self","directives","rawName","checkedValue","expression","control","inputId","isRequired","locTitle","renderedHtml","errors","domProps","indeterminate","isIndeterminate","$event","$$a","$$el","$$c","$$v","$$i","$set","materialDecorator","itemDecorator","uncheckedPath","checkedPath","indeterminatePath","titleLocation","label","locDisplayLabel","_e","_withStripped","onLabelClick","locLabelFalse","switch","onSwitchClick","slider","locLabelTrue","_l","caption","hasErrors","describeBy","readOnly","_q","decorator","iconSize","showCaption","hasColumns","colIndex","getColumnClass","selectAllItem","itemControl","locText","hideLabel","controlLabel","otherItem","isReadOnlyRenderDiv","readonly","maxlength","getMaxLength","placeholder","renderedPlaceHolder","isActive","enabled","action","tabindex","disableTabStop","hasItems","actions","needSeparator","showIcon","contentId","_k","keyCode","mousedown","getItemIndent","selectItem","getDetailPanelButtonCss","getIsDetailPanelShowing","detailPanelId","showHideDetailPanelClick","getDetailPanelIconCss","iconDrag","buttonRemove","removeRowUI","locRemoveRowText","iconRemove","styleClass","keydown","onKeyDown","clickOutside","showPointer","pointerTarget","contentComponentName","_b","contentComponentData","isModal","cancelButtonText","applyButtonText","isPage","toolbar","hasHtml","customHtml","hasDefaultRender","getControlClass","otherText","displayValue","selectWrapper","autocomplete","autoComplete","$$selectedVal","selected","_value","multiple","showOptionsCaption","optionsCaption","hasTitleOnLeftTop","hasErrorsOnTop","hasComment","formGroup","commentText","commentClass","hasErrorsOnBottom","hasDescriptionUnderInput","descriptionUnderInput","locDescription","hasTitleOnBottom","hasTitle","ariaTitleId","titleTabIndex","titleAriaExpanded","getTitleComponentName","hasDescriptionUnderTitle","description","hasVisibleErrors","fileInput","inputTitle","accept","acceptedTypes","staticStyle","fileDecorator","dragover","wrapper","chooseFile","controlDisabled","for","chooseButtonCaption","noFileChosen","noFileChosenCaption","removeButton","cleanButtonCaption","previewValue","preview","fileSign","imageWidth","canPreviewImage","imageHeight","alt","removeFileCaption","removeFileSvg","fileSignBottom","removeButtonBottom","rootStyle","iconCss","innerPaddingLeft","rootNode","elNode","elementId","flexBasis","flexGrow","flexShrink","renderedHasHeader","isLogoBefore","logoClassNames","logoImage","objectFit","logoFit","locLogo","logoWidth","logoHeight","renderedHasTitle","headerText","titleMaxWidth","isLogoAfter","locHtml","contentMode","imageFit","imageLink","multiSelect","showLabel","itemText","tableWrapper","showHeader","hasRows","visibleColumns","columnIndex","headerCell","visibleRows","rowIndex","rowClasses","hasCellText","getCellDisplayLocText","itemValue","fullName","colSpans","isActionsCell","getData","handleClick","hasPanel","isChoice","isCheckbox","horizontalScroll","showAddRowOnTop","locAddRowText","iconAdd","showTable","emptyRowsSection","emptyRowsText","locEmptyRowsText","emptyRowsButton","showAddRowOnBottom","headerRow","cellIndex","showFooter","footerRow","getRows","rowindex","editor","itemTitle","isRequireTextBeforeTitle","isRequireTextOnStart","isRequireTextAfterTitle","cssNavigationPrev","pagePrevText","cssNavigationNext","pageNextText","isPreviewButtonVisible","cssNavigationPreview","previewText","isCompleteButtonVisible","cssNavigationComplete","completeText","getOthersMaxLength","otherPlaceHolder","hasTitleActions","showDescription","hasEditButton","cssNavigationEdit","editText","renderedPanels","getPanelWrapperCss","isProgressBottomShowing","canAddPanel","panelAddText","cssClass","progressContainer","panelPrevText","isRangeShowing","progress","progressBar","panelNextText","progressText","canRemovePanel","getPanelRemoveButtonCss","panelRemoveText","progressTextInBar","progressTextUnderBar","progressButtonsContainerCenter","progressButtonsContainer","progressButtonsListContainer","progressButtonsList","visiblePages","progressButtonsPageTitle","locNavigationTitle","progressButtonsPageDescription","locNavigationDescription","canShowClearButton","clearButton","clearButtonCaption","clearValue","handleKeydown","itemGhostNode","itemContent","itemIconContainer","itemIcon","itemIconHoverMod","itemIconFocusMod","itemIndex","rootClass","rankingChoices","getNumberByIndex","visibleRateValues","setValueFromClick","minText","locMinRateDescription","maxText","locMaxRateDescription","elements","ariaRole","needShowPlaceholder","placeHolderText","_m","controls","position","contenteditable","blur","renderAs","onsubmit","hasLogo","isNavigationButtonsShowingOnTop","cssNavigationStart","startSurveyText","startedPage","isNavigationButtonsShowingOnBottom","isShowProgressBarOnTop","progressBarType","isTimerPanelShowingOnTop","navId","pageId","isTimerPanelShowingOnBottom","isShowProgressBarOnBottom","completedStateText","saveAgainButton","getLocString","processedCompletedBeforeHtml","processedLoadingHtml","bodyEmpty","emptySurveyText","inputStyle","renderedMin","renderedMax","renderedStep","inputSize","dataListId","dataList","no","cursor","windowSurvey","expandedCss","isExpandedSurvey","float","normalizeComponent","scriptExports","functionalTemplate","injectStyles","scopeId","moduleIdentifier","shadowMode","hook","_compiled","_scopeId","$vnode","ssrContext","__VUE_SSR_CONTEXT__","_registeredComponents","_ssrRegister","$root","_injectStyles","originalRender","existing","beforeCreate","Emit","__spreadArrays","il","jl","hyphenateRE","hyphenate","_target","original","emit","emitName","$emit","isPromise","Inject","vue_class_component__WEBPACK_IMPORTED_MODULE_0__","componentOptions","inject","InjectReactive","_helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__","fromKey_1","defaultVal_1","Model","_helpers_metadata__WEBPACK_IMPORTED_MODULE_1__","ModelSync","propName","Prop","PropSync","Provide","provide","managed","ProvideReactive","managedReactive","refKey","VModel","valueKey","Watch","_a","deep","immediate","handler","watch","applyMetadata","reflectMetadataIsSupported","getMetadata","needToProduceProvide","produceProvide","rv","reactiveInjectKey","_loop_1","this_1","inheritInjected","_decorators_Emit__WEBPACK_IMPORTED_MODULE_2__","_decorators_Inject__WEBPACK_IMPORTED_MODULE_3__","_decorators_InjectReactive__WEBPACK_IMPORTED_MODULE_4__","_decorators_Model__WEBPACK_IMPORTED_MODULE_5__","_decorators_ModelSync__WEBPACK_IMPORTED_MODULE_6__","_decorators_Prop__WEBPACK_IMPORTED_MODULE_7__","_decorators_PropSync__WEBPACK_IMPORTED_MODULE_8__","_decorators_Provide__WEBPACK_IMPORTED_MODULE_9__","_decorators_ProvideReactive__WEBPACK_IMPORTED_MODULE_10__","_decorators_Ref__WEBPACK_IMPORTED_MODULE_11__","_decorators_VModel__WEBPACK_IMPORTED_MODULE_12__","_decorators_Watch__WEBPACK_IMPORTED_MODULE_13__","Action","_base__WEBPACK_IMPORTED_MODULE_0__","_jsonobject__WEBPACK_IMPORTED_MODULE_1__","defaultValue","AdaptiveActionContainer","_list__WEBPACK_IMPORTED_MODULE_0__","_popup__WEBPACK_IMPORTED_MODULE_1__","_action__WEBPACK_IMPORTED_MODULE_2__","_container__WEBPACK_IMPORTED_MODULE_3__","invisibleItemsListModel","invisibleItemSelected","dotsItemPopupModel","toggleVisibility","dotsItem","setItems","sortByVisibleIndex","sortItems","visibleIndex","firstItem","secondItem","showFirstN","visibleItemsCount","leftItemsToShow","invisibleItems","addDotsButton","removeDotsButton","ActionContainer","_jsonobject__WEBPACK_IMPORTED_MODULE_0__","_base__WEBPACK_IMPORTED_MODULE_1__","Bindings","Base","ArrayChanges","Event","EventBase","_localizablestring__WEBPACK_IMPORTED_MODULE_0__","_helpers__WEBPACK_IMPORTED_MODULE_1__","_jsonobject__WEBPACK_IMPORTED_MODULE_2__","_settings__WEBPACK_IMPORTED_MODULE_3__","__spreadArray","getNames","fillProperties","getProperties","setBinding","propertyName","valueName","clearBinding","getValueNameByPropertyName","getPropertiesByValueName","getJson","setJson","objProperties","getPropertiesByObj","isBindable","propertyHash","eventList","isLoadingFromJsonValue","loadingOwner","addEvent","onItemValuePropertyChanged","isCreating","bindingsValue","createProperties","onBaseCreating","commentPrefix","isValueEmpty","trimString","trimValue","IsPropertyEmpty","dispose","isDisposedValue","getSurvey","isLive","checkBindings","updateBindings","bindings","updateBindingValue","getIsLoadingFromJson","isLoadingFromJson","startLoadingFromJson","endLoadingFromJson","toJSON","toJsonObject","fromJSON","json","clonedObj","createClass","getPropertyByName","findProperty","isPropertyVisible","createProgressInfo","questionCount","answeredQuestionCount","requiredQuestionCount","requiredAnsweredQuestionCount","getProgressInfo","localeChanged","locStrsChanged","arraysInfo","isItemValues","itemValueLocStrChanged","localizableStrings","getLocalizableString","strChanged","getPropertyValueCore","isCustom","onGetValue","propertiesHash","getPropertyValueCoreHandler","geValueFromHash","setPropertyValueCore","setPropertyValueCoreHandler","isEditingSurveyElement","iteratePropertiesHash","setPropertyValue","isTwoValueEquals","arrayInfo","setArray","onPush","propertyValueChanged","clearPropertyValue","onPropertyValueChangedCallback","newValue","arrayChanges","itemValuePropertyChanged","fire","ownerPropertyName","onPropertyValueChanged","doPropertyValueChangedCallback","onPropChangeFunctions","isInternal","notifier","registerFunctionOnPropertiesValueChanged","unRegisterFunctionOnPropertiesValueChanged","createCustomLocalizableObj","locStr","getLocale","createLocalizableString","owner","useMarkDown","onStrChanged","getLocalizableStringText","defaultStr","setLocalizableStringText","addUsedLocales","locales","AddLocStringToUsedLocales","searchText","founded","getSearchableLocalizedStrings","setFindText","keys_1","getSearchableLocKeys","getSearchableItemValueKeys","locs","getLocales","createItemValues","createNewArray","locOwner","notifyArrayChanged","ar","onArrayChanged","createNewArrayCore","createArrayCoreHandler","ensureArray","onRemove","newArray","deleteCount","getItemValueType","deletedItems","createItemValue","caseInSensitive","getValueInLowCase","copyObject","copyCssClasses","itemsToAdd","callbacks","hasFunc","fireCallbackChanged","onCallbacksChanged","CalculatedValue","_helpers__WEBPACK_IMPORTED_MODULE_0__","_conditions__WEBPACK_IMPORTED_MODULE_2__","_jsonobject__WEBPACK_IMPORTED_MODULE_3__","expressionIsRunning","isCalculated","setOwner","rerunExpression","live","locCalculation","unlocCalculation","resetCalculation","doCalculation","calculatedValues","runExpressionCore","runExpression","getVariable","setValue","setVariable","canRunExpression","getFilteredValues","getFilteredProperties","ensureExpression","runDependentExpressions","expressionRunner","variables","getVariables","calcItem","onRunComplete","addClass","isUnique","ChoicesRestful","ChoicesRestfull","_itemvalue__WEBPACK_IMPORTED_MODULE_1__","_error__WEBPACK_IMPORTED_MODULE_3__","_settings__WEBPACK_IMPORTED_MODULE_4__","XmlParser","parser","assignValue","xml2Json","xmlNode","childNode","childObject","parseXmlString","xmlString","xmlRoot","lastObjHash","isRunningValue","processedUrl","processedPath","isUsingCacheFromUrl","webserviceEncodeParameters","clearCache","itemsResult","sendingSameRequests","addSameRequest","isUsingCache","objHash","unregisterSameRequests","getResultCallback","getCachedItemsResult","textProcessor","processedText","doEmptyResultCallback","useChangedItemsResults","sendRequest","useCachingForChoicesRestful","getIsRunning","serverResult","updateResultCallback","urlText","cacheText","noCacheText","pUrl","processTextEx","pPath","hasAllValuesOnLastRun","onProcessedUrlCallback","parseResponse","parsedResponse","xhr","XMLHttpRequest","setRequestHeader","loadingObjHash","beforeLoadRequest","onLoad","onError","statusText","responseText","onBeforeSendRequest","beforeSendRequest","send","titleName","imageLinkName","getCustomPropertiesNames","getCustomProperties","getCustomPropertyName","itemValueType","allowEmptyResponse","attachOriginalItems","beforeSendRequestCallback","updatedResult","getResultAfterPath","getItemValueCallback","getValue","setTitle","setCustomProperties","originalItem","getImageLink","callResultCallback","getValueCore","getPropertyBinding","pathes","getPathes","EncodeParameters","visibleIf","ProcessValue","getFirstName","getFirstPropertyName","ch","hasValue","nonNestedObj","getNonNestedObject","getValueInfo","valueInfo","getValueFromPath","ind_name","isNumber","curValue","getObjectValue","createPath","curName","objInArray","getObjInArray","getIntValue","createProp","nameInLow","keyName","ind","ExpressionRunnerBase","ConditionRunner","ExpressionRunner","_conditionProcessValue__WEBPACK_IMPORTED_MODULE_0__","_conditionsParser__WEBPACK_IMPORTED_MODULE_1__","processValue","isAsyncValue","hasFunctionValue","expressionValue","operand","parseExpression","canRun","hasFunction","hasAsyncFunction","setVariables","runCore","isAsync","runValues","asyncFuncList","addToAsyncList","onAsyncReady","doAsyncFunctionReady","evaluateAsync","isReady","evaluate","doOnComplete","ConditionsParserError","ConditionsParser","_expressions_expressionParser__WEBPACK_IMPORTED_MODULE_0__","at","patchExpression","createCondition","parserCache","conditionError","defaultBootstrapCss","_cssstandard__WEBPACK_IMPORTED_MODULE_0__","logo","navigationButton","navigation","edit","progressButtonsListElementPassed","progressButtonsListElementCurrent","progressButtonsListElementNonClickable","pageTitle","pageDescription","mainRoot","flowRoot","headerLeft","contentLeft","titleLeftRoot","titleRequired","hasError","titleOnError","boolean","itemIndeterminate","sliderText","disabledLabel","checkbox","itemSelectAll","itemNone","itemInline","labelChecked","ranking","rootMobileMod","rootDragMod","itemGhostMod","itemDragMod","dropdown","cellTextSelected","cellLabel","matrixdropdown","detailRow","detailRowText","detailCell","detailButton","detailButtonExpanded","detailIcon","detailIconExpanded","detailPanelCell","actionsCell","matrixdynamic","paneldynamic","buttonRemoveRight","panelWrapper","panelWrapperInRow","multipletext","radiogroup","buttongroup","itemCaption","itemSelected","imagepicker","rating","signaturepad","saving","success","defaultBootstrapMaterialCss","modernCss","asCell","headerTop","headerBottom","titleOnAnswer","rowError","cellTextDisabled","choiceCell","surveyCss","defaultStandardCss","DragDropHelper","surveyValue","onBeforeDrop","onAfterDrop","draggedSurveyElement","dropTargetSurveyElement","draggedElementShortcut","scrollIntervalId","ghostSurveyElement","isBottom","isEdge","pageOrPanel","itemValueParentQuestion","moveDraggedElement","moveShortcutElement","isItemValueBeingDragged","handleItemValueDragOver","handleSurveyElementDragOver","handleEscapeButton","banDropHere","banDropSurveyElement","removeGhostElementFromSurvey","doDropItemValue","doDropSurveyElement","isTop","choices","draggedElement","prevEvent","isDescendantOf","startDragToolboxItem","draggedElementJson","createElementFromJson","startDragSurveyElement","startDrag","startDragItemValue","createGhostSurveyElement","createDraggedElementShortcut","getItemValueGhostPosition","startWithNewLine","ghostSurveyElementName","doScroll","shortcutHeight","offsetHeight","shortcutWidth","shortcutXCenter","shortcutYCenter","documentClientHeight","documentClientWidth","pageX","pageY","startScrollBoundary","scrollableParentElement","querySelector","dragInfo","getDragInfo","restrictDragQuestionBetweenPages","insertGhostElementIntoSurvey","dropTargetHTMLElement","findDropTargetHTMLElementFromPoint","getDropTargetSurveyElementFromHTMLElement","panelDragInfo","getPanelDragInfo","calculateIsBottom","HTMLElement","surveyElement","calculateIsEdge","findDeepestDropTargetChild","getDropTargetSurveyElementName","dropTargetSurveyElementName","dataset","svcDropTargetElementName","svcDropTargetItemValue","element_1","dropTargetName","isDragOverInnerPanel","nearestDropTargetElement","dropTargetDataAttributeName","newGhostPage","getPageByName","pages","getElementByName","template","choice","calculateMiddleOfHTMLElement","middle","edgeHeight","findDropTargetHTMLElement","draggedOverNode","dragDropStart","nestedPanelDepth","dragDropMoveTo","insertRealElementIntoSurvey","fakeTargetElement","createFakeTargetElement","newElement","dragDropFinish","createNewElement","elementName","targetElement","dxSurveyService","_settings__WEBPACK_IMPORTED_MODULE_0__","surveyServiceUrl","loadSurvey","surveyId","serviceUrl","getSurveyJsonAndIsCompleted","clientId","surveyJson","isCompleted","sendResult","postId","onSendResult","isPartialCompleted","surveyResult","dataStringify","onerror","sendFile","onSendFile","formData","FormData","getResult","resultId","onGetResult","QuestionResult","onIsCompleted","Version","_settings__WEBPACK_IMPORTED_MODULE_1__","_helpers__WEBPACK_IMPORTED_MODULE_2__","_validator__WEBPACK_IMPORTED_MODULE_3__","_itemvalue__WEBPACK_IMPORTED_MODULE_4__","_base__WEBPACK_IMPORTED_MODULE_5__","_survey_error__WEBPACK_IMPORTED_MODULE_6__","_survey_element__WEBPACK_IMPORTED_MODULE_7__","_calculatedValue__WEBPACK_IMPORTED_MODULE_8__","_error__WEBPACK_IMPORTED_MODULE_9__","_localizablestring__WEBPACK_IMPORTED_MODULE_10__","_expressionItems__WEBPACK_IMPORTED_MODULE_11__","_choicesRestful__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_28__","_questionnonvalue__WEBPACK_IMPORTED_MODULE_29__","_question_empty__WEBPACK_IMPORTED_MODULE_30__","_question_baseselect__WEBPACK_IMPORTED_MODULE_31__","_question_checkbox__WEBPACK_IMPORTED_MODULE_32__","_question_ranking__WEBPACK_IMPORTED_MODULE_33__","_question_comment__WEBPACK_IMPORTED_MODULE_34__","_question_dropdown__WEBPACK_IMPORTED_MODULE_35__","_questionfactory__WEBPACK_IMPORTED_MODULE_36__","_question_file__WEBPACK_IMPORTED_MODULE_37__","_question_html__WEBPACK_IMPORTED_MODULE_38__","_question_radiogroup__WEBPACK_IMPORTED_MODULE_39__","_question_rating__WEBPACK_IMPORTED_MODULE_40__","_question_expression__WEBPACK_IMPORTED_MODULE_41__","_question_text__WEBPACK_IMPORTED_MODULE_42__","_question_boolean__WEBPACK_IMPORTED_MODULE_43__","_question_imagepicker__WEBPACK_IMPORTED_MODULE_44__","_question_image__WEBPACK_IMPORTED_MODULE_45__","_question_signaturepad__WEBPACK_IMPORTED_MODULE_46__","_question_paneldynamic__WEBPACK_IMPORTED_MODULE_47__","_surveytimer__WEBPACK_IMPORTED_MODULE_48__","_surveyProgressButtons__WEBPACK_IMPORTED_MODULE_49__","_survey__WEBPACK_IMPORTED_MODULE_50__","_trigger__WEBPACK_IMPORTED_MODULE_51__","_surveyWindow__WEBPACK_IMPORTED_MODULE_52__","_textPreProcessor__WEBPACK_IMPORTED_MODULE_53__","_dxSurveyService__WEBPACK_IMPORTED_MODULE_54__","_localization_english__WEBPACK_IMPORTED_MODULE_55__","_surveyStrings__WEBPACK_IMPORTED_MODULE_56__","_questionCustomWidgets__WEBPACK_IMPORTED_MODULE_57__","_question_custom__WEBPACK_IMPORTED_MODULE_58__","_stylesmanager__WEBPACK_IMPORTED_MODULE_59__","_list__WEBPACK_IMPORTED_MODULE_60__","_popup__WEBPACK_IMPORTED_MODULE_61__","_question_buttongroup__WEBPACK_IMPORTED_MODULE_62__","_utils_is_mobile__WEBPACK_IMPORTED_MODULE_63__","_utils_utils__WEBPACK_IMPORTED_MODULE_64__","_defaultCss_cssstandard__WEBPACK_IMPORTED_MODULE_65__","_dragdrophelper__WEBPACK_IMPORTED_MODULE_66__","_chunks_model__WEBPACK_IMPORTED_MODULE_0__","_defaultCss_cssstandard__WEBPACK_IMPORTED_MODULE_2__","_defaultCss_cssbootstrap__WEBPACK_IMPORTED_MODULE_3__","_defaultCss_cssbootstrapmaterial__WEBPACK_IMPORTED_MODULE_4__","_defaultCss_cssmodern__WEBPACK_IMPORTED_MODULE_5__","_rendererFactory__WEBPACK_IMPORTED_MODULE_6__","_utils_responsivity_manager__WEBPACK_IMPORTED_MODULE_7__","_utils_utils__WEBPACK_IMPORTED_MODULE_8__","_actions_action__WEBPACK_IMPORTED_MODULE_9__","_actions_adaptive_container__WEBPACK_IMPORTED_MODULE_10__","_actions_container__WEBPACK_IMPORTED_MODULE_11__","_vue_surveyModel__WEBPACK_IMPORTED_MODULE_0__","_vue_survey_vue__WEBPACK_IMPORTED_MODULE_1__","_vue_customwidget_vue__WEBPACK_IMPORTED_MODULE_2__","_vue_string_vue__WEBPACK_IMPORTED_MODULE_3__","_vue_string_viewer_vue__WEBPACK_IMPORTED_MODULE_4__","_vue_string_editor_vue__WEBPACK_IMPORTED_MODULE_5__","_vue_element_vue__WEBPACK_IMPORTED_MODULE_6__","_vue_window_vue__WEBPACK_IMPORTED_MODULE_7__","_vue_page_vue__WEBPACK_IMPORTED_MODULE_8__","_vue_radiogroup_vue__WEBPACK_IMPORTED_MODULE_9__","_vue_radiogroupitem_vue__WEBPACK_IMPORTED_MODULE_10__","_vue_otherChoice_vue__WEBPACK_IMPORTED_MODULE_11__","_vue_rating_vue__WEBPACK_IMPORTED_MODULE_12__","_vue_comment_vue__WEBPACK_IMPORTED_MODULE_13__","_vue_ranking_ranking_vue__WEBPACK_IMPORTED_MODULE_14__","_vue_ranking_ranking_item_vue__WEBPACK_IMPORTED_MODULE_15__","_vue_checkbox_vue__WEBPACK_IMPORTED_MODULE_16__","_vue_checkboxitem_vue__WEBPACK_IMPORTED_MODULE_17__","_vue_buttongroup_vue__WEBPACK_IMPORTED_MODULE_18__","_vue_buttongroupitem_vue__WEBPACK_IMPORTED_MODULE_19__","_vue_text_vue__WEBPACK_IMPORTED_MODULE_20__","_vue_boolean__WEBPACK_IMPORTED_MODULE_21__","_vue_boolean_switch_vue__WEBPACK_IMPORTED_MODULE_22__","_vue_boolean_checkbox_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_progressButtons_vue__WEBPACK_IMPORTED_MODULE_42__","_vue_timerpanel_vue__WEBPACK_IMPORTED_MODULE_43__","_vue_panel_vue__WEBPACK_IMPORTED_MODULE_44__","_vue_flowpanel_vue__WEBPACK_IMPORTED_MODULE_45__","_vue_flowpanelelement_vue__WEBPACK_IMPORTED_MODULE_46__","_vue_row_vue__WEBPACK_IMPORTED_MODULE_47__","_vue_elementheader_vue__WEBPACK_IMPORTED_MODULE_48__","_vue_image_vue__WEBPACK_IMPORTED_MODULE_49__","_vue_signaturepad_vue__WEBPACK_IMPORTED_MODULE_50__","_vue_header_vue__WEBPACK_IMPORTED_MODULE_51__","_vue_custom_vue__WEBPACK_IMPORTED_MODULE_52__","_vue_composite_vue__WEBPACK_IMPORTED_MODULE_53__","_vue_titlecontent_vue__WEBPACK_IMPORTED_MODULE_54__","_vue_components_title_actions_title_actions_vue__WEBPACK_IMPORTED_MODULE_55__","_vue_components_default_title_default_title_vue__WEBPACK_IMPORTED_MODULE_56__","_vue_components_action_bar_action_bar_vue__WEBPACK_IMPORTED_MODULE_57__","_vue_components_svg_icon_svg_icon_vue__WEBPACK_IMPORTED_MODULE_58__","_vue_components_popup_popup_vue__WEBPACK_IMPORTED_MODULE_59__","_vue_components_list_list_vue__WEBPACK_IMPORTED_MODULE_60__","_vue_components_matrix_actions_remove_button_remove_button_vue__WEBPACK_IMPORTED_MODULE_61__","_vue_components_matrix_actions_detail_button_detail_button_vue__WEBPACK_IMPORTED_MODULE_62__","_vue_components_matrix_actions_drag_drop_icon_drag_drop_icon_vue__WEBPACK_IMPORTED_MODULE_63__","_core__WEBPACK_IMPORTED_MODULE_0__","_vue_ui__WEBPACK_IMPORTED_MODULE_1__","AnswerRequiredError","OneAnswerRequiredError","RequreNumericError","ExceedSizeError","WebRequestError","WebRequestEmptyError","OtherEmptyError","UploadingFileError","RequiredInAllRowsError","MinRowCountError","KeyDuplicationError","CustomError","_surveyStrings__WEBPACK_IMPORTED_MODULE_0__","_survey_error__WEBPACK_IMPORTED_MODULE_1__","errorOwner","getErrorType","getDefaultText","getString","maxSize","getText","getTextSize","minRowCount","ExpressionItem","HtmlConditionItem","UrlConditionItem","runCondition","getMarkdownHtml","getRenderer","getProcessedText","serializationProperty","SyntaxError","_expressions__WEBPACK_IMPORTED_MODULE_0__","expected","found","captureStackTrace","buildMessage","literalEscape","classEscape","describeExpectation","expectation","escapedParts","part","inverted","describeExpected","expected1","descriptions","describeFound","found1","peg$parse","peg$result","peg$FAILED","peg$startRuleFunctions","peg$parseExpression","peg$startRuleFunction","peg$c0","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","peg$c119","peg$c120","peg$c121","peg$c122","peg$c123","peg$c124","sequence","peg$c125","peg$c126","peg$c127","flatten","flattenArray","peg$c128","peg$c129","peg$c130","peg$c131","peg$c132","peg$c133","peg$c134","peg$c135","peg$c136","peg$c137","peg$c138","peg$classExpectation","peg$c139","peg$c140","peg$c141","peg$c142","peg$c143","peg$c144","peg$c145","peg$c146","peg$c147","chars","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$c160","peg$c161","peg$c162","peg$c163","peg$c164","peg$c165","peg$otherExpectation","peg$c166","peg$c167","peg$currPos","peg$savedPos","peg$posDetailsCache","peg$maxFailPos","peg$maxFailExpected","peg$silentFails","peg$resultsCache","startRule","text1","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","peg$parseNumber","peg$parseNonZeroDigits","peg$parseValueCharacters","peg$parseAnyCharacters","peg$parseLetters","isArithmeticOp","Operand","BinaryOperand","UnaryOperand","ArrayOperand","Const","Variable","FunctionOperand","OperandMaker","_functionsfactory__WEBPACK_IMPORTED_MODULE_1__","_conditionProcessValue__WEBPACK_IMPORTED_MODULE_2__","operatorName","isArithmeticValue","consumer","binaryFunctions","throwInvalidOperatorError","isConjunction","evaluateParam","safeToString","operatorToString","unaryFunctions","getCorrectValue","isBooleanValue","isQuote","isNumeric","variableName","useValueAsItIs","DisableConversionChar","originalValue","parameters","isReadyValue","asyncProcessValue","createCopy","returnResult","asynResult","evaluateCore","isAsyncFunction","toOperandString","isSpaceString","opStr","signs","notempty","negate","arithmeticOp","and","or","plus","minus","div","mod","power","greater","less","greaterorequal","equal","lessorequal","notequal","containsCore","notcontains","anyof","allof","isContains","rightArray","rIndex","FlowPanelModel","_panel__WEBPACK_IMPORTED_MODULE_1__","onContentChanged","getChildrenLayoutType","onSurveyLoad","contentChangedCallback","regEx","getQuestionFromText","getHtmlForQuestion","contentElementNamePrefix","getQuestionHtmlId","onAddElement","addElementToContent","onRemoveElement","searchStr","getElementContentText","dragDropMoveElement","targetIndex","insertTextAtCursor","prevName","isDesignMode","sel","getRangeAt","rangeCount","deleteContents","insertNode","createTextNode","FunctionFactory","registerFunction","functionHash","isAsyncHash","register","unregister","getAll","classRunner","getParamsAsArray","min_max","isMin","avg","getInArrayParams","calcInArray","sumInArray","minInArray","maxInArray","countInArray","avgInArray","iif","age","birthDate","today","isContainerReady","getPanelByName","questions","isDisplayMode","currentDate","diffDays","date1","date2","diffTime","Helpers","isArrayContainsEqual","isArraysEqual","ignoreOrder","xSorted","ySorted","isConvertibleToNumber","toLocaleLowerCase","isDiposed","randomizeArray","random","temp","getUnbindValue","maxLength","surveyLength","startIndexStr","postfix","strIndex","hasDigit","isCharDigit","checkLetter","isCharNotLetterAndDigit","newPostfix","ItemValue","_conditions__WEBPACK_IMPORTED_MODULE_3__","_settings__WEBPACK_IMPORTED_MODULE_5__","isVisibleValue","locTextValue","onGetTextCallback","onCreating","itemValueSeparator","createArray","setupArray","getItemByValue","valIsEmpty","getTextOrHtmlByValue","textOrHtml","runConditionsForItems","filteredItems","runner","useItemExpression","runConditionsForItemsCore","runEnabledConditionsForItems","onItemCallBack","choiceValue","hasChanded","itemRunner","getConditionRunner","setIsVisible","setIsEnabled","setLocText","pureText","calculatedText","newText","jsoObj","valueToJson","hasText","onChanged","funcName","getVisibleConditionRunner","getEnableConditionRunner","visibleConditionRunner","enableIf","enableConditionRunner","metaData","getItemValuesDefaultValue","showMode","propertyArray","JsonObjectProperty","CustomPropertiesCollection","JsonMetadataClass","JsonMetadata","JsonError","JsonUnknownPropertyError","JsonMissingTypeErrorBase","JsonMissingTypeError","JsonIncorrectTypeError","JsonRequiredPropertyError","JsonObject","Serializer","ensureLocString","localizable","defaultSource","onSet","classInfo","typeValue","choicesValue","baseValue","isRequiredValue","isUniqueValue","readOnlyValue","visibleValue","isLocalizableValue","choicesfunc","dependedProperties","isSerializable","isLightSerializable","isDynamicChoices","alternativeName","classNamePart","baseClassName","defaultValueValue","category","categoryIndex","nextToProperty","layout","onSetValue","classInfoValue","isDefaultValue","isLocalizable","jsonConv","getObjType","objType","getClassName","getChoices","choicesCallback","setChoices","valueFunc","getBaseValue","setBaseValue","isLayout","dataListValue","mergeWith","valuesNames","mergableValues","mergeValue","addDependedProperty","getDependedProperties","schemaType","addProperty","removeProperty","parentClassName","parentClasses","createPropertiesCore","createPropertiesInObj","parentClass","createPropertyInObj","locDesc","isArrayProp","parentName","createProperty","propInfo","propertyType","typeIndex","typeSymbol","getIsPropertyNameRequired","getPropertyName","maxValue","minValue","onPropertyEditorUpdate","choicesFunc","dependsOn","addDependsOnProperties","addDependsOnProperty","requiredSymbol","alternativeNames","childrenClasses","classProperties","classHashProperties","getObjPropertyValue","isObjWrapper","orignalObj","getOriginalObj","getObjPropertyValueCore","setObjPropertyValue","metaDataClass","removeClass","metaClass","findClass","overrideClassCreatore","overrideClassCreator","fillPropertiesForClass","getHashProperties","hashProperties","dynamicProps","getDynamicType","dProp","getDynamicPropertiesByObj","dynamicType","dType","hasOriginalProperty","getOriginalProperty","findProperties","propertyNames","getAllPropertiesByName","getAllClasses","createCustomType","customTypeName","customTemplateName","getChildrenClasses","canBeCreated","fillChildrenClasses","getRequiredProperties","addProperties","propertiesInfos","addCustomPropertyCore","propertyInfo","addPropertyToClass","emptyClassPropertiesHash","removePropertyFromClass","childClasses","newName","ancestorClassName","class_","addAlterNativeClassName","generateSchema","$schema","definitions","generateSchemaProperties","schemaProperties","schemaDef","generateSchemaProperty","hasChoices","enum","$ref","generateChemaClass","usedClasses","hasParent","$id","allOff","addPropertyCore","getFullDescription","types","lightSerializing","metaDataValue","storeDefaults","toJsonObjectCore","jsonObj","toObjectCore","getRequiredError","addNewError","needAddErrors","addDynamicProperties","typePropertyName","positionPropertyName","valueToObj","propertiesToJson","getDynamicProperties","getDynamicPropertyName","dynamicPropName","dynamicProperties","isValueArray","arrValue","removePos","hasToUseSetValue","valueToArray","createNewObj","removePosFromObj","checkNewObjectOnErrors","jsonValue","requiredProperties","valueRes","addValuesIntoArray","ListModel","onItemSelect","allowSelection","selectedItem","isItemDisabled","isItemSelected","INDENT","LocalizableString","LocalizableStrings","_surveyStrings__WEBPACK_IMPORTED_MODULE_1__","_settings__WEBPACK_IMPORTED_MODULE_2__","useMarkdown","htmlValues","defaultLocaleName","searchableText","renderedText","calculatedTextValue","calText","setLocaleText","defaultLocale","hasHtmlValue","getHtmlValue","getValuesKeys","getLocaleText","curLoc","hasOnStrChanged","deleteValuesEqualsToDefault","deleteValue","hasNonDefaultText","sharedData","serializeLocalizableStringAsObject","searchIndex","onSearchChanged","SerializeAsObject","useDefault","defLoc","arabicSurveyStrings","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","addColumn","addRow","removeRow","removePanel","choices_Item","matrix_column","matrix_row","savingData","savingDataError","savingDataSuccess","timerMin","timerSec","timerSpentAll","timerSpentPage","timerSpentSurvey","timerLimitAll","timerLimitPage","timerLimitSurvey","cleanCaption","clearCaption","chooseFileCaption","booleanCheckedLabel","booleanUncheckedLabel","confirmRemoveFile","confirmRemoveAllFiles","questionTitlePatternText","localeNames","basqueSurveyStrings","minError","maxError","multipletext_itemname","signaturePlaceHolder","modalCancelButtonText","modalApplyButtonText","bulgarianStrings","catalanSurveyStrings","choices_firstItem","choices_secondItem","choices_thirdItem","croatianStrings","czechSurveyStrings","danishSurveyStrings","dutchSurveyStrings","englishStrings","estonianSurveyStrings","finnishSurveyStrings","frenchSurveyStrings","georgianSurveyStrings","otherRequiredEror","germanSurveyStrings","greekSurveyStrings","hebrewSurveyStrings","hindiStrings","noneItemTex","hungarianSurveyStrings","icelandicSurveyStrings","indonesianStrings","italianSurveyStrings","japaneseSurveyStrings","kazakhStrings","koreanStrings","latvianSurveyStrings","lithuaniaSurveyStrings","macedonianSurveyStrings","norwegianSurveyStrings","persianSurveyStrings","polishSurveyStrings","portugueseBrSurveyStrings","portugueseSurveyStrings","romanianSurveyStrings","russianSurveyStrings","serbianStrings","simplifiedChineseSurveyStrings","spanishSurveyStrings","swahiliStrings","swedishSurveyStrings","tajikSurveyStrings","thaiStrings","traditionalChineseSurveyStrings","turkishSurveyStrings","ukrainianSurveyStrings","vietnameseSurveyStrings","welshSurveyStrings","QuestionMatrixBaseModel","_itemvalue__WEBPACK_IMPORTED_MODULE_0__","_helpers__WEBPACK_IMPORTED_MODULE_4__","generatedVisibleRows","generatedTotalRow","filteredRows","filteredColumns","createColumnValues","newRows","processRowsOnSet","filterItems","getVisibleRows","runItemsCondition","areInvisibleElementsShowing","onRowsChanged","getDataFilteredValues","getDataFilteredProperties","onColumnsChanged","fireCallback","visibleRowsChangedCallback","shouldRunColumnExpression","hasRowsAsItems","oldVisibleRows","hasChanges","runConditionsForRows","hasColumnsChanged","runConditionsForColumns","isClearValueOnHidden","clearIncorrectValues","restoreNewVisibleRowsValues","clearGeneratedRows","showInvisibile","rowsVisibleIf","hasChanged","useColumnsExpression","columnsVisibleIf","newVal","isChanged","clearInvisibleValuesInRows","newData","PageModel","_panel__WEBPACK_IMPORTED_MODULE_2__","hasShownValue","isRandomizing","timeSpent","delete","removeSelfFromList","onFirstRendering","wasShown","canRenderFirstRows","isPageStarted","calcCssClasses","updatePageCssClasses","getIsPageVisible","exceptionQuestion","isStarted","onNumChanged","setWasShown","areQuestionsRandomized","randomizeElements","oldElements","newElements","questionsOrder","scrollToTop","scrollElementToTop","getPanels","visibleOnly","includingDesignTime","addPanelsIntoList","onVisibleChanged","pageVisibilityChanged","dragDropInfo","correctDragDropInfo","dragDropCanDropTagert","dragDropCanDropSource","dragDropAllowFromSurvey","dragDropFindRow","updateRowsRemoveElementFromRow","dragDropAddTarget","isLayoutTypeSupported","insertAfter","dragAndDropAllow","isCancel","dragDropGetElementIndex","isSamePanel","removeElement","addElement","prevRow","prevElement","dragDropCanDropCore","dragDropCanDropNotNext","dragDropIsSameElement","pnl","containsElement","srcIndex","destIndex","el1","el2","ensureRowsVisibility","DragDropInfo","QuestionRowModel","PanelModelBase","PanelModel","_survey_element__WEBPACK_IMPORTED_MODULE_3__","_question__WEBPACK_IMPORTED_MODULE_4__","_conditions__WEBPACK_IMPORTED_MODULE_5__","_questionfactory__WEBPACK_IMPORTED_MODULE_6__","_error__WEBPACK_IMPORTED_MODULE_7__","_settings__WEBPACK_IMPORTED_MODULE_8__","_utils_utils__WEBPACK_IMPORTED_MODULE_9__","_scrollableParent","_updateVisibility","getRowId","rowCounter","findScrollableContainer","isRowContainerDivVisible","stopLazyRendering","ensureVisibility","setIsLazyRendering","isLazyRenderingValue","updateVisible","calcVisible","setWidth","visCount","visibleElements","preSetWidthElements","setElementMaxMinWidth","getElementWidth","getRenderedWidthFromWidth","rightIndent","getRenderedCalcWidth","calcWidthEl","visElements","needToUpdateVisibleElements","isQuestionsReady","questionsValue","elementsValue","getPanelId","updateElementCss","updateVisibleIndexes","panelCounter","setSurveyImpl","markQuestionListDirty","showPageTitles","allowShowEmptyTitleInDesignMode","allowShowEmptyDescriptionInDesignMode","questionTitlePattern","titlePattern","getSurveyMarkdownHtml","getRendererForString","processText","cssClassesValue","updatePanelCssClasses","getPanel","getLayoutType","layoutType","qs","getValidName","getQuestionByValueName","getValueName","getComment","getDisplayValue","keysAsText","getComments","clearErrors","getElementsInDesign","includeHidden","focusOnFirstError","focuseOnFirstError","firstErrorQuestion","hasErrorsCore","focus","hasErrorsInPanels","hasRequiredError","customError","validatePanel","beforeSettingPanelErrors","getErrorCustomText","visQuestions","addQuestionsToList","requiredErrorText","updateContainsErrors","getContainsErrors","containsErrors","updateElementVisibility","getFirstQuestionToFocus","withError","hasInput","currentErrorCount","focusFirstQuestion","focusFirstErrorQuestion","addElementsToList","addElementsToListCore","updateCustomWidgets","getQuestionTitleLocation","onGetQuestionTitleLocation","questionTitleLocation","getStartIndex","getQuestionStartIndex","questionStartIndex","getProgressInfoByElements","childVisibilityChanged","newIsVisibleValue","oldIsVisibleValue","createRowAndSetLazy","createRow","isLazyRenderInRow","onElementVisibilityChanged","buildRows","surveyImpl","updateRowsOnElementAdded","panelAdded","questionAdded","addElementCallback","onElementStartWithNewLineChanged","updateRowsOnElementRemoved","panelRemoved","questionRemoved","removeElementCallback","updateRowsVisibility","canBuildRows","isNewRow","lazyRowsRenderingStartRow","dragDropAddTargetToRow","findRowByElement","elIndex","elementWidthChanged","getRenderedTitle","isClearValueOnHiddenContainer","updateValueWithDefaults","setVisibleIndex","resetVisibleIndexes","lastVisibleIndex","beforeSetVisibleIndex","panelStartIndex","getPanelStartIndex","panelIndex","isContinueNumbering","isParentReadOnly","isSurveyReadOnly","onReadOnlyChanged","reNew","canAddElement","insertElementAfter","insertElementBefore","before","addQuestion","addNewQuestion","questionType","createQuestion","addNewPanel","createNewPanel","removeQuestion","runVisibleCondition","runEnableCondition","runRequiredCondition","conditionRunner","requiredIf","onAnyValueChanged","els","findElement","dragDropAddTargetToEmptyPanel","destRow","dragDropAddTargetToNewRow","dragDropAddTargetToExistingRow","dragDropAddTargetToEmptyPanelCore","prevRowIndex","srcRow","targetRow","onIndentChanged","onSetData","getPage","setPage","moveToBase","notifySurveyOnVisibilityChanged","setNo","showNumber","showQuestionNumbers","panelVisibilityChanged","getIndentSize","innerIndent","clearOnDeletingContainer","cancelPreviewByPage","registerElement","PopupModel","PopupBaseViewModel","_surveyStrings__WEBPACK_IMPORTED_MODULE_2__","_utils_popup__WEBPACK_IMPORTED_MODULE_3__","verticalPosition","horizontalPosition","onShow","FOCUS_INPUT_SELECTOR","popupDirection","trapFocus","focusableElements","firstFocusableElement","lastFocusableElement","activeElement","updatePosition","focusFirstInput","background","scrollContent","updateVerticalPosition","calculatePopupDirection","calculatePosition","newVerticalDimensions","updateVerticalDimensions","calculatePointerTarget","createPopupContainer","mountPopupContainer","Question","_survey_element__WEBPACK_IMPORTED_MODULE_2__","_surveyStrings__WEBPACK_IMPORTED_MODULE_3__","_error__WEBPACK_IMPORTED_MODULE_4__","_validator__WEBPACK_IMPORTED_MODULE_5__","_localizablestring__WEBPACK_IMPORTED_MODULE_6__","_conditions__WEBPACK_IMPORTED_MODULE_7__","_questionCustomWidgets__WEBPACK_IMPORTED_MODULE_8__","_settings__WEBPACK_IMPORTED_MODULE_9__","_rendererFactory__WEBPACK_IMPORTED_MODULE_10__","customWidgetData","onReadyChanged","parentQuestionValue","isRunningValidatorsValue","isValueChangedInSurvey","allowNotifyValueChanged","getQuestionId","locTitleValue","getUpdatedQuestionTitle","locProcessedTitle","locCommentText","updateQuestionCss","initCommentFromSurvey","questionCounter","readOnlyCommentRenderMode","onGetSurvey","oldValueName","onValueNameChanged","questionRenamed","initDataFromSurvey","onNameChanged","choicesLoaded","notifySurveyVisibilityChanged","runConditions","areEmptyElementsHidden","questionCreated","onParentChanged","setParentQuestion","onParentQuestionChanged","getTitleLocation","isVisibilityChanged","questionVisibilityChanged","isFlowLayout","getTitleLocationCore","isAllowTitleLeft","getDescriptionLocation","descriptionLocation","questionDescriptionLocation","getAllErrors","getErrorByType","errorType","isCustomWidgetRequested","customWidgetValue","updateCustomWidget","getCustomWidget","afterRenderQuestionElement","hasSingleInput","afterRenderQuestionInput","afterRenderQuestion","afterRenderQuestionCallback","beforeDestroyQuestionElement","updateElementCssCore","updateCssClasses","updateQuestionCssClasses","ensureElementCss","setCssRoot","getCssRoot","hasTitleOnLeft","setCssHeader","getCssHeader","hasTitleOnTop","setCssContent","getCssContent","setCssTitle","getCssTitle","isAnswered","setCssError","getCssError","errorLocation","objCss","getCssType","getFirstErrorInputElementId","getFirstInputElementId","FocusElement","focusCallback","maxOthersLength","getProcessedTextValue","textValue","isExists","TextPreprocessorValuesMap","supportComment","supportOther","hasOtherChanged","isDesignModeV2","supportCreatorV2","runVisibleIfCondition","runEnableIfCondition","runRequiredIfCondition","conditionEnabelRunner","conditionRequiredRunner","calcNo","hideNumber","getUpdatedQuestionNo","surveyLoadCallback","onSurveyValueChanged","updateValueFromSurvey","requireUpdateCommentValue","updateCommentFromSurvey","commentChangedCallback","setNewValue","valueToDataCallback","unbindValue","createValueCopy","isValueSurveyElement","canClearValueAsInvisible","isParentVisible","hasVisibleQuestionByValueName","clearValueIfInvisible","calcDisplayValue","displayValueCallback","getDisplayValueEmpty","getDisplayValueCore","keyAsText","isValueExpression","defaultValueExpression","convertDefaultValue","getPlainData","includeEmpty","includeQuestionTypes","questionPlainData","isNode","calculations","calculation","isComment","correctAnswer","getQuizQuestionCount","getCorrectAnswerCount","isAnswerCorrect","correctAnswerCount","quizQuestionCount","isDefaultValueEmpty","setDefaultValue","getQuestionFromArray","getDefaultValue","setValueAndRunExpression","setFunc","getQuestionComment","setQuestionComment","questionComment","setNewComment","updateIsAnswered","getIsAnswered","getValidators","validators","getSupportedValidators","classValidators","supportedValidators","addSupportedValidators","addConditionObjectsByContext","processedTitle","getConditionJson","operator","oldHasErrors","checkForErrors","isOnValueChanged","beforeSettingQuestionErrors","addError","newError","removeError","qErrors","collectErrors","onCheckForErrors","canRunValidators","runValidators","fireSurveyValidation","validateValueCallback","validateQuestion","getIsRunningValidators","validatorRunner","onAsyncCompleted","doOnAsyncCompleted","raiseOnCompletedAsyncValidators","onCompletedAsyncValidators","isRunningValidators","oldAnswered","setNewValueInData","onValueChanged","isTextValue","isUpdateValueTextOnTyping","getDataLocNotification","valueToData","setValueCore","questionValue","setQuestionValue","canSetValueToSurvey","valueForSurvey","valueFromData","setComment","valueFromDataCallback","valueChangedCallback","setQuestionVisibleIndexForHiddenTitle","setQuestionVisibleIndexForHiddenNumber","supportGoNextPageAutomatic","supportGoNextPageError","clearUnusedValues","useDisplayValuesInTitle","getRendererByQuestion","getValidatorTitle","getAllValues","numberingAllowedByParent","QuestionCustomWidget","CustomWidgetCollection","widgetJson","isFirstRender","onLocaleChangedEvent","isFit","isLibraryLoaded","showInToolbox","getActivatedBy","widgetIsLoaded","init","activatedByChanged","activatedBy","pdfQuestionType","pdfRender","widgetsValues","widgetsActivatedBy","onCustomWidgetAdded","addCustomWidget","widgets","widgetName","setActivatedBy","widget","getCustomWidgetByName","QuestionSelectBase","QuestionCheckboxBase","_survey__WEBPACK_IMPORTED_MODULE_1__","_itemvalue__WEBPACK_IMPORTED_MODULE_3__","_surveyStrings__WEBPACK_IMPORTED_MODULE_4__","_error__WEBPACK_IMPORTED_MODULE_5__","_choicesRestful__WEBPACK_IMPORTED_MODULE_6__","_helpers__WEBPACK_IMPORTED_MODULE_8__","otherItemValue","dependedQuestions","noneItemValue","isSettingDefaultValue","isSettingComment","isRunningChoices","isFirstLoadChoicesFromUrl","isUpdatingChoicesDependedQuestions","onVisibleChoicesChanged","updateVisibilityBasedOnChoices","setNewRestfulProperty","locOtherText","choicesByUrl","onLoadChoicesFromUrl","updateChoicesFromServer","choicesFromQuestion","removeFromDependedQuestion","getQuestionWithChoices","choicesOrder","updateVisibleChoices","choicesFromUrl","getHasOther","runItemsEnableCondition","hasUnknownValue","prevCommentValue","getIsMultipleValue","setConditionalChoicesRunner","filteredChoicesValue","activeChoices","setConditionalEnableChoicesRunner","conditionChoicesEnableIfRunner","onEnableItemCallBack","clearDisabledValues","onAfterRunItemsEnableCondition","choicesVisibleIf","conditionChoicesVisibleIfRunner","choicesEnableIf","getFilteredChoices","rendredValueToDataCore","createRestful","commentValue","getStoreOthersAsComment","isRenderedValueSetting","rendredValueToData","updateComment","rendredValueFromData","isOtherSel","oldComment","isRunning","isWaitingForParameters","cachedValueForUrlRequests","choiceitem","renderedValueFromDataCore","includeOther","isFilteredChoices","checkEmptyValue","hasNone","noneItem","isValueDisabled","addIntoDependedQuestion","calcValue","calcVisibleChoices","canUseFilteredChoices","sortVisibleChoices","addToVisibleChoices","isAddDefaultItems","isAddAll","newItemValue","supportNone","isItemInList","parentQuestion","dataValue","choiceDataItem","getChoicesDisplayValue","isOther","getChoicesFromQuestion","isSelected","choicesFromQuestionMode","isBuiltInChoice","itemsSelected","isSupportProperty","otherErrorText","runChoicesByUrl","setSurveyCore","storeOthersAsComment","newComment","getCommentFromValue","setOtherValueIntoValue","processor","getTextProcessor","isChoicesLoaded","disableOnGettingChoicesFromWeb","enableOnLoadingChoices","newChoices","checkCachedValuesOnExisting","cachedValues","createCachedValueForUrlRequests","updateCachedValueForUrlRequests","checkOnExisting","updatedValue","updateChoicesDependedQuestions","visibleChoicesChangedCallback","hideIfChoicesEmpty","filteredChoices","sortArray","mult","keepIncorrectValues","questionCountByValueName","clearIncorrectValuesCallback","clearIncorrectValuesCore","clearValueOnDisableItems","clearDisabledValuesCore","canClearValueAnUnknow","columnClass","colCount","getItemIndex","isNone","labelClass","controlLabelClass","controlLabelChecked","showItemsInOrder","prevIndex","leftElementsCount","oldIsReady","getItemValueWrapperComponentName","TemplateRendererComponentName","getItemValueWrapperComponentData","colCountChangedCallback","QuestionBooleanModel","_questionfactory__WEBPACK_IMPORTED_MODULE_0__","getValueTrue","setCheckedValue","getValueFalse","locLabel","valueTrue","valueFalse","registerQuestion","ButtonGroupItemValue","QuestionButtonGroupModel","ButtonGroupItemModel","_question_baseselect__WEBPACK_IMPORTED_MODULE_2__","QuestionCheckboxModel","_questionfactory__WEBPACK_IMPORTED_MODULE_1__","_helpers__WEBPACK_IMPORTED_MODULE_3__","_surveyStrings__WEBPACK_IMPORTED_MODULE_5__","selectAllItemValue","invisibleOldValues","isChangingValueOnClearIncorrect","allItemCount","hasSelectAll","selectedCount","selectAll","toggleSelectAll","shouldCheckMaxSelectedChoices","maxSelectedChoices","isSelectAll","prevNoneIndex","noneIndexInArray","newNoneIndex","getFirstUnknownIndex","noneValue","supportSelectAll","valStr","clearIncorrectAndDisabledValues","clearDisabled","restoredValues","restoreValuesFromInvisible","isUnkown","visItems","setDefaultValueWithOthers","hasActiveChoices","DefaultChoices","QuestionCommentModel","_question_textbase__WEBPACK_IMPORTED_MODULE_2__","ComponentQuestionJSON","ComponentCollection","QuestionCustomModelBase","QuestionCustomModel","QuestionCompositeModel","_question__WEBPACK_IMPORTED_MODULE_0__","_textPreProcessor__WEBPACK_IMPORTED_MODULE_4__","onInit","onLoaded","onAfterRender","onAfterRenderContentElement","elementsJSON","createElements","customQuestionValues","getCustomQuestionByName","customQuestion","onAddingJson","isComposite","questionJSON","createCompositeModel","createCustomModel","onCreateComposite","onCreateCustom","CreateDisabledDesignElements","createWrapper","getElement","initElement","disableDesignActions","getSurveyData","locNotification","convertDataName","convertDataValue","questionWrapper","qType","QuestionCompositeTextProcessor","composite","settingNewValue","textProcessing","ItemVariableName","createPanel","setAfterRenderCallbacks","setIsContentElement","isContentElement","oldComposite","prefixName","prefixText","QuestionDropdownModel","minMaxChoices","choicesMax","choicesMin","choicesStep","QuestionEmptyModel","QuestionExpressionModel","getCurrecyCodes","_questionfactory__WEBPACK_IMPORTED_MODULE_3__","_conditions__WEBPACK_IMPORTED_MODULE_4__","runIfReadOnly","runIfReadOnlyValue","getValueAsStr","getExpressionDisplayValue","displayStyle","toLocaleDateString","currency","useGrouping","maximumFractionDigits","minimumFractionDigits","toLocaleString","QuestionFileModel","_questionfactory__WEBPACK_IMPORTED_MODULE_2__","isUploading","onStateChanged","currentState","clearFiles","doneCallback","allFilesOk","stateChanged","loadFilesProc","storeDataAsText","fileReader","FileReader","readAsDataURL","uploadFiles","fileItem","allowImagesPreview","isFileImage","newValues","downloadFile","waitForUpload","errorLength","imagePrefix","subStr","QuestionHtmlModel","_questionnonvalue__WEBPACK_IMPORTED_MODULE_0__","ignoreHtmlProgressing","processHtml","QuestionImageModel","ImageItemValue","QuestionImagePickerModel","convertValToArrayForMultSelect","MatrixRowModel","MatrixCells","QuestionMatrixModel","_martixBase__WEBPACK_IMPORTED_MODULE_2__","_error__WEBPACK_IMPORTED_MODULE_6__","_questionfactory__WEBPACK_IMPORTED_MODULE_7__","_localizablestring__WEBPACK_IMPORTED_MODULE_8__","_question_dropdown__WEBPACK_IMPORTED_MODULE_9__","_settings__WEBPACK_IMPORTED_MODULE_10__","onMatrixRowChanged","getCorrectedRowValue","rowClass","rowErrorClass","cellsOwner","setCellText","getCellRowColumnValue","createString","setDefaultCellText","matrixDefaultRowName","getCellLocText","getDefaultCellLocText","getCellText","getDefaultCellText","getCellDisplayText","getColumns","resRow","rowValues","isRowChanging","emptyLocalizableString","cellsValue","updateVisibilityBasedOnRows","rowsOrder","cellDisabledClass","cellSelectedClass","itemHoverClass","cellClass","createMatrixRow","sortVisibleRows","hasValuesInAllRows","hasErrorInRows","isAllRowRequired","onMatrixRowCreated","rowVal","newKey","rowName","rowDataItem","hideIfRowsEmpty","getColumnHeaderWrapperComponentName","SurveyModel","getElementWrapperComponentName","getColumnHeaderWrapperComponentData","getElementWrapperComponentData","getRowHeaderWrapperComponentName","getRowHeaderWrapperComponentData","DefaultRows","DefaultColums","MatrixDropdownRowModel","QuestionMatrixDropdownModel","_question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_0__","_itemvalue__WEBPACK_IMPORTED_MODULE_2__","buildCells","resetRenderedTable","getFooterText","locTotalText","getRowTitleWidth","rowTitleWidth","rowValue","displayRowValue","getRowDisplayValue","hasContext","prefixTitle","fullTitle","generateRows","addDefaultColumns","matrixDropdownColumnTypes","MatrixDropdownColumn","MatrixDropdownCell","MatrixDropdownTotalCell","MatrixDropdownRowModelBase","MatrixDropdownTotalRowModel","QuestionMatrixDropdownRenderedCell","QuestionMatrixDropdownRenderedRow","QuestionMatrixDropdownRenderedTable","QuestionMatrixDropdownModelBase","_martixBase__WEBPACK_IMPORTED_MODULE_1__","_survey_element__WEBPACK_IMPORTED_MODULE_4__","_textPreProcessor__WEBPACK_IMPORTED_MODULE_5__","_itemvalue__WEBPACK_IMPORTED_MODULE_6__","_surveyStrings__WEBPACK_IMPORTED_MODULE_7__","_questionfactory__WEBPACK_IMPORTED_MODULE_8__","_question_expression__WEBPACK_IMPORTED_MODULE_9__","_functionsfactory__WEBPACK_IMPORTED_MODULE_10__","_settings__WEBPACK_IMPORTED_MODULE_11__","_error__WEBPACK_IMPORTED_MODULE_12__","_actions_action__WEBPACK_IMPORTED_MODULE_13__","_actions_adaptive_container__WEBPACK_IMPORTED_MODULE_14__","onUpdateSelectBaseCellQuestion","onCellQuestionUpdate","locOptionsCaption","columnColCount","colOwnerValue","indexValue","_isVisible","_hasVisibleCell","doShowInMultipleColumnsChanged","updateTemplateQuestion","templateQuestion","getColumnTypes","getClassNameProperty","colOwner","calcCellQuestionType","onColumnCellTypeChanged","templateQuestionValue","locRequiredErrorText","cellType","showInMultipleColumns","isSupportMultipleColumns","totalType","totalExpression","createCellQuestion","createNewQuestion","callOnCellQuestionUpdate","updateCellQuestion","onUpdateJson","setQuestionProperties","qDefinition","defaultCellTypeChanged","getCellType","matrixDefaultCellType","prevCellType","curCellType","removeProperties","doItemValuePropertyChanged","isEditableTemplateElement","onColumnPropertyChanged","onColumnItemValuePropertyChanged","onShowInMultipleColumnsChanged","validateCell","getTotalExpression","totalFormat","totalCurrency","totalDisplayStyle","totalMaximumFractionDigits","totalMinimumFractionDigits","funName","MatrixDropdownRowTextProcessor","getValues","onCustomProcessText","IndexVariableName","RowValueVariableName","isSettingValue","detailPanelValue","isCreatingDetailPanel","subscribeToChanges","textPreProcessor","RowVariableName","showHideDetailPanel","getId","idCounter","getCellValue","hasDetailPanel","detailPanel","setIsDetailPanelShowing","onDetailPanelShowingChanged","isDetailPanelShowing","hideDetailPanel","showDetailPanel","ensureDetailPanel","destroyPanel","createRowDetailPanel","getRowValue","getRowIndex","allValues","OwnerVariableName","getDataValueCore","valuesHash","newColumnValue","updateQuestionsValue","changedName","changedValue","changedQuestion","changingValue","onRowChanging","isValidateOnValueChanging","hasQuestonError","onRowChanged","colQuestion","getQuestionByColumnName","detailQuestion","isColQuestion","getCellByColumnName","checkIfValueInRowDuplicated","getQuestionByColumn","getCellByColumn","columnName","detailQuestions","getQuestionsByName","getSharedQuestionByName","qVal","matrixTotalValuePostFix","updateCellQuestionOnColumnChanged","updateCellOnColumnChanged","updateCellQuestionOnColumnItemValueChanged","updateCellOnColumnItemValueChanged","onQuestionReadOnlyChanged","parentIsReadOnly","panelHasError","hideErroredPanel","isSingleDetailPanel","createCell","cellValue","commentKey","editingObj","editingObjValue","onEditingObjPropertyChanged","updateOnSetValue","onTotalValueChanged","prevValue","showErrorOnCore","getShowErrorLocation","isFirstChoice","hideCaption","choiceIndex","cssError","isShowInMultipleColumns","calculateFinalClassName","matrixCssClasses","questionCss","isDetailRow","hasActionCellInRowsValues","build","hasFooter","isColumnLayoutHorizontal","hasRemoveRowsValue","isRequireReset","hasRemoveRows","canRemoveRows","headerRowValue","footerRowValue","buildRowsActions","buildHeader","buildFooter","updateShowTableAndAddRow","getShowColumnsIfEmpty","showAddRow","canAddRow","getAddRowLocation","columnLayout","onAddedRow","getRenderedDataRowCount","rowsActions","buildRowActions","addHorizontalRow","onRemovedRow","getRenderedRowIndex","removeCount","onDetailPanelChangeVisibility","panelRowIndex","createDetailPanelRow","colHeaders","isShown","hasRowText","hasActionCellInRows","createHeaderCell","hasVisibleCell","createMutlipleColumnsHeader","createTextCell","visibleTotalRow","createMutlipleColumnsFooter","createEditCell","buildHorizontalRows","buildVerticalRows","getRowActions","canRemoveRow","renderedRows","useAsHeader","renderedRow","createHorizontalRow","getRowActionsCell","rowActions","actionContainer","setDefaultRowActions","getUpdatedMatrixRowActions","addRowActionsCell","renderedCell","setHeaderCellWidth","createMutlipleEditCells","buttonCell","onCreateDetailPanelRenderedRowCallback","createMutlipleVerticalRows","createVerticalRow","createEndVerticalActionRow","getMultipleColumnChoices","lTitle","hCell","setRequriedToHeaderCell","rChoice","rChoiceIndex","visChoices","rCell","hasTotal","rRow","isFooter","choiceItem","setHeaderCell","getColumnWidth","createRemoveRowCell","isRemoveRow","lockResetRenderedTable","isDoingonAnyValueChanged","createNewDetailPanel","selectedElementInDesign","newColumns","updateColumnsIndexes","clearRowsAndResetRenderedTable","updateColumnsCellType","colNames","onStartRowAddingRemoving","onEndRowAdding","onEndRowRemoving","columnsChangedCallback","renderedTableValue","onRenderedTableResetCallback","createRenderedTable","onRenderedTableCreatedCallback","onCellCreatedCallback","matrixCellCreated","getRequiredText","updateHasFooter","getColumnByName","prevTotalValue","totalValue","runCellsCondition","runTotalsCondition","getRowConditionValues","checkColumnsVisibility","isColumnVisibilityChanged","curVis","hasVisCell","totalRow","getColumnName","columnMinWidth","updateValueOnRowsGeneration","createNewValue","rValue","getNewValueOnRowChanged","getVisibleTotalRow","generateTotalRow","visRows","getRowValueCore","checkedRow","addDuplicationError","setRowValue","nullOnEmpty","isMatrixValueEmpty","getRowObj","displayvalue","getCellQuestions","onBeforeValueChanged","onSetQuestionValue","checkForAnswersOrErrors","predicate","every","errosInRows","isDuplicated","isValueDuplicated","detailPanelMode","getUniqueColumns","isValueInColumnDuplicated","keyValues","isValueDuplicatedInRow","getFirstCellQuestion","createQuestionCore","deleteRowValue","getOnCellValueChangedOptions","getQuestion","colName","getCellQuestion","onCellValueChanged","onCellValueChangedCallback","matrixCellValueChanged","matrixCellValidate","oldRowValue","matrixCellValueChanging","newRowValue","isDeletingValue","rowObj","columnValue","combine","detailElements","onHasDetailPanelCallback","updateDetailPanelButtonCss","onCreateDetailPanelCallback","getQuestionByValueNameFromArray","isSett","getCellTemplateData","getMatrixCellTemplateData","getCellWrapperComponentName","getCellWrapperComponentData","MatrixDynamicRowModel","QuestionMatrixDynamicModel","_helpers__WEBPACK_IMPORTED_MODULE_5__","_settings__WEBPACK_IMPORTED_MODULE_6__","_utils_utils__WEBPACK_IMPORTED_MODULE_7__","sortablejs__WEBPACK_IMPORTED_MODULE_8__","initialRowCount","setRowCountValueFromData","moveRowByIndex","fromIndex","toIndex","movableRow","defaultAddRowText","allowRowsDragAndDrop","initSortable","sortableInst","defaultRowValue","rowCount","rowCountValue","matrixMaximumRowCount","newRow","getValueForNewRow","domNode","QuestionMatrixDynamicRenderedTable","onGetValueForNewRowCallBack","maxRowCount","allowAddRows","allowRemoveRows","canRemoveRowsCallback","matrixAllowRemoveRow","oldRowCount","getQuestionToFocusOnAddingRow","matrixBeforeRowAdded","addRowCore","detailPanelShowOnAdding","prevRowCount","getDefaultRowValue","matrixRowAdded","isRowAdded","defaultValueFromLastRow","isRequireConfirmOnRowDelete","confirmDeleteText","matrixRowRemoving","removeRowCore","matrixRowRemoved","addRowLocation","hideColumnsIfEmpty","addColumnIntoaddConditionObjectsByContext","matrixMaxRowCountInCondition","hasErrorInMinRows","setRowCount","getRowValueByIndex","newRowCount","MultipleTextItemModel","QuestionMultipleTextModel","_survey_element__WEBPACK_IMPORTED_MODULE_1__","_question_text__WEBPACK_IMPORTED_MODULE_3__","_jsonobject__WEBPACK_IMPORTED_MODULE_4__","_questionfactory__WEBPACK_IMPORTED_MODULE_5__","_helpers__WEBPACK_IMPORTED_MODULE_6__","editorValue","createEditor","questionTitleTemplateCallback","getItemDefaultValue","maxTextLength","placeHolder","locPlaceHolder","getMultipleTextValue","setMultipleTextValue","isMultipleItemValueChanging","updateItemsSize","addDefaultItems","DefaultMutlipleTextItems","addItem","editorsOnSurveyLoad","performForEveryEditor","updateInputSize","createTextItem","getItemByName","onItemValueChanged","itemName","getIsRequiredText","QuestionPanelDynamicItem","QuestionPanelDynamicTemplateSurveyImpl","QuestionPanelDynamicModel","_textPreProcessor__WEBPACK_IMPORTED_MODULE_3__","_jsonobject__WEBPACK_IMPORTED_MODULE_5__","QuestionPanelDynamicItemTextProcessor","panelItem","getSharedQuestionFromArray","ParentItemVariableName","returnDisplayValue","panelValue","setPanelItemData","getPanelItemData","surveyValues","getRootData","loadingPanelCount","currentIndexValue","isAddingNewPanels","templateValue","createAndSetupNewPanelObject","addOnPropertyChangedCallback","rebuildPanels","setPanelsState","setTemplatePanelSurveyImpl","setPanelsSurveyImpl","assignOnPropertyChangedToTemplate","onTemplateElementPropertyChanged","currentIndexChangedCallback","showRangeInProgress","templateElements","prepareValueForPanelCreating","addingNewPanelsValue","isNewPanelsValueChanged","setValueAfterPanelsCreating","isValueChangingInternally","panelsState","setValueBasedOnPanelCount","reRunCondition","panelCountChangedCallback","templateTitle","minPanelCount","maxPanelCount","panelMaximumPanelCount","renderModeChangedCallback","setPanelVisibleIndex","showIndex","allowAddPanel","allowRemovePanel","defaultPanelValue","isRowEmpty","newPanel","hasModified","copyValue","defaultValueFromLastPanel","dynamicPanelAdded","getPanelIndex","dynamicPanelRemoved","clearIncorrectValuesInPanel","iscorrectValueWithPostPrefix","postPrefix","panelObjs","questionName","runPanelsCondition","panelValues","hasKeysDuplicated","updatePanelsContainsErrors","changingValueQuestion","errosInPanels","hasErrorInPanels","visibleQuestions","getPanelDisplayValue","qValue","setOnCompleteAsyncInPanel","pnlError","createNewPanelObject","isInteractiveDesignElement","getTemplateQuestionTitleLocation","templateTitleLocation","setPanelCountBasedOnValue","newPanelCount","panelUpdateValueFromSurvey","panelSurveyValueChanged","isSetPanelItemData","dynamicPanelItemValueChanged","panelDataItem","panelRemoveButtonLocation","QuestionRadiogroupModel","showClearButton","QuestionRankingModel","sortablejs__WEBPACK_IMPORTED_MODULE_0__","_question_checkbox__WEBPACK_IMPORTED_MODULE_3__","_utils_is_mobile__WEBPACK_IMPORTED_MODULE_4__","handleArrowUp","handleArrowDown","moveArrayItemBack","syncNumbers","setValueFromUI","focusItem","moveArrayItemForward","itemsNodes","textNodes","textNode","visibleChoice","indexNodes","indexNode","setGhostText","ghostNode","removeOtherChoiceFromChoices","mergeValueAndVisibleChoices","onStart","opacity","QuestionRatingModel","rateValuesChangedCallback","locMinRateDescriptionValue","locMaxRateDescriptionValue","rateMax","rateStep","rateMin","rateValues","ratingMaximumRateValueCount","correctValue","fr","itemCss","QuestionSignaturePadModel","signature_pad__WEBPACK_IMPORTED_MODULE_3__","_questionfactory__WEBPACK_IMPORTED_MODULE_4__","defaultWidth","defaultHeight","resizeCanvas","backingStoreRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","oldWidth","oldHeight","scale","updateValue","signaturePad","dataFormat","initSignaturePad","destroySignaturePad","buttonEl","onclick","readOnlyChangedCallback","allowClear","isDrawingValue","updateValueHandler","propertyChangedHandler","QuestionTextModel","_localizablestring__WEBPACK_IMPORTED_MODULE_2__","_validator__WEBPACK_IMPORTED_MODULE_4__","_settings__WEBPACK_IMPORTED_MODULE_7__","_question_textbase__WEBPACK_IMPORTED_MODULE_8__","locDataListValue","setRenderedMinMax","calcRenderedPlaceHolder","minValueExpression","maxValueExpression","isTextInput","minMaxTypes","isValueLessMin","getMinMaxErrorText","minErrorText","getCalculatedMinMax","isValueGreaterMax","maxErrorText","isMinMaxType","errorText","minMax","isDateInputType","minDate","maxDate","locDataList","correctValueType","hasPlaceHolder","propertyEditor","QuestionTextBase","textUpdateMode","setRenderedPlaceHolder","QuestionFactory","ElementFactory","creatorHash","questionCreator","unregisterElement","elementType","getAllTypes","elementCreator","removeFromSerializer","QuestionNonValue","RendererFactory","renderersHash","unregisterRenderer","rendererAs","renderer","settings","executeCompleteTriggerOnValueChanged","executeSkipTriggerOnValueChanged","confirmActionFunc","confirm","maximumConditionRunCountOnValueChanged","lazyRowsRendering","customIcons","StylesManager","_defaultCss_cssstandard__WEBPACK_IMPORTED_MODULE_0__","Enabled","findSheet","SurveyJSStylesSheetId","createSheet","initializeStyles","styleSheetId","styleSheets","ownerNode","themeName","themeSelector","ThemeCss","sheet_1","theme_1","ThemeColors","cssRuleText","colorVariableName","insertRule","Media","media","orange","darkblue","darkrose","stone","winter","winterstone","modern","bootstrap","bootstrapmaterial","modernThemeCss","bootstrapThemeCss","bootstrapmaterialThemeCss","SurveyElement","_rendererFactory__WEBPACK_IMPORTED_MODULE_2__","_actions_action__WEBPACK_IMPORTED_MODULE_4__","_actions_adaptive_container__WEBPACK_IMPORTED_MODULE_5__","selectedElementInDesignValue","updateVisibleErrors","childInfo","ScrollElementToTop","getElementById","scrollIntoView","elemTop","GetFirstNonTextElement","removeSpaces","tEl","focusElementCore","updateTitleActions","updateExpandAction","notifyStateChanged","elementContentVisibilityChanged","titleToolbarValue","getTitleActions","expandAction","isTitleActionRequested","titleActions","hasStateButton","getUpdatedElementTitleActions","surveyImplValue","surveyDataValue","textProcessorValue","surveyChangedCallback","getProcessedHtml","oldPage","SurveyError","_defaultCss_cssstandard__WEBPACK_IMPORTED_MODULE_4__","_page__WEBPACK_IMPORTED_MODULE_5__","_textPreProcessor__WEBPACK_IMPORTED_MODULE_6__","_conditionProcessValue__WEBPACK_IMPORTED_MODULE_7__","_dxSurveyService__WEBPACK_IMPORTED_MODULE_8__","_surveyStrings__WEBPACK_IMPORTED_MODULE_9__","_error__WEBPACK_IMPORTED_MODULE_10__","_localizablestring__WEBPACK_IMPORTED_MODULE_11__","_stylesmanager__WEBPACK_IMPORTED_MODULE_12__","_surveytimer__WEBPACK_IMPORTED_MODULE_13__","_settings__WEBPACK_IMPORTED_MODULE_15__","_utils_utils__WEBPACK_IMPORTED_MODULE_16__","variablesHash","localeValue","completedStateValue","completedStateTextValue","isTimerStarted","onCompleting","onComplete","onShowingPreview","onNavigateToUrl","onStarted","onPartialSend","onCurrentPageChanging","onValueChanging","onPanelVisibleChanged","onQuestionCreated","onQuestionAdded","onQuestionRemoved","onPanelAdded","onPanelRemoved","onPageAdded","onValidateQuestion","onSettingQuestionErrors","onServerValidateQuestions","onValidatePanel","onErrorCustomText","onValidatedErrorsOnCurrentPage","onProcessHtml","onGetQuestionTitle","onGetQuestionNo","onProgressText","onTextMarkdown","onTextRenderAs","onUploadFiles","onDownloadFile","onClearFiles","onLoadChoicesFromServer","onLoadedSurveyFromService","onProcessTextValue","onUpdateQuestionCssClasses","onUpdatePanelCssClasses","onUpdatePageCssClasses","onAfterRenderSurvey","onAfterRenderHeader","onAfterRenderPage","onAfterRenderQuestion","onAfterRenderQuestionInput","onAfterRenderPanel","onMatrixRowAdded","onMatrixBeforeRowAdded","onMatrixRowRemoving","onMatrixRowRemoved","onMatrixAllowRemoveRow","onMatrixCellCreated","onMatrixAfterCellRender","onMatrixCellValueChanged","onMatrixCellValueChanging","onMatrixCellValidate","onDynamicPanelAdded","onDynamicPanelRemoved","onTimer","onTimerPanelInfoText","onDynamicPanelItemValueChanged","onIsAnswerCorrect","onDragDropAllow","onScrollingElementToTop","onGetQuestionTitleActions","onGetPanelTitleActions","onGetPageTitleActions","onGetMatrixRowActions","onElementContentVisibilityChanged","onGetExpressionDisplayValue","jsonErrors","cssValue","hideRequiredErrors","_isMobile","_isDesignMode","ignoreValidation","isNavigationButtonPressed","isCalculatingProgressText","isTriggerIsRunning","triggerValues","triggerKeys","conditionValues","isValueChangedOnRunningCondition","conditionRunnerCounter","conditionUpdateVisibleIndexes","conditionNotifyElementsOnAnyValueOrVariableChanged","isEndLoadingFromJson","questionHashes","namesInsensitive","valueNames","valueNamesInsensitive","timerFunc","stylesManager","onProcess","doOnPageAdded","doOnPageRemoved","onFirstPageIsStartedChanged","onModeChanged","updateProgressText","onBeforeCreating","loadSurveyFromService","platform","onQuestionsOnPageModeChanged","mergeValues","getNavigationCss","btn","lazyRenderingValue","lazyRendering","updateLazyRenderingRowsOnRemovingElements","getNavigateToUrl","getExpressionItemOnRunCondition","navigateToUrlOnCondition","navigateToUrl","navigateTo","maakeRequiredErrorsInvisibgle","erType","removeNonExisingRootKeys","getCalculatedValueByName","includeIntoResult","currentLocale","getUsedLocales","defaultLoc","defIndex","currentPageValue","activePage","getBuiltInRendererForString","logoPosition","renderedHasLogo","logoClasses","setIsMobile","isMobile","runTriggers","checkTriggers","completedHtmlOnCondition","completedHtml","getQuestionTitlePatternOptions","getNewTitlePattern","getNewQuestionTitleElement","currentValue","showPageNumbers","canShowProresBar","showProgressBar","isShowingPreview","showPreviewBeforeComplete","setCalcuatedValuesIntoResult","setDataCore","setDataValueCore","updateAllQuestionsValue","notifyAllQuestionsOnValueChanged","notifyElementsOnAnyValueOrVariableChanged","isDisposed","getAllQuestions","calValue","resultItem","addCalculatedValuesIntoFilteredValues","caclValues","deleteDataValueCore","pageCount","firstPageIsStarted","vPages","onContainsPageCallback","newPage","getPageByObject","currentPageChanging","currentPageChanged","isStartedState","isFocusingQuestion","focusFirstQuestionAutomatic","isLoading","isCompletedBefore","isEditMode","onShowingPreviewChanged","setCompletedState","clearData","gotoFirstPage","passed","visiblePageCount","updateValuesWithDefaults","oldCurrentPage","newCurrentPage","allowChanging","isNextPage","isPrevPage","getProgress","navigationButtonsVisibility","showNavigationButtons","getIsNavigationButtonsShowingOn","buttonPosition","isNavigationButtonsShowing","isShowPreviewBeforeComplete","setDesignMode","visPages","updateAllElementsVisibility","showInvisibleElements","cookieName","cookies","cookie","setCookie","deleteCookie","doCurrentPageComplete","hasErrorsOnNavigate","doCurrentPageCompleteCore","checkErrorsMode","hasCurrentPageErrors","checkForAsyncQuestionValidation","clearAsyncValidationQuesitons","onCompletedAsyncQuestionValidators","asyncValidationQuesitons","asynQuestions","checkIsCurrentPageHasErrors","onAsyncValidation","hasPageErrors","checkIsPageHasErrors","firstErrorPage","ensureUniqueNames","ensureUniqueName","ensureUniquePageName","ensureUniquePanelName","ensureUniqueQuestionName","ensureUniqueElementName","existingElement","getNewName","isFocuseOnFirstError","fireValidatedErrorsOnPage","questionsOnPage","resetNavigationButton","doServerValidation","allowShowPreview","curPage","isValidatingOnServer","doNextPage","questionsOnPageMode","runningPages","setupPagesForPageModes","restoreOrigionalPages","currentPageNo","origionalPages","isSinglePage","originalPages","questionHashesClear","newPages","createPagesForQuestionOnPageMode","deletedLen","doElementsOnLoad","createSinglePage","createPagesForEveryQuestion","single","createNewPage","originalPage","originalElement","pageJson","questionHashesAdded","showPrevButton","getPageMaxTimeToFinish","isCompleteOnTrigger","onCompletingOptions","allowComplete","previousCookie","hasCookie","setCompleted","savingDataStarted","onCompleteOptions","showDataSaving","showDataSavingError","showDataSavingSuccess","showDataSavingClear","surveyPostId","setIsValidatingOnServer","onIsValidatingOnServerChanged","isPreview","completeServerValidation","hasToFocus","checkOnPageTriggers","sendResultOnPageNext","renderedCompletedHtml","completedBeforeHtml","loadingHtml","getProgressText","getProgressTextCore","correctAnswersCount","getCorrectedAnswerCount","afterRenderSurvey","afterRenderHeader","getQuestionsByValueName","allow","getUpdatedPageTitleActions","getUpdatedPanelTitleActions","getUpdatedQuestionTitleActions","uploadingCallback","uploadFilesCore","fileValue","createSurveyService","responses","addPage","addNewPage","removePage","caseInsensitive","getQuestionsByNames","getPageByElement","getPageByQuestion","getPagesByNames","getQuizQuestions","getAllPanels","panelName","questionOnValueChanging","updateQuestionValue","checkQuestionErrorOnValueChanged","checkQuestionErrorOnValueChangedCore","oldErrorCount","checkErrorsOnValueChanging","notifyQuestionOnValueChanged","isRunningConditions","valName","getCurrentPageQuestions","includeInvsible","isOnNextPage","triggers","trigger","checkExpression","oldCurrentPageIndex","runConditionsCore","checkIfNewPagesBecomeVisible","runConditionOnValueChanged","newCurrentPageIndex","surveyShowDataSaving","cliendId","onLoadingSurveyFromService","loadSurveyFromServiceJson","onLoadSurveyFromService","updatePageVisibleIndexes","isPageVisible","jsonConverter","setJsonObject","getProcessedTextValueCore","wasEmpty","getInCorrectedAnswerCount","variable","firstName","reduceFirstName","pos1","pos2","clearInvisibleValues","clearInvisibleQuestionValues","getVariableNames","newQuestionValue","isValueEqual","tryGoNextPageAutomatic","generateNewName","questionHashesPanelAdded","baseName","goNextPageAutomatic","allowCompleteSurveyAutomatic","commentName","parentPanel","rootPanel","questionHashesRemoved","oldName","questionHashAddedCore","questionHashRemovedCore","doEncoding","processTextCore","getCorrectedAnswerCountCore","isCorrect","correctAnswers","incorrectAnswers","addCount","getCorrectedAnswers","getInCorrectedAnswers","showTimerPanel","getTimerInfoText","pageSpent","getDisplayTime","surveySpent","pageLimitSec","pageLimit","surveyLimit","maxTimeToFinish","showTimerPanelMode","getTimerInfoPageText","getTimerInfoSurveyText","pageText","surveyText","startTimer","doTimer","instance","stop","maxTimeToFinishPage","getObjects","setTriggerValue","isVariable","copyTriggerValue","fromName","focusQuestion","reason","getRowWrapperComponentName","getRowWrapperComponentData","SurveyProgressButtonsModel","elementCss","surveyLocalization","surveyStrings","_localization_english__WEBPACK_IMPORTED_MODULE_0__","currentLocaleValue","defaultLocaleValue","supportedLocales","getLocaleStrings","getCurrentStrings","removeDefaultLoc","locName","str1","str2","SurveyWindowModel","initialModel","createSurvey","windowElement","onSurveyComplete","showingChangedCallback","show","hide","expandedChangedCallback","expandcollapse","closeWindowOnComplete","timerId","surveyElementName","surveyTimerFunctions","SurveyTimer","listenerCounter","instanceValue","TextPreProcessorItem","TextPreProcessorValue","TextPreProcessor","QuestionTextProcessor","_conditionProcessValue__WEBPACK_IMPORTED_MODULE_1__","canProcess","hasAllValuesOnLastRunValue","getItems","getName","replacedValue","encodeURIComponent","Trigger","SurveyTrigger","SurveyTriggerVisible","SurveyTriggerComplete","SurveyTriggerSetValue","SurveyTriggerSkip","SurveyTriggerRunExpression","SurveyTriggerCopyValue","_expressions_expressions__WEBPACK_IMPORTED_MODULE_4__","_conditionProcessValue__WEBPACK_IMPORTED_MODULE_5__","usedNames","oldPropertiesChanged","onExpressionChanged","operatorsValue","expectedValue","exp","buildExpression","operators","isCheckRequired","perform","triggerResult","onSuccess","onFailure","isRequireValue","buildUsedNames","keyValue","ownerValue","onTrigger","onItemSuccess","onItemFailure","setToName","gotoName","onCompleteRunExpression","IsMobile","vendor","opera","PopupUtils","windowHeight","deltaTop","deltaBottom","targetPos","ResponsivityManager","VerticalResponsivityManager","itemsSelector","dotsItemSize","resizeObserver","isInilized","minDimensionConst","separatorSize","ResizeObserver","observe","getDimensions","getAvailableSpace","space","boxSizing","calcItemSize","calcItemsSizes","currentAction","maxDimension","minDimension","canShrink","getVisibleItemsCount","itemsSizes","currSize","updateItemMode","dimension","minSize","fit","disconnect","paddingTop","paddingBottom","unwrap","compareVersions","confirmAction","detectIEOrEdge","detectIEBrowser","loadFileFromBase64","isElementVisible","findScrollableParent","scrollElementByChildId","createSvg","doKey2Click","getIconNameFromProxy","regExStrip0","segmentsA","segmentsB","ua","oldIe","elevenIe","isIEOrEdge","msie","trident","edge","b64Data","byteString","atob","mimeString","ia","bb","msSaveOrOpenBlob","orientation","elementRect","viewHeight","topWin","bottomWin","topEl","bottomEl","maxTop","minBottom","scrollableEl","proxyName","svgElem","realIconName","lastSymbol","ev","char","ValidatorResult","SurveyValidator","ValidatorRunner","NumericValidator","TextValidator","AnswerCountValidator","RegexValidator","EmailValidator","ExpressionValidator","_error__WEBPACK_IMPORTED_MODULE_1__","getErrorText","getDefaultErrorText","validate","createCustomError","prepareAsyncValidators","asyncResults","isValidateAllValues","asyncValidators","validatorResult","validatedValue","vName","minLength","allowDigits","reg","minCount","maxCount","regex","ensureConditionRunner","generateError","BaseVue","setIsRendering","isRendering","getIsRendering","onDestroyed","created","beforeUpdate","_boolean_checkbox_vue_vue_type_template_id_5ccd340a___WEBPACK_IMPORTED_MODULE_0__","_boolean_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__","__file","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_checkbox_vue_vue_type_template_id_5ccd340a___WEBPACK_IMPORTED_MODULE_0__","_boolean_switch_vue_vue_type_template_id_70e4aebb___WEBPACK_IMPORTED_MODULE_0__","_boolean_switch_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_switch_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_switch_vue_vue_type_template_id_70e4aebb___WEBPACK_IMPORTED_MODULE_0__","preventDefaults","isRightClick","offsetX","isRtl","_buttongroup_vue_vue_type_template_id_6bdc7abb___WEBPACK_IMPORTED_MODULE_0__","_buttongroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroup_vue_vue_type_template_id_6bdc7abb___WEBPACK_IMPORTED_MODULE_0__","_buttongroupitem_vue_vue_type_template_id_4bad6ace___WEBPACK_IMPORTED_MODULE_0__","_buttongroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroupitem_vue_vue_type_template_id_4bad6ace___WEBPACK_IMPORTED_MODULE_0__","_checkbox_vue_vue_type_template_id_cad276f6___WEBPACK_IMPORTED_MODULE_0__","_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_checkbox_vue_vue_type_template_id_cad276f6___WEBPACK_IMPORTED_MODULE_0__","_checkboxitem_vue_vue_type_template_id_c58c80d0___WEBPACK_IMPORTED_MODULE_0__","_checkboxitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_checkboxitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_checkboxitem_vue_vue_type_template_id_c58c80d0___WEBPACK_IMPORTED_MODULE_0__","_comment_vue_vue_type_template_id_099c2c8d___WEBPACK_IMPORTED_MODULE_0__","_comment_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_comment_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_comment_vue_vue_type_template_id_099c2c8d___WEBPACK_IMPORTED_MODULE_0__","_action_bar_item_dropdown_vue_vue_type_template_id_4ca4f276___WEBPACK_IMPORTED_MODULE_0__","_action_bar_item_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_dropdown_vue_vue_type_template_id_4ca4f276___WEBPACK_IMPORTED_MODULE_0__","_action_bar_item_vue_vue_type_template_id_40a056f8___WEBPACK_IMPORTED_MODULE_0__","_action_bar_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_vue_vue_type_template_id_40a056f8___WEBPACK_IMPORTED_MODULE_0__","_action_bar_separator_vue_vue_type_template_id_1aab6850___WEBPACK_IMPORTED_MODULE_0__","_action_bar_separator_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_separator_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_separator_vue_vue_type_template_id_1aab6850___WEBPACK_IMPORTED_MODULE_0__","_action_bar_vue_vue_type_template_id_313bf210___WEBPACK_IMPORTED_MODULE_0__","_action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_template_id_313bf210___WEBPACK_IMPORTED_MODULE_0__","_action_vue_vue_type_template_id_2fe54632___WEBPACK_IMPORTED_MODULE_0__","_action_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_vue_vue_type_template_id_2fe54632___WEBPACK_IMPORTED_MODULE_0__","_default_title_vue_vue_type_template_id_7f6117dc___WEBPACK_IMPORTED_MODULE_0__","_default_title_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_default_title_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_default_title_vue_vue_type_template_id_7f6117dc___WEBPACK_IMPORTED_MODULE_0__","_list_vue_vue_type_template_id_cc17a010___WEBPACK_IMPORTED_MODULE_0__","_list_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_list_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_list_vue_vue_type_template_id_cc17a010___WEBPACK_IMPORTED_MODULE_0__","_detail_button_vue_vue_type_template_id_5b4e69b6___WEBPACK_IMPORTED_MODULE_0__","_detail_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_detail_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_detail_button_vue_vue_type_template_id_5b4e69b6___WEBPACK_IMPORTED_MODULE_0__","_drag_drop_icon_vue_vue_type_template_id_4f55d298___WEBPACK_IMPORTED_MODULE_0__","_drag_drop_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_drag_drop_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_drag_drop_icon_vue_vue_type_template_id_4f55d298___WEBPACK_IMPORTED_MODULE_0__","_remove_button_vue_vue_type_template_id_c8a7aa60___WEBPACK_IMPORTED_MODULE_0__","_remove_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_remove_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_remove_button_vue_vue_type_template_id_c8a7aa60___WEBPACK_IMPORTED_MODULE_0__","_popup_container_vue_vue_type_template_id_c18dfd74___WEBPACK_IMPORTED_MODULE_0__","_popup_container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_container_vue_vue_type_template_id_c18dfd74___WEBPACK_IMPORTED_MODULE_0__","_popup_vue_vue_type_template_id_ef11265c___WEBPACK_IMPORTED_MODULE_0__","_popup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_vue_vue_type_template_id_ef11265c___WEBPACK_IMPORTED_MODULE_0__","_svg_icon_vue_vue_type_template_id_684776f8___WEBPACK_IMPORTED_MODULE_0__","_svg_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_svg_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_svg_icon_vue_vue_type_template_id_684776f8___WEBPACK_IMPORTED_MODULE_0__","_title_actions_vue_vue_type_template_id_b72886ec___WEBPACK_IMPORTED_MODULE_0__","_title_actions_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_title_actions_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_title_actions_vue_vue_type_template_id_b72886ec___WEBPACK_IMPORTED_MODULE_0__","_composite_vue_vue_type_template_id_1a9e2196___WEBPACK_IMPORTED_MODULE_0__","_composite_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_composite_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_composite_vue_vue_type_template_id_1a9e2196___WEBPACK_IMPORTED_MODULE_0__","_custom_vue_vue_type_template_id_d4aae09a___WEBPACK_IMPORTED_MODULE_0__","_custom_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_custom_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_custom_vue_vue_type_template_id_d4aae09a___WEBPACK_IMPORTED_MODULE_0__","_customwidget_vue_vue_type_template_id_1e61a7b7___WEBPACK_IMPORTED_MODULE_0__","_customwidget_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_customwidget_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_customwidget_vue_vue_type_template_id_1e61a7b7___WEBPACK_IMPORTED_MODULE_0__","_dropdown_vue_vue_type_template_id_6b3215d3___WEBPACK_IMPORTED_MODULE_0__","_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_template_id_6b3215d3___WEBPACK_IMPORTED_MODULE_0__","_element_vue_vue_type_template_id_973472ac___WEBPACK_IMPORTED_MODULE_0__","_element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_element_vue_vue_type_template_id_973472ac___WEBPACK_IMPORTED_MODULE_0__","_elementheader_vue_vue_type_template_id_27adc537___WEBPACK_IMPORTED_MODULE_0__","_elementheader_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_elementheader_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_elementheader_vue_vue_type_template_id_27adc537___WEBPACK_IMPORTED_MODULE_0__","_empty_vue_vue_type_template_id_05052c0a___WEBPACK_IMPORTED_MODULE_0__","_empty_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_vue_vue_type_template_id_05052c0a___WEBPACK_IMPORTED_MODULE_0__","_errors_vue_vue_type_template_id_5682e6ad___WEBPACK_IMPORTED_MODULE_0__","_errors_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_errors_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_errors_vue_vue_type_template_id_5682e6ad___WEBPACK_IMPORTED_MODULE_0__","_expression_vue_vue_type_template_id_1d20865a___WEBPACK_IMPORTED_MODULE_0__","_expression_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_expression_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_expression_vue_vue_type_template_id_1d20865a___WEBPACK_IMPORTED_MODULE_0__","_file_vue_vue_type_template_id_20f70284___WEBPACK_IMPORTED_MODULE_0__","_file_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_file_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_file_vue_vue_type_template_id_20f70284___WEBPACK_IMPORTED_MODULE_0__","_flowpanel_vue_vue_type_template_id_96ae1a78___WEBPACK_IMPORTED_MODULE_0__","_flowpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanel_vue_vue_type_template_id_96ae1a78___WEBPACK_IMPORTED_MODULE_0__","_flowpanelelement_vue_vue_type_template_id_9d992c30___WEBPACK_IMPORTED_MODULE_0__","_flowpanelelement_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanelelement_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanelelement_vue_vue_type_template_id_9d992c30___WEBPACK_IMPORTED_MODULE_0__","_header_vue_vue_type_template_id_69cff8cf___WEBPACK_IMPORTED_MODULE_0__","_header_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_template_id_69cff8cf___WEBPACK_IMPORTED_MODULE_0__","_html_vue_vue_type_template_id_0742e16d___WEBPACK_IMPORTED_MODULE_0__","_html_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_html_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_html_vue_vue_type_template_id_0742e16d___WEBPACK_IMPORTED_MODULE_0__","_image_vue_vue_type_template_id_1dc8d709___WEBPACK_IMPORTED_MODULE_0__","_image_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_image_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_image_vue_vue_type_template_id_1dc8d709___WEBPACK_IMPORTED_MODULE_0__","_imagepicker_vue_vue_type_template_id_153fe052___WEBPACK_IMPORTED_MODULE_0__","_imagepicker_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_imagepicker_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_imagepicker_vue_vue_type_template_id_153fe052___WEBPACK_IMPORTED_MODULE_0__","_matrix_vue_vue_type_template_id_7fa2f403___WEBPACK_IMPORTED_MODULE_0__","_matrix_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrix_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrix_vue_vue_type_template_id_7fa2f403___WEBPACK_IMPORTED_MODULE_0__","_matrixcell_vue_vue_type_template_id_3ca54ee5___WEBPACK_IMPORTED_MODULE_0__","_matrixcell_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixcell_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixcell_vue_vue_type_template_id_3ca54ee5___WEBPACK_IMPORTED_MODULE_0__","_matrixdropdown_vue_vue_type_template_id_0b4da6d8___WEBPACK_IMPORTED_MODULE_0__","_matrixdropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdropdown_vue_vue_type_template_id_0b4da6d8___WEBPACK_IMPORTED_MODULE_0__","_matrixdynamic_vue_vue_type_template_id_9a0b88e8___WEBPACK_IMPORTED_MODULE_0__","_matrixdynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdynamic_vue_vue_type_template_id_9a0b88e8___WEBPACK_IMPORTED_MODULE_0__","_matrixtable_vue_vue_type_template_id_fa197e4a___WEBPACK_IMPORTED_MODULE_0__","_matrixtable_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixtable_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixtable_vue_vue_type_template_id_fa197e4a___WEBPACK_IMPORTED_MODULE_0__","_multipletext_vue_vue_type_template_id_93fe4c02___WEBPACK_IMPORTED_MODULE_0__","_multipletext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_multipletext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_multipletext_vue_vue_type_template_id_93fe4c02___WEBPACK_IMPORTED_MODULE_0__","_navigation_vue_vue_type_template_id_75eadfd6___WEBPACK_IMPORTED_MODULE_0__","_navigation_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_navigation_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_navigation_vue_vue_type_template_id_75eadfd6___WEBPACK_IMPORTED_MODULE_0__","_otherChoice_vue_vue_type_template_id_2ed776ff___WEBPACK_IMPORTED_MODULE_0__","_otherChoice_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_otherChoice_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_otherChoice_vue_vue_type_template_id_2ed776ff___WEBPACK_IMPORTED_MODULE_0__","_page_vue_vue_type_template_id_4e962a51___WEBPACK_IMPORTED_MODULE_0__","_page_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_page_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_page_vue_vue_type_template_id_4e962a51___WEBPACK_IMPORTED_MODULE_0__","_panel_vue_vue_type_template_id_0c78899c___WEBPACK_IMPORTED_MODULE_0__","_panel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_panel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_panel_vue_vue_type_template_id_0c78899c___WEBPACK_IMPORTED_MODULE_0__","_paneldynamic_vue_vue_type_template_id_9dda5d06___WEBPACK_IMPORTED_MODULE_0__","_paneldynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_vue_vue_type_template_id_9dda5d06___WEBPACK_IMPORTED_MODULE_0__","_paneldynamicprogress_vue_vue_type_template_id_742bffac___WEBPACK_IMPORTED_MODULE_0__","_paneldynamicprogress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicprogress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicprogress_vue_vue_type_template_id_742bffac___WEBPACK_IMPORTED_MODULE_0__","_paneldynamicremove_vue_vue_type_template_id_db6b2f7e___WEBPACK_IMPORTED_MODULE_0__","_paneldynamicremove_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicremove_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicremove_vue_vue_type_template_id_db6b2f7e___WEBPACK_IMPORTED_MODULE_0__","_progress_vue_vue_type_template_id_27e325ef___WEBPACK_IMPORTED_MODULE_0__","_progress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_progress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_progress_vue_vue_type_template_id_27e325ef___WEBPACK_IMPORTED_MODULE_0__","_progressButtons_vue_vue_type_template_id_2ae7de42___WEBPACK_IMPORTED_MODULE_0__","_progressButtons_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_progressButtons_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_progressButtons_vue_vue_type_template_id_2ae7de42___WEBPACK_IMPORTED_MODULE_0__","QuestionVue","innerValue","changeQuestion","new_val","old_val","_radiogroup_vue_vue_type_template_id_06c6d526___WEBPACK_IMPORTED_MODULE_0__","_radiogroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroup_vue_vue_type_template_id_06c6d526___WEBPACK_IMPORTED_MODULE_0__","_radiogroupitem_vue_vue_type_template_id_5bbe97b9___WEBPACK_IMPORTED_MODULE_0__","_radiogroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroupitem_vue_vue_type_template_id_5bbe97b9___WEBPACK_IMPORTED_MODULE_0__","_ranking_item_vue_vue_type_template_id_2faded76___WEBPACK_IMPORTED_MODULE_0__","_ranking_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_item_vue_vue_type_template_id_2faded76___WEBPACK_IMPORTED_MODULE_0__","_ranking_vue_vue_type_template_id_19074eea___WEBPACK_IMPORTED_MODULE_0__","_ranking_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_vue_vue_type_template_id_19074eea___WEBPACK_IMPORTED_MODULE_0__","_rating_vue_vue_type_template_id_7092bfdf___WEBPACK_IMPORTED_MODULE_0__","_rating_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_vue_vue_type_template_id_7092bfdf___WEBPACK_IMPORTED_MODULE_0__","_row_vue_vue_type_template_id_7cc0bd88___WEBPACK_IMPORTED_MODULE_0__","_row_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_row_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_row_vue_vue_type_template_id_7cc0bd88___WEBPACK_IMPORTED_MODULE_0__","_signaturepad_vue_vue_type_template_id_0462349d___WEBPACK_IMPORTED_MODULE_0__","_signaturepad_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_signaturepad_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_signaturepad_vue_vue_type_template_id_0462349d___WEBPACK_IMPORTED_MODULE_0__","_string_editor_vue_vue_type_template_id_9639f152___WEBPACK_IMPORTED_MODULE_0__","_string_editor_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_editor_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_editor_vue_vue_type_template_id_9639f152___WEBPACK_IMPORTED_MODULE_0__","_string_viewer_vue_vue_type_template_id_7d918508___WEBPACK_IMPORTED_MODULE_0__","_string_viewer_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_viewer_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_viewer_vue_vue_type_template_id_7d918508___WEBPACK_IMPORTED_MODULE_0__","_string_vue_vue_type_template_id_d3a3d75a___WEBPACK_IMPORTED_MODULE_0__","_string_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_vue_vue_type_template_id_d3a3d75a___WEBPACK_IMPORTED_MODULE_0__","_survey_vue_vue_type_template_id_6874e1c8___WEBPACK_IMPORTED_MODULE_0__","_survey_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_survey_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_survey_vue_vue_type_template_id_6874e1c8___WEBPACK_IMPORTED_MODULE_0__","VueSurveyModel","VueSurveyWindowModel","survey_core__WEBPACK_IMPORTED_MODULE_1__","_text_vue_vue_type_template_id_40ece422___WEBPACK_IMPORTED_MODULE_0__","_text_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_text_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_text_vue_vue_type_template_id_40ece422___WEBPACK_IMPORTED_MODULE_0__","_timerpanel_vue_vue_type_template_id_0d2abe21___WEBPACK_IMPORTED_MODULE_0__","_timerpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_timerpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_timerpanel_vue_vue_type_template_id_0d2abe21___WEBPACK_IMPORTED_MODULE_0__","_titlecontent_vue_vue_type_template_id_cd49b83a___WEBPACK_IMPORTED_MODULE_0__","_titlecontent_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_titlecontent_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_titlecontent_vue_vue_type_template_id_cd49b83a___WEBPACK_IMPORTED_MODULE_0__","_window_vue_vue_type_template_id_62f588b2___WEBPACK_IMPORTED_MODULE_0__","_window_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_window_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_window_vue_vue_type_template_id_62f588b2___WEBPACK_IMPORTED_MODULE_0__","BaseItemGroup","activeClass","mandatory","internalLazyValue","selectedIndex","selectedItems","selectedValues","internalValue","toggleMethod","genData","valueIndex","updateInternalValue","updateItem","updateItemsState","updateMultiple","updateSingle","updateMandatory","isSame","itemGroup","isInGroup","listItemGroup","setTextColor","getBuiltIn","ITERATOR","SAFE_CLOSING","called","iteratorWithReturn","SKIP_CLOSING","ITERATION_SUPPORT","Ripple","exact","exactActiveClass","nuxt","ripple","proxyClass","computedRipple","isClickable","isLink","$listeners","$attrs","$route","generateRouteLink","onRouteChange","toggle","thisArg","asyncGeneratorStep","gen","reject","_throw","_asyncToGenerator","V8_VERSION","SPECIES","METHOD_NAME","toByteArray","fromByteArray","lookup","revLookup","Arr","getLens","b64","validLen","placeHoldersLen","_byteLength","curByte","tripletToBase64","encodeChunk","uint8","extraBytes","maxChunkLength","len2","$sort","comparefn","autoBom","responseType","MouseEvent","initMouseEvent","HTMLAnchorElement","webkitURL","safari","onloadend","dateLongFormatter","formatLong","timeLongFormatter","dateTimeLongFormatter","dateTimeFormat","matchResult","datePattern","timePattern","dateTime","longFormatters","DO_NOT_EXPORT_CODEPAGE","cpt","sbcs_cache","dbcs_cache","magic_cache","magic_decode","magic_encode","cpdcache","cpecache","sfcc","cca","mdl","mdb","make_EE","E","EE","sbcs_encode","ofmt","sbcs_decode","DD","dbcs_encode","dbcs_decode","utf8_d","direct","encache","null_enc","cp_decache","decache","last_enc","last_cp","sbcs","dbcs","BM","SetD","isstr","dash","o64","hascp","isArrayIteratorMethod","getIteratorMethod","callWithSafeIterationClosing","Result","stopped","iterate","iterable","AS_ENTRIES","IS_ITERATOR","iterFn","integer","redefine","setGlobal","copyConstructorProperties","isForced","FORCED","targetProperty","sourceProperty","TARGET","GLOBAL","STATIC","noTargetGet","sham","internalObjectKeys","enumBugKeys","hiddenKeys","MILLISECONDS_IN_MINUTE","getDateMillisecondsPart","getTimezoneOffsetInMilliseconds","baseTimezoneOffset","hasNegativeUTCOffset","millisecondsPartOfTimezoneOffset","normalizeHeaderName","DEFAULT_CONTENT_TYPE","setContentTypeIfUnset","isUndefined","getDefaultAdapter","adapter","transformRequest","isFormData","isArrayBuffer","isStream","isFile","isBlob","isArrayBufferView","isURLSearchParams","transformResponse","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","common","merge","maxHeight","minHeight","measurableStyles","notARegExp","correctIsRegExpLogic","includes","searchString","$reduceRight","TO_STRING","RegExpPrototype","nativeToString","NOT_GENERIC","INCORRECT_NAME","rf","definePropertyModule","CONSTRUCTOR_NAME","_setPrototypeOf","_inherits","subClass","superClass","aTypedArrayConstructor","$slice","Int8Array","baseMixins","backgroundOpacity","bufferValue","query","reverse","rounded","striped","__cachedBackground","setBackgroundColor","backgroundStyle","__cachedBar","__cachedBarType","__cachedBuffer","__cachedDeterminate","__cachedIndeterminate","genProgressBar","__cachedStream","isReversed","normalizedBuffer","computedTransition","$vuetify","rtl","normalize","normalizedValue","reactive","genContent","slot","genListeners","listeners","loading","loaderHeight","genProgress","absolute","emptyObject","freeze","isUndef","isDef","isTrue","isFalse","_toString","isPlainObject","isValidArrayIndex","catch","toNumber","makeMap","expectsLowerCase","isReservedAttribute","hasOwn","hit","camelizeRE","camelize","capitalize","polyfillBind","boundFn","_length","nativeBind","_from","noop","looseEqual","isObjectA","isObjectB","isArrayA","isArrayB","keysA","keysB","looseIndexOf","once","SSR_ATTR","ASSET_TYPES","LIFECYCLE_HOOKS","optionMergeStrategies","silent","productionTip","devtools","performance","errorHandler","warnHandler","ignoredElements","keyCodes","isReservedTag","isReservedAttr","isUnknownElement","getTagNamespace","parsePlatformTagName","mustUseProp","async","_lifecycleHooks","unicodeRegExp","isReserved","bailRE","parsePath","segments","_isServer","inBrowser","inWeex","WXEnvironment","weexPlatform","UA","isIE","isIE9","isIOS","isFF","nativeWatch","supportsPassive","isServerRendering","VUE_ENV","__VUE_DEVTOOLS_GLOBAL_HOOK__","isNative","_Set","hasSymbol","Set","uid","Dep","subs","addSub","removeSub","depend","addDep","notify","targetStack","pushTarget","popTarget","VNode","elm","asyncFactory","fnContext","fnOptions","fnScopeId","componentInstance","isStatic","isRootInsert","isCloned","isOnce","asyncMeta","isAsyncPlaceholder","prototypeAccessors","defineProperties","createEmptyVNode","createTextVNode","cloneVNode","vnode","cloned","arrayProto","arrayMethods","methodsToPatch","ob","__ob__","observeArray","dep","arrayKeys","shouldObserve","toggleObserving","Observer","vmCount","protoAugment","copyAugment","walk","asRootData","isExtensible","_isVue","defineReactive$$1","customSetter","shallow","setter","childOb","dependArray","del","strats","toVal","fromVal","mergeDataOrFn","parentVal","childVal","instanceData","defaultData","mergeHook","dedupeHooks","hooks","mergeAssets","key$1","defaultStrat","normalizeProps","normalizeInject","normalized","normalizeDirectives","dirs","def$$1","mergeOptions","_base","extends","mergeField","strat","resolveAsset","warnMissing","assets","camelizedId","PascalCaseId","validateProp","propOptions","absent","booleanIndex","getTypeIndex","stringIndex","getPropDefaultValue","prevShouldObserve","_props","isSameType","expectedTypes","handleError","$parent","errorCaptured","globalHandleError","invokeWithErrorHandling","_handled","logError","isUsingMicroTask","flushCallbacks","copies","MutationObserver","setImmediate","observer","characterData","_resolve","seenObjects","traverse","_traverse","isA","isFrozen","depId","normalizeEvent","once$$1","createFnInvoker","fns","invoker","arguments$1","updateListeners","oldOn","remove$$1","createOnceHandler","old","mergeVNodeHook","hookKey","oldHook","wrappedHook","merged","extractPropsFromVNodeData","altKey","checkProp","preserve","simpleNormalizeChildren","normalizeChildren","normalizeArrayChildren","isTextNode","nestedIndex","_isVList","initProvide","_provided","initInjections","resolveInject","provideKey","provideDefault","resolveSlots","slots","name$1","isWhitespace","normalizeScopedSlots","normalSlots","prevSlots","hasNormalSlots","isStable","$stable","$key","_normalized","$hasNormal","normalizeScopedSlot","key$2","proxyNormalSlot","proxy","renderList","renderSlot","bindObject","scopedSlotFn","$scopedSlots","resolveFilter","isKeyNotMatch","expect","actual","checkKeyCodes","eventKeyCode","builtInKeyCode","eventKeyName","builtInKeyName","mappedKeyCode","bindObjectProps","asProp","isSync","loop","camelizedKey","hyphenatedKey","renderStatic","isInFor","_staticTrees","_renderProxy","markStatic","markOnce","markStaticNode","bindObjectListeners","ours","resolveScopedSlots","hasDynamicKeys","contentHashKey","bindDynamicKeys","baseObj","prependModifier","symbol","installRenderHelpers","_o","_n","_u","_g","_p","FunctionalRenderContext","contextVm","this$1","_original","isCompiled","needNormalization","injections","scopedSlots","createFunctionalComponent","mergeProps","renderContext","cloneAndMarkFunctionalResult","vnodes","componentVNodeHooks","hydrating","_isDestroyed","keepAlive","mountedNode","prepatch","createComponentInstanceForVnode","activeInstance","$mount","oldVnode","updateChildComponent","_isMounted","callHook","queueActivatedComponent","activateChildComponent","deactivateChildComponent","hooksToMerge","createComponent","baseCtor","cid","resolveAsyncComponent","createAsyncPlaceholder","resolveConstructorOptions","transformModel","nativeOn","abstract","installComponentHooks","_isComponent","_parentVnode","inlineTemplate","toMerge","_merged","mergeHook$1","SIMPLE_NORMALIZE","ALWAYS_NORMALIZE","normalizationType","alwaysNormalize","_createElement","pre","applyNS","registerDeepBindings","force","initRender","_vnode","parentVnode","_renderChildren","parentData","_parentListeners","currentRenderingInstance","renderMixin","Vue","_render","ensureCtor","comp","errorComp","resolved","owners","loadingComp","sync","timerLoading","timerTimeout","$on","forceRender","renderCompleted","getFirstComponentChild","initEvents","_events","_hasHookEvent","updateComponentListeners","remove$1","$off","onceHandler","oldListeners","eventsMixin","hookRE","$once","i$1","cbs","setActiveInstance","prevActiveInstance","initLifecycle","$children","_watcher","_inactive","_directInactive","_isBeingDestroyed","lifecycleMixin","_update","prevEl","prevVnode","restoreActiveInstance","__patch__","__vue__","teardown","_watchers","mountComponent","updateComponent","Watcher","renderChildren","newScopedSlots","oldScopedSlots","hasDynamicScopedSlot","needsForceUpdate","propKeys","_propKeys","isInInactiveTree","handlers","queue","activatedChildren","waiting","flushing","resetSchedulerState","currentFlushTimestamp","getNow","timeStamp","flushSchedulerQueue","watcher","activatedQueue","updatedQueue","callActivatedHooks","callUpdatedHooks","queueWatcher","uid$2","expOrFn","isRenderWatcher","user","lazy","dirty","newDeps","depIds","newDepIds","cleanupDeps","sharedPropertyDefinition","sourceKey","initState","initProps","initMethods","initData","initComputed","initWatch","propsOptions","isRoot","computedWatcherOptions","watchers","_computedWatchers","isSSR","userDef","defineComputed","shouldCache","createComputedGetter","createGetterInvoker","createWatcher","$watch","stateMixin","dataDef","propsDef","$delete","uid$3","initMixin","_uid","initInternalComponent","vnodeComponentOptions","super","superOptions","cachedSuperOptions","modifiedOptions","resolveModifiedOptions","extendOptions","latest","sealed","sealedOptions","initUse","use","installedPlugins","_installedPlugins","install","initMixin$1","mixin","initExtend","SuperId","cachedCtors","_Ctor","Sub","initProps$1","initComputed$1","Comp","initAssetRegisters","definition","pruneCache","keepAliveInstance","cachedNode","pruneCacheEntry","current","cached$$1","patternTypes","KeepAlive","include","exclude","ref$1","builtInComponents","initGlobalAPI","configDef","util","defineReactive","observable","acceptValue","isEnumeratedAttr","isValidContentEditableValue","convertEnumeratedValue","isFalsyAttrValue","isBooleanAttr","xlinkNS","isXlink","getXlinkProp","genClassForVnode","mergeClassData","renderClass","dynamicClass","stringifyClass","stringifyArray","stringifyObject","stringified","namespaceMap","math","isHTMLTag","isSVG","unknownElementCache","HTMLUnknownElement","isTextInputType","createElement$1","namespace","createComment","newNode","referenceNode","setTextContent","setStyleScope","nodeOps","registerRef","isRemoval","refs","refInFor","emptyNode","sameVnode","sameInputType","typeA","typeB","createKeyToOldIdx","beginIdx","endIdx","createPatchFunction","backend","emptyNodeAt","createRmCb","childElm","removeNode","createElm","insertedVnodeQueue","parentElm","refElm","nested","ownerArray","setScope","createChildren","invokeCreateHooks","isReactivated","initComponent","reactivateComponent","pendingInsert","isPatchable","innerNode","activate","ref$$1","ancestor","addVnodes","startIdx","invokeDestroyHook","removeVnodes","removeAndInvokeRemoveHook","rm","updateChildren","oldCh","newCh","removeOnly","oldKeyToIdx","idxInOld","vnodeToMove","oldStartIdx","newStartIdx","oldEndIdx","oldStartVnode","oldEndVnode","newEndIdx","newStartVnode","newEndVnode","canMove","patchVnode","findIdxInOld","hydrate","postpatch","invokeInsertHook","initial","isRenderedModule","inVPre","hasChildNodes","childrenMatch","firstChild","fullInvoke","isInitialPatch","isRealElement","oldElm","_leaveCb","patchable","i$2","updateDirectives","oldDir","isCreate","isDestroy","oldDirs","normalizeDirectives$1","newDirs","dirsWithInsert","dirsWithPostpatch","oldArg","callHook$1","componentUpdated","callInsert","emptyModifiers","modifiers","getRawDirName","baseModules","updateAttrs","inheritAttrs","oldAttrs","setAttr","removeAttributeNS","baseSetAttr","__ieph","blocker","updateClass","oldData","cls","transitionClass","_transitionClasses","_prevClass","target$1","klass","RANGE_TOKEN","CHECKBOX_RADIO_TOKEN","normalizeEvents","createOnceHandler$1","remove$2","useMicrotaskFix","add$1","attachedTimestamp","_wrapper","currentTarget","updateDOMListeners","svgContainer","events","updateDOMProps","oldProps","strCur","shouldUpdateValue","checkVal","composing","isNotInFocusAndDirty","isDirtyWithModifiers","notInFocus","_vModifiers","parseStyleText","listDelimiter","propertyDelimiter","normalizeStyleData","normalizeStyleBinding","bindingStyle","checkChild","styleData","emptyStyle","cssVarRE","importantRE","setProp","setProperty","normalizedName","vendorNames","capName","updateStyle","oldStaticStyle","oldStyleBinding","normalizedStyle","oldStyle","newStyle","whitespaceRE","tar","resolveTransition","autoCssTransition","enterClass","enterToClass","enterActiveClass","leaveClass","leaveToClass","leaveActiveClass","hasTransition","TRANSITION","ANIMATION","transitionProp","transitionEndEvent","animationProp","animationEndEvent","ontransitionend","onwebkittransitionend","onanimationend","onwebkitanimationend","raf","nextFrame","addTransitionClass","transitionClasses","removeTransitionClass","whenTransitionEnds","expectedType","getTransitionInfo","propCount","transformRE","transitionDelays","transitionDurations","transitionTimeout","getTimeout","animationDelays","animationDurations","animationTimeout","hasTransform","delays","durations","toMs","toggleDisplay","cancelled","_enterCb","appearClass","appearToClass","appearActiveClass","beforeAppear","appear","afterAppear","appearCancelled","transitionNode","isAppear","startClass","toClass","beforeEnterHook","enterHook","afterEnterHook","enterCancelledHook","explicitEnterDuration","expectsCSS","userWantsControl","getHookArgumentsLength","pendingNode","_pending","isValidDuration","beforeLeave","delayLeave","explicitLeaveDuration","performLeave","invokerFns","_enter","platformModules","patch","vmodel","directive","binding","_vOptions","setSelected","onCompositionStart","onCompositionEnd","prevOptions","curOptions","needReset","hasNoMatchingOption","actuallySetSelected","isMultiple","locateNode","transition$$1","originalDisplay","__vOriginalDisplay","unbind","platformDirectives","transitionProps","getRealChild","compOptions","extractTransitionData","rawChild","hasParentTransition","isSameChild","oldChild","isNotTextNode","isVShowDirective","Transition","_leaving","oldRawChild","delayedLeave","moveClass","TransitionGroup","kept","prevChildren","rawChildren","transitionData","removed","c$1","hasMove","callPendingCbs","recordPosition","applyTranslation","_reflow","WebkitTransform","transitionDuration","_moveCb","_hasMove","newPos","oldPos","platformComponents","ObjectUnsubscribedErrorImpl","ObjectUnsubscribedError","SubjectSubscription","subject","observers","subscriberIndex","SubjectSubscriber","thrownError","rxSubscriber","lift","_trySubscribe","_subscribe","EMPTY","asObservable","AnonymousSubject","subscribe","IS_PURE","nativeStartsWith","startsWith","CORRECT_IS_REGEXP_LOGIC","MDN_POLYFILL_BUG","_getPrototypeOf","_isNativeReflectConstruct","Proxy","_createSuper","Derived","hasNativeReflectConstruct","isNativeReflectConstruct","NewTarget","possibleConstructorReturn","setUTCDay","dirtyDay","localeWeekStartsOn","weekStartsOn","defaultWeekStartsOn","currentDay","getUTCDay","remainder","dayIndex","setUTCDate","getUTCDate","setUTCISODay","setUTCISOWeek","dirtyISOWeek","isoWeek","getUTCISOWeek","setUTCWeek","dirtyWeek","week","MILLISECONDS_IN_HOUR","MILLISECONDS_IN_SECOND","numericPatterns","dayOfYear","hour23h","hour24h","hour11h","hour12h","minute","second","singleDigit","twoDigits","threeDigits","fourDigits","anyDigitsSigned","singleDigitSigned","twoDigitsSigned","threeDigitsSigned","fourDigitsSigned","timezonePatterns","basicOptionalMinutes","basic","basicOptionalSeconds","extended","extendedOptionalSeconds","parseNumericPattern","valueCallback","rest","parseTimezonePattern","parseAnyDigitsSigned","parseNDigits","parseNDigitsSigned","dayPeriodEnumToHours","enumValue","normalizeTwoDigitYear","twoDigitYear","currentYear","isCommonEra","absCurrentYear","rangeEnd","rangeEndCentury","isPreviousCentury","DAYS_IN_MONTH","DAYS_IN_MONTH_LEAP_YEAR","isLeapYearIndex","parsers","priority","token","_options","incompatibleTokens","isTwoDigitYear","ordinalNumber","unit","_date","getUTCFullYear","normalizedTwoDigitYear","_match","_flags","firstWeekOfYear","startOfUTCISOWeek","setUTCMonth","subPriority","isLeapYear","getUTCMonth","wholeWeekDays","dayPeriod","isPM","getUTCHours","setUTCMinutes","setUTCSeconds","setUTCMilliseconds","timestampIsSet","_token","TIMEZONE_UNIT_PRIORITY","formattingTokensRegExp","longFormattingTokensRegExp","escapedStringRegExp","doubleQuoteRegExp","notWhitespaceRegExp","unescapedLatinCharacterRegExp","dirtyDateString","dirtyFormatString","dirtyReferenceDate","dateString","formatString","subFnOptions","setters","dateToSystemTimezone","tokens","firstCharacter","longFormatter","usedTokens","useAdditionalWeekYearTokens","useAdditionalDayOfYearTokens","incompatibleToken","usedToken","fullToken","parseResult","cleanEscapedString","uniquePrioritySetters","setterArray","utcDate","subMilliseconds","convertedDate","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","defer","channel","port","IS_IOS","clearImmediate","MessageChannel","Dispatch","ONREADYSTATECHANGE","listener","post","postMessage","protocol","port2","port1","onmessage","importScripts","v8","enhanceError","__CANCEL__","applyMixin","vuexInit","$store","devtoolHook","devtoolPlugin","_devtoolHook","targetState","replaceState","mutation","prepend","subscribeAction","deepCopy","forEachValue","partial","Module","rawModule","runtime","_children","_rawModule","rawState","namespaced","addChild","hasChild","mutations","getters","forEachChild","forEachGetter","forEachAction","forEachMutation","ModuleCollection","rawRootModule","targetModule","newModule","getNamespace","rawChildModule","isRegistered","Store","strict","_committing","_actions","_actionSubscribers","_mutations","_wrappedGetters","_modules","_modulesNamespaceMap","_subscribers","_watcherVM","_makeLocalGettersCache","dispatch","commit","installModule","resetStoreVM","useDevtools","prototypeAccessors$1","genericSubscribe","resetStore","hot","oldVm","wrappedGetters","$$state","enableStrictMode","_withCommit","rootState","parentState","getNestedState","moduleName","local","makeLocalContext","namespacedType","registerMutation","registerAction","registerGetter","noNamespace","_payload","unifyObjectStyle","makeLocalGetters","gettersProxy","splitPos","localType","rootGetters","rawGetter","_Vue","all","registerModule","preserveState","unregisterModule","hasModule","hotUpdate","newOptions","committing","mapState","normalizeNamespace","states","normalizeMap","getModuleByNamespace","vuex","mapMutations","mapGetters","mapActions","createNamespacedHelpers","isValidMap","helper","createLogger","collapsed","stateBefore","stateAfter","transformer","mutationTransformer","mut","actionFilter","actionTransformer","act","logMutations","logActions","logger","prevState","nextState","formattedTime","getFormattedTime","formattedMutation","startMessage","endMessage","formattedAction","groupCollapsed","groupEnd","getMilliseconds","times","serializedParams","isDate","hashmarkIndex","generateWarning","defaultImpl","$lastIndexOf","searchElement","nativeGetPrototypeOf","CORRECT_PROTOTYPE_GETTER","FAILS_ON_PRIMITIVES","Iterators","objectKeys","Properties","_arrayWithHoles","_iterableToArrayLimit","_arr","_nonIterableRest","_slicedToArray","arrayWithHoles","iterableToArrayLimit","unsupportedIterableToArray","nonIterableRest","isAxiosError","lineNumber","columnNumber","isStandardBrowserEnv","originURL","urlParsingNode","resolveURL","hostname","pathname","requestURL","parsed","isString","$findIndex","findIndex","toOffset","arrayLike","InternalStateModule","defineIterator","STRING_ITERATOR","setInternalState","getInternalState","getterFor","iterated","parseJSON","argument","cbrt","$map","mapfn","addToUnscopables","Scroll","app","applicationProperty","removeApplication","activated","deactivated","callUpdate","updateApplication","scrollTarget","scrollThreshold","currentScroll","currentThreshold","isScrollingUp","previousScroll","savedScroll","canScroll","computedScrollThreshold","onScroll","thresholdMet","clippedLeft","clippedRight","collapseOnScroll","elevateOnScroll","fadeImgOnScroll","hideOnScroll","invertedScroll","scrollOffScreen","shrinkOnScroll","VToolbar","computedContentHeight","difference","iteration","computedFontSize","increment","computedLeft","application","computedMarginTop","computedOpacity","computedOriginalHeight","computedRight","computedTransform","hideShadow","isProminent","marginTop","genBackground","computedHeight","arch","execPath","browser","argv","cwd","chdir","exit","kill","umask","dlopen","uptime","memoryUsage","uvCounters","features","UNSCOPABLES","ArrayPrototype","$some","regExpExec","nativeMatch","matcher","fullUnicode","matchStr","createError","defaultConstructor","$trim","forcedStringTrimMethod","config1","config2","valueFromConfig2Keys","mergeDeepPropertiesKeys","defaultToConfig2Keys","directMergeKeys","getMergedValue","mergeDeepProperties","axiosKeys","otherKeys","nativeConstruct","NEW_TARGET_BUG","ARGS_BUG","newTarget","$args","firstWeekOfNextYear","startOfNextYear","firstWeekOfThisYear","startOfThisYear","form","lazyValidation","errorBag","watchInput","shouldValidate","reset","resetErrorBag","resetValidation","unwatch","novalidate","submit","createMethod","IS_INCLUDES","$this","$filter","arrayMethodHasSpeciesSupport","HAS_SPECIES_SUPPORT","argumentsLength","mapping","iteratorMethod","groupClasses","collection","collectionStrong","transformData","throwIfCancellationRequested","cancelToken","throwIfRequested","SUBSTITUTION_SYMBOLS","SUBSTITUTION_SYMBOLS_NO_NAMED","maybeToString","REPLACE","nativeReplace","REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE","REPLACE_KEEPS_$0","UNSAFE_SUBSTITUTE","searchValue","replaceValue","replacer","functionalReplace","results","accumulatedResult","nextSourcePosition","matched","captures","namedCaptures","groups","replacerArgs","replacement","getSubstitution","tailPos","symbols","enumerableOnly","_objectSpread2","getOwnPropertyDescriptors","DELAY_RIPPLE","isTouchEvent","isKeyboardEvent","calculate","localX","localY","radius","centerX","centerY","ripples","isRippleEnabled","rippleShow","rippleHide","rippleCancelShow","keyboardRipple","keyboardRippleShow","keyboardRippleHide","updateRipple","removeListeners","wasEnabled","copyright","getOwnPropertyNamesModule","getOwnPropertySymbolsModule","whitespaces","whitespace","ltrim","rtrim","bitmap","createTypedArrayConstructor","appendIcon","noAction","prependIcon","subGroup","listClick","matchRoute","genIcon","genAppendIcon","VListItemIcon","genHeader","VListItem","inputValue","genItems","showLazyContent","genPrependIcon","isBooted","filteredChild","roundedClasses","tile","VListItemActionText","VListItemContent","VListItemTitle","VListItemSubtitle","VList","VListItemGroup","$join","ArrayIterators","arrayValues","arrayEntries","nativeTypedArrayIterator","CORRECT_ITER_NAME","typedArrayValues","IndexedObject","nativeAssign","alphabet","NATIVE_ARRAY_BUFFER","redefineAll","anInstance","IEEE754","arrayFill","setToStringTag","ARRAY_BUFFER","DATA_VIEW","PROTOTYPE","WRONG_LENGTH","WRONG_INDEX","NativeArrayBuffer","$ArrayBuffer","$DataView","$DataViewPrototype","ObjectPrototype","packIEEE754","pack","unpackIEEE754","unpack","packInt8","packInt16","packInt32","unpackInt32","packFloat32","packFloat64","addGetter","isLittleEndian","intIndex","conversion","ArrayBufferPrototype","testView","nativeSetInt8","setInt8","getInt8","setUint8","bufferLength","getUint8","getInt16","getUint16","getInt32","getUint32","getFloat32","getFloat64","setInt16","setUint16","setInt32","setUint32","setFloat32","setFloat64","DataView","breakpointProps","offsetProps","orderProps","alignSelf","hasColClasses","CONVERT_TO_STRING","codeAt","setSpecies","fastKey","internalStateGetterFor","getConstructor","IS_MAP","ADDER","define","getEntry","setStrong","ITERATOR_NAME","getInternalCollectionState","getInternalIteratorState","kind","originalArray","NATIVE_WEAK_MAP","objectHas","sharedKey","WeakMap","enforce","wmget","wmhas","wmset","STATE","_arrayLikeToArray","InternalMetadataModule","checkCorrectnessOfIteration","inheritIfRequired","IS_WEAK","NativeConstructor","NativePrototype","exported","fixMethod","KEY","nativeMethod","REQUIRED","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","inspectSource","enforceInternalState","TEMPLATE","simple","TO_ENTRIES","Wrapper","NewTargetPrototype","extensionHeight","floating","prominent","short","isExtended","breakingProps","img","genExtension","Uint8ArrayPrototype","arrayToString","arrayJoin","IS_NOT_ARRAY_METHOD","$fill","wrappedWellKnownSymbolModule","dark","light","isDark","TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS","ArrayBufferModule","typedArrayFrom","getOwnPropertyDescriptorModule","nativeDefineProperty","NATIVE_ARRAY_BUFFER_VIEWS","TYPED_ARRAY_TAG","TypedArray","TypedArrayPrototype","isTypedArray","fromList","isTypedArrayIndex","wrappedGetOwnPropertyDescriptor","wrappedDefineProperty","CLAMPED","GETTER","SETTER","NativeTypedArrayConstructor","TypedArrayConstructor","TypedArrayConstructorPrototype","typedArrayOffset","$length","$len","Themeable","themeableProvide","appIsDark","rootIsDark","rootThemeClasses","mantissaLength","exponent","mantissa","exponentLength","eMax","eBias","nBits","Cancel","expires","domain","secure","toGMTString","decodeURIComponent","hexColor","intToHex","colorToInt","activeXDocument","documentCreateElement","GT","LT","SCRIPT","IE_PROTO","EmptyConstructor","scriptTag","NullProtoObjectViaActiveX","parentWindow","NullProtoObjectViaIFrame","iframeDocument","iframe","contentWindow","NullProtoObject","ActiveXObject","$find","FIND","SKIPS_HOLES","createIteratorConstructor","IteratorsCore","IteratorPrototype","BUGGY_SAFARI_ITERATORS","KEYS","VALUES","ENTRIES","returnThis","Iterable","IteratorConstructor","DEFAULT","IS_SET","CurrentIteratorPrototype","getIterationMethod","KIND","defaultIterator","IterablePrototype","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","makeWatcher","$data","passiveSupported","testListenerOpts","deepEqual","getNestedValue","Node","getZIndex","filtered","esc","up","down","home","backspace","pageup","pagedown","iconPath","getObjectValueByPath","optional","chunked","mergeDeep","getUTCISOWeekYear","fourthOfJanuaryOfNextYear","fourthOfJanuaryOfThisYear","$includes","rotate","calculatedSize","circumference","strokeDashArray","strokeDashOffset","strokeWidth","svgStyles","viewBoxSize","genCircle","genSvg","genInfo","btnToggle","block","depressed","fab","outlined","retainFocusOnClick","sizeableClasses","contained","defaultRipple","isFlat","isRound","genLoader","loader","setColor","isAbsoluteURL","combineURLs","baseURL","requestedURL","addMilliseconds","dirtyAmount","timestamp","amount","attribute","focused","genChildren","genMessage","errorCount","errorMessages","messages","rules","successMessages","validateOnBlur","errorBucket","hasColor","hasFocused","isFocused","isResetting","lazyValue","computedColor","internalErrorMessages","hasSuccess","internalSuccessMessages","externalError","hasMessages","validationTarget","hasState","genInternalMessages","internalMessages","isInteractive","isReadonly","validations","validationState","rule","hideDetails","hint","persistentHint","hasMouseDown","computedId","hasDetails","messagesToDisplay","hasHint","hasLabel","isDirty","isLabelActive","validation","validationResult","showDetails","genControl","genDefaultSlot","extraData","hasListener","mouseup","genInputSlot","onMouseUp","genLabel","genMessages","genSlot","genPrependSlot","genAppendSlot","onMouseDown","isGreater","onObserve","onVisible","dirtyTypes","appendOuterIcon","autofocus","clearable","clearIcon","counterValue","filled","fullWidth","prependInnerIcon","shaped","singleLine","solo","soloInverted","suffix","badInput","labelWidth","prefixWidth","prependWidth","initialValue","isClearing","computedCounterValue","hasCounter","isEnclosed","isSingle","isSolo","labelPosition","labelValue","clearableCallback","genPrependInnerSlot","genIconSlot","genClearIcon","genCounter","genFieldset","genLegend","span","genInput","messagesNode","counterNode","genTextFieldSlot","genAffix","onBlur","onFocus","setLabelWidth","setPrefixWidth","setPrependWidth","tryAutofocus","isInList","isInMenu","isInNav","nav","subheader","threeLine","twoLine","_enable_super_gross_mode_that_will_cause_bad_things","formatDistanceLocale","lessThanXSeconds","one","xSeconds","halfAMinute","lessThanXMinutes","xMinutes","aboutXHours","xHours","xDays","aboutXWeeks","xWeeks","aboutXMonths","xMonths","aboutXYears","xYears","overXYears","almostXYears","formatDistance","addSuffix","comparison","buildFormatLongFn","dateFormats","full","long","timeFormats","dateTimeFormats","formatRelativeLocale","lastWeek","yesterday","tomorrow","nextWeek","formatRelative","_baseDate","buildLocalizeFn","dirtyIndex","valuesArray","formattingValues","defaultFormattingWidth","_defaultWidth","_width","argumentCallback","eraValues","narrow","abbreviated","wide","quarterValues","monthValues","dayValues","dayPeriodValues","am","pm","midnight","noon","morning","afternoon","evening","night","formattingDayPeriodValues","dirtyNumber","_dirtyOptions","rem100","localize","buildMatchPatternFn","dirtyString","matchPattern","matchedString","parsePattern","buildMatchFn","matchPatterns","defaultMatchWidth","parsePatterns","defaultParseWidth","findKey","matchOrdinalNumberPattern","parseOrdinalNumberPattern","matchEraPatterns","parseEraPatterns","any","matchQuarterPatterns","parseQuarterPatterns","matchMonthPatterns","parseMonthPatterns","matchDayPatterns","parseDayPatterns","matchDayPeriodPatterns","parseDayPeriodPatterns","functionToString","condition","View","routerView","route","_routerViewCache","inactive","_routerRoot","vnodeData","routerViewDepth","cachedData","cachedComponent","configProps","fillPropsinData","registerRouteInstance","instances","propsToPass","resolveProps","encodeReserveRE","encodeReserveReplacer","commaRE","resolveQuery","extraQuery","_parseQuery","parsedQuery","parseQuery","castQueryParamValue","param","stringifyQuery","val2","trailingSlashRE","createRoute","redirectedFrom","router","fullPath","getFullPath","formatMatch","START","_stringifyQuery","isSameRoute","isObjectEqual","aKeys","bKeys","aVal","bVal","isIncludedRoute","queryIncludes","resolvePath","relative","firstChar","segment","hashIndex","queryIndex","cleanPath","isarray","pathToRegexp_1","pathToRegexp","parse_1","compile_1","compile","tokensToFunction_1","tokensToFunction","tokensToRegExp_1","tokensToRegExp","PATH_REGEXP","defaultDelimiter","delimiter","escaped","modifier","asterisk","escapeGroup","escapeString","encodeURIComponentPretty","encodeURI","encodeAsterisk","attachKeys","sensitive","regexpToRegexp","arrayToRegexp","stringToRegexp","endsWithDelimiter","regexpCompileCache","fillParams","routeMsg","filler","pathMatch","normalizeLocation","params$1","rawPath","parsedPath","basePath","toTypes","eventTypes","Link","ariaCurrentValue","$router","globalActiveClass","linkActiveClass","globalExactActiveClass","linkExactActiveClass","activeClassFallback","exactActiveClassFallback","compareTarget","guardEvent","scopedSlot","navigate","isExactActive","findAnchor","aData","handler$1","event$1","aAttrs","ctrlKey","defaultPrevented","installed","registerInstance","callVal","_router","history","_route","beforeRouteEnter","beforeRouteLeave","beforeRouteUpdate","createRouteMap","routes","oldPathList","oldPathMap","oldNameMap","pathList","pathMap","nameMap","addRouteRecord","matchAs","pathToRegexpOptions","normalizedPath","normalizePath","caseSensitive","compileRouteRegex","redirect","childMatchAs","alias","aliases","aliasRoute","createMatcher","addRoutes","currentRoute","_createRoute","paramNames","record$1","originalRedirect","resolveRecordPath","resolvedPath","aliasedPath","aliasedMatch","aliasedRecord","Time","genStateKey","getStateKey","setStateKey","positionStore","setupScroll","scrollRestoration","protocolAndPath","absolutePath","stateCopy","handlePopState","handleScroll","isPop","behavior","scrollBehavior","getScrollPosition","shouldScroll","scrollToPosition","saveScrollPosition","pageXOffset","pageYOffset","getElementPosition","docEl","docRect","isValidPosition","normalizePosition","normalizeOffset","hashStartsWithNumberRE","scrollTo","supportsPushState","pushState","runQueue","NavigationFailureType","redirected","aborted","duplicated","createNavigationRedirectedError","createRouterError","stringifyRoute","createNavigationDuplicatedError","createNavigationCancelledError","createNavigationAbortedError","_isRouter","propertiesToLog","isError","isNavigationFailure","resolveAsyncComponents","hasAsync","flatMapComponents","resolvedDef","isESModule","History","normalizeBase","ready","readyCbs","readyErrorCbs","errorCbs","baseEl","resolveQueue","extractGuards","guards","guard","extractGuard","extractLeaveGuards","bindGuard","extractUpdateHooks","extractEnterGuards","isValid","bindEnterGuard","poll","listen","onReady","errorCb","transitionTo","onAbort","confirmTransition","updateRoute","ensureURL","afterHooks","abort","lastRouteIndex","lastCurrentIndex","beforeHooks","postEnterCbs","enterGuards","resolveHooks","setupListeners","teardownListeners","cleanupListener","HTML5History","_startLocation","getLocation","expectScroll","supportsScroll","handleRoutingEvent","go","fromRoute","getCurrentLocation","decodeURI","HashHistory","checkFallback","ensureSlash","getHash","replaceHash","eventType","pushHash","getUrl","AbstractHistory","VueRouter","apps","registerHook","createHref","handleInitialScroll","routeOrError","beforeEach","beforeResolve","afterEach","forward","getMatchedComponents","normalizedTo","srgbForwardMatrix","srgbForwardTransform","srgbReverseMatrix","srgbReverseTransform","xyz","elevation","computedElevation","elevationClasses","CancelToken","executor","resolvePromise","IntersectionObserver","isIntersecting","Intersect","isLE","mLen","nBytes","eLen","regexpFlags","stickyHelpers","nativeExec","patchedExec","UPDATES_LAST_INDEX_WRONG","re1","re2","UNSUPPORTED_Y","BROKEN_CARET","NPCG_INCLUDED","PATCH","reCopy","charsAdded","strCopy","feature","detection","POLYFILL","NATIVE","startOfUTCISOWeekYear","fourthOfJanuary","Op","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","inModule","regeneratorRuntime","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","getProto","NativeIteratorPrototype","Gp","GeneratorFunctionPrototype","Generator","GeneratorFunction","isGeneratorFunction","genFun","ctor","mark","awrap","__await","defineIteratorMethods","AsyncIterator","innerFn","outerFn","tryLocsList","Context","skipTempReset","sent","_sent","delegate","tryEntries","resetTryEntry","rootEntry","rootRecord","completion","dispatchException","exception","caught","tryLoc","hasCatch","hasFinally","catchLoc","finallyLoc","abrupt","finallyEntry","afterLoc","finish","thrown","delegateYield","resultName","nextLoc","protoGenerator","generator","_invoke","makeInvokeMethod","tryCatch","invoke","unwrapped","previousPromise","enqueue","callInvokeWithMethodAndArg","doneResult","delegateResult","maybeInvokeDelegate","return","pushTryEntry","IS_CONCAT_SPREADABLE","MAX_SAFE_INTEGER","MAXIMUM_ALLOWED_INDEX_EXCEEDED","IS_CONCAT_SPREADABLE_SUPPORT","SPECIES_SUPPORT","isConcatSpreadable","spreadable","VCardActions","VCardSubtitle","VCardText","VCardTitle","_assertThisInitialized","ReferenceError","_possibleConstructorReturn","assertThisInitialized","$copyWithin","returnMethod","Attributes","eager","hasContent","takeUntil","TakeUntilOperator","takeUntilSubscriber","TakeUntilSubscriber","notifierSubscription","seenValue","notifyNext","notifyComplete","nativeJoin","ES3_STRINGS","sourceIndex","mapFn","ACCESSORS","MAXIMUM_ALLOWED_LENGTH_EXCEEDED","insertCount","actualDeleteCount","actualStart","Proxyable","NATIVE_SYMBOL","USE_SYMBOL_AS_UID","nativeObjectCreate","getOwnPropertyNamesExternal","defineWellKnownSymbol","HIDDEN","SYMBOL","TO_PRIMITIVE","$stringify","nativePropertyIsEnumerable","AllSymbols","ObjectPrototypeSymbols","StringToSymbolRegistry","SymbolToStringRegistry","WellKnownSymbolsStore","QObject","USE_SETTER","findChild","setSymbolDescriptor","ObjectPrototypeDescriptor","isSymbol","$defineProperty","$defineProperties","$getOwnPropertySymbols","$propertyIsEnumerable","$create","$getOwnPropertyDescriptor","$getOwnPropertyNames","IS_OBJECT_PROTOTYPE","keyFor","useSetter","useSimple","FORCED_JSON_STRINGIFY","$replacer","valueOf","fluid","$every","INCORRECT_ITERATION","UnsubscriptionErrorImpl","UnsubscriptionError","_subscriptions","_ctorUnsubscribe","parent_1","isFunction","flattenUnsubscriptionErrors","subscription","subscriptions","subscriptionIndex","errs","NativePromise","promiseResolve","NON_GENERIC","real","onFinally","colorName","NUMBER","NativeNumber","NumberPrototype","BROKEN_CLASSOF","third","radix","maxCode","digits","NumberWrapper","dotAll","aspectRatio","computedAspectRatio","aspectStyle","__cachedSizer","hasIntersect","intersect","contain","gradient","lazySrc","rootMargin","srcset","currentSrc","calculatedAspectRatio","naturalWidth","normalisedSrc","aspect","__cachedImage","backgroundImage","backgroundPosition","loadImage","lazyImg","getSrc","pollForSize","naturalHeight","__genPlaceholder","thrower","argument0","argument1","PrototypeOfArrayIteratorPrototype","arrayIterator","TO_STRING_TAG_SUPPORT","hover","raised","FunctionPrototype","FunctionPrototypeToString","nameRE","addLeadingZeros","formatters","signedYear","dayPeriodEnumValue","numberOfDigits","milliseconds","fractionalSeconds","MILLISECONDS_IN_DAY","getUTCDayOfYear","startOfYearTimestamp","dayPeriodEnum","lightFormatters","signedWeekYear","weekYear","isoWeekYear","dayOfWeek","localDayOfWeek","isoDayOfWeek","_localize","originalDate","_originalDate","timezoneOffset","formatTimezoneWithOptionalMinutes","formatTimezone","formatTimezoneShort","dirtyDelimiter","absOffset","dirtyFormatStr","formatStr","formatterOptions","formatter","$toLocaleString","TO_LOCALE_STRING_BUG","settle","buildFullPath","parseHeaders","isURLSameOrigin","requestData","requestHeaders","auth","username","unescape","Authorization","onreadystatechange","readyState","responseURL","responseHeaders","getAllResponseHeaders","responseData","onabort","ontimeout","timeoutErrorMessage","xsrfValue","withCredentials","onDownloadProgress","onUploadProgress","upload","macrotask","WebKitMutationObserver","IS_NODE","queueMicrotaskDescriptor","queueMicrotask","task","createWellKnownSymbol","withoutSetter","ieee754","typedArraySupport","kMaxLength","TYPED_ARRAY_SUPPORT","createBuffer","encodingOrOffset","fromArrayBuffer","fromString","fromObject","assertSize","isEncoding","fromArrayLike","isnan","SlowBuffer","isView","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","bidirectionalIndexOf","arrayIndexOf","indexSize","arrLength","valLength","readUInt16BE","foundIndex","hexWrite","strLen","utf8Write","blitBuffer","asciiWrite","asciiToBytes","latin1Write","base64Write","ucs2Write","utf16leToBytes","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","decodeCodePointsArray","INSPECT_MAX_BYTES","poolSize","_augment","species","allocUnsafeSlow","_isBuffer","compare","swap16","swap32","swap64","inspect","thisStart","thisEnd","thisCopy","targetCopy","MAX_ARGUMENTS_LENGTH","codePoints","toHex","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","readUIntBE","readUInt8","readUInt16LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleBE","writeUIntLE","maxBytes","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","INVALID_BASE64_RE","base64clean","stringtrim","units","leadSurrogate","byteArray","hi","lo","nativeKeys","thisNumberValue","nativeToFixed","acc","x2","fractionDigits","fractDigits","multiply","divide","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","specificCreate","_createForOfIteratorHelper","allowArrayLike","normalCompletion","didErr","_e2","preventExtensions","_defineProperties","_createClass","protoProps","staticProps","PREFERRED_STRING","ignoreDuplicateOf","pipe","URLSearchParams","product","stripBOM","SHARED","FIND_INDEX","non","$indexOf","nativeIndexOf","NEGATIVE_ZERO","EXISTS","newPromiseCapability","promiseCapability","fromEvent","resultSelector","setupSubscription","sourceObj","isEventTarget","source_1","isJQueryStyleEventEmitter","source_2","isNodeStyleEventEmitter","source_3","addListener","removeListener","NEVER","refCount","RefCountOperator","connectable","_refCount","refCounter","connection","connect","RefCountSubscriber","sharedConnection","_connection","ConnectableObservable","subjectFactory","_isComplete","getSubject","_subject","connectableObservableDescriptor","connectableProto","ConnectableSubscriber","multicast","subjectOrSubjectFactory","MulticastOperator","Vue$1","shareSubjectFactory","share","isObservable","isObserver","getKey","rxMixin","domStreams","observableMethods","methodName","$createObservableMethod","obs","$observables","_subscription","streamDirective","streamName","modifiersFuncs","prevent","modifiersExists","onNext","native","$eventToObservable","fromEventArgs","_rxHandles","_handle","watchAsObservable","obs$","_unwatch","fromDOMEvent","subscribeTo","eventToObservable","evtName","evtNames","eventPairs","pair","createObservableMethod","passContext","VueRx","$watchAsObservable","$fromDOMEvent","$subscribeTo","createInstance","defaultConfig","axios","promises","spread","subscribeToPromise","getSymbolIterator","subscribeToIterable","subscribeToObservable","isArrayLike","SimpleInnerSubscriber","notifyError","SimpleOuterSubscriber","innerSubscribe","innerSubscriber","NASHORN_BUG","aPossiblePrototype","CORRECT_SETTER","TAG","_classCallCheck","IS_RIGHT","REPLACE_SUPPORTS_NAMED_GROUPS","SPLIT_WORKS_WITH_OVERWRITTEN_EXEC","originalExec","DELEGATES_TO_SYMBOL","DELEGATES_TO_EXEC","execCalled","nativeRegExpMethod","arg2","forceStringMethod","stringMethod","regexMethod","FinallyOperator","FinallySubscriber","createMessage","generateComponentTrace","newMessage","consoleWarn","consoleError","classifyRE","classify","formatComponentName","includeFile","currentRecursiveSequence","styleList","styleProp","parseStyle","styleMap","mergeTarget","mergeClasses","mergeStyles","mergeListeners","selectable","genAttrs","FREEZING","onFreeze","nativeFreeze","protectedDayOfYearTokens","protectedWeekYearTokens","isProtectedDayOfYearToken","isProtectedWeekYearToken","throwProtectedError","ArrayIteratorMethods","ArrayValues","normalizeArray","allowAboveRoot","basename","matchedSlash","xs","resolvedAbsolute","isAbsolute","trailingSlash","paths","fromParts","toParts","samePartsLength","outputParts","hasRoot","extname","startDot","startPart","preDotState","NativeSymbol","EmptyStringDescriptionStore","SymbolWrapper","symbolPrototype","symbolToString","ARRAY_ITERATOR","Arguments","DEFAULT_ADDITIONAL_DIGITS","patterns","dateTimeDelimiter","timeZoneDelimiter","timezone","dateRegex","timeRegex","timezoneRegex","parseISO","additionalDigits","dateStrings","splitDateString","parseYearResult","parseYear","restDateString","parseTime","parseTimezone","timeString","century","isWeekDate","parseDateUnit","validateWeekDate","dayOfISOWeekYear","validateDate","validateDayOfYearDate","parseTimeUnit","validateTime","timezoneString","validateTimezone","fourthOfJanuaryDay","daysInMonths","_year","_hours","nativeLastIndexOf","relativeURL","Internal","OwnPromiseCapability","PromiseWrapper","nativeThen","microtask","hostReportErrors","newPromiseCapabilityModule","PROMISE","getInternalPromiseState","PromiseConstructor","$fetch","newGenericPromiseCapability","DISPATCH_EVENT","UNHANDLED_REJECTION","REJECTION_HANDLED","PENDING","FULFILLED","REJECTED","HANDLED","UNHANDLED","GLOBAL_CORE_JS_PROMISE","PromiseRejectionEvent","FakePromise","isThenable","isReject","notified","reactions","ok","exited","reaction","rejection","onHandleUnhandled","onUnhandled","IS_UNHANDLED","isUnhandled","internalReject","internalResolve","onFulfilled","onRejected","fetch","capability","$promiseResolve","alreadyCalled","race","canReportError","closed_1","toSubscriber","nextOrObserver","pipeFromArray","_isScalar","sink","promiseCtor","getPromiseCtor","operations","toPromise","Int8ArrayPrototype","Uint8ClampedArray","Uint8ClampedArrayPrototype","isPrototypeOf","TYPED_ARRAY_TAG_REQIRED","TypedArrayConstructorsList","Int16Array","Float32Array","Float64Array","ARRAY","exportTypedArrayStaticMethod","project","MapOperator","MapSubscriber","compareAsc","dirtyDateLeft","dirtyDateRight","dateLeft","dateRight","differenceInCalendarMonths","yearDiff","monthDiff","differenceInMonths","isLastMonthNotFull","differenceInMilliseconds","differenceInSeconds","cloneObject","dirtyObject","MINUTES_IN_DAY","MINUTES_IN_ALMOST_TWO_DAYS","MINUTES_IN_MONTH","MINUTES_IN_TWO_MONTHS","dirtyBaseDate","localizeOptions","offsetInSeconds","includeSeconds","nearestMonth","monthsSinceStartOfYear","years","formatDistanceToNow","PromiseCapability","$$resolve","$$reject","METADATA","setMetadata","objectID","weakData","getWeakData","Toggleable","registerComponents","vuetify","objectWithoutPropertiesLoose","badge","dataIterator","noResultsText","loadingText","dataTable","itemsPerPageText","ariaLabel","sortDescending","sortAscending","sortNone","activateNone","activateDescending","activateAscending","sortBy","dataFooter","itemsPerPageAll","firstPage","lastPage","datePicker","nextMonthAriaLabel","nextYearAriaLabel","prevMonthAriaLabel","prevYearAriaLabel","noDataText","carousel","calendar","moreEvents","counterSize","timePicker","pagination","mobileBreakpoint","scrollBarWidth","thresholds","sm","md","lg","icons","iconfont","lang","en","disable","cspNonce","customProperties","minifyTheme","themeCache","variations","primary","secondary","accent","warning","framework","defaultPreset","userPreset","preset","globalPreset","bar","insetFooter","xl","xsOnly","smOnly","smAndDown","smAndUp","mdOnly","mdAndDown","mdAndUp","lgOnly","lgAndDown","lgAndUp","xlOnly","mobile","resizeTimeout","Breakpoint","onResize","ssr","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","totalOffset","_settings","appOffset","getContainer","goTo","isDrawer","isClipped","startTime","targetLocation","getOffset","startLocation","ease","timeElapsed","currentTime","checkboxOn","checkboxOff","checkboxIndeterminate","menu","subgroup","radioOn","radioOff","ratingEmpty","ratingFull","ratingHalf","unfold","iconSet","convertToComponentDeclarations","mdiSvg","mdi","fa","fa4","faSvg","Icons","presets","LANG_PREFIX","getTranslation","usingDefault","shortKey","translation","Lang","translator","cielabForwardTransform","cielabReverseTransform","transformedY","Ln","lab","isItem","variant","colors","parsedTheme","genVariations","genBaseColor","genColorVariableName","genColorVariable","cssVar","variablesCss","aColor","variants","variantValue","lighten","darken","vueMeta","Theme","defaultTheme","metaKeyName","getOptions","metaInfo","vuetifyStylesheet","nonce","addApp","styleEl","oldDark","currentTheme","isHydrating","service","Service","catchError","CatchOperator","CatchSubscriber","err2","innerSubscription","classofRaw","CORRECT_ARGUMENTS","tryGet","eject","nativeSlice","fin","argStr","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","availableProps"],"mappings":"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ACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,E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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,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,OAGR/sE,EAAyC,cAAc4K,SAAS,aAAc,CAC1E,wBACA,CAAE9iL,KAAM,SAAU+iM,sBAAuB,aACzC,CACI/iM,KAAM,eACNmB,QAAS,OACT4wL,QAAS,CAAC,OAAQ,UAAW,WAAY,UAAW,SAExD,CACI/xL,KAAM,WACN+xL,QAAS,WACL,OAAOkzD,KAEX9jP,QAAS,OAEb,CAAEnB,KAAM,+BAAgCmB,SAAU,GAClD,CAAEnB,KAAM,+BAAgCmB,SAAU,GAClD,CAAEnB,KAAM,sBAAuBmB,SAAS,GACxC,CAAEnB,KAAM,WAAYmjI,SAAS,GAC7B,CAAEnjI,KAAM,aAAcmjI,SAAS,GAC/B,CAAEnjI,KAAM,WAAYmjI,SAAS,GAC7B,CA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CA,WACA,iBACA,QACA,QACA,SACA,WACA,QACA,MACA,OACA,OACA,MACA,SAGR,CACI/xL,KAAM,cACNqkN,SAAU,EACVG,UAAW,YACXp8B,UAAW,SAAUr6J,GACjB,QAAKA,GAEEA,EAAIiiP,cAGnB,CACIhwQ,KAAM,iBACNmB,QAAS,UACT4wL,QAAS,CAAC,UAAW,SAAU,YAC/ByyB,UAAW,YACXp8B,UAAW,SAAUr6J,GACjB,QAAKA,GAEEA,EAAIiiP,cAGnB,CACIhwQ,KAAM,eACNqwK,SAAU,CACN,OACA,mBACA,aACA,kBACA,cACA,mBACA,WACA,qBACA,WACA,eACA,mBACA,eACA,iBACA,gBACA,gBACA,gBACA,iBACA,iBACA,iBACA,iBACA,UACA,eACA,cACA,UACA,gBACA,qBACA,iBACA,YACA,SACA,eACA,cACA,SACA,UACA,uBACA,qBACA,WACA,OACA,WACA,aACA,YACA,MACA,MACA,QACA,MACA,mBACA,eACA,gBACA,YACA,mBACA,mBACA,gBACA,QACA,SAGR,CACIrwK,KAAM,MACNwkN,UAAW,YACXp8B,UAAW,SAAUr6J,GACjB,QAASA,GAAOA,EAAIyiP,cAExBlsD,uBAAwB,SAAUv2L,EAAKkjP,GACnCA,EAAep+J,UAAY9kF,EAAI8kF,YAGvC,CACI7yG,KAAM,MACNwkN,UAAW,YACXp8B,UAAW,SAAUr6J,GACjB,QAASA,GAAOA,EAAIyiP,cAExBlsD,uBAAwB,SAAUv2L,EAAKkjP,GACnCA,EAAep+J,UAAY9kF,EAAI8kF,YAGvC,CACI7yG,KAAM,gCACNuhN,SAAU,QACViD,UAAW,YACXp8B,UAAW,SAAUr6J,GACjB,QAASA,GAAOA,EAAIyiP,eAG5B,CACIxwQ,KAAM,gCACNuhN,SAAU,QACViD,UAAW,YACXp8B,UAAW,SAAUr6J,GACjB,QAASA,GAAOA,EAAIyiP,eAG5B,CACIxwQ,KAAM,eACN+iM,sBAAuB,kBACvByhB,UAAW,YACXp8B,UAAW,SAAUr6J,GACjB,QAASA,GAAOA,EAAIyiP,eAG5B,CACIxwQ,KAAM,eACN+iM,sBAAuB,kBACvByhB,UAAW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","file":"js/chunk-vendors-legacy.b8957a51.js","sourcesContent":["var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","var aFunction = require('../internals/a-function');\n\n// optional / simple context binding\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 0: return function () {\n return fn.call(that);\n };\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar flattenIntoArray = require('../internals/flatten-into-array');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar toInteger = require('../internals/to-integer');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\n// `Array.prototype.flat` method\n// https://github.com/tc39/proposal-flatMap\n$({ target: 'Array', proto: true }, {\n flat: function flat(/* depthArg = 1 */) {\n var depthArg = arguments.length ? arguments[0] : undefined;\n var O = toObject(this);\n var sourceLen = toLength(O.length);\n var A = arraySpeciesCreate(O, 0);\n A.length = flattenIntoArray(A, O, O, sourceLen, 0, depthArg === undefined ? 1 : toInteger(depthArg));\n return A;\n }\n});\n","'use strict';\nvar aFunction = require('../internals/a-function');\nvar isObject = require('../internals/is-object');\n\nvar slice = [].slice;\nvar factories = {};\n\nvar construct = function (C, argsLength, args) {\n if (!(argsLength in factories)) {\n for (var list = [], i = 0; i < argsLength; i++) list[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[argsLength] = Function('C,a', 'return new C(' + list.join(',') + ')');\n } return factories[argsLength](C, args);\n};\n\n// `Function.prototype.bind` method implementation\n// https://tc39.github.io/ecma262/#sec-function.prototype.bind\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = slice.call(arguments, 1);\n var boundFunction = function bound(/* args... */) {\n var args = partArgs.concat(slice.call(arguments));\n return this instanceof boundFunction ? construct(fn, args.length, args) : fn.apply(that, args);\n };\n if (isObject(fn.prototype)) boundFunction.prototype = fn.prototype;\n return boundFunction;\n};\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar nativeGetOwnPropertyNames = require('../internals/object-get-own-property-names').f;\n\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return nativeGetOwnPropertyNames(it);\n } catch (error) {\n return windowNames.slice();\n }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]'\n ? getWindowNames(it)\n : nativeGetOwnPropertyNames(toIndexedObject(it));\n};\n","import arrayLikeToArray from \"./arrayLikeToArray\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","var DESCRIPTORS = require('../internals/descriptors');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPrimitive = require('../internals/to-primitive');\nvar has = require('../internals/has');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\nvar nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return nativeGetOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]);\n};\n","import { FunctionalComponentOptions, VNode, VNodeData } from 'vue'\nimport mergeData from '../../util/mergeData'\n\nfunction mergeTransitions (\n dest: Function | Function[] = [],\n ...transitions: (Function | Function[])[]\n) {\n /* eslint-disable-next-line no-array-constructor */\n return Array().concat(dest, ...transitions)\n}\n\nexport function createSimpleTransition (\n name: string,\n origin = 'top center 0',\n mode?: string\n): FunctionalComponentOptions {\n return {\n name,\n\n functional: true,\n\n props: {\n group: {\n type: Boolean,\n default: false,\n },\n hideOnLeave: {\n type: Boolean,\n default: false,\n },\n leaveAbsolute: {\n type: Boolean,\n default: false,\n },\n mode: {\n type: String,\n default: mode,\n },\n origin: {\n type: String,\n default: origin,\n },\n },\n\n render (h, context): VNode {\n const tag = `transition${context.props.group ? '-group' : ''}`\n const data: VNodeData = {\n props: {\n name,\n mode: context.props.mode,\n },\n on: {\n beforeEnter (el: HTMLElement) {\n el.style.transformOrigin = context.props.origin\n el.style.webkitTransformOrigin = context.props.origin\n },\n },\n }\n\n if (context.props.leaveAbsolute) {\n data.on!.leave = mergeTransitions(data.on!.leave, (el: HTMLElement) => (el.style.position = 'absolute'))\n }\n if (context.props.hideOnLeave) {\n data.on!.leave = mergeTransitions(data.on!.leave, (el: HTMLElement) => (el.style.display = 'none'))\n }\n\n return h(tag, mergeData(context.data, data), context.children)\n },\n }\n}\n\nexport function createJavascriptTransition (\n name: string,\n functions: Record,\n mode = 'in-out'\n): FunctionalComponentOptions {\n return {\n name,\n\n functional: true,\n\n props: {\n mode: {\n type: String,\n default: mode,\n },\n },\n\n render (h, context): VNode {\n return h(\n 'transition',\n mergeData(context.data, {\n props: { name },\n on: functions,\n }),\n context.children\n )\n },\n }\n}\n","import { upperFirst } from '../../util/helpers'\n\ninterface HTMLExpandElement extends HTMLElement {\n _parent?: (Node & ParentNode & HTMLElement) | null\n _initialStyle: {\n transition: string\n overflow: string\n height?: string | null\n width?: string | null\n }\n}\n\nexport default function (expandedParentClass = '', x = false) {\n const sizeProperty = x ? 'width' : 'height' as 'width' | 'height'\n const offsetProperty = `offset${upperFirst(sizeProperty)}` as 'offsetHeight' | 'offsetWidth'\n\n return {\n beforeEnter (el: HTMLExpandElement) {\n el._parent = el.parentNode as (Node & ParentNode & HTMLElement) | null\n el._initialStyle = {\n transition: el.style.transition,\n overflow: el.style.overflow,\n [sizeProperty]: el.style[sizeProperty],\n }\n },\n\n enter (el: HTMLExpandElement) {\n const initialStyle = el._initialStyle\n\n el.style.setProperty('transition', 'none', 'important')\n // Hide overflow to account for collapsed margins in the calculated height\n el.style.overflow = 'hidden'\n const offset = `${el[offsetProperty]}px`\n\n el.style[sizeProperty] = '0'\n\n void el.offsetHeight // force reflow\n\n el.style.transition = initialStyle.transition\n\n if (expandedParentClass && el._parent) {\n el._parent.classList.add(expandedParentClass)\n }\n\n requestAnimationFrame(() => {\n el.style[sizeProperty] = offset\n })\n },\n\n afterEnter: resetStyles,\n enterCancelled: resetStyles,\n\n leave (el: HTMLExpandElement) {\n el._initialStyle = {\n transition: '',\n overflow: el.style.overflow,\n [sizeProperty]: el.style[sizeProperty],\n }\n\n el.style.overflow = 'hidden'\n el.style[sizeProperty] = `${el[offsetProperty]}px`\n void el.offsetHeight // force reflow\n\n requestAnimationFrame(() => (el.style[sizeProperty] = '0'))\n },\n\n afterLeave,\n leaveCancelled: afterLeave,\n }\n\n function afterLeave (el: HTMLExpandElement) {\n if (expandedParentClass && el._parent) {\n el._parent.classList.remove(expandedParentClass)\n }\n resetStyles(el)\n }\n\n function resetStyles (el: HTMLExpandElement) {\n const size = el._initialStyle[sizeProperty]\n el.style.overflow = el._initialStyle.overflow\n if (size != null) el.style[sizeProperty] = size\n delete el._initialStyle\n }\n}\n","import {\n createSimpleTransition,\n createJavascriptTransition,\n} from './createTransition'\n\nimport ExpandTransitionGenerator from './expand-transition'\n\n// Component specific transitions\nexport const VCarouselTransition = createSimpleTransition('carousel-transition')\nexport const VCarouselReverseTransition = createSimpleTransition('carousel-reverse-transition')\nexport const VTabTransition = createSimpleTransition('tab-transition')\nexport const VTabReverseTransition = createSimpleTransition('tab-reverse-transition')\nexport const VMenuTransition = createSimpleTransition('menu-transition')\nexport const VFabTransition = createSimpleTransition('fab-transition', 'center center', 'out-in')\n\n// Generic transitions\nexport const VDialogTransition = createSimpleTransition('dialog-transition')\nexport const VDialogBottomTransition = createSimpleTransition('dialog-bottom-transition')\nexport const VFadeTransition = createSimpleTransition('fade-transition')\nexport const VScaleTransition = createSimpleTransition('scale-transition')\nexport const VScrollXTransition = createSimpleTransition('scroll-x-transition')\nexport const VScrollXReverseTransition = createSimpleTransition('scroll-x-reverse-transition')\nexport const VScrollYTransition = createSimpleTransition('scroll-y-transition')\nexport const VScrollYReverseTransition = createSimpleTransition('scroll-y-reverse-transition')\nexport const VSlideXTransition = createSimpleTransition('slide-x-transition')\nexport const VSlideXReverseTransition = createSimpleTransition('slide-x-reverse-transition')\nexport const VSlideYTransition = createSimpleTransition('slide-y-transition')\nexport const VSlideYReverseTransition = createSimpleTransition('slide-y-reverse-transition')\n\n// Javascript transitions\nexport const VExpandTransition = createJavascriptTransition('expand-transition', ExpandTransitionGenerator())\nexport const VExpandXTransition = createJavascriptTransition('expand-x-transition', ExpandTransitionGenerator('', true))\n\nexport default {\n $_vuetify_subcomponents: {\n VCarouselTransition,\n VCarouselReverseTransition,\n VDialogTransition,\n VDialogBottomTransition,\n VFabTransition,\n VFadeTransition,\n VMenuTransition,\n VScaleTransition,\n VScrollXTransition,\n VScrollXReverseTransition,\n VScrollYTransition,\n VScrollYReverseTransition,\n VSlideXTransition,\n VSlideXReverseTransition,\n VSlideYTransition,\n VSlideYReverseTransition,\n VTabReverseTransition,\n VTabTransition,\n VExpandTransition,\n VExpandXTransition,\n },\n}\n","var $ = require('../internals/export');\nvar $values = require('../internals/object-to-array').values;\n\n// `Object.values` method\n// https://tc39.github.io/ecma262/#sec-object.values\n$({ target: 'Object', stat: true }, {\n values: function values(O) {\n return $values(O);\n }\n});\n","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = arguments[1] || {};\n config.url = arguments[0];\n } else {\n config = config || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n // Set config.method\n if (config.method) {\n config.method = config.method.toLowerCase();\n } else if (this.defaults.method) {\n config.method = this.defaults.method.toLowerCase();\n } else {\n config.method = 'get';\n }\n\n // Hook up interceptors middleware\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\n\nmodule.exports = Axios;\n","var toInteger = require('../internals/to-integer');\nvar toLength = require('../internals/to-length');\n\n// `ToIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-toindex\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length or index');\n return length;\n};\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport function hostReportError(err) {\n setTimeout(function () { throw err; }, 0);\n}\n//# sourceMappingURL=hostReportError.js.map\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n","import './VGrid.sass'\n\nimport Vue, { PropOptions } from 'vue'\nimport mergeData from '../../util/mergeData'\nimport { upperFirst } from '../../util/helpers'\n\n// no xs\nconst breakpoints = ['sm', 'md', 'lg', 'xl']\n\nconst ALIGNMENT = ['start', 'end', 'center']\n\nfunction makeProps (prefix: string, def: () => PropOptions) {\n return breakpoints.reduce((props, val) => {\n props[prefix + upperFirst(val)] = def()\n return props\n }, {} as Dictionary)\n}\n\nconst alignValidator = (str: any) => [...ALIGNMENT, 'baseline', 'stretch'].includes(str)\nconst alignProps = makeProps('align', () => ({\n type: String,\n default: null,\n validator: alignValidator,\n}))\n\nconst justifyValidator = (str: any) => [...ALIGNMENT, 'space-between', 'space-around'].includes(str)\nconst justifyProps = makeProps('justify', () => ({\n type: String,\n default: null,\n validator: justifyValidator,\n}))\n\nconst alignContentValidator = (str: any) => [...ALIGNMENT, 'space-between', 'space-around', 'stretch'].includes(str)\nconst alignContentProps = makeProps('alignContent', () => ({\n type: String,\n default: null,\n validator: alignContentValidator,\n}))\n\nconst propMap = {\n align: Object.keys(alignProps),\n justify: Object.keys(justifyProps),\n alignContent: Object.keys(alignContentProps),\n}\n\nconst classMap = {\n align: 'align',\n justify: 'justify',\n alignContent: 'align-content',\n}\n\nfunction breakpointClass (type: keyof typeof propMap, prop: string, val: string) {\n let className = classMap[type]\n if (val == null) {\n return undefined\n }\n if (prop) {\n // alignSm -> Sm\n const breakpoint = prop.replace(type, '')\n className += `-${breakpoint}`\n }\n // .align-items-sm-center\n className += `-${val}`\n return className.toLowerCase()\n}\n\nconst cache = new Map()\n\nexport default Vue.extend({\n name: 'v-row',\n functional: true,\n props: {\n tag: {\n type: String,\n default: 'div',\n },\n dense: Boolean,\n noGutters: Boolean,\n align: {\n type: String,\n default: null,\n validator: alignValidator,\n },\n ...alignProps,\n justify: {\n type: String,\n default: null,\n validator: justifyValidator,\n },\n ...justifyProps,\n alignContent: {\n type: String,\n default: null,\n validator: alignContentValidator,\n },\n ...alignContentProps,\n },\n render (h, { props, data, children }) {\n // Super-fast memoization based on props, 5x faster than JSON.stringify\n let cacheKey = ''\n for (const prop in props) {\n cacheKey += String((props as any)[prop])\n }\n let classList = cache.get(cacheKey)\n\n if (!classList) {\n classList = []\n // Loop through `align`, `justify`, `alignContent` breakpoint props\n let type: keyof typeof propMap\n for (type in propMap) {\n propMap[type].forEach(prop => {\n const value: string = (props as any)[prop]\n const className = breakpointClass(type, prop, value)\n if (className) classList!.push(className)\n })\n }\n\n classList.push({\n 'no-gutters': props.noGutters,\n 'row--dense': props.dense,\n [`align-${props.align}`]: props.align,\n [`justify-${props.justify}`]: props.justify,\n [`align-content-${props.alignContent}`]: props.alignContent,\n })\n\n cache.set(cacheKey, classList)\n }\n\n return h(\n props.tag,\n mergeData(data, {\n staticClass: 'row',\n class: classList,\n }),\n children\n )\n },\n})\n","import VSheet from './VSheet'\n\nexport { VSheet }\nexport default VSheet\n","/*! xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*exported XLSX */\n/*global global, exports, module, require:false, process:false, Buffer:false, ArrayBuffer:false */\nvar XLSX = {};\nfunction make_xlsx_lib(XLSX){\nXLSX.version = '0.16.7';\nvar current_codepage = 1200, current_ansi = 1252;\n/*global cptable:true, window */\nif(typeof module !== \"undefined\" && typeof require !== 'undefined') {\n\tif(typeof cptable === 'undefined') {\n\t\tif(typeof global !== 'undefined') global.cptable = require('./dist/cpexcel.js');\n\t\telse if(typeof window !== 'undefined') window.cptable = require('./dist/cpexcel.js');\n\t}\n}\n\nvar VALID_ANSI = [ 874, 932, 936, 949, 950 ];\nfor(var i = 0; i <= 8; ++i) VALID_ANSI.push(1250 + i);\n/* ECMA-376 Part I 18.4.1 charset to codepage mapping */\nvar CS2CP = ({\n0: 1252, /* ANSI */\n1: 65001, /* DEFAULT */\n2: 65001, /* SYMBOL */\n77: 10000, /* MAC */\n128: 932, /* SHIFTJIS */\n129: 949, /* HANGUL */\n130: 1361, /* JOHAB */\n134: 936, /* GB2312 */\n136: 950, /* CHINESEBIG5 */\n161: 1253, /* GREEK */\n162: 1254, /* TURKISH */\n163: 1258, /* VIETNAMESE */\n177: 1255, /* HEBREW */\n178: 1256, /* ARABIC */\n186: 1257, /* BALTIC */\n204: 1251, /* RUSSIAN */\n222: 874, /* THAI */\n238: 1250, /* EASTEUROPE */\n255: 1252, /* OEM */\n69: 6969 /* MISC */\n});\n\nvar set_ansi = function(cp) { if(VALID_ANSI.indexOf(cp) == -1) return; current_ansi = CS2CP[0] = cp; };\nfunction reset_ansi() { set_ansi(1252); }\n\nvar set_cp = function(cp) { current_codepage = cp; set_ansi(cp); };\nfunction reset_cp() { set_cp(1200); reset_ansi(); }\n\nfunction char_codes(data) { var o = []; for(var i = 0, len = data.length; i < len; ++i) o[i] = data.charCodeAt(i); return o; }\n\nfunction utf16leread(data) {\n\tvar o = [];\n\tfor(var i = 0; i < (data.length>>1); ++i) o[i] = String.fromCharCode(data.charCodeAt(2*i) + (data.charCodeAt(2*i+1)<<8));\n\treturn o.join(\"\");\n}\nfunction utf16beread(data) {\n\tvar o = [];\n\tfor(var i = 0; i < (data.length>>1); ++i) o[i] = String.fromCharCode(data.charCodeAt(2*i+1) + (data.charCodeAt(2*i)<<8));\n\treturn o.join(\"\");\n}\n\nvar debom = function(data) {\n\tvar c1 = data.charCodeAt(0), c2 = data.charCodeAt(1);\n\tif(c1 == 0xFF && c2 == 0xFE) return utf16leread(data.slice(2));\n\tif(c1 == 0xFE && c2 == 0xFF) return utf16beread(data.slice(2));\n\tif(c1 == 0xFEFF) return data.slice(1);\n\treturn data;\n};\n\nvar _getchar = function _gc1(x) { return String.fromCharCode(x); };\nvar _getansi = function _ga1(x) { return String.fromCharCode(x); };\nif(typeof cptable !== 'undefined') {\n\tset_cp = function(cp) { current_codepage = cp; set_ansi(cp); };\n\tdebom = function(data) {\n\t\tif(data.charCodeAt(0) === 0xFF && data.charCodeAt(1) === 0xFE) { return cptable.utils.decode(1200, char_codes(data.slice(2))); }\n\t\treturn data;\n\t};\n\t_getchar = function _gc2(x) {\n\t\tif(current_codepage === 1200) return String.fromCharCode(x);\n\t\treturn cptable.utils.decode(current_codepage, [x&255,x>>8])[0];\n\t};\n\t_getansi = function _ga2(x) {\n\t\treturn cptable.utils.decode(current_ansi, [x])[0];\n\t};\n}\nvar DENSE = null;\nvar DIF_XL = true;\nvar Base64 = (function make_b64(){\n\tvar map = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\treturn {\n\t\tencode: function(input) {\n\t\t\tvar o = \"\";\n\t\t\tvar c1=0, c2=0, c3=0, e1=0, e2=0, e3=0, e4=0;\n\t\t\tfor(var i = 0; i < input.length; ) {\n\t\t\t\tc1 = input.charCodeAt(i++);\n\t\t\t\te1 = (c1 >> 2);\n\n\t\t\t\tc2 = input.charCodeAt(i++);\n\t\t\t\te2 = ((c1 & 3) << 4) | (c2 >> 4);\n\n\t\t\t\tc3 = input.charCodeAt(i++);\n\t\t\t\te3 = ((c2 & 15) << 2) | (c3 >> 6);\n\t\t\t\te4 = (c3 & 63);\n\t\t\t\tif (isNaN(c2)) { e3 = e4 = 64; }\n\t\t\t\telse if (isNaN(c3)) { e4 = 64; }\n\t\t\t\to += map.charAt(e1) + map.charAt(e2) + map.charAt(e3) + map.charAt(e4);\n\t\t\t}\n\t\t\treturn o;\n\t\t},\n\t\tdecode: function b64_decode(input) {\n\t\t\tvar o = \"\";\n\t\t\tvar c1=0, c2=0, c3=0, e1=0, e2=0, e3=0, e4=0;\n\t\t\tinput = input.replace(/[^\\w\\+\\/\\=]/g, \"\");\n\t\t\tfor(var i = 0; i < input.length;) {\n\t\t\t\te1 = map.indexOf(input.charAt(i++));\n\t\t\t\te2 = map.indexOf(input.charAt(i++));\n\t\t\t\tc1 = (e1 << 2) | (e2 >> 4);\n\t\t\t\to += String.fromCharCode(c1);\n\n\t\t\t\te3 = map.indexOf(input.charAt(i++));\n\t\t\t\tc2 = ((e2 & 15) << 4) | (e3 >> 2);\n\t\t\t\tif (e3 !== 64) { o += String.fromCharCode(c2); }\n\n\t\t\t\te4 = map.indexOf(input.charAt(i++));\n\t\t\t\tc3 = ((e3 & 3) << 6) | e4;\n\t\t\t\tif (e4 !== 64) { o += String.fromCharCode(c3); }\n\t\t\t}\n\t\t\treturn o;\n\t\t}\n\t};\n})();\nvar has_buf = (typeof Buffer !== 'undefined' && typeof process !== 'undefined' && typeof process.versions !== 'undefined' && !!process.versions.node);\n\nvar Buffer_from = function(){};\n\nif(typeof Buffer !== 'undefined') {\n\tvar nbfs = !Buffer.from;\n\tif(!nbfs) try { Buffer.from(\"foo\", \"utf8\"); } catch(e) { nbfs = true; }\n\tBuffer_from = nbfs ? function(buf, enc) { return (enc) ? new Buffer(buf, enc) : new Buffer(buf); } : Buffer.from.bind(Buffer);\n\t// $FlowIgnore\n\tif(!Buffer.alloc) Buffer.alloc = function(n) { return new Buffer(n); };\n\t// $FlowIgnore\n\tif(!Buffer.allocUnsafe) Buffer.allocUnsafe = function(n) { return new Buffer(n); };\n}\n\nfunction new_raw_buf(len) {\n\t/* jshint -W056 */\n\treturn has_buf ? Buffer.alloc(len) : new Array(len);\n\t/* jshint +W056 */\n}\n\nfunction new_unsafe_buf(len) {\n\t/* jshint -W056 */\n\treturn has_buf ? Buffer.allocUnsafe(len) : new Array(len);\n\t/* jshint +W056 */\n}\n\nvar s2a = function s2a(s) {\n\tif(has_buf) return Buffer_from(s, \"binary\");\n\treturn s.split(\"\").map(function(x){ return x.charCodeAt(0) & 0xff; });\n};\n\nfunction s2ab(s) {\n\tif(typeof ArrayBuffer === 'undefined') return s2a(s);\n\tvar buf = new ArrayBuffer(s.length), view = new Uint8Array(buf);\n\tfor (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;\n\treturn buf;\n}\n\nfunction a2s(data) {\n\tif(Array.isArray(data)) return data.map(function(c) { return String.fromCharCode(c); }).join(\"\");\n\tvar o = []; for(var i = 0; i < data.length; ++i) o[i] = String.fromCharCode(data[i]); return o.join(\"\");\n}\n\nfunction a2u(data) {\n\tif(typeof Uint8Array === 'undefined') throw new Error(\"Unsupported\");\n\treturn new Uint8Array(data);\n}\n\nfunction ab2a(data) {\n\tif(typeof ArrayBuffer == 'undefined') throw new Error(\"Unsupported\");\n\tif(data instanceof ArrayBuffer) return ab2a(new Uint8Array(data));\nvar o = new Array(data.length);\n\tfor(var i = 0; i < data.length; ++i) o[i] = data[i];\n\treturn o;\n}\n\nvar bconcat = function(bufs) { return [].concat.apply([], bufs); };\n\nvar chr0 = /\\u0000/g, chr1 = /[\\u0001-\\u0006]/g;\n/* ssf.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/*jshint -W041 */\nvar SSF = ({});\nvar make_ssf = function make_ssf(SSF){\nSSF.version = '0.11.2';\nfunction _strrev(x) { var o = \"\", i = x.length-1; while(i>=0) o += x.charAt(i--); return o; }\nfunction fill(c,l) { var o = \"\"; while(o.length < l) o+=c; return o; }\nfunction pad0(v,d){var t=\"\"+v; return t.length>=d?t:fill('0',d-t.length)+t;}\nfunction pad_(v,d){var t=\"\"+v;return t.length>=d?t:fill(' ',d-t.length)+t;}\nfunction rpad_(v,d){var t=\"\"+v; return t.length>=d?t:t+fill(' ',d-t.length);}\nfunction pad0r1(v,d){var t=\"\"+Math.round(v); return t.length>=d?t:fill('0',d-t.length)+t;}\nfunction pad0r2(v,d){var t=\"\"+v; return t.length>=d?t:fill('0',d-t.length)+t;}\nvar p2_32 = Math.pow(2,32);\nfunction pad0r(v,d){if(v>p2_32||v<-p2_32) return pad0r1(v,d); var i = Math.round(v); return pad0r2(i,d); }\nfunction isgeneral(s, i) { i = i || 0; return s.length >= 7 + i && (s.charCodeAt(i)|32) === 103 && (s.charCodeAt(i+1)|32) === 101 && (s.charCodeAt(i+2)|32) === 110 && (s.charCodeAt(i+3)|32) === 101 && (s.charCodeAt(i+4)|32) === 114 && (s.charCodeAt(i+5)|32) === 97 && (s.charCodeAt(i+6)|32) === 108; }\nvar days = [\n\t['Sun', 'Sunday'],\n\t['Mon', 'Monday'],\n\t['Tue', 'Tuesday'],\n\t['Wed', 'Wednesday'],\n\t['Thu', 'Thursday'],\n\t['Fri', 'Friday'],\n\t['Sat', 'Saturday']\n];\nvar months = [\n\t['J', 'Jan', 'January'],\n\t['F', 'Feb', 'February'],\n\t['M', 'Mar', 'March'],\n\t['A', 'Apr', 'April'],\n\t['M', 'May', 'May'],\n\t['J', 'Jun', 'June'],\n\t['J', 'Jul', 'July'],\n\t['A', 'Aug', 'August'],\n\t['S', 'Sep', 'September'],\n\t['O', 'Oct', 'October'],\n\t['N', 'Nov', 'November'],\n\t['D', 'Dec', 'December']\n];\nfunction init_table(t) {\n\tt[0]= 'General';\n\tt[1]= '0';\n\tt[2]= '0.00';\n\tt[3]= '#,##0';\n\tt[4]= '#,##0.00';\n\tt[9]= '0%';\n\tt[10]= '0.00%';\n\tt[11]= '0.00E+00';\n\tt[12]= '# ?/?';\n\tt[13]= '# ??/??';\n\tt[14]= 'm/d/yy';\n\tt[15]= 'd-mmm-yy';\n\tt[16]= 'd-mmm';\n\tt[17]= 'mmm-yy';\n\tt[18]= 'h:mm AM/PM';\n\tt[19]= 'h:mm:ss AM/PM';\n\tt[20]= 'h:mm';\n\tt[21]= 'h:mm:ss';\n\tt[22]= 'm/d/yy h:mm';\n\tt[37]= '#,##0 ;(#,##0)';\n\tt[38]= '#,##0 ;[Red](#,##0)';\n\tt[39]= '#,##0.00;(#,##0.00)';\n\tt[40]= '#,##0.00;[Red](#,##0.00)';\n\tt[45]= 'mm:ss';\n\tt[46]= '[h]:mm:ss';\n\tt[47]= 'mmss.0';\n\tt[48]= '##0.0E+0';\n\tt[49]= '@';\n\tt[56]= '\"上午/下午 \"hh\"時\"mm\"分\"ss\"秒 \"';\n}\n\nvar table_fmt = {};\ninit_table(table_fmt);\n/* Defaults determined by systematically testing in Excel 2019 */\n\n/* These formats appear to default to other formats in the table */\nvar default_map = [];\nvar defi = 0;\n\n// 5 -> 37 ... 8 -> 40\nfor(defi = 5; defi <= 8; ++defi) default_map[defi] = 32 + defi;\n\n// 23 -> 0 ... 26 -> 0\nfor(defi = 23; defi <= 26; ++defi) default_map[defi] = 0;\n\n// 27 -> 14 ... 31 -> 14\nfor(defi = 27; defi <= 31; ++defi) default_map[defi] = 14;\n// 50 -> 14 ... 58 -> 14\nfor(defi = 50; defi <= 58; ++defi) default_map[defi] = 14;\n\n// 59 -> 1 ... 62 -> 4\nfor(defi = 59; defi <= 62; ++defi) default_map[defi] = defi - 58;\n// 67 -> 9 ... 68 -> 10\nfor(defi = 67; defi <= 68; ++defi) default_map[defi] = defi - 58;\n// 72 -> 14 ... 75 -> 17\nfor(defi = 72; defi <= 75; ++defi) default_map[defi] = defi - 58;\n\n// 69 -> 12 ... 71 -> 14\nfor(defi = 67; defi <= 68; ++defi) default_map[defi] = defi - 57;\n\n// 76 -> 20 ... 78 -> 22\nfor(defi = 76; defi <= 78; ++defi) default_map[defi] = defi - 56;\n\n// 79 -> 45 ... 81 -> 47\nfor(defi = 79; defi <= 81; ++defi) default_map[defi] = defi - 34;\n\n// 82 -> 0 ... 65536 -> 0 (omitted)\n\n/* These formats technically refer to Accounting formats with no equivalent */\nvar default_str = [];\n\n// 5 -- Currency, 0 decimal, black negative\ndefault_str[5] = default_str[63] = '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)';\n// 6 -- Currency, 0 decimal, red negative\ndefault_str[6] = default_str[64] = '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)';\n// 7 -- Currency, 2 decimal, black negative\ndefault_str[7] = default_str[65] = '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)';\n// 8 -- Currency, 2 decimal, red negative\ndefault_str[8] = default_str[66] = '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)';\n\n// 41 -- Accounting, 0 decimal, No Symbol\ndefault_str[41] = '_(* #,##0_);_(* \\\\(#,##0\\\\);_(* \"-\"_);_(@_)';\n// 42 -- Accounting, 0 decimal, $ Symbol\ndefault_str[42] = '_(\"$\"* #,##0_);_(\"$\"* \\\\(#,##0\\\\);_(\"$\"* \"-\"_);_(@_)';\n// 43 -- Accounting, 2 decimal, No Symbol\ndefault_str[43] = '_(* #,##0.00_);_(* \\\\(#,##0.00\\\\);_(* \"-\"??_);_(@_)';\n// 44 -- Accounting, 2 decimal, $ Symbol\ndefault_str[44] = '_(\"$\"* #,##0.00_);_(\"$\"* \\\\(#,##0.00\\\\);_(\"$\"* \"-\"??_);_(@_)';\nfunction frac(x, D, mixed) {\n\tvar sgn = x < 0 ? -1 : 1;\n\tvar B = x * sgn;\n\tvar P_2 = 0, P_1 = 1, P = 0;\n\tvar Q_2 = 1, Q_1 = 0, Q = 0;\n\tvar A = Math.floor(B);\n\twhile(Q_1 < D) {\n\t\tA = Math.floor(B);\n\t\tP = A * P_1 + P_2;\n\t\tQ = A * Q_1 + Q_2;\n\t\tif((B - A) < 0.00000005) break;\n\t\tB = 1 / (B - A);\n\t\tP_2 = P_1; P_1 = P;\n\t\tQ_2 = Q_1; Q_1 = Q;\n\t}\n\tif(Q > D) { if(Q_1 > D) { Q = Q_2; P = P_2; } else { Q = Q_1; P = P_1; } }\n\tif(!mixed) return [0, sgn * P, Q];\n\tvar q = Math.floor(sgn * P/Q);\n\treturn [q, sgn*P - q*Q, Q];\n}\nfunction parse_date_code(v,opts,b2) {\n\tif(v > 2958465 || v < 0) return null;\n\tvar date = (v|0), time = Math.floor(86400 * (v - date)), dow=0;\n\tvar dout=[];\n\tvar out={D:date, T:time, u:86400*(v-date)-time,y:0,m:0,d:0,H:0,M:0,S:0,q:0};\n\tif(Math.abs(out.u) < 1e-6) out.u = 0;\n\tif(opts && opts.date1904) date += 1462;\n\tif(out.u > 0.9999) {\n\t\tout.u = 0;\n\t\tif(++time == 86400) { out.T = time = 0; ++date; ++out.D; }\n\t}\n\tif(date === 60) {dout = b2 ? [1317,10,29] : [1900,2,29]; dow=3;}\n\telse if(date === 0) {dout = b2 ? [1317,8,29] : [1900,1,0]; dow=6;}\n\telse {\n\t\tif(date > 60) --date;\n\t\t/* 1 = Jan 1 1900 in Gregorian */\n\t\tvar d = new Date(1900, 0, 1);\n\t\td.setDate(d.getDate() + date - 1);\n\t\tdout = [d.getFullYear(), d.getMonth()+1,d.getDate()];\n\t\tdow = d.getDay();\n\t\tif(date < 60) dow = (dow + 6) % 7;\n\t\tif(b2) dow = fix_hijri(d, dout);\n\t}\n\tout.y = dout[0]; out.m = dout[1]; out.d = dout[2];\n\tout.S = time % 60; time = Math.floor(time / 60);\n\tout.M = time % 60; time = Math.floor(time / 60);\n\tout.H = time;\n\tout.q = dow;\n\treturn out;\n}\nSSF.parse_date_code = parse_date_code;\nvar basedate = new Date(1899, 11, 31, 0, 0, 0);\nvar dnthresh = basedate.getTime();\nvar base1904 = new Date(1900, 2, 1, 0, 0, 0);\nfunction datenum_local(v, date1904) {\n\tvar epoch = v.getTime();\n\tif(date1904) epoch -= 1461*24*60*60*1000;\n\telse if(v >= base1904) epoch += 24*60*60*1000;\n\treturn (epoch - (dnthresh + (v.getTimezoneOffset() - basedate.getTimezoneOffset()) * 60000)) / (24 * 60 * 60 * 1000);\n}\n/* The longest 32-bit integer text is \"-4294967296\", exactly 11 chars */\nfunction general_fmt_int(v) { return v.toString(10); }\nSSF._general_int = general_fmt_int;\n\n/* ECMA-376 18.8.30 numFmt*/\n/* Note: `toPrecision` uses standard form when prec > E and E >= -6 */\nvar general_fmt_num = (function make_general_fmt_num() {\n\tvar trailing_zeroes_and_decimal = /(?:\\.0*|(\\.\\d*[1-9])0+)$/;\n\tfunction strip_decimal(o) {\n\t\treturn (o.indexOf(\".\") == -1) ? o : o.replace(trailing_zeroes_and_decimal, \"$1\");\n\t}\n\n\t/* General Exponential always shows 2 digits exp and trims the mantissa */\n\tvar mantissa_zeroes_and_decimal = /(?:\\.0*|(\\.\\d*[1-9])0+)[Ee]/;\n\tvar exp_with_single_digit = /(E[+-])(\\d)$/;\n\tfunction normalize_exp(o) {\n\t\tif(o.indexOf(\"E\") == -1) return o;\n\t\treturn o.replace(mantissa_zeroes_and_decimal,\"$1E\").replace(exp_with_single_digit,\"$10$2\");\n\t}\n\n\t/* exponent >= -9 and <= 9 */\n\tfunction small_exp(v) {\n\t\tvar w = (v<0?12:11);\n\t\tvar o = strip_decimal(v.toFixed(12)); if(o.length <= w) return o;\n\t\to = v.toPrecision(10); if(o.length <= w) return o;\n\t\treturn v.toExponential(5);\n\t}\n\n\t/* exponent >= 11 or <= -10 likely exponential */\n\tfunction large_exp(v) {\n\t\tvar o = strip_decimal(v.toFixed(11));\n\t\treturn (o.length > (v<0?12:11) || o === \"0\" || o === \"-0\") ? v.toPrecision(6) : o;\n\t}\n\n\tfunction general_fmt_num_base(v) {\n\t\tvar V = Math.floor(Math.log(Math.abs(v))*Math.LOG10E), o;\n\n\t\tif(V >= -4 && V <= -1) o = v.toPrecision(10+V);\n\t\telse if(Math.abs(V) <= 9) o = small_exp(v);\n\t\telse if(V === 10) o = v.toFixed(10).substr(0,12);\n\t\telse o = large_exp(v);\n\n\t\treturn strip_decimal(normalize_exp(o.toUpperCase()));\n\t}\n\n\treturn general_fmt_num_base;\n})();\nSSF._general_num = general_fmt_num;\n\n/*\n\t\"General\" rules:\n\t- text is passed through (\"@\")\n\t- booleans are rendered as TRUE/FALSE\n\t- \"up to 11 characters\" displayed for numbers\n\t- Default date format (code 14) used for Dates\n\n\tTODO: technically the display depends on the width of the cell\n*/\nfunction general_fmt(v, opts) {\n\tswitch(typeof v) {\n\t\tcase 'string': return v;\n\t\tcase 'boolean': return v ? \"TRUE\" : \"FALSE\";\n\t\tcase 'number': return (v|0) === v ? v.toString(10) : general_fmt_num(v);\n\t\tcase 'undefined': return \"\";\n\t\tcase 'object':\n\t\t\tif(v == null) return \"\";\n\t\t\tif(v instanceof Date) return format(14, datenum_local(v, opts && opts.date1904), opts);\n\t}\n\tthrow new Error(\"unsupported value in General format: \" + v);\n}\nSSF._general = general_fmt;\nfunction fix_hijri(date, o) {\n /* TODO: properly adjust y/m/d and */\n o[0] -= 581;\n var dow = date.getDay();\n if(date < 60) dow = (dow + 6) % 7;\n return dow;\n}\n//var THAI_DIGITS = \"\\u0E50\\u0E51\\u0E52\\u0E53\\u0E54\\u0E55\\u0E56\\u0E57\\u0E58\\u0E59\".split(\"\");\n/*jshint -W086 */\nfunction write_date(type, fmt, val, ss0) {\n\tvar o=\"\", ss=0, tt=0, y = val.y, out, outl = 0;\n\tswitch(type) {\n\t\tcase 98: /* 'b' buddhist year */\n\t\t\ty = val.y + 543;\n\t\t\t/* falls through */\n\t\tcase 121: /* 'y' year */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = y % 100; outl = 2; break;\n\t\t\tdefault: out = y % 10000; outl = 4; break;\n\t\t} break;\n\t\tcase 109: /* 'm' month */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.m; outl = fmt.length; break;\n\t\t\tcase 3: return months[val.m-1][1];\n\t\t\tcase 5: return months[val.m-1][0];\n\t\t\tdefault: return months[val.m-1][2];\n\t\t} break;\n\t\tcase 100: /* 'd' day */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.d; outl = fmt.length; break;\n\t\t\tcase 3: return days[val.q][0];\n\t\t\tdefault: return days[val.q][1];\n\t\t} break;\n\t\tcase 104: /* 'h' 12-hour */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = 1+(val.H+11)%12; outl = fmt.length; break;\n\t\t\tdefault: throw 'bad hour format: ' + fmt;\n\t\t} break;\n\t\tcase 72: /* 'H' 24-hour */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.H; outl = fmt.length; break;\n\t\t\tdefault: throw 'bad hour format: ' + fmt;\n\t\t} break;\n\t\tcase 77: /* 'M' minutes */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.M; outl = fmt.length; break;\n\t\t\tdefault: throw 'bad minute format: ' + fmt;\n\t\t} break;\n\t\tcase 115: /* 's' seconds */\n\t\t\tif(fmt != 's' && fmt != 'ss' && fmt != '.0' && fmt != '.00' && fmt != '.000') throw 'bad second format: ' + fmt;\n\t\t\tif(val.u === 0 && (fmt == \"s\" || fmt == \"ss\")) return pad0(val.S, fmt.length);\nif(ss0 >= 2) tt = ss0 === 3 ? 1000 : 100;\n\t\t\telse tt = ss0 === 1 ? 10 : 1;\n\t\t\tss = Math.round((tt)*(val.S + val.u));\n\t\t\tif(ss >= 60*tt) ss = 0;\n\t\t\tif(fmt === 's') return ss === 0 ? \"0\" : \"\"+ss/tt;\n\t\t\to = pad0(ss,2 + ss0);\n\t\t\tif(fmt === 'ss') return o.substr(0,2);\n\t\t\treturn \".\" + o.substr(2,fmt.length-1);\n\t\tcase 90: /* 'Z' absolute time */\n\t\tswitch(fmt) {\n\t\t\tcase '[h]': case '[hh]': out = val.D*24+val.H; break;\n\t\t\tcase '[m]': case '[mm]': out = (val.D*24+val.H)*60+val.M; break;\n\t\t\tcase '[s]': case '[ss]': out = ((val.D*24+val.H)*60+val.M)*60+Math.round(val.S+val.u); break;\n\t\t\tdefault: throw 'bad abstime format: ' + fmt;\n\t\t} outl = fmt.length === 3 ? 1 : 2; break;\n\t\tcase 101: /* 'e' era */\n\t\t\tout = y; outl = 1; break;\n\t}\n\tvar outstr = outl > 0 ? pad0(out, outl) : \"\";\n\treturn outstr;\n}\n/*jshint +W086 */\nfunction commaify(s) {\n\tvar w = 3;\n\tif(s.length <= w) return s;\n\tvar j = (s.length % w), o = s.substr(0,j);\n\tfor(; j!=s.length; j+=w) o+=(o.length > 0 ? \",\" : \"\") + s.substr(j,w);\n\treturn o;\n}\nvar write_num = (function make_write_num(){\nvar pct1 = /%/g;\nfunction write_num_pct(type, fmt, val){\n\tvar sfmt = fmt.replace(pct1,\"\"), mul = fmt.length - sfmt.length;\n\treturn write_num(type, sfmt, val * Math.pow(10,2*mul)) + fill(\"%\",mul);\n}\nfunction write_num_cm(type, fmt, val){\n\tvar idx = fmt.length - 1;\n\twhile(fmt.charCodeAt(idx-1) === 44) --idx;\n\treturn write_num(type, fmt.substr(0,idx), val / Math.pow(10,3*(fmt.length-idx)));\n}\nfunction write_num_exp(fmt, val){\n\tvar o;\n\tvar idx = fmt.indexOf(\"E\") - fmt.indexOf(\".\") - 1;\n\tif(fmt.match(/^#+0.0E\\+0$/)) {\n\t\tif(val == 0) return \"0.0E+0\";\n\t\telse if(val < 0) return \"-\" + write_num_exp(fmt, -val);\n\t\tvar period = fmt.indexOf(\".\"); if(period === -1) period=fmt.indexOf('E');\n\t\tvar ee = Math.floor(Math.log(val)*Math.LOG10E)%period;\n\t\tif(ee < 0) ee += period;\n\t\to = (val/Math.pow(10,ee)).toPrecision(idx+1+(period+ee)%period);\n\t\tif(o.indexOf(\"e\") === -1) {\n\t\t\tvar fakee = Math.floor(Math.log(val)*Math.LOG10E);\n\t\t\tif(o.indexOf(\".\") === -1) o = o.charAt(0) + \".\" + o.substr(1) + \"E+\" + (fakee - o.length+ee);\n\t\t\telse o += \"E+\" + (fakee - ee);\n\t\t\twhile(o.substr(0,2) === \"0.\") {\n\t\t\t\to = o.charAt(0) + o.substr(2,period) + \".\" + o.substr(2+period);\n\t\t\t\to = o.replace(/^0+([1-9])/,\"$1\").replace(/^0+\\./,\"0.\");\n\t\t\t}\n\t\t\to = o.replace(/\\+-/,\"-\");\n\t\t}\n\t\to = o.replace(/^([+-]?)(\\d*)\\.(\\d*)[Ee]/,function($$,$1,$2,$3) { return $1 + $2 + $3.substr(0,(period+ee)%period) + \".\" + $3.substr(ee) + \"E\"; });\n\t} else o = val.toExponential(idx);\n\tif(fmt.match(/E\\+00$/) && o.match(/e[+-]\\d$/)) o = o.substr(0,o.length-1) + \"0\" + o.charAt(o.length-1);\n\tif(fmt.match(/E\\-/) && o.match(/e\\+/)) o = o.replace(/e\\+/,\"e\");\n\treturn o.replace(\"e\",\"E\");\n}\nvar frac1 = /# (\\?+)( ?)\\/( ?)(\\d+)/;\nfunction write_num_f1(r, aval, sign) {\n\tvar den = parseInt(r[4],10), rr = Math.round(aval * den), base = Math.floor(rr/den);\n\tvar myn = (rr - base*den), myd = den;\n\treturn sign + (base === 0 ? \"\" : \"\"+base) + \" \" + (myn === 0 ? fill(\" \", r[1].length + 1 + r[4].length) : pad_(myn,r[1].length) + r[2] + \"/\" + r[3] + pad0(myd,r[4].length));\n}\nfunction write_num_f2(r, aval, sign) {\n\treturn sign + (aval === 0 ? \"\" : \"\"+aval) + fill(\" \", r[1].length + 2 + r[4].length);\n}\nvar dec1 = /^#*0*\\.([0#]+)/;\nvar closeparen = /\\).*[0#]/;\nvar phone = /\\(###\\) ###\\\\?-####/;\nfunction hashq(str) {\n\tvar o = \"\", cc;\n\tfor(var i = 0; i != str.length; ++i) switch((cc=str.charCodeAt(i))) {\n\t\tcase 35: break;\n\t\tcase 63: o+= \" \"; break;\n\t\tcase 48: o+= \"0\"; break;\n\t\tdefault: o+= String.fromCharCode(cc);\n\t}\n\treturn o;\n}\nfunction rnd(val, d) { var dd = Math.pow(10,d); return \"\"+(Math.round(val * dd)/dd); }\nfunction dec(val, d) {\n\tvar _frac = val - Math.floor(val), dd = Math.pow(10,d);\n\tif (d < ('' + Math.round(_frac * dd)).length) return 0;\n\treturn Math.round(_frac * dd);\n}\nfunction carry(val, d) {\n\tif (d < ('' + Math.round((val-Math.floor(val))*Math.pow(10,d))).length) {\n\t\treturn 1;\n\t}\n\treturn 0;\n}\nfunction flr(val) {\n\tif(val < 2147483647 && val > -2147483648) return \"\"+(val >= 0 ? (val|0) : (val-1|0));\n\treturn \"\"+Math.floor(val);\n}\nfunction write_num_flt(type, fmt, val) {\n\tif(type.charCodeAt(0) === 40 && !fmt.match(closeparen)) {\n\t\tvar ffmt = fmt.replace(/\\( */,\"\").replace(/ \\)/,\"\").replace(/\\)/,\"\");\n\t\tif(val >= 0) return write_num_flt('n', ffmt, val);\n\t\treturn '(' + write_num_flt('n', ffmt, -val) + ')';\n\t}\n\tif(fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm(type, fmt, val);\n\tif(fmt.indexOf('%') !== -1) return write_num_pct(type, fmt, val);\n\tif(fmt.indexOf('E') !== -1) return write_num_exp(fmt, val);\n\tif(fmt.charCodeAt(0) === 36) return \"$\"+write_num_flt(type,fmt.substr(fmt.charAt(1)==' '?2:1),val);\n\tvar o;\n\tvar r, ri, ff, aval = Math.abs(val), sign = val < 0 ? \"-\" : \"\";\n\tif(fmt.match(/^00+$/)) return sign + pad0r(aval,fmt.length);\n\tif(fmt.match(/^[#?]+$/)) {\n\t\to = pad0r(val,0); if(o === \"0\") o = \"\";\n\t\treturn o.length > fmt.length ? o : hashq(fmt.substr(0,fmt.length-o.length)) + o;\n\t}\n\tif((r = fmt.match(frac1))) return write_num_f1(r, aval, sign);\n\tif(fmt.match(/^#+0+$/)) return sign + pad0r(aval,fmt.length - fmt.indexOf(\"0\"));\n\tif((r = fmt.match(dec1))) {\n\t\to = rnd(val, r[1].length).replace(/^([^\\.]+)$/,\"$1.\"+hashq(r[1])).replace(/\\.$/,\".\"+hashq(r[1])).replace(/\\.(\\d*)$/,function($$, $1) { return \".\" + $1 + fill(\"0\", hashq(r[1]).length-$1.length); });\n\t\treturn fmt.indexOf(\"0.\") !== -1 ? o : o.replace(/^0\\./,\".\");\n\t}\n\tfmt = fmt.replace(/^#+([0.])/, \"$1\");\n\tif((r = fmt.match(/^(0*)\\.(#*)$/))) {\n\t\treturn sign + rnd(aval, r[2].length).replace(/\\.(\\d*[1-9])0*$/,\".$1\").replace(/^(-?\\d*)$/,\"$1.\").replace(/^0\\./,r[1].length?\"0.\":\".\");\n\t}\n\tif((r = fmt.match(/^#{1,3},##0(\\.?)$/))) return sign + commaify(pad0r(aval,0));\n\tif((r = fmt.match(/^#,##0\\.([#0]*0)$/))) {\n\t\treturn val < 0 ? \"-\" + write_num_flt(type, fmt, -val) : commaify(\"\"+(Math.floor(val) + carry(val, r[1].length))) + \".\" + pad0(dec(val, r[1].length),r[1].length);\n\t}\n\tif((r = fmt.match(/^#,#*,#0/))) return write_num_flt(type,fmt.replace(/^#,#*,/,\"\"),val);\n\tif((r = fmt.match(/^([0#]+)(\\\\?-([0#]+))+$/))) {\n\t\to = _strrev(write_num_flt(type, fmt.replace(/[\\\\-]/g,\"\"), val));\n\t\tri = 0;\n\t\treturn _strrev(_strrev(fmt.replace(/\\\\/g,\"\")).replace(/[0#]/g,function(x){return ri= 0) return write_num_int('n', ffmt, val);\n\t\treturn '(' + write_num_int('n', ffmt, -val) + ')';\n\t}\n\tif(fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm2(type, fmt, val);\n\tif(fmt.indexOf('%') !== -1) return write_num_pct2(type, fmt, val);\n\tif(fmt.indexOf('E') !== -1) return write_num_exp2(fmt, val);\n\tif(fmt.charCodeAt(0) === 36) return \"$\"+write_num_int(type,fmt.substr(fmt.charAt(1)==' '?2:1),val);\n\tvar o;\n\tvar r, ri, ff, aval = Math.abs(val), sign = val < 0 ? \"-\" : \"\";\n\tif(fmt.match(/^00+$/)) return sign + pad0(aval,fmt.length);\n\tif(fmt.match(/^[#?]+$/)) {\n\t\to = (\"\"+val); if(val === 0) o = \"\";\n\t\treturn o.length > fmt.length ? o : hashq(fmt.substr(0,fmt.length-o.length)) + o;\n\t}\n\tif((r = fmt.match(frac1))) return write_num_f2(r, aval, sign);\n\tif(fmt.match(/^#+0+$/)) return sign + pad0(aval,fmt.length - fmt.indexOf(\"0\"));\n\tif((r = fmt.match(dec1))) {\no = (\"\"+val).replace(/^([^\\.]+)$/,\"$1.\"+hashq(r[1])).replace(/\\.$/,\".\"+hashq(r[1]));\n\t\to = o.replace(/\\.(\\d*)$/,function($$, $1) {\nreturn \".\" + $1 + fill(\"0\", hashq(r[1]).length-$1.length); });\n\t\treturn fmt.indexOf(\"0.\") !== -1 ? o : o.replace(/^0\\./,\".\");\n\t}\n\tfmt = fmt.replace(/^#+([0.])/, \"$1\");\n\tif((r = fmt.match(/^(0*)\\.(#*)$/))) {\n\t\treturn sign + (\"\"+aval).replace(/\\.(\\d*[1-9])0*$/,\".$1\").replace(/^(-?\\d*)$/,\"$1.\").replace(/^0\\./,r[1].length?\"0.\":\".\");\n\t}\n\tif((r = fmt.match(/^#{1,3},##0(\\.?)$/))) return sign + commaify((\"\"+aval));\n\tif((r = fmt.match(/^#,##0\\.([#0]*0)$/))) {\n\t\treturn val < 0 ? \"-\" + write_num_int(type, fmt, -val) : commaify((\"\"+val)) + \".\" + fill('0',r[1].length);\n\t}\n\tif((r = fmt.match(/^#,#*,#0/))) return write_num_int(type,fmt.replace(/^#,#*,/,\"\"),val);\n\tif((r = fmt.match(/^([0#]+)(\\\\?-([0#]+))+$/))) {\n\t\to = _strrev(write_num_int(type, fmt.replace(/[\\\\-]/g,\"\"), val));\n\t\tri = 0;\n\t\treturn _strrev(_strrev(fmt.replace(/\\\\/g,\"\")).replace(/[0#]/g,function(x){return ri -1 || (c=='\\\\' && fmt.charAt(i+1) == \"-\" && \"0#\".indexOf(fmt.charAt(i+2))>-1))){/* empty */}\n\t\t\t\tbreak;\n\t\t\tcase '?': while(fmt.charAt(++i) === c){/* empty */} break;\n\t\t\tcase '*': ++i; if(fmt.charAt(i) == ' ' || fmt.charAt(i) == '*') ++i; break;\n\t\t\tcase '(': case ')': ++i; break;\n\t\t\tcase '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':\n\t\t\t\twhile(i < fmt.length && \"0123456789\".indexOf(fmt.charAt(++i)) > -1){/* empty */} break;\n\t\t\tcase ' ': ++i; break;\n\t\t\tdefault: ++i; break;\n\t\t}\n\t}\n\treturn false;\n}\nSSF.is_date = fmt_is_date;\nfunction eval_fmt(fmt, v, opts, flen) {\n\tvar out = [], o = \"\", i = 0, c = \"\", lst='t', dt, j, cc;\n\tvar hr='H';\n\t/* Tokenize */\n\twhile(i < fmt.length) {\n\t\tswitch((c = fmt.charAt(i))) {\n\t\t\tcase 'G': /* General */\n\t\t\t\tif(!isgeneral(fmt, i)) throw new Error('unrecognized character ' + c + ' in ' +fmt);\n\t\t\t\tout[out.length] = {t:'G', v:'General'}; i+=7; break;\n\t\t\tcase '\"': /* Literal text */\n\t\t\t\tfor(o=\"\";(cc=fmt.charCodeAt(++i)) !== 34 && i < fmt.length;) o += String.fromCharCode(cc);\n\t\t\t\tout[out.length] = {t:'t', v:o}; ++i; break;\n\t\t\tcase '\\\\': var w = fmt.charAt(++i), t = (w === \"(\" || w === \")\") ? w : 't';\n\t\t\t\tout[out.length] = {t:t, v:w}; ++i; break;\n\t\t\tcase '_': out[out.length] = {t:'t', v:\" \"}; i+=2; break;\n\t\t\tcase '@': /* Text Placeholder */\n\t\t\t\tout[out.length] = {t:'T', v:v}; ++i; break;\n\t\t\tcase 'B': case 'b':\n\t\t\t\tif(fmt.charAt(i+1) === \"1\" || fmt.charAt(i+1) === \"2\") {\n\t\t\t\t\tif(dt==null) { dt=parse_date_code(v, opts, fmt.charAt(i+1) === \"2\"); if(dt==null) return \"\"; }\n\t\t\t\t\tout[out.length] = {t:'X', v:fmt.substr(i,2)}; lst = c; i+=2; break;\n\t\t\t\t}\n\t\t\t\t/* falls through */\n\t\t\tcase 'M': case 'D': case 'Y': case 'H': case 'S': case 'E':\n\t\t\t\tc = c.toLowerCase();\n\t\t\t\t/* falls through */\n\t\t\tcase 'm': case 'd': case 'y': case 'h': case 's': case 'e': case 'g':\n\t\t\t\tif(v < 0) return \"\";\n\t\t\t\tif(dt==null) { dt=parse_date_code(v, opts); if(dt==null) return \"\"; }\n\t\t\t\to = c; while(++i < fmt.length && fmt.charAt(i).toLowerCase() === c) o+=c;\n\t\t\t\tif(c === 'm' && lst.toLowerCase() === 'h') c = 'M';\n\t\t\t\tif(c === 'h') c = hr;\n\t\t\t\tout[out.length] = {t:c, v:o}; lst = c; break;\n\t\t\tcase 'A': case 'a': case '上':\n\t\t\t\tvar q={t:c, v:c};\n\t\t\t\tif(dt==null) dt=parse_date_code(v, opts);\n\t\t\t\tif(fmt.substr(i, 3).toUpperCase() === \"A/P\") { if(dt!=null) q.v = dt.H >= 12 ? \"P\" : \"A\"; q.t = 'T'; hr='h';i+=3;}\n\t\t\t\telse if(fmt.substr(i,5).toUpperCase() === \"AM/PM\") { if(dt!=null) q.v = dt.H >= 12 ? \"PM\" : \"AM\"; q.t = 'T'; i+=5; hr='h'; }\n\t\t\t\telse if(fmt.substr(i,5).toUpperCase() === \"上午/下午\") { if(dt!=null) q.v = dt.H >= 12 ? \"下午\" : \"上午\"; q.t = 'T'; i+=5; hr='h'; }\n\t\t\t\telse { q.t = \"t\"; ++i; }\n\t\t\t\tif(dt==null && q.t === 'T') return \"\";\n\t\t\t\tout[out.length] = q; lst = c; break;\n\t\t\tcase '[':\n\t\t\t\to = c;\n\t\t\t\twhile(fmt.charAt(i++) !== ']' && i < fmt.length) o += fmt.charAt(i);\n\t\t\t\tif(o.slice(-1) !== ']') throw 'unterminated \"[\" block: |' + o + '|';\n\t\t\t\tif(o.match(abstime)) {\n\t\t\t\t\tif(dt==null) { dt=parse_date_code(v, opts); if(dt==null) return \"\"; }\n\t\t\t\t\tout[out.length] = {t:'Z', v:o.toLowerCase()};\n\t\t\t\t\tlst = o.charAt(1);\n\t\t\t\t} else if(o.indexOf(\"$\") > -1) {\n\t\t\t\t\to = (o.match(/\\$([^-\\[\\]]*)/)||[])[1]||\"$\";\n\t\t\t\t\tif(!fmt_is_date(fmt)) out[out.length] = {t:'t',v:o};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t/* Numbers */\n\t\t\tcase '.':\n\t\t\t\tif(dt != null) {\n\t\t\t\t\to = c; while(++i < fmt.length && (c=fmt.charAt(i)) === \"0\") o += c;\n\t\t\t\t\tout[out.length] = {t:'s', v:o}; break;\n\t\t\t\t}\n\t\t\t\t/* falls through */\n\t\t\tcase '0': case '#':\n\t\t\t\to = c; while(++i < fmt.length && \"0#?.,E+-%\".indexOf(c=fmt.charAt(i)) > -1) o += c;\n\t\t\t\tout[out.length] = {t:'n', v:o}; break;\n\t\t\tcase '?':\n\t\t\t\to = c; while(fmt.charAt(++i) === c) o+=c;\n\t\t\t\tout[out.length] = {t:c, v:o}; lst = c; break;\n\t\t\tcase '*': ++i; if(fmt.charAt(i) == ' ' || fmt.charAt(i) == '*') ++i; break; // **\n\t\t\tcase '(': case ')': out[out.length] = {t:(flen===1?'t':c), v:c}; ++i; break;\n\t\t\tcase '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':\n\t\t\t\to = c; while(i < fmt.length && \"0123456789\".indexOf(fmt.charAt(++i)) > -1) o+=fmt.charAt(i);\n\t\t\t\tout[out.length] = {t:'D', v:o}; break;\n\t\t\tcase ' ': out[out.length] = {t:c, v:c}; ++i; break;\n\t\t\tcase '$': out[out.length] = {t:'t', v:'$'}; ++i; break;\n\t\t\tdefault:\n\t\t\t\tif(\",$-+/():!^&'~{}<>=€acfijklopqrtuvwxzP\".indexOf(c) === -1) throw new Error('unrecognized character ' + c + ' in ' + fmt);\n\t\t\t\tout[out.length] = {t:'t', v:c}; ++i; break;\n\t\t}\n\t}\n\n\t/* Scan for date/time parts */\n\tvar bt = 0, ss0 = 0, ssm;\n\tfor(i=out.length-1, lst='t'; i >= 0; --i) {\n\t\tswitch(out[i].t) {\n\t\t\tcase 'h': case 'H': out[i].t = hr; lst='h'; if(bt < 1) bt = 1; break;\n\t\t\tcase 's':\n\t\t\t\tif((ssm=out[i].v.match(/\\.0+$/))) ss0=Math.max(ss0,ssm[0].length-1);\n\t\t\t\tif(bt < 3) bt = 3;\n\t\t\t/* falls through */\n\t\t\tcase 'd': case 'y': case 'M': case 'e': lst=out[i].t; break;\n\t\t\tcase 'm': if(lst === 's') { out[i].t = 'M'; if(bt < 2) bt = 2; } break;\n\t\t\tcase 'X': /*if(out[i].v === \"B2\");*/\n\t\t\t\tbreak;\n\t\t\tcase 'Z':\n\t\t\t\tif(bt < 1 && out[i].v.match(/[Hh]/)) bt = 1;\n\t\t\t\tif(bt < 2 && out[i].v.match(/[Mm]/)) bt = 2;\n\t\t\t\tif(bt < 3 && out[i].v.match(/[Ss]/)) bt = 3;\n\t\t}\n\t}\n\t/* time rounding depends on presence of minute / second / usec fields */\n\tswitch(bt) {\n\t\tcase 0: break;\n\t\tcase 1:\nif(dt.u >= 0.5) { dt.u = 0; ++dt.S; }\n\t\t\tif(dt.S >= 60) { dt.S = 0; ++dt.M; }\n\t\t\tif(dt.M >= 60) { dt.M = 0; ++dt.H; }\n\t\t\tbreak;\n\t\tcase 2:\nif(dt.u >= 0.5) { dt.u = 0; ++dt.S; }\n\t\t\tif(dt.S >= 60) { dt.S = 0; ++dt.M; }\n\t\t\tbreak;\n\t}\n\n\t/* replace fields */\n\tvar nstr = \"\", jj;\n\tfor(i=0; i < out.length; ++i) {\n\t\tswitch(out[i].t) {\n\t\t\tcase 't': case 'T': case ' ': case 'D': break;\n\t\t\tcase 'X': out[i].v = \"\"; out[i].t = \";\"; break;\n\t\t\tcase 'd': case 'm': case 'y': case 'h': case 'H': case 'M': case 's': case 'e': case 'b': case 'Z':\nout[i].v = write_date(out[i].t.charCodeAt(0), out[i].v, dt, ss0);\n\t\t\t\tout[i].t = 't'; break;\n\t\t\tcase 'n': case '?':\n\t\t\t\tjj = i+1;\n\t\t\t\twhile(out[jj] != null && (\n\t\t\t\t\t(c=out[jj].t) === \"?\" || c === \"D\" ||\n\t\t\t\t\t((c === \" \" || c === \"t\") && out[jj+1] != null && (out[jj+1].t === '?' || out[jj+1].t === \"t\" && out[jj+1].v === '/')) ||\n\t\t\t\t\t(out[i].t === '(' && (c === ' ' || c === 'n' || c === ')')) ||\n\t\t\t\t\t(c === 't' && (out[jj].v === '/' || out[jj].v === ' ' && out[jj+1] != null && out[jj+1].t == '?'))\n\t\t\t\t)) {\n\t\t\t\t\tout[i].v += out[jj].v;\n\t\t\t\t\tout[jj] = {v:\"\", t:\";\"}; ++jj;\n\t\t\t\t}\n\t\t\t\tnstr += out[i].v;\n\t\t\t\ti = jj-1; break;\n\t\t\tcase 'G': out[i].t = 't'; out[i].v = general_fmt(v,opts); break;\n\t\t}\n\t}\n\tvar vv = \"\", myv, ostr;\n\tif(nstr.length > 0) {\n\t\tif(nstr.charCodeAt(0) == 40) /* '(' */ {\n\t\t\tmyv = (v<0&&nstr.charCodeAt(0) === 45 ? -v : v);\n\t\t\tostr = write_num('n', nstr, myv);\n\t\t} else {\n\t\t\tmyv = (v<0 && flen > 1 ? -v : v);\n\t\t\tostr = write_num('n', nstr, myv);\n\t\t\tif(myv < 0 && out[0] && out[0].t == 't') {\n\t\t\t\tostr = ostr.substr(1);\n\t\t\t\tout[0].v = \"-\" + out[0].v;\n\t\t\t}\n\t\t}\n\t\tjj=ostr.length-1;\n\t\tvar decpt = out.length;\n\t\tfor(i=0; i < out.length; ++i) if(out[i] != null && out[i].t != 't' && out[i].v.indexOf(\".\") > -1) { decpt = i; break; }\n\t\tvar lasti=out.length;\n\t\tif(decpt === out.length && ostr.indexOf(\"E\") === -1) {\n\t\t\tfor(i=out.length-1; i>= 0;--i) {\n\t\t\t\tif(out[i] == null || 'n?'.indexOf(out[i].t) === -1) continue;\n\t\t\t\tif(jj>=out[i].v.length-1) { jj -= out[i].v.length; out[i].v = ostr.substr(jj+1, out[i].v.length); }\n\t\t\t\telse if(jj < 0) out[i].v = \"\";\n\t\t\t\telse { out[i].v = ostr.substr(0, jj+1); jj = -1; }\n\t\t\t\tout[i].t = 't';\n\t\t\t\tlasti = i;\n\t\t\t}\n\t\t\tif(jj>=0 && lasti= 0; --i) {\n\t\t\t\tif(out[i] == null || 'n?'.indexOf(out[i].t) === -1) continue;\n\t\t\t\tj=out[i].v.indexOf(\".\")>-1&&i===decpt?out[i].v.indexOf(\".\")-1:out[i].v.length-1;\n\t\t\t\tvv = out[i].v.substr(j+1);\n\t\t\t\tfor(; j>=0; --j) {\n\t\t\t\t\tif(jj>=0 && (out[i].v.charAt(j) === \"0\" || out[i].v.charAt(j) === \"#\")) vv = ostr.charAt(jj--) + vv;\n\t\t\t\t}\n\t\t\t\tout[i].v = vv;\n\t\t\t\tout[i].t = 't';\n\t\t\t\tlasti = i;\n\t\t\t}\n\t\t\tif(jj>=0 && lasti-1&&i===decpt?out[i].v.indexOf(\".\")+1:0;\n\t\t\t\tvv = out[i].v.substr(0,j);\n\t\t\t\tfor(; j-1) {\n\t\tmyv = (flen >1 && v < 0 && i>0 && out[i-1].v === \"-\" ? -v:v);\n\t\tout[i].v = write_num(out[i].t, out[i].v, myv);\n\t\tout[i].t = 't';\n\t}\n\tvar retval = \"\";\n\tfor(i=0; i !== out.length; ++i) if(out[i] != null) retval += out[i].v;\n\treturn retval;\n}\nSSF._eval = eval_fmt;\nvar cfregex = /\\[[=<>]/;\nvar cfregex2 = /\\[(=|>[=]?|<[>=]?)(-?\\d+(?:\\.\\d*)?)\\]/;\nfunction chkcond(v, rr) {\n\tif(rr == null) return false;\n\tvar thresh = parseFloat(rr[2]);\n\tswitch(rr[1]) {\n\t\tcase \"=\": if(v == thresh) return true; break;\n\t\tcase \">\": if(v > thresh) return true; break;\n\t\tcase \"<\": if(v < thresh) return true; break;\n\t\tcase \"<>\": if(v != thresh) return true; break;\n\t\tcase \">=\": if(v >= thresh) return true; break;\n\t\tcase \"<=\": if(v <= thresh) return true; break;\n\t}\n\treturn false;\n}\nfunction choose_fmt(f, v) {\n\tvar fmt = split_fmt(f);\n\tvar l = fmt.length, lat = fmt[l-1].indexOf(\"@\");\n\tif(l<4 && lat>-1) --l;\n\tif(fmt.length > 4) throw new Error(\"cannot find right format for |\" + fmt.join(\"|\") + \"|\");\n\tif(typeof v !== \"number\") return [4, fmt.length === 4 || lat>-1?fmt[fmt.length-1]:\"@\"];\n\tswitch(fmt.length) {\n\t\tcase 1: fmt = lat>-1 ? [\"General\", \"General\", \"General\", fmt[0]] : [fmt[0], fmt[0], fmt[0], \"@\"]; break;\n\t\tcase 2: fmt = lat>-1 ? [fmt[0], fmt[0], fmt[0], fmt[1]] : [fmt[0], fmt[1], fmt[0], \"@\"]; break;\n\t\tcase 3: fmt = lat>-1 ? [fmt[0], fmt[1], fmt[0], fmt[2]] : [fmt[0], fmt[1], fmt[2], \"@\"]; break;\n\t\tcase 4: break;\n\t}\n\tvar ff = v > 0 ? fmt[0] : v < 0 ? fmt[1] : fmt[2];\n\tif(fmt[0].indexOf(\"[\") === -1 && fmt[1].indexOf(\"[\") === -1) return [l, ff];\n\tif(fmt[0].match(cfregex) != null || fmt[1].match(cfregex) != null) {\n\t\tvar m1 = fmt[0].match(cfregex2);\n\t\tvar m2 = fmt[1].match(cfregex2);\n\t\treturn chkcond(v, m1) ? [l, fmt[0]] : chkcond(v, m2) ? [l, fmt[1]] : [l, fmt[m1 != null && m2 != null ? 2 : 1]];\n\t}\n\treturn [l, ff];\n}\nfunction format(fmt,v,o) {\n\tif(o == null) o = {};\n\tvar sfmt = \"\";\n\tswitch(typeof fmt) {\n\t\tcase \"string\":\n\t\t\tif(fmt == \"m/d/yy\" && o.dateNF) sfmt = o.dateNF;\n\t\t\telse sfmt = fmt;\n\t\t\tbreak;\n\t\tcase \"number\":\n\t\t\tif(fmt == 14 && o.dateNF) sfmt = o.dateNF;\n\t\t\telse sfmt = (o.table != null ? (o.table) : table_fmt)[fmt];\n\t\t\tif(sfmt == null) sfmt = (o.table && o.table[default_map[fmt]]) || table_fmt[default_map[fmt]];\n\t\t\tif(sfmt == null) sfmt = default_str[fmt] || \"General\";\n\t\t\tbreak;\n\t}\n\tif(isgeneral(sfmt,0)) return general_fmt(v, o);\n\tif(v instanceof Date) v = datenum_local(v, o.date1904);\n\tvar f = choose_fmt(sfmt, v);\n\tif(isgeneral(f[1])) return general_fmt(v, o);\n\tif(v === true) v = \"TRUE\"; else if(v === false) v = \"FALSE\";\n\telse if(v === \"\" || v == null) return \"\";\n\treturn eval_fmt(f[1], v, o, f[0]);\n}\nfunction load_entry(fmt, idx) {\n\tif(typeof idx != 'number') {\n\t\tidx = +idx || -1;\nfor(var i = 0; i < 0x0188; ++i) {\nif(table_fmt[i] == undefined) { if(idx < 0) idx = i; continue; }\n\t\t\tif(table_fmt[i] == fmt) { idx = i; break; }\n\t\t}\nif(idx < 0) idx = 0x187;\n\t}\ntable_fmt[idx] = fmt;\n\treturn idx;\n}\nSSF.load = load_entry;\nSSF._table = table_fmt;\nSSF.get_table = function get_table() { return table_fmt; };\nSSF.load_table = function load_table(tbl) {\n\tfor(var i=0; i!=0x0188; ++i)\n\t\tif(tbl[i] !== undefined) load_entry(tbl[i], i);\n};\nSSF.init_table = init_table;\nSSF.format = format;\n};\nmake_ssf(SSF);\n/* map from xlml named formats to SSF TODO: localize */\nvar XLMLFormatMap/*{[string]:string}*/ = ({\n\t\"General Number\": \"General\",\n\t\"General Date\": SSF._table[22],\n\t\"Long Date\": \"dddd, mmmm dd, yyyy\",\n\t\"Medium Date\": SSF._table[15],\n\t\"Short Date\": SSF._table[14],\n\t\"Long Time\": SSF._table[19],\n\t\"Medium Time\": SSF._table[18],\n\t\"Short Time\": SSF._table[20],\n\t\"Currency\": '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\t\"Fixed\": SSF._table[2],\n\t\"Standard\": SSF._table[4],\n\t\"Percent\": SSF._table[10],\n\t\"Scientific\": SSF._table[11],\n\t\"Yes/No\": '\"Yes\";\"Yes\";\"No\";@',\n\t\"True/False\": '\"True\";\"True\";\"False\";@',\n\t\"On/Off\": '\"Yes\";\"Yes\";\"No\";@'\n});\n\nvar SSFImplicit/*{[number]:string}*/ = ({\n\t\"5\": '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n\t\"6\": '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n\t\"7\": '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n\t\"8\": '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\t\"23\": 'General', \"24\": 'General', \"25\": 'General', \"26\": 'General',\n\t\"27\": 'm/d/yy', \"28\": 'm/d/yy', \"29\": 'm/d/yy', \"30\": 'm/d/yy', \"31\": 'm/d/yy',\n\t\"32\": 'h:mm:ss', \"33\": 'h:mm:ss', \"34\": 'h:mm:ss', \"35\": 'h:mm:ss',\n\t\"36\": 'm/d/yy',\n\t\"41\": '_(* #,##0_);_(* \\(#,##0\\);_(* \"-\"_);_(@_)',\n\t\"42\": '_(\"$\"* #,##0_);_(\"$\"* \\(#,##0\\);_(\"$\"* \"-\"_);_(@_)',\n\t\"43\": '_(* #,##0.00_);_(* \\(#,##0.00\\);_(* \"-\"??_);_(@_)',\n\t\"44\": '_(\"$\"* #,##0.00_);_(\"$\"* \\(#,##0.00\\);_(\"$\"* \"-\"??_);_(@_)',\n\t\"50\": 'm/d/yy', \"51\": 'm/d/yy', \"52\": 'm/d/yy', \"53\": 'm/d/yy', \"54\": 'm/d/yy',\n\t\"55\": 'm/d/yy', \"56\": 'm/d/yy', \"57\": 'm/d/yy', \"58\": 'm/d/yy',\n\t\"59\": '0',\n\t\"60\": '0.00',\n\t\"61\": '#,##0',\n\t\"62\": '#,##0.00',\n\t\"63\": '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n\t\"64\": '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n\t\"65\": '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n\t\"66\": '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\t\"67\": '0%',\n\t\"68\": '0.00%',\n\t\"69\": '# ?/?',\n\t\"70\": '# ??/??',\n\t\"71\": 'm/d/yy',\n\t\"72\": 'm/d/yy',\n\t\"73\": 'd-mmm-yy',\n\t\"74\": 'd-mmm',\n\t\"75\": 'mmm-yy',\n\t\"76\": 'h:mm',\n\t\"77\": 'h:mm:ss',\n\t\"78\": 'm/d/yy h:mm',\n\t\"79\": 'mm:ss',\n\t\"80\": '[h]:mm:ss',\n\t\"81\": 'mmss.0'\n});\n\n/* dateNF parse TODO: move to SSF */\nvar dateNFregex = /[dD]+|[mM]+|[yYeE]+|[Hh]+|[Ss]+/g;\nfunction dateNF_regex(dateNF) {\n\tvar fmt = typeof dateNF == \"number\" ? SSF._table[dateNF] : dateNF;\n\tfmt = fmt.replace(dateNFregex, \"(\\\\d+)\");\n\treturn new RegExp(\"^\" + fmt + \"$\");\n}\nfunction dateNF_fix(str, dateNF, match) {\n\tvar Y = -1, m = -1, d = -1, H = -1, M = -1, S = -1;\n\t(dateNF.match(dateNFregex)||[]).forEach(function(n, i) {\n\t\tvar v = parseInt(match[i+1], 10);\n\t\tswitch(n.toLowerCase().charAt(0)) {\n\t\t\tcase 'y': Y = v; break; case 'd': d = v; break;\n\t\t\tcase 'h': H = v; break; case 's': S = v; break;\n\t\t\tcase 'm': if(H >= 0) M = v; else m = v; break;\n\t\t}\n\t});\n\tif(S >= 0 && M == -1 && m >= 0) { M = m; m = -1; }\n\tvar datestr = ((\"\" + (Y>=0?Y: new Date().getFullYear())).slice(-4) + \"-\" + (\"00\" + (m>=1?m:1)).slice(-2) + \"-\" + (\"00\" + (d>=1?d:1)).slice(-2));\n\tif(datestr.length == 7) datestr = \"0\" + datestr;\n\tif(datestr.length == 8) datestr = \"20\" + datestr;\n\tvar timestr = ((\"00\" + (H>=0?H:0)).slice(-2) + \":\" + (\"00\" + (M>=0?M:0)).slice(-2) + \":\" + (\"00\" + (S>=0?S:0)).slice(-2));\n\tif(H == -1 && M == -1 && S == -1) return datestr;\n\tif(Y == -1 && m == -1 && d == -1) return timestr;\n\treturn datestr + \"T\" + timestr;\n}\n\nvar DO_NOT_EXPORT_CFB = true;\n/* cfb.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*jshint eqnull:true */\n/*exported CFB */\n/*global Uint8Array:false, Uint16Array:false */\n\n/* crc32.js (C) 2014-present SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*exported CRC32 */\nvar CRC32;\n(function (factory) {\n\t/*jshint ignore:start */\n\t/*eslint-disable */\n\tfactory(CRC32 = {});\n\t/*eslint-enable */\n\t/*jshint ignore:end */\n}(function(CRC32) {\nCRC32.version = '1.2.0';\n/* see perf/crc32table.js */\n/*global Int32Array */\nfunction signed_crc_table() {\n\tvar c = 0, table = new Array(256);\n\n\tfor(var n =0; n != 256; ++n){\n\t\tc = n;\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\ttable[n] = c;\n\t}\n\n\treturn typeof Int32Array !== 'undefined' ? new Int32Array(table) : table;\n}\n\nvar T = signed_crc_table();\nfunction crc32_bstr(bstr, seed) {\n\tvar C = seed ^ -1, L = bstr.length - 1;\n\tfor(var i = 0; i < L;) {\n\t\tC = (C>>>8) ^ T[(C^bstr.charCodeAt(i++))&0xFF];\n\t\tC = (C>>>8) ^ T[(C^bstr.charCodeAt(i++))&0xFF];\n\t}\n\tif(i === L) C = (C>>>8) ^ T[(C ^ bstr.charCodeAt(i))&0xFF];\n\treturn C ^ -1;\n}\n\nfunction crc32_buf(buf, seed) {\n\tif(buf.length > 10000) return crc32_buf_8(buf, seed);\n\tvar C = seed ^ -1, L = buf.length - 3;\n\tfor(var i = 0; i < L;) {\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t}\n\twhile(i < L+3) C = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\treturn C ^ -1;\n}\n\nfunction crc32_buf_8(buf, seed) {\n\tvar C = seed ^ -1, L = buf.length - 7;\n\tfor(var i = 0; i < L;) {\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t}\n\twhile(i < L+7) C = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\treturn C ^ -1;\n}\n\nfunction crc32_str(str, seed) {\n\tvar C = seed ^ -1;\n\tfor(var i = 0, L=str.length, c, d; i < L;) {\n\t\tc = str.charCodeAt(i++);\n\t\tif(c < 0x80) {\n\t\t\tC = (C>>>8) ^ T[(C ^ c)&0xFF];\n\t\t} else if(c < 0x800) {\n\t\t\tC = (C>>>8) ^ T[(C ^ (192|((c>>6)&31)))&0xFF];\n\t\t\tC = (C>>>8) ^ T[(C ^ (128|(c&63)))&0xFF];\n\t\t} else if(c >= 0xD800 && c < 0xE000) {\n\t\t\tc = (c&1023)+64; d = str.charCodeAt(i++)&1023;\n\t\t\tC = (C>>>8) ^ T[(C ^ (240|((c>>8)&7)))&0xFF];\n\t\t\tC = (C>>>8) ^ T[(C ^ (128|((c>>2)&63)))&0xFF];\n\t\t\tC = (C>>>8) ^ T[(C ^ (128|((d>>6)&15)|((c&3)<<4)))&0xFF];\n\t\t\tC = (C>>>8) ^ T[(C ^ (128|(d&63)))&0xFF];\n\t\t} else {\n\t\t\tC = (C>>>8) ^ T[(C ^ (224|((c>>12)&15)))&0xFF];\n\t\t\tC = (C>>>8) ^ T[(C ^ (128|((c>>6)&63)))&0xFF];\n\t\t\tC = (C>>>8) ^ T[(C ^ (128|(c&63)))&0xFF];\n\t\t}\n\t}\n\treturn C ^ -1;\n}\nCRC32.table = T;\nCRC32.bstr = crc32_bstr;\nCRC32.buf = crc32_buf;\nCRC32.str = crc32_str;\n}));\n/* [MS-CFB] v20171201 */\nvar CFB = (function _CFB(){\nvar exports = {};\nexports.version = '1.1.4';\n/* [MS-CFB] 2.6.4 */\nfunction namecmp(l, r) {\n\tvar L = l.split(\"/\"), R = r.split(\"/\");\n\tfor(var i = 0, c = 0, Z = Math.min(L.length, R.length); i < Z; ++i) {\n\t\tif((c = L[i].length - R[i].length)) return c;\n\t\tif(L[i] != R[i]) return L[i] < R[i] ? -1 : 1;\n\t}\n\treturn L.length - R.length;\n}\nfunction dirname(p) {\n\tif(p.charAt(p.length - 1) == \"/\") return (p.slice(0,-1).indexOf(\"/\") === -1) ? p : dirname(p.slice(0, -1));\n\tvar c = p.lastIndexOf(\"/\");\n\treturn (c === -1) ? p : p.slice(0, c+1);\n}\n\nfunction filename(p) {\n\tif(p.charAt(p.length - 1) == \"/\") return filename(p.slice(0, -1));\n\tvar c = p.lastIndexOf(\"/\");\n\treturn (c === -1) ? p : p.slice(c+1);\n}\n/* -------------------------------------------------------------------------- */\n/* DOS Date format:\n high|YYYYYYYm.mmmddddd.HHHHHMMM.MMMSSSSS|low\n add 1980 to stored year\n stored second should be doubled\n*/\n\n/* write JS date to buf as a DOS date */\nfunction write_dos_date(buf, date) {\n\tif(typeof date === \"string\") date = new Date(date);\n\tvar hms = date.getHours();\n\thms = hms << 6 | date.getMinutes();\n\thms = hms << 5 | (date.getSeconds()>>>1);\n\tbuf.write_shift(2, hms);\n\tvar ymd = (date.getFullYear() - 1980);\n\tymd = ymd << 4 | (date.getMonth()+1);\n\tymd = ymd << 5 | date.getDate();\n\tbuf.write_shift(2, ymd);\n}\n\n/* read four bytes from buf and interpret as a DOS date */\nfunction parse_dos_date(buf) {\n\tvar hms = buf.read_shift(2) & 0xFFFF;\n\tvar ymd = buf.read_shift(2) & 0xFFFF;\n\tvar val = new Date();\n\tvar d = ymd & 0x1F; ymd >>>= 5;\n\tvar m = ymd & 0x0F; ymd >>>= 4;\n\tval.setMilliseconds(0);\n\tval.setFullYear(ymd + 1980);\n\tval.setMonth(m-1);\n\tval.setDate(d);\n\tvar S = hms & 0x1F; hms >>>= 5;\n\tvar M = hms & 0x3F; hms >>>= 6;\n\tval.setHours(hms);\n\tval.setMinutes(M);\n\tval.setSeconds(S<<1);\n\treturn val;\n}\nfunction parse_extra_field(blob) {\n\tprep_blob(blob, 0);\n\tvar o = {};\n\tvar flags = 0;\n\twhile(blob.l <= blob.length - 4) {\n\t\tvar type = blob.read_shift(2);\n\t\tvar sz = blob.read_shift(2), tgt = blob.l + sz;\n\t\tvar p = {};\n\t\tswitch(type) {\n\t\t\t/* UNIX-style Timestamps */\n\t\t\tcase 0x5455: {\n\t\t\t\tflags = blob.read_shift(1);\n\t\t\t\tif(flags & 1) p.mtime = blob.read_shift(4);\n\t\t\t\t/* for some reason, CD flag corresponds to LFH */\n\t\t\t\tif(sz > 5) {\n\t\t\t\t\tif(flags & 2) p.atime = blob.read_shift(4);\n\t\t\t\t\tif(flags & 4) p.ctime = blob.read_shift(4);\n\t\t\t\t}\n\t\t\t\tif(p.mtime) p.mt = new Date(p.mtime*1000);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tblob.l = tgt;\n\t\to[type] = p;\n\t}\n\treturn o;\n}\nvar fs;\nfunction get_fs() { return fs || (fs = require('fs')); }\nfunction parse(file, options) {\nif(file[0] == 0x50 && file[1] == 0x4b) return parse_zip(file, options);\nif(file.length < 512) throw new Error(\"CFB file size \" + file.length + \" < 512\");\nvar mver = 3;\nvar ssz = 512;\nvar nmfs = 0; // number of mini FAT sectors\nvar difat_sec_cnt = 0;\nvar dir_start = 0;\nvar minifat_start = 0;\nvar difat_start = 0;\n\nvar fat_addrs = []; // locations of FAT sectors\n\n/* [MS-CFB] 2.2 Compound File Header */\nvar blob = file.slice(0,512);\nprep_blob(blob, 0);\n\n/* major version */\nvar mv = check_get_mver(blob);\nmver = mv[0];\nswitch(mver) {\n\tcase 3: ssz = 512; break; case 4: ssz = 4096; break;\n\tcase 0: if(mv[1] == 0) return parse_zip(file, options);\n\t/* falls through */\n\tdefault: throw new Error(\"Major Version: Expected 3 or 4 saw \" + mver);\n}\n\n/* reprocess header */\nif(ssz !== 512) { blob = file.slice(0,ssz); prep_blob(blob, 28 /* blob.l */); }\n/* Save header for final object */\nvar header = file.slice(0,ssz);\n\ncheck_shifts(blob, mver);\n\n// Number of Directory Sectors\nvar dir_cnt = blob.read_shift(4, 'i');\nif(mver === 3 && dir_cnt !== 0) throw new Error('# Directory Sectors: Expected 0 saw ' + dir_cnt);\n\n// Number of FAT Sectors\nblob.l += 4;\n\n// First Directory Sector Location\ndir_start = blob.read_shift(4, 'i');\n\n// Transaction Signature\nblob.l += 4;\n\n// Mini Stream Cutoff Size\nblob.chk('00100000', 'Mini Stream Cutoff Size: ');\n\n// First Mini FAT Sector Location\nminifat_start = blob.read_shift(4, 'i');\n\n// Number of Mini FAT Sectors\nnmfs = blob.read_shift(4, 'i');\n\n// First DIFAT sector location\ndifat_start = blob.read_shift(4, 'i');\n\n// Number of DIFAT Sectors\ndifat_sec_cnt = blob.read_shift(4, 'i');\n\n// Grab FAT Sector Locations\nfor(var q = -1, j = 0; j < 109; ++j) { /* 109 = (512 - blob.l)>>>2; */\n\tq = blob.read_shift(4, 'i');\n\tif(q<0) break;\n\tfat_addrs[j] = q;\n}\n\n/** Break the file up into sectors */\nvar sectors = sectorify(file, ssz);\n\nsleuth_fat(difat_start, difat_sec_cnt, sectors, ssz, fat_addrs);\n\n/** Chains */\nvar sector_list = make_sector_list(sectors, dir_start, fat_addrs, ssz);\n\nsector_list[dir_start].name = \"!Directory\";\nif(nmfs > 0 && minifat_start !== ENDOFCHAIN) sector_list[minifat_start].name = \"!MiniFAT\";\nsector_list[fat_addrs[0]].name = \"!FAT\";\nsector_list.fat_addrs = fat_addrs;\nsector_list.ssz = ssz;\n\n/* [MS-CFB] 2.6.1 Compound File Directory Entry */\nvar files = {}, Paths = [], FileIndex = [], FullPaths = [];\nread_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex, minifat_start);\n\nbuild_full_paths(FileIndex, FullPaths, Paths);\nPaths.shift();\n\nvar o = {\n\tFileIndex: FileIndex,\n\tFullPaths: FullPaths\n};\n\n// $FlowIgnore\nif(options && options.raw) o.raw = {header: header, sectors: sectors};\nreturn o;\n} // parse\n\n/* [MS-CFB] 2.2 Compound File Header -- read up to major version */\nfunction check_get_mver(blob) {\n\tif(blob[blob.l] == 0x50 && blob[blob.l + 1] == 0x4b) return [0, 0];\n\t// header signature 8\n\tblob.chk(HEADER_SIGNATURE, 'Header Signature: ');\n\n\t// clsid 16\n\t//blob.chk(HEADER_CLSID, 'CLSID: ');\n\tblob.l += 16;\n\n\t// minor version 2\n\tvar mver = blob.read_shift(2, 'u');\n\n\treturn [blob.read_shift(2,'u'), mver];\n}\nfunction check_shifts(blob, mver) {\n\tvar shift = 0x09;\n\n\t// Byte Order\n\t//blob.chk('feff', 'Byte Order: '); // note: some writers put 0xffff\n\tblob.l += 2;\n\n\t// Sector Shift\n\tswitch((shift = blob.read_shift(2))) {\n\t\tcase 0x09: if(mver != 3) throw new Error('Sector Shift: Expected 9 saw ' + shift); break;\n\t\tcase 0x0c: if(mver != 4) throw new Error('Sector Shift: Expected 12 saw ' + shift); break;\n\t\tdefault: throw new Error('Sector Shift: Expected 9 or 12 saw ' + shift);\n\t}\n\n\t// Mini Sector Shift\n\tblob.chk('0600', 'Mini Sector Shift: ');\n\n\t// Reserved\n\tblob.chk('000000000000', 'Reserved: ');\n}\n\n/** Break the file up into sectors */\nfunction sectorify(file, ssz) {\n\tvar nsectors = Math.ceil(file.length/ssz)-1;\n\tvar sectors = [];\n\tfor(var i=1; i < nsectors; ++i) sectors[i-1] = file.slice(i*ssz,(i+1)*ssz);\n\tsectors[nsectors-1] = file.slice(nsectors*ssz);\n\treturn sectors;\n}\n\n/* [MS-CFB] 2.6.4 Red-Black Tree */\nfunction build_full_paths(FI, FP, Paths) {\n\tvar i = 0, L = 0, R = 0, C = 0, j = 0, pl = Paths.length;\n\tvar dad = [], q = [];\n\n\tfor(; i < pl; ++i) { dad[i]=q[i]=i; FP[i]=Paths[i]; }\n\n\tfor(; j < q.length; ++j) {\n\t\ti = q[j];\n\t\tL = FI[i].L; R = FI[i].R; C = FI[i].C;\n\t\tif(dad[i] === i) {\n\t\t\tif(L !== -1 /*NOSTREAM*/ && dad[L] !== L) dad[i] = dad[L];\n\t\t\tif(R !== -1 && dad[R] !== R) dad[i] = dad[R];\n\t\t}\n\t\tif(C !== -1 /*NOSTREAM*/) dad[C] = i;\n\t\tif(L !== -1 && i != dad[i]) { dad[L] = dad[i]; if(q.lastIndexOf(L) < j) q.push(L); }\n\t\tif(R !== -1 && i != dad[i]) { dad[R] = dad[i]; if(q.lastIndexOf(R) < j) q.push(R); }\n\t}\n\tfor(i=1; i < pl; ++i) if(dad[i] === i) {\n\t\tif(R !== -1 /*NOSTREAM*/ && dad[R] !== R) dad[i] = dad[R];\n\t\telse if(L !== -1 && dad[L] !== L) dad[i] = dad[L];\n\t}\n\n\tfor(i=1; i < pl; ++i) {\n\t\tif(FI[i].type === 0 /* unknown */) continue;\n\t\tj = i;\n\t\tif(j != dad[j]) do {\n\t\t\tj = dad[j];\n\t\t\tFP[i] = FP[j] + \"/\" + FP[i];\n\t\t} while (j !== 0 && -1 !== dad[j] && j != dad[j]);\n\t\tdad[i] = -1;\n\t}\n\n\tFP[0] += \"/\";\n\tfor(i=1; i < pl; ++i) {\n\t\tif(FI[i].type !== 2 /* stream */) FP[i] += \"/\";\n\t}\n}\n\nfunction get_mfat_entry(entry, payload, mini) {\n\tvar start = entry.start, size = entry.size;\n\t//return (payload.slice(start*MSSZ, start*MSSZ + size));\n\tvar o = [];\n\tvar idx = start;\n\twhile(mini && size > 0 && idx >= 0) {\n\t\to.push(payload.slice(idx * MSSZ, idx * MSSZ + MSSZ));\n\t\tsize -= MSSZ;\n\t\tidx = __readInt32LE(mini, idx * 4);\n\t}\n\tif(o.length === 0) return (new_buf(0));\n\treturn (bconcat(o).slice(0, entry.size));\n}\n\n/** Chase down the rest of the DIFAT chain to build a comprehensive list\n DIFAT chains by storing the next sector number as the last 32 bits */\nfunction sleuth_fat(idx, cnt, sectors, ssz, fat_addrs) {\n\tvar q = ENDOFCHAIN;\n\tif(idx === ENDOFCHAIN) {\n\t\tif(cnt !== 0) throw new Error(\"DIFAT chain shorter than expected\");\n\t} else if(idx !== -1 /*FREESECT*/) {\n\t\tvar sector = sectors[idx], m = (ssz>>>2)-1;\n\t\tif(!sector) return;\n\t\tfor(var i = 0; i < m; ++i) {\n\t\t\tif((q = __readInt32LE(sector,i*4)) === ENDOFCHAIN) break;\n\t\t\tfat_addrs.push(q);\n\t\t}\n\t\tsleuth_fat(__readInt32LE(sector,ssz-4),cnt - 1, sectors, ssz, fat_addrs);\n\t}\n}\n\n/** Follow the linked list of sectors for a given starting point */\nfunction get_sector_list(sectors, start, fat_addrs, ssz, chkd) {\n\tvar buf = [], buf_chain = [];\n\tif(!chkd) chkd = [];\n\tvar modulus = ssz - 1, j = 0, jj = 0;\n\tfor(j=start; j>=0;) {\n\t\tchkd[j] = true;\n\t\tbuf[buf.length] = j;\n\t\tbuf_chain.push(sectors[j]);\n\t\tvar addr = fat_addrs[Math.floor(j*4/ssz)];\n\t\tjj = ((j*4) & modulus);\n\t\tif(ssz < 4 + jj) throw new Error(\"FAT boundary crossed: \" + j + \" 4 \"+ssz);\n\t\tif(!sectors[addr]) break;\n\t\tj = __readInt32LE(sectors[addr], jj);\n\t}\n\treturn {nodes: buf, data:__toBuffer([buf_chain])};\n}\n\n/** Chase down the sector linked lists */\nfunction make_sector_list(sectors, dir_start, fat_addrs, ssz) {\n\tvar sl = sectors.length, sector_list = ([]);\n\tvar chkd = [], buf = [], buf_chain = [];\n\tvar modulus = ssz - 1, i=0, j=0, k=0, jj=0;\n\tfor(i=0; i < sl; ++i) {\n\t\tbuf = ([]);\n\t\tk = (i + dir_start); if(k >= sl) k-=sl;\n\t\tif(chkd[k]) continue;\n\t\tbuf_chain = [];\n\t\tvar seen = [];\n\t\tfor(j=k; j>=0;) {\n\t\t\tseen[j] = true;\n\t\t\tchkd[j] = true;\n\t\t\tbuf[buf.length] = j;\n\t\t\tbuf_chain.push(sectors[j]);\n\t\t\tvar addr = fat_addrs[Math.floor(j*4/ssz)];\n\t\t\tjj = ((j*4) & modulus);\n\t\t\tif(ssz < 4 + jj) throw new Error(\"FAT boundary crossed: \" + j + \" 4 \"+ssz);\n\t\t\tif(!sectors[addr]) break;\n\t\t\tj = __readInt32LE(sectors[addr], jj);\n\t\t\tif(seen[j]) break;\n\t\t}\n\t\tsector_list[k] = ({nodes: buf, data:__toBuffer([buf_chain])});\n\t}\n\treturn sector_list;\n}\n\n/* [MS-CFB] 2.6.1 Compound File Directory Entry */\nfunction read_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex, mini) {\n\tvar minifat_store = 0, pl = (Paths.length?2:0);\n\tvar sector = sector_list[dir_start].data;\n\tvar i = 0, namelen = 0, name;\n\tfor(; i < sector.length; i+= 128) {\n\t\tvar blob = sector.slice(i, i+128);\n\t\tprep_blob(blob, 64);\n\t\tnamelen = blob.read_shift(2);\n\t\tname = __utf16le(blob,0,namelen-pl);\n\t\tPaths.push(name);\n\t\tvar o = ({\n\t\t\tname: name,\n\t\t\ttype: blob.read_shift(1),\n\t\t\tcolor: blob.read_shift(1),\n\t\t\tL: blob.read_shift(4, 'i'),\n\t\t\tR: blob.read_shift(4, 'i'),\n\t\t\tC: blob.read_shift(4, 'i'),\n\t\t\tclsid: blob.read_shift(16),\n\t\t\tstate: blob.read_shift(4, 'i'),\n\t\t\tstart: 0,\n\t\t\tsize: 0\n\t\t});\n\t\tvar ctime = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);\n\t\tif(ctime !== 0) o.ct = read_date(blob, blob.l-8);\n\t\tvar mtime = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);\n\t\tif(mtime !== 0) o.mt = read_date(blob, blob.l-8);\n\t\to.start = blob.read_shift(4, 'i');\n\t\to.size = blob.read_shift(4, 'i');\n\t\tif(o.size < 0 && o.start < 0) { o.size = o.type = 0; o.start = ENDOFCHAIN; o.name = \"\"; }\n\t\tif(o.type === 5) { /* root */\n\t\t\tminifat_store = o.start;\n\t\t\tif(nmfs > 0 && minifat_store !== ENDOFCHAIN) sector_list[minifat_store].name = \"!StreamData\";\n\t\t\t/*minifat_size = o.size;*/\n\t\t} else if(o.size >= 4096 /* MSCSZ */) {\n\t\t\to.storage = 'fat';\n\t\t\tif(sector_list[o.start] === undefined) sector_list[o.start] = get_sector_list(sectors, o.start, sector_list.fat_addrs, sector_list.ssz);\n\t\t\tsector_list[o.start].name = o.name;\n\t\t\to.content = (sector_list[o.start].data.slice(0,o.size));\n\t\t} else {\n\t\t\to.storage = 'minifat';\n\t\t\tif(o.size < 0) o.size = 0;\n\t\t\telse if(minifat_store !== ENDOFCHAIN && o.start !== ENDOFCHAIN && sector_list[minifat_store]) {\n\t\t\t\to.content = get_mfat_entry(o, sector_list[minifat_store].data, (sector_list[mini]||{}).data);\n\t\t\t}\n\t\t}\n\t\tif(o.content) prep_blob(o.content, 0);\n\t\tfiles[name] = o;\n\t\tFileIndex.push(o);\n\t}\n}\n\nfunction read_date(blob, offset) {\n\treturn new Date(( ( (__readUInt32LE(blob,offset+4)/1e7)*Math.pow(2,32)+__readUInt32LE(blob,offset)/1e7 ) - 11644473600)*1000);\n}\n\nfunction read_file(filename, options) {\n\tget_fs();\n\treturn parse(fs.readFileSync(filename), options);\n}\n\nfunction read(blob, options) {\n\tswitch(options && options.type || \"base64\") {\n\t\tcase \"file\": return read_file(blob, options);\n\t\tcase \"base64\": return parse(s2a(Base64.decode(blob)), options);\n\t\tcase \"binary\": return parse(s2a(blob), options);\n\t}\n\treturn parse(blob, options);\n}\n\nfunction init_cfb(cfb, opts) {\n\tvar o = opts || {}, root = o.root || \"Root Entry\";\n\tif(!cfb.FullPaths) cfb.FullPaths = [];\n\tif(!cfb.FileIndex) cfb.FileIndex = [];\n\tif(cfb.FullPaths.length !== cfb.FileIndex.length) throw new Error(\"inconsistent CFB structure\");\n\tif(cfb.FullPaths.length === 0) {\n\t\tcfb.FullPaths[0] = root + \"/\";\n\t\tcfb.FileIndex[0] = ({ name: root, type: 5 });\n\t}\n\tif(o.CLSID) cfb.FileIndex[0].clsid = o.CLSID;\n\tseed_cfb(cfb);\n}\nfunction seed_cfb(cfb) {\n\tvar nm = \"\\u0001Sh33tJ5\";\n\tif(CFB.find(cfb, \"/\" + nm)) return;\n\tvar p = new_buf(4); p[0] = 55; p[1] = p[3] = 50; p[2] = 54;\n\tcfb.FileIndex.push(({ name: nm, type: 2, content:p, size:4, L:69, R:69, C:69 }));\n\tcfb.FullPaths.push(cfb.FullPaths[0] + nm);\n\trebuild_cfb(cfb);\n}\nfunction rebuild_cfb(cfb, f) {\n\tinit_cfb(cfb);\n\tvar gc = false, s = false;\n\tfor(var i = cfb.FullPaths.length - 1; i >= 0; --i) {\n\t\tvar _file = cfb.FileIndex[i];\n\t\tswitch(_file.type) {\n\t\t\tcase 0:\n\t\t\t\tif(s) gc = true;\n\t\t\t\telse { cfb.FileIndex.pop(); cfb.FullPaths.pop(); }\n\t\t\t\tbreak;\n\t\t\tcase 1: case 2: case 5:\n\t\t\t\ts = true;\n\t\t\t\tif(isNaN(_file.R * _file.L * _file.C)) gc = true;\n\t\t\t\tif(_file.R > -1 && _file.L > -1 && _file.R == _file.L) gc = true;\n\t\t\t\tbreak;\n\t\t\tdefault: gc = true; break;\n\t\t}\n\t}\n\tif(!gc && !f) return;\n\n\tvar now = new Date(1987, 1, 19), j = 0;\n\tvar data = [];\n\tfor(i = 0; i < cfb.FullPaths.length; ++i) {\n\t\tif(cfb.FileIndex[i].type === 0) continue;\n\t\tdata.push([cfb.FullPaths[i], cfb.FileIndex[i]]);\n\t}\n\tfor(i = 0; i < data.length; ++i) {\n\t\tvar dad = dirname(data[i][0]);\n\t\ts = false;\n\t\tfor(j = 0; j < data.length; ++j) if(data[j][0] === dad) s = true;\n\t\tif(!s) data.push([dad, ({\n\t\t\tname: filename(dad).replace(\"/\",\"\"),\n\t\t\ttype: 1,\n\t\t\tclsid: HEADER_CLSID,\n\t\t\tct: now, mt: now,\n\t\t\tcontent: null\n\t\t})]);\n\t}\n\n\tdata.sort(function(x,y) { return namecmp(x[0], y[0]); });\n\tcfb.FullPaths = []; cfb.FileIndex = [];\n\tfor(i = 0; i < data.length; ++i) { cfb.FullPaths[i] = data[i][0]; cfb.FileIndex[i] = data[i][1]; }\n\tfor(i = 0; i < data.length; ++i) {\n\t\tvar elt = cfb.FileIndex[i];\n\t\tvar nm = cfb.FullPaths[i];\n\n\t\telt.name = filename(nm).replace(\"/\",\"\");\n\t\telt.L = elt.R = elt.C = -(elt.color = 1);\n\t\telt.size = elt.content ? elt.content.length : 0;\n\t\telt.start = 0;\n\t\telt.clsid = (elt.clsid || HEADER_CLSID);\n\t\tif(i === 0) {\n\t\t\telt.C = data.length > 1 ? 1 : -1;\n\t\t\telt.size = 0;\n\t\t\telt.type = 5;\n\t\t} else if(nm.slice(-1) == \"/\") {\n\t\t\tfor(j=i+1;j < data.length; ++j) if(dirname(cfb.FullPaths[j])==nm) break;\n\t\t\telt.C = j >= data.length ? -1 : j;\n\t\t\tfor(j=i+1;j < data.length; ++j) if(dirname(cfb.FullPaths[j])==dirname(nm)) break;\n\t\t\telt.R = j >= data.length ? -1 : j;\n\t\t\telt.type = 1;\n\t\t} else {\n\t\t\tif(dirname(cfb.FullPaths[i+1]||\"\") == dirname(nm)) elt.R = i + 1;\n\t\t\telt.type = 2;\n\t\t}\n\t}\n\n}\n\nfunction _write(cfb, options) {\n\tvar _opts = options || {};\n\trebuild_cfb(cfb);\n\tif(_opts.fileType == 'zip') return write_zip(cfb, _opts);\n\tvar L = (function(cfb){\n\t\tvar mini_size = 0, fat_size = 0;\n\t\tfor(var i = 0; i < cfb.FileIndex.length; ++i) {\n\t\t\tvar file = cfb.FileIndex[i];\n\t\t\tif(!file.content) continue;\nvar flen = file.content.length;\n\t\t\tif(flen > 0){\n\t\t\t\tif(flen < 0x1000) mini_size += (flen + 0x3F) >> 6;\n\t\t\t\telse fat_size += (flen + 0x01FF) >> 9;\n\t\t\t}\n\t\t}\n\t\tvar dir_cnt = (cfb.FullPaths.length +3) >> 2;\n\t\tvar mini_cnt = (mini_size + 7) >> 3;\n\t\tvar mfat_cnt = (mini_size + 0x7F) >> 7;\n\t\tvar fat_base = mini_cnt + fat_size + dir_cnt + mfat_cnt;\n\t\tvar fat_cnt = (fat_base + 0x7F) >> 7;\n\t\tvar difat_cnt = fat_cnt <= 109 ? 0 : Math.ceil((fat_cnt-109)/0x7F);\n\t\twhile(((fat_base + fat_cnt + difat_cnt + 0x7F) >> 7) > fat_cnt) difat_cnt = ++fat_cnt <= 109 ? 0 : Math.ceil((fat_cnt-109)/0x7F);\n\t\tvar L = [1, difat_cnt, fat_cnt, mfat_cnt, dir_cnt, fat_size, mini_size, 0];\n\t\tcfb.FileIndex[0].size = mini_size << 6;\n\t\tL[7] = (cfb.FileIndex[0].start=L[0]+L[1]+L[2]+L[3]+L[4]+L[5])+((L[6]+7) >> 3);\n\t\treturn L;\n\t})(cfb);\n\tvar o = new_buf(L[7] << 9);\n\tvar i = 0, T = 0;\n\t{\n\t\tfor(i = 0; i < 8; ++i) o.write_shift(1, HEADER_SIG[i]);\n\t\tfor(i = 0; i < 8; ++i) o.write_shift(2, 0);\n\t\to.write_shift(2, 0x003E);\n\t\to.write_shift(2, 0x0003);\n\t\to.write_shift(2, 0xFFFE);\n\t\to.write_shift(2, 0x0009);\n\t\to.write_shift(2, 0x0006);\n\t\tfor(i = 0; i < 3; ++i) o.write_shift(2, 0);\n\t\to.write_shift(4, 0);\n\t\to.write_shift(4, L[2]);\n\t\to.write_shift(4, L[0] + L[1] + L[2] + L[3] - 1);\n\t\to.write_shift(4, 0);\n\t\to.write_shift(4, 1<<12);\n\t\to.write_shift(4, L[3] ? L[0] + L[1] + L[2] - 1: ENDOFCHAIN);\n\t\to.write_shift(4, L[3]);\n\t\to.write_shift(-4, L[1] ? L[0] - 1: ENDOFCHAIN);\n\t\to.write_shift(4, L[1]);\n\t\tfor(i = 0; i < 109; ++i) o.write_shift(-4, i < L[2] ? L[1] + i : -1);\n\t}\n\tif(L[1]) {\n\t\tfor(T = 0; T < L[1]; ++T) {\n\t\t\tfor(; i < 236 + T * 127; ++i) o.write_shift(-4, i < L[2] ? L[1] + i : -1);\n\t\t\to.write_shift(-4, T === L[1] - 1 ? ENDOFCHAIN : T + 1);\n\t\t}\n\t}\n\tvar chainit = function(w) {\n\t\tfor(T += w; i> 9);\n\t}\n\tchainit((L[6] + 7) >> 3);\n\twhile(o.l & 0x1FF) o.write_shift(-4, consts.ENDOFCHAIN);\n\tT = i = 0;\n\tfor(j = 0; j < cfb.FileIndex.length; ++j) {\n\t\tfile = cfb.FileIndex[j];\n\t\tif(!file.content) continue;\nflen = file.content.length;\n\t\tif(!flen || flen >= 0x1000) continue;\n\t\tfile.start = T;\n\t\tchainit((flen + 0x3F) >> 6);\n\t}\n\twhile(o.l & 0x1FF) o.write_shift(-4, consts.ENDOFCHAIN);\n\tfor(i = 0; i < L[4]<<2; ++i) {\n\t\tvar nm = cfb.FullPaths[i];\n\t\tif(!nm || nm.length === 0) {\n\t\t\tfor(j = 0; j < 17; ++j) o.write_shift(4, 0);\n\t\t\tfor(j = 0; j < 3; ++j) o.write_shift(4, -1);\n\t\t\tfor(j = 0; j < 12; ++j) o.write_shift(4, 0);\n\t\t\tcontinue;\n\t\t}\n\t\tfile = cfb.FileIndex[i];\n\t\tif(i === 0) file.start = file.size ? file.start - 1 : ENDOFCHAIN;\n\t\tvar _nm = (i === 0 && _opts.root) || file.name;\n\t\tflen = 2*(_nm.length+1);\n\t\to.write_shift(64, _nm, \"utf16le\");\n\t\to.write_shift(2, flen);\n\t\to.write_shift(1, file.type);\n\t\to.write_shift(1, file.color);\n\t\to.write_shift(-4, file.L);\n\t\to.write_shift(-4, file.R);\n\t\to.write_shift(-4, file.C);\n\t\tif(!file.clsid) for(j = 0; j < 4; ++j) o.write_shift(4, 0);\n\t\telse o.write_shift(16, file.clsid, \"hex\");\n\t\to.write_shift(4, file.state || 0);\n\t\to.write_shift(4, 0); o.write_shift(4, 0);\n\t\to.write_shift(4, 0); o.write_shift(4, 0);\n\t\to.write_shift(4, file.start);\n\t\to.write_shift(4, file.size); o.write_shift(4, 0);\n\t}\n\tfor(i = 1; i < cfb.FileIndex.length; ++i) {\n\t\tfile = cfb.FileIndex[i];\nif(file.size >= 0x1000) {\n\t\t\to.l = (file.start+1) << 9;\n\t\t\tfor(j = 0; j < file.size; ++j) o.write_shift(1, file.content[j]);\n\t\t\tfor(; j & 0x1FF; ++j) o.write_shift(1, 0);\n\t\t}\n\t}\n\tfor(i = 1; i < cfb.FileIndex.length; ++i) {\n\t\tfile = cfb.FileIndex[i];\nif(file.size > 0 && file.size < 0x1000) {\n\t\t\tfor(j = 0; j < file.size; ++j) o.write_shift(1, file.content[j]);\n\t\t\tfor(; j & 0x3F; ++j) o.write_shift(1, 0);\n\t\t}\n\t}\n\twhile(o.l < o.length) o.write_shift(1, 0);\n\treturn o;\n}\n/* [MS-CFB] 2.6.4 (Unicode 3.0.1 case conversion) */\nfunction find(cfb, path) {\n\tvar UCFullPaths = cfb.FullPaths.map(function(x) { return x.toUpperCase(); });\n\tvar UCPaths = UCFullPaths.map(function(x) { var y = x.split(\"/\"); return y[y.length - (x.slice(-1) == \"/\" ? 2 : 1)]; });\n\tvar k = false;\n\tif(path.charCodeAt(0) === 47 /* \"/\" */) { k = true; path = UCFullPaths[0].slice(0, -1) + path; }\n\telse k = path.indexOf(\"/\") !== -1;\n\tvar UCPath = path.toUpperCase();\n\tvar w = k === true ? UCFullPaths.indexOf(UCPath) : UCPaths.indexOf(UCPath);\n\tif(w !== -1) return cfb.FileIndex[w];\n\n\tvar m = !UCPath.match(chr1);\n\tUCPath = UCPath.replace(chr0,'');\n\tif(m) UCPath = UCPath.replace(chr1,'!');\n\tfor(w = 0; w < UCFullPaths.length; ++w) {\n\t\tif((m ? UCFullPaths[w].replace(chr1,'!') : UCFullPaths[w]).replace(chr0,'') == UCPath) return cfb.FileIndex[w];\n\t\tif((m ? UCPaths[w].replace(chr1,'!') : UCPaths[w]).replace(chr0,'') == UCPath) return cfb.FileIndex[w];\n\t}\n\treturn null;\n}\n/** CFB Constants */\nvar MSSZ = 64; /* Mini Sector Size = 1<<6 */\n//var MSCSZ = 4096; /* Mini Stream Cutoff Size */\n/* 2.1 Compound File Sector Numbers and Types */\nvar ENDOFCHAIN = -2;\n/* 2.2 Compound File Header */\nvar HEADER_SIGNATURE = 'd0cf11e0a1b11ae1';\nvar HEADER_SIG = [0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1];\nvar HEADER_CLSID = '00000000000000000000000000000000';\nvar consts = {\n\t/* 2.1 Compund File Sector Numbers and Types */\n\tMAXREGSECT: -6,\n\tDIFSECT: -4,\n\tFATSECT: -3,\n\tENDOFCHAIN: ENDOFCHAIN,\n\tFREESECT: -1,\n\t/* 2.2 Compound File Header */\n\tHEADER_SIGNATURE: HEADER_SIGNATURE,\n\tHEADER_MINOR_VERSION: '3e00',\n\tMAXREGSID: -6,\n\tNOSTREAM: -1,\n\tHEADER_CLSID: HEADER_CLSID,\n\t/* 2.6.1 Compound File Directory Entry */\n\tEntryTypes: ['unknown','storage','stream','lockbytes','property','root']\n};\n\nfunction write_file(cfb, filename, options) {\n\tget_fs();\n\tvar o = _write(cfb, options);\nfs.writeFileSync(filename, o);\n}\n\nfunction a2s(o) {\n\tvar out = new Array(o.length);\n\tfor(var i = 0; i < o.length; ++i) out[i] = String.fromCharCode(o[i]);\n\treturn out.join(\"\");\n}\n\nfunction write(cfb, options) {\n\tvar o = _write(cfb, options);\n\tswitch(options && options.type) {\n\t\tcase \"file\": get_fs(); fs.writeFileSync(options.filename, (o)); return o;\n\t\tcase \"binary\": return a2s(o);\n\t\tcase \"base64\": return Base64.encode(a2s(o));\n\t}\n\treturn o;\n}\n/* node < 8.1 zlib does not expose bytesRead, so default to pure JS */\nvar _zlib;\nfunction use_zlib(zlib) { try {\n\tvar InflateRaw = zlib.InflateRaw;\n\tvar InflRaw = new InflateRaw();\n\tInflRaw._processChunk(new Uint8Array([3, 0]), InflRaw._finishFlushFlag);\n\tif(InflRaw.bytesRead) _zlib = zlib;\n\telse throw new Error(\"zlib does not expose bytesRead\");\n} catch(e) {console.error(\"cannot use native zlib: \" + (e.message || e)); } }\n\nfunction _inflateRawSync(payload, usz) {\n\tif(!_zlib) return _inflate(payload, usz);\n\tvar InflateRaw = _zlib.InflateRaw;\n\tvar InflRaw = new InflateRaw();\n\tvar out = InflRaw._processChunk(payload.slice(payload.l), InflRaw._finishFlushFlag);\n\tpayload.l += InflRaw.bytesRead;\n\treturn out;\n}\n\nfunction _deflateRawSync(payload) {\n\treturn _zlib ? _zlib.deflateRawSync(payload) : _deflate(payload);\n}\nvar CLEN_ORDER = [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];\n\n/* LEN_ID = [ 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285 ]; */\nvar LEN_LN = [ 3, 4, 5, 6, 7, 8, 9, 10, 11, 13 , 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258 ];\n\n/* DST_ID = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 ]; */\nvar DST_LN = [ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577 ];\n\nfunction bit_swap_8(n) { var t = (((((n<<1)|(n<<11)) & 0x22110) | (((n<<5)|(n<<15)) & 0x88440))); return ((t>>16) | (t>>8) |t)&0xFF; }\n\nvar use_typed_arrays = typeof Uint8Array !== 'undefined';\n\nvar bitswap8 = use_typed_arrays ? new Uint8Array(1<<8) : [];\nfor(var q = 0; q < (1<<8); ++q) bitswap8[q] = bit_swap_8(q);\n\nfunction bit_swap_n(n, b) {\n\tvar rev = bitswap8[n & 0xFF];\n\tif(b <= 8) return rev >>> (8-b);\n\trev = (rev << 8) | bitswap8[(n>>8)&0xFF];\n\tif(b <= 16) return rev >>> (16-b);\n\trev = (rev << 8) | bitswap8[(n>>16)&0xFF];\n\treturn rev >>> (24-b);\n}\n\n/* helpers for unaligned bit reads */\nfunction read_bits_2(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 6 ? 0 : buf[h+1]<<8))>>>w)& 0x03; }\nfunction read_bits_3(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 5 ? 0 : buf[h+1]<<8))>>>w)& 0x07; }\nfunction read_bits_4(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 4 ? 0 : buf[h+1]<<8))>>>w)& 0x0F; }\nfunction read_bits_5(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 3 ? 0 : buf[h+1]<<8))>>>w)& 0x1F; }\nfunction read_bits_7(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 1 ? 0 : buf[h+1]<<8))>>>w)& 0x7F; }\n\n/* works up to n = 3 * 8 + 1 = 25 */\nfunction read_bits_n(buf, bl, n) {\n\tvar w = (bl&7), h = (bl>>>3), f = ((1<>> w;\n\tif(n < 8 - w) return v & f;\n\tv |= buf[h+1]<<(8-w);\n\tif(n < 16 - w) return v & f;\n\tv |= buf[h+2]<<(16-w);\n\tif(n < 24 - w) return v & f;\n\tv |= buf[h+3]<<(24-w);\n\treturn v & f;\n}\n\n/* until ArrayBuffer#realloc is a thing, fake a realloc */\nfunction realloc(b, sz) {\n\tvar L = b.length, M = 2*L > sz ? 2*L : sz + 5, i = 0;\n\tif(L >= sz) return b;\n\tif(has_buf) {\n\t\tvar o = new_unsafe_buf(M);\n\t\t// $FlowIgnore\n\t\tif(b.copy) b.copy(o);\n\t\telse for(; i < b.length; ++i) o[i] = b[i];\n\t\treturn o;\n\t} else if(use_typed_arrays) {\n\t\tvar a = new Uint8Array(M);\n\t\tif(a.set) a.set(b);\n\t\telse for(; i < b.length; ++i) a[i] = b[i];\n\t\treturn a;\n\t}\n\tb.length = M;\n\treturn b;\n}\n\n/* zero-filled arrays for older browsers */\nfunction zero_fill_array(n) {\n\tvar o = new Array(n);\n\tfor(var i = 0; i < n; ++i) o[i] = 0;\n\treturn o;\n}var _deflate = (function() {\nvar _deflateRaw = (function() {\n\treturn function deflateRaw(data, out) {\n\t\tvar boff = 0;\n\t\twhile(boff < data.length) {\n\t\t\tvar L = Math.min(0xFFFF, data.length - boff);\n\t\t\tvar h = boff + L == data.length;\n\t\t\t/* TODO: this is only type 0 stored */\n\t\t\tout.write_shift(1, +h);\n\t\t\tout.write_shift(2, L);\n\t\t\tout.write_shift(2, (~L) & 0xFFFF);\n\t\t\twhile(L-- > 0) out[out.l++] = data[boff++];\n\t\t}\n\t\treturn out.l;\n\t};\n})();\n\nreturn function(data) {\n\tvar buf = new_buf(50+Math.floor(data.length*1.1));\n\tvar off = _deflateRaw(data, buf);\n\treturn buf.slice(0, off);\n};\n})();\n/* modified inflate function also moves original read head */\n\n/* build tree (used for literals and lengths) */\nfunction build_tree(clens, cmap, MAX) {\n\tvar maxlen = 1, w = 0, i = 0, j = 0, ccode = 0, L = clens.length;\n\n\tvar bl_count = use_typed_arrays ? new Uint16Array(32) : zero_fill_array(32);\n\tfor(i = 0; i < 32; ++i) bl_count[i] = 0;\n\n\tfor(i = L; i < MAX; ++i) clens[i] = 0;\n\tL = clens.length;\n\n\tvar ctree = use_typed_arrays ? new Uint16Array(L) : zero_fill_array(L); // []\n\n\t/* build code tree */\n\tfor(i = 0; i < L; ++i) {\n\t\tbl_count[(w = clens[i])]++;\n\t\tif(maxlen < w) maxlen = w;\n\t\tctree[i] = 0;\n\t}\n\tbl_count[0] = 0;\n\tfor(i = 1; i <= maxlen; ++i) bl_count[i+16] = (ccode = (ccode + bl_count[i-1])<<1);\n\tfor(i = 0; i < L; ++i) {\n\t\tccode = clens[i];\n\t\tif(ccode != 0) ctree[i] = bl_count[ccode+16]++;\n\t}\n\n\t/* cmap[maxlen + 4 bits] = (off&15) + (lit<<4) reverse mapping */\n\tvar cleni = 0;\n\tfor(i = 0; i < L; ++i) {\n\t\tcleni = clens[i];\n\t\tif(cleni != 0) {\n\t\t\tccode = bit_swap_n(ctree[i], maxlen)>>(maxlen-cleni);\n\t\t\tfor(j = (1<<(maxlen + 4 - cleni)) - 1; j>=0; --j)\n\t\t\t\tcmap[ccode|(j<>(8-cleni);\n\t\t\tfor(var j = (1<<(7-cleni))-1; j>=0; --j) dyn_cmap[ccode|(j<>>= 3)) {\n\t\t\tcase 16:\n\t\t\t\tw = 3 + read_bits_2(data, boff); boff += 2;\n\t\t\t\tccode = hcodes[hcodes.length - 1];\n\t\t\t\twhile(w-- > 0) hcodes.push(ccode);\n\t\t\t\tbreak;\n\t\t\tcase 17:\n\t\t\t\tw = 3 + read_bits_3(data, boff); boff += 3;\n\t\t\t\twhile(w-- > 0) hcodes.push(0);\n\t\t\t\tbreak;\n\t\t\tcase 18:\n\t\t\t\tw = 11 + read_bits_7(data, boff); boff += 7;\n\t\t\t\twhile(w -- > 0) hcodes.push(0);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\thcodes.push(ccode);\n\t\t\t\tif(maxlen < ccode) maxlen = ccode;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t/* build literal / length trees */\n\tvar h1 = hcodes.slice(0, _HLIT), h2 = hcodes.slice(_HLIT);\n\tfor(i = _HLIT; i < 286; ++i) h1[i] = 0;\n\tfor(i = _HDIST; i < 30; ++i) h2[i] = 0;\n\tdyn_len_1 = build_tree(h1, dyn_lmap, 286);\n\tdyn_len_2 = build_tree(h2, dyn_dmap, 30);\n\treturn boff;\n}\n\n/* return [ data, bytesRead ] */\nfunction inflate(data, usz) {\n\t/* shortcircuit for empty buffer [0x03, 0x00] */\n\tif(data[0] == 3 && !(data[1] & 0x3)) { return [new_raw_buf(usz), 2]; }\n\n\t/* bit offset */\n\tvar boff = 0;\n\n\t/* header includes final bit and type bits */\n\tvar header = 0;\n\n\tvar outbuf = new_unsafe_buf(usz ? usz : (1<<18));\n\tvar woff = 0;\n\tvar OL = outbuf.length>>>0;\n\tvar max_len_1 = 0, max_len_2 = 0;\n\n\twhile((header&1) == 0) {\n\t\theader = read_bits_3(data, boff); boff += 3;\n\t\tif((header >>> 1) == 0) {\n\t\t\t/* Stored block */\n\t\t\tif(boff & 7) boff += 8 - (boff&7);\n\t\t\t/* 2 bytes sz, 2 bytes bit inverse */\n\t\t\tvar sz = data[boff>>>3] | data[(boff>>>3)+1]<<8;\n\t\t\tboff += 32;\n\t\t\t/* push sz bytes */\n\t\t\tif(!usz && OL < woff + sz) { outbuf = realloc(outbuf, woff + sz); OL = outbuf.length; }\n\t\t\tif(typeof data.copy === 'function') {\n\t\t\t\t// $FlowIgnore\n\t\t\t\tdata.copy(outbuf, woff, boff>>>3, (boff>>>3)+sz);\n\t\t\t\twoff += sz; boff += 8*sz;\n\t\t\t} else while(sz-- > 0) { outbuf[woff++] = data[boff>>>3]; boff += 8; }\n\t\t\tcontinue;\n\t\t} else if((header >>> 1) == 1) {\n\t\t\t/* Fixed Huffman */\n\t\t\tmax_len_1 = 9; max_len_2 = 5;\n\t\t} else {\n\t\t\t/* Dynamic Huffman */\n\t\t\tboff = dyn(data, boff);\n\t\t\tmax_len_1 = dyn_len_1; max_len_2 = dyn_len_2;\n\t\t}\n\t\tif(!usz && (OL < woff + 32767)) { outbuf = realloc(outbuf, woff + 32767); OL = outbuf.length; }\n\t\tfor(;;) { // while(true) is apparently out of vogue in modern JS circles\n\t\t\t/* ingest code and move read head */\n\t\t\tvar bits = read_bits_n(data, boff, max_len_1);\n\t\t\tvar code = (header>>>1) == 1 ? fix_lmap[bits] : dyn_lmap[bits];\n\t\t\tboff += code & 15; code >>>= 4;\n\t\t\t/* 0-255 are literals, 256 is end of block token, 257+ are copy tokens */\n\t\t\tif(((code>>>8)&0xFF) === 0) outbuf[woff++] = code;\n\t\t\telse if(code == 256) break;\n\t\t\telse {\n\t\t\t\tcode -= 257;\n\t\t\t\tvar len_eb = (code < 8) ? 0 : ((code-4)>>2); if(len_eb > 5) len_eb = 0;\n\t\t\t\tvar tgt = woff + LEN_LN[code];\n\t\t\t\t/* length extra bits */\n\t\t\t\tif(len_eb > 0) {\n\t\t\t\t\ttgt += read_bits_n(data, boff, len_eb);\n\t\t\t\t\tboff += len_eb;\n\t\t\t\t}\n\n\t\t\t\t/* dist code */\n\t\t\t\tbits = read_bits_n(data, boff, max_len_2);\n\t\t\t\tcode = (header>>>1) == 1 ? fix_dmap[bits] : dyn_dmap[bits];\n\t\t\t\tboff += code & 15; code >>>= 4;\n\t\t\t\tvar dst_eb = (code < 4 ? 0 : (code-2)>>1);\n\t\t\t\tvar dst = DST_LN[code];\n\t\t\t\t/* dist extra bits */\n\t\t\t\tif(dst_eb > 0) {\n\t\t\t\t\tdst += read_bits_n(data, boff, dst_eb);\n\t\t\t\t\tboff += dst_eb;\n\t\t\t\t}\n\n\t\t\t\t/* in the common case, manual byte copy is faster than TA set / Buffer copy */\n\t\t\t\tif(!usz && OL < tgt) { outbuf = realloc(outbuf, tgt); OL = outbuf.length; }\n\t\t\t\twhile(woff < tgt) { outbuf[woff] = outbuf[woff - dst]; ++woff; }\n\t\t\t}\n\t\t}\n\t}\n\treturn [usz ? outbuf : outbuf.slice(0, woff), (boff+7)>>>3];\n}\n\nfunction _inflate(payload, usz) {\n\tvar data = payload.slice(payload.l||0);\n\tvar out = inflate(data, usz);\n\tpayload.l += out[1];\n\treturn out[0];\n}\n\nfunction warn_or_throw(wrn, msg) {\n\tif(wrn) { if(typeof console !== 'undefined') console.error(msg); }\n\telse throw new Error(msg);\n}\n\nfunction parse_zip(file, options) {\n\tvar blob = file;\n\tprep_blob(blob, 0);\n\n\tvar FileIndex = [], FullPaths = [];\n\tvar o = {\n\t\tFileIndex: FileIndex,\n\t\tFullPaths: FullPaths\n\t};\n\tinit_cfb(o, { root: options.root });\n\n\t/* find end of central directory, start just after signature */\n\tvar i = blob.length - 4;\n\twhile((blob[i] != 0x50 || blob[i+1] != 0x4b || blob[i+2] != 0x05 || blob[i+3] != 0x06) && i >= 0) --i;\n\tblob.l = i + 4;\n\n\t/* parse end of central directory */\n\tblob.l += 4;\n\tvar fcnt = blob.read_shift(2);\n\tblob.l += 6;\n\tvar start_cd = blob.read_shift(4);\n\n\t/* parse central directory */\n\tblob.l = start_cd;\n\n\tfor(i = 0; i < fcnt; ++i) {\n\t\t/* trust local file header instead of CD entry */\n\t\tblob.l += 20;\n\t\tvar csz = blob.read_shift(4);\n\t\tvar usz = blob.read_shift(4);\n\t\tvar namelen = blob.read_shift(2);\n\t\tvar efsz = blob.read_shift(2);\n\t\tvar fcsz = blob.read_shift(2);\n\t\tblob.l += 8;\n\t\tvar offset = blob.read_shift(4);\n\t\tvar EF = parse_extra_field(blob.slice(blob.l+namelen, blob.l+namelen+efsz));\n\t\tblob.l += namelen + efsz + fcsz;\n\n\t\tvar L = blob.l;\n\t\tblob.l = offset + 4;\n\t\tparse_local_file(blob, csz, usz, o, EF);\n\t\tblob.l = L;\n\t}\n\n\treturn o;\n}\n\n\n/* head starts just after local file header signature */\nfunction parse_local_file(blob, csz, usz, o, EF) {\n\t/* [local file header] */\n\tblob.l += 2;\n\tvar flags = blob.read_shift(2);\n\tvar meth = blob.read_shift(2);\n\tvar date = parse_dos_date(blob);\n\n\tif(flags & 0x2041) throw new Error(\"Unsupported ZIP encryption\");\n\tvar crc32 = blob.read_shift(4);\n\tvar _csz = blob.read_shift(4);\n\tvar _usz = blob.read_shift(4);\n\n\tvar namelen = blob.read_shift(2);\n\tvar efsz = blob.read_shift(2);\n\n\t// TODO: flags & (1<<11) // UTF8\n\tvar name = \"\"; for(var i = 0; i < namelen; ++i) name += String.fromCharCode(blob[blob.l++]);\n\tif(efsz) {\n\t\tvar ef = parse_extra_field(blob.slice(blob.l, blob.l + efsz));\n\t\tif((ef[0x5455]||{}).mt) date = ef[0x5455].mt;\n\t\tif(((EF||{})[0x5455]||{}).mt) date = EF[0x5455].mt;\n\t}\n\tblob.l += efsz;\n\n\t/* [encryption header] */\n\n\t/* [file data] */\n\tvar data = blob.slice(blob.l, blob.l + _csz);\n\tswitch(meth) {\n\t\tcase 8: data = _inflateRawSync(blob, _usz); break;\n\t\tcase 0: break;\n\t\tdefault: throw new Error(\"Unsupported ZIP Compression method \" + meth);\n\t}\n\n\t/* [data descriptor] */\n\tvar wrn = false;\n\tif(flags & 8) {\n\t\tcrc32 = blob.read_shift(4);\n\t\tif(crc32 == 0x08074b50) { crc32 = blob.read_shift(4); wrn = true; }\n\t\t_csz = blob.read_shift(4);\n\t\t_usz = blob.read_shift(4);\n\t}\n\n\tif(_csz != csz) warn_or_throw(wrn, \"Bad compressed size: \" + csz + \" != \" + _csz);\n\tif(_usz != usz) warn_or_throw(wrn, \"Bad uncompressed size: \" + usz + \" != \" + _usz);\n\tvar _crc32 = CRC32.buf(data, 0);\n\tif((crc32>>0) != (_crc32>>0)) warn_or_throw(wrn, \"Bad CRC32 checksum: \" + crc32 + \" != \" + _crc32);\n\tcfb_add(o, name, data, {unsafe: true, mt: date});\n}\nfunction write_zip(cfb, options) {\n\tvar _opts = options || {};\n\tvar out = [], cdirs = [];\n\tvar o = new_buf(1);\n\tvar method = (_opts.compression ? 8 : 0), flags = 0;\n\tvar desc = false;\n\tif(desc) flags |= 8;\n\tvar i = 0, j = 0;\n\n\tvar start_cd = 0, fcnt = 0;\n\tvar root = cfb.FullPaths[0], fp = root, fi = cfb.FileIndex[0];\n\tvar crcs = [];\n\tvar sz_cd = 0;\n\n\tfor(i = 1; i < cfb.FullPaths.length; ++i) {\n\t\tfp = cfb.FullPaths[i].slice(root.length); fi = cfb.FileIndex[i];\n\t\tif(!fi.size || !fi.content || fp == \"\\u0001Sh33tJ5\") continue;\n\t\tvar start = start_cd;\n\n\t\t/* TODO: CP437 filename */\n\t\tvar namebuf = new_buf(fp.length);\n\t\tfor(j = 0; j < fp.length; ++j) namebuf.write_shift(1, fp.charCodeAt(j) & 0x7F);\n\t\tnamebuf = namebuf.slice(0, namebuf.l);\n\t\tcrcs[fcnt] = CRC32.buf(fi.content, 0);\n\n\t\tvar outbuf = fi.content;\n\t\tif(method == 8) outbuf = _deflateRawSync(outbuf);\n\n\t\t/* local file header */\n\t\to = new_buf(30);\n\t\to.write_shift(4, 0x04034b50);\n\t\to.write_shift(2, 20);\n\t\to.write_shift(2, flags);\n\t\to.write_shift(2, method);\n\t\t/* TODO: last mod file time/date */\n\t\tif(fi.mt) write_dos_date(o, fi.mt);\n\t\telse o.write_shift(4, 0);\n\t\to.write_shift(-4, (flags & 8) ? 0 : crcs[fcnt]);\n\t\to.write_shift(4, (flags & 8) ? 0 : outbuf.length);\n\t\to.write_shift(4, (flags & 8) ? 0 : fi.content.length);\n\t\to.write_shift(2, namebuf.length);\n\t\to.write_shift(2, 0);\n\n\t\tstart_cd += o.length;\n\t\tout.push(o);\n\t\tstart_cd += namebuf.length;\n\t\tout.push(namebuf);\n\n\t\t/* TODO: encryption header ? */\n\t\tstart_cd += outbuf.length;\n\t\tout.push(outbuf);\n\n\t\t/* data descriptor */\n\t\tif(flags & 8) {\n\t\t\to = new_buf(12);\n\t\t\to.write_shift(-4, crcs[fcnt]);\n\t\t\to.write_shift(4, outbuf.length);\n\t\t\to.write_shift(4, fi.content.length);\n\t\t\tstart_cd += o.l;\n\t\t\tout.push(o);\n\t\t}\n\n\t\t/* central directory */\n\t\to = new_buf(46);\n\t\to.write_shift(4, 0x02014b50);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 20);\n\t\to.write_shift(2, flags);\n\t\to.write_shift(2, method);\n\t\to.write_shift(4, 0); /* TODO: last mod file time/date */\n\t\to.write_shift(-4, crcs[fcnt]);\n\n\t\to.write_shift(4, outbuf.length);\n\t\to.write_shift(4, fi.content.length);\n\t\to.write_shift(2, namebuf.length);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(4, 0);\n\t\to.write_shift(4, start);\n\n\t\tsz_cd += o.l;\n\t\tcdirs.push(o);\n\t\tsz_cd += namebuf.length;\n\t\tcdirs.push(namebuf);\n\t\t++fcnt;\n\t}\n\n\t/* end of central directory */\n\to = new_buf(22);\n\to.write_shift(4, 0x06054b50);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, fcnt);\n\to.write_shift(2, fcnt);\n\to.write_shift(4, sz_cd);\n\to.write_shift(4, start_cd);\n\to.write_shift(2, 0);\n\n\treturn bconcat(([bconcat((out)), bconcat(cdirs), o]));\n}\nfunction cfb_new(opts) {\n\tvar o = ({});\n\tinit_cfb(o, opts);\n\treturn o;\n}\n\nfunction cfb_add(cfb, name, content, opts) {\n\tvar unsafe = opts && opts.unsafe;\n\tif(!unsafe) init_cfb(cfb);\n\tvar file = !unsafe && CFB.find(cfb, name);\n\tif(!file) {\n\t\tvar fpath = cfb.FullPaths[0];\n\t\tif(name.slice(0, fpath.length) == fpath) fpath = name;\n\t\telse {\n\t\t\tif(fpath.slice(-1) != \"/\") fpath += \"/\";\n\t\t\tfpath = (fpath + name).replace(\"//\",\"/\");\n\t\t}\n\t\tfile = ({name: filename(name), type: 2});\n\t\tcfb.FileIndex.push(file);\n\t\tcfb.FullPaths.push(fpath);\n\t\tif(!unsafe) CFB.utils.cfb_gc(cfb);\n\t}\nfile.content = (content);\n\tfile.size = content ? content.length : 0;\n\tif(opts) {\n\t\tif(opts.CLSID) file.clsid = opts.CLSID;\n\t\tif(opts.mt) file.mt = opts.mt;\n\t\tif(opts.ct) file.ct = opts.ct;\n\t}\n\treturn file;\n}\n\nfunction cfb_del(cfb, name) {\n\tinit_cfb(cfb);\n\tvar file = CFB.find(cfb, name);\n\tif(file) for(var j = 0; j < cfb.FileIndex.length; ++j) if(cfb.FileIndex[j] == file) {\n\t\tcfb.FileIndex.splice(j, 1);\n\t\tcfb.FullPaths.splice(j, 1);\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nfunction cfb_mov(cfb, old_name, new_name) {\n\tinit_cfb(cfb);\n\tvar file = CFB.find(cfb, old_name);\n\tif(file) for(var j = 0; j < cfb.FileIndex.length; ++j) if(cfb.FileIndex[j] == file) {\n\t\tcfb.FileIndex[j].name = filename(new_name);\n\t\tcfb.FullPaths[j] = new_name;\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nfunction cfb_gc(cfb) { rebuild_cfb(cfb, true); }\n\nexports.find = find;\nexports.read = read;\nexports.parse = parse;\nexports.write = write;\nexports.writeFile = write_file;\nexports.utils = {\n\tcfb_new: cfb_new,\n\tcfb_add: cfb_add,\n\tcfb_del: cfb_del,\n\tcfb_mov: cfb_mov,\n\tcfb_gc: cfb_gc,\n\tReadShift: ReadShift,\n\tCheckField: CheckField,\n\tprep_blob: prep_blob,\n\tbconcat: bconcat,\n\tuse_zlib: use_zlib,\n\t_deflateRaw: _deflate,\n\t_inflateRaw: _inflate,\n\tconsts: consts\n};\n\nreturn exports;\n})();\n\nif(typeof require !== 'undefined' && typeof module !== 'undefined' && typeof DO_NOT_EXPORT_CFB === 'undefined') { module.exports = CFB; }\nvar _fs;\nif(typeof require !== 'undefined') try { _fs = require('fs'); } catch(e) {}\n\n/* normalize data for blob ctor */\nfunction blobify(data) {\n\tif(typeof data === \"string\") return s2ab(data);\n\tif(Array.isArray(data)) return a2u(data);\n\treturn data;\n}\n/* write or download file */\nfunction write_dl(fname, payload, enc) {\n\t/*global IE_SaveFile, Blob, navigator, saveAs, document, File, chrome */\n\tif(typeof _fs !== 'undefined' && _fs.writeFileSync) return enc ? _fs.writeFileSync(fname, payload, enc) : _fs.writeFileSync(fname, payload);\n\tvar data = (enc == \"utf8\") ? utf8write(payload) : payload;\nif(typeof IE_SaveFile !== 'undefined') return IE_SaveFile(data, fname);\n\tif(typeof Blob !== 'undefined') {\n\t\tvar blob = new Blob([blobify(data)], {type:\"application/octet-stream\"});\nif(typeof navigator !== 'undefined' && navigator.msSaveBlob) return navigator.msSaveBlob(blob, fname);\nif(typeof saveAs !== 'undefined') return saveAs(blob, fname);\n\t\tif(typeof URL !== 'undefined' && typeof document !== 'undefined' && document.createElement && URL.createObjectURL) {\n\t\t\tvar url = URL.createObjectURL(blob);\nif(typeof chrome === 'object' && typeof (chrome.downloads||{}).download == \"function\") {\n\t\t\t\tif(URL.revokeObjectURL && typeof setTimeout !== 'undefined') setTimeout(function() { URL.revokeObjectURL(url); }, 60000);\n\t\t\t\treturn chrome.downloads.download({ url: url, filename: fname, saveAs: true});\n\t\t\t}\n\t\t\tvar a = document.createElement(\"a\");\n\t\t\tif(a.download != null) {\na.download = fname; a.href = url; document.body.appendChild(a); a.click();\ndocument.body.removeChild(a);\n\t\t\t\tif(URL.revokeObjectURL && typeof setTimeout !== 'undefined') setTimeout(function() { URL.revokeObjectURL(url); }, 60000);\n\t\t\t\treturn url;\n\t\t\t}\n\t\t}\n\t}\n\t// $FlowIgnore\n\tif(typeof $ !== 'undefined' && typeof File !== 'undefined' && typeof Folder !== 'undefined') try { // extendscript\n\t\t// $FlowIgnore\n\t\tvar out = File(fname); out.open(\"w\"); out.encoding = \"binary\";\n\t\tif(Array.isArray(payload)) payload = a2s(payload);\n\t\tout.write(payload); out.close(); return payload;\n\t} catch(e) { if(!e.message || !e.message.match(/onstruct/)) throw e; }\n\tthrow new Error(\"cannot save file \" + fname);\n}\n\n/* read binary data from file */\nfunction read_binary(path) {\n\tif(typeof _fs !== 'undefined') return _fs.readFileSync(path);\n\t// $FlowIgnore\n\tif(typeof $ !== 'undefined' && typeof File !== 'undefined' && typeof Folder !== 'undefined') try { // extendscript\n\t\t// $FlowIgnore\n\t\tvar infile = File(path); infile.open(\"r\"); infile.encoding = \"binary\";\n\t\tvar data = infile.read(); infile.close();\n\t\treturn data;\n\t} catch(e) { if(!e.message || !e.message.match(/onstruct/)) throw e; }\n\tthrow new Error(\"Cannot access file \" + path);\n}\nfunction keys(o) {\n\tvar ks = Object.keys(o), o2 = [];\n\tfor(var i = 0; i < ks.length; ++i) if(Object.prototype.hasOwnProperty.call(o, ks[i])) o2.push(ks[i]);\n\treturn o2;\n}\n\nfunction evert_key(obj, key) {\n\tvar o = ([]), K = keys(obj);\n\tfor(var i = 0; i !== K.length; ++i) if(o[obj[K[i]][key]] == null) o[obj[K[i]][key]] = K[i];\n\treturn o;\n}\n\nfunction evert(obj) {\n\tvar o = ([]), K = keys(obj);\n\tfor(var i = 0; i !== K.length; ++i) o[obj[K[i]]] = K[i];\n\treturn o;\n}\n\nfunction evert_num(obj) {\n\tvar o = ([]), K = keys(obj);\n\tfor(var i = 0; i !== K.length; ++i) o[obj[K[i]]] = parseInt(K[i],10);\n\treturn o;\n}\n\nfunction evert_arr(obj) {\n\tvar o = ([]), K = keys(obj);\n\tfor(var i = 0; i !== K.length; ++i) {\n\t\tif(o[obj[K[i]]] == null) o[obj[K[i]]] = [];\n\t\to[obj[K[i]]].push(K[i]);\n\t}\n\treturn o;\n}\n\nvar basedate = new Date(1899, 11, 30, 0, 0, 0); // 2209161600000\nfunction datenum(v, date1904) {\n\tvar epoch = v.getTime();\n\tif(date1904) epoch -= 1462*24*60*60*1000;\n\tvar dnthresh = basedate.getTime() + (v.getTimezoneOffset() - basedate.getTimezoneOffset()) * 60000;\n\treturn (epoch - dnthresh) / (24 * 60 * 60 * 1000);\n}\nvar refdate = new Date();\nvar dnthresh = basedate.getTime() + (refdate.getTimezoneOffset() - basedate.getTimezoneOffset()) * 60000;\nvar refoffset = refdate.getTimezoneOffset();\nfunction numdate(v) {\n\tvar out = new Date();\n\tout.setTime(v * 24 * 60 * 60 * 1000 + dnthresh);\n\tif (out.getTimezoneOffset() !== refoffset) {\n\t\tout.setTime(out.getTime() + (out.getTimezoneOffset() - refoffset) * 60000);\n\t}\n\treturn out;\n}\n\n/* ISO 8601 Duration */\nfunction parse_isodur(s) {\n\tvar sec = 0, mt = 0, time = false;\n\tvar m = s.match(/P([0-9\\.]+Y)?([0-9\\.]+M)?([0-9\\.]+D)?T([0-9\\.]+H)?([0-9\\.]+M)?([0-9\\.]+S)?/);\n\tif(!m) throw new Error(\"|\" + s + \"| is not an ISO8601 Duration\");\n\tfor(var i = 1; i != m.length; ++i) {\n\t\tif(!m[i]) continue;\n\t\tmt = 1;\n\t\tif(i > 3) time = true;\n\t\tswitch(m[i].slice(m[i].length-1)) {\n\t\t\tcase 'Y':\n\t\t\t\tthrow new Error(\"Unsupported ISO Duration Field: \" + m[i].slice(m[i].length-1));\n\t\t\tcase 'D': mt *= 24;\n\t\t\t\t/* falls through */\n\t\t\tcase 'H': mt *= 60;\n\t\t\t\t/* falls through */\n\t\t\tcase 'M':\n\t\t\t\tif(!time) throw new Error(\"Unsupported ISO Duration Field: M\");\n\t\t\t\telse mt *= 60;\n\t\t\t\t/* falls through */\n\t\t\tcase 'S': break;\n\t\t}\n\t\tsec += mt * parseInt(m[i], 10);\n\t}\n\treturn sec;\n}\n\nvar good_pd_date = new Date('2017-02-19T19:06:09.000Z');\nif(isNaN(good_pd_date.getFullYear())) good_pd_date = new Date('2/19/17');\nvar good_pd = good_pd_date.getFullYear() == 2017;\n/* parses a date as a local date */\nfunction parseDate(str, fixdate) {\n\tvar d = new Date(str);\n\tif(good_pd) {\nif(fixdate > 0) d.setTime(d.getTime() + d.getTimezoneOffset() * 60 * 1000);\n\t\telse if(fixdate < 0) d.setTime(d.getTime() - d.getTimezoneOffset() * 60 * 1000);\n\t\treturn d;\n\t}\n\tif(str instanceof Date) return str;\n\tif(good_pd_date.getFullYear() == 1917 && !isNaN(d.getFullYear())) {\n\t\tvar s = d.getFullYear();\n\t\tif(str.indexOf(\"\" + s) > -1) return d;\n\t\td.setFullYear(d.getFullYear() + 100); return d;\n\t}\n\tvar n = str.match(/\\d+/g)||[\"2017\",\"2\",\"19\",\"0\",\"0\",\"0\"];\n\tvar out = new Date(+n[0], +n[1] - 1, +n[2], (+n[3]||0), (+n[4]||0), (+n[5]||0));\n\tif(str.indexOf(\"Z\") > -1) out = new Date(out.getTime() - out.getTimezoneOffset() * 60 * 1000);\n\treturn out;\n}\n\nfunction cc2str(arr) {\n\tvar o = \"\";\n\tfor(var i = 0; i != arr.length; ++i) o += String.fromCharCode(arr[i]);\n\treturn o;\n}\n\nfunction dup(o) {\n\tif(typeof JSON != 'undefined' && !Array.isArray(o)) return JSON.parse(JSON.stringify(o));\n\tif(typeof o != 'object' || o == null) return o;\n\tif(o instanceof Date) return new Date(o.getTime());\n\tvar out = {};\n\tfor(var k in o) if(Object.prototype.hasOwnProperty.call(o, k)) out[k] = dup(o[k]);\n\treturn out;\n}\n\nfunction fill(c,l) { var o = \"\"; while(o.length < l) o+=c; return o; }\n\n/* TODO: stress test */\nfunction fuzzynum(s) {\n\tvar v = Number(s);\n\tif(!isNaN(v)) return v;\n\tif(!/\\d/.test(s)) return v;\n\tvar wt = 1;\n\tvar ss = s.replace(/([\\d]),([\\d])/g,\"$1$2\").replace(/[$]/g,\"\").replace(/[%]/g, function() { wt *= 100; return \"\";});\n\tif(!isNaN(v = Number(ss))) return v / wt;\n\tss = ss.replace(/[(](.*)[)]/,function($$, $1) { wt = -wt; return $1;});\n\tif(!isNaN(v = Number(ss))) return v / wt;\n\treturn v;\n}\nfunction fuzzydate(s) {\n\tvar o = new Date(s), n = new Date(NaN);\n\tvar y = o.getYear(), m = o.getMonth(), d = o.getDate();\n\tif(isNaN(d)) return n;\n\tif(y < 0 || y > 8099) return n;\n\tif((m > 0 || d > 1) && y != 101) return o;\n\tif(s.toLowerCase().match(/jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec/)) return o;\n\tif(s.match(/[^-0-9:,\\/\\\\]/)) return n;\n\treturn o;\n}\n\nvar safe_split_regex = \"abacaba\".split(/(:?b)/i).length == 5;\nfunction split_regex(str, re, def) {\n\tif(safe_split_regex || typeof re == \"string\") return str.split(re);\n\tvar p = str.split(re), o = [p[0]];\n\tfor(var i = 1; i < p.length; ++i) { o.push(def); o.push(p[i]); }\n\treturn o;\n}\nfunction getdatastr(data) {\n\tif(!data) return null;\n\tif(data.data) return debom(data.data);\n\tif(data.asNodeBuffer && has_buf) return debom(data.asNodeBuffer().toString('binary'));\n\tif(data.asBinary) return debom(data.asBinary());\n\tif(data._data && data._data.getContent) return debom(cc2str(Array.prototype.slice.call(data._data.getContent(),0)));\n\tif(data.content && data.type) return debom(cc2str(data.content));\n\treturn null;\n}\n\nfunction getdatabin(data) {\n\tif(!data) return null;\n\tif(data.data) return char_codes(data.data);\n\tif(data.asNodeBuffer && has_buf) return data.asNodeBuffer();\n\tif(data._data && data._data.getContent) {\n\t\tvar o = data._data.getContent();\n\t\tif(typeof o == \"string\") return char_codes(o);\n\t\treturn Array.prototype.slice.call(o);\n\t}\n\tif(data.content && data.type) return data.content;\n\treturn null;\n}\n\nfunction getdata(data) { return (data && data.name.slice(-4) === \".bin\") ? getdatabin(data) : getdatastr(data); }\n\n/* Part 2 Section 10.1.2 \"Mapping Content Types\" Names are case-insensitive */\n/* OASIS does not comment on filename case sensitivity */\nfunction safegetzipfile(zip, file) {\n\tvar k = zip.FullPaths || keys(zip.files);\n\tvar f = file.toLowerCase(), g = f.replace(/\\//g,'\\\\');\n\tfor(var i=0; i\\/]+)\\s*=\\s*((?:\")([^\"]*)(?:\")|(?:')([^']*)(?:')|([^'\">\\s]+))/g;\nvar tagregex=/<[\\/\\?]?[a-zA-Z0-9:_-]+(?:\\s+[^\"\\s?>\\/]+\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^'\">\\s=]+))*\\s?[\\/\\?]?>/mg;\n\nif(!(XML_HEADER.match(tagregex))) tagregex = /<[^>]*>/g;\nvar nsregex=/<\\w*:/, nsregex2 = /<(\\/?)\\w+:/;\nfunction parsexmltag(tag, skip_root, skip_LC) {\n\tvar z = ({});\n\tvar eq = 0, c = 0;\n\tfor(; eq !== tag.length; ++eq) if((c = tag.charCodeAt(eq)) === 32 || c === 10 || c === 13) break;\n\tif(!skip_root) z[0] = tag.slice(0, eq);\n\tif(eq === tag.length) return z;\n\tvar m = tag.match(attregexg), j=0, v=\"\", i=0, q=\"\", cc=\"\", quot = 1;\n\tif(m) for(i = 0; i != m.length; ++i) {\n\t\tcc = m[i];\n\t\tfor(c=0; c != cc.length; ++c) if(cc.charCodeAt(c) === 61) break;\n\t\tq = cc.slice(0,c).trim();\n\t\twhile(cc.charCodeAt(c+1) == 32) ++c;\n\t\tquot = ((eq=cc.charCodeAt(c+1)) == 34 || eq == 39) ? 1 : 0;\n\t\tv = cc.slice(c+1+quot, cc.length-quot);\n\t\tfor(j=0;j!=q.length;++j) if(q.charCodeAt(j) === 58) break;\n\t\tif(j===q.length) {\n\t\t\tif(q.indexOf(\"_\") > 0) q = q.slice(0, q.indexOf(\"_\")); // from ods\n\t\t\tz[q] = v;\n\t\t\tif(!skip_LC) z[q.toLowerCase()] = v;\n\t\t}\n\t\telse {\n\t\t\tvar k = (j===5 && q.slice(0,5)===\"xmlns\"?\"xmlns\":\"\")+q.slice(j+1);\n\t\t\tif(z[k] && q.slice(j-3,j) == \"ext\") continue; // from ods\n\t\t\tz[k] = v;\n\t\t\tif(!skip_LC) z[k.toLowerCase()] = v;\n\t\t}\n\t}\n\treturn z;\n}\nfunction strip_ns(x) { return x.replace(nsregex2, \"<$1\"); }\n\nvar encodings = {\n\t'"': '\"',\n\t''': \"'\",\n\t'>': '>',\n\t'<': '<',\n\t'&': '&'\n};\nvar rencoding = evert(encodings);\n//var rencstr = \"&<>'\\\"\".split(\"\");\n\n// TODO: CP remap (need to read file version to determine OS)\nvar unescapexml = (function() {\n\t/* 22.4.2.4 bstr (Basic String) */\n\tvar encregex = /&(?:quot|apos|gt|lt|amp|#x?([\\da-fA-F]+));/ig, coderegex = /_x([\\da-fA-F]{4})_/ig;\n\treturn function unescapexml(text) {\n\t\tvar s = text + '', i = s.indexOf(\"-1?16:10))||$$; }).replace(coderegex,function(m,c) {return String.fromCharCode(parseInt(c,16));});\n\t\tvar j = s.indexOf(\"]]>\");\n\t\treturn unescapexml(s.slice(0, i)) + s.slice(i+9,j) + unescapexml(s.slice(j+3));\n\t};\n})();\n\nvar decregex=/[&<>'\"]/g, charegex = /[\\u0000-\\u0008\\u000b-\\u001f]/g;\nfunction escapexml(text){\n\tvar s = text + '';\n\treturn s.replace(decregex, function(y) { return rencoding[y]; }).replace(charegex,function(s) { return \"_x\" + (\"000\"+s.charCodeAt(0).toString(16)).slice(-4) + \"_\";});\n}\nfunction escapexmltag(text){ return escapexml(text).replace(/ /g,\"_x0020_\"); }\n\nvar htmlcharegex = /[\\u0000-\\u001f]/g;\nfunction escapehtml(text){\n\tvar s = text + '';\n\treturn s.replace(decregex, function(y) { return rencoding[y]; }).replace(/\\n/g, \"
\").replace(htmlcharegex,function(s) { return \"&#x\" + (\"000\"+s.charCodeAt(0).toString(16)).slice(-4) + \";\"; });\n}\n\nfunction escapexlml(text){\n\tvar s = text + '';\n\treturn s.replace(decregex, function(y) { return rencoding[y]; }).replace(htmlcharegex,function(s) { return \"&#x\" + (s.charCodeAt(0).toString(16)).toUpperCase() + \";\"; });\n}\n\n/* TODO: handle codepages */\nvar xlml_fixstr = (function() {\n\tvar entregex = /&#(\\d+);/g;\n\tfunction entrepl($$,$1) { return String.fromCharCode(parseInt($1,10)); }\n\treturn function xlml_fixstr(str) { return str.replace(entregex,entrepl); };\n})();\nvar xlml_unfixstr = (function() {\n\treturn function xlml_unfixstr(str) { return str.replace(/(\\r\\n|[\\r\\n])/g,\"\\ \"); };\n})();\n\nfunction parsexmlbool(value) {\n\tswitch(value) {\n\t\tcase 1: case true: case '1': case 'true': case 'TRUE': return true;\n\t\t/* case '0': case 'false': case 'FALSE':*/\n\t\tdefault: return false;\n\t}\n}\n\nvar utf8read = function utf8reada(orig) {\n\tvar out = \"\", i = 0, c = 0, d = 0, e = 0, f = 0, w = 0;\n\twhile (i < orig.length) {\n\t\tc = orig.charCodeAt(i++);\n\t\tif (c < 128) { out += String.fromCharCode(c); continue; }\n\t\td = orig.charCodeAt(i++);\n\t\tif (c>191 && c<224) { f = ((c & 31) << 6); f |= (d & 63); out += String.fromCharCode(f); continue; }\n\t\te = orig.charCodeAt(i++);\n\t\tif (c < 240) { out += String.fromCharCode(((c & 15) << 12) | ((d & 63) << 6) | (e & 63)); continue; }\n\t\tf = orig.charCodeAt(i++);\n\t\tw = (((c & 7) << 18) | ((d & 63) << 12) | ((e & 63) << 6) | (f & 63))-65536;\n\t\tout += String.fromCharCode(0xD800 + ((w>>>10)&1023));\n\t\tout += String.fromCharCode(0xDC00 + (w&1023));\n\t}\n\treturn out;\n};\n\nvar utf8write = function(orig) {\n\tvar out = [], i = 0, c = 0, d = 0;\n\twhile(i < orig.length) {\n\t\tc = orig.charCodeAt(i++);\n\t\tswitch(true) {\n\t\t\tcase c < 128: out.push(String.fromCharCode(c)); break;\n\t\t\tcase c < 2048:\n\t\t\t\tout.push(String.fromCharCode(192 + (c >> 6)));\n\t\t\t\tout.push(String.fromCharCode(128 + (c & 63)));\n\t\t\t\tbreak;\n\t\t\tcase c >= 55296 && c < 57344:\n\t\t\t\tc -= 55296; d = orig.charCodeAt(i++) - 56320 + (c<<10);\n\t\t\t\tout.push(String.fromCharCode(240 + ((d >>18) & 7)));\n\t\t\t\tout.push(String.fromCharCode(144 + ((d >>12) & 63)));\n\t\t\t\tout.push(String.fromCharCode(128 + ((d >> 6) & 63)));\n\t\t\t\tout.push(String.fromCharCode(128 + (d & 63)));\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tout.push(String.fromCharCode(224 + (c >> 12)));\n\t\t\t\tout.push(String.fromCharCode(128 + ((c >> 6) & 63)));\n\t\t\t\tout.push(String.fromCharCode(128 + (c & 63)));\n\t\t}\n\t}\n\treturn out.join(\"\");\n};\n\nif(has_buf) {\n\tvar utf8readb = function utf8readb(data) {\n\t\tvar out = Buffer.alloc(2*data.length), w, i, j = 1, k = 0, ww=0, c;\n\t\tfor(i = 0; i < data.length; i+=j) {\n\t\t\tj = 1;\n\t\t\tif((c=data.charCodeAt(i)) < 128) w = c;\n\t\t\telse if(c < 224) { w = (c&31)*64+(data.charCodeAt(i+1)&63); j=2; }\n\t\t\telse if(c < 240) { w=(c&15)*4096+(data.charCodeAt(i+1)&63)*64+(data.charCodeAt(i+2)&63); j=3; }\n\t\t\telse { j = 4;\n\t\t\t\tw = (c & 7)*262144+(data.charCodeAt(i+1)&63)*4096+(data.charCodeAt(i+2)&63)*64+(data.charCodeAt(i+3)&63);\n\t\t\t\tw -= 65536; ww = 0xD800 + ((w>>>10)&1023); w = 0xDC00 + (w&1023);\n\t\t\t}\n\t\t\tif(ww !== 0) { out[k++] = ww&255; out[k++] = ww>>>8; ww = 0; }\n\t\t\tout[k++] = w%256; out[k++] = w>>>8;\n\t\t}\n\t\treturn out.slice(0,k).toString('ucs2');\n\t};\n\tvar corpus = \"foo bar baz\\u00e2\\u0098\\u0083\\u00f0\\u009f\\u008d\\u00a3\";\n\tif(utf8read(corpus) == utf8readb(corpus)) utf8read = utf8readb;\n\tvar utf8readc = function utf8readc(data) { return Buffer_from(data, 'binary').toString('utf8'); };\n\tif(utf8read(corpus) == utf8readc(corpus)) utf8read = utf8readc;\n\n\tutf8write = function(data) { return Buffer_from(data, 'utf8').toString(\"binary\"); };\n}\n\n// matches ... extracts content\nvar matchtag = (function() {\n\tvar mtcache = ({});\n\treturn function matchtag(f,g) {\n\t\tvar t = f+\"|\"+(g||\"\");\n\t\tif(mtcache[t]) return mtcache[t];\n\t\treturn (mtcache[t] = new RegExp('<(?:\\\\w+:)?'+f+'(?: xml:space=\"preserve\")?(?:[^>]*)>([\\\\s\\\\S]*?)',((g||\"\"))));\n\t};\n})();\n\nvar htmldecode = (function() {\n\tvar entities = [\n\t\t['nbsp', ' '], ['middot', '·'],\n\t\t['quot', '\"'], ['apos', \"'\"], ['gt', '>'], ['lt', '<'], ['amp', '&']\n\t].map(function(x) { return [new RegExp('&' + x[0] + ';', \"ig\"), x[1]]; });\n\treturn function htmldecode(str) {\n\t\tvar o = str\n\t\t\t\t// Remove new lines and spaces from start of content\n\t\t\t\t.replace(/^[\\t\\n\\r ]+/, \"\")\n\t\t\t\t// Remove new lines and spaces from end of content\n\t\t\t\t.replace(/[\\t\\n\\r ]+$/,\"\")\n\t\t\t\t// Added line which removes any white space characters after and before html tags\n\t\t\t\t.replace(/>\\s+/g,\">\").replace(/\\s+ tags with new lines\n\t\t\t\t.replace(/<\\s*[bB][rR]\\s*\\/?>/g,\"\\n\")\n\t\t\t\t// Strip HTML elements\n\t\t\t\t.replace(/<[^>]*>/g,\"\");\n\t\tfor(var i = 0; i < entities.length; ++i) o = o.replace(entities[i][0], entities[i][1]);\n\t\treturn o;\n\t};\n})();\n\nvar vtregex = (function(){ var vt_cache = {};\n\treturn function vt_regex(bt) {\n\t\tif(vt_cache[bt] !== undefined) return vt_cache[bt];\n\t\treturn (vt_cache[bt] = new RegExp(\"<(?:vt:)?\" + bt + \">([\\\\s\\\\S]*?)\", 'g') );\n};})();\nvar vtvregex = /<\\/?(?:vt:)?variant>/g, vtmregex = /<(?:vt:)([^>]*)>([\\s\\S]*)' + g + ''; }\n\nfunction wxt_helper(h) { return keys(h).map(function(k) { return \" \" + k + '=\"' + h[k] + '\"';}).join(\"\"); }\nfunction writextag(f,g,h) { return '<' + f + ((h != null) ? wxt_helper(h) : \"\") + ((g != null) ? (g.match(wtregex)?' xml:space=\"preserve\"' : \"\") + '>' + g + '';}\n\nfunction write_w3cdtf(d, t) { try { return d.toISOString().replace(/\\.\\d*/,\"\"); } catch(e) { if(t) throw e; } return \"\"; }\n\nfunction write_vt(s, xlsx) {\n\tswitch(typeof s) {\n\t\tcase 'string':\n\t\t\tvar o = writextag('vt:lpwstr', escapexml(s));\n\t\t\tif(xlsx) o = o.replace(/"/g, \"_x0022_\");\n\t\t\treturn o;\n\t\tcase 'number': return writextag((s|0)==s?'vt:i4':'vt:r8', escapexml(String(s)));\n\t\tcase 'boolean': return writextag('vt:bool',s?'true':'false');\n\t}\n\tif(s instanceof Date) return writextag('vt:filetime', write_w3cdtf(s));\n\tthrow new Error(\"Unable to serialize \" + s);\n}\n\nvar XMLNS = ({\n\t'dc': 'http://purl.org/dc/elements/1.1/',\n\t'dcterms': 'http://purl.org/dc/terms/',\n\t'dcmitype': 'http://purl.org/dc/dcmitype/',\n\t'mx': 'http://schemas.microsoft.com/office/mac/excel/2008/main',\n\t'r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\n\t'sjs': 'http://schemas.openxmlformats.org/package/2006/sheetjs/core-properties',\n\t'vt': 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes',\n\t'xsi': 'http://www.w3.org/2001/XMLSchema-instance',\n\t'xsd': 'http://www.w3.org/2001/XMLSchema'\n});\n\nXMLNS.main = [\n\t'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\n\t'http://purl.oclc.org/ooxml/spreadsheetml/main',\n\t'http://schemas.microsoft.com/office/excel/2006/main',\n\t'http://schemas.microsoft.com/office/excel/2006/2'\n];\n\nvar XLMLNS = ({\n\t'o': 'urn:schemas-microsoft-com:office:office',\n\t'x': 'urn:schemas-microsoft-com:office:excel',\n\t'ss': 'urn:schemas-microsoft-com:office:spreadsheet',\n\t'dt': 'uuid:C2F41010-65B3-11d1-A29F-00AA00C14882',\n\t'mv': 'http://macVmlSchemaUri',\n\t'v': 'urn:schemas-microsoft-com:vml',\n\t'html': 'http://www.w3.org/TR/REC-html40'\n});\nfunction read_double_le(b, idx) {\n\tvar s = 1 - 2 * (b[idx + 7] >>> 7);\n\tvar e = ((b[idx + 7] & 0x7f) << 4) + ((b[idx + 6] >>> 4) & 0x0f);\n\tvar m = (b[idx+6]&0x0f);\n\tfor(var i = 5; i >= 0; --i) m = m * 256 + b[idx + i];\n\tif(e == 0x7ff) return m == 0 ? (s * Infinity) : NaN;\n\tif(e == 0) e = -1022;\n\telse { e -= 1023; m += Math.pow(2,52); }\n\treturn s * Math.pow(2, e - 52) * m;\n}\n\nfunction write_double_le(b, v, idx) {\n\tvar bs = ((((v < 0) || (1/v == -Infinity)) ? 1 : 0) << 7), e = 0, m = 0;\n\tvar av = bs ? (-v) : v;\n\tif(!isFinite(av)) { e = 0x7ff; m = isNaN(v) ? 0x6969 : 0; }\n\telse if(av == 0) e = m = 0;\n\telse {\n\t\te = Math.floor(Math.log(av) / Math.LN2);\n\t\tm = av * Math.pow(2, 52 - e);\n\t\tif((e <= -1023) && (!isFinite(m) || (m < Math.pow(2,52)))) { e = -1022; }\n\t\telse { m -= Math.pow(2,52); e+=1023; }\n\t}\n\tfor(var i = 0; i <= 5; ++i, m/=256) b[idx + i] = m & 0xff;\n\tb[idx + 6] = ((e & 0x0f) << 4) | (m & 0xf);\n\tb[idx + 7] = (e >> 4) | bs;\n}\n\nvar __toBuffer = function(bufs) { var x=[],w=10240; for(var i=0;i 0 ? __utf8(b, i+4,i+4+len-1) : \"\";};\nvar ___lpstr = __lpstr;\nvar __cpstr = function(b,i) { var len = __readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : \"\";};\nvar ___cpstr = __cpstr;\nvar __lpwstr = function(b,i) { var len = 2*__readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : \"\";};\nvar ___lpwstr = __lpwstr;\nvar __lpp4, ___lpp4;\n__lpp4 = ___lpp4 = function lpp4_(b,i) { var len = __readUInt32LE(b,i); return len > 0 ? __utf16le(b, i+4,i+4+len) : \"\";};\nvar __8lpp4 = function(b,i) { var len = __readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len) : \"\";};\nvar ___8lpp4 = __8lpp4;\nvar __double, ___double;\n__double = ___double = function(b, idx) { return read_double_le(b, idx);};\nvar is_buf = function is_buf_a(a) { return Array.isArray(a); };\n\nif(has_buf) {\n\t__utf16le = function(b,s,e) { if(!Buffer.isBuffer(b)) return ___utf16le(b,s,e); return b.toString('utf16le',s,e).replace(chr0,'')/*.replace(chr1,'!')*/; };\n\t__hexlify = function(b,s,l) { return Buffer.isBuffer(b) ? b.toString('hex',s,s+l) : ___hexlify(b,s,l); };\n\t__lpstr = function lpstr_b(b, i) { if(!Buffer.isBuffer(b)) return ___lpstr(b, i); var len = b.readUInt32LE(i); return len > 0 ? b.toString('utf8',i+4,i+4+len-1) : \"\";};\n\t__cpstr = function cpstr_b(b, i) { if(!Buffer.isBuffer(b)) return ___cpstr(b, i); var len = b.readUInt32LE(i); return len > 0 ? b.toString('utf8',i+4,i+4+len-1) : \"\";};\n\t__lpwstr = function lpwstr_b(b, i) { if(!Buffer.isBuffer(b)) return ___lpwstr(b, i); var len = 2*b.readUInt32LE(i); return b.toString('utf16le',i+4,i+4+len-1);};\n\t__lpp4 = function lpp4_b(b, i) { if(!Buffer.isBuffer(b)) return ___lpp4(b, i); var len = b.readUInt32LE(i); return b.toString('utf16le',i+4,i+4+len);};\n\t__8lpp4 = function lpp4_8b(b, i) { if(!Buffer.isBuffer(b)) return ___8lpp4(b, i); var len = b.readUInt32LE(i); return b.toString('utf8',i+4,i+4+len);};\n\t__utf8 = function utf8_b(b, s, e) { return (Buffer.isBuffer(b)) ? b.toString('utf8',s,e) : ___utf8(b,s,e); };\n\t__toBuffer = function(bufs) { return (bufs[0].length > 0 && Buffer.isBuffer(bufs[0][0])) ? Buffer.concat(bufs[0]) : ___toBuffer(bufs);};\n\tbconcat = function(bufs) { return Buffer.isBuffer(bufs[0]) ? Buffer.concat(bufs) : [].concat.apply([], bufs); };\n\t__double = function double_(b, i) { if(Buffer.isBuffer(b)) return b.readDoubleLE(i); return ___double(b,i); };\n\tis_buf = function is_buf_b(a) { return Buffer.isBuffer(a) || Array.isArray(a); };\n}\n\n/* from js-xls */\nif(typeof cptable !== 'undefined') {\n\t__utf16le = function(b,s,e) { return cptable.utils.decode(1200, b.slice(s,e)).replace(chr0, ''); };\n\t__utf8 = function(b,s,e) { return cptable.utils.decode(65001, b.slice(s,e)); };\n\t__lpstr = function(b,i) { var len = __readUInt32LE(b,i); return len > 0 ? cptable.utils.decode(current_ansi, b.slice(i+4, i+4+len-1)) : \"\";};\n\t__cpstr = function(b,i) { var len = __readUInt32LE(b,i); return len > 0 ? cptable.utils.decode(current_codepage, b.slice(i+4, i+4+len-1)) : \"\";};\n\t__lpwstr = function(b,i) { var len = 2*__readUInt32LE(b,i); return len > 0 ? cptable.utils.decode(1200, b.slice(i+4,i+4+len-1)) : \"\";};\n\t__lpp4 = function(b,i) { var len = __readUInt32LE(b,i); return len > 0 ? cptable.utils.decode(1200, b.slice(i+4,i+4+len)) : \"\";};\n\t__8lpp4 = function(b,i) { var len = __readUInt32LE(b,i); return len > 0 ? cptable.utils.decode(65001, b.slice(i+4,i+4+len)) : \"\";};\n}\n\nvar __readUInt8 = function(b, idx) { return b[idx]; };\nvar __readUInt16LE = function(b, idx) { return (b[idx+1]*(1<<8))+b[idx]; };\nvar __readInt16LE = function(b, idx) { var u = (b[idx+1]*(1<<8))+b[idx]; return (u < 0x8000) ? u : ((0xffff - u + 1) * -1); };\nvar __readUInt32LE = function(b, idx) { return b[idx+3]*(1<<24)+(b[idx+2]<<16)+(b[idx+1]<<8)+b[idx]; };\nvar __readInt32LE = function(b, idx) { return (b[idx+3]<<24)|(b[idx+2]<<16)|(b[idx+1]<<8)|b[idx]; };\nvar __readInt32BE = function(b, idx) { return (b[idx]<<24)|(b[idx+1]<<16)|(b[idx+2]<<8)|b[idx+3]; };\n\nfunction ReadShift(size, t) {\n\tvar o=\"\", oI, oR, oo=[], w, vv, i, loc;\n\tswitch(t) {\n\t\tcase 'dbcs':\n\t\t\tloc = this.l;\n\t\t\tif(has_buf && Buffer.isBuffer(this)) o = this.slice(this.l, this.l+2*size).toString(\"utf16le\");\n\t\t\telse for(i = 0; i < size; ++i) { o+=String.fromCharCode(__readUInt16LE(this, loc)); loc+=2; }\n\t\t\tsize *= 2;\n\t\t\tbreak;\n\n\t\tcase 'utf8': o = __utf8(this, this.l, this.l + size); break;\n\t\tcase 'utf16le': size *= 2; o = __utf16le(this, this.l, this.l + size); break;\n\n\t\tcase 'wstr':\n\t\t\tif(typeof cptable !== 'undefined') o = cptable.utils.decode(current_codepage, this.slice(this.l, this.l+2*size));\n\t\t\telse return ReadShift.call(this, size, 'dbcs');\n\t\t\tsize = 2 * size; break;\n\n\t\t/* [MS-OLEDS] 2.1.4 LengthPrefixedAnsiString */\n\t\tcase 'lpstr-ansi': o = __lpstr(this, this.l); size = 4 + __readUInt32LE(this, this.l); break;\n\t\tcase 'lpstr-cp': o = __cpstr(this, this.l); size = 4 + __readUInt32LE(this, this.l); break;\n\t\t/* [MS-OLEDS] 2.1.5 LengthPrefixedUnicodeString */\n\t\tcase 'lpwstr': o = __lpwstr(this, this.l); size = 4 + 2 * __readUInt32LE(this, this.l); break;\n\t\t/* [MS-OFFCRYPTO] 2.1.2 Length-Prefixed Padded Unicode String (UNICODE-LP-P4) */\n\t\tcase 'lpp4': size = 4 + __readUInt32LE(this, this.l); o = __lpp4(this, this.l); if(size & 0x02) size += 2; break;\n\t\t/* [MS-OFFCRYPTO] 2.1.3 Length-Prefixed UTF-8 String (UTF-8-LP-P4) */\n\t\tcase '8lpp4': size = 4 + __readUInt32LE(this, this.l); o = __8lpp4(this, this.l); if(size & 0x03) size += 4 - (size & 0x03); break;\n\n\t\tcase 'cstr': size = 0; o = \"\";\n\t\t\twhile((w=__readUInt8(this, this.l + size++))!==0) oo.push(_getchar(w));\n\t\t\to = oo.join(\"\"); break;\n\t\tcase '_wstr': size = 0; o = \"\";\n\t\t\twhile((w=__readUInt16LE(this,this.l +size))!==0){oo.push(_getchar(w));size+=2;}\n\t\t\tsize+=2; o = oo.join(\"\"); break;\n\n\t\t/* sbcs and dbcs support continue records in the SST way TODO codepages */\n\t\tcase 'dbcs-cont': o = \"\"; loc = this.l;\n\t\t\tfor(i = 0; i < size; ++i) {\n\t\t\t\tif(this.lens && this.lens.indexOf(loc) !== -1) {\n\t\t\t\t\tw = __readUInt8(this, loc);\n\t\t\t\t\tthis.l = loc + 1;\n\t\t\t\t\tvv = ReadShift.call(this, size-i, w ? 'dbcs-cont' : 'sbcs-cont');\n\t\t\t\t\treturn oo.join(\"\") + vv;\n\t\t\t\t}\n\t\t\t\too.push(_getchar(__readUInt16LE(this, loc)));\n\t\t\t\tloc+=2;\n\t\t\t} o = oo.join(\"\"); size *= 2; break;\n\n\t\tcase 'cpstr':\n\t\t\tif(typeof cptable !== 'undefined') {\n\t\t\t\to = cptable.utils.decode(current_codepage, this.slice(this.l, this.l + size));\n\t\t\t\tbreak;\n\t\t\t}\n\t\t/* falls through */\n\t\tcase 'sbcs-cont': o = \"\"; loc = this.l;\n\t\t\tfor(i = 0; i != size; ++i) {\n\t\t\t\tif(this.lens && this.lens.indexOf(loc) !== -1) {\n\t\t\t\t\tw = __readUInt8(this, loc);\n\t\t\t\t\tthis.l = loc + 1;\n\t\t\t\t\tvv = ReadShift.call(this, size-i, w ? 'dbcs-cont' : 'sbcs-cont');\n\t\t\t\t\treturn oo.join(\"\") + vv;\n\t\t\t\t}\n\t\t\t\too.push(_getchar(__readUInt8(this, loc)));\n\t\t\t\tloc+=1;\n\t\t\t} o = oo.join(\"\"); break;\n\n\t\tdefault:\n\tswitch(size) {\n\t\tcase 1: oI = __readUInt8(this, this.l); this.l++; return oI;\n\t\tcase 2: oI = (t === 'i' ? __readInt16LE : __readUInt16LE)(this, this.l); this.l += 2; return oI;\n\t\tcase 4: case -4:\n\t\t\tif(t === 'i' || ((this[this.l+3] & 0x80)===0)) { oI = ((size > 0) ? __readInt32LE : __readInt32BE)(this, this.l); this.l += 4; return oI; }\n\t\t\telse { oR = __readUInt32LE(this, this.l); this.l += 4; } return oR;\n\t\tcase 8: case -8:\n\t\t\tif(t === 'f') {\n\t\t\t\tif(size == 8) oR = __double(this, this.l);\n\t\t\t\telse oR = __double([this[this.l+7],this[this.l+6],this[this.l+5],this[this.l+4],this[this.l+3],this[this.l+2],this[this.l+1],this[this.l+0]], 0);\n\t\t\t\tthis.l += 8; return oR;\n\t\t\t} else size = 8;\n\t\t/* falls through */\n\t\tcase 16: o = __hexlify(this, this.l, size); break;\n\t}}\n\tthis.l+=size; return o;\n}\n\nvar __writeUInt32LE = function(b, val, idx) { b[idx] = (val & 0xFF); b[idx+1] = ((val >>> 8) & 0xFF); b[idx+2] = ((val >>> 16) & 0xFF); b[idx+3] = ((val >>> 24) & 0xFF); };\nvar __writeInt32LE = function(b, val, idx) { b[idx] = (val & 0xFF); b[idx+1] = ((val >> 8) & 0xFF); b[idx+2] = ((val >> 16) & 0xFF); b[idx+3] = ((val >> 24) & 0xFF); };\nvar __writeUInt16LE = function(b, val, idx) { b[idx] = (val & 0xFF); b[idx+1] = ((val >>> 8) & 0xFF); };\n\nfunction WriteShift(t, val, f) {\n\tvar size = 0, i = 0;\n\tif(f === 'dbcs') {\nfor(i = 0; i != val.length; ++i) __writeUInt16LE(this, val.charCodeAt(i), this.l + 2 * i);\n\t\tsize = 2 * val.length;\n\t} else if(f === 'sbcs') {\n\t\tif(typeof cptable !== 'undefined' && current_ansi == 874) {\n\t\t\t/* TODO: use tables directly, don't encode */\nfor(i = 0; i != val.length; ++i) {\n\t\t\t\tvar cppayload = cptable.utils.encode(current_ansi, val.charAt(i));\n\t\t\t\tthis[this.l + i] = cppayload[0];\n\t\t\t}\n\t\t} else {\nval = val.replace(/[^\\x00-\\x7F]/g, \"_\");\nfor(i = 0; i != val.length; ++i) this[this.l + i] = (val.charCodeAt(i) & 0xFF);\n\t\t}\n\t\tsize = val.length;\n\t} else if(f === 'hex') {\n\t\tfor(; i < t; ++i) {\nthis[this.l++] = (parseInt(val.slice(2*i, 2*i+2), 16)||0);\n\t\t} return this;\n\t} else if(f === 'utf16le') {\nvar end = Math.min(this.l + t, this.length);\n\t\t\tfor(i = 0; i < Math.min(val.length, t); ++i) {\n\t\t\t\tvar cc = val.charCodeAt(i);\n\t\t\t\tthis[this.l++] = (cc & 0xff);\n\t\t\t\tthis[this.l++] = (cc >> 8);\n\t\t\t}\n\t\t\twhile(this.l < end) this[this.l++] = 0;\n\t\t\treturn this;\n\t} else switch(t) {\n\t\tcase 1: size = 1; this[this.l] = val&0xFF; break;\n\t\tcase 2: size = 2; this[this.l] = val&0xFF; val >>>= 8; this[this.l+1] = val&0xFF; break;\n\t\tcase 3: size = 3; this[this.l] = val&0xFF; val >>>= 8; this[this.l+1] = val&0xFF; val >>>= 8; this[this.l+2] = val&0xFF; break;\n\t\tcase 4: size = 4; __writeUInt32LE(this, val, this.l); break;\n\t\tcase 8: size = 8; if(f === 'f') { write_double_le(this, val, this.l); break; }\n\t\t/* falls through */\n\t\tcase 16: break;\n\t\tcase -4: size = 4; __writeInt32LE(this, val, this.l); break;\n\t}\n\tthis.l += size; return this;\n}\n\nfunction CheckField(hexstr, fld) {\n\tvar m = __hexlify(this,this.l,hexstr.length>>1);\n\tif(m !== hexstr) throw new Error(fld + 'Expected ' + hexstr + ' saw ' + m);\n\tthis.l += hexstr.length>>1;\n}\n\nfunction prep_blob(blob, pos) {\n\tblob.l = pos;\n\tblob.read_shift = ReadShift;\n\tblob.chk = CheckField;\n\tblob.write_shift = WriteShift;\n}\n\nfunction parsenoop(blob, length) { blob.l += length; }\n\nfunction new_buf(sz) {\n\tvar o = new_raw_buf(sz);\n\tprep_blob(o, 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.1.4 Record */\nfunction recordhopper(data, cb, opts) {\n\tif(!data) return;\n\tvar tmpbyte, cntbyte, length;\n\tprep_blob(data, data.l || 0);\n\tvar L = data.length, RT = 0, tgt = 0;\n\twhile(data.l < L) {\n\t\tRT = data.read_shift(1);\n\t\tif(RT & 0x80) RT = (RT & 0x7F) + ((data.read_shift(1) & 0x7F)<<7);\n\t\tvar R = XLSBRecordEnum[RT] || XLSBRecordEnum[0xFFFF];\n\t\ttmpbyte = data.read_shift(1);\n\t\tlength = tmpbyte & 0x7F;\n\t\tfor(cntbyte = 1; cntbyte <4 && (tmpbyte & 0x80); ++cntbyte) length += ((tmpbyte = data.read_shift(1)) & 0x7F)<<(7*cntbyte);\n\t\ttgt = data.l + length;\n\t\tvar d = (R.f||parsenoop)(data, length, opts);\n\t\tdata.l = tgt;\n\t\tif(cb(d, R.n, RT)) return;\n\t}\n}\n\n/* control buffer usage for fixed-length buffers */\nfunction buf_array() {\n\tvar bufs = [], blksz = has_buf ? 256 : 2048;\n\tvar newblk = function ba_newblk(sz) {\n\t\tvar o = (new_buf(sz));\n\t\tprep_blob(o, 0);\n\t\treturn o;\n\t};\n\n\tvar curbuf = newblk(blksz);\n\n\tvar endbuf = function ba_endbuf() {\n\t\tif(!curbuf) return;\n\t\tif(curbuf.length > curbuf.l) { curbuf = curbuf.slice(0, curbuf.l); curbuf.l = curbuf.length; }\n\t\tif(curbuf.length > 0) bufs.push(curbuf);\n\t\tcurbuf = null;\n\t};\n\n\tvar next = function ba_next(sz) {\n\t\tif(curbuf && (sz < (curbuf.length - curbuf.l))) return curbuf;\n\t\tendbuf();\n\t\treturn (curbuf = newblk(Math.max(sz+1, blksz)));\n\t};\n\n\tvar end = function ba_end() {\n\t\tendbuf();\n\t\treturn __toBuffer([bufs]);\n\t};\n\n\tvar push = function ba_push(buf) { endbuf(); curbuf = buf; if(curbuf.l == null) curbuf.l = curbuf.length; next(blksz); };\n\n\treturn ({ next:next, push:push, end:end, _bufs:bufs });\n}\n\nfunction write_record(ba, type, payload, length) {\n\tvar t = +XLSBRE[type], l;\n\tif(isNaN(t)) return; // TODO: throw something here?\n\tif(!length) length = XLSBRecordEnum[t].p || (payload||[]).length || 0;\n\tl = 1 + (t >= 0x80 ? 1 : 0) + 1/* + length*/;\n\tif(length >= 0x80) ++l; if(length >= 0x4000) ++l; if(length >= 0x200000) ++l;\n\tvar o = ba.next(l);\n\tif(t <= 0x7F) o.write_shift(1, t);\n\telse {\n\t\to.write_shift(1, (t & 0x7F) + 0x80);\n\t\to.write_shift(1, (t >> 7));\n\t}\n\tfor(var i = 0; i != 4; ++i) {\n\t\tif(length >= 0x80) { o.write_shift(1, (length & 0x7F)+0x80); length >>= 7; }\n\t\telse { o.write_shift(1, length); break; }\n\t}\n\tif(length > 0 && is_buf(payload)) ba.push(payload);\n}\n/* XLS ranges enforced */\nfunction shift_cell_xls(cell, tgt, opts) {\n\tvar out = dup(cell);\n\tif(tgt.s) {\n\t\tif(out.cRel) out.c += tgt.s.c;\n\t\tif(out.rRel) out.r += tgt.s.r;\n\t} else {\n\t\tif(out.cRel) out.c += tgt.c;\n\t\tif(out.rRel) out.r += tgt.r;\n\t}\n\tif(!opts || opts.biff < 12) {\n\t\twhile(out.c >= 0x100) out.c -= 0x100;\n\t\twhile(out.r >= 0x10000) out.r -= 0x10000;\n\t}\n\treturn out;\n}\n\nfunction shift_range_xls(cell, range, opts) {\n\tvar out = dup(cell);\n\tout.s = shift_cell_xls(out.s, range.s, opts);\n\tout.e = shift_cell_xls(out.e, range.s, opts);\n\treturn out;\n}\n\nfunction encode_cell_xls(c, biff) {\n\tif(c.cRel && c.c < 0) { c = dup(c); while(c.c < 0) c.c += (biff > 8) ? 0x4000 : 0x100; }\n\tif(c.rRel && c.r < 0) { c = dup(c); while(c.r < 0) c.r += (biff > 8) ? 0x100000 : ((biff > 5) ? 0x10000 : 0x4000); }\n\tvar s = encode_cell(c);\n\tif(!c.cRel && c.cRel != null) s = fix_col(s);\n\tif(!c.rRel && c.rRel != null) s = fix_row(s);\n\treturn s;\n}\n\nfunction encode_range_xls(r, opts) {\n\tif(r.s.r == 0 && !r.s.rRel) {\n\t\tif(r.e.r == (opts.biff >= 12 ? 0xFFFFF : (opts.biff >= 8 ? 0x10000 : 0x4000)) && !r.e.rRel) {\n\t\t\treturn (r.s.cRel ? \"\" : \"$\") + encode_col(r.s.c) + \":\" + (r.e.cRel ? \"\" : \"$\") + encode_col(r.e.c);\n\t\t}\n\t}\n\tif(r.s.c == 0 && !r.s.cRel) {\n\t\tif(r.e.c == (opts.biff >= 12 ? 0x3FFF : 0xFF) && !r.e.cRel) {\n\t\t\treturn (r.s.rRel ? \"\" : \"$\") + encode_row(r.s.r) + \":\" + (r.e.rRel ? \"\" : \"$\") + encode_row(r.e.r);\n\t\t}\n\t}\n\treturn encode_cell_xls(r.s, opts.biff) + \":\" + encode_cell_xls(r.e, opts.biff);\n}\nvar OFFCRYPTO = {};\n\nvar make_offcrypto = function(O, _crypto) {\n\tvar crypto;\n\tif(typeof _crypto !== 'undefined') crypto = _crypto;\n\telse if(typeof require !== 'undefined') {\n\t\ttry { crypto = require('crypto'); }\n\t\tcatch(e) { crypto = null; }\n\t}\n\n\tO.rc4 = function(key, data) {\n\t\tvar S = new Array(256);\n\t\tvar c = 0, i = 0, j = 0, t = 0;\n\t\tfor(i = 0; i != 256; ++i) S[i] = i;\n\t\tfor(i = 0; i != 256; ++i) {\n\t\t\tj = (j + S[i] + (key[i%key.length]).charCodeAt(0))&255;\n\t\t\tt = S[i]; S[i] = S[j]; S[j] = t;\n\t\t}\n\t\t// $FlowIgnore\n\t\ti = j = 0; var out = new_raw_buf(data.length);\n\t\tfor(c = 0; c != data.length; ++c) {\n\t\t\ti = (i + 1)&255;\n\t\t\tj = (j + S[i])%256;\n\t\t\tt = S[i]; S[i] = S[j]; S[j] = t;\n\t\t\tout[c] = (data[c] ^ S[(S[i]+S[j])&255]);\n\t\t}\n\t\treturn out;\n\t};\n\n\tO.md5 = function(hex) {\n\t\tif(!crypto) throw new Error(\"Unsupported crypto\");\n\t\treturn crypto.createHash('md5').update(hex).digest('hex');\n\t};\n};\n/*global crypto:true */\nmake_offcrypto(OFFCRYPTO, typeof crypto !== \"undefined\" ? crypto : undefined);\n\nfunction decode_row(rowstr) { return parseInt(unfix_row(rowstr),10) - 1; }\nfunction encode_row(row) { return \"\" + (row + 1); }\nfunction fix_row(cstr) { return cstr.replace(/([A-Z]|^)(\\d+)$/,\"$1$$$2\"); }\nfunction unfix_row(cstr) { return cstr.replace(/\\$(\\d+)$/,\"$1\"); }\n\nfunction decode_col(colstr) { var c = unfix_col(colstr), d = 0, i = 0; for(; i !== c.length; ++i) d = 26*d + c.charCodeAt(i) - 64; return d - 1; }\nfunction encode_col(col) { if(col < 0) throw new Error(\"invalid column \" + col); var s=\"\"; for(++col; col; col=Math.floor((col-1)/26)) s = String.fromCharCode(((col-1)%26) + 65) + s; return s; }\nfunction fix_col(cstr) { return cstr.replace(/^([A-Z])/,\"$$$1\"); }\nfunction unfix_col(cstr) { return cstr.replace(/^\\$([A-Z])/,\"$1\"); }\n\nfunction split_cell(cstr) { return cstr.replace(/(\\$?[A-Z]*)(\\$?\\d*)/,\"$1,$2\").split(\",\"); }\n//function decode_cell(cstr) { var splt = split_cell(cstr); return { c:decode_col(splt[0]), r:decode_row(splt[1]) }; }\nfunction decode_cell(cstr) {\n\tvar R = 0, C = 0;\n\tfor(var i = 0; i < cstr.length; ++i) {\n\t\tvar cc = cstr.charCodeAt(i);\n\t\tif(cc >= 48 && cc <= 57) R = 10 * R + (cc - 48);\n\t\telse if(cc >= 65 && cc <= 90) C = 26 * C + (cc - 64);\n\t}\n\treturn { c: C - 1, r:R - 1 };\n}\n//function encode_cell(cell) { return encode_col(cell.c) + encode_row(cell.r); }\nfunction encode_cell(cell) {\n\tvar col = cell.c + 1;\n\tvar s=\"\";\n\tfor(; col; col=((col-1)/26)|0) s = String.fromCharCode(((col-1)%26) + 65) + s;\n\treturn s + (cell.r + 1);\n}\nfunction decode_range(range) {\n\tvar idx = range.indexOf(\":\");\n\tif(idx == -1) return { s: decode_cell(range), e: decode_cell(range) };\n\treturn { s: decode_cell(range.slice(0, idx)), e: decode_cell(range.slice(idx + 1)) };\n}\nfunction encode_range(cs,ce) {\n\tif(typeof ce === 'undefined' || typeof ce === 'number') {\nreturn encode_range(cs.s, cs.e);\n\t}\nif(typeof cs !== 'string') cs = encode_cell((cs));\n\tif(typeof ce !== 'string') ce = encode_cell((ce));\nreturn cs == ce ? cs : cs + \":\" + ce;\n}\n\nfunction safe_decode_range(range) {\n\tvar o = {s:{c:0,r:0},e:{c:0,r:0}};\n\tvar idx = 0, i = 0, cc = 0;\n\tvar len = range.length;\n\tfor(idx = 0; i < len; ++i) {\n\t\tif((cc=range.charCodeAt(i)-64) < 1 || cc > 26) break;\n\t\tidx = 26*idx + cc;\n\t}\n\to.s.c = --idx;\n\n\tfor(idx = 0; i < len; ++i) {\n\t\tif((cc=range.charCodeAt(i)-48) < 0 || cc > 9) break;\n\t\tidx = 10*idx + cc;\n\t}\n\to.s.r = --idx;\n\n\tif(i === len || range.charCodeAt(++i) === 58) { o.e.c=o.s.c; o.e.r=o.s.r; return o; }\n\n\tfor(idx = 0; i != len; ++i) {\n\t\tif((cc=range.charCodeAt(i)-64) < 1 || cc > 26) break;\n\t\tidx = 26*idx + cc;\n\t}\n\to.e.c = --idx;\n\n\tfor(idx = 0; i != len; ++i) {\n\t\tif((cc=range.charCodeAt(i)-48) < 0 || cc > 9) break;\n\t\tidx = 10*idx + cc;\n\t}\n\to.e.r = --idx;\n\treturn o;\n}\n\nfunction safe_format_cell(cell, v) {\n\tvar q = (cell.t == 'd' && v instanceof Date);\n\tif(cell.z != null) try { return (cell.w = SSF.format(cell.z, q ? datenum(v) : v)); } catch(e) { }\n\ttry { return (cell.w = SSF.format((cell.XF||{}).numFmtId||(q ? 14 : 0), q ? datenum(v) : v)); } catch(e) { return ''+v; }\n}\n\nfunction format_cell(cell, v, o) {\n\tif(cell == null || cell.t == null || cell.t == 'z') return \"\";\n\tif(cell.w !== undefined) return cell.w;\n\tif(cell.t == 'd' && !cell.z && o && o.dateNF) cell.z = o.dateNF;\n\tif(v == undefined) return safe_format_cell(cell, cell.v);\n\treturn safe_format_cell(cell, v);\n}\n\nfunction sheet_to_workbook(sheet, opts) {\n\tvar n = opts && opts.sheet ? opts.sheet : \"Sheet1\";\n\tvar sheets = {}; sheets[n] = sheet;\n\treturn { SheetNames: [n], Sheets: sheets };\n}\n\nfunction sheet_add_aoa(_ws, data, opts) {\n\tvar o = opts || {};\n\tvar dense = _ws ? Array.isArray(_ws) : o.dense;\n\tif(DENSE != null && dense == null) dense = DENSE;\n\tvar ws = _ws || (dense ? ([]) : ({}));\n\tvar _R = 0, _C = 0;\n\tif(ws && o.origin != null) {\n\t\tif(typeof o.origin == 'number') _R = o.origin;\n\t\telse {\n\t\t\tvar _origin = typeof o.origin == \"string\" ? decode_cell(o.origin) : o.origin;\n\t\t\t_R = _origin.r; _C = _origin.c;\n\t\t}\n\t\tif(!ws[\"!ref\"]) ws[\"!ref\"] = \"A1:A1\";\n\t}\n\tvar range = ({s: {c:10000000, r:10000000}, e: {c:0, r:0}});\n\tif(ws['!ref']) {\n\t\tvar _range = safe_decode_range(ws['!ref']);\n\t\trange.s.c = _range.s.c;\n\t\trange.s.r = _range.s.r;\n\t\trange.e.c = Math.max(range.e.c, _range.e.c);\n\t\trange.e.r = Math.max(range.e.r, _range.e.r);\n\t\tif(_R == -1) range.e.r = _R = _range.e.r + 1;\n\t}\n\tfor(var R = 0; R != data.length; ++R) {\n\t\tif(!data[R]) continue;\n\t\tif(!Array.isArray(data[R])) throw new Error(\"aoa_to_sheet expects an array of arrays\");\n\t\tfor(var C = 0; C != data[R].length; ++C) {\n\t\t\tif(typeof data[R][C] === 'undefined') continue;\n\t\t\tvar cell = ({v: data[R][C] });\n\t\t\tvar __R = _R + R, __C = _C + C;\n\t\t\tif(range.s.r > __R) range.s.r = __R;\n\t\t\tif(range.s.c > __C) range.s.c = __C;\n\t\t\tif(range.e.r < __R) range.e.r = __R;\n\t\t\tif(range.e.c < __C) range.e.c = __C;\n\t\t\tif(data[R][C] && typeof data[R][C] === 'object' && !Array.isArray(data[R][C]) && !(data[R][C] instanceof Date)) cell = data[R][C];\n\t\t\telse {\n\t\t\t\tif(Array.isArray(cell.v)) { cell.f = data[R][C][1]; cell.v = cell.v[0]; }\n\t\t\t\tif(cell.v === null) { if(cell.f) cell.t = 'n'; else if(!o.sheetStubs) continue; else cell.t = 'z'; }\n\t\t\t\telse if(typeof cell.v === 'number') cell.t = 'n';\n\t\t\t\telse if(typeof cell.v === 'boolean') cell.t = 'b';\n\t\t\t\telse if(cell.v instanceof Date) {\n\t\t\t\t\tcell.z = o.dateNF || SSF._table[14];\n\t\t\t\t\tif(o.cellDates) { cell.t = 'd'; cell.w = SSF.format(cell.z, datenum(cell.v)); }\n\t\t\t\t\telse { cell.t = 'n'; cell.v = datenum(cell.v); cell.w = SSF.format(cell.z, cell.v); }\n\t\t\t\t}\n\t\t\t\telse cell.t = 's';\n\t\t\t}\n\t\t\tif(dense) {\n\t\t\t\tif(!ws[__R]) ws[__R] = [];\n\t\t\t\tif(ws[__R][__C] && ws[__R][__C].z) cell.z = ws[__R][__C].z;\n\t\t\t\tws[__R][__C] = cell;\n\t\t\t} else {\n\t\t\t\tvar cell_ref = encode_cell(({c:__C,r:__R}));\n\t\t\t\tif(ws[cell_ref] && ws[cell_ref].z) cell.z = ws[cell_ref].z;\n\t\t\t\tws[cell_ref] = cell;\n\t\t\t}\n\t\t}\n\t}\n\tif(range.s.c < 10000000) ws['!ref'] = encode_range(range);\n\treturn ws;\n}\nfunction aoa_to_sheet(data, opts) { return sheet_add_aoa(null, data, opts); }\n\nfunction write_UInt32LE(x, o) {\n\tif (!o) o = new_buf(4);\n\to.write_shift(4, x);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.168 */\nfunction parse_XLWideString(data) {\n\tvar cchCharacters = data.read_shift(4);\n\treturn cchCharacters === 0 ? \"\" : data.read_shift(cchCharacters, 'dbcs');\n}\nfunction write_XLWideString(data, o) {\n\tvar _null = false; if (o == null) { _null = true; o = new_buf(4 + 2 * data.length); }\n\to.write_shift(4, data.length);\n\tif (data.length > 0) o.write_shift(0, data, 'dbcs');\n\treturn _null ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.5.91 */\n//function parse_LPWideString(data) {\n//\tvar cchCharacters = data.read_shift(2);\n//\treturn cchCharacters === 0 ? \"\" : data.read_shift(cchCharacters, \"utf16le\");\n//}\n\n/* [MS-XLSB] 2.5.143 */\nfunction parse_StrRun(data) {\n\treturn { ich: data.read_shift(2), ifnt: data.read_shift(2) };\n}\nfunction write_StrRun(run, o) {\n\tif (!o) o = new_buf(4);\n\to.write_shift(2, run.ich || 0);\n\to.write_shift(2, run.ifnt || 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.121 */\nfunction parse_RichStr(data, length) {\n\tvar start = data.l;\n\tvar flags = data.read_shift(1);\n\tvar str = parse_XLWideString(data);\n\tvar rgsStrRun = [];\n\tvar z = ({ t: str, h: str });\n\tif ((flags & 1) !== 0) { /* fRichStr */\n\t\t/* TODO: formatted string */\n\t\tvar dwSizeStrRun = data.read_shift(4);\n\t\tfor (var i = 0; i != dwSizeStrRun; ++i) rgsStrRun.push(parse_StrRun(data));\n\t\tz.r = rgsStrRun;\n\t}\n\telse z.r = [{ ich: 0, ifnt: 0 }];\n\t//if((flags & 2) !== 0) { /* fExtStr */\n\t//\t/* TODO: phonetic string */\n\t//}\n\tdata.l = start + length;\n\treturn z;\n}\nfunction write_RichStr(str, o) {\n\t/* TODO: formatted string */\n\tvar _null = false; if (o == null) { _null = true; o = new_buf(15 + 4 * str.t.length); }\n\to.write_shift(1, 0);\n\twrite_XLWideString(str.t, o);\n\treturn _null ? o.slice(0, o.l) : o;\n}\n/* [MS-XLSB] 2.4.328 BrtCommentText (RichStr w/1 run) */\nvar parse_BrtCommentText = parse_RichStr;\nfunction write_BrtCommentText(str, o) {\n\t/* TODO: formatted string */\n\tvar _null = false; if (o == null) { _null = true; o = new_buf(23 + 4 * str.t.length); }\n\to.write_shift(1, 1);\n\twrite_XLWideString(str.t, o);\n\to.write_shift(4, 1);\n\twrite_StrRun({ ich: 0, ifnt: 0 }, o);\n\treturn _null ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.5.9 */\nfunction parse_XLSBCell(data) {\n\tvar col = data.read_shift(4);\n\tvar iStyleRef = data.read_shift(2);\n\tiStyleRef += data.read_shift(1) << 16;\n\tdata.l++; //var fPhShow = data.read_shift(1);\n\treturn { c: col, iStyleRef: iStyleRef };\n}\nfunction write_XLSBCell(cell, o) {\n\tif (o == null) o = new_buf(8);\n\to.write_shift(-4, cell.c);\n\to.write_shift(3, cell.iStyleRef || cell.s);\n\to.write_shift(1, 0); /* fPhShow */\n\treturn o;\n}\n\n\n/* [MS-XLSB] 2.5.21 */\nvar parse_XLSBCodeName = parse_XLWideString;\nvar write_XLSBCodeName = write_XLWideString;\n\n/* [MS-XLSB] 2.5.166 */\nfunction parse_XLNullableWideString(data) {\n\tvar cchCharacters = data.read_shift(4);\n\treturn cchCharacters === 0 || cchCharacters === 0xFFFFFFFF ? \"\" : data.read_shift(cchCharacters, 'dbcs');\n}\nfunction write_XLNullableWideString(data, o) {\n\tvar _null = false; if (o == null) { _null = true; o = new_buf(127); }\n\to.write_shift(4, data.length > 0 ? data.length : 0xFFFFFFFF);\n\tif (data.length > 0) o.write_shift(0, data, 'dbcs');\n\treturn _null ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.5.165 */\nvar parse_XLNameWideString = parse_XLWideString;\n//var write_XLNameWideString = write_XLWideString;\n\n/* [MS-XLSB] 2.5.114 */\nvar parse_RelID = parse_XLNullableWideString;\nvar write_RelID = write_XLNullableWideString;\n\n\n/* [MS-XLS] 2.5.217 ; [MS-XLSB] 2.5.122 */\nfunction parse_RkNumber(data) {\n\tvar b = data.slice(data.l, data.l + 4);\n\tvar fX100 = (b[0] & 1), fInt = (b[0] & 2);\n\tdata.l += 4;\n\tb[0] &= 0xFC; // b[0] &= ~3;\n\tvar RK = fInt === 0 ? __double([0, 0, 0, 0, b[0], b[1], b[2], b[3]], 0) : __readInt32LE(b, 0) >> 2;\n\treturn fX100 ? (RK / 100) : RK;\n}\nfunction write_RkNumber(data, o) {\n\tif (o == null) o = new_buf(4);\n\tvar fX100 = 0, fInt = 0, d100 = data * 100;\n\tif ((data == (data | 0)) && (data >= -(1 << 29)) && (data < (1 << 29))) { fInt = 1; }\n\telse if ((d100 == (d100 | 0)) && (d100 >= -(1 << 29)) && (d100 < (1 << 29))) { fInt = 1; fX100 = 1; }\n\tif (fInt) o.write_shift(-4, ((fX100 ? d100 : data) << 2) + (fX100 + 2));\n\telse throw new Error(\"unsupported RkNumber \" + data); // TODO\n}\n\n\n/* [MS-XLSB] 2.5.117 RfX */\nfunction parse_RfX(data ) {\n\tvar cell = ({ s: {}, e: {} });\n\tcell.s.r = data.read_shift(4);\n\tcell.e.r = data.read_shift(4);\n\tcell.s.c = data.read_shift(4);\n\tcell.e.c = data.read_shift(4);\n\treturn cell;\n}\nfunction write_RfX(r, o) {\n\tif (!o) o = new_buf(16);\n\to.write_shift(4, r.s.r);\n\to.write_shift(4, r.e.r);\n\to.write_shift(4, r.s.c);\n\to.write_shift(4, r.e.c);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.153 UncheckedRfX */\nvar parse_UncheckedRfX = parse_RfX;\nvar write_UncheckedRfX = write_RfX;\n\n/* [MS-XLSB] 2.5.155 UncheckedSqRfX */\n//function parse_UncheckedSqRfX(data) {\n//\tvar cnt = data.read_shift(4);\n//\tvar out = [];\n//\tfor(var i = 0; i < cnt; ++i) {\n//\t\tvar rng = parse_UncheckedRfX(data);\n//\t\tout.push(encode_range(rng));\n//\t}\n//\treturn out.join(\",\");\n//}\n//function write_UncheckedSqRfX(sqrfx) {\n//\tvar parts = sqrfx.split(/\\s*,\\s*/);\n//\tvar o = new_buf(4); o.write_shift(4, parts.length);\n//\tvar out = [o];\n//\tparts.forEach(function(rng) {\n//\t\tout.push(write_UncheckedRfX(safe_decode_range(rng)));\n//\t});\n//\treturn bconcat(out);\n//}\n\n/* [MS-XLS] 2.5.342 ; [MS-XLSB] 2.5.171 */\n/* TODO: error checking, NaN and Infinity values are not valid Xnum */\nfunction parse_Xnum(data) { return data.read_shift(8, 'f'); }\nfunction write_Xnum(data, o) { return (o || new_buf(8)).write_shift(8, data, 'f'); }\n\n/* [MS-XLSB] 2.4.324 BrtColor */\nfunction parse_BrtColor(data) {\n\tvar out = {};\n\tvar d = data.read_shift(1);\n\n\t//var fValidRGB = d & 1;\n\tvar xColorType = d >>> 1;\n\n\tvar index = data.read_shift(1);\n\tvar nTS = data.read_shift(2, 'i');\n\tvar bR = data.read_shift(1);\n\tvar bG = data.read_shift(1);\n\tvar bB = data.read_shift(1);\n\tdata.l++; //var bAlpha = data.read_shift(1);\n\n\tswitch (xColorType) {\n\t\tcase 0: out.auto = 1; break;\n\t\tcase 1:\n\t\t\tout.index = index;\n\t\t\tvar icv = XLSIcv[index];\n\t\t\t/* automatic pseudo index 81 */\n\t\t\tif (icv) out.rgb = rgb2Hex(icv);\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\t/* if(!fValidRGB) throw new Error(\"invalid\"); */\n\t\t\tout.rgb = rgb2Hex([bR, bG, bB]);\n\t\t\tbreak;\n\t\tcase 3: out.theme = index; break;\n\t}\n\tif (nTS != 0) out.tint = nTS > 0 ? nTS / 32767 : nTS / 32768;\n\n\treturn out;\n}\nfunction write_BrtColor(color, o) {\n\tif (!o) o = new_buf(8);\n\tif (!color || color.auto) { o.write_shift(4, 0); o.write_shift(4, 0); return o; }\n\tif (color.index != null) {\n\t\to.write_shift(1, 0x02);\n\t\to.write_shift(1, color.index);\n\t} else if (color.theme != null) {\n\t\to.write_shift(1, 0x06);\n\t\to.write_shift(1, color.theme);\n\t} else {\n\t\to.write_shift(1, 0x05);\n\t\to.write_shift(1, 0);\n\t}\n\tvar nTS = color.tint || 0;\n\tif (nTS > 0) nTS *= 32767;\n\telse if (nTS < 0) nTS *= 32768;\n\to.write_shift(2, nTS);\n\tif (!color.rgb || color.theme != null) {\n\t\to.write_shift(2, 0);\n\t\to.write_shift(1, 0);\n\t\to.write_shift(1, 0);\n\t} else {\n\t\tvar rgb = (color.rgb || 'FFFFFF');\n\t\tif (typeof rgb == 'number') rgb = (\"000000\" + rgb.toString(16)).slice(-6);\n\t\to.write_shift(1, parseInt(rgb.slice(0, 2), 16));\n\t\to.write_shift(1, parseInt(rgb.slice(2, 4), 16));\n\t\to.write_shift(1, parseInt(rgb.slice(4, 6), 16));\n\t\to.write_shift(1, 0xFF);\n\t}\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.52 */\nfunction parse_FontFlags(data) {\n\tvar d = data.read_shift(1);\n\tdata.l++;\n\tvar out = {\n\t\tfBold: d & 0x01,\n\t\tfItalic: d & 0x02,\n\t\tfUnderline: d & 0x04,\n\t\tfStrikeout: d & 0x08,\n\t\tfOutline: d & 0x10,\n\t\tfShadow: d & 0x20,\n\t\tfCondense: d & 0x40,\n\t\tfExtend: d & 0x80\n\t};\n\treturn out;\n}\nfunction write_FontFlags(font, o) {\n\tif (!o) o = new_buf(2);\n\tvar grbit =\n\t\t(font.italic ? 0x02 : 0) |\n\t\t(font.strike ? 0x08 : 0) |\n\t\t(font.outline ? 0x10 : 0) |\n\t\t(font.shadow ? 0x20 : 0) |\n\t\t(font.condense ? 0x40 : 0) |\n\t\t(font.extend ? 0x80 : 0);\n\to.write_shift(1, grbit);\n\to.write_shift(1, 0);\n\treturn o;\n}\n\n/* [MS-OLEDS] 2.3.1 and 2.3.2 */\nfunction parse_ClipboardFormatOrString(o, w) {\n\t// $FlowIgnore\n\tvar ClipFmt = { 2: \"BITMAP\", 3: \"METAFILEPICT\", 8: \"DIB\", 14: \"ENHMETAFILE\" };\n\tvar m = o.read_shift(4);\n\tswitch (m) {\n\t\tcase 0x00000000: return \"\";\n\t\tcase 0xffffffff: case 0xfffffffe: return ClipFmt[o.read_shift(4)] || \"\";\n\t}\n\tif (m > 0x190) throw new Error(\"Unsupported Clipboard: \" + m.toString(16));\n\to.l -= 4;\n\treturn o.read_shift(0, w == 1 ? \"lpstr\" : \"lpwstr\");\n}\nfunction parse_ClipboardFormatOrAnsiString(o) { return parse_ClipboardFormatOrString(o, 1); }\nfunction parse_ClipboardFormatOrUnicodeString(o) { return parse_ClipboardFormatOrString(o, 2); }\n\n/* [MS-OLEPS] 2.2 PropertyType */\n//var VT_EMPTY = 0x0000;\n//var VT_NULL = 0x0001;\nvar VT_I2 = 0x0002;\nvar VT_I4 = 0x0003;\n//var VT_R4 = 0x0004;\n//var VT_R8 = 0x0005;\n//var VT_CY = 0x0006;\n//var VT_DATE = 0x0007;\n//var VT_BSTR = 0x0008;\n//var VT_ERROR = 0x000A;\nvar VT_BOOL = 0x000B;\nvar VT_VARIANT = 0x000C;\n//var VT_DECIMAL = 0x000E;\n//var VT_I1 = 0x0010;\n//var VT_UI1 = 0x0011;\n//var VT_UI2 = 0x0012;\nvar VT_UI4 = 0x0013;\n//var VT_I8 = 0x0014;\n//var VT_UI8 = 0x0015;\n//var VT_INT = 0x0016;\n//var VT_UINT = 0x0017;\nvar VT_LPSTR = 0x001E;\n//var VT_LPWSTR = 0x001F;\nvar VT_FILETIME = 0x0040;\nvar VT_BLOB = 0x0041;\n//var VT_STREAM = 0x0042;\n//var VT_STORAGE = 0x0043;\n//var VT_STREAMED_Object = 0x0044;\n//var VT_STORED_Object = 0x0045;\n//var VT_BLOB_Object = 0x0046;\nvar VT_CF = 0x0047;\n//var VT_CLSID = 0x0048;\n//var VT_VERSIONED_STREAM = 0x0049;\nvar VT_VECTOR = 0x1000;\n//var VT_ARRAY = 0x2000;\n\nvar VT_STRING = 0x0050; // 2.3.3.1.11 VtString\nvar VT_USTR = 0x0051; // 2.3.3.1.12 VtUnalignedString\nvar VT_CUSTOM = [VT_STRING, VT_USTR];\n\n/* [MS-OSHARED] 2.3.3.2.2.1 Document Summary Information PIDDSI */\nvar DocSummaryPIDDSI = {\n0x01: { n: 'CodePage', t: VT_I2 },\n0x02: { n: 'Category', t: VT_STRING },\n0x03: { n: 'PresentationFormat', t: VT_STRING },\n0x04: { n: 'ByteCount', t: VT_I4 },\n0x05: { n: 'LineCount', t: VT_I4 },\n0x06: { n: 'ParagraphCount', t: VT_I4 },\n0x07: { n: 'SlideCount', t: VT_I4 },\n0x08: { n: 'NoteCount', t: VT_I4 },\n0x09: { n: 'HiddenCount', t: VT_I4 },\n0x0a: { n: 'MultimediaClipCount', t: VT_I4 },\n0x0b: { n: 'ScaleCrop', t: VT_BOOL },\n0x0c: { n: 'HeadingPairs', t: VT_VECTOR | VT_VARIANT },\n0x0d: { n: 'TitlesOfParts', t: VT_VECTOR | VT_LPSTR },\n0x0e: { n: 'Manager', t: VT_STRING },\n0x0f: { n: 'Company', t: VT_STRING },\n0x10: { n: 'LinksUpToDate', t: VT_BOOL },\n0x11: { n: 'CharacterCount', t: VT_I4 },\n0x13: { n: 'SharedDoc', t: VT_BOOL },\n0x16: { n: 'HyperlinksChanged', t: VT_BOOL },\n0x17: { n: 'AppVersion', t: VT_I4, p: 'version' },\n0x18: { n: 'DigSig', t: VT_BLOB },\n0x1A: { n: 'ContentType', t: VT_STRING },\n0x1B: { n: 'ContentStatus', t: VT_STRING },\n0x1C: { n: 'Language', t: VT_STRING },\n0x1D: { n: 'Version', t: VT_STRING },\n0xFF: {}\n};\n\n/* [MS-OSHARED] 2.3.3.2.1.1 Summary Information Property Set PIDSI */\nvar SummaryPIDSI = {\n0x01: { n: 'CodePage', t: VT_I2 },\n0x02: { n: 'Title', t: VT_STRING },\n0x03: { n: 'Subject', t: VT_STRING },\n0x04: { n: 'Author', t: VT_STRING },\n0x05: { n: 'Keywords', t: VT_STRING },\n0x06: { n: 'Comments', t: VT_STRING },\n0x07: { n: 'Template', t: VT_STRING },\n0x08: { n: 'LastAuthor', t: VT_STRING },\n0x09: { n: 'RevNumber', t: VT_STRING },\n0x0A: { n: 'EditTime', t: VT_FILETIME },\n0x0B: { n: 'LastPrinted', t: VT_FILETIME },\n0x0C: { n: 'CreatedDate', t: VT_FILETIME },\n0x0D: { n: 'ModifiedDate', t: VT_FILETIME },\n0x0E: { n: 'PageCount', t: VT_I4 },\n0x0F: { n: 'WordCount', t: VT_I4 },\n0x10: { n: 'CharCount', t: VT_I4 },\n0x11: { n: 'Thumbnail', t: VT_CF },\n0x12: { n: 'Application', t: VT_STRING },\n0x13: { n: 'DocSecurity', t: VT_I4 },\n0xFF: {}\n};\n\n/* [MS-OLEPS] 2.18 */\nvar SpecialProperties = {\n0x80000000: { n: 'Locale', t: VT_UI4 },\n0x80000003: { n: 'Behavior', t: VT_UI4 },\n0x72627262: {}\n};\n\n(function() {\n\tfor(var y in SpecialProperties) if(Object.prototype.hasOwnProperty.call(SpecialProperties, y))\n\tDocSummaryPIDDSI[y] = SummaryPIDSI[y] = SpecialProperties[y];\n})();\n\nvar DocSummaryRE = evert_key(DocSummaryPIDDSI, \"n\");\nvar SummaryRE = evert_key(SummaryPIDSI, \"n\");\n\n/* [MS-XLS] 2.4.63 Country/Region codes */\nvar CountryEnum = {\n0x0001: \"US\", // United States\n0x0002: \"CA\", // Canada\n0x0003: \"\", // Latin America (except Brazil)\n0x0007: \"RU\", // Russia\n0x0014: \"EG\", // Egypt\n0x001E: \"GR\", // Greece\n0x001F: \"NL\", // Netherlands\n0x0020: \"BE\", // Belgium\n0x0021: \"FR\", // France\n0x0022: \"ES\", // Spain\n0x0024: \"HU\", // Hungary\n0x0027: \"IT\", // Italy\n0x0029: \"CH\", // Switzerland\n0x002B: \"AT\", // Austria\n0x002C: \"GB\", // United Kingdom\n0x002D: \"DK\", // Denmark\n0x002E: \"SE\", // Sweden\n0x002F: \"NO\", // Norway\n0x0030: \"PL\", // Poland\n0x0031: \"DE\", // Germany\n0x0034: \"MX\", // Mexico\n0x0037: \"BR\", // Brazil\n0x003d: \"AU\", // Australia\n0x0040: \"NZ\", // New Zealand\n0x0042: \"TH\", // Thailand\n0x0051: \"JP\", // Japan\n0x0052: \"KR\", // Korea\n0x0054: \"VN\", // Viet Nam\n0x0056: \"CN\", // China\n0x005A: \"TR\", // Turkey\n0x0069: \"JS\", // Ramastan\n0x00D5: \"DZ\", // Algeria\n0x00D8: \"MA\", // Morocco\n0x00DA: \"LY\", // Libya\n0x015F: \"PT\", // Portugal\n0x0162: \"IS\", // Iceland\n0x0166: \"FI\", // Finland\n0x01A4: \"CZ\", // Czech Republic\n0x0376: \"TW\", // Taiwan\n0x03C1: \"LB\", // Lebanon\n0x03C2: \"JO\", // Jordan\n0x03C3: \"SY\", // Syria\n0x03C4: \"IQ\", // Iraq\n0x03C5: \"KW\", // Kuwait\n0x03C6: \"SA\", // Saudi Arabia\n0x03CB: \"AE\", // United Arab Emirates\n0x03CC: \"IL\", // Israel\n0x03CE: \"QA\", // Qatar\n0x03D5: \"IR\", // Iran\n0xFFFF: \"US\" // United States\n};\n\n/* [MS-XLS] 2.5.127 */\nvar XLSFillPattern = [\n\tnull,\n\t'solid',\n\t'mediumGray',\n\t'darkGray',\n\t'lightGray',\n\t'darkHorizontal',\n\t'darkVertical',\n\t'darkDown',\n\t'darkUp',\n\t'darkGrid',\n\t'darkTrellis',\n\t'lightHorizontal',\n\t'lightVertical',\n\t'lightDown',\n\t'lightUp',\n\t'lightGrid',\n\t'lightTrellis',\n\t'gray125',\n\t'gray0625'\n];\n\nfunction rgbify(arr) { return arr.map(function(x) { return [(x>>16)&255,(x>>8)&255,x&255]; }); }\n\n/* [MS-XLS] 2.5.161 */\n/* [MS-XLSB] 2.5.75 Icv */\nvar _XLSIcv = rgbify([\n\t/* Color Constants */\n\t0x000000,\n\t0xFFFFFF,\n\t0xFF0000,\n\t0x00FF00,\n\t0x0000FF,\n\t0xFFFF00,\n\t0xFF00FF,\n\t0x00FFFF,\n\n\t/* Overridable Defaults */\n\t0x000000,\n\t0xFFFFFF,\n\t0xFF0000,\n\t0x00FF00,\n\t0x0000FF,\n\t0xFFFF00,\n\t0xFF00FF,\n\t0x00FFFF,\n\n\t0x800000,\n\t0x008000,\n\t0x000080,\n\t0x808000,\n\t0x800080,\n\t0x008080,\n\t0xC0C0C0,\n\t0x808080,\n\t0x9999FF,\n\t0x993366,\n\t0xFFFFCC,\n\t0xCCFFFF,\n\t0x660066,\n\t0xFF8080,\n\t0x0066CC,\n\t0xCCCCFF,\n\n\t0x000080,\n\t0xFF00FF,\n\t0xFFFF00,\n\t0x00FFFF,\n\t0x800080,\n\t0x800000,\n\t0x008080,\n\t0x0000FF,\n\t0x00CCFF,\n\t0xCCFFFF,\n\t0xCCFFCC,\n\t0xFFFF99,\n\t0x99CCFF,\n\t0xFF99CC,\n\t0xCC99FF,\n\t0xFFCC99,\n\n\t0x3366FF,\n\t0x33CCCC,\n\t0x99CC00,\n\t0xFFCC00,\n\t0xFF9900,\n\t0xFF6600,\n\t0x666699,\n\t0x969696,\n\t0x003366,\n\t0x339966,\n\t0x003300,\n\t0x333300,\n\t0x993300,\n\t0x993366,\n\t0x333399,\n\t0x333333,\n\n\t/* Other entries to appease BIFF8/12 */\n\t0xFFFFFF, /* 0x40 icvForeground ?? */\n\t0x000000, /* 0x41 icvBackground ?? */\n\t0x000000, /* 0x42 icvFrame ?? */\n\t0x000000, /* 0x43 icv3D ?? */\n\t0x000000, /* 0x44 icv3DText ?? */\n\t0x000000, /* 0x45 icv3DHilite ?? */\n\t0x000000, /* 0x46 icv3DShadow ?? */\n\t0x000000, /* 0x47 icvHilite ?? */\n\t0x000000, /* 0x48 icvCtlText ?? */\n\t0x000000, /* 0x49 icvCtlScrl ?? */\n\t0x000000, /* 0x4A icvCtlInv ?? */\n\t0x000000, /* 0x4B icvCtlBody ?? */\n\t0x000000, /* 0x4C icvCtlFrame ?? */\n\t0x000000, /* 0x4D icvCtlFore ?? */\n\t0x000000, /* 0x4E icvCtlBack ?? */\n\t0x000000, /* 0x4F icvCtlNeutral */\n\t0x000000, /* 0x50 icvInfoBk ?? */\n\t0x000000 /* 0x51 icvInfoText ?? */\n]);\nvar XLSIcv = dup(_XLSIcv);\n\n/* [MS-XLSB] 2.5.97.2 */\nvar BErr = {\n0x00: \"#NULL!\",\n0x07: \"#DIV/0!\",\n0x0F: \"#VALUE!\",\n0x17: \"#REF!\",\n0x1D: \"#NAME?\",\n0x24: \"#NUM!\",\n0x2A: \"#N/A\",\n0x2B: \"#GETTING_DATA\",\n0xFF: \"#WTF?\"\n};\nvar RBErr = evert_num(BErr);\n/* Parts enumerated in OPC spec, MS-XLSB and MS-XLSX */\n/* 12.3 Part Summary */\n/* 14.2 Part Summary */\n/* [MS-XLSX] 2.1 Part Enumerations ; [MS-XLSB] 2.1.7 Part Enumeration */\nvar ct2type/*{[string]:string}*/ = ({\n\t/* Workbook */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\": \"workbooks\",\n\n\t/* Worksheet */\n\t\"application/vnd.ms-excel.binIndexWs\": \"TODO\", /* Binary Index */\n\n\t/* Macrosheet */\n\t\"application/vnd.ms-excel.intlmacrosheet\": \"TODO\",\n\t\"application/vnd.ms-excel.binIndexMs\": \"TODO\", /* Binary Index */\n\n\t/* File Properties */\n\t\"application/vnd.openxmlformats-package.core-properties+xml\": \"coreprops\",\n\t\"application/vnd.openxmlformats-officedocument.custom-properties+xml\": \"custprops\",\n\t\"application/vnd.openxmlformats-officedocument.extended-properties+xml\": \"extprops\",\n\n\t/* Custom Data Properties */\n\t\"application/vnd.openxmlformats-officedocument.customXmlProperties+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.customProperty\": \"TODO\",\n\n\t/* PivotTable */\n\t\"application/vnd.ms-excel.pivotTable\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml\": \"TODO\",\n\n\t/* Chart Objects */\n\t\"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\": \"TODO\",\n\n\t/* Chart Colors */\n\t\"application/vnd.ms-office.chartcolorstyle+xml\": \"TODO\",\n\n\t/* Chart Style */\n\t\"application/vnd.ms-office.chartstyle+xml\": \"TODO\",\n\n\t/* Chart Advanced */\n\t\"application/vnd.ms-office.chartex+xml\": \"TODO\",\n\n\t/* Calculation Chain */\n\t\"application/vnd.ms-excel.calcChain\": \"calcchains\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml\": \"calcchains\",\n\n\t/* Printer Settings */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings\": \"TODO\",\n\n\t/* ActiveX */\n\t\"application/vnd.ms-office.activeX\": \"TODO\",\n\t\"application/vnd.ms-office.activeX+xml\": \"TODO\",\n\n\t/* Custom Toolbars */\n\t\"application/vnd.ms-excel.attachedToolbars\": \"TODO\",\n\n\t/* External Data Connections */\n\t\"application/vnd.ms-excel.connections\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml\": \"TODO\",\n\n\t/* External Links */\n\t\"application/vnd.ms-excel.externalLink\": \"links\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml\": \"links\",\n\n\t/* Metadata */\n\t\"application/vnd.ms-excel.sheetMetadata\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml\": \"TODO\",\n\n\t/* PivotCache */\n\t\"application/vnd.ms-excel.pivotCacheDefinition\": \"TODO\",\n\t\"application/vnd.ms-excel.pivotCacheRecords\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml\": \"TODO\",\n\n\t/* Query Table */\n\t\"application/vnd.ms-excel.queryTable\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml\": \"TODO\",\n\n\t/* Shared Workbook */\n\t\"application/vnd.ms-excel.userNames\": \"TODO\",\n\t\"application/vnd.ms-excel.revisionHeaders\": \"TODO\",\n\t\"application/vnd.ms-excel.revisionLog\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml\": \"TODO\",\n\n\t/* Single Cell Table */\n\t\"application/vnd.ms-excel.tableSingleCells\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml\": \"TODO\",\n\n\t/* Slicer */\n\t\"application/vnd.ms-excel.slicer\": \"TODO\",\n\t\"application/vnd.ms-excel.slicerCache\": \"TODO\",\n\t\"application/vnd.ms-excel.slicer+xml\": \"TODO\",\n\t\"application/vnd.ms-excel.slicerCache+xml\": \"TODO\",\n\n\t/* Sort Map */\n\t\"application/vnd.ms-excel.wsSortMap\": \"TODO\",\n\n\t/* Table */\n\t\"application/vnd.ms-excel.table\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\": \"TODO\",\n\n\t/* Themes */\n\t\"application/vnd.openxmlformats-officedocument.theme+xml\": \"themes\",\n\n\t/* Theme Override */\n\t\"application/vnd.openxmlformats-officedocument.themeOverride+xml\": \"TODO\",\n\n\t/* Timeline */\n\t\"application/vnd.ms-excel.Timeline+xml\": \"TODO\", /* verify */\n\t\"application/vnd.ms-excel.TimelineCache+xml\": \"TODO\", /* verify */\n\n\t/* VBA */\n\t\"application/vnd.ms-office.vbaProject\": \"vba\",\n\t\"application/vnd.ms-office.vbaProjectSignature\": \"vba\",\n\n\t/* Volatile Dependencies */\n\t\"application/vnd.ms-office.volatileDependencies\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml\": \"TODO\",\n\n\t/* Control Properties */\n\t\"application/vnd.ms-excel.controlproperties+xml\": \"TODO\",\n\n\t/* Data Model */\n\t\"application/vnd.openxmlformats-officedocument.model+data\": \"TODO\",\n\n\t/* Survey */\n\t\"application/vnd.ms-excel.Survey+xml\": \"TODO\",\n\n\t/* Drawing */\n\t\"application/vnd.openxmlformats-officedocument.drawing+xml\": \"drawings\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml\": \"TODO\",\n\n\t/* VML */\n\t\"application/vnd.openxmlformats-officedocument.vmlDrawing\": \"TODO\",\n\n\t\"application/vnd.openxmlformats-package.relationships+xml\": \"rels\",\n\t\"application/vnd.openxmlformats-officedocument.oleObject\": \"TODO\",\n\n\t/* Image */\n\t\"image/png\": \"TODO\",\n\n\t\"sheet\": \"js\"\n});\n\nvar CT_LIST = (function(){\n\tvar o = {\n\t\tworkbooks: {\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\",\n\t\t\txlsm: \"application/vnd.ms-excel.sheet.macroEnabled.main+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.sheet.binary.macroEnabled.main\",\n\t\t\txlam: \"application/vnd.ms-excel.addin.macroEnabled.main+xml\",\n\t\t\txltx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\"\n\t\t},\n\t\tstrs: { /* Shared Strings */\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.sharedStrings\"\n\t\t},\n\t\tcomments: { /* Comments */\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.comments\"\n\t\t},\n\t\tsheets: { /* Worksheet */\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.worksheet\"\n\t\t},\n\t\tcharts: { /* Chartsheet */\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.chartsheet\"\n\t\t},\n\t\tdialogs: { /* Dialogsheet */\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.dialogsheet\"\n\t\t},\n\t\tmacros: { /* Macrosheet (Excel 4.0 Macros) */\n\t\t\txlsx: \"application/vnd.ms-excel.macrosheet+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.macrosheet\"\n\t\t},\n\t\tstyles: { /* Styles */\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.styles\"\n\t\t}\n\t};\n\tkeys(o).forEach(function(k) { [\"xlsm\", \"xlam\"].forEach(function(v) { if(!o[k][v]) o[k][v] = o[k].xlsx; }); });\n\tkeys(o).forEach(function(k){ keys(o[k]).forEach(function(v) { ct2type[o[k][v]] = k; }); });\n\treturn o;\n})();\n\nvar type2ct/*{[string]:Array}*/ = evert_arr(ct2type);\n\nXMLNS.CT = 'http://schemas.openxmlformats.org/package/2006/content-types';\n\nfunction new_ct() {\n\treturn ({\n\t\tworkbooks:[], sheets:[], charts:[], dialogs:[], macros:[],\n\t\trels:[], strs:[], comments:[], links:[],\n\t\tcoreprops:[], extprops:[], custprops:[], themes:[], styles:[],\n\t\tcalcchains:[], vba: [], drawings: [],\n\t\tTODO:[], xmlns: \"\" });\n}\n\nfunction parse_ct(data) {\n\tvar ct = new_ct();\n\tif(!data || !data.match) return ct;\n\tvar ctext = {};\n\t(data.match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(y[0].replace(nsregex,\"<\")) {\n\t\t\tcase ' 0 ? ct.calcchains[0] : \"\";\n\tct.sst = ct.strs.length > 0 ? ct.strs[0] : \"\";\n\tct.style = ct.styles.length > 0 ? ct.styles[0] : \"\";\n\tct.defaults = ctext;\n\tdelete ct.calcchains;\n\treturn ct;\n}\n\nvar CTYPE_XML_ROOT = writextag('Types', null, {\n\t'xmlns': XMLNS.CT,\n\t'xmlns:xsd': XMLNS.xsd,\n\t'xmlns:xsi': XMLNS.xsi\n});\n\nvar CTYPE_DEFAULTS = [\n\t['xml', 'application/xml'],\n\t['bin', 'application/vnd.ms-excel.sheet.binary.macroEnabled.main'],\n\t['vml', 'application/vnd.openxmlformats-officedocument.vmlDrawing'],\n\t['data', 'application/vnd.openxmlformats-officedocument.model+data'],\n\t/* from test files */\n\t['bmp', 'image/bmp'],\n\t['png', 'image/png'],\n\t['gif', 'image/gif'],\n\t['emf', 'image/x-emf'],\n\t['wmf', 'image/x-wmf'],\n\t['jpg', 'image/jpeg'], ['jpeg', 'image/jpeg'],\n\t['tif', 'image/tiff'], ['tiff', 'image/tiff'],\n\t['pdf', 'application/pdf'],\n\t['rels', type2ct.rels[0]]\n].map(function(x) {\n\treturn writextag('Default', null, {'Extension':x[0], 'ContentType': x[1]});\n});\n\nfunction write_ct(ct, opts) {\n\tvar o = [], v;\n\to[o.length] = (XML_HEADER);\n\to[o.length] = (CTYPE_XML_ROOT);\n\to = o.concat(CTYPE_DEFAULTS);\n\n\t/* only write first instance */\n\tvar f1 = function(w) {\n\t\tif(ct[w] && ct[w].length > 0) {\n\t\t\tv = ct[w][0];\n\t\t\to[o.length] = (writextag('Override', null, {\n\t\t\t\t'PartName': (v[0] == '/' ? \"\":\"/\") + v,\n\t\t\t\t'ContentType': CT_LIST[w][opts.bookType || 'xlsx']\n\t\t\t}));\n\t\t}\n\t};\n\n\t/* book type-specific */\n\tvar f2 = function(w) {\n\t\t(ct[w]||[]).forEach(function(v) {\n\t\t\to[o.length] = (writextag('Override', null, {\n\t\t\t\t'PartName': (v[0] == '/' ? \"\":\"/\") + v,\n\t\t\t\t'ContentType': CT_LIST[w][opts.bookType || 'xlsx']\n\t\t\t}));\n\t\t});\n\t};\n\n\t/* standard type */\n\tvar f3 = function(t) {\n\t\t(ct[t]||[]).forEach(function(v) {\n\t\t\to[o.length] = (writextag('Override', null, {\n\t\t\t\t'PartName': (v[0] == '/' ? \"\":\"/\") + v,\n\t\t\t\t'ContentType': type2ct[t][0]\n\t\t\t}));\n\t\t});\n\t};\n\n\tf1('workbooks');\n\tf2('sheets');\n\tf2('charts');\n\tf3('themes');\n\t['strs', 'styles'].forEach(f1);\n\t['coreprops', 'extprops', 'custprops'].forEach(f3);\n\tf3('vba');\n\tf3('comments');\n\tf3('drawings');\n\tif(o.length>2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* 9.3 Relationships */\nvar RELS = ({\n\tWB: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",\n\tSHEET: \"http://sheetjs.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",\n\tHLINK: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink\",\n\tVML: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing\",\n\tXPATH: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLinkPath\",\n\tXMISS: \"http://schemas.microsoft.com/office/2006/relationships/xlExternalLinkPath/xlPathMissing\",\n\tXLINK: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLink\",\n\tCXML: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml\",\n\tCXMLP: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps\",\n\tVBA: \"http://schemas.microsoft.com/office/2006/relationships/vbaProject\"\n});\n\n/* 9.3.3 Representing Relationships */\nfunction get_rels_path(file) {\n\tvar n = file.lastIndexOf(\"/\");\n\treturn file.slice(0,n+1) + '_rels/' + file.slice(n+1) + \".rels\";\n}\n\nfunction parse_rels(data, currentFilePath) {\n\tvar rels = {\"!id\":{}};\n\tif (!data) return rels;\n\tif (currentFilePath.charAt(0) !== '/') {\n\t\tcurrentFilePath = '/'+currentFilePath;\n\t}\n\tvar hash = {};\n\n\t(data.match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\t/* 9.3.2.2 OPC_Relationships */\n\t\tif (y[0] === '2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n\nvar RELS_EXTERN = [RELS.HLINK, RELS.XPATH, RELS.XMISS];\nfunction add_rels(rels, rId, f, type, relobj, targetmode) {\n\tif(!relobj) relobj = {};\n\tif(!rels['!id']) rels['!id'] = {};\n\tif(rId < 0) for(rId = 1; rels['!id']['rId' + rId]; ++rId){/* empty */}\n\trelobj.Id = 'rId' + rId;\n\trelobj.Type = type;\n\trelobj.Target = f;\n\tif(targetmode) relobj.TargetMode = targetmode;\n\telse if(RELS_EXTERN.indexOf(relobj.Type) > -1) relobj.TargetMode = \"External\";\n\tif(rels['!id'][relobj.Id]) throw new Error(\"Cannot rewrite rId \" + rId);\n\trels['!id'][relobj.Id] = relobj;\n\trels[('/' + relobj.Target).replace(\"//\",\"/\")] = relobj;\n\treturn rId;\n}\n/* Open Document Format for Office Applications (OpenDocument) Version 1.2 */\n/* Part 3 Section 4 Manifest File */\nvar CT_ODS = \"application/vnd.oasis.opendocument.spreadsheet\";\nfunction parse_manifest(d, opts) {\n\tvar str = xlml_normalize(d);\n\tvar Rn;\n\tvar FEtag;\n\twhile((Rn = xlmlregex.exec(str))) switch(Rn[3]) {\n\t\tcase 'manifest': break; // 4.2 \n\t\tcase 'file-entry': // 4.3 \n\t\t\tFEtag = parsexmltag(Rn[0], false);\n\t\t\tif(FEtag.path == '/' && FEtag.type !== CT_ODS) throw new Error(\"This OpenDocument is not a spreadsheet\");\n\t\t\tbreak;\n\t\tcase 'encryption-data': // 4.4 \n\t\tcase 'algorithm': // 4.5 \n\t\tcase 'start-key-generation': // 4.6 \n\t\tcase 'key-derivation': // 4.7 \n\t\t\tthrow new Error(\"Unsupported ODS Encryption\");\n\t\tdefault: if(opts && opts.WTF) throw Rn;\n\t}\n}\n\nfunction write_manifest(manifest) {\n\tvar o = [XML_HEADER];\n\to.push('\\n');\n\to.push(' \\n');\n\tfor(var i = 0; i < manifest.length; ++i) o.push(' \\n');\n\to.push('');\n\treturn o.join(\"\");\n}\n\n/* Part 3 Section 6 Metadata Manifest File */\nfunction write_rdf_type(file, res, tag) {\n\treturn [\n\t\t' \\n',\n\t\t' \\n',\n\t\t' \\n'\n\t].join(\"\");\n}\nfunction write_rdf_has(base, file) {\n\treturn [\n\t\t' \\n',\n\t\t' \\n',\n\t\t' \\n'\n\t].join(\"\");\n}\nfunction write_rdf(rdf) {\n\tvar o = [XML_HEADER];\n\to.push('\\n');\n\tfor(var i = 0; i != rdf.length; ++i) {\n\t\to.push(write_rdf_type(rdf[i][0], rdf[i][1]));\n\t\to.push(write_rdf_has(\"\",rdf[i][0]));\n\t}\n\to.push(write_rdf_type(\"\",\"Document\", \"pkg\"));\n\to.push('');\n\treturn o.join(\"\");\n}\n/* TODO: pull properties */\nvar write_meta_ods = (function() {\n\tvar payload = 'Sheet' + 'JS ' + XLSX.version + '';\n\treturn function wmo() {\n\t\treturn payload;\n\t};\n})();\n\n/* ECMA-376 Part II 11.1 Core Properties Part */\n/* [MS-OSHARED] 2.3.3.2.[1-2].1 (PIDSI/PIDDSI) */\nvar CORE_PROPS = [\n\t[\"cp:category\", \"Category\"],\n\t[\"cp:contentStatus\", \"ContentStatus\"],\n\t[\"cp:keywords\", \"Keywords\"],\n\t[\"cp:lastModifiedBy\", \"LastAuthor\"],\n\t[\"cp:lastPrinted\", \"LastPrinted\"],\n\t[\"cp:revision\", \"RevNumber\"],\n\t[\"cp:version\", \"Version\"],\n\t[\"dc:creator\", \"Author\"],\n\t[\"dc:description\", \"Comments\"],\n\t[\"dc:identifier\", \"Identifier\"],\n\t[\"dc:language\", \"Language\"],\n\t[\"dc:subject\", \"Subject\"],\n\t[\"dc:title\", \"Title\"],\n\t[\"dcterms:created\", \"CreatedDate\", 'date'],\n\t[\"dcterms:modified\", \"ModifiedDate\", 'date']\n];\n\nXMLNS.CORE_PROPS = \"http://schemas.openxmlformats.org/package/2006/metadata/core-properties\";\nRELS.CORE_PROPS = 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties';\n\nvar CORE_PROPS_REGEX = (function() {\n\tvar r = new Array(CORE_PROPS.length);\n\tfor(var i = 0; i < CORE_PROPS.length; ++i) {\n\t\tvar f = CORE_PROPS[i];\n\t\tvar g = \"(?:\"+ f[0].slice(0,f[0].indexOf(\":\")) +\":)\"+ f[0].slice(f[0].indexOf(\":\")+1);\n\t\tr[i] = new RegExp(\"<\" + g + \"[^>]*>([\\\\s\\\\S]*?)<\\/\" + g + \">\");\n\t}\n\treturn r;\n})();\n\nfunction parse_core_props(data) {\n\tvar p = {};\n\tdata = utf8read(data);\n\n\tfor(var i = 0; i < CORE_PROPS.length; ++i) {\n\t\tvar f = CORE_PROPS[i], cur = data.match(CORE_PROPS_REGEX[i]);\n\t\tif(cur != null && cur.length > 0) p[f[1]] = unescapexml(cur[1]);\n\t\tif(f[2] === 'date' && p[f[1]]) p[f[1]] = parseDate(p[f[1]]);\n\t}\n\n\treturn p;\n}\n\nvar CORE_PROPS_XML_ROOT = writextag('cp:coreProperties', null, {\n\t//'xmlns': XMLNS.CORE_PROPS,\n\t'xmlns:cp': XMLNS.CORE_PROPS,\n\t'xmlns:dc': XMLNS.dc,\n\t'xmlns:dcterms': XMLNS.dcterms,\n\t'xmlns:dcmitype': XMLNS.dcmitype,\n\t'xmlns:xsi': XMLNS.xsi\n});\n\nfunction cp_doit(f, g, h, o, p) {\n\tif(p[f] != null || g == null || g === \"\") return;\n\tp[f] = g;\n\tg = escapexml(g);\n\to[o.length] = (h ? writextag(f,g,h) : writetag(f,g));\n}\n\nfunction write_core_props(cp, _opts) {\n\tvar opts = _opts || {};\n\tvar o = [XML_HEADER, CORE_PROPS_XML_ROOT], p = {};\n\tif(!cp && !opts.Props) return o.join(\"\");\n\n\tif(cp) {\n\t\tif(cp.CreatedDate != null) cp_doit(\"dcterms:created\", typeof cp.CreatedDate === \"string\" ? cp.CreatedDate : write_w3cdtf(cp.CreatedDate, opts.WTF), {\"xsi:type\":\"dcterms:W3CDTF\"}, o, p);\n\t\tif(cp.ModifiedDate != null) cp_doit(\"dcterms:modified\", typeof cp.ModifiedDate === \"string\" ? cp.ModifiedDate : write_w3cdtf(cp.ModifiedDate, opts.WTF), {\"xsi:type\":\"dcterms:W3CDTF\"}, o, p);\n\t}\n\n\tfor(var i = 0; i != CORE_PROPS.length; ++i) {\n\t\tvar f = CORE_PROPS[i];\n\t\tvar v = opts.Props && opts.Props[f[1]] != null ? opts.Props[f[1]] : cp ? cp[f[1]] : null;\n\t\tif(v === true) v = \"1\";\n\t\telse if(v === false) v = \"0\";\n\t\telse if(typeof v == \"number\") v = String(v);\n\t\tif(v != null) cp_doit(f[0], v, null, o, p);\n\t}\n\tif(o.length>2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* 15.2.12.3 Extended File Properties Part */\n/* [MS-OSHARED] 2.3.3.2.[1-2].1 (PIDSI/PIDDSI) */\nvar EXT_PROPS = [\n\t[\"Application\", \"Application\", \"string\"],\n\t[\"AppVersion\", \"AppVersion\", \"string\"],\n\t[\"Company\", \"Company\", \"string\"],\n\t[\"DocSecurity\", \"DocSecurity\", \"string\"],\n\t[\"Manager\", \"Manager\", \"string\"],\n\t[\"HyperlinksChanged\", \"HyperlinksChanged\", \"bool\"],\n\t[\"SharedDoc\", \"SharedDoc\", \"bool\"],\n\t[\"LinksUpToDate\", \"LinksUpToDate\", \"bool\"],\n\t[\"ScaleCrop\", \"ScaleCrop\", \"bool\"],\n\t[\"HeadingPairs\", \"HeadingPairs\", \"raw\"],\n\t[\"TitlesOfParts\", \"TitlesOfParts\", \"raw\"]\n];\n\nXMLNS.EXT_PROPS = \"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\";\nRELS.EXT_PROPS = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties';\n\nvar PseudoPropsPairs = [\n\t\"Worksheets\", \"SheetNames\",\n\t\"NamedRanges\", \"DefinedNames\",\n\t\"Chartsheets\", \"ChartNames\"\n];\nfunction load_props_pairs(HP, TOP, props, opts) {\n\tvar v = [];\n\tif(typeof HP == \"string\") v = parseVector(HP, opts);\n\telse for(var j = 0; j < HP.length; ++j) v = v.concat(HP[j].map(function(hp) { return {v:hp}; }));\n\tvar parts = (typeof TOP == \"string\") ? parseVector(TOP, opts).map(function (x) { return x.v; }) : TOP;\n\tvar idx = 0, len = 0;\n\tif(parts.length > 0) for(var i = 0; i !== v.length; i += 2) {\n\t\tlen = +(v[i+1].v);\n\t\tswitch(v[i].v) {\n\t\t\tcase \"Worksheets\":\n\t\t\tcase \"工作表\":\n\t\t\tcase \"Листы\":\n\t\t\tcase \"أوراق العمل\":\n\t\t\tcase \"ワークシート\":\n\t\t\tcase \"גליונות עבודה\":\n\t\t\tcase \"Arbeitsblätter\":\n\t\t\tcase \"Çalışma Sayfaları\":\n\t\t\tcase \"Feuilles de calcul\":\n\t\t\tcase \"Fogli di lavoro\":\n\t\t\tcase \"Folhas de cálculo\":\n\t\t\tcase \"Planilhas\":\n\t\t\tcase \"Regneark\":\n\t\t\tcase \"Hojas de cálculo\":\n\t\t\tcase \"Werkbladen\":\n\t\t\t\tprops.Worksheets = len;\n\t\t\t\tprops.SheetNames = parts.slice(idx, idx + len);\n\t\t\t\tbreak;\n\n\t\t\tcase \"Named Ranges\":\n\t\t\tcase \"Rangos con nombre\":\n\t\t\tcase \"名前付き一覧\":\n\t\t\tcase \"Benannte Bereiche\":\n\t\t\tcase \"Navngivne områder\":\n\t\t\t\tprops.NamedRanges = len;\n\t\t\t\tprops.DefinedNames = parts.slice(idx, idx + len);\n\t\t\t\tbreak;\n\n\t\t\tcase \"Charts\":\n\t\t\tcase \"Diagramme\":\n\t\t\t\tprops.Chartsheets = len;\n\t\t\t\tprops.ChartNames = parts.slice(idx, idx + len);\n\t\t\t\tbreak;\n\t\t}\n\t\tidx += len;\n\t}\n}\n\nfunction parse_ext_props(data, p, opts) {\n\tvar q = {}; if(!p) p = {};\n\tdata = utf8read(data);\n\n\tEXT_PROPS.forEach(function(f) {\n\t\tvar xml = (data.match(matchtag(f[0]))||[])[1];\n\t\tswitch(f[2]) {\n\t\t\tcase \"string\": if(xml) p[f[1]] = unescapexml(xml); break;\n\t\t\tcase \"bool\": p[f[1]] = xml === \"true\"; break;\n\t\t\tcase \"raw\":\n\t\t\t\tvar cur = data.match(new RegExp(\"<\" + f[0] + \"[^>]*>([\\\\s\\\\S]*?)<\\/\" + f[0] + \">\"));\n\t\t\t\tif(cur && cur.length > 0) q[f[1]] = cur[1];\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tif(q.HeadingPairs && q.TitlesOfParts) load_props_pairs(q.HeadingPairs, q.TitlesOfParts, p, opts);\n\n\treturn p;\n}\n\nvar EXT_PROPS_XML_ROOT = writextag('Properties', null, {\n\t'xmlns': XMLNS.EXT_PROPS,\n\t'xmlns:vt': XMLNS.vt\n});\n\nfunction write_ext_props(cp) {\n\tvar o = [], W = writextag;\n\tif(!cp) cp = {};\n\tcp.Application = \"SheetJS\";\n\to[o.length] = (XML_HEADER);\n\to[o.length] = (EXT_PROPS_XML_ROOT);\n\n\tEXT_PROPS.forEach(function(f) {\n\t\tif(cp[f[1]] === undefined) return;\n\t\tvar v;\n\t\tswitch(f[2]) {\n\t\t\tcase 'string': v = escapexml(String(cp[f[1]])); break;\n\t\t\tcase 'bool': v = cp[f[1]] ? 'true' : 'false'; break;\n\t\t}\n\t\tif(v !== undefined) o[o.length] = (W(f[0], v));\n\t});\n\n\t/* TODO: HeadingPairs, TitlesOfParts */\n\to[o.length] = (W('HeadingPairs', W('vt:vector', W('vt:variant', 'Worksheets')+W('vt:variant', W('vt:i4', String(cp.Worksheets))), {size:2, baseType:\"variant\"})));\n\to[o.length] = (W('TitlesOfParts', W('vt:vector', cp.SheetNames.map(function(s) { return \"\" + escapexml(s) + \"\"; }).join(\"\"), {size: cp.Worksheets, baseType:\"lpstr\"})));\n\tif(o.length>2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* 15.2.12.2 Custom File Properties Part */\nXMLNS.CUST_PROPS = \"http://schemas.openxmlformats.org/officeDocument/2006/custom-properties\";\nRELS.CUST_PROPS = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties';\n\nvar custregex = /<[^>]+>[^<]*/g;\nfunction parse_cust_props(data, opts) {\n\tvar p = {}, name = \"\";\n\tvar m = data.match(custregex);\n\tif(m) for(var i = 0; i != m.length; ++i) {\n\t\tvar x = m[i], y = parsexmltag(x);\n\t\tswitch(y[0]) {\n\t\t\tcase '': name = null; break;\n\t\t\tdefault: if (x.indexOf('');\n\t\t\t\tvar type = toks[0].slice(4), text = toks[1];\n\t\t\t\t/* 22.4.2.32 (CT_Variant). Omit the binary types from 22.4 (Variant Types) */\n\t\t\t\tswitch(type) {\n\t\t\t\t\tcase 'lpstr': case 'bstr': case 'lpwstr':\n\t\t\t\t\t\tp[name] = unescapexml(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'bool':\n\t\t\t\t\t\tp[name] = parsexmlbool(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'i1': case 'i2': case 'i4': case 'i8': case 'int': case 'uint':\n\t\t\t\t\t\tp[name] = parseInt(text, 10);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'r4': case 'r8': case 'decimal':\n\t\t\t\t\t\tp[name] = parseFloat(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'filetime': case 'date':\n\t\t\t\t\t\tp[name] = parseDate(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'cy': case 'error':\n\t\t\t\t\t\tp[name] = unescapexml(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif(type.slice(-1) == '/') break;\n\t\t\t\t\t\tif(opts.WTF && typeof console !== 'undefined') console.warn('Unexpected', x, type, toks);\n\t\t\t\t}\n\t\t\t} else if(x.slice(0,2) === \"2){ o[o.length] = ''; o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* Common Name -> XLML Name */\nvar XLMLDocPropsMap = {\n\tTitle: 'Title',\n\tSubject: 'Subject',\n\tAuthor: 'Author',\n\tKeywords: 'Keywords',\n\tComments: 'Description',\n\tLastAuthor: 'LastAuthor',\n\tRevNumber: 'Revision',\n\tApplication: 'AppName',\n\t/* TotalTime: 'TotalTime', */\n\tLastPrinted: 'LastPrinted',\n\tCreatedDate: 'Created',\n\tModifiedDate: 'LastSaved',\n\t/* Pages */\n\t/* Words */\n\t/* Characters */\n\tCategory: 'Category',\n\t/* PresentationFormat */\n\tManager: 'Manager',\n\tCompany: 'Company',\n\t/* Guid */\n\t/* HyperlinkBase */\n\t/* Bytes */\n\t/* Lines */\n\t/* Paragraphs */\n\t/* CharactersWithSpaces */\n\tAppVersion: 'Version',\n\n\tContentStatus: 'ContentStatus', /* NOTE: missing from schema */\n\tIdentifier: 'Identifier', /* NOTE: missing from schema */\n\tLanguage: 'Language' /* NOTE: missing from schema */\n};\nvar evert_XLMLDPM = evert(XLMLDocPropsMap);\n\nfunction xlml_set_prop(Props, tag, val) {\n\ttag = evert_XLMLDPM[tag] || tag;\n\tProps[tag] = val;\n}\n\nfunction xlml_write_docprops(Props, opts) {\n\tvar o = [];\n\tkeys(XLMLDocPropsMap).map(function(m) {\n\t\tfor(var i = 0; i < CORE_PROPS.length; ++i) if(CORE_PROPS[i][1] == m) return CORE_PROPS[i];\n\t\tfor(i = 0; i < EXT_PROPS.length; ++i) if(EXT_PROPS[i][1] == m) return EXT_PROPS[i];\n\t\tthrow m;\n\t}).forEach(function(p) {\n\t\tif(Props[p[1]] == null) return;\n\t\tvar m = opts && opts.Props && opts.Props[p[1]] != null ? opts.Props[p[1]] : Props[p[1]];\n\t\tswitch(p[2]) {\n\t\t\tcase 'date': m = new Date(m).toISOString().replace(/\\.\\d*Z/,\"Z\"); break;\n\t\t}\n\t\tif(typeof m == 'number') m = String(m);\n\t\telse if(m === true || m === false) { m = m ? \"1\" : \"0\"; }\n\t\telse if(m instanceof Date) m = new Date(m).toISOString().replace(/\\.\\d*Z/,\"\");\n\t\to.push(writetag(XLMLDocPropsMap[p[1]] || p[1], m));\n\t});\n\treturn writextag('DocumentProperties', o.join(\"\"), {xmlns:XLMLNS.o });\n}\nfunction xlml_write_custprops(Props, Custprops) {\n\tvar BLACKLIST = [\"Worksheets\",\"SheetNames\"];\n\tvar T = 'CustomDocumentProperties';\n\tvar o = [];\n\tif(Props) keys(Props).forEach(function(k) {\nif(!Object.prototype.hasOwnProperty.call(Props, k)) return;\n\t\tfor(var i = 0; i < CORE_PROPS.length; ++i) if(k == CORE_PROPS[i][1]) return;\n\t\tfor(i = 0; i < EXT_PROPS.length; ++i) if(k == EXT_PROPS[i][1]) return;\n\t\tfor(i = 0; i < BLACKLIST.length; ++i) if(k == BLACKLIST[i]) return;\n\n\t\tvar m = Props[k];\n\t\tvar t = \"string\";\n\t\tif(typeof m == 'number') { t = \"float\"; m = String(m); }\n\t\telse if(m === true || m === false) { t = \"boolean\"; m = m ? \"1\" : \"0\"; }\n\t\telse m = String(m);\n\t\to.push(writextag(escapexmltag(k), m, {\"dt:dt\":t}));\n\t});\n\tif(Custprops) keys(Custprops).forEach(function(k) {\nif(!Object.prototype.hasOwnProperty.call(Custprops, k)) return;\n\t\tif(Props && Object.prototype.hasOwnProperty.call(Props, k)) return;\n\t\tvar m = Custprops[k];\n\t\tvar t = \"string\";\n\t\tif(typeof m == 'number') { t = \"float\"; m = String(m); }\n\t\telse if(m === true || m === false) { t = \"boolean\"; m = m ? \"1\" : \"0\"; }\n\t\telse if(m instanceof Date) { t = \"dateTime.tz\"; m = m.toISOString(); }\n\t\telse m = String(m);\n\t\to.push(writextag(escapexmltag(k), m, {\"dt:dt\":t}));\n\t});\n\treturn '<' + T + ' xmlns=\"' + XLMLNS.o + '\">' + o.join(\"\") + '';\n}\n/* [MS-DTYP] 2.3.3 FILETIME */\n/* [MS-OLEDS] 2.1.3 FILETIME (Packet Version) */\n/* [MS-OLEPS] 2.8 FILETIME (Packet Version) */\nfunction parse_FILETIME(blob) {\n\tvar dwLowDateTime = blob.read_shift(4), dwHighDateTime = blob.read_shift(4);\n\treturn new Date(((dwHighDateTime/1e7*Math.pow(2,32) + dwLowDateTime/1e7) - 11644473600)*1000).toISOString().replace(/\\.000/,\"\");\n}\nfunction write_FILETIME(time) {\n\tvar date = (typeof time == \"string\") ? new Date(Date.parse(time)) : time;\n\tvar t = date.getTime() / 1000 + 11644473600;\n\tvar l = t % Math.pow(2,32), h = (t - l) / Math.pow(2,32);\n\tl *= 1e7; h *= 1e7;\n\tvar w = (l / Math.pow(2,32)) | 0;\n\tif(w > 0) { l = l % Math.pow(2,32); h += w; }\n\tvar o = new_buf(8); o.write_shift(4, l); o.write_shift(4, h); return o;\n}\n\n/* [MS-OSHARED] 2.3.3.1.4 Lpstr */\nfunction parse_lpstr(blob, type, pad) {\n\tvar start = blob.l;\n\tvar str = blob.read_shift(0, 'lpstr-cp');\n\tif(pad) while((blob.l - start) & 3) ++blob.l;\n\treturn str;\n}\n\n/* [MS-OSHARED] 2.3.3.1.6 Lpwstr */\nfunction parse_lpwstr(blob, type, pad) {\n\tvar str = blob.read_shift(0, 'lpwstr');\n\tif(pad) blob.l += (4 - ((str.length+1) & 3)) & 3;\n\treturn str;\n}\n\n\n/* [MS-OSHARED] 2.3.3.1.11 VtString */\n/* [MS-OSHARED] 2.3.3.1.12 VtUnalignedString */\nfunction parse_VtStringBase(blob, stringType, pad) {\n\tif(stringType === 0x1F /*VT_LPWSTR*/) return parse_lpwstr(blob);\n\treturn parse_lpstr(blob, stringType, pad);\n}\n\nfunction parse_VtString(blob, t, pad) { return parse_VtStringBase(blob, t, pad === false ? 0: 4); }\nfunction parse_VtUnalignedString(blob, t) { if(!t) throw new Error(\"VtUnalignedString must have positive length\"); return parse_VtStringBase(blob, t, 0); }\n\n/* [MS-OSHARED] 2.3.3.1.9 VtVecUnalignedLpstrValue */\nfunction parse_VtVecUnalignedLpstrValue(blob) {\n\tvar length = blob.read_shift(4);\n\tvar ret = [];\n\tfor(var i = 0; i != length; ++i) ret[i] = blob.read_shift(0, 'lpstr-cp').replace(chr0,'');\n\treturn ret;\n}\n\n/* [MS-OSHARED] 2.3.3.1.10 VtVecUnalignedLpstr */\nfunction parse_VtVecUnalignedLpstr(blob) {\n\treturn parse_VtVecUnalignedLpstrValue(blob);\n}\n\n/* [MS-OSHARED] 2.3.3.1.13 VtHeadingPair */\nfunction parse_VtHeadingPair(blob) {\n\tvar headingString = parse_TypedPropertyValue(blob, VT_USTR);\n\tvar headerParts = parse_TypedPropertyValue(blob, VT_I4);\n\treturn [headingString, headerParts];\n}\n\n/* [MS-OSHARED] 2.3.3.1.14 VtVecHeadingPairValue */\nfunction parse_VtVecHeadingPairValue(blob) {\n\tvar cElements = blob.read_shift(4);\n\tvar out = [];\n\tfor(var i = 0; i != cElements / 2; ++i) out.push(parse_VtHeadingPair(blob));\n\treturn out;\n}\n\n/* [MS-OSHARED] 2.3.3.1.15 VtVecHeadingPair */\nfunction parse_VtVecHeadingPair(blob) {\n\t// NOTE: When invoked, wType & padding were already consumed\n\treturn parse_VtVecHeadingPairValue(blob);\n}\n\n/* [MS-OLEPS] 2.18.1 Dictionary (uses 2.17, 2.16) */\nfunction parse_dictionary(blob,CodePage) {\n\tvar cnt = blob.read_shift(4);\n\tvar dict = ({});\n\tfor(var j = 0; j != cnt; ++j) {\n\t\tvar pid = blob.read_shift(4);\n\t\tvar len = blob.read_shift(4);\n\t\tdict[pid] = blob.read_shift(len, (CodePage === 0x4B0 ?'utf16le':'utf8')).replace(chr0,'').replace(chr1,'!');\n\t\tif(CodePage === 0x4B0 && (len % 2)) blob.l += 2;\n\t}\n\tif(blob.l & 3) blob.l = (blob.l>>2+1)<<2;\n\treturn dict;\n}\n\n/* [MS-OLEPS] 2.9 BLOB */\nfunction parse_BLOB(blob) {\n\tvar size = blob.read_shift(4);\n\tvar bytes = blob.slice(blob.l,blob.l+size);\n\tblob.l += size;\n\tif((size & 3) > 0) blob.l += (4 - (size & 3)) & 3;\n\treturn bytes;\n}\n\n/* [MS-OLEPS] 2.11 ClipboardData */\nfunction parse_ClipboardData(blob) {\n\t// TODO\n\tvar o = {};\n\to.Size = blob.read_shift(4);\n\t//o.Format = blob.read_shift(4);\n\tblob.l += o.Size + 3 - (o.Size - 1) % 4;\n\treturn o;\n}\n\n/* [MS-OLEPS] 2.15 TypedPropertyValue */\nfunction parse_TypedPropertyValue(blob, type, _opts) {\n\tvar t = blob.read_shift(2), ret, opts = _opts||{};\n\tblob.l += 2;\n\tif(type !== VT_VARIANT)\n\tif(t !== type && VT_CUSTOM.indexOf(type)===-1) throw new Error('Expected type ' + type + ' saw ' + t);\n\tswitch(type === VT_VARIANT ? t : type) {\n\t\tcase 0x02 /*VT_I2*/: ret = blob.read_shift(2, 'i'); if(!opts.raw) blob.l += 2; return ret;\n\t\tcase 0x03 /*VT_I4*/: ret = blob.read_shift(4, 'i'); return ret;\n\t\tcase 0x0B /*VT_BOOL*/: return blob.read_shift(4) !== 0x0;\n\t\tcase 0x13 /*VT_UI4*/: ret = blob.read_shift(4); return ret;\n\t\tcase 0x1E /*VT_LPSTR*/: return parse_lpstr(blob, t, 4).replace(chr0,'');\n\t\tcase 0x1F /*VT_LPWSTR*/: return parse_lpwstr(blob);\n\t\tcase 0x40 /*VT_FILETIME*/: return parse_FILETIME(blob);\n\t\tcase 0x41 /*VT_BLOB*/: return parse_BLOB(blob);\n\t\tcase 0x47 /*VT_CF*/: return parse_ClipboardData(blob);\n\t\tcase 0x50 /*VT_STRING*/: return parse_VtString(blob, t, !opts.raw).replace(chr0,'');\n\t\tcase 0x51 /*VT_USTR*/: return parse_VtUnalignedString(blob, t/*, 4*/).replace(chr0,'');\n\t\tcase 0x100C /*VT_VECTOR|VT_VARIANT*/: return parse_VtVecHeadingPair(blob);\n\t\tcase 0x101E /*VT_LPSTR*/: return parse_VtVecUnalignedLpstr(blob);\n\t\tdefault: throw new Error(\"TypedPropertyValue unrecognized type \" + type + \" \" + t);\n\t}\n}\nfunction write_TypedPropertyValue(type, value) {\n\tvar o = new_buf(4), p = new_buf(4);\n\to.write_shift(4, type == 0x50 ? 0x1F : type);\n\tswitch(type) {\n\t\tcase 0x03 /*VT_I4*/: p.write_shift(-4, value); break;\n\t\tcase 0x05 /*VT_I4*/: p = new_buf(8); p.write_shift(8, value, 'f'); break;\n\t\tcase 0x0B /*VT_BOOL*/: p.write_shift(4, value ? 0x01 : 0x00); break;\n\t\tcase 0x40 /*VT_FILETIME*/: p = write_FILETIME(value); break;\n\t\tcase 0x1F /*VT_LPWSTR*/:\n\t\tcase 0x50 /*VT_STRING*/:\np = new_buf(4 + 2 * (value.length + 1) + (value.length % 2 ? 0 : 2));\n\t\t\tp.write_shift(4, value.length + 1);\n\t\t\tp.write_shift(0, value, \"dbcs\");\n\t\t\twhile(p.l != p.length) p.write_shift(1, 0);\n\t\t\tbreak;\n\t\tdefault: throw new Error(\"TypedPropertyValue unrecognized type \" + type + \" \" + value);\n\t}\n\treturn bconcat([o, p]);\n}\n\n/* [MS-OLEPS] 2.20 PropertySet */\nfunction parse_PropertySet(blob, PIDSI) {\n\tvar start_addr = blob.l;\n\tvar size = blob.read_shift(4);\n\tvar NumProps = blob.read_shift(4);\n\tvar Props = [], i = 0;\n\tvar CodePage = 0;\n\tvar Dictionary = -1, DictObj = ({});\n\tfor(i = 0; i != NumProps; ++i) {\n\t\tvar PropID = blob.read_shift(4);\n\t\tvar Offset = blob.read_shift(4);\n\t\tProps[i] = [PropID, Offset + start_addr];\n\t}\n\tProps.sort(function(x,y) { return x[1] - y[1]; });\n\tvar PropH = {};\n\tfor(i = 0; i != NumProps; ++i) {\n\t\tif(blob.l !== Props[i][1]) {\n\t\t\tvar fail = true;\n\t\t\tif(i>0 && PIDSI) switch(PIDSI[Props[i-1][0]].t) {\n\t\t\t\tcase 0x02 /*VT_I2*/: if(blob.l+2 === Props[i][1]) { blob.l+=2; fail = false; } break;\n\t\t\t\tcase 0x50 /*VT_STRING*/: if(blob.l <= Props[i][1]) { blob.l=Props[i][1]; fail = false; } break;\n\t\t\t\tcase 0x100C /*VT_VECTOR|VT_VARIANT*/: if(blob.l <= Props[i][1]) { blob.l=Props[i][1]; fail = false; } break;\n\t\t\t}\n\t\t\tif((!PIDSI||i==0) && blob.l <= Props[i][1]) { fail=false; blob.l = Props[i][1]; }\n\t\t\tif(fail) throw new Error(\"Read Error: Expected address \" + Props[i][1] + ' at ' + blob.l + ' :' + i);\n\t\t}\n\t\tif(PIDSI) {\n\t\t\tvar piddsi = PIDSI[Props[i][0]];\n\t\t\tPropH[piddsi.n] = parse_TypedPropertyValue(blob, piddsi.t, {raw:true});\n\t\t\tif(piddsi.p === 'version') PropH[piddsi.n] = String(PropH[piddsi.n] >> 16) + \".\" + (\"0000\" + String(PropH[piddsi.n] & 0xFFFF)).slice(-4);\n\t\t\tif(piddsi.n == \"CodePage\") switch(PropH[piddsi.n]) {\n\t\t\t\tcase 0: PropH[piddsi.n] = 1252;\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 874:\n\t\t\t\tcase 932:\n\t\t\t\tcase 936:\n\t\t\t\tcase 949:\n\t\t\t\tcase 950:\n\t\t\t\tcase 1250:\n\t\t\t\tcase 1251:\n\t\t\t\tcase 1253:\n\t\t\t\tcase 1254:\n\t\t\t\tcase 1255:\n\t\t\t\tcase 1256:\n\t\t\t\tcase 1257:\n\t\t\t\tcase 1258:\n\t\t\t\tcase 10000:\n\t\t\t\tcase 1200:\n\t\t\t\tcase 1201:\n\t\t\t\tcase 1252:\n\t\t\t\tcase 65000: case -536:\n\t\t\t\tcase 65001: case -535:\n\t\t\t\t\tset_cp(CodePage = (PropH[piddsi.n]>>>0) & 0xFFFF); break;\n\t\t\t\tdefault: throw new Error(\"Unsupported CodePage: \" + PropH[piddsi.n]);\n\t\t\t}\n\t\t} else {\n\t\t\tif(Props[i][0] === 0x1) {\n\t\t\t\tCodePage = PropH.CodePage = (parse_TypedPropertyValue(blob, VT_I2));\n\t\t\t\tset_cp(CodePage);\n\t\t\t\tif(Dictionary !== -1) {\n\t\t\t\t\tvar oldpos = blob.l;\n\t\t\t\t\tblob.l = Props[Dictionary][1];\n\t\t\t\t\tDictObj = parse_dictionary(blob,CodePage);\n\t\t\t\t\tblob.l = oldpos;\n\t\t\t\t}\n\t\t\t} else if(Props[i][0] === 0) {\n\t\t\t\tif(CodePage === 0) { Dictionary = i; blob.l = Props[i+1][1]; continue; }\n\t\t\t\tDictObj = parse_dictionary(blob,CodePage);\n\t\t\t} else {\n\t\t\t\tvar name = DictObj[Props[i][0]];\n\t\t\t\tvar val;\n\t\t\t\t/* [MS-OSHARED] 2.3.3.2.3.1.2 + PROPVARIANT */\n\t\t\t\tswitch(blob[blob.l]) {\n\t\t\t\t\tcase 0x41 /*VT_BLOB*/: blob.l += 4; val = parse_BLOB(blob); break;\n\t\t\t\t\tcase 0x1E /*VT_LPSTR*/: blob.l += 4; val = parse_VtString(blob, blob[blob.l-4]).replace(/\\u0000+$/,\"\"); break;\n\t\t\t\t\tcase 0x1F /*VT_LPWSTR*/: blob.l += 4; val = parse_VtString(blob, blob[blob.l-4]).replace(/\\u0000+$/,\"\"); break;\n\t\t\t\t\tcase 0x03 /*VT_I4*/: blob.l += 4; val = blob.read_shift(4, 'i'); break;\n\t\t\t\t\tcase 0x13 /*VT_UI4*/: blob.l += 4; val = blob.read_shift(4); break;\n\t\t\t\t\tcase 0x05 /*VT_R8*/: blob.l += 4; val = blob.read_shift(8, 'f'); break;\n\t\t\t\t\tcase 0x0B /*VT_BOOL*/: blob.l += 4; val = parsebool(blob, 4); break;\n\t\t\t\t\tcase 0x40 /*VT_FILETIME*/: blob.l += 4; val = parseDate(parse_FILETIME(blob)); break;\n\t\t\t\t\tdefault: throw new Error(\"unparsed value: \" + blob[blob.l]);\n\t\t\t\t}\n\t\t\t\tPropH[name] = val;\n\t\t\t}\n\t\t}\n\t}\n\tblob.l = start_addr + size; /* step ahead to skip padding */\n\treturn PropH;\n}\nvar XLSPSSkip = [ \"CodePage\", \"Thumbnail\", \"_PID_LINKBASE\", \"_PID_HLINKS\", \"SystemIdentifier\", \"FMTID\" ].concat(PseudoPropsPairs);\nfunction guess_property_type(val) {\n\tswitch(typeof val) {\n\t\tcase \"boolean\": return 0x0B;\n\t\tcase \"number\": return ((val|0)==val) ? 0x03 : 0x05;\n\t\tcase \"string\": return 0x1F;\n\t\tcase \"object\": if(val instanceof Date) return 0x40; break;\n\t}\n\treturn -1;\n}\nfunction write_PropertySet(entries, RE, PIDSI) {\n\tvar hdr = new_buf(8), piao = [], prop = [];\n\tvar sz = 8, i = 0;\n\n\tvar pr = new_buf(8), pio = new_buf(8);\n\tpr.write_shift(4, 0x0002);\n\tpr.write_shift(4, 0x04B0);\n\tpio.write_shift(4, 0x0001);\n\tprop.push(pr); piao.push(pio);\n\tsz += 8 + pr.length;\n\n\tif(!RE) {\n\t\tpio = new_buf(8);\n\t\tpio.write_shift(4, 0);\n\t\tpiao.unshift(pio);\n\n\t\tvar bufs = [new_buf(4)];\n\t\tbufs[0].write_shift(4, entries.length);\n\t\tfor(i = 0; i < entries.length; ++i) {\n\t\t\tvar value = entries[i][0];\n\t\t\tpr = new_buf(4 + 4 + 2 * (value.length + 1) + (value.length % 2 ? 0 : 2));\n\t\t\tpr.write_shift(4, i+2);\n\t\t\tpr.write_shift(4, value.length + 1);\n\t\t\tpr.write_shift(0, value, \"dbcs\");\n\t\t\twhile(pr.l != pr.length) pr.write_shift(1, 0);\n\t\t\tbufs.push(pr);\n\t\t}\n\t\tpr = bconcat(bufs);\n\t\tprop.unshift(pr);\n\t\tsz += 8 + pr.length;\n\t}\n\n\tfor(i = 0; i < entries.length; ++i) {\n\t\tif(RE && !RE[entries[i][0]]) continue;\n\t\tif(XLSPSSkip.indexOf(entries[i][0]) > -1) continue;\n\t\tif(entries[i][1] == null) continue;\n\n\t\tvar val = entries[i][1], idx = 0;\n\t\tif(RE) {\n\t\t\tidx = +RE[entries[i][0]];\n\t\t\tvar pinfo = (PIDSI)[idx];\n\t\t\tif(pinfo.p == \"version\" && typeof val == \"string\") {\nvar arr = val.split(\".\");\n\t\t\t\tval = ((+arr[0])<<16) + ((+arr[1])||0);\n\t\t\t}\n\t\t\tpr = write_TypedPropertyValue(pinfo.t, val);\n\t\t} else {\n\t\t\tvar T = guess_property_type(val);\n\t\t\tif(T == -1) { T = 0x1F; val = String(val); }\n\t\t\tpr = write_TypedPropertyValue(T, val);\n\t\t}\n\t\tprop.push(pr);\n\n\t\tpio = new_buf(8);\n\t\tpio.write_shift(4, !RE ? 2+i : idx);\n\t\tpiao.push(pio);\n\n\t\tsz += 8 + pr.length;\n\t}\n\n\tvar w = 8 * (prop.length + 1);\n\tfor(i = 0; i < prop.length; ++i) { piao[i].write_shift(4, w); w += prop[i].length; }\n\thdr.write_shift(4, sz);\n\thdr.write_shift(4, prop.length);\n\treturn bconcat([hdr].concat(piao).concat(prop));\n}\n\n/* [MS-OLEPS] 2.21 PropertySetStream */\nfunction parse_PropertySetStream(file, PIDSI, clsid) {\n\tvar blob = file.content;\n\tif(!blob) return ({});\n\tprep_blob(blob, 0);\n\n\tvar NumSets, FMTID0, FMTID1, Offset0, Offset1 = 0;\n\tblob.chk('feff', 'Byte Order: ');\n\n\t/*var vers = */blob.read_shift(2); // TODO: check version\n\tvar SystemIdentifier = blob.read_shift(4);\n\tvar CLSID = blob.read_shift(16);\n\tif(CLSID !== CFB.utils.consts.HEADER_CLSID && CLSID !== clsid) throw new Error(\"Bad PropertySet CLSID \" + CLSID);\n\tNumSets = blob.read_shift(4);\n\tif(NumSets !== 1 && NumSets !== 2) throw new Error(\"Unrecognized #Sets: \" + NumSets);\n\tFMTID0 = blob.read_shift(16); Offset0 = blob.read_shift(4);\n\n\tif(NumSets === 1 && Offset0 !== blob.l) throw new Error(\"Length mismatch: \" + Offset0 + \" !== \" + blob.l);\n\telse if(NumSets === 2) { FMTID1 = blob.read_shift(16); Offset1 = blob.read_shift(4); }\n\tvar PSet0 = parse_PropertySet(blob, PIDSI);\n\n\tvar rval = ({ SystemIdentifier: SystemIdentifier });\n\tfor(var y in PSet0) rval[y] = PSet0[y];\n\t//rval.blob = blob;\n\trval.FMTID = FMTID0;\n\t//rval.PSet0 = PSet0;\n\tif(NumSets === 1) return rval;\n\tif(Offset1 - blob.l == 2) blob.l += 2;\n\tif(blob.l !== Offset1) throw new Error(\"Length mismatch 2: \" + blob.l + \" !== \" + Offset1);\n\tvar PSet1;\n\ttry { PSet1 = parse_PropertySet(blob, null); } catch(e) {/* empty */}\n\tfor(y in PSet1) rval[y] = PSet1[y];\n\trval.FMTID = [FMTID0, FMTID1]; // TODO: verify FMTID0/1\n\treturn rval;\n}\nfunction write_PropertySetStream(entries, clsid, RE, PIDSI, entries2, clsid2) {\n\tvar hdr = new_buf(entries2 ? 68 : 48);\n\tvar bufs = [hdr];\n\thdr.write_shift(2, 0xFFFE);\n\thdr.write_shift(2, 0x0000); /* TODO: type 1 props */\n\thdr.write_shift(4, 0x32363237);\n\thdr.write_shift(16, CFB.utils.consts.HEADER_CLSID, \"hex\");\n\thdr.write_shift(4, (entries2 ? 2 : 1));\n\thdr.write_shift(16, clsid, \"hex\");\n\thdr.write_shift(4, (entries2 ? 68 : 48));\n\tvar ps0 = write_PropertySet(entries, RE, PIDSI);\n\tbufs.push(ps0);\n\n\tif(entries2) {\n\t\tvar ps1 = write_PropertySet(entries2, null, null);\n\t\thdr.write_shift(16, clsid2, \"hex\");\n\t\thdr.write_shift(4, 68 + ps0.length);\n\t\tbufs.push(ps1);\n\t}\n\treturn bconcat(bufs);\n}\n\nfunction parsenoop2(blob, length) { blob.read_shift(length); return null; }\nfunction writezeroes(n, o) { if(!o) o=new_buf(n); for(var j=0; j= 12 ? 2 : 1);\n\tvar encoding = 'sbcs-cont';\n\tvar cp = current_codepage;\n\tif(opts && opts.biff >= 8) current_codepage = 1200;\n\tif(!opts || opts.biff == 8 ) {\n\t\tvar fHighByte = blob.read_shift(1);\n\t\tif(fHighByte) { encoding = 'dbcs-cont'; }\n\t} else if(opts.biff == 12) {\n\t\tencoding = 'wstr';\n\t}\n\tif(opts.biff >= 2 && opts.biff <= 5) encoding = 'cpstr';\n\tvar o = cch ? blob.read_shift(cch, encoding) : \"\";\n\tcurrent_codepage = cp;\n\treturn o;\n}\n\n/* 2.5.293 XLUnicodeRichExtendedString */\nfunction parse_XLUnicodeRichExtendedString(blob) {\n\tvar cp = current_codepage;\n\tcurrent_codepage = 1200;\n\tvar cch = blob.read_shift(2), flags = blob.read_shift(1);\n\tvar /*fHighByte = flags & 0x1,*/ fExtSt = flags & 0x4, fRichSt = flags & 0x8;\n\tvar width = 1 + (flags & 0x1); // 0x0 -> utf8, 0x1 -> dbcs\n\tvar cRun = 0, cbExtRst;\n\tvar z = {};\n\tif(fRichSt) cRun = blob.read_shift(2);\n\tif(fExtSt) cbExtRst = blob.read_shift(4);\n\tvar encoding = width == 2 ? 'dbcs-cont' : 'sbcs-cont';\n\tvar msg = cch === 0 ? \"\" : blob.read_shift(cch, encoding);\n\tif(fRichSt) blob.l += 4 * cRun; //TODO: parse this\n\tif(fExtSt) blob.l += cbExtRst; //TODO: parse this\n\tz.t = msg;\n\tif(!fRichSt) { z.raw = \"\" + z.t + \"\"; z.r = z.t; }\n\tcurrent_codepage = cp;\n\treturn z;\n}\nfunction write_XLUnicodeRichExtendedString(xlstr) {\n\tvar str = (xlstr.t||\"\"), nfmts = 1;\n\n\tvar hdr = new_buf(3 + (nfmts > 1 ? 2 : 0));\n\thdr.write_shift(2, str.length);\n\thdr.write_shift(1, (nfmts > 1 ? 0x08 : 0x00) | 0x01);\n\tif(nfmts > 1) hdr.write_shift(2, nfmts);\n\n\tvar otext = new_buf(2 * str.length);\n\totext.write_shift(2 * str.length, str, 'utf16le');\n\n\tvar out = [hdr, otext];\n\n\treturn bconcat(out);\n}\n\n/* 2.5.296 XLUnicodeStringNoCch */\nfunction parse_XLUnicodeStringNoCch(blob, cch, opts) {\n\tvar retval;\n\tif(opts) {\n\t\tif(opts.biff >= 2 && opts.biff <= 5) return blob.read_shift(cch, 'cpstr');\n\t\tif(opts.biff >= 12) return blob.read_shift(cch, 'dbcs-cont');\n\t}\n\tvar fHighByte = blob.read_shift(1);\n\tif(fHighByte===0) { retval = blob.read_shift(cch, 'sbcs-cont'); }\n\telse { retval = blob.read_shift(cch, 'dbcs-cont'); }\n\treturn retval;\n}\n\n/* 2.5.294 XLUnicodeString */\nfunction parse_XLUnicodeString(blob, length, opts) {\n\tvar cch = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\tif(cch === 0) { blob.l++; return \"\"; }\n\treturn parse_XLUnicodeStringNoCch(blob, cch, opts);\n}\n/* BIFF5 override */\nfunction parse_XLUnicodeString2(blob, length, opts) {\n\tif(opts.biff > 5) return parse_XLUnicodeString(blob, length, opts);\n\tvar cch = blob.read_shift(1);\n\tif(cch === 0) { blob.l++; return \"\"; }\n\treturn blob.read_shift(cch, (opts.biff <= 4 || !blob.lens ) ? 'cpstr' : 'sbcs-cont');\n}\n/* TODO: BIFF5 and lower, codepage awareness */\nfunction write_XLUnicodeString(str, opts, o) {\n\tif(!o) o = new_buf(3 + 2 * str.length);\n\to.write_shift(2, str.length);\n\to.write_shift(1, 1);\n\to.write_shift(31, str, 'utf16le');\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.61 ControlInfo */\nfunction parse_ControlInfo(blob) {\n\tvar flags = blob.read_shift(1);\n\tblob.l++;\n\tvar accel = blob.read_shift(2);\n\tblob.l += 2;\n\treturn [flags, accel];\n}\n\n/* [MS-OSHARED] 2.3.7.6 URLMoniker TODO: flags */\nfunction parse_URLMoniker(blob) {\n\tvar len = blob.read_shift(4), start = blob.l;\n\tvar extra = false;\n\tif(len > 24) {\n\t\t/* look ahead */\n\t\tblob.l += len - 24;\n\t\tif(blob.read_shift(16) === \"795881f43b1d7f48af2c825dc4852763\") extra = true;\n\t\tblob.l = start;\n\t}\n\tvar url = blob.read_shift((extra?len-24:len)>>1, 'utf16le').replace(chr0,\"\");\n\tif(extra) blob.l += 24;\n\treturn url;\n}\n\n/* [MS-OSHARED] 2.3.7.8 FileMoniker TODO: all fields */\nfunction parse_FileMoniker(blob) {\n\tblob.l += 2; //var cAnti = blob.read_shift(2);\n\tvar ansiPath = blob.read_shift(0, 'lpstr-ansi');\n\tblob.l += 2; //var endServer = blob.read_shift(2);\n\tif(blob.read_shift(2) != 0xDEAD) throw new Error(\"Bad FileMoniker\");\n\tvar sz = blob.read_shift(4);\n\tif(sz === 0) return ansiPath.replace(/\\\\/g,\"/\");\n\tvar bytes = blob.read_shift(4);\n\tif(blob.read_shift(2) != 3) throw new Error(\"Bad FileMoniker\");\n\tvar unicodePath = blob.read_shift(bytes>>1, 'utf16le').replace(chr0,\"\");\n\treturn unicodePath;\n}\n\n/* [MS-OSHARED] 2.3.7.2 HyperlinkMoniker TODO: all the monikers */\nfunction parse_HyperlinkMoniker(blob, length) {\n\tvar clsid = blob.read_shift(16); length -= 16;\n\tswitch(clsid) {\n\t\tcase \"e0c9ea79f9bace118c8200aa004ba90b\": return parse_URLMoniker(blob, length);\n\t\tcase \"0303000000000000c000000000000046\": return parse_FileMoniker(blob, length);\n\t\tdefault: throw new Error(\"Unsupported Moniker \" + clsid);\n\t}\n}\n\n/* [MS-OSHARED] 2.3.7.9 HyperlinkString */\nfunction parse_HyperlinkString(blob) {\n\tvar len = blob.read_shift(4);\n\tvar o = len > 0 ? blob.read_shift(len, 'utf16le').replace(chr0, \"\") : \"\";\n\treturn o;\n}\n\n/* [MS-OSHARED] 2.3.7.1 Hyperlink Object */\nfunction parse_Hyperlink(blob, length) {\n\tvar end = blob.l + length;\n\tvar sVer = blob.read_shift(4);\n\tif(sVer !== 2) throw new Error(\"Unrecognized streamVersion: \" + sVer);\n\tvar flags = blob.read_shift(2);\n\tblob.l += 2;\n\tvar displayName, targetFrameName, moniker, oleMoniker, Loc=\"\", guid, fileTime;\n\tif(flags & 0x0010) displayName = parse_HyperlinkString(blob, end - blob.l);\n\tif(flags & 0x0080) targetFrameName = parse_HyperlinkString(blob, end - blob.l);\n\tif((flags & 0x0101) === 0x0101) moniker = parse_HyperlinkString(blob, end - blob.l);\n\tif((flags & 0x0101) === 0x0001) oleMoniker = parse_HyperlinkMoniker(blob, end - blob.l);\n\tif(flags & 0x0008) Loc = parse_HyperlinkString(blob, end - blob.l);\n\tif(flags & 0x0020) guid = blob.read_shift(16);\n\tif(flags & 0x0040) fileTime = parse_FILETIME(blob/*, 8*/);\n\tblob.l = end;\n\tvar target = targetFrameName||moniker||oleMoniker||\"\";\n\tif(target && Loc) target+=\"#\"+Loc;\n\tif(!target) target = \"#\" + Loc;\n\tvar out = ({Target:target});\n\tif(guid) out.guid = guid;\n\tif(fileTime) out.time = fileTime;\n\tif(displayName) out.Tooltip = displayName;\n\treturn out;\n}\nfunction write_Hyperlink(hl) {\n\tvar out = new_buf(512), i = 0;\n\tvar Target = hl.Target;\n\tvar F = Target.indexOf(\"#\") > -1 ? 0x1f : 0x17;\n\tswitch(Target.charAt(0)) { case \"#\": F=0x1c; break; case \".\": F&=~2; break; }\n\tout.write_shift(4,2); out.write_shift(4, F);\n\tvar data = [8,6815827,6619237,4849780,83]; for(i = 0; i < data.length; ++i) out.write_shift(4, data[i]);\n\tif(F == 0x1C) {\n\t\tTarget = Target.slice(1);\n\t\tout.write_shift(4, Target.length + 1);\n\t\tfor(i = 0; i < Target.length; ++i) out.write_shift(2, Target.charCodeAt(i));\n\t\tout.write_shift(2, 0);\n\t} else if(F & 0x02) {\n\t\tdata = \"e0 c9 ea 79 f9 ba ce 11 8c 82 00 aa 00 4b a9 0b\".split(\" \");\n\t\tfor(i = 0; i < data.length; ++i) out.write_shift(1, parseInt(data[i], 16));\n\t\tout.write_shift(4, 2*(Target.length + 1));\n\t\tfor(i = 0; i < Target.length; ++i) out.write_shift(2, Target.charCodeAt(i));\n\t\tout.write_shift(2, 0);\n\t} else {\n\t\tdata = \"03 03 00 00 00 00 00 00 c0 00 00 00 00 00 00 46\".split(\" \");\n\t\tfor(i = 0; i < data.length; ++i) out.write_shift(1, parseInt(data[i], 16));\n\t\tvar P = 0;\n\t\twhile(Target.slice(P*3,P*3+3)==\"../\"||Target.slice(P*3,P*3+3)==\"..\\\\\") ++P;\n\t\tout.write_shift(2, P);\n\t\tout.write_shift(4, Target.length + 1);\n\t\tfor(i = 0; i < Target.length; ++i) out.write_shift(1, Target.charCodeAt(i) & 0xFF);\n\t\tout.write_shift(1, 0);\n\t\tout.write_shift(2, 0xFFFF);\n\t\tout.write_shift(2, 0xDEAD);\n\t\tfor(i = 0; i < 6; ++i) out.write_shift(4, 0);\n\t}\n\treturn out.slice(0, out.l);\n}\n\n/* 2.5.178 LongRGBA */\nfunction parse_LongRGBA(blob) { var r = blob.read_shift(1), g = blob.read_shift(1), b = blob.read_shift(1), a = blob.read_shift(1); return [r,g,b,a]; }\n\n/* 2.5.177 LongRGB */\nfunction parse_LongRGB(blob, length) { var x = parse_LongRGBA(blob, length); x[3] = 0; return x; }\n\n\n/* [MS-XLS] 2.5.19 */\nfunction parse_XLSCell(blob) {\n\tvar rw = blob.read_shift(2); // 0-indexed\n\tvar col = blob.read_shift(2);\n\tvar ixfe = blob.read_shift(2);\n\treturn ({r:rw, c:col, ixfe:ixfe});\n}\nfunction write_XLSCell(R, C, ixfe, o) {\n\tif(!o) o = new_buf(6);\n\to.write_shift(2, R);\n\to.write_shift(2, C);\n\to.write_shift(2, ixfe||0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.134 */\nfunction parse_frtHeader(blob) {\n\tvar rt = blob.read_shift(2);\n\tvar flags = blob.read_shift(2); // TODO: parse these flags\n\tblob.l += 8;\n\treturn {type: rt, flags: flags};\n}\n\n\n\nfunction parse_OptXLUnicodeString(blob, length, opts) { return length === 0 ? \"\" : parse_XLUnicodeString2(blob, length, opts); }\n\n/* [MS-XLS] 2.5.344 */\nfunction parse_XTI(blob, length, opts) {\n\tvar w = opts.biff > 8 ? 4 : 2;\n\tvar iSupBook = blob.read_shift(w), itabFirst = blob.read_shift(w,'i'), itabLast = blob.read_shift(w,'i');\n\treturn [iSupBook, itabFirst, itabLast];\n}\n\n/* [MS-XLS] 2.5.218 */\nfunction parse_RkRec(blob) {\n\tvar ixfe = blob.read_shift(2);\n\tvar RK = parse_RkNumber(blob);\n\treturn [ixfe, RK];\n}\n\n/* [MS-XLS] 2.5.1 */\nfunction parse_AddinUdf(blob, length, opts) {\n\tblob.l += 4; length -= 4;\n\tvar l = blob.l + length;\n\tvar udfName = parse_ShortXLUnicodeString(blob, length, opts);\n\tvar cb = blob.read_shift(2);\n\tl -= blob.l;\n\tif(cb !== l) throw new Error(\"Malformed AddinUdf: padding = \" + l + \" != \" + cb);\n\tblob.l += cb;\n\treturn udfName;\n}\n\n/* [MS-XLS] 2.5.209 TODO: Check sizes */\nfunction parse_Ref8U(blob) {\n\tvar rwFirst = blob.read_shift(2);\n\tvar rwLast = blob.read_shift(2);\n\tvar colFirst = blob.read_shift(2);\n\tvar colLast = blob.read_shift(2);\n\treturn {s:{c:colFirst, r:rwFirst}, e:{c:colLast,r:rwLast}};\n}\nfunction write_Ref8U(r, o) {\n\tif(!o) o = new_buf(8);\n\to.write_shift(2, r.s.r);\n\to.write_shift(2, r.e.r);\n\to.write_shift(2, r.s.c);\n\to.write_shift(2, r.e.c);\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.211 */\nfunction parse_RefU(blob) {\n\tvar rwFirst = blob.read_shift(2);\n\tvar rwLast = blob.read_shift(2);\n\tvar colFirst = blob.read_shift(1);\n\tvar colLast = blob.read_shift(1);\n\treturn {s:{c:colFirst, r:rwFirst}, e:{c:colLast,r:rwLast}};\n}\n\n/* [MS-XLS] 2.5.207 */\nvar parse_Ref = parse_RefU;\n\n/* [MS-XLS] 2.5.143 */\nfunction parse_FtCmo(blob) {\n\tblob.l += 4;\n\tvar ot = blob.read_shift(2);\n\tvar id = blob.read_shift(2);\n\tvar flags = blob.read_shift(2);\n\tblob.l+=12;\n\treturn [id, ot, flags];\n}\n\n/* [MS-XLS] 2.5.149 */\nfunction parse_FtNts(blob) {\n\tvar out = {};\n\tblob.l += 4;\n\tblob.l += 16; // GUID TODO\n\tout.fSharedNote = blob.read_shift(2);\n\tblob.l += 4;\n\treturn out;\n}\n\n/* [MS-XLS] 2.5.142 */\nfunction parse_FtCf(blob) {\n\tvar out = {};\n\tblob.l += 4;\n\tblob.cf = blob.read_shift(2);\n\treturn out;\n}\n\n/* [MS-XLS] 2.5.140 - 2.5.154 and friends */\nfunction parse_FtSkip(blob) { blob.l += 2; blob.l += blob.read_shift(2); }\nvar FtTab = {\n0x00: parse_FtSkip, /* FtEnd */\n0x04: parse_FtSkip, /* FtMacro */\n0x05: parse_FtSkip, /* FtButton */\n0x06: parse_FtSkip, /* FtGmo */\n0x07: parse_FtCf, /* FtCf */\n0x08: parse_FtSkip, /* FtPioGrbit */\n0x09: parse_FtSkip, /* FtPictFmla */\n0x0A: parse_FtSkip, /* FtCbls */\n0x0B: parse_FtSkip, /* FtRbo */\n0x0C: parse_FtSkip, /* FtSbs */\n0x0D: parse_FtNts, /* FtNts */\n0x0E: parse_FtSkip, /* FtSbsFmla */\n0x0F: parse_FtSkip, /* FtGboData */\n0x10: parse_FtSkip, /* FtEdoData */\n0x11: parse_FtSkip, /* FtRboData */\n0x12: parse_FtSkip, /* FtCblsData */\n0x13: parse_FtSkip, /* FtLbsData */\n0x14: parse_FtSkip, /* FtCblsFmla */\n0x15: parse_FtCmo\n};\nfunction parse_FtArray(blob, length) {\n\tvar tgt = blob.l + length;\n\tvar fts = [];\n\twhile(blob.l < tgt) {\n\t\tvar ft = blob.read_shift(2);\n\t\tblob.l-=2;\n\t\ttry {\n\t\t\tfts.push(FtTab[ft](blob, tgt - blob.l));\n\t\t} catch(e) { blob.l = tgt; return fts; }\n\t}\n\tif(blob.l != tgt) blob.l = tgt; //throw new Error(\"bad Object Ft-sequence\");\n\treturn fts;\n}\n\n/* --- 2.4 Records --- */\n\n/* [MS-XLS] 2.4.21 */\nfunction parse_BOF(blob, length) {\n\tvar o = {BIFFVer:0, dt:0};\n\to.BIFFVer = blob.read_shift(2); length -= 2;\n\tif(length >= 2) { o.dt = blob.read_shift(2); blob.l -= 2; }\n\tswitch(o.BIFFVer) {\n\t\tcase 0x0600: /* BIFF8 */\n\t\tcase 0x0500: /* BIFF5 */\n\t\tcase 0x0400: /* BIFF4 */\n\t\tcase 0x0300: /* BIFF3 */\n\t\tcase 0x0200: /* BIFF2 */\n\t\tcase 0x0002: case 0x0007: /* BIFF2 */\n\t\t\tbreak;\n\t\tdefault: if(length > 6) throw new Error(\"Unexpected BIFF Ver \" + o.BIFFVer);\n\t}\n\n\tblob.read_shift(length);\n\treturn o;\n}\nfunction write_BOF(wb, t, o) {\n\tvar h = 0x0600, w = 16;\n\tswitch(o.bookType) {\n\t\tcase 'biff8': break;\n\t\tcase 'biff5': h = 0x0500; w = 8; break;\n\t\tcase 'biff4': h = 0x0004; w = 6; break;\n\t\tcase 'biff3': h = 0x0003; w = 6; break;\n\t\tcase 'biff2': h = 0x0002; w = 4; break;\n\t\tcase 'xla': break;\n\t\tdefault: throw new Error(\"unsupported BIFF version\");\n\t}\n\tvar out = new_buf(w);\n\tout.write_shift(2, h);\n\tout.write_shift(2, t);\n\tif(w > 4) out.write_shift(2, 0x7262);\n\tif(w > 6) out.write_shift(2, 0x07CD);\n\tif(w > 8) {\n\t\tout.write_shift(2, 0xC009);\n\t\tout.write_shift(2, 0x0001);\n\t\tout.write_shift(2, 0x0706);\n\t\tout.write_shift(2, 0x0000);\n\t}\n\treturn out;\n}\n\n\n/* [MS-XLS] 2.4.146 */\nfunction parse_InterfaceHdr(blob, length) {\n\tif(length === 0) return 0x04b0;\n\tif((blob.read_shift(2))!==0x04b0){/* empty */}\n\treturn 0x04b0;\n}\n\n\n/* [MS-XLS] 2.4.349 */\nfunction parse_WriteAccess(blob, length, opts) {\n\tif(opts.enc) { blob.l += length; return \"\"; }\n\tvar l = blob.l;\n\t// TODO: make sure XLUnicodeString doesnt overrun\n\tvar UserName = parse_XLUnicodeString2(blob, 0, opts);\n\tblob.read_shift(length + l - blob.l);\n\treturn UserName;\n}\nfunction write_WriteAccess(s, opts) {\n\tvar b8 = !opts || opts.biff == 8;\n\tvar o = new_buf(b8 ? 112 : 54);\n\to.write_shift(opts.biff == 8 ? 2 : 1, 7);\n\tif(b8) o.write_shift(1, 0);\n\to.write_shift(4, 0x33336853);\n\to.write_shift(4, (0x00534A74 | (b8 ? 0 : 0x20000000)));\n\twhile(o.l < o.length) o.write_shift(1, (b8 ? 0 : 32));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.351 */\nfunction parse_WsBool(blob, length, opts) {\n\tvar flags = opts && opts.biff == 8 || length == 2 ? blob.read_shift(2) : (blob.l += length, 0);\n\treturn { fDialog: flags & 0x10 };\n}\n\n/* [MS-XLS] 2.4.28 */\nfunction parse_BoundSheet8(blob, length, opts) {\n\tvar pos = blob.read_shift(4);\n\tvar hidden = blob.read_shift(1) & 0x03;\n\tvar dt = blob.read_shift(1);\n\tswitch(dt) {\n\t\tcase 0: dt = 'Worksheet'; break;\n\t\tcase 1: dt = 'Macrosheet'; break;\n\t\tcase 2: dt = 'Chartsheet'; break;\n\t\tcase 6: dt = 'VBAModule'; break;\n\t}\n\tvar name = parse_ShortXLUnicodeString(blob, 0, opts);\n\tif(name.length === 0) name = \"Sheet1\";\n\treturn { pos:pos, hs:hidden, dt:dt, name:name };\n}\nfunction write_BoundSheet8(data, opts) {\n\tvar w = (!opts || opts.biff >= 8 ? 2 : 1);\n\tvar o = new_buf(8 + w * data.name.length);\n\to.write_shift(4, data.pos);\n\to.write_shift(1, data.hs || 0);\n\to.write_shift(1, data.dt);\n\to.write_shift(1, data.name.length);\n\tif(opts.biff >= 8) o.write_shift(1, 1);\n\to.write_shift(w * data.name.length, data.name, opts.biff < 8 ? 'sbcs' : 'utf16le');\n\tvar out = o.slice(0, o.l);\n\tout.l = o.l; return out;\n}\n\n/* [MS-XLS] 2.4.265 TODO */\nfunction parse_SST(blob, length) {\n\tvar end = blob.l + length;\n\tvar cnt = blob.read_shift(4);\n\tvar ucnt = blob.read_shift(4);\n\tvar strs = ([]);\n\tfor(var i = 0; i != ucnt && blob.l < end; ++i) {\n\t\tstrs.push(parse_XLUnicodeRichExtendedString(blob));\n\t}\n\tstrs.Count = cnt; strs.Unique = ucnt;\n\treturn strs;\n}\nfunction write_SST(sst, opts) {\n\tvar header = new_buf(8);\n\theader.write_shift(4, sst.Count);\n\theader.write_shift(4, sst.Unique);\n\tvar strs = [];\n\tfor(var j = 0; j < sst.length; ++j) strs[j] = write_XLUnicodeRichExtendedString(sst[j], opts);\n\tvar o = bconcat([header].concat(strs));\no.parts = [header.length].concat(strs.map(function(str) { return str.length; }));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.107 */\nfunction parse_ExtSST(blob, length) {\n\tvar extsst = {};\n\textsst.dsst = blob.read_shift(2);\n\tblob.l += length-2;\n\treturn extsst;\n}\n\n\n/* [MS-XLS] 2.4.221 TODO: check BIFF2-4 */\nfunction parse_Row(blob) {\n\tvar z = ({});\n\tz.r = blob.read_shift(2);\n\tz.c = blob.read_shift(2);\n\tz.cnt = blob.read_shift(2) - z.c;\n\tvar miyRw = blob.read_shift(2);\n\tblob.l += 4; // reserved(2), unused(2)\n\tvar flags = blob.read_shift(1); // various flags\n\tblob.l += 3; // reserved(8), ixfe(12), flags(4)\n\tif(flags & 0x07) z.level = flags & 0x07;\n\t// collapsed: flags & 0x10\n\tif(flags & 0x20) z.hidden = true;\n\tif(flags & 0x40) z.hpt = miyRw / 20;\n\treturn z;\n}\n\n\n/* [MS-XLS] 2.4.125 */\nfunction parse_ForceFullCalculation(blob) {\n\tvar header = parse_frtHeader(blob);\n\tif(header.type != 0x08A3) throw new Error(\"Invalid Future Record \" + header.type);\n\tvar fullcalc = blob.read_shift(4);\n\treturn fullcalc !== 0x0;\n}\n\n\n\n\n\n/* [MS-XLS] 2.4.215 rt */\nfunction parse_RecalcId(blob) {\n\tblob.read_shift(2);\n\treturn blob.read_shift(4);\n}\n\n/* [MS-XLS] 2.4.87 */\nfunction parse_DefaultRowHeight(blob, length, opts) {\n\tvar f = 0;\n\tif(!(opts && opts.biff == 2)) {\n\t\tf = blob.read_shift(2);\n\t}\n\tvar miyRw = blob.read_shift(2);\n\tif((opts && opts.biff == 2)) {\n\t\tf = 1 - (miyRw >> 15); miyRw &= 0x7fff;\n\t}\n\tvar fl = {Unsynced:f&1,DyZero:(f&2)>>1,ExAsc:(f&4)>>2,ExDsc:(f&8)>>3};\n\treturn [fl, miyRw];\n}\n\n/* [MS-XLS] 2.4.345 TODO */\nfunction parse_Window1(blob) {\n\tvar xWn = blob.read_shift(2), yWn = blob.read_shift(2), dxWn = blob.read_shift(2), dyWn = blob.read_shift(2);\n\tvar flags = blob.read_shift(2), iTabCur = blob.read_shift(2), iTabFirst = blob.read_shift(2);\n\tvar ctabSel = blob.read_shift(2), wTabRatio = blob.read_shift(2);\n\treturn { Pos: [xWn, yWn], Dim: [dxWn, dyWn], Flags: flags, CurTab: iTabCur,\n\t\tFirstTab: iTabFirst, Selected: ctabSel, TabRatio: wTabRatio };\n}\nfunction write_Window1() {\n\tvar o = new_buf(18);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0x7260);\n\to.write_shift(2, 0x44c0);\n\to.write_shift(2, 0x38);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, 1);\n\to.write_shift(2, 0x01f4);\n\treturn o;\n}\n/* [MS-XLS] 2.4.346 TODO */\nfunction parse_Window2(blob, length, opts) {\n\tif(opts && opts.biff >= 2 && opts.biff < 5) return {};\n\tvar f = blob.read_shift(2);\n\treturn { RTL: f & 0x40 };\n}\nfunction write_Window2(view) {\n\tvar o = new_buf(18), f = 0x6b6;\n\tif(view && view.RTL) f |= 0x40;\n\to.write_shift(2, f);\n\to.write_shift(4, 0);\n\to.write_shift(4, 64);\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.189 TODO */\nfunction parse_Pane(/*blob, length, opts*/) {\n}\n\n/* [MS-XLS] 2.4.122 TODO */\nfunction parse_Font(blob, length, opts) {\n\tvar o = {\n\t\tdyHeight: blob.read_shift(2),\n\t\tfl: blob.read_shift(2)\n\t};\n\tswitch((opts && opts.biff) || 8) {\n\t\tcase 2: break;\n\t\tcase 3: case 4: blob.l += 2; break;\n\t\tdefault: blob.l += 10; break;\n\t}\n\to.name = parse_ShortXLUnicodeString(blob, 0, opts);\n\treturn o;\n}\nfunction write_Font(data, opts) {\n\tvar name = data.name || \"Arial\";\n\tvar b5 = (opts && (opts.biff == 5)), w = (b5 ? (15 + name.length) : (16 + 2 * name.length));\n\tvar o = new_buf(w);\n\to.write_shift(2, (data.sz || 12) * 20);\n\to.write_shift(4, 0);\n\to.write_shift(2, 400);\n\to.write_shift(4, 0);\n\to.write_shift(2, 0);\n\to.write_shift(1, name.length);\n\tif(!b5) o.write_shift(1, 1);\n\to.write_shift((b5 ? 1 : 2) * name.length, name, (b5 ? \"sbcs\" : \"utf16le\"));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.149 */\nfunction parse_LabelSst(blob) {\n\tvar cell = parse_XLSCell(blob);\n\tcell.isst = blob.read_shift(4);\n\treturn cell;\n}\nfunction write_LabelSst(R, C, v, os ) {\n\tvar o = new_buf(10);\n\twrite_XLSCell(R, C, os, o);\n\to.write_shift(4, v);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.148 */\nfunction parse_Label(blob, length, opts) {\n\tvar target = blob.l + length;\n\tvar cell = parse_XLSCell(blob, 6);\n\tif(opts.biff == 2) blob.l++;\n\tvar str = parse_XLUnicodeString(blob, target - blob.l, opts);\n\tcell.val = str;\n\treturn cell;\n}\nfunction write_Label(R, C, v, os, opts) {\n\tvar b8 = !opts || opts.biff == 8;\n\tvar o = new_buf(6 + 2 + (+b8) + (1 + b8) * v.length);\n\twrite_XLSCell(R, C, os, o);\n\to.write_shift(2, v.length);\n\tif(b8) o.write_shift(1, 1);\n\to.write_shift((1 + b8) * v.length, v, b8 ? 'utf16le' : 'sbcs');\n\treturn o;\n}\n\n\n/* [MS-XLS] 2.4.126 Number Formats */\nfunction parse_Format(blob, length, opts) {\n\tvar numFmtId = blob.read_shift(2);\n\tvar fmtstr = parse_XLUnicodeString2(blob, 0, opts);\n\treturn [numFmtId, fmtstr];\n}\nfunction write_Format(i, f, opts, o) {\n\tvar b5 = (opts && (opts.biff == 5));\n\tif(!o) o = new_buf(b5 ? (3 + f.length) : (5 + 2 * f.length));\n\to.write_shift(2, i);\n\to.write_shift((b5 ? 1 : 2), f.length);\n\tif(!b5) o.write_shift(1, 1);\n\to.write_shift((b5 ? 1 : 2) * f.length, f, (b5 ? 'sbcs' : 'utf16le'));\n\tvar out = (o.length > o.l) ? o.slice(0, o.l) : o;\n\tif(out.l == null) out.l = out.length;\n\treturn out;\n}\nvar parse_BIFF2Format = parse_XLUnicodeString2;\n\n/* [MS-XLS] 2.4.90 */\nfunction parse_Dimensions(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar w = opts.biff == 8 || !opts.biff ? 4 : 2;\n\tvar r = blob.read_shift(w), R = blob.read_shift(w);\n\tvar c = blob.read_shift(2), C = blob.read_shift(2);\n\tblob.l = end;\n\treturn {s: {r:r, c:c}, e: {r:R, c:C}};\n}\nfunction write_Dimensions(range, opts) {\n\tvar w = opts.biff == 8 || !opts.biff ? 4 : 2;\n\tvar o = new_buf(2*w + 6);\n\to.write_shift(w, range.s.r);\n\to.write_shift(w, range.e.r + 1);\n\to.write_shift(2, range.s.c);\n\to.write_shift(2, range.e.c + 1);\n\to.write_shift(2, 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.220 */\nfunction parse_RK(blob) {\n\tvar rw = blob.read_shift(2), col = blob.read_shift(2);\n\tvar rkrec = parse_RkRec(blob);\n\treturn {r:rw, c:col, ixfe:rkrec[0], rknum:rkrec[1]};\n}\n\n/* [MS-XLS] 2.4.175 */\nfunction parse_MulRk(blob, length) {\n\tvar target = blob.l + length - 2;\n\tvar rw = blob.read_shift(2), col = blob.read_shift(2);\n\tvar rkrecs = [];\n\twhile(blob.l < target) rkrecs.push(parse_RkRec(blob));\n\tif(blob.l !== target) throw new Error(\"MulRK read error\");\n\tvar lastcol = blob.read_shift(2);\n\tif(rkrecs.length != lastcol - col + 1) throw new Error(\"MulRK length mismatch\");\n\treturn {r:rw, c:col, C:lastcol, rkrec:rkrecs};\n}\n/* [MS-XLS] 2.4.174 */\nfunction parse_MulBlank(blob, length) {\n\tvar target = blob.l + length - 2;\n\tvar rw = blob.read_shift(2), col = blob.read_shift(2);\n\tvar ixfes = [];\n\twhile(blob.l < target) ixfes.push(blob.read_shift(2));\n\tif(blob.l !== target) throw new Error(\"MulBlank read error\");\n\tvar lastcol = blob.read_shift(2);\n\tif(ixfes.length != lastcol - col + 1) throw new Error(\"MulBlank length mismatch\");\n\treturn {r:rw, c:col, C:lastcol, ixfe:ixfes};\n}\n\n/* [MS-XLS] 2.5.20 2.5.249 TODO: interpret values here */\nfunction parse_CellStyleXF(blob, length, style, opts) {\n\tvar o = {};\n\tvar a = blob.read_shift(4), b = blob.read_shift(4);\n\tvar c = blob.read_shift(4), d = blob.read_shift(2);\n\to.patternType = XLSFillPattern[c >> 26];\n\n\tif(!opts.cellStyles) return o;\n\to.alc = a & 0x07;\n\to.fWrap = (a >> 3) & 0x01;\n\to.alcV = (a >> 4) & 0x07;\n\to.fJustLast = (a >> 7) & 0x01;\n\to.trot = (a >> 8) & 0xFF;\n\to.cIndent = (a >> 16) & 0x0F;\n\to.fShrinkToFit = (a >> 20) & 0x01;\n\to.iReadOrder = (a >> 22) & 0x02;\n\to.fAtrNum = (a >> 26) & 0x01;\n\to.fAtrFnt = (a >> 27) & 0x01;\n\to.fAtrAlc = (a >> 28) & 0x01;\n\to.fAtrBdr = (a >> 29) & 0x01;\n\to.fAtrPat = (a >> 30) & 0x01;\n\to.fAtrProt = (a >> 31) & 0x01;\n\n\to.dgLeft = b & 0x0F;\n\to.dgRight = (b >> 4) & 0x0F;\n\to.dgTop = (b >> 8) & 0x0F;\n\to.dgBottom = (b >> 12) & 0x0F;\n\to.icvLeft = (b >> 16) & 0x7F;\n\to.icvRight = (b >> 23) & 0x7F;\n\to.grbitDiag = (b >> 30) & 0x03;\n\n\to.icvTop = c & 0x7F;\n\to.icvBottom = (c >> 7) & 0x7F;\n\to.icvDiag = (c >> 14) & 0x7F;\n\to.dgDiag = (c >> 21) & 0x0F;\n\n\to.icvFore = d & 0x7F;\n\to.icvBack = (d >> 7) & 0x7F;\n\to.fsxButton = (d >> 14) & 0x01;\n\treturn o;\n}\n//function parse_CellXF(blob, length, opts) {return parse_CellStyleXF(blob,length,0, opts);}\n//function parse_StyleXF(blob, length, opts) {return parse_CellStyleXF(blob,length,1, opts);}\n\n/* [MS-XLS] 2.4.353 TODO: actually do this right */\nfunction parse_XF(blob, length, opts) {\n\tvar o = {};\n\to.ifnt = blob.read_shift(2); o.numFmtId = blob.read_shift(2); o.flags = blob.read_shift(2);\n\to.fStyle = (o.flags >> 2) & 0x01;\n\tlength -= 6;\n\to.data = parse_CellStyleXF(blob, length, o.fStyle, opts);\n\treturn o;\n}\nfunction write_XF(data, ixfeP, opts, o) {\n\tvar b5 = (opts && (opts.biff == 5));\n\tif(!o) o = new_buf(b5 ? 16 : 20);\n\to.write_shift(2, 0);\n\tif(data.style) {\n\t\to.write_shift(2, (data.numFmtId||0));\n\t\to.write_shift(2, 0xFFF4);\n\t} else {\n\t\to.write_shift(2, (data.numFmtId||0));\n\t\to.write_shift(2, (ixfeP<<4));\n\t}\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\tif(!b5) o.write_shift(4, 0);\n\to.write_shift(2, 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.134 */\nfunction parse_Guts(blob) {\n\tblob.l += 4;\n\tvar out = [blob.read_shift(2), blob.read_shift(2)];\n\tif(out[0] !== 0) out[0]--;\n\tif(out[1] !== 0) out[1]--;\n\tif(out[0] > 7 || out[1] > 7) throw new Error(\"Bad Gutters: \" + out.join(\"|\"));\n\treturn out;\n}\nfunction write_Guts(guts) {\n\tvar o = new_buf(8);\n\to.write_shift(4, 0);\n\to.write_shift(2, guts[0] ? guts[0] + 1 : 0);\n\to.write_shift(2, guts[1] ? guts[1] + 1 : 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.24 */\nfunction parse_BoolErr(blob, length, opts) {\n\tvar cell = parse_XLSCell(blob, 6);\n\tif(opts.biff == 2) ++blob.l;\n\tvar val = parse_Bes(blob, 2);\n\tcell.val = val;\n\tcell.t = (val === true || val === false) ? 'b' : 'e';\n\treturn cell;\n}\nfunction write_BoolErr(R, C, v, os, opts, t) {\n\tvar o = new_buf(8);\n\twrite_XLSCell(R, C, os, o);\n\twrite_Bes(v, t, o);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.180 Number */\nfunction parse_Number(blob) {\n\tvar cell = parse_XLSCell(blob, 6);\n\tvar xnum = parse_Xnum(blob, 8);\n\tcell.val = xnum;\n\treturn cell;\n}\nfunction write_Number(R, C, v, os) {\n\tvar o = new_buf(14);\n\twrite_XLSCell(R, C, os, o);\n\twrite_Xnum(v, o);\n\treturn o;\n}\n\nvar parse_XLHeaderFooter = parse_OptXLUnicodeString; // TODO: parse 2.4.136\n\n/* [MS-XLS] 2.4.271 */\nfunction parse_SupBook(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar ctab = blob.read_shift(2);\n\tvar cch = blob.read_shift(2);\n\topts.sbcch = cch;\n\tif(cch == 0x0401 || cch == 0x3A01) return [cch, ctab];\n\tif(cch < 0x01 || cch >0xff) throw new Error(\"Unexpected SupBook type: \"+cch);\n\tvar virtPath = parse_XLUnicodeStringNoCch(blob, cch);\n\t/* TODO: 2.5.277 Virtual Path */\n\tvar rgst = [];\n\twhile(end > blob.l) rgst.push(parse_XLUnicodeString(blob));\n\treturn [cch, ctab, virtPath, rgst];\n}\n\n/* [MS-XLS] 2.4.105 TODO */\nfunction parse_ExternName(blob, length, opts) {\n\tvar flags = blob.read_shift(2);\n\tvar body;\n\tvar o = ({\n\t\tfBuiltIn: flags & 0x01,\n\t\tfWantAdvise: (flags >>> 1) & 0x01,\n\t\tfWantPict: (flags >>> 2) & 0x01,\n\t\tfOle: (flags >>> 3) & 0x01,\n\t\tfOleLink: (flags >>> 4) & 0x01,\n\t\tcf: (flags >>> 5) & 0x3FF,\n\t\tfIcon: flags >>> 15 & 0x01\n\t});\n\tif(opts.sbcch === 0x3A01) body = parse_AddinUdf(blob, length-2, opts);\n\t//else throw new Error(\"unsupported SupBook cch: \" + opts.sbcch);\n\to.body = body || blob.read_shift(length-2);\n\tif(typeof body === \"string\") o.Name = body;\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.150 TODO */\nvar XLSLblBuiltIn = [\n\t\"_xlnm.Consolidate_Area\",\n\t\"_xlnm.Auto_Open\",\n\t\"_xlnm.Auto_Close\",\n\t\"_xlnm.Extract\",\n\t\"_xlnm.Database\",\n\t\"_xlnm.Criteria\",\n\t\"_xlnm.Print_Area\",\n\t\"_xlnm.Print_Titles\",\n\t\"_xlnm.Recorder\",\n\t\"_xlnm.Data_Form\",\n\t\"_xlnm.Auto_Activate\",\n\t\"_xlnm.Auto_Deactivate\",\n\t\"_xlnm.Sheet_Title\",\n\t\"_xlnm._FilterDatabase\"\n];\nfunction parse_Lbl(blob, length, opts) {\n\tvar target = blob.l + length;\n\tvar flags = blob.read_shift(2);\n\tvar chKey = blob.read_shift(1);\n\tvar cch = blob.read_shift(1);\n\tvar cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\tvar itab = 0;\n\tif(!opts || opts.biff >= 5) {\n\t\tif(opts.biff != 5) blob.l += 2;\n\t\titab = blob.read_shift(2);\n\t\tif(opts.biff == 5) blob.l += 2;\n\t\tblob.l += 4;\n\t}\n\tvar name = parse_XLUnicodeStringNoCch(blob, cch, opts);\n\tif(flags & 0x20) name = XLSLblBuiltIn[name.charCodeAt(0)];\n\tvar npflen = target - blob.l; if(opts && opts.biff == 2) --npflen;\n\tvar rgce = target == blob.l || cce === 0 ? [] : parse_NameParsedFormula(blob, npflen, opts, cce);\n\treturn {\n\t\tchKey: chKey,\n\t\tName: name,\n\t\titab: itab,\n\t\trgce: rgce\n\t};\n}\n\n/* [MS-XLS] 2.4.106 TODO: verify filename encoding */\nfunction parse_ExternSheet(blob, length, opts) {\n\tif(opts.biff < 8) return parse_BIFF5ExternSheet(blob, length, opts);\n\tvar o = [], target = blob.l + length, len = blob.read_shift(opts.biff > 8 ? 4 : 2);\n\twhile(len-- !== 0) o.push(parse_XTI(blob, opts.biff > 8 ? 12 : 6, opts));\n\t\t// [iSupBook, itabFirst, itabLast];\n\tif(blob.l != target) throw new Error(\"Bad ExternSheet: \" + blob.l + \" != \" + target);\n\treturn o;\n}\nfunction parse_BIFF5ExternSheet(blob, length, opts) {\n\tif(blob[blob.l + 1] == 0x03) blob[blob.l]++;\n\tvar o = parse_ShortXLUnicodeString(blob, length, opts);\n\treturn o.charCodeAt(0) == 0x03 ? o.slice(1) : o;\n}\n\n/* [MS-XLS] 2.4.176 TODO: check older biff */\nfunction parse_NameCmt(blob, length, opts) {\n\tif(opts.biff < 8) { blob.l += length; return; }\n\tvar cchName = blob.read_shift(2);\n\tvar cchComment = blob.read_shift(2);\n\tvar name = parse_XLUnicodeStringNoCch(blob, cchName, opts);\n\tvar comment = parse_XLUnicodeStringNoCch(blob, cchComment, opts);\n\treturn [name, comment];\n}\n\n/* [MS-XLS] 2.4.260 */\nfunction parse_ShrFmla(blob, length, opts) {\n\tvar ref = parse_RefU(blob, 6);\n\tblob.l++;\n\tvar cUse = blob.read_shift(1);\n\tlength -= 8;\n\treturn [parse_SharedParsedFormula(blob, length, opts), cUse, ref];\n}\n\n/* [MS-XLS] 2.4.4 TODO */\nfunction parse_Array(blob, length, opts) {\n\tvar ref = parse_Ref(blob, 6);\n\t/* TODO: fAlwaysCalc */\n\tswitch(opts.biff) {\n\t\tcase 2: blob.l ++; length -= 7; break;\n\t\tcase 3: case 4: blob.l += 2; length -= 8; break;\n\t\tdefault: blob.l += 6; length -= 12;\n\t}\n\treturn [ref, parse_ArrayParsedFormula(blob, length, opts, ref)];\n}\n\n/* [MS-XLS] 2.4.173 */\nfunction parse_MTRSettings(blob) {\n\tvar fMTREnabled = blob.read_shift(4) !== 0x00;\n\tvar fUserSetThreadCount = blob.read_shift(4) !== 0x00;\n\tvar cUserThreadCount = blob.read_shift(4);\n\treturn [fMTREnabled, fUserSetThreadCount, cUserThreadCount];\n}\n\n/* [MS-XLS] 2.5.186 TODO: BIFF5 */\nfunction parse_NoteSh(blob, length, opts) {\n\tif(opts.biff < 8) return;\n\tvar row = blob.read_shift(2), col = blob.read_shift(2);\n\tvar flags = blob.read_shift(2), idObj = blob.read_shift(2);\n\tvar stAuthor = parse_XLUnicodeString2(blob, 0, opts);\n\tif(opts.biff < 8) blob.read_shift(1);\n\treturn [{r:row,c:col}, stAuthor, idObj, flags];\n}\n\n/* [MS-XLS] 2.4.179 */\nfunction parse_Note(blob, length, opts) {\n\t/* TODO: Support revisions */\n\treturn parse_NoteSh(blob, length, opts);\n}\n\n/* [MS-XLS] 2.4.168 */\nfunction parse_MergeCells(blob, length) {\n\tvar merges = [];\n\tvar cmcs = blob.read_shift(2);\n\twhile (cmcs--) merges.push(parse_Ref8U(blob,length));\n\treturn merges;\n}\nfunction write_MergeCells(merges) {\n\tvar o = new_buf(2 + merges.length * 8);\n\to.write_shift(2, merges.length);\n\tfor(var i = 0; i < merges.length; ++i) write_Ref8U(merges[i], o);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.181 TODO: parse all the things! */\nfunction parse_Obj(blob, length, opts) {\n\tif(opts && opts.biff < 8) return parse_BIFF5Obj(blob, length, opts);\n\tvar cmo = parse_FtCmo(blob, 22); // id, ot, flags\n\tvar fts = parse_FtArray(blob, length-22, cmo[1]);\n\treturn { cmo: cmo, ft:fts };\n}\n/* from older spec */\nvar parse_BIFF5OT = [];\nparse_BIFF5OT[0x08] = function(blob, length) {\n\tvar tgt = blob.l + length;\n\tblob.l += 10; // todo\n\tvar cf = blob.read_shift(2);\n\tblob.l += 4;\n\tblob.l += 2; //var cbPictFmla = blob.read_shift(2);\n\tblob.l += 2;\n\tblob.l += 2; //var grbit = blob.read_shift(2);\n\tblob.l += 4;\n\tvar cchName = blob.read_shift(1);\n\tblob.l += cchName; // TODO: stName\n\tblob.l = tgt; // TODO: fmla\n\treturn { fmt:cf };\n};\n\nfunction parse_BIFF5Obj(blob, length, opts) {\n\tblob.l += 4; //var cnt = blob.read_shift(4);\n\tvar ot = blob.read_shift(2);\n\tvar id = blob.read_shift(2);\n\tvar grbit = blob.read_shift(2);\n\tblob.l += 2; //var colL = blob.read_shift(2);\n\tblob.l += 2; //var dxL = blob.read_shift(2);\n\tblob.l += 2; //var rwT = blob.read_shift(2);\n\tblob.l += 2; //var dyT = blob.read_shift(2);\n\tblob.l += 2; //var colR = blob.read_shift(2);\n\tblob.l += 2; //var dxR = blob.read_shift(2);\n\tblob.l += 2; //var rwB = blob.read_shift(2);\n\tblob.l += 2; //var dyB = blob.read_shift(2);\n\tblob.l += 2; //var cbMacro = blob.read_shift(2);\n\tblob.l += 6;\n\tlength -= 36;\n\tvar fts = [];\n\tfts.push((parse_BIFF5OT[ot]||parsenoop)(blob, length, opts));\n\treturn { cmo: [id, ot, grbit], ft:fts };\n}\n\n/* [MS-XLS] 2.4.329 TODO: parse properly */\nfunction parse_TxO(blob, length, opts) {\n\tvar s = blob.l;\n\tvar texts = \"\";\ntry {\n\tblob.l += 4;\n\tvar ot = (opts.lastobj||{cmo:[0,0]}).cmo[1];\n\tvar controlInfo; // eslint-disable-line no-unused-vars\n\tif([0,5,7,11,12,14].indexOf(ot) == -1) blob.l += 6;\n\telse controlInfo = parse_ControlInfo(blob, 6, opts);\n\tvar cchText = blob.read_shift(2);\n\t/*var cbRuns = */blob.read_shift(2);\n\t/*var ifntEmpty = */parseuint16(blob, 2);\n\tvar len = blob.read_shift(2);\n\tblob.l += len;\n\t//var fmla = parse_ObjFmla(blob, s + length - blob.l);\n\n\tfor(var i = 1; i < blob.lens.length-1; ++i) {\n\t\tif(blob.l-s != blob.lens[i]) throw new Error(\"TxO: bad continue record\");\n\t\tvar hdr = blob[blob.l];\n\t\tvar t = parse_XLUnicodeStringNoCch(blob, blob.lens[i+1]-blob.lens[i]-1);\n\t\ttexts += t;\n\t\tif(texts.length >= (hdr ? cchText : 2*cchText)) break;\n\t}\n\tif(texts.length !== cchText && texts.length !== cchText*2) {\n\t\tthrow new Error(\"cchText: \" + cchText + \" != \" + texts.length);\n\t}\n\n\tblob.l = s + length;\n\t/* [MS-XLS] 2.5.272 TxORuns */\n//\tvar rgTxoRuns = [];\n//\tfor(var j = 0; j != cbRuns/8-1; ++j) blob.l += 8;\n//\tvar cchText2 = blob.read_shift(2);\n//\tif(cchText2 !== cchText) throw new Error(\"TxOLastRun mismatch: \" + cchText2 + \" \" + cchText);\n//\tblob.l += 6;\n//\tif(s + length != blob.l) throw new Error(\"TxO \" + (s + length) + \", at \" + blob.l);\n\treturn { t: texts };\n} catch(e) { blob.l = s + length; return { t: texts }; }\n}\n\n/* [MS-XLS] 2.4.140 */\nfunction parse_HLink(blob, length) {\n\tvar ref = parse_Ref8U(blob, 8);\n\tblob.l += 16; /* CLSID */\n\tvar hlink = parse_Hyperlink(blob, length-24);\n\treturn [ref, hlink];\n}\nfunction write_HLink(hl) {\n\tvar O = new_buf(24);\n\tvar ref = decode_cell(hl[0]);\n\tO.write_shift(2, ref.r); O.write_shift(2, ref.r);\n\tO.write_shift(2, ref.c); O.write_shift(2, ref.c);\n\tvar clsid = \"d0 c9 ea 79 f9 ba ce 11 8c 82 00 aa 00 4b a9 0b\".split(\" \");\n\tfor(var i = 0; i < 16; ++i) O.write_shift(1, parseInt(clsid[i], 16));\n\treturn bconcat([O, write_Hyperlink(hl[1])]);\n}\n\n\n/* [MS-XLS] 2.4.141 */\nfunction parse_HLinkTooltip(blob, length) {\n\tblob.read_shift(2);\n\tvar ref = parse_Ref8U(blob, 8);\n\tvar wzTooltip = blob.read_shift((length-10)/2, 'dbcs-cont');\n\twzTooltip = wzTooltip.replace(chr0,\"\");\n\treturn [ref, wzTooltip];\n}\nfunction write_HLinkTooltip(hl) {\n\tvar TT = hl[1].Tooltip;\n\tvar O = new_buf(10 + 2 * (TT.length + 1));\n\tO.write_shift(2, 0x0800);\n\tvar ref = decode_cell(hl[0]);\n\tO.write_shift(2, ref.r); O.write_shift(2, ref.r);\n\tO.write_shift(2, ref.c); O.write_shift(2, ref.c);\n\tfor(var i = 0; i < TT.length; ++i) O.write_shift(2, TT.charCodeAt(i));\n\tO.write_shift(2, 0);\n\treturn O;\n}\n\n/* [MS-XLS] 2.4.63 */\nfunction parse_Country(blob) {\n\tvar o = [0,0], d;\n\td = blob.read_shift(2); o[0] = CountryEnum[d] || d;\n\td = blob.read_shift(2); o[1] = CountryEnum[d] || d;\n\treturn o;\n}\nfunction write_Country(o) {\n\tif(!o) o = new_buf(4);\n\to.write_shift(2, 0x01);\n\to.write_shift(2, 0x01);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.50 ClrtClient */\nfunction parse_ClrtClient(blob) {\n\tvar ccv = blob.read_shift(2);\n\tvar o = [];\n\twhile(ccv-->0) o.push(parse_LongRGB(blob, 8));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.188 */\nfunction parse_Palette(blob) {\n\tvar ccv = blob.read_shift(2);\n\tvar o = [];\n\twhile(ccv-->0) o.push(parse_LongRGB(blob, 8));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.354 */\nfunction parse_XFCRC(blob) {\n\tblob.l += 2;\n\tvar o = {cxfs:0, crc:0};\n\to.cxfs = blob.read_shift(2);\n\to.crc = blob.read_shift(4);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.53 TODO: parse flags */\n/* [MS-XLSB] 2.4.323 TODO: parse flags */\nfunction parse_ColInfo(blob, length, opts) {\n\tif(!opts.cellStyles) return parsenoop(blob, length);\n\tvar w = opts && opts.biff >= 12 ? 4 : 2;\n\tvar colFirst = blob.read_shift(w);\n\tvar colLast = blob.read_shift(w);\n\tvar coldx = blob.read_shift(w);\n\tvar ixfe = blob.read_shift(w);\n\tvar flags = blob.read_shift(2);\n\tif(w == 2) blob.l += 2;\n\tvar o = ({s:colFirst, e:colLast, w:coldx, ixfe:ixfe, flags:flags});\n\tif(opts.biff >= 5 || !opts.biff) o.level = (flags >> 8) & 0x7;\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.257 */\nfunction parse_Setup(blob, length) {\n\tvar o = {};\n\tif(length < 32) return o;\n\tblob.l += 16;\n\to.header = parse_Xnum(blob, 8);\n\to.footer = parse_Xnum(blob, 8);\n\tblob.l += 2;\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.261 */\nfunction parse_ShtProps(blob, length, opts) {\n\tvar def = {area:false};\n\tif(opts.biff != 5) { blob.l += length; return def; }\n\tvar d = blob.read_shift(1); blob.l += 3;\n\tif((d & 0x10)) def.area = true;\n\treturn def;\n}\n\n/* [MS-XLS] 2.4.241 */\nfunction write_RRTabId(n) {\n\tvar out = new_buf(2 * n);\n\tfor(var i = 0; i < n; ++i) out.write_shift(2, i+1);\n\treturn out;\n}\n\nvar parse_Blank = parse_XLSCell; /* [MS-XLS] 2.4.20 Just the cell */\nvar parse_Scl = parseuint16a; /* [MS-XLS] 2.4.247 num, den */\nvar parse_String = parse_XLUnicodeString; /* [MS-XLS] 2.4.268 */\n\n/* --- Specific to versions before BIFF8 --- */\nfunction parse_ImData(blob) {\n\tvar cf = blob.read_shift(2);\n\tvar env = blob.read_shift(2);\n\tvar lcb = blob.read_shift(4);\n\tvar o = {fmt:cf, env:env, len:lcb, data:blob.slice(blob.l,blob.l+lcb)};\n\tblob.l += lcb;\n\treturn o;\n}\n\n/* BIFF2_??? where ??? is the name from [XLS] */\nfunction parse_BIFF2STR(blob, length, opts) {\n\tvar cell = parse_XLSCell(blob, 6);\n\t++blob.l;\n\tvar str = parse_XLUnicodeString2(blob, length-7, opts);\n\tcell.t = 'str';\n\tcell.val = str;\n\treturn cell;\n}\n\nfunction parse_BIFF2NUM(blob) {\n\tvar cell = parse_XLSCell(blob, 6);\n\t++blob.l;\n\tvar num = parse_Xnum(blob, 8);\n\tcell.t = 'n';\n\tcell.val = num;\n\treturn cell;\n}\nfunction write_BIFF2NUM(r, c, val) {\n\tvar out = new_buf(15);\n\twrite_BIFF2Cell(out, r, c);\n\tout.write_shift(8, val, 'f');\n\treturn out;\n}\n\nfunction parse_BIFF2INT(blob) {\n\tvar cell = parse_XLSCell(blob, 6);\n\t++blob.l;\n\tvar num = blob.read_shift(2);\n\tcell.t = 'n';\n\tcell.val = num;\n\treturn cell;\n}\nfunction write_BIFF2INT(r, c, val) {\n\tvar out = new_buf(9);\n\twrite_BIFF2Cell(out, r, c);\n\tout.write_shift(2, val);\n\treturn out;\n}\n\nfunction parse_BIFF2STRING(blob) {\n\tvar cch = blob.read_shift(1);\n\tif(cch === 0) { blob.l++; return \"\"; }\n\treturn blob.read_shift(cch, 'sbcs-cont');\n}\n\n/* TODO: convert to BIFF8 font struct */\nfunction parse_BIFF2FONTXTRA(blob, length) {\n\tblob.l += 6; // unknown\n\tblob.l += 2; // font weight \"bls\"\n\tblob.l += 1; // charset\n\tblob.l += 3; // unknown\n\tblob.l += 1; // font family\n\tblob.l += length - 13;\n}\n\n/* TODO: parse rich text runs */\nfunction parse_RString(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar cell = parse_XLSCell(blob, 6);\n\tvar cch = blob.read_shift(2);\n\tvar str = parse_XLUnicodeStringNoCch(blob, cch, opts);\n\tblob.l = end;\n\tcell.t = 'str';\n\tcell.val = str;\n\treturn cell;\n}\n/* from js-harb (C) 2014-present SheetJS */\nvar DBF = (function() {\nvar dbf_codepage_map = {\n\t/* Code Pages Supported by Visual FoxPro */\n0x01: 437, 0x02: 850,\n0x03: 1252, 0x04: 10000,\n0x64: 852, 0x65: 866,\n0x66: 865, 0x67: 861,\n0x68: 895, 0x69: 620,\n0x6A: 737, 0x6B: 857,\n0x78: 950, 0x79: 949,\n0x7A: 936, 0x7B: 932,\n0x7C: 874, 0x7D: 1255,\n0x7E: 1256, 0x96: 10007,\n0x97: 10029, 0x98: 10006,\n0xC8: 1250, 0xC9: 1251,\n0xCA: 1254, 0xCB: 1253,\n\n\t/* shapefile DBF extension */\n0x00: 20127, 0x08: 865,\n0x09: 437, 0x0A: 850,\n0x0B: 437, 0x0D: 437,\n0x0E: 850, 0x0F: 437,\n0x10: 850, 0x11: 437,\n0x12: 850, 0x13: 932,\n0x14: 850, 0x15: 437,\n0x16: 850, 0x17: 865,\n0x18: 437, 0x19: 437,\n0x1A: 850, 0x1B: 437,\n0x1C: 863, 0x1D: 850,\n0x1F: 852, 0x22: 852,\n0x23: 852, 0x24: 860,\n0x25: 850, 0x26: 866,\n0x37: 850, 0x40: 852,\n0x4D: 936, 0x4E: 949,\n0x4F: 950, 0x50: 874,\n0x57: 1252, 0x58: 1252,\n0x59: 1252,\n\n0xFF: 16969\n};\nvar dbf_reverse_map = evert({\n0x01: 437, 0x02: 850,\n0x03: 1252, 0x04: 10000,\n0x64: 852, 0x65: 866,\n0x66: 865, 0x67: 861,\n0x68: 895, 0x69: 620,\n0x6A: 737, 0x6B: 857,\n0x78: 950, 0x79: 949,\n0x7A: 936, 0x7B: 932,\n0x7C: 874, 0x7D: 1255,\n0x7E: 1256, 0x96: 10007,\n0x97: 10029, 0x98: 10006,\n0xC8: 1250, 0xC9: 1251,\n0xCA: 1254, 0xCB: 1253,\n0x00: 20127\n});\nvar DBF_SUPPORTED_VERSIONS = [0x02, 0x03, 0x30, 0x31, 0x83, 0x8B, 0x8C, 0xF5];\n/* TODO: find an actual specification */\nfunction dbf_to_aoa(buf, opts) {\n\tvar out = [];\n\t/* TODO: browser based */\n\tvar d = (new_raw_buf(1));\n\tswitch(opts.type) {\n\t\tcase 'base64': d = s2a(Base64.decode(buf)); break;\n\t\tcase 'binary': d = s2a(buf); break;\n\t\tcase 'buffer':\n\t\tcase 'array': d = buf; break;\n\t}\n\tprep_blob(d, 0);\n\t/* header */\n\tvar ft = d.read_shift(1);\n\tvar memo = false;\n\tvar vfp = false, l7 = false;\n\tswitch(ft) {\n\t\tcase 0x02: case 0x03: break;\n\t\tcase 0x30: vfp = true; memo = true; break;\n\t\tcase 0x31: vfp = true; break;\n\t\tcase 0x83: memo = true; break;\n\t\tcase 0x8B: memo = true; break;\n\t\tcase 0x8C: memo = true; l7 = true; break;\n\t\tcase 0xF5: memo = true; break;\n\t\tdefault: throw new Error(\"DBF Unsupported Version: \" + ft.toString(16));\n\t}\n\tvar /*filedate = new Date(),*/ nrow = 0, fpos = 0;\n\tif(ft == 0x02) nrow = d.read_shift(2);\n\t/*filedate = new Date(d.read_shift(1) + 1900, d.read_shift(1) - 1, d.read_shift(1));*/d.l += 3;\n\tif(ft != 0x02) nrow = d.read_shift(4);\n\tif(ft != 0x02) fpos = d.read_shift(2);\n\tvar rlen = d.read_shift(2);\n\n\tvar /*flags = 0,*/ current_cp = 1252;\n\tif(ft != 0x02) {\n\td.l+=16;\n\t/*flags = */d.read_shift(1);\n\t//if(memo && ((flags & 0x02) === 0)) throw new Error(\"DBF Flags \" + flags.toString(16) + \" ft \" + ft.toString(16));\n\n\t/* codepage present in FoxPro */\n\tif(d[d.l] !== 0) current_cp = dbf_codepage_map[d[d.l]];\n\td.l+=1;\n\n\td.l+=2;\n\t}\n\tif(l7) d.l += 36;\nvar fields = [], field = ({});\n\tvar hend = fpos - 10 - (vfp ? 264 : 0), ww = l7 ? 32 : 11;\n\twhile(ft == 0x02 ? d.l < d.length && d[d.l] != 0x0d: d.l < hend) {\n\t\tfield = ({});\n\t\tfield.name = cptable.utils.decode(current_cp, d.slice(d.l, d.l+ww)).replace(/[\\u0000\\r\\n].*$/g,\"\");\n\t\td.l += ww;\n\t\tfield.type = String.fromCharCode(d.read_shift(1));\n\t\tif(ft != 0x02 && !l7) field.offset = d.read_shift(4);\n\t\tfield.len = d.read_shift(1);\n\t\tif(ft == 0x02) field.offset = d.read_shift(2);\n\t\tfield.dec = d.read_shift(1);\n\t\tif(field.name.length) fields.push(field);\n\t\tif(ft != 0x02) d.l += l7 ? 13 : 14;\n\t\tswitch(field.type) {\n\t\t\tcase 'B': // VFP Double\n\t\t\t\tif((!vfp || field.len != 8) && opts.WTF) console.log('Skipping ' + field.name + ':' + field.type);\n\t\t\t\tbreak;\n\t\t\tcase 'G': // General\n\t\t\tcase 'P': // Picture\n\t\t\t\tif(opts.WTF) console.log('Skipping ' + field.name + ':' + field.type);\n\t\t\t\tbreak;\n\t\t\tcase 'C': // character\n\t\t\tcase 'D': // date\n\t\t\tcase 'F': // floating point\n\t\t\tcase 'I': // long\n\t\t\tcase 'L': // boolean\n\t\t\tcase 'M': // memo\n\t\t\tcase 'N': // number\n\t\t\tcase 'O': // double\n\t\t\tcase 'T': // datetime\n\t\t\tcase 'Y': // currency\n\t\t\tcase '0': // VFP _NullFlags\n\t\t\tcase '@': // timestamp\n\t\t\tcase '+': // autoincrement\n\t\t\t\tbreak;\n\t\t\tdefault: throw new Error('Unknown Field Type: ' + field.type);\n\t\t}\n\t}\n\tif(d[d.l] !== 0x0D) d.l = fpos-1;\n\telse if(ft == 0x02) d.l = 0x209;\n\tif(ft != 0x02) {\n\t\tif(d.read_shift(1) !== 0x0D) throw new Error(\"DBF Terminator not found \" + d.l + \" \" + d[d.l]);\n\t\td.l = fpos;\n\t}\n\t/* data */\n\tvar R = 0, C = 0;\n\tout[0] = [];\n\tfor(C = 0; C != fields.length; ++C) out[0][C] = fields[C].name;\n\twhile(nrow-- > 0) {\n\t\tif(d[d.l] === 0x2A) { d.l+=rlen; continue; }\n\t\t++d.l;\n\t\tout[++R] = []; C = 0;\n\t\tfor(C = 0; C != fields.length; ++C) {\n\t\t\tvar dd = d.slice(d.l, d.l+fields[C].len); d.l+=fields[C].len;\n\t\t\tprep_blob(dd, 0);\n\t\t\tvar s = cptable.utils.decode(current_cp, dd);\n\t\t\tswitch(fields[C].type) {\n\t\t\t\tcase 'C':\n\t\t\t\t\tout[R][C] = cptable.utils.decode(current_cp, dd);\n\t\t\t\t\tout[R][C] = out[R][C].trim();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'D':\n\t\t\t\t\tif(s.length === 8) out[R][C] = new Date(+s.slice(0,4), +s.slice(4,6)-1, +s.slice(6,8));\n\t\t\t\t\telse out[R][C] = s;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'F': out[R][C] = parseFloat(s.trim()); break;\n\t\t\t\tcase '+': case 'I': out[R][C] = l7 ? dd.read_shift(-4, 'i') ^ 0x80000000 : dd.read_shift(4, 'i'); break;\n\t\t\t\tcase 'L': switch(s.toUpperCase()) {\n\t\t\t\t\tcase 'Y': case 'T': out[R][C] = true; break;\n\t\t\t\t\tcase 'N': case 'F': out[R][C] = false; break;\n\t\t\t\t\tcase ' ': case '?': out[R][C] = false; break; /* NOTE: technically uninitialized */\n\t\t\t\t\tdefault: throw new Error(\"DBF Unrecognized L:|\" + s + \"|\");\n\t\t\t\t\t} break;\n\t\t\t\tcase 'M': /* TODO: handle memo files */\n\t\t\t\t\tif(!memo) throw new Error(\"DBF Unexpected MEMO for type \" + ft.toString(16));\n\t\t\t\t\tout[R][C] = \"##MEMO##\" + (l7 ? parseInt(s.trim(), 10): dd.read_shift(4));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'N': out[R][C] = +s.replace(/\\u0000/g,\"\").trim(); break;\n\t\t\t\tcase '@': out[R][C] = new Date(dd.read_shift(-8, 'f') - 0x388317533400); break;\n\t\t\t\tcase 'T': out[R][C] = new Date((dd.read_shift(4) - 0x253D8C) * 0x5265C00 + dd.read_shift(4)); break;\n\t\t\t\tcase 'Y': out[R][C] = dd.read_shift(4,'i')/1e4; break;\n\t\t\t\tcase 'O': out[R][C] = -dd.read_shift(-8, 'f'); break;\n\t\t\t\tcase 'B': if(vfp && fields[C].len == 8) { out[R][C] = dd.read_shift(8,'f'); break; }\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 'G': case 'P': dd.l += fields[C].len; break;\n\t\t\t\tcase '0':\n\t\t\t\t\tif(fields[C].name === '_NullFlags') break;\n\t\t\t\t\t/* falls through */\n\t\t\t\tdefault: throw new Error(\"DBF Unsupported data type \" + fields[C].type);\n\t\t\t}\n\t\t}\n\t}\n\tif(ft != 0x02) if(d.l < d.length && d[d.l++] != 0x1A) throw new Error(\"DBF EOF Marker missing \" + (d.l-1) + \" of \" + d.length + \" \" + d[d.l-1].toString(16));\n\tif(opts && opts.sheetRows) out = out.slice(0, opts.sheetRows);\n\treturn out;\n}\n\nfunction dbf_to_sheet(buf, opts) {\n\tvar o = opts || {};\n\tif(!o.dateNF) o.dateNF = \"yyyymmdd\";\n\treturn aoa_to_sheet(dbf_to_aoa(buf, o), o);\n}\n\nfunction dbf_to_workbook(buf, opts) {\n\ttry { return sheet_to_workbook(dbf_to_sheet(buf, opts), opts); }\n\tcatch(e) { if(opts && opts.WTF) throw e; }\n\treturn ({SheetNames:[],Sheets:{}});\n}\n\nvar _RLEN = { 'B': 8, 'C': 250, 'L': 1, 'D': 8, '?': 0, '': 0 };\nfunction sheet_to_dbf(ws, opts) {\n\tvar o = opts || {};\n\tif(+o.codepage >= 0) set_cp(+o.codepage);\n\tif(o.type == \"string\") throw new Error(\"Cannot write DBF to JS string\");\n\tvar ba = buf_array();\n\tvar aoa = sheet_to_json(ws, {header:1, raw:true, cellDates:true});\n\tvar headers = aoa[0], data = aoa.slice(1);\n\tvar i = 0, j = 0, hcnt = 0, rlen = 1;\n\tfor(i = 0; i < headers.length; ++i) {\n\t\tif(i == null) continue;\n\t\t++hcnt;\n\t\tif(typeof headers[i] === 'number') headers[i] = headers[i].toString(10);\n\t\tif(typeof headers[i] !== 'string') throw new Error(\"DBF Invalid column name \" + headers[i] + \" |\" + (typeof headers[i]) + \"|\");\n\t\tif(headers.indexOf(headers[i]) !== i) for(j=0; j<1024;++j)\n\t\t\tif(headers.indexOf(headers[i] + \"_\" + j) == -1) { headers[i] += \"_\" + j; break; }\n\t}\n\tvar range = safe_decode_range(ws['!ref']);\n\tvar coltypes = [];\n\tfor(i = 0; i <= range.e.c - range.s.c; ++i) {\n\t\tvar col = [];\n\t\tfor(j=0; j < data.length; ++j) {\n\t\t\tif(data[j][i] != null) col.push(data[j][i]);\n\t\t}\n\t\tif(col.length == 0 || headers[i] == null) { coltypes[i] = '?'; continue; }\n\t\tvar guess = '', _guess = '';\n\t\tfor(j = 0; j < col.length; ++j) {\n\t\t\tswitch(typeof col[j]) {\n\t\t\t\t/* TODO: check if L2 compat is desired */\n\t\t\t\tcase 'number': _guess = 'B'; break;\n\t\t\t\tcase 'string': _guess = 'C'; break;\n\t\t\t\tcase 'boolean': _guess = 'L'; break;\n\t\t\t\tcase 'object': _guess = col[j] instanceof Date ? 'D' : 'C'; break;\n\t\t\t\tdefault: _guess = 'C';\n\t\t\t}\n\t\t\tguess = guess && guess != _guess ? 'C' : _guess;\n\t\t\tif(guess == 'C') break;\n\t\t}\n\t\trlen += _RLEN[guess] || 0;\n\t\tcoltypes[i] = guess;\n\t}\n\n\tvar h = ba.next(32);\n\th.write_shift(4, 0x13021130);\n\th.write_shift(4, data.length);\n\th.write_shift(2, 296 + 32 * hcnt);\n\th.write_shift(2, rlen);\n\tfor(i=0; i < 4; ++i) h.write_shift(4, 0);\n\th.write_shift(4, 0x00000000 | ((+dbf_reverse_map[current_ansi] || 0x03)<<8));\n\n\tfor(i = 0, j = 0; i < headers.length; ++i) {\n\t\tif(headers[i] == null) continue;\n\t\tvar hf = ba.next(32);\n\t\tvar _f = (headers[i].slice(-10) + \"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\").slice(0, 11);\n\t\thf.write_shift(1, _f, \"sbcs\");\n\t\thf.write_shift(1, coltypes[i] == '?' ? 'C' : coltypes[i], \"sbcs\");\n\t\thf.write_shift(4, j);\n\t\thf.write_shift(1, _RLEN[coltypes[i]] || 0);\n\t\thf.write_shift(1, 0);\n\t\thf.write_shift(1, 0x02);\n\t\thf.write_shift(4, 0);\n\t\thf.write_shift(1, 0);\n\t\thf.write_shift(4, 0);\n\t\thf.write_shift(4, 0);\n\t\tj += _RLEN[coltypes[i]] || 0;\n\t}\n\n\tvar hb = ba.next(264);\n\thb.write_shift(4, 0x0000000D);\n\tfor(i=0; i < 65;++i) hb.write_shift(4, 0x00000000);\n\tfor(i=0; i < data.length; ++i) {\n\t\tvar rout = ba.next(rlen);\n\t\trout.write_shift(1, 0);\n\t\tfor(j=0; j\":190, \"?\":191, \"{\":223\n\t});\n\tvar sylk_char_regex = new RegExp(\"\\u001BN(\" + keys(sylk_escapes).join(\"|\").replace(/\\|\\|\\|/, \"|\\\\||\").replace(/([?()+])/g,\"\\\\$1\") + \"|\\\\|)\", \"gm\");\n\tvar sylk_char_fn = function(_, $1){ var o = sylk_escapes[$1]; return typeof o == \"number\" ? _getansi(o) : o; };\n\tvar decode_sylk_char = function($$, $1, $2) { var newcc = (($1.charCodeAt(0) - 0x20)<<4) | ($2.charCodeAt(0) - 0x30); return newcc == 59 ? $$ : _getansi(newcc); };\n\tsylk_escapes[\"|\"] = 254;\n\t/* TODO: find an actual specification */\n\tfunction sylk_to_aoa(d, opts) {\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': return sylk_to_aoa_str(Base64.decode(d), opts);\n\t\t\tcase 'binary': return sylk_to_aoa_str(d, opts);\n\t\t\tcase 'buffer': return sylk_to_aoa_str(d.toString('binary'), opts);\n\t\t\tcase 'array': return sylk_to_aoa_str(cc2str(d), opts);\n\t\t}\n\t\tthrow new Error(\"Unrecognized type \" + opts.type);\n\t}\n\tfunction sylk_to_aoa_str(str, opts) {\n\t\tvar records = str.split(/[\\n\\r]+/), R = -1, C = -1, ri = 0, rj = 0, arr = [];\n\t\tvar formats = [];\n\t\tvar next_cell_format = null;\n\t\tvar sht = {}, rowinfo = [], colinfo = [], cw = [];\n\t\tvar Mval = 0, j;\n\t\tif(+opts.codepage >= 0) set_cp(+opts.codepage);\n\t\tfor (; ri !== records.length; ++ri) {\n\t\t\tMval = 0;\n\t\t\tvar rstr=records[ri].trim().replace(/\\x1B([\\x20-\\x2F])([\\x30-\\x3F])/g, decode_sylk_char).replace(sylk_char_regex, sylk_char_fn);\n\t\t\tvar record=rstr.replace(/;;/g, \"\\u0000\").split(\";\").map(function(x) { return x.replace(/\\u0000/g, \";\"); });\n\t\t\tvar RT=record[0], val;\n\t\t\tif(rstr.length > 0) switch(RT) {\n\t\t\tcase 'ID': break; /* header */\n\t\t\tcase 'E': break; /* EOF */\n\t\t\tcase 'B': break; /* dimensions */\n\t\t\tcase 'O': break; /* options? */\n\t\t\tcase 'P':\n\t\t\t\tif(record[1].charAt(0) == 'P')\n\t\t\t\t\tformats.push(rstr.slice(3).replace(/;;/g, \";\"));\n\t\t\t\tbreak;\n\t\t\tcase 'C':\n\t\t\tvar C_seen_K = false, C_seen_X = false;\n\t\t\tfor(rj=1; rj 0) { rowinfo[R].hpt = Mval; rowinfo[R].hpx = pt2px(Mval); }\n\t\t\t\t\telse if(Mval === 0) rowinfo[R].hidden = true;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault: if(opts && opts.WTF) throw new Error(\"SYLK bad record \" + rstr);\n\t\t\t}\n\t\t\tif(F_seen < 1) next_cell_format = null; break;\n\t\t\tdefault: if(opts && opts.WTF) throw new Error(\"SYLK bad record \" + rstr);\n\t\t\t}\n\t\t}\n\t\tif(rowinfo.length > 0) sht['!rows'] = rowinfo;\n\t\tif(colinfo.length > 0) sht['!cols'] = colinfo;\n\t\tif(opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);\n\t\treturn [arr, sht];\n\t}\n\n\tfunction sylk_to_sheet(d, opts) {\n\t\tvar aoasht = sylk_to_aoa(d, opts);\n\t\tvar aoa = aoasht[0], ws = aoasht[1];\n\t\tvar o = aoa_to_sheet(aoa, opts);\n\t\tkeys(ws).forEach(function(k) { o[k] = ws[k]; });\n\t\treturn o;\n\t}\n\n\tfunction sylk_to_workbook(d, opts) { return sheet_to_workbook(sylk_to_sheet(d, opts), opts); }\n\n\tfunction write_ws_cell_sylk(cell, ws, R, C) {\n\t\tvar o = \"C;Y\" + (R+1) + \";X\" + (C+1) + \";K\";\n\t\tswitch(cell.t) {\n\t\t\tcase 'n':\n\t\t\t\to += (cell.v||0);\n\t\t\t\tif(cell.f && !cell.F) o += \";E\" + a1_to_rc(cell.f, {r:R, c:C}); break;\n\t\t\tcase 'b': o += cell.v ? \"TRUE\" : \"FALSE\"; break;\n\t\t\tcase 'e': o += cell.w || cell.v; break;\n\t\t\tcase 'd': o += '\"' + (cell.w || cell.v) + '\"'; break;\n\t\t\tcase 's': o += '\"' + cell.v.replace(/\"/g,\"\") + '\"'; break;\n\t\t}\n\t\treturn o;\n\t}\n\n\tfunction write_ws_cols_sylk(out, cols) {\n\t\tcols.forEach(function(col, i) {\n\t\t\tvar rec = \"F;W\" + (i+1) + \" \" + (i+1) + \" \";\n\t\t\tif(col.hidden) rec += \"0\";\n\t\t\telse {\n\t\t\t\tif(typeof col.width == 'number') col.wpx = width2px(col.width);\n\t\t\t\tif(typeof col.wpx == 'number') col.wch = px2char(col.wpx);\n\t\t\t\tif(typeof col.wch == 'number') rec += Math.round(col.wch);\n\t\t\t}\n\t\t\tif(rec.charAt(rec.length - 1) != \" \") out.push(rec);\n\t\t});\n\t}\n\n\tfunction write_ws_rows_sylk(out, rows) {\n\t\trows.forEach(function(row, i) {\n\t\t\tvar rec = \"F;\";\n\t\t\tif(row.hidden) rec += \"M0;\";\n\t\t\telse if(row.hpt) rec += \"M\" + 20 * row.hpt + \";\";\n\t\t\telse if(row.hpx) rec += \"M\" + 20 * px2pt(row.hpx) + \";\";\n\t\t\tif(rec.length > 2) out.push(rec + \"R\" + (i+1));\n\t\t});\n\t}\n\n\tfunction sheet_to_sylk(ws, opts) {\n\t\tvar preamble = [\"ID;PWXL;N;E\"], o = [];\n\t\tvar r = safe_decode_range(ws['!ref']), cell;\n\t\tvar dense = Array.isArray(ws);\n\t\tvar RS = \"\\r\\n\";\n\n\t\tpreamble.push(\"P;PGeneral\");\n\t\tpreamble.push(\"F;P0;DG0G8;M255\");\n\t\tif(ws['!cols']) write_ws_cols_sylk(preamble, ws['!cols']);\n\t\tif(ws['!rows']) write_ws_rows_sylk(preamble, ws['!rows']);\n\n\t\tpreamble.push(\"B;Y\" + (r.e.r - r.s.r + 1) + \";X\" + (r.e.c - r.s.c + 1) + \";D\" + [r.s.c,r.s.r,r.e.c,r.e.r].join(\" \"));\n\t\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\t\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\tvar coord = encode_cell({r:R,c:C});\n\t\t\t\tcell = dense ? (ws[R]||[])[C]: ws[coord];\n\t\t\t\tif(!cell || (cell.v == null && (!cell.f || cell.F))) continue;\n\t\t\t\to.push(write_ws_cell_sylk(cell, ws, R, C, opts));\n\t\t\t}\n\t\t}\n\t\treturn preamble.join(RS) + RS + o.join(RS) + RS + \"E\" + RS;\n\t}\n\n\treturn {\n\t\tto_workbook: sylk_to_workbook,\n\t\tto_sheet: sylk_to_sheet,\n\t\tfrom_sheet: sheet_to_sylk\n\t};\n})();\n\nvar DIF = (function() {\n\tfunction dif_to_aoa(d, opts) {\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': return dif_to_aoa_str(Base64.decode(d), opts);\n\t\t\tcase 'binary': return dif_to_aoa_str(d, opts);\n\t\t\tcase 'buffer': return dif_to_aoa_str(d.toString('binary'), opts);\n\t\t\tcase 'array': return dif_to_aoa_str(cc2str(d), opts);\n\t\t}\n\t\tthrow new Error(\"Unrecognized type \" + opts.type);\n\t}\n\tfunction dif_to_aoa_str(str, opts) {\n\t\tvar records = str.split('\\n'), R = -1, C = -1, ri = 0, arr = [];\n\t\tfor (; ri !== records.length; ++ri) {\n\t\t\tif (records[ri].trim() === 'BOT') { arr[++R] = []; C = 0; continue; }\n\t\t\tif (R < 0) continue;\n\t\t\tvar metadata = records[ri].trim().split(\",\");\n\t\t\tvar type = metadata[0], value = metadata[1];\n\t\t\t++ri;\n\t\t\tvar data = records[ri].trim();\n\t\t\tswitch (+type) {\n\t\t\t\tcase -1:\n\t\t\t\t\tif (data === 'BOT') { arr[++R] = []; C = 0; continue; }\n\t\t\t\t\telse if (data !== 'EOD') throw new Error(\"Unrecognized DIF special command \" + data);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0:\n\t\t\t\t\tif(data === 'TRUE') arr[R][C] = true;\n\t\t\t\t\telse if(data === 'FALSE') arr[R][C] = false;\n\t\t\t\t\telse if(!isNaN(fuzzynum(value))) arr[R][C] = fuzzynum(value);\n\t\t\t\t\telse if(!isNaN(fuzzydate(value).getDate())) arr[R][C] = parseDate(value);\n\t\t\t\t\telse arr[R][C] = value;\n\t\t\t\t\t++C; break;\n\t\t\t\tcase 1:\n\t\t\t\t\tdata = data.slice(1,data.length-1);\n\t\t\t\t\tarr[R][C++] = data !== '' ? data : null;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (data === 'EOD') break;\n\t\t}\n\t\tif(opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);\n\t\treturn arr;\n\t}\n\n\tfunction dif_to_sheet(str, opts) { return aoa_to_sheet(dif_to_aoa(str, opts), opts); }\n\tfunction dif_to_workbook(str, opts) { return sheet_to_workbook(dif_to_sheet(str, opts), opts); }\n\n\tvar sheet_to_dif = (function() {\n\t\tvar push_field = function pf(o, topic, v, n, s) {\n\t\t\to.push(topic);\n\t\t\to.push(v + \",\" + n);\n\t\t\to.push('\"' + s.replace(/\"/g,'\"\"') + '\"');\n\t\t};\n\t\tvar push_value = function po(o, type, v, s) {\n\t\t\to.push(type + \",\" + v);\n\t\t\to.push(type == 1 ? '\"' + s.replace(/\"/g,'\"\"') + '\"' : s);\n\t\t};\n\t\treturn function sheet_to_dif(ws) {\n\t\t\tvar o = [];\n\t\t\tvar r = safe_decode_range(ws['!ref']), cell;\n\t\t\tvar dense = Array.isArray(ws);\n\t\t\tpush_field(o, \"TABLE\", 0, 1, \"sheetjs\");\n\t\t\tpush_field(o, \"VECTORS\", 0, r.e.r - r.s.r + 1,\"\");\n\t\t\tpush_field(o, \"TUPLES\", 0, r.e.c - r.s.c + 1,\"\");\n\t\t\tpush_field(o, \"DATA\", 0, 0,\"\");\n\t\t\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\t\t\tpush_value(o, -1, 0, \"BOT\");\n\t\t\t\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\t\tvar coord = encode_cell({r:R,c:C});\n\t\t\t\t\tcell = dense ? (ws[R]||[])[C] : ws[coord];\n\t\t\t\t\tif(!cell) { push_value(o, 1, 0, \"\"); continue;}\n\t\t\t\t\tswitch(cell.t) {\n\t\t\t\t\t\tcase 'n':\n\t\t\t\t\t\t\tvar val = DIF_XL ? cell.w : cell.v;\n\t\t\t\t\t\t\tif(!val && cell.v != null) val = cell.v;\n\t\t\t\t\t\t\tif(val == null) {\n\t\t\t\t\t\t\t\tif(DIF_XL && cell.f && !cell.F) push_value(o, 1, 0, \"=\" + cell.f);\n\t\t\t\t\t\t\t\telse push_value(o, 1, 0, \"\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse push_value(o, 0, val, \"V\");\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'b':\n\t\t\t\t\t\t\tpush_value(o, 0, cell.v ? 1 : 0, cell.v ? \"TRUE\" : \"FALSE\");\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 's':\n\t\t\t\t\t\t\tpush_value(o, 1, 0, (!DIF_XL || isNaN(cell.v)) ? cell.v : '=\"' + cell.v + '\"');\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'd':\n\t\t\t\t\t\t\tif(!cell.w) cell.w = SSF.format(cell.z || SSF._table[14], datenum(parseDate(cell.v)));\n\t\t\t\t\t\t\tif(DIF_XL) push_value(o, 0, cell.w, \"V\");\n\t\t\t\t\t\t\telse push_value(o, 1, 0, cell.w);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault: push_value(o, 1, 0, \"\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tpush_value(o, -1, 0, \"EOD\");\n\t\t\tvar RS = \"\\r\\n\";\n\t\t\tvar oo = o.join(RS);\n\t\t\t//while((oo.length & 0x7F) != 0) oo += \"\\0\";\n\t\t\treturn oo;\n\t\t};\n\t})();\n\treturn {\n\t\tto_workbook: dif_to_workbook,\n\t\tto_sheet: dif_to_sheet,\n\t\tfrom_sheet: sheet_to_dif\n\t};\n})();\n\nvar ETH = (function() {\n\tfunction decode(s) { return s.replace(/\\\\b/g,\"\\\\\").replace(/\\\\c/g,\":\").replace(/\\\\n/g,\"\\n\"); }\n\tfunction encode(s) { return s.replace(/\\\\/g, \"\\\\b\").replace(/:/g, \"\\\\c\").replace(/\\n/g,\"\\\\n\"); }\n\n\tfunction eth_to_aoa(str, opts) {\n\t\tvar records = str.split('\\n'), R = -1, C = -1, ri = 0, arr = [];\n\t\tfor (; ri !== records.length; ++ri) {\n\t\t\tvar record = records[ri].trim().split(\":\");\n\t\t\tif(record[0] !== 'cell') continue;\n\t\t\tvar addr = decode_cell(record[1]);\n\t\t\tif(arr.length <= addr.r) for(R = arr.length; R <= addr.r; ++R) if(!arr[R]) arr[R] = [];\n\t\t\tR = addr.r; C = addr.c;\n\t\t\tswitch(record[2]) {\n\t\t\t\tcase 't': arr[R][C] = decode(record[3]); break;\n\t\t\t\tcase 'v': arr[R][C] = +record[3]; break;\n\t\t\t\tcase 'vtf': var _f = record[record.length - 1];\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 'vtc':\n\t\t\t\t\tswitch(record[3]) {\n\t\t\t\t\t\tcase 'nl': arr[R][C] = +record[4] ? true : false; break;\n\t\t\t\t\t\tdefault: arr[R][C] = +record[4]; break;\n\t\t\t\t\t}\n\t\t\t\t\tif(record[2] == 'vtf') arr[R][C] = [arr[R][C], _f];\n\t\t\t}\n\t\t}\n\t\tif(opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);\n\t\treturn arr;\n\t}\n\n\tfunction eth_to_sheet(d, opts) { return aoa_to_sheet(eth_to_aoa(d, opts), opts); }\n\tfunction eth_to_workbook(d, opts) { return sheet_to_workbook(eth_to_sheet(d, opts), opts); }\n\n\tvar header = [\n\t\t\"socialcalc:version:1.5\",\n\t\t\"MIME-Version: 1.0\",\n\t\t\"Content-Type: multipart/mixed; boundary=SocialCalcSpreadsheetControlSave\"\n\t].join(\"\\n\");\n\n\tvar sep = [\n\t\t\"--SocialCalcSpreadsheetControlSave\",\n\t\t\"Content-type: text/plain; charset=UTF-8\"\n\t].join(\"\\n\") + \"\\n\";\n\n\t/* TODO: the other parts */\n\tvar meta = [\n\t\t\"# SocialCalc Spreadsheet Control Save\",\n\t\t\"part:sheet\"\n\t].join(\"\\n\");\n\n\tvar end = \"--SocialCalcSpreadsheetControlSave--\";\n\n\tfunction sheet_to_eth_data(ws) {\n\t\tif(!ws || !ws['!ref']) return \"\";\n\t\tvar o = [], oo = [], cell, coord = \"\";\n\t\tvar r = decode_range(ws['!ref']);\n\t\tvar dense = Array.isArray(ws);\n\t\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\t\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\tcoord = encode_cell({r:R,c:C});\n\t\t\t\tcell = dense ? (ws[R]||[])[C] : ws[coord];\n\t\t\t\tif(!cell || cell.v == null || cell.t === 'z') continue;\n\t\t\t\too = [\"cell\", coord, 't'];\n\t\t\t\tswitch(cell.t) {\n\t\t\t\t\tcase 's': case 'str': oo.push(encode(cell.v)); break;\n\t\t\t\t\tcase 'n':\n\t\t\t\t\t\tif(!cell.f) { oo[2]='v'; oo[3]=cell.v; }\n\t\t\t\t\t\telse { oo[2]='vtf'; oo[3]='n'; oo[4]=cell.v; oo[5]=encode(cell.f); }\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'b':\n\t\t\t\t\t\too[2] = 'vt'+(cell.f?'f':'c'); oo[3]='nl'; oo[4]=cell.v?\"1\":\"0\";\n\t\t\t\t\t\too[5] = encode(cell.f||(cell.v?'TRUE':'FALSE'));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'd':\n\t\t\t\t\t\tvar t = datenum(parseDate(cell.v));\n\t\t\t\t\t\too[2] = 'vtc'; oo[3] = 'nd'; oo[4] = \"\"+t;\n\t\t\t\t\t\too[5] = cell.w || SSF.format(cell.z || SSF._table[14], t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'e': continue;\n\t\t\t\t}\n\t\t\t\to.push(oo.join(\":\"));\n\t\t\t}\n\t\t}\n\t\to.push(\"sheet:c:\" + (r.e.c-r.s.c+1) + \":r:\" + (r.e.r-r.s.r+1) + \":tvf:1\");\n\t\to.push(\"valueformat:1:text-wiki\");\n\t\t//o.push(\"copiedfrom:\" + ws['!ref']); // clipboard only\n\t\treturn o.join(\"\\n\");\n\t}\n\n\tfunction sheet_to_eth(ws) {\n\t\treturn [header, sep, meta, sep, sheet_to_eth_data(ws), end].join(\"\\n\");\n\t\t// return [\"version:1.5\", sheet_to_eth_data(ws)].join(\"\\n\"); // clipboard form\n\t}\n\n\treturn {\n\t\tto_workbook: eth_to_workbook,\n\t\tto_sheet: eth_to_sheet,\n\t\tfrom_sheet: sheet_to_eth\n\t};\n})();\n\nvar PRN = (function() {\n\tfunction set_text_arr(data, arr, R, C, o) {\n\t\tif(o.raw) arr[R][C] = data;\n\t\telse if(data === 'TRUE') arr[R][C] = true;\n\t\telse if(data === 'FALSE') arr[R][C] = false;\n\t\telse if(data === \"\"){/* empty */}\n\t\telse if(!isNaN(fuzzynum(data))) arr[R][C] = fuzzynum(data);\n\t\telse if(!isNaN(fuzzydate(data).getDate())) arr[R][C] = parseDate(data);\n\t\telse arr[R][C] = data;\n\t}\n\n\tfunction prn_to_aoa_str(f, opts) {\n\t\tvar o = opts || {};\n\t\tvar arr = ([]);\n\t\tif(!f || f.length === 0) return arr;\n\t\tvar lines = f.split(/[\\r\\n]/);\n\t\tvar L = lines.length - 1;\n\t\twhile(L >= 0 && lines[L].length === 0) --L;\n\t\tvar start = 10, idx = 0;\n\t\tvar R = 0;\n\t\tfor(; R <= L; ++R) {\n\t\t\tidx = lines[R].indexOf(\" \");\n\t\t\tif(idx == -1) idx = lines[R].length; else idx++;\n\t\t\tstart = Math.max(start, idx);\n\t\t}\n\t\tfor(R = 0; R <= L; ++R) {\n\t\t\tarr[R] = [];\n\t\t\t/* TODO: confirm that widths are always 10 */\n\t\t\tvar C = 0;\n\t\t\tset_text_arr(lines[R].slice(0, start).trim(), arr, R, C, o);\n\t\t\tfor(C = 1; C <= (lines[R].length - start)/10 + 1; ++C)\n\t\t\t\tset_text_arr(lines[R].slice(start+(C-1)*10,start+C*10).trim(),arr,R,C,o);\n\t\t}\n\t\tif(o.sheetRows) arr = arr.slice(0, o.sheetRows);\n\t\treturn arr;\n\t}\n\n\t// List of accepted CSV separators\n\tvar guess_seps = {\n0x2C: ',',\n0x09: \"\\t\",\n0x3B: ';'\n\t};\n\n\t// CSV separator weights to be used in case of equal numbers\n\tvar guess_sep_weights = {\n0x2C: 3,\n0x09: 2,\n0x3B: 1\n\t};\n\n\tfunction guess_sep(str) {\n\t\tvar cnt = {}, instr = false, end = 0, cc = 0;\n\t\tfor(;end < str.length;++end) {\n\t\t\tif((cc=str.charCodeAt(end)) == 0x22) instr = !instr;\n\t\t\telse if(!instr && cc in guess_seps) cnt[cc] = (cnt[cc]||0)+1;\n\t\t}\n\n\t\tcc = [];\n\t\tfor(end in cnt) if ( Object.prototype.hasOwnProperty.call(cnt, end) ) {\n\t\t\tcc.push([ cnt[end], end ]);\n\t\t}\n\n\t\tif ( !cc.length ) {\n\t\t\tcnt = guess_sep_weights;\n\t\t\tfor(end in cnt) if ( Object.prototype.hasOwnProperty.call(cnt, end) ) {\n\t\t\t\tcc.push([ cnt[end], end ]);\n\t\t\t}\n\t\t}\n\n\t\tcc.sort(function(a, b) { return a[0] - b[0] || guess_sep_weights[a[1]] - guess_sep_weights[b[1]]; });\n\n\t\treturn guess_seps[cc.pop()[1]];\n\t}\n\n\tfunction dsv_to_sheet_str(str, opts) {\n\t\tvar o = opts || {};\n\t\tvar sep = \"\";\n\t\tif(DENSE != null && o.dense == null) o.dense = DENSE;\n\t\tvar ws = o.dense ? ([]) : ({});\n\t\tvar range = ({s: {c:0, r:0}, e: {c:0, r:0}});\n\n\t\tif(str.slice(0,4) == \"sep=\") {\n\t\t\t// If the line ends in \\r\\n\n\t\t\tif(str.charCodeAt(5) == 13 && str.charCodeAt(6) == 10 ) {\n\t\t\t\tsep = str.charAt(4); str = str.slice(7);\n\t\t\t}\n\t\t\t// If line ends in \\r OR \\n\n\t\t\telse if(str.charCodeAt(5) == 13 || str.charCodeAt(5) == 10 ) {\n\t\t\t\t//\n\t\t\t\tsep = str.charAt(4); str = str.slice(6);\n\t\t\t}\n\t\t}\n\t\telse sep = guess_sep(str.slice(0,1024));\n\t\tvar R = 0, C = 0, v = 0;\n\t\tvar start = 0, end = 0, sepcc = sep.charCodeAt(0), instr = false, cc=0;\n\t\tstr = str.replace(/\\r\\n/mg, \"\\n\");\n\t\tvar _re = o.dateNF != null ? dateNF_regex(o.dateNF) : null;\n\t\tfunction finish_cell() {\n\t\t\tvar s = str.slice(start, end);\n\t\t\tvar cell = ({});\n\t\t\tif(s.charAt(0) == '\"' && s.charAt(s.length - 1) == '\"') s = s.slice(1,-1).replace(/\"\"/g,'\"');\n\t\t\tif(s.length === 0) cell.t = 'z';\n\t\t\telse if(o.raw) { cell.t = 's'; cell.v = s; }\n\t\t\telse if(s.trim().length === 0) { cell.t = 's'; cell.v = s; }\n\t\t\telse if(s.charCodeAt(0) == 0x3D) {\n\t\t\t\tif(s.charCodeAt(1) == 0x22 && s.charCodeAt(s.length - 1) == 0x22) { cell.t = 's'; cell.v = s.slice(2,-1).replace(/\"\"/g,'\"'); }\n\t\t\t\telse if(fuzzyfmla(s)) { cell.t = 'n'; cell.f = s.slice(1); }\n\t\t\t\telse { cell.t = 's'; cell.v = s; } }\n\t\t\telse if(s == \"TRUE\") { cell.t = 'b'; cell.v = true; }\n\t\t\telse if(s == \"FALSE\") { cell.t = 'b'; cell.v = false; }\n\t\t\telse if(!isNaN(v = fuzzynum(s))) { cell.t = 'n'; if(o.cellText !== false) cell.w = s; cell.v = v; }\n\t\t\telse if(!isNaN(fuzzydate(s).getDate()) || _re && s.match(_re)) {\n\t\t\t\tcell.z = o.dateNF || SSF._table[14];\n\t\t\t\tvar k = 0;\n\t\t\t\tif(_re && s.match(_re)){ s=dateNF_fix(s, o.dateNF, (s.match(_re)||[])); k=1; }\n\t\t\t\tif(o.cellDates) { cell.t = 'd'; cell.v = parseDate(s, k); }\n\t\t\t\telse { cell.t = 'n'; cell.v = datenum(parseDate(s, k)); }\n\t\t\t\tif(o.cellText !== false) cell.w = SSF.format(cell.z, cell.v instanceof Date ? datenum(cell.v):cell.v);\n\t\t\t\tif(!o.cellNF) delete cell.z;\n\t\t\t} else {\n\t\t\t\tcell.t = 's';\n\t\t\t\tcell.v = s;\n\t\t\t}\n\t\t\tif(cell.t == 'z'){}\n\t\t\telse if(o.dense) { if(!ws[R]) ws[R] = []; ws[R][C] = cell; }\n\t\t\telse ws[encode_cell({c:C,r:R})] = cell;\n\t\t\tstart = end+1;\n\t\t\tif(range.e.c < C) range.e.c = C;\n\t\t\tif(range.e.r < R) range.e.r = R;\n\t\t\tif(cc == sepcc) ++C; else { C = 0; ++R; if(o.sheetRows && o.sheetRows <= R) return true; }\n\t\t}\n\t\touter: for(;end < str.length;++end) switch((cc=str.charCodeAt(end))) {\n\t\t\tcase 0x22: instr = !instr; break;\n\t\t\tcase sepcc: case 0x0a: case 0x0d: if(!instr && finish_cell()) break outer; break;\n\t\t\tdefault: break;\n\t\t}\n\t\tif(end - start > 0) finish_cell();\n\n\t\tws['!ref'] = encode_range(range);\n\t\treturn ws;\n\t}\n\n\tfunction prn_to_sheet_str(str, opts) {\n\t\tif(!(opts && opts.PRN)) return dsv_to_sheet_str(str, opts);\n\t\tif(str.slice(0,4) == \"sep=\") return dsv_to_sheet_str(str, opts);\n\t\tif(str.indexOf(\"\\t\") >= 0 || str.indexOf(\",\") >= 0 || str.indexOf(\";\") >= 0) return dsv_to_sheet_str(str, opts);\n\t\treturn aoa_to_sheet(prn_to_aoa_str(str, opts), opts);\n\t}\n\n\tfunction prn_to_sheet(d, opts) {\n\t\tvar str = \"\", bytes = opts.type == 'string' ? [0,0,0,0] : firstbyte(d, opts);\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': str = Base64.decode(d); break;\n\t\t\tcase 'binary': str = d; break;\n\t\t\tcase 'buffer':\n\t\t\t\tif(opts.codepage == 65001) str = d.toString('utf8');\n\t\t\t\telse if(opts.codepage && typeof cptable !== 'undefined') str = cptable.utils.decode(opts.codepage, d);\n\t\t\t\telse str = d.toString('binary');\n\t\t\t\tbreak;\n\t\t\tcase 'array': str = cc2str(d); break;\n\t\t\tcase 'string': str = d; break;\n\t\t\tdefault: throw new Error(\"Unrecognized type \" + opts.type);\n\t\t}\n\t\tif(bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF) str = utf8read(str.slice(3));\n\t\telse if((opts.type == 'binary') && typeof cptable !== 'undefined' && opts.codepage) str = cptable.utils.decode(opts.codepage, cptable.utils.encode(1252,str));\n\t\tif(str.slice(0,19) == \"socialcalc:version:\") return ETH.to_sheet(opts.type == 'string' ? str : utf8read(str), opts);\n\t\treturn prn_to_sheet_str(str, opts);\n\t}\n\n\tfunction prn_to_workbook(d, opts) { return sheet_to_workbook(prn_to_sheet(d, opts), opts); }\n\n\tfunction sheet_to_prn(ws) {\n\t\tvar o = [];\n\t\tvar r = safe_decode_range(ws['!ref']), cell;\n\t\tvar dense = Array.isArray(ws);\n\t\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\t\tvar oo = [];\n\t\t\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\tvar coord = encode_cell({r:R,c:C});\n\t\t\t\tcell = dense ? (ws[R]||[])[C] : ws[coord];\n\t\t\t\tif(!cell || cell.v == null) { oo.push(\" \"); continue; }\n\t\t\t\tvar w = (cell.w || (format_cell(cell), cell.w) || \"\").slice(0,10);\n\t\t\t\twhile(w.length < 10) w += \" \";\n\t\t\t\too.push(w + (C === 0 ? \" \" : \"\"));\n\t\t\t}\n\t\t\to.push(oo.join(\"\"));\n\t\t}\n\t\treturn o.join(\"\\n\");\n\t}\n\n\treturn {\n\t\tto_workbook: prn_to_workbook,\n\t\tto_sheet: prn_to_sheet,\n\t\tfrom_sheet: sheet_to_prn\n\t};\n})();\n\n/* Excel defaults to SYLK but warns if data is not valid */\nfunction read_wb_ID(d, opts) {\n\tvar o = opts || {}, OLD_WTF = !!o.WTF; o.WTF = true;\n\ttry {\n\t\tvar out = SYLK.to_workbook(d, o);\n\t\to.WTF = OLD_WTF;\n\t\treturn out;\n\t} catch(e) {\n\t\to.WTF = OLD_WTF;\n\t\tif(!e.message.match(/SYLK bad record ID/) && OLD_WTF) throw e;\n\t\treturn PRN.to_workbook(d, opts);\n\t}\n}\n\nvar WK_ = (function() {\n\tfunction lotushopper(data, cb, opts) {\n\t\tif(!data) return;\n\t\tprep_blob(data, data.l || 0);\n\t\tvar Enum = opts.Enum || WK1Enum;\n\t\twhile(data.l < data.length) {\n\t\t\tvar RT = data.read_shift(2);\n\t\t\tvar R = Enum[RT] || Enum[0xFF];\n\t\t\tvar length = data.read_shift(2);\n\t\t\tvar tgt = data.l + length;\n\t\t\tvar d = (R.f||parsenoop)(data, length, opts);\n\t\t\tdata.l = tgt;\n\t\t\tif(cb(d, R.n, RT)) return;\n\t\t}\n\t}\n\n\tfunction lotus_to_workbook(d, opts) {\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': return lotus_to_workbook_buf(s2a(Base64.decode(d)), opts);\n\t\t\tcase 'binary': return lotus_to_workbook_buf(s2a(d), opts);\n\t\t\tcase 'buffer':\n\t\t\tcase 'array': return lotus_to_workbook_buf(d, opts);\n\t\t}\n\t\tthrow \"Unsupported type \" + opts.type;\n\t}\n\n\tfunction lotus_to_workbook_buf(d, opts) {\n\t\tif(!d) return d;\n\t\tvar o = opts || {};\n\t\tif(DENSE != null && o.dense == null) o.dense = DENSE;\n\t\tvar s = ((o.dense ? [] : {})), n = \"Sheet1\", sidx = 0;\n\t\tvar sheets = {}, snames = [n];\n\n\t\tvar refguess = {s: {r:0, c:0}, e: {r:0, c:0} };\n\t\tvar sheetRows = o.sheetRows || 0;\n\n\t\tif(d[2] == 0x02) o.Enum = WK1Enum;\n\t\telse if(d[2] == 0x1a) o.Enum = WK3Enum;\n\t\telse if(d[2] == 0x0e) { o.Enum = WK3Enum; o.qpro = true; d.l = 0; }\n\t\telse throw new Error(\"Unrecognized LOTUS BOF \" + d[2]);\n\t\tlotushopper(d, function(val, Rn, RT) {\n\t\t\tif(d[2] == 0x02) switch(RT) {\n\t\t\t\tcase 0x00:\n\t\t\t\t\to.vers = val;\n\t\t\t\t\tif(val >= 0x1000) o.qpro = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x06: refguess = val; break; /* RANGE */\n\t\t\t\tcase 0x0F: /* LABEL */\n\t\t\t\t\tif(!o.qpro) val[1].v = val[1].v.slice(1);\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 0x0D: /* INTEGER */\n\t\t\t\tcase 0x0E: /* NUMBER */\n\t\t\t\tcase 0x10: /* FORMULA */\n\t\t\t\tcase 0x33: /* STRING */\n\t\t\t\t\t/* TODO: actual translation of the format code */\n\t\t\t\t\tif(RT == 0x0E && (val[2] & 0x70) == 0x70 && (val[2] & 0x0F) > 1 && (val[2] & 0x0F) < 15) {\n\t\t\t\t\t\tval[1].z = o.dateNF || SSF._table[14];\n\t\t\t\t\t\tif(o.cellDates) { val[1].t = 'd'; val[1].v = numdate(val[1].v); }\n\t\t\t\t\t}\n\t\t\t\t\tif(o.dense) {\n\t\t\t\t\t\tif(!s[val[0].r]) s[val[0].r] = [];\n\t\t\t\t\t\ts[val[0].r][val[0].c] = val[1];\n\t\t\t\t\t} else s[encode_cell(val[0])] = val[1];\n\t\t\t\t\tbreak;\n\t\t\t} else switch(RT) {\n\t\t\t\tcase 0x16: /* LABEL16 */\n\t\t\t\t\tval[1].v = val[1].v.slice(1);\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 0x17: /* NUMBER17 */\n\t\t\t\tcase 0x18: /* NUMBER18 */\n\t\t\t\tcase 0x19: /* FORMULA19 */\n\t\t\t\tcase 0x25: /* NUMBER25 */\n\t\t\t\tcase 0x27: /* NUMBER27 */\n\t\t\t\tcase 0x28: /* FORMULA28 */\n\t\t\t\t\tif(val[3] > sidx) {\n\t\t\t\t\t\ts[\"!ref\"] = encode_range(refguess);\n\t\t\t\t\t\tsheets[n] = s;\n\t\t\t\t\t\ts = (o.dense ? [] : {});\n\t\t\t\t\t\trefguess = {s: {r:0, c:0}, e: {r:0, c:0} };\n\t\t\t\t\t\tsidx = val[3]; n = \"Sheet\" + (sidx + 1);\n\t\t\t\t\t\tsnames.push(n);\n\t\t\t\t\t}\n\t\t\t\t\tif(sheetRows > 0 && val[0].r >= sheetRows) break;\n\t\t\t\t\tif(o.dense) {\n\t\t\t\t\t\tif(!s[val[0].r]) s[val[0].r] = [];\n\t\t\t\t\t\ts[val[0].r][val[0].c] = val[1];\n\t\t\t\t\t} else s[encode_cell(val[0])] = val[1];\n\t\t\t\t\tif(refguess.e.c < val[0].c) refguess.e.c = val[0].c;\n\t\t\t\t\tif(refguess.e.r < val[0].r) refguess.e.r = val[0].r;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault: break;\n\t\t\t}\n\t\t}, o);\n\n\t\ts[\"!ref\"] = encode_range(refguess);\n\t\tsheets[n] = s;\n\t\treturn { SheetNames: snames, Sheets:sheets };\n\t}\n\n\tfunction parse_RANGE(blob) {\n\t\tvar o = {s:{c:0,r:0},e:{c:0,r:0}};\n\t\to.s.c = blob.read_shift(2);\n\t\to.s.r = blob.read_shift(2);\n\t\to.e.c = blob.read_shift(2);\n\t\to.e.r = blob.read_shift(2);\n\t\tif(o.s.c == 0xFFFF) o.s.c = o.e.c = o.s.r = o.e.r = 0;\n\t\treturn o;\n\t}\n\n\tfunction parse_cell(blob, length, opts) {\n\t\tvar o = [{c:0,r:0}, {t:'n',v:0}, 0];\n\t\tif(opts.qpro && opts.vers != 0x5120) {\n\t\t\to[0].c = blob.read_shift(1);\n\t\t\tblob.l++;\n\t\t\to[0].r = blob.read_shift(2);\n\t\t\tblob.l+=2;\n\t\t} else {\n\t\t\to[2] = blob.read_shift(1);\n\t\t\to[0].c = blob.read_shift(2); o[0].r = blob.read_shift(2);\n\t\t}\n\t\treturn o;\n\t}\n\n\tfunction parse_LABEL(blob, length, opts) {\n\t\tvar tgt = blob.l + length;\n\t\tvar o = parse_cell(blob, length, opts);\n\t\to[1].t = 's';\n\t\tif(opts.vers == 0x5120) {\n\t\t\tblob.l++;\n\t\t\tvar len = blob.read_shift(1);\n\t\t\to[1].v = blob.read_shift(len, 'utf8');\n\t\t\treturn o;\n\t\t}\n\t\tif(opts.qpro) blob.l++;\n\t\to[1].v = blob.read_shift(tgt - blob.l, 'cstr');\n\t\treturn o;\n\t}\n\n\tfunction parse_INTEGER(blob, length, opts) {\n\t\tvar o = parse_cell(blob, length, opts);\n\t\to[1].v = blob.read_shift(2, 'i');\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER(blob, length, opts) {\n\t\tvar o = parse_cell(blob, length, opts);\n\t\to[1].v = blob.read_shift(8, 'f');\n\t\treturn o;\n\t}\n\n\tfunction parse_FORMULA(blob, length, opts) {\n\t\tvar tgt = blob.l + length;\n\t\tvar o = parse_cell(blob, length, opts);\n\t\t/* TODO: formula */\n\t\to[1].v = blob.read_shift(8, 'f');\n\t\tif(opts.qpro) blob.l = tgt;\n\t\telse {\n\t\t\tvar flen = blob.read_shift(2);\n\t\t\tblob.l += flen;\n\t\t}\n\t\treturn o;\n\t}\n\n\tfunction parse_cell_3(blob) {\n\t\tvar o = [{c:0,r:0}, {t:'n',v:0}, 0];\n\t\to[0].r = blob.read_shift(2); o[3] = blob[blob.l++]; o[0].c = blob[blob.l++];\n\t\treturn o;\n\t}\n\n\tfunction parse_LABEL_16(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\to[1].t = 's';\n\t\to[1].v = blob.read_shift(length - 4, 'cstr');\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER_18(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\to[1].v = blob.read_shift(2);\n\t\tvar v = o[1].v >> 1;\n\t\t/* TODO: figure out all of the corner cases */\n\t\tif(o[1].v & 0x1) {\n\t\t\tswitch(v & 0x07) {\n\t\t\t\tcase 1: v = (v >> 3) * 500; break;\n\t\t\t\tcase 2: v = (v >> 3) / 20; break;\n\t\t\t\tcase 4: v = (v >> 3) / 2000; break;\n\t\t\t\tcase 6: v = (v >> 3) / 16; break;\n\t\t\t\tcase 7: v = (v >> 3) / 64; break;\n\t\t\t\tdefault: throw \"unknown NUMBER_18 encoding \" + (v & 0x07);\n\t\t\t}\n\t\t}\n\t\to[1].v = v;\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER_17(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\tvar v1 = blob.read_shift(4);\n\t\tvar v2 = blob.read_shift(4);\n\t\tvar e = blob.read_shift(2);\n\t\tif(e == 0xFFFF) { o[1].v = 0; return o; }\n\t\tvar s = e & 0x8000; e = (e&0x7FFF) - 16446;\n\t\to[1].v = (s*2 - 1) * ((e > 0 ? (v2 << e) : (v2 >>> -e)) + (e > -32 ? (v1 << (e + 32)) : (v1 >>> -(e + 32))));\n\t\treturn o;\n\t}\n\n\tfunction parse_FORMULA_19(blob, length) {\n\t\tvar o = parse_NUMBER_17(blob, 14);\n\t\tblob.l += length - 14; /* TODO: formula */\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER_25(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\tvar v1 = blob.read_shift(4);\n\t\to[1].v = v1 >> 6;\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER_27(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\tvar v1 = blob.read_shift(8,'f');\n\t\to[1].v = v1;\n\t\treturn o;\n\t}\n\n\tfunction parse_FORMULA_28(blob, length) {\n\t\tvar o = parse_NUMBER_27(blob, 14);\n\t\tblob.l += length - 10; /* TODO: formula */\n\t\treturn o;\n\t}\n\n\tvar WK1Enum = {\n0x0000: { n:\"BOF\", f:parseuint16 },\n0x0001: { n:\"EOF\" },\n0x0002: { n:\"CALCMODE\" },\n0x0003: { n:\"CALCORDER\" },\n0x0004: { n:\"SPLIT\" },\n0x0005: { n:\"SYNC\" },\n0x0006: { n:\"RANGE\", f:parse_RANGE },\n0x0007: { n:\"WINDOW1\" },\n0x0008: { n:\"COLW1\" },\n0x0009: { n:\"WINTWO\" },\n0x000A: { n:\"COLW2\" },\n0x000B: { n:\"NAME\" },\n0x000C: { n:\"BLANK\" },\n0x000D: { n:\"INTEGER\", f:parse_INTEGER },\n0x000E: { n:\"NUMBER\", f:parse_NUMBER },\n0x000F: { n:\"LABEL\", f:parse_LABEL },\n0x0010: { n:\"FORMULA\", f:parse_FORMULA },\n0x0018: { n:\"TABLE\" },\n0x0019: { n:\"ORANGE\" },\n0x001A: { n:\"PRANGE\" },\n0x001B: { n:\"SRANGE\" },\n0x001C: { n:\"FRANGE\" },\n0x001D: { n:\"KRANGE1\" },\n0x0020: { n:\"HRANGE\" },\n0x0023: { n:\"KRANGE2\" },\n0x0024: { n:\"PROTEC\" },\n0x0025: { n:\"FOOTER\" },\n0x0026: { n:\"HEADER\" },\n0x0027: { n:\"SETUP\" },\n0x0028: { n:\"MARGINS\" },\n0x0029: { n:\"LABELFMT\" },\n0x002A: { n:\"TITLES\" },\n0x002B: { n:\"SHEETJS\" },\n0x002D: { n:\"GRAPH\" },\n0x002E: { n:\"NGRAPH\" },\n0x002F: { n:\"CALCCOUNT\" },\n0x0030: { n:\"UNFORMATTED\" },\n0x0031: { n:\"CURSORW12\" },\n0x0032: { n:\"WINDOW\" },\n0x0033: { n:\"STRING\", f:parse_LABEL },\n0x0037: { n:\"PASSWORD\" },\n0x0038: { n:\"LOCKED\" },\n0x003C: { n:\"QUERY\" },\n0x003D: { n:\"QUERYNAME\" },\n0x003E: { n:\"PRINT\" },\n0x003F: { n:\"PRINTNAME\" },\n0x0040: { n:\"GRAPH2\" },\n0x0041: { n:\"GRAPHNAME\" },\n0x0042: { n:\"ZOOM\" },\n0x0043: { n:\"SYMSPLIT\" },\n0x0044: { n:\"NSROWS\" },\n0x0045: { n:\"NSCOLS\" },\n0x0046: { n:\"RULER\" },\n0x0047: { n:\"NNAME\" },\n0x0048: { n:\"ACOMM\" },\n0x0049: { n:\"AMACRO\" },\n0x004A: { n:\"PARSE\" },\n0x00FF: { n:\"\", f:parsenoop }\n\t};\n\n\tvar WK3Enum = {\n0x0000: { n:\"BOF\" },\n0x0001: { n:\"EOF\" },\n0x0003: { n:\"??\" },\n0x0004: { n:\"??\" },\n0x0005: { n:\"??\" },\n0x0006: { n:\"??\" },\n0x0007: { n:\"??\" },\n0x0009: { n:\"??\" },\n0x000a: { n:\"??\" },\n0x000b: { n:\"??\" },\n0x000c: { n:\"??\" },\n0x000e: { n:\"??\" },\n0x000f: { n:\"??\" },\n0x0010: { n:\"??\" },\n0x0011: { n:\"??\" },\n0x0012: { n:\"??\" },\n0x0013: { n:\"??\" },\n0x0015: { n:\"??\" },\n0x0016: { n:\"LABEL16\", f:parse_LABEL_16},\n0x0017: { n:\"NUMBER17\", f:parse_NUMBER_17 },\n0x0018: { n:\"NUMBER18\", f:parse_NUMBER_18 },\n0x0019: { n:\"FORMULA19\", f:parse_FORMULA_19},\n0x001a: { n:\"??\" },\n0x001b: { n:\"??\" },\n0x001c: { n:\"??\" },\n0x001d: { n:\"??\" },\n0x001e: { n:\"??\" },\n0x001f: { n:\"??\" },\n0x0021: { n:\"??\" },\n0x0025: { n:\"NUMBER25\", f:parse_NUMBER_25 },\n0x0027: { n:\"NUMBER27\", f:parse_NUMBER_27 },\n0x0028: { n:\"FORMULA28\", f:parse_FORMULA_28 },\n0x00FF: { n:\"\", f:parsenoop }\n\t};\n\treturn {\n\t\tto_workbook: lotus_to_workbook\n\t};\n})();\n/* 18.4.7 rPr CT_RPrElt */\nfunction parse_rpr(rpr) {\n\tvar font = {}, m = rpr.match(tagregex), i = 0;\n\tvar pass = false;\n\tif(m) for(;i!=m.length; ++i) {\n\t\tvar y = parsexmltag(m[i]);\n\t\tswitch(y[0].replace(/\\w*:/g,\"\")) {\n\t\t\t/* 18.8.12 condense CT_BooleanProperty */\n\t\t\t/* ** not required . */\n\t\t\tcase '':\n\t\t\tcase '': font.shadow = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.4.1 charset CT_IntProperty TODO */\n\t\t\tcase '':\n\t\t\tcase '': font.outline = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.4.5 rFont CT_FontName */\n\t\t\tcase '':\n\t\t\tcase '': font.strike = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.4.13 u CT_UnderlineProperty */\n\t\t\tcase '':\n\t\t\tcase '': font.u = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.2 b */\n\t\t\tcase '':\n\t\t\tcase '': font.b = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.26 i */\n\t\t\tcase '':\n\t\t\tcase '': font.i = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.3.1.15 color CT_Color TODO: tint, theme, auto, indexed */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault:\n\t\t\t\tif(y[0].charCodeAt(1) !== 47 && !pass) throw new Error('Unrecognized rich format ' + y[0]);\n\t\t}\n\t}\n\treturn font;\n}\n\nvar parse_rs = (function() {\n\tvar tregex = matchtag(\"t\"), rpregex = matchtag(\"rPr\");\n\t/* 18.4.4 r CT_RElt */\n\tfunction parse_r(r) {\n\t\t/* 18.4.12 t ST_Xstring */\n\t\tvar t = r.match(tregex)/*, cp = 65001*/;\n\t\tif(!t) return {t:\"s\", v:\"\"};\n\n\t\tvar o = ({t:'s', v:unescapexml(t[1])});\n\t\tvar rpr = r.match(rpregex);\n\t\tif(rpr) o.s = parse_rpr(rpr[1]);\n\t\treturn o;\n\t}\n\tvar rregex = /<(?:\\w+:)?r>/g, rend = /<\\/(?:\\w+:)?r>/;\n\treturn function parse_rs(rs) {\n\t\treturn rs.replace(rregex,\"\").split(rend).map(parse_r).filter(function(r) { return r.v; });\n\t};\n})();\n\n\n/* Parse a list of tags */\nvar rs_to_html = (function parse_rs_factory() {\n\tvar nlregex = /(\\r\\n|\\n)/g;\n\tfunction parse_rpr2(font, intro, outro) {\n\t\tvar style = [];\n\n\t\tif(font.u) style.push(\"text-decoration: underline;\");\n\t\tif(font.uval) style.push(\"text-underline-style:\" + font.uval + \";\");\n\t\tif(font.sz) style.push(\"font-size:\" + font.sz + \"pt;\");\n\t\tif(font.outline) style.push(\"text-effect: outline;\");\n\t\tif(font.shadow) style.push(\"text-shadow: auto;\");\n\t\tintro.push('');\n\n\t\tif(font.b) { intro.push(\"\"); outro.push(\"\"); }\n\t\tif(font.i) { intro.push(\"\"); outro.push(\"\"); }\n\t\tif(font.strike) { intro.push(\"\"); outro.push(\"\"); }\n\n\t\tvar align = font.valign || \"\";\n\t\tif(align == \"superscript\" || align == \"super\") align = \"sup\";\n\t\telse if(align == \"subscript\") align = \"sub\";\n\t\tif(align != \"\") { intro.push(\"<\" + align + \">\"); outro.push(\"\"); }\n\n\t\toutro.push(\"\");\n\t\treturn font;\n\t}\n\n\t/* 18.4.4 r CT_RElt */\n\tfunction r_to_html(r) {\n\t\tvar terms = [[],r.v,[]];\n\t\tif(!r.v) return \"\";\n\n\t\tif(r.s) parse_rpr2(r.s, terms[0], terms[2]);\n\n\t\treturn terms[0].join(\"\") + terms[1].replace(nlregex,'
') + terms[2].join(\"\");\n\t}\n\n\treturn function parse_rs(rs) {\n\t\treturn rs.map(r_to_html).join(\"\");\n\t};\n})();\n\n/* 18.4.8 si CT_Rst */\nvar sitregex = /<(?:\\w+:)?t[^>]*>([^<]*)<\\/(?:\\w+:)?t>/g, sirregex = /<(?:\\w+:)?r>/;\nvar sirphregex = /<(?:\\w+:)?rPh.*?>([\\s\\S]*?)<\\/(?:\\w+:)?rPh>/g;\nfunction parse_si(x, opts) {\n\tvar html = opts ? opts.cellHTML : true;\n\tvar z = {};\n\tif(!x) return { t: \"\" };\n\t//var y;\n\t/* 18.4.12 t ST_Xstring (Plaintext String) */\n\t// TODO: is whitespace actually valid here?\n\tif(x.match(/^\\s*<(?:\\w+:)?t[^>]*>/)) {\n\t\tz.t = unescapexml(utf8read(x.slice(x.indexOf(\">\")+1).split(/<\\/(?:\\w+:)?t>/)[0]||\"\"));\n\t\tz.r = utf8read(x);\n\t\tif(html) z.h = escapehtml(z.t);\n\t}\n\t/* 18.4.4 r CT_RElt (Rich Text Run) */\n\telse if((/*y = */x.match(sirregex))) {\n\t\tz.r = utf8read(x);\n\t\tz.t = unescapexml(utf8read((x.replace(sirphregex, '').match(sitregex)||[]).join(\"\").replace(tagregex,\"\")));\n\t\tif(html) z.h = rs_to_html(parse_rs(z.r));\n\t}\n\t/* 18.4.3 phoneticPr CT_PhoneticPr (TODO: needed for Asian support) */\n\t/* 18.4.6 rPh CT_PhoneticRun (TODO: needed for Asian support) */\n\treturn z;\n}\n\n/* 18.4 Shared String Table */\nvar sstr0 = /<(?:\\w+:)?sst([^>]*)>([\\s\\S]*)<\\/(?:\\w+:)?sst>/;\nvar sstr1 = /<(?:\\w+:)?(?:si|sstItem)>/g;\nvar sstr2 = /<\\/(?:\\w+:)?(?:si|sstItem)>/;\nfunction parse_sst_xml(data, opts) {\n\tvar s = ([]), ss = \"\";\n\tif(!data) return s;\n\t/* 18.4.9 sst CT_Sst */\n\tvar sst = data.match(sstr0);\n\tif(sst) {\n\t\tss = sst[2].replace(sstr1,\"\").split(sstr2);\n\t\tfor(var i = 0; i != ss.length; ++i) {\n\t\t\tvar o = parse_si(ss[i].trim(), opts);\n\t\t\tif(o != null) s[s.length] = o;\n\t\t}\n\t\tsst = parsexmltag(sst[1]); s.Count = sst.count; s.Unique = sst.uniqueCount;\n\t}\n\treturn s;\n}\n\nRELS.SST = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings\";\nvar straywsregex = /^\\s|\\s$|[\\t\\n\\r]/;\nfunction write_sst_xml(sst, opts) {\n\tif(!opts.bookSST) return \"\";\n\tvar o = [XML_HEADER];\n\to[o.length] = (writextag('sst', null, {\n\t\txmlns: XMLNS.main[0],\n\t\tcount: sst.Count,\n\t\tuniqueCount: sst.Unique\n\t}));\n\tfor(var i = 0; i != sst.length; ++i) { if(sst[i] == null) continue;\n\t\tvar s = sst[i];\n\t\tvar sitag = \"\";\n\t\tif(s.r) sitag += s.r;\n\t\telse {\n\t\t\tsitag += \"\" + escapexml(s.t) + \"\";\n\t\t}\n\t\tsitag += \"\";\n\t\to[o.length] = (sitag);\n\t}\n\tif(o.length>2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* [MS-XLSB] 2.4.221 BrtBeginSst */\nfunction parse_BrtBeginSst(data) {\n\treturn [data.read_shift(4), data.read_shift(4)];\n}\n\n/* [MS-XLSB] 2.1.7.45 Shared Strings */\nfunction parse_sst_bin(data, opts) {\n\tvar s = ([]);\n\tvar pass = false;\n\trecordhopper(data, function hopper_sst(val, R_n, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x009F: /* 'BrtBeginSst' */\n\t\t\t\ts.Count = val[0]; s.Unique = val[1]; break;\n\t\t\tcase 0x0013: /* 'BrtSSTItem' */\n\t\t\t\ts.push(val); break;\n\t\t\tcase 0x00A0: /* 'BrtEndSst' */\n\t\t\t\treturn true;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\n\t\t\tdefault:\n\t\t\t\tif(R_n.indexOf(\"Begin\") > 0){/* empty */}\n\t\t\t\telse if(R_n.indexOf(\"End\") > 0){/* empty */}\n\t\t\t\tif(!pass || opts.WTF) throw new Error(\"Unexpected record \" + RT + \" \" + R_n);\n\t\t}\n\t});\n\treturn s;\n}\n\nfunction write_BrtBeginSst(sst, o) {\n\tif(!o) o = new_buf(8);\n\to.write_shift(4, sst.Count);\n\to.write_shift(4, sst.Unique);\n\treturn o;\n}\n\nvar write_BrtSSTItem = write_RichStr;\n\nfunction write_sst_bin(sst) {\n\tvar ba = buf_array();\n\twrite_record(ba, \"BrtBeginSst\", write_BrtBeginSst(sst));\n\tfor(var i = 0; i < sst.length; ++i) write_record(ba, \"BrtSSTItem\", write_BrtSSTItem(sst[i]));\n\t/* FRTSST */\n\twrite_record(ba, \"BrtEndSst\");\n\treturn ba.end();\n}\nfunction _JS2ANSI(str) {\n\tif(typeof cptable !== 'undefined') return cptable.utils.encode(current_ansi, str);\n\tvar o = [], oo = str.split(\"\");\n\tfor(var i = 0; i < oo.length; ++i) o[i] = oo[i].charCodeAt(0);\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.4 Version */\nfunction parse_CRYPTOVersion(blob, length) {\n\tvar o = {};\n\to.Major = blob.read_shift(2);\n\to.Minor = blob.read_shift(2);\nif(length >= 4) blob.l += length - 4;\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.5 DataSpaceVersionInfo */\nfunction parse_DataSpaceVersionInfo(blob) {\n\tvar o = {};\n\to.id = blob.read_shift(0, 'lpp4');\n\to.R = parse_CRYPTOVersion(blob, 4);\n\to.U = parse_CRYPTOVersion(blob, 4);\n\to.W = parse_CRYPTOVersion(blob, 4);\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.6.1 DataSpaceMapEntry Structure */\nfunction parse_DataSpaceMapEntry(blob) {\n\tvar len = blob.read_shift(4);\n\tvar end = blob.l + len - 4;\n\tvar o = {};\n\tvar cnt = blob.read_shift(4);\n\tvar comps = [];\n\t/* [MS-OFFCRYPTO] 2.1.6.2 DataSpaceReferenceComponent Structure */\n\twhile(cnt-- > 0) comps.push({ t: blob.read_shift(4), v: blob.read_shift(0, 'lpp4') });\n\to.name = blob.read_shift(0, 'lpp4');\n\to.comps = comps;\n\tif(blob.l != end) throw new Error(\"Bad DataSpaceMapEntry: \" + blob.l + \" != \" + end);\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.6 DataSpaceMap */\nfunction parse_DataSpaceMap(blob) {\n\tvar o = [];\n\tblob.l += 4; // must be 0x8\n\tvar cnt = blob.read_shift(4);\n\twhile(cnt-- > 0) o.push(parse_DataSpaceMapEntry(blob));\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.7 DataSpaceDefinition */\nfunction parse_DataSpaceDefinition(blob) {\n\tvar o = [];\n\tblob.l += 4; // must be 0x8\n\tvar cnt = blob.read_shift(4);\n\twhile(cnt-- > 0) o.push(blob.read_shift(0, 'lpp4'));\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.8 DataSpaceDefinition */\nfunction parse_TransformInfoHeader(blob) {\n\tvar o = {};\n\t/*var len = */blob.read_shift(4);\n\tblob.l += 4; // must be 0x1\n\to.id = blob.read_shift(0, 'lpp4');\n\to.name = blob.read_shift(0, 'lpp4');\n\to.R = parse_CRYPTOVersion(blob, 4);\n\to.U = parse_CRYPTOVersion(blob, 4);\n\to.W = parse_CRYPTOVersion(blob, 4);\n\treturn o;\n}\n\nfunction parse_Primary(blob) {\n\t/* [MS-OFFCRYPTO] 2.2.6 IRMDSTransformInfo */\n\tvar hdr = parse_TransformInfoHeader(blob);\n\t/* [MS-OFFCRYPTO] 2.1.9 EncryptionTransformInfo */\n\thdr.ename = blob.read_shift(0, '8lpp4');\n\thdr.blksz = blob.read_shift(4);\n\thdr.cmode = blob.read_shift(4);\n\tif(blob.read_shift(4) != 0x04) throw new Error(\"Bad !Primary record\");\n\treturn hdr;\n}\n\n/* [MS-OFFCRYPTO] 2.3.2 Encryption Header */\nfunction parse_EncryptionHeader(blob, length) {\n\tvar tgt = blob.l + length;\n\tvar o = {};\n\to.Flags = (blob.read_shift(4) & 0x3F);\n\tblob.l += 4;\n\to.AlgID = blob.read_shift(4);\n\tvar valid = false;\n\tswitch(o.AlgID) {\n\t\tcase 0x660E: case 0x660F: case 0x6610: valid = (o.Flags == 0x24); break;\n\t\tcase 0x6801: valid = (o.Flags == 0x04); break;\n\t\tcase 0: valid = (o.Flags == 0x10 || o.Flags == 0x04 || o.Flags == 0x24); break;\n\t\tdefault: throw 'Unrecognized encryption algorithm: ' + o.AlgID;\n\t}\n\tif(!valid) throw new Error(\"Encryption Flags/AlgID mismatch\");\n\to.AlgIDHash = blob.read_shift(4);\n\to.KeySize = blob.read_shift(4);\n\to.ProviderType = blob.read_shift(4);\n\tblob.l += 8;\n\to.CSPName = blob.read_shift((tgt-blob.l)>>1, 'utf16le');\n\tblob.l = tgt;\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.3.3 Encryption Verifier */\nfunction parse_EncryptionVerifier(blob, length) {\n\tvar o = {}, tgt = blob.l + length;\n\tblob.l += 4; // SaltSize must be 0x10\n\to.Salt = blob.slice(blob.l, blob.l+16); blob.l += 16;\n\to.Verifier = blob.slice(blob.l, blob.l+16); blob.l += 16;\n\t/*var sz = */blob.read_shift(4);\n\to.VerifierHash = blob.slice(blob.l, tgt); blob.l = tgt;\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.3.4.* EncryptionInfo Stream */\nfunction parse_EncryptionInfo(blob) {\n\tvar vers = parse_CRYPTOVersion(blob);\n\tswitch(vers.Minor) {\n\t\tcase 0x02: return [vers.Minor, parse_EncInfoStd(blob, vers)];\n\t\tcase 0x03: return [vers.Minor, parse_EncInfoExt(blob, vers)];\n\t\tcase 0x04: return [vers.Minor, parse_EncInfoAgl(blob, vers)];\n\t}\n\tthrow new Error(\"ECMA-376 Encrypted file unrecognized Version: \" + vers.Minor);\n}\n\n/* [MS-OFFCRYPTO] 2.3.4.5 EncryptionInfo Stream (Standard Encryption) */\nfunction parse_EncInfoStd(blob) {\n\tvar flags = blob.read_shift(4);\n\tif((flags & 0x3F) != 0x24) throw new Error(\"EncryptionInfo mismatch\");\n\tvar sz = blob.read_shift(4);\n\t//var tgt = blob.l + sz;\n\tvar hdr = parse_EncryptionHeader(blob, sz);\n\tvar verifier = parse_EncryptionVerifier(blob, blob.length - blob.l);\n\treturn { t:\"Std\", h:hdr, v:verifier };\n}\n/* [MS-OFFCRYPTO] 2.3.4.6 EncryptionInfo Stream (Extensible Encryption) */\nfunction parse_EncInfoExt() { throw new Error(\"File is password-protected: ECMA-376 Extensible\"); }\n/* [MS-OFFCRYPTO] 2.3.4.10 EncryptionInfo Stream (Agile Encryption) */\nfunction parse_EncInfoAgl(blob) {\n\tvar KeyData = [\"saltSize\",\"blockSize\",\"keyBits\",\"hashSize\",\"cipherAlgorithm\",\"cipherChaining\",\"hashAlgorithm\",\"saltValue\"];\n\tblob.l+=4;\n\tvar xml = blob.read_shift(blob.length - blob.l, 'utf8');\n\tvar o = {};\n\txml.replace(tagregex, function xml_agile(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': break;\n\t\t\tcase '': case '': break;\n\n\t\t\tcase '': break;\n\t\t\tcase ' 4 || vers.Major < 2) throw new Error('unrecognized major version code: ' + vers.Major);\n\to.Flags = blob.read_shift(4); length -= 4;\n\tvar sz = blob.read_shift(4); length -= 4;\n\to.EncryptionHeader = parse_EncryptionHeader(blob, sz); length -= sz;\n\to.EncryptionVerifier = parse_EncryptionVerifier(blob, length);\n\treturn o;\n}\n/* [MS-OFFCRYPTO] 2.3.6.1 RC4 Encryption Header */\nfunction parse_RC4Header(blob) {\n\tvar o = {};\n\tvar vers = o.EncryptionVersionInfo = parse_CRYPTOVersion(blob, 4);\n\tif(vers.Major != 1 || vers.Minor != 1) throw 'unrecognized version code ' + vers.Major + ' : ' + vers.Minor;\n\to.Salt = blob.read_shift(16);\n\to.EncryptedVerifier = blob.read_shift(16);\n\to.EncryptedVerifierHash = blob.read_shift(16);\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.3.7.1 Binary Document Password Verifier Derivation */\nfunction crypto_CreatePasswordVerifier_Method1(Password) {\n\tvar Verifier = 0x0000, PasswordArray;\n\tvar PasswordDecoded = _JS2ANSI(Password);\n\tvar len = PasswordDecoded.length + 1, i, PasswordByte;\n\tvar Intermediate1, Intermediate2, Intermediate3;\n\tPasswordArray = new_raw_buf(len);\n\tPasswordArray[0] = PasswordDecoded.length;\n\tfor(i = 1; i != len; ++i) PasswordArray[i] = PasswordDecoded[i-1];\n\tfor(i = len-1; i >= 0; --i) {\n\t\tPasswordByte = PasswordArray[i];\n\t\tIntermediate1 = ((Verifier & 0x4000) === 0x0000) ? 0 : 1;\n\t\tIntermediate2 = (Verifier << 1) & 0x7FFF;\n\t\tIntermediate3 = Intermediate1 | Intermediate2;\n\t\tVerifier = Intermediate3 ^ PasswordByte;\n\t}\n\treturn Verifier ^ 0xCE4B;\n}\n\n/* [MS-OFFCRYPTO] 2.3.7.2 Binary Document XOR Array Initialization */\nvar crypto_CreateXorArray_Method1 = (function() {\n\tvar PadArray = [0xBB, 0xFF, 0xFF, 0xBA, 0xFF, 0xFF, 0xB9, 0x80, 0x00, 0xBE, 0x0F, 0x00, 0xBF, 0x0F, 0x00];\n\tvar InitialCode = [0xE1F0, 0x1D0F, 0xCC9C, 0x84C0, 0x110C, 0x0E10, 0xF1CE, 0x313E, 0x1872, 0xE139, 0xD40F, 0x84F9, 0x280C, 0xA96A, 0x4EC3];\n\tvar XorMatrix = [0xAEFC, 0x4DD9, 0x9BB2, 0x2745, 0x4E8A, 0x9D14, 0x2A09, 0x7B61, 0xF6C2, 0xFDA5, 0xEB6B, 0xC6F7, 0x9DCF, 0x2BBF, 0x4563, 0x8AC6, 0x05AD, 0x0B5A, 0x16B4, 0x2D68, 0x5AD0, 0x0375, 0x06EA, 0x0DD4, 0x1BA8, 0x3750, 0x6EA0, 0xDD40, 0xD849, 0xA0B3, 0x5147, 0xA28E, 0x553D, 0xAA7A, 0x44D5, 0x6F45, 0xDE8A, 0xAD35, 0x4A4B, 0x9496, 0x390D, 0x721A, 0xEB23, 0xC667, 0x9CEF, 0x29FF, 0x53FE, 0xA7FC, 0x5FD9, 0x47D3, 0x8FA6, 0x0F6D, 0x1EDA, 0x3DB4, 0x7B68, 0xF6D0, 0xB861, 0x60E3, 0xC1C6, 0x93AD, 0x377B, 0x6EF6, 0xDDEC, 0x45A0, 0x8B40, 0x06A1, 0x0D42, 0x1A84, 0x3508, 0x6A10, 0xAA51, 0x4483, 0x8906, 0x022D, 0x045A, 0x08B4, 0x1168, 0x76B4, 0xED68, 0xCAF1, 0x85C3, 0x1BA7, 0x374E, 0x6E9C, 0x3730, 0x6E60, 0xDCC0, 0xA9A1, 0x4363, 0x86C6, 0x1DAD, 0x3331, 0x6662, 0xCCC4, 0x89A9, 0x0373, 0x06E6, 0x0DCC, 0x1021, 0x2042, 0x4084, 0x8108, 0x1231, 0x2462, 0x48C4];\n\tvar Ror = function(Byte) { return ((Byte/2) | (Byte*128)) & 0xFF; };\n\tvar XorRor = function(byte1, byte2) { return Ror(byte1 ^ byte2); };\n\tvar CreateXorKey_Method1 = function(Password) {\n\t\tvar XorKey = InitialCode[Password.length - 1];\n\t\tvar CurrentElement = 0x68;\n\t\tfor(var i = Password.length-1; i >= 0; --i) {\n\t\t\tvar Char = Password[i];\n\t\t\tfor(var j = 0; j != 7; ++j) {\n\t\t\t\tif(Char & 0x40) XorKey ^= XorMatrix[CurrentElement];\n\t\t\t\tChar *= 2; --CurrentElement;\n\t\t\t}\n\t\t}\n\t\treturn XorKey;\n\t};\n\treturn function(password) {\n\t\tvar Password = _JS2ANSI(password);\n\t\tvar XorKey = CreateXorKey_Method1(Password);\n\t\tvar Index = Password.length;\n\t\tvar ObfuscationArray = new_raw_buf(16);\n\t\tfor(var i = 0; i != 16; ++i) ObfuscationArray[i] = 0x00;\n\t\tvar Temp, PasswordLastChar, PadIndex;\n\t\tif((Index & 1) === 1) {\n\t\t\tTemp = XorKey >> 8;\n\t\t\tObfuscationArray[Index] = XorRor(PadArray[0], Temp);\n\t\t\t--Index;\n\t\t\tTemp = XorKey & 0xFF;\n\t\t\tPasswordLastChar = Password[Password.length - 1];\n\t\t\tObfuscationArray[Index] = XorRor(PasswordLastChar, Temp);\n\t\t}\n\t\twhile(Index > 0) {\n\t\t\t--Index;\n\t\t\tTemp = XorKey >> 8;\n\t\t\tObfuscationArray[Index] = XorRor(Password[Index], Temp);\n\t\t\t--Index;\n\t\t\tTemp = XorKey & 0xFF;\n\t\t\tObfuscationArray[Index] = XorRor(Password[Index], Temp);\n\t\t}\n\t\tIndex = 15;\n\t\tPadIndex = 15 - Password.length;\n\t\twhile(PadIndex > 0) {\n\t\t\tTemp = XorKey >> 8;\n\t\t\tObfuscationArray[Index] = XorRor(PadArray[PadIndex], Temp);\n\t\t\t--Index;\n\t\t\t--PadIndex;\n\t\t\tTemp = XorKey & 0xFF;\n\t\t\tObfuscationArray[Index] = XorRor(Password[Index], Temp);\n\t\t\t--Index;\n\t\t\t--PadIndex;\n\t\t}\n\t\treturn ObfuscationArray;\n\t};\n})();\n\n/* [MS-OFFCRYPTO] 2.3.7.3 Binary Document XOR Data Transformation Method 1 */\nvar crypto_DecryptData_Method1 = function(password, Data, XorArrayIndex, XorArray, O) {\n\t/* If XorArray is set, use it; if O is not set, make changes in-place */\n\tif(!O) O = Data;\n\tif(!XorArray) XorArray = crypto_CreateXorArray_Method1(password);\n\tvar Index, Value;\n\tfor(Index = 0; Index != Data.length; ++Index) {\n\t\tValue = Data[Index];\n\t\tValue ^= XorArray[XorArrayIndex];\n\t\tValue = ((Value>>5) | (Value<<3)) & 0xFF;\n\t\tO[Index] = Value;\n\t\t++XorArrayIndex;\n\t}\n\treturn [O, XorArrayIndex, XorArray];\n};\n\nvar crypto_MakeXorDecryptor = function(password) {\n\tvar XorArrayIndex = 0, XorArray = crypto_CreateXorArray_Method1(password);\n\treturn function(Data) {\n\t\tvar O = crypto_DecryptData_Method1(\"\", Data, XorArrayIndex, XorArray);\n\t\tXorArrayIndex = O[1];\n\t\treturn O[0];\n\t};\n};\n\n/* 2.5.343 */\nfunction parse_XORObfuscation(blob, length, opts, out) {\n\tvar o = ({ key: parseuint16(blob), verificationBytes: parseuint16(blob) });\n\tif(opts.password) o.verifier = crypto_CreatePasswordVerifier_Method1(opts.password);\n\tout.valid = o.verificationBytes === o.verifier;\n\tif(out.valid) out.insitu = crypto_MakeXorDecryptor(opts.password);\n\treturn o;\n}\n\n/* 2.4.117 */\nfunction parse_FilePassHeader(blob, length, oo) {\n\tvar o = oo || {}; o.Info = blob.read_shift(2); blob.l -= 2;\n\tif(o.Info === 1) o.Data = parse_RC4Header(blob, length);\n\telse o.Data = parse_RC4CryptoHeader(blob, length);\n\treturn o;\n}\nfunction parse_FilePass(blob, length, opts) {\n\tvar o = ({ Type: opts.biff >= 8 ? blob.read_shift(2) : 0 }); /* wEncryptionType */\n\tif(o.Type) parse_FilePassHeader(blob, length-2, o);\n\telse parse_XORObfuscation(blob, opts.biff >= 8 ? length : length - 2, opts, o);\n\treturn o;\n}\n\n\nvar RTF = (function() {\n\tfunction rtf_to_sheet(d, opts) {\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': return rtf_to_sheet_str(Base64.decode(d), opts);\n\t\t\tcase 'binary': return rtf_to_sheet_str(d, opts);\n\t\t\tcase 'buffer': return rtf_to_sheet_str(d.toString('binary'), opts);\n\t\t\tcase 'array': return rtf_to_sheet_str(cc2str(d), opts);\n\t\t}\n\t\tthrow new Error(\"Unrecognized type \" + opts.type);\n\t}\n\n\tfunction rtf_to_sheet_str(str, opts) {\n\t\tvar o = opts || {};\n\t\tvar ws = o.dense ? ([]) : ({});\n\t\tvar range = ({s: {c:0, r:0}, e: {c:0, r:0}});\n\n\t\t// TODO: parse\n\t\tif(!str.match(/\\\\trowd/)) throw new Error(\"RTF missing table\");\n\n\t\tws['!ref'] = encode_range(range);\n\t\treturn ws;\n\t}\n\n\tfunction rtf_to_workbook(d, opts) { return sheet_to_workbook(rtf_to_sheet(d, opts), opts); }\n\n\t/* TODO: this is a stub */\n\tfunction sheet_to_rtf(ws) {\n\t\tvar o = [\"{\\\\rtf1\\\\ansi\"];\n\t\tvar r = safe_decode_range(ws['!ref']), cell;\n\t\tvar dense = Array.isArray(ws);\n\t\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\t\to.push(\"\\\\trowd\\\\trautofit1\");\n\t\t\tfor(var C = r.s.c; C <= r.e.c; ++C) o.push(\"\\\\cellx\" + (C+1));\n\t\t\to.push(\"\\\\pard\\\\intbl\");\n\t\t\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\tvar coord = encode_cell({r:R,c:C});\n\t\t\t\tcell = dense ? (ws[R]||[])[C]: ws[coord];\n\t\t\t\tif(!cell || cell.v == null && (!cell.f || cell.F)) continue;\n\t\t\t\to.push(\" \" + (cell.w || (format_cell(cell), cell.w)));\n\t\t\t\to.push(\"\\\\cell\");\n\t\t\t}\n\t\t\to.push(\"\\\\pard\\\\intbl\\\\row\");\n\t\t}\n\t\treturn o.join(\"\") + \"}\";\n\t}\n\n\treturn {\n\t\tto_workbook: rtf_to_workbook,\n\t\tto_sheet: rtf_to_sheet,\n\t\tfrom_sheet: sheet_to_rtf\n\t};\n})();\nfunction hex2RGB(h) {\n\tvar o = h.slice(h[0]===\"#\"?1:0).slice(0,6);\n\treturn [parseInt(o.slice(0,2),16),parseInt(o.slice(2,4),16),parseInt(o.slice(4,6),16)];\n}\nfunction rgb2Hex(rgb) {\n\tfor(var i=0,o=1; i!=3; ++i) o = o*256 + (rgb[i]>255?255:rgb[i]<0?0:rgb[i]);\n\treturn o.toString(16).toUpperCase().slice(1);\n}\n\nfunction rgb2HSL(rgb) {\n\tvar R = rgb[0]/255, G = rgb[1]/255, B=rgb[2]/255;\n\tvar M = Math.max(R, G, B), m = Math.min(R, G, B), C = M - m;\n\tif(C === 0) return [0, 0, R];\n\n\tvar H6 = 0, S = 0, L2 = (M + m);\n\tS = C / (L2 > 1 ? 2 - L2 : L2);\n\tswitch(M){\n\t\tcase R: H6 = ((G - B) / C + 6)%6; break;\n\t\tcase G: H6 = ((B - R) / C + 2); break;\n\t\tcase B: H6 = ((R - G) / C + 4); break;\n\t}\n\treturn [H6 / 6, S, L2 / 2];\n}\n\nfunction hsl2RGB(hsl){\n\tvar H = hsl[0], S = hsl[1], L = hsl[2];\n\tvar C = S * 2 * (L < 0.5 ? L : 1 - L), m = L - C/2;\n\tvar rgb = [m,m,m], h6 = 6*H;\n\n\tvar X;\n\tif(S !== 0) switch(h6|0) {\n\t\tcase 0: case 6: X = C * h6; rgb[0] += C; rgb[1] += X; break;\n\t\tcase 1: X = C * (2 - h6); rgb[0] += X; rgb[1] += C; break;\n\t\tcase 2: X = C * (h6 - 2); rgb[1] += C; rgb[2] += X; break;\n\t\tcase 3: X = C * (4 - h6); rgb[1] += X; rgb[2] += C; break;\n\t\tcase 4: X = C * (h6 - 4); rgb[2] += C; rgb[0] += X; break;\n\t\tcase 5: X = C * (6 - h6); rgb[2] += X; rgb[0] += C; break;\n\t}\n\tfor(var i = 0; i != 3; ++i) rgb[i] = Math.round(rgb[i]*255);\n\treturn rgb;\n}\n\n/* 18.8.3 bgColor tint algorithm */\nfunction rgb_tint(hex, tint) {\n\tif(tint === 0) return hex;\n\tvar hsl = rgb2HSL(hex2RGB(hex));\n\tif (tint < 0) hsl[2] = hsl[2] * (1 + tint);\n\telse hsl[2] = 1 - (1 - hsl[2]) * (1 - tint);\n\treturn rgb2Hex(hsl2RGB(hsl));\n}\n\n/* 18.3.1.13 width calculations */\n/* [MS-OI29500] 2.1.595 Column Width & Formatting */\nvar DEF_MDW = 6, MAX_MDW = 15, MIN_MDW = 1, MDW = DEF_MDW;\nfunction width2px(width) { return Math.floor(( width + (Math.round(128/MDW))/256 )* MDW ); }\nfunction px2char(px) { return (Math.floor((px - 5)/MDW * 100 + 0.5))/100; }\nfunction char2width(chr) { return (Math.round((chr * MDW + 5)/MDW*256))/256; }\n//function px2char_(px) { return (((px - 5)/MDW * 100 + 0.5))/100; }\n//function char2width_(chr) { return (((chr * MDW + 5)/MDW*256))/256; }\nfunction cycle_width(collw) { return char2width(px2char(width2px(collw))); }\n/* XLSX/XLSB/XLS specify width in units of MDW */\nfunction find_mdw_colw(collw) {\n\tvar delta = Math.abs(collw - cycle_width(collw)), _MDW = MDW;\n\tif(delta > 0.005) for(MDW=MIN_MDW; MDW 0.5) guess--;\n\t\tif(Math.abs(guess) < delta) { delta = Math.abs(guess); _MDW = MDW; }\n\t}\n\tMDW = _MDW;\n}*/\n\nfunction process_col(coll) {\n\tif(coll.width) {\n\t\tcoll.wpx = width2px(coll.width);\n\t\tcoll.wch = px2char(coll.wpx);\n\t\tcoll.MDW = MDW;\n\t} else if(coll.wpx) {\n\t\tcoll.wch = px2char(coll.wpx);\n\t\tcoll.width = char2width(coll.wch);\n\t\tcoll.MDW = MDW;\n\t} else if(typeof coll.wch == 'number') {\n\t\tcoll.width = char2width(coll.wch);\n\t\tcoll.wpx = width2px(coll.width);\n\t\tcoll.MDW = MDW;\n\t}\n\tif(coll.customWidth) delete coll.customWidth;\n}\n\nvar DEF_PPI = 96, PPI = DEF_PPI;\nfunction px2pt(px) { return px * 96 / PPI; }\nfunction pt2px(pt) { return pt * PPI / 96; }\n\n/* [MS-EXSPXML3] 2.4.54 ST_enmPattern */\nvar XLMLPatternTypeMap = {\n\t\"None\": \"none\",\n\t\"Solid\": \"solid\",\n\t\"Gray50\": \"mediumGray\",\n\t\"Gray75\": \"darkGray\",\n\t\"Gray25\": \"lightGray\",\n\t\"HorzStripe\": \"darkHorizontal\",\n\t\"VertStripe\": \"darkVertical\",\n\t\"ReverseDiagStripe\": \"darkDown\",\n\t\"DiagStripe\": \"darkUp\",\n\t\"DiagCross\": \"darkGrid\",\n\t\"ThickDiagCross\": \"darkTrellis\",\n\t\"ThinHorzStripe\": \"lightHorizontal\",\n\t\"ThinVertStripe\": \"lightVertical\",\n\t\"ThinReverseDiagStripe\": \"lightDown\",\n\t\"ThinHorzCross\": \"lightGrid\"\n};\n\n/* 18.8.5 borders CT_Borders */\nfunction parse_borders(t, styles, themes, opts) {\n\tstyles.Borders = [];\n\tvar border = {};\n\tvar pass = false;\n\t(t[0].match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.4 border CT_Border */\n\t\t\tcase '': case '':\n\t\t\t\tborder = {};\n\t\t\t\tif(y.diagonalUp) border.diagonalUp = parsexmlbool(y.diagonalUp);\n\t\t\t\tif(y.diagonalDown) border.diagonalDown = parsexmlbool(y.diagonalDown);\n\t\t\t\tstyles.Borders.push(border);\n\t\t\t\tbreak;\n\t\t\tcase '': break;\n\n\t\t\t/* note: not in spec, appears to be CT_BorderPr */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* note: not in spec, appears to be CT_BorderPr */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.43 top CT_BorderPr */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.6 bottom CT_BorderPr */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.13 diagonal CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.25 horizontal CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.44 vertical CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.37 start CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.16 end CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.? color CT_Color */\n\t\t\tcase '':\n\t\t\t\tbreak;\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault: if(opts && opts.WTF) {\n\t\t\t\tif(!pass) throw new Error('unrecognized ' + y[0] + ' in borders');\n\t\t\t}\n\t\t}\n\t});\n}\n\n/* 18.8.21 fills CT_Fills */\nfunction parse_fills(t, styles, themes, opts) {\n\tstyles.Fills = [];\n\tvar fill = {};\n\tvar pass = false;\n\t(t[0].match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.20 fill CT_Fill */\n\t\t\tcase '': case '':\n\t\t\t\tfill = {}; styles.Fills.push(fill); break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.24 gradientFill CT_GradientFill */\n\t\t\tcase '': break;\n\t\t\tcase '': styles.Fills.push(fill); fill = {}; break;\n\n\t\t\t/* 18.8.32 patternFill CT_PatternFill */\n\t\t\tcase '':\n\t\t\t\tif(y.patternType) fill.patternType = y.patternType;\n\t\t\t\tbreak;\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.3 bgColor CT_Color */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.19 fgColor CT_Color */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.38 stop CT_GradientStop */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.? color CT_Color */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault: if(opts && opts.WTF) {\n\t\t\t\tif(!pass) throw new Error('unrecognized ' + y[0] + ' in fills');\n\t\t\t}\n\t\t}\n\t});\n}\n\n/* 18.8.23 fonts CT_Fonts */\nfunction parse_fonts(t, styles, themes, opts) {\n\tstyles.Fonts = [];\n\tvar font = {};\n\tvar pass = false;\n\t(t[0].match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.22 font CT_Font */\n\t\t\tcase '': break;\n\t\t\tcase '': case '':\n\t\t\t\tstyles.Fonts.push(font);\n\t\t\t\tfont = {};\n\t\t\t\tbreak;\n\n\t\t\t/* 18.8.29 name CT_FontName */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.2 b CT_BooleanProperty */\n\t\t\tcase '': font.bold = 1; break;\n\n\t\t\t/* 18.8.26 i CT_BooleanProperty */\n\t\t\tcase '': font.italic = 1; break;\n\n\t\t\t/* 18.4.13 u CT_UnderlineProperty */\n\t\t\tcase '': font.underline = 1; break;\n\n\t\t\t/* 18.4.10 strike CT_BooleanProperty */\n\t\t\tcase '': font.strike = 1; break;\n\n\t\t\t/* 18.4.2 outline CT_BooleanProperty */\n\t\t\tcase '': font.outline = 1; break;\n\n\t\t\t/* 18.8.36 shadow CT_BooleanProperty */\n\t\t\tcase '': font.shadow = 1; break;\n\n\t\t\t/* 18.8.12 condense CT_BooleanProperty */\n\t\t\tcase '': font.condense = 1; break;\n\n\t\t\t/* 18.8.17 extend CT_BooleanProperty */\n\t\t\tcase '': font.extend = 1; break;\n\n\t\t\t/* 18.4.11 sz CT_FontSize */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.4.14 vertAlign CT_VerticalAlignFontProperty */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.18 family CT_FontFamily */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.35 scheme CT_FontScheme */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.4.1 charset CT_IntProperty */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* note: sometimes mc:AlternateContent appears bare */\n\t\t\tcase '': pass = false; break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault: if(opts && opts.WTF) {\n\t\t\t\tif(!pass) throw new Error('unrecognized ' + y[0] + ' in fonts');\n\t\t\t}\n\t\t}\n\t});\n}\n\n/* 18.8.31 numFmts CT_NumFmts */\nfunction parse_numFmts(t, styles, opts) {\n\tstyles.NumberFmt = [];\n\tvar k/*Array*/ = (keys(SSF._table));\n\tfor(var i=0; i < k.length; ++i) styles.NumberFmt[k[i]] = SSF._table[k[i]];\n\tvar m = t[0].match(tagregex);\n\tif(!m) return;\n\tfor(i=0; i < m.length; ++i) {\n\t\tvar y = parsexmltag(m[i]);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': case '': break;\n\t\t\tcase '0) {\n\t\t\t\t\tif(j > 0x188) {\n\t\t\t\t\t\tfor(j = 0x188; j > 0x3c; --j) if(styles.NumberFmt[j] == null) break;\n\t\t\t\t\t\tstyles.NumberFmt[j] = f;\n\t\t\t\t\t}\n\t\t\t\t\tSSF.load(f,j);\n\t\t\t\t}\n\t\t\t} break;\n\t\t\tcase '': break;\n\t\t\tdefault: if(opts.WTF) throw new Error('unrecognized ' + y[0] + ' in numFmts');\n\t\t}\n\t}\n}\n\nfunction write_numFmts(NF) {\n\tvar o = [\"\"];\n\t[[5,8],[23,26],[41,44],[/*63*/50,/*66],[164,*/392]].forEach(function(r) {\n\t\tfor(var i = r[0]; i <= r[1]; ++i) if(NF[i] != null) o[o.length] = (writextag('numFmt',null,{numFmtId:i,formatCode:escapexml(NF[i])}));\n\t});\n\tif(o.length === 1) return \"\";\n\to[o.length] = (\"\");\n\to[0] = writextag('numFmts', null, { count:o.length-2 }).replace(\"/>\", \">\");\n\treturn o.join(\"\");\n}\n\n/* 18.8.10 cellXfs CT_CellXfs */\nvar cellXF_uint = [ \"numFmtId\", \"fillId\", \"fontId\", \"borderId\", \"xfId\" ];\nvar cellXF_bool = [ \"applyAlignment\", \"applyBorder\", \"applyFill\", \"applyFont\", \"applyNumberFormat\", \"applyProtection\", \"pivotButton\", \"quotePrefix\" ];\nfunction parse_cellXfs(t, styles, opts) {\n\tstyles.CellXf = [];\n\tvar xf;\n\tvar pass = false;\n\t(t[0].match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x), i = 0;\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.8.45 xf CT_Xf */\n\t\t\tcase '':\n\t\t\t\txf = y;\n\t\t\t\tdelete xf[0];\n\t\t\t\tfor(i = 0; i < cellXF_uint.length; ++i) if(xf[cellXF_uint[i]])\n\t\t\t\t\txf[cellXF_uint[i]] = parseInt(xf[cellXF_uint[i]], 10);\n\t\t\t\tfor(i = 0; i < cellXF_bool.length; ++i) if(xf[cellXF_bool[i]])\n\t\t\t\t\txf[cellXF_bool[i]] = parsexmlbool(xf[cellXF_bool[i]]);\n\t\t\t\tif(xf.numFmtId > 0x188) {\n\t\t\t\t\tfor(i = 0x188; i > 0x3c; --i) if(styles.NumberFmt[xf.numFmtId] == styles.NumberFmt[i]) { xf.numFmtId = i; break; }\n\t\t\t\t}\n\t\t\t\tstyles.CellXf.push(xf); break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.1 alignment CT_CellAlignment */\n\t\t\tcase '':\n\t\t\t\tvar alignment = {};\n\t\t\t\tif(y.vertical) alignment.vertical = y.vertical;\n\t\t\t\tif(y.horizontal) alignment.horizontal = y.horizontal;\n\t\t\t\tif(y.textRotation != null) alignment.textRotation = y.textRotation;\n\t\t\t\tif(y.indent) alignment.indent = y.indent;\n\t\t\t\tif(y.wrapText) alignment.wrapText = parsexmlbool(y.wrapText);\n\t\t\t\txf.alignment = alignment;\n\t\t\t\tbreak;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.33 protection CT_CellProtection */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* note: sometimes mc:AlternateContent appears bare */\n\t\t\tcase '': pass = false; break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault: if(opts && opts.WTF) {\n\t\t\t\tif(!pass) throw new Error('unrecognized ' + y[0] + ' in cellXfs');\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction write_cellXfs(cellXfs) {\n\tvar o = [];\n\to[o.length] = (writextag('cellXfs',null));\n\tcellXfs.forEach(function(c) {\n\t\to[o.length] = (writextag('xf', null, c));\n\t});\n\to[o.length] = (\"\");\n\tif(o.length === 2) return \"\";\n\to[0] = writextag('cellXfs',null, {count:o.length-2}).replace(\"/>\",\">\");\n\treturn o.join(\"\");\n}\n\n/* 18.8 Styles CT_Stylesheet*/\nvar parse_sty_xml= (function make_pstyx() {\nvar numFmtRegex = /<(?:\\w+:)?numFmts([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?numFmts>/;\nvar cellXfRegex = /<(?:\\w+:)?cellXfs([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?cellXfs>/;\nvar fillsRegex = /<(?:\\w+:)?fills([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?fills>/;\nvar fontsRegex = /<(?:\\w+:)?fonts([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?fonts>/;\nvar bordersRegex = /<(?:\\w+:)?borders([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?borders>/;\n\nreturn function parse_sty_xml(data, themes, opts) {\n\tvar styles = {};\n\tif(!data) return styles;\n\tdata = data.replace(//mg,\"\").replace(//gm,\"\");\n\t/* 18.8.39 styleSheet CT_Stylesheet */\n\tvar t;\n\n\t/* 18.8.31 numFmts CT_NumFmts ? */\n\tif((t=data.match(numFmtRegex))) parse_numFmts(t, styles, opts);\n\n\t/* 18.8.23 fonts CT_Fonts ? */\n\tif((t=data.match(fontsRegex))) parse_fonts(t, styles, themes, opts);\n\n\t/* 18.8.21 fills CT_Fills ? */\n\tif((t=data.match(fillsRegex))) parse_fills(t, styles, themes, opts);\n\n\t/* 18.8.5 borders CT_Borders ? */\n\tif((t=data.match(bordersRegex))) parse_borders(t, styles, themes, opts);\n\n\t/* 18.8.9 cellStyleXfs CT_CellStyleXfs ? */\n\t/* 18.8.8 cellStyles CT_CellStyles ? */\n\n\t/* 18.8.10 cellXfs CT_CellXfs ? */\n\tif((t=data.match(cellXfRegex))) parse_cellXfs(t, styles, opts);\n\n\t/* 18.8.15 dxfs CT_Dxfs ? */\n\t/* 18.8.42 tableStyles CT_TableStyles ? */\n\t/* 18.8.11 colors CT_Colors ? */\n\t/* 18.2.10 extLst CT_ExtensionList ? */\n\n\treturn styles;\n};\n})();\n\nvar STYLES_XML_ROOT = writextag('styleSheet', null, {\n\t'xmlns': XMLNS.main[0],\n\t'xmlns:vt': XMLNS.vt\n});\n\nRELS.STY = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\";\n\nfunction write_sty_xml(wb, opts) {\n\tvar o = [XML_HEADER, STYLES_XML_ROOT], w;\n\tif(wb.SSF && (w = write_numFmts(wb.SSF)) != null) o[o.length] = w;\n\to[o.length] = ('');\n\to[o.length] = ('');\n\to[o.length] = ('');\n\to[o.length] = ('');\n\tif((w = write_cellXfs(opts.cellXfs))) o[o.length] = (w);\n\to[o.length] = ('');\n\to[o.length] = ('');\n\to[o.length] = ('');\n\n\tif(o.length>2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* [MS-XLSB] 2.4.657 BrtFmt */\nfunction parse_BrtFmt(data, length) {\n\tvar numFmtId = data.read_shift(2);\n\tvar stFmtCode = parse_XLWideString(data,length-2);\n\treturn [numFmtId, stFmtCode];\n}\nfunction write_BrtFmt(i, f, o) {\n\tif(!o) o = new_buf(6 + 4 * f.length);\n\to.write_shift(2, i);\n\twrite_XLWideString(f, o);\n\tvar out = (o.length > o.l) ? o.slice(0, o.l) : o;\n\tif(o.l == null) o.l = o.length;\n\treturn out;\n}\n\n/* [MS-XLSB] 2.4.659 BrtFont TODO */\nfunction parse_BrtFont(data, length, opts) {\n\tvar out = ({});\n\n\tout.sz = data.read_shift(2) / 20;\n\n\tvar grbit = parse_FontFlags(data, 2, opts);\n\tif(grbit.fItalic) out.italic = 1;\n\tif(grbit.fCondense) out.condense = 1;\n\tif(grbit.fExtend) out.extend = 1;\n\tif(grbit.fShadow) out.shadow = 1;\n\tif(grbit.fOutline) out.outline = 1;\n\tif(grbit.fStrikeout) out.strike = 1;\n\n\tvar bls = data.read_shift(2);\n\tif(bls === 0x02BC) out.bold = 1;\n\n\tswitch(data.read_shift(2)) {\n\t\t/* case 0: out.vertAlign = \"baseline\"; break; */\n\t\tcase 1: out.vertAlign = \"superscript\"; break;\n\t\tcase 2: out.vertAlign = \"subscript\"; break;\n\t}\n\n\tvar underline = data.read_shift(1);\n\tif(underline != 0) out.underline = underline;\n\n\tvar family = data.read_shift(1);\n\tif(family > 0) out.family = family;\n\n\tvar bCharSet = data.read_shift(1);\n\tif(bCharSet > 0) out.charset = bCharSet;\n\n\tdata.l++;\n\tout.color = parse_BrtColor(data, 8);\n\n\tswitch(data.read_shift(1)) {\n\t\t/* case 0: out.scheme = \"none\": break; */\n\t\tcase 1: out.scheme = \"major\"; break;\n\t\tcase 2: out.scheme = \"minor\"; break;\n\t}\n\n\tout.name = parse_XLWideString(data, length - 21);\n\n\treturn out;\n}\nfunction write_BrtFont(font, o) {\n\tif(!o) o = new_buf(25+4*32);\n\to.write_shift(2, font.sz * 20);\n\twrite_FontFlags(font, o);\n\to.write_shift(2, font.bold ? 0x02BC : 0x0190);\n\tvar sss = 0;\n\tif(font.vertAlign == \"superscript\") sss = 1;\n\telse if(font.vertAlign == \"subscript\") sss = 2;\n\to.write_shift(2, sss);\n\to.write_shift(1, font.underline || 0);\n\to.write_shift(1, font.family || 0);\n\to.write_shift(1, font.charset || 0);\n\to.write_shift(1, 0);\n\twrite_BrtColor(font.color, o);\n\tvar scheme = 0;\n\tif(font.scheme == \"major\") scheme = 1;\n\tif(font.scheme == \"minor\") scheme = 2;\n\to.write_shift(1, scheme);\n\twrite_XLWideString(font.name, o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.650 BrtFill */\nvar XLSBFillPTNames = [\n\t\"none\",\n\t\"solid\",\n\t\"mediumGray\",\n\t\"darkGray\",\n\t\"lightGray\",\n\t\"darkHorizontal\",\n\t\"darkVertical\",\n\t\"darkDown\",\n\t\"darkUp\",\n\t\"darkGrid\",\n\t\"darkTrellis\",\n\t\"lightHorizontal\",\n\t\"lightVertical\",\n\t\"lightDown\",\n\t\"lightUp\",\n\t\"lightGrid\",\n\t\"lightTrellis\",\n\t\"gray125\",\n\t\"gray0625\"\n];\nvar rev_XLSBFillPTNames = (evert(XLSBFillPTNames));\n/* TODO: gradient fill representation */\nvar parse_BrtFill = parsenoop;\nfunction write_BrtFill(fill, o) {\n\tif(!o) o = new_buf(4*3 + 8*7 + 16*1);\n\tvar fls = rev_XLSBFillPTNames[fill.patternType];\n\tif(fls == null) fls = 0x28;\n\to.write_shift(4, fls);\n\tvar j = 0;\n\tif(fls != 0x28) {\n\t\t/* TODO: custom FG Color */\n\t\twrite_BrtColor({auto:1}, o);\n\t\t/* TODO: custom BG Color */\n\t\twrite_BrtColor({auto:1}, o);\n\n\t\tfor(; j < 12; ++j) o.write_shift(4, 0);\n\t} else {\n\t\tfor(; j < 4; ++j) o.write_shift(4, 0);\n\n\t\tfor(; j < 12; ++j) o.write_shift(4, 0); /* TODO */\n\t\t/* iGradientType */\n\t\t/* xnumDegree */\n\t\t/* xnumFillToLeft */\n\t\t/* xnumFillToRight */\n\t\t/* xnumFillToTop */\n\t\t/* xnumFillToBottom */\n\t\t/* cNumStop */\n\t\t/* xfillGradientStop */\n\t}\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.824 BrtXF */\nfunction parse_BrtXF(data, length) {\n\tvar tgt = data.l + length;\n\tvar ixfeParent = data.read_shift(2);\n\tvar ifmt = data.read_shift(2);\n\tdata.l = tgt;\n\treturn {ixfe:ixfeParent, numFmtId:ifmt };\n}\nfunction write_BrtXF(data, ixfeP, o) {\n\tif(!o) o = new_buf(16);\n\to.write_shift(2, ixfeP||0);\n\to.write_shift(2, data.numFmtId||0);\n\to.write_shift(2, 0); /* iFont */\n\to.write_shift(2, 0); /* iFill */\n\to.write_shift(2, 0); /* ixBorder */\n\to.write_shift(1, 0); /* trot */\n\to.write_shift(1, 0); /* indent */\n\tvar flow = 0;\n\to.write_shift(1, flow); /* flags */\n\to.write_shift(1, 0); /* flags */\n\to.write_shift(1, 0); /* xfGrbitAtr */\n\to.write_shift(1, 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.4 Blxf TODO */\nfunction write_Blxf(data, o) {\n\tif(!o) o = new_buf(10);\n\to.write_shift(1, 0); /* dg */\n\to.write_shift(1, 0);\n\to.write_shift(4, 0); /* color */\n\to.write_shift(4, 0); /* color */\n\treturn o;\n}\n/* [MS-XLSB] 2.4.302 BrtBorder TODO */\nvar parse_BrtBorder = parsenoop;\nfunction write_BrtBorder(border, o) {\n\tif(!o) o = new_buf(51);\n\to.write_shift(1, 0); /* diagonal */\n\twrite_Blxf(null, o); /* top */\n\twrite_Blxf(null, o); /* bottom */\n\twrite_Blxf(null, o); /* left */\n\twrite_Blxf(null, o); /* right */\n\twrite_Blxf(null, o); /* diag */\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.763 BrtStyle TODO */\nfunction write_BrtStyle(style, o) {\n\tif(!o) o = new_buf(12+4*10);\n\to.write_shift(4, style.xfId);\n\to.write_shift(2, 1);\n\to.write_shift(1, +style.builtinId);\n\to.write_shift(1, 0); /* iLevel */\n\twrite_XLNullableWideString(style.name || \"\", o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.272 BrtBeginTableStyles */\nfunction write_BrtBeginTableStyles(cnt, defTableStyle, defPivotStyle) {\n\tvar o = new_buf(4+256*2*4);\n\to.write_shift(4, cnt);\n\twrite_XLNullableWideString(defTableStyle, o);\n\twrite_XLNullableWideString(defPivotStyle, o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.1.7.50 Styles */\nfunction parse_sty_bin(data, themes, opts) {\n\tvar styles = {};\n\tstyles.NumberFmt = ([]);\n\tfor(var y in SSF._table) styles.NumberFmt[y] = SSF._table[y];\n\n\tstyles.CellXf = [];\n\tstyles.Fonts = [];\n\tvar state = [];\n\tvar pass = false;\n\trecordhopper(data, function hopper_sty(val, R_n, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x002C: /* 'BrtFmt' */\n\t\t\t\tstyles.NumberFmt[val[0]] = val[1]; SSF.load(val[1], val[0]);\n\t\t\t\tbreak;\n\t\t\tcase 0x002B: /* 'BrtFont' */\n\t\t\t\tstyles.Fonts.push(val);\n\t\t\t\tif(val.color.theme != null && themes && themes.themeElements && themes.themeElements.clrScheme) {\n\t\t\t\t\tval.color.rgb = rgb_tint(themes.themeElements.clrScheme[val.color.theme].rgb, val.color.tint || 0);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 0x0401: /* 'BrtKnownFonts' */ break;\n\t\t\tcase 0x002D: /* 'BrtFill' */\n\t\t\t\tbreak;\n\t\t\tcase 0x002E: /* 'BrtBorder' */\n\t\t\t\tbreak;\n\t\t\tcase 0x002F: /* 'BrtXF' */\n\t\t\t\tif(state[state.length - 1] == \"BrtBeginCellXFs\") {\n\t\t\t\t\tstyles.CellXf.push(val);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 0x0030: /* 'BrtStyle' */\n\t\t\tcase 0x01FB: /* 'BrtDXF' */\n\t\t\tcase 0x023C: /* 'BrtMRUColor' */\n\t\t\tcase 0x01DB: /* 'BrtIndexedColor': */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0493: /* 'BrtDXF14' */\n\t\t\tcase 0x0836: /* 'BrtDXF15' */\n\t\t\tcase 0x046A: /* 'BrtSlicerStyleElement' */\n\t\t\tcase 0x0200: /* 'BrtTableStyleElement' */\n\t\t\tcase 0x082F: /* 'BrtTimelineStyleElement' */\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */\n\t\t\t\tstate.push(R_n); pass = true; break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */\n\t\t\t\tstate.pop(); pass = false; break;\n\n\t\t\tdefault:\n\t\t\t\tif((R_n||\"\").indexOf(\"Begin\") > 0) state.push(R_n);\n\t\t\t\telse if((R_n||\"\").indexOf(\"End\") > 0) state.pop();\n\t\t\t\telse if(!pass || (opts.WTF && state[state.length-1] != \"BrtACBegin\")) throw new Error(\"Unexpected record \" + RT + \" \" + R_n);\n\t\t}\n\t});\n\treturn styles;\n}\n\nfunction write_FMTS_bin(ba, NF) {\n\tif(!NF) return;\n\tvar cnt = 0;\n\t[[5,8],[23,26],[41,44],[/*63*/50,/*66],[164,*/392]].forEach(function(r) {\nfor(var i = r[0]; i <= r[1]; ++i) if(NF[i] != null) ++cnt;\n\t});\n\n\tif(cnt == 0) return;\n\twrite_record(ba, \"BrtBeginFmts\", write_UInt32LE(cnt));\n\t[[5,8],[23,26],[41,44],[/*63*/50,/*66],[164,*/392]].forEach(function(r) {\nfor(var i = r[0]; i <= r[1]; ++i) if(NF[i] != null) write_record(ba, \"BrtFmt\", write_BrtFmt(i, NF[i]));\n\t});\n\twrite_record(ba, \"BrtEndFmts\");\n}\n\nfunction write_FONTS_bin(ba) {\n\tvar cnt = 1;\n\n\tif(cnt == 0) return;\n\twrite_record(ba, \"BrtBeginFonts\", write_UInt32LE(cnt));\n\twrite_record(ba, \"BrtFont\", write_BrtFont({\n\t\tsz:12,\n\t\tcolor: {theme:1},\n\t\tname: \"Calibri\",\n\t\tfamily: 2,\n\t\tscheme: \"minor\"\n\t}));\n\t/* 1*65491BrtFont [ACFONTS] */\n\twrite_record(ba, \"BrtEndFonts\");\n}\n\nfunction write_FILLS_bin(ba) {\n\tvar cnt = 2;\n\n\tif(cnt == 0) return;\n\twrite_record(ba, \"BrtBeginFills\", write_UInt32LE(cnt));\n\twrite_record(ba, \"BrtFill\", write_BrtFill({patternType:\"none\"}));\n\twrite_record(ba, \"BrtFill\", write_BrtFill({patternType:\"gray125\"}));\n\t/* 1*65431BrtFill */\n\twrite_record(ba, \"BrtEndFills\");\n}\n\nfunction write_BORDERS_bin(ba) {\n\tvar cnt = 1;\n\n\tif(cnt == 0) return;\n\twrite_record(ba, \"BrtBeginBorders\", write_UInt32LE(cnt));\n\twrite_record(ba, \"BrtBorder\", write_BrtBorder({}));\n\t/* 1*65430BrtBorder */\n\twrite_record(ba, \"BrtEndBorders\");\n}\n\nfunction write_CELLSTYLEXFS_bin(ba) {\n\tvar cnt = 1;\n\twrite_record(ba, \"BrtBeginCellStyleXFs\", write_UInt32LE(cnt));\n\twrite_record(ba, \"BrtXF\", write_BrtXF({\n\t\tnumFmtId: 0,\n\t\tfontId: 0,\n\t\tfillId: 0,\n\t\tborderId: 0\n\t}, 0xFFFF));\n\t/* 1*65430(BrtXF *FRT) */\n\twrite_record(ba, \"BrtEndCellStyleXFs\");\n}\n\nfunction write_CELLXFS_bin(ba, data) {\n\twrite_record(ba, \"BrtBeginCellXFs\", write_UInt32LE(data.length));\n\tdata.forEach(function(c) { write_record(ba, \"BrtXF\", write_BrtXF(c,0)); });\n\t/* 1*65430(BrtXF *FRT) */\n\twrite_record(ba, \"BrtEndCellXFs\");\n}\n\nfunction write_STYLES_bin(ba) {\n\tvar cnt = 1;\n\n\twrite_record(ba, \"BrtBeginStyles\", write_UInt32LE(cnt));\n\twrite_record(ba, \"BrtStyle\", write_BrtStyle({\n\t\txfId:0,\n\t\tbuiltinId:0,\n\t\tname:\"Normal\"\n\t}));\n\t/* 1*65430(BrtStyle *FRT) */\n\twrite_record(ba, \"BrtEndStyles\");\n}\n\nfunction write_DXFS_bin(ba) {\n\tvar cnt = 0;\n\n\twrite_record(ba, \"BrtBeginDXFs\", write_UInt32LE(cnt));\n\t/* *2147483647(BrtDXF *FRT) */\n\twrite_record(ba, \"BrtEndDXFs\");\n}\n\nfunction write_TABLESTYLES_bin(ba) {\n\tvar cnt = 0;\n\n\twrite_record(ba, \"BrtBeginTableStyles\", write_BrtBeginTableStyles(cnt, \"TableStyleMedium9\", \"PivotStyleMedium4\"));\n\t/* *TABLESTYLE */\n\twrite_record(ba, \"BrtEndTableStyles\");\n}\n\nfunction write_COLORPALETTE_bin() {\n\treturn;\n\t/* BrtBeginColorPalette [INDEXEDCOLORS] [MRUCOLORS] BrtEndColorPalette */\n}\n\n/* [MS-XLSB] 2.1.7.50 Styles */\nfunction write_sty_bin(wb, opts) {\n\tvar ba = buf_array();\n\twrite_record(ba, \"BrtBeginStyleSheet\");\n\twrite_FMTS_bin(ba, wb.SSF);\n\twrite_FONTS_bin(ba, wb);\n\twrite_FILLS_bin(ba, wb);\n\twrite_BORDERS_bin(ba, wb);\n\twrite_CELLSTYLEXFS_bin(ba, wb);\n\twrite_CELLXFS_bin(ba, opts.cellXfs);\n\twrite_STYLES_bin(ba, wb);\n\twrite_DXFS_bin(ba, wb);\n\twrite_TABLESTYLES_bin(ba, wb);\n\twrite_COLORPALETTE_bin(ba, wb);\n\t/* FRTSTYLESHEET*/\n\twrite_record(ba, \"BrtEndStyleSheet\");\n\treturn ba.end();\n}\nRELS.THEME = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\";\n\n/* Even though theme layout is dk1 lt1 dk2 lt2, true order is lt1 dk1 lt2 dk2 */\nvar XLSXThemeClrScheme = [\n\t'', '', '', '',\n\t'', '', '',\n\t'', '', '',\n\t'', ''\n];\n/* 20.1.6.2 clrScheme CT_ColorScheme */\nfunction parse_clrScheme(t, themes, opts) {\n\tthemes.themeElements.clrScheme = [];\n\tvar color = {};\n\t(t[0].match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(y[0]) {\n\t\t\t/* 20.1.6.2 clrScheme (Color Scheme) CT_ColorScheme */\n\t\t\tcase '': break;\n\n\t\t\t/* 20.1.2.3.32 srgbClr CT_SRgbColor */\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\t\tif (y[0].charAt(1) === '/') {\n\t\t\t\t\tthemes.themeElements.clrScheme[XLSXThemeClrScheme.indexOf(y[0])] = color;\n\t\t\t\t\tcolor = {};\n\t\t\t\t} else {\n\t\t\t\t\tcolor.name = y[0].slice(3, y[0].length - 1);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tdefault: if(opts && opts.WTF) throw new Error('Unrecognized ' + y[0] + ' in clrScheme');\n\t\t}\n\t});\n}\n\n/* 20.1.4.1.18 fontScheme CT_FontScheme */\nfunction parse_fontScheme() { }\n\n/* 20.1.4.1.15 fmtScheme CT_StyleMatrix */\nfunction parse_fmtScheme() { }\n\nvar clrsregex = /]*)>[\\s\\S]*<\\/a:clrScheme>/;\nvar fntsregex = /]*)>[\\s\\S]*<\\/a:fontScheme>/;\nvar fmtsregex = /]*)>[\\s\\S]*<\\/a:fmtScheme>/;\n\n/* 20.1.6.10 themeElements CT_BaseStyles */\nfunction parse_themeElements(data, themes, opts) {\n\tthemes.themeElements = {};\n\n\tvar t;\n\n\t[\n\t\t/* clrScheme CT_ColorScheme */\n\t\t['clrScheme', clrsregex, parse_clrScheme],\n\t\t/* fontScheme CT_FontScheme */\n\t\t['fontScheme', fntsregex, parse_fontScheme],\n\t\t/* fmtScheme CT_StyleMatrix */\n\t\t['fmtScheme', fmtsregex, parse_fmtScheme]\n\t].forEach(function(m) {\n\t\tif(!(t=data.match(m[1]))) throw new Error(m[0] + ' not found in themeElements');\n\t\tm[2](t, themes, opts);\n\t});\n}\n\nvar themeltregex = /]*)>[\\s\\S]*<\\/a:themeElements>/;\n\n/* 14.2.7 Theme Part */\nfunction parse_theme_xml(data, opts) {\n\t/* 20.1.6.9 theme CT_OfficeStyleSheet */\n\tif(!data || data.length === 0) return parse_theme_xml(write_theme());\n\n\tvar t;\n\tvar themes = {};\n\n\t/* themeElements CT_BaseStyles */\n\tif(!(t=data.match(themeltregex))) throw new Error('themeElements not found in theme');\n\tparse_themeElements(t[0], themes, opts);\n\tthemes.raw = data;\n\treturn themes;\n}\n\nfunction write_theme(Themes, opts) {\n\tif(opts && opts.themeXLSX) return opts.themeXLSX;\n\tif(Themes && typeof Themes.raw == \"string\") return Themes.raw;\n\tvar o = [XML_HEADER];\n\to[o.length] = '';\n\to[o.length] = '';\n\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\treturn o.join(\"\");\n}\n/* [MS-XLS] 2.4.326 TODO: payload is a zip file */\nfunction parse_Theme(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar dwThemeVersion = blob.read_shift(4);\n\tif(dwThemeVersion === 124226) return;\n\tif(!opts.cellStyles || !jszip) { blob.l = end; return; }\n\tvar data = blob.slice(blob.l);\n\tblob.l = end;\n\tvar zip; try { zip = new jszip(data); } catch(e) { return; }\n\tvar themeXML = getzipstr(zip, \"theme/theme/theme1.xml\", true);\n\tif(!themeXML) return;\n\treturn parse_theme_xml(themeXML, opts);\n}\n\n/* 2.5.49 */\nfunction parse_ColorTheme(blob) { return blob.read_shift(4); }\n\n/* 2.5.155 */\nfunction parse_FullColorExt(blob) {\n\tvar o = {};\n\to.xclrType = blob.read_shift(2);\n\to.nTintShade = blob.read_shift(2);\n\tswitch(o.xclrType) {\n\t\tcase 0: blob.l += 4; break;\n\t\tcase 1: o.xclrValue = parse_IcvXF(blob, 4); break;\n\t\tcase 2: o.xclrValue = parse_LongRGBA(blob, 4); break;\n\t\tcase 3: o.xclrValue = parse_ColorTheme(blob, 4); break;\n\t\tcase 4: blob.l += 4; break;\n\t}\n\tblob.l += 8;\n\treturn o;\n}\n\n/* 2.5.164 TODO: read 7 bits*/\nfunction parse_IcvXF(blob, length) {\n\treturn parsenoop(blob, length);\n}\n\n/* 2.5.280 */\nfunction parse_XFExtGradient(blob, length) {\n\treturn parsenoop(blob, length);\n}\n\n/* [MS-XLS] 2.5.108 */\nfunction parse_ExtProp(blob) {\n\tvar extType = blob.read_shift(2);\n\tvar cb = blob.read_shift(2) - 4;\n\tvar o = [extType];\n\tswitch(extType) {\n\t\tcase 0x04: case 0x05: case 0x07: case 0x08:\n\t\tcase 0x09: case 0x0A: case 0x0B: case 0x0D:\n\t\t\to[1] = parse_FullColorExt(blob, cb); break;\n\t\tcase 0x06: o[1] = parse_XFExtGradient(blob, cb); break;\n\t\tcase 0x0E: case 0x0F: o[1] = blob.read_shift(cb === 1 ? 1 : 2); break;\n\t\tdefault: throw new Error(\"Unrecognized ExtProp type: \" + extType + \" \" + cb);\n\t}\n\treturn o;\n}\n\n/* 2.4.355 */\nfunction parse_XFExt(blob, length) {\n\tvar end = blob.l + length;\n\tblob.l += 2;\n\tvar ixfe = blob.read_shift(2);\n\tblob.l += 2;\n\tvar cexts = blob.read_shift(2);\n\tvar ext = [];\n\twhile(cexts-- > 0) ext.push(parse_ExtProp(blob, end-blob.l));\n\treturn {ixfe:ixfe, ext:ext};\n}\n\n/* xf is an XF, see parse_XFExt for xfext */\nfunction update_xfext(xf, xfext) {\n\txfext.forEach(function(xfe) {\n\t\tswitch(xfe[0]) { /* 2.5.108 extPropData */\n\t\t\tcase 0x04: break; /* foreground color */\n\t\t\tcase 0x05: break; /* background color */\n\t\t\tcase 0x06: break; /* gradient fill */\n\t\t\tcase 0x07: break; /* top cell border color */\n\t\t\tcase 0x08: break; /* bottom cell border color */\n\t\t\tcase 0x09: break; /* left cell border color */\n\t\t\tcase 0x0a: break; /* right cell border color */\n\t\t\tcase 0x0b: break; /* diagonal cell border color */\n\t\t\tcase 0x0d: /* text color */\n\t\t\t\tbreak;\n\t\t\tcase 0x0e: break; /* font scheme */\n\t\t\tcase 0x0f: break; /* indentation level */\n\t\t}\n\t});\n}\n\n/* 18.6 Calculation Chain */\nfunction parse_cc_xml(data) {\n\tvar d = [];\n\tif(!data) return d;\n\tvar i = 1;\n\t(data.match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(y[0]) {\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.6.1 c CT_CalcCell 1 */\n\t\t\tcase ' 0){/* empty */}\n\t\t\t\telse if((R_n||\"\").indexOf(\"End\") > 0){/* empty */}\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record \" + RT + \" \" + R_n);\n\t\t}\n\t});\n\treturn out;\n}\n\n//function write_cc_bin(data, opts) { }\n/* 18.14 Supplementary Workbook Data */\nfunction parse_xlink_xml() {\n\t//var opts = _opts || {};\n\t//if(opts.WTF) throw \"XLSX External Link\";\n}\n\n/* [MS-XLSB] 2.1.7.25 External Link */\nfunction parse_xlink_bin(data, rel, name, _opts) {\n\tif(!data) return data;\n\tvar opts = _opts || {};\n\n\tvar pass = false, end = false;\n\n\trecordhopper(data, function xlink_parse(val, R_n, RT) {\n\t\tif(end) return;\n\t\tswitch(RT) {\n\t\t\tcase 0x0167: /* 'BrtSupTabs' */\n\t\t\tcase 0x016B: /* 'BrtExternTableStart' */\n\t\t\tcase 0x016C: /* 'BrtExternTableEnd' */\n\t\t\tcase 0x016E: /* 'BrtExternRowHdr' */\n\t\t\tcase 0x016F: /* 'BrtExternCellBlank' */\n\t\t\tcase 0x0170: /* 'BrtExternCellReal' */\n\t\t\tcase 0x0171: /* 'BrtExternCellBool' */\n\t\t\tcase 0x0172: /* 'BrtExternCellError' */\n\t\t\tcase 0x0173: /* 'BrtExternCellString' */\n\t\t\tcase 0x01D8: /* 'BrtExternValueMeta' */\n\t\t\tcase 0x0241: /* 'BrtSupNameStart' */\n\t\t\tcase 0x0242: /* 'BrtSupNameValueStart' */\n\t\t\tcase 0x0243: /* 'BrtSupNameValueEnd' */\n\t\t\tcase 0x0244: /* 'BrtSupNameNum' */\n\t\t\tcase 0x0245: /* 'BrtSupNameErr' */\n\t\t\tcase 0x0246: /* 'BrtSupNameSt' */\n\t\t\tcase 0x0247: /* 'BrtSupNameNil' */\n\t\t\tcase 0x0248: /* 'BrtSupNameBool' */\n\t\t\tcase 0x0249: /* 'BrtSupNameFmla' */\n\t\t\tcase 0x024A: /* 'BrtSupNameBits' */\n\t\t\tcase 0x024B: /* 'BrtSupNameEnd' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\n\t\t\tdefault:\n\t\t\t\tif((R_n||\"\").indexOf(\"Begin\") > 0){/* empty */}\n\t\t\t\telse if((R_n||\"\").indexOf(\"End\") > 0){/* empty */}\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record \" + RT.toString(16) + \" \" + R_n);\n\t\t}\n\t}, opts);\n}\n/* 20.5 DrawingML - SpreadsheetML Drawing */\nRELS.IMG = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\";\nRELS.DRAW = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing\";\n\n/* 20.5.2.35 wsDr CT_Drawing */\nfunction parse_drawing(data, rels) {\n\tif(!data) return \"??\";\n\t/*\n\t Chartsheet Drawing:\n\t - 20.5.2.35 wsDr CT_Drawing\n\t - 20.5.2.1 absoluteAnchor CT_AbsoluteAnchor\n\t - 20.5.2.16 graphicFrame CT_GraphicalObjectFrame\n\t - 20.1.2.2.16 graphic CT_GraphicalObject\n\t - 20.1.2.2.17 graphicData CT_GraphicalObjectData\n - chart reference\n\t the actual type is based on the URI of the graphicData\n\t\tTODO: handle embedded charts and other types of graphics\n\t*/\n\tvar id = (data.match(/]*r:id=\"([^\"]*)\"/)||[\"\",\"\"])[1];\n\n\treturn rels['!id'][id].Target;\n}\n\n/* L.5.5.2 SpreadsheetML Comments + VML Schema */\nvar _shapeid = 1024;\nfunction write_comments_vml(rId, comments) {\n\tvar csize = [21600, 21600];\n\t/* L.5.2.1.2 Path Attribute */\n\tvar bbox = [\"m0,0l0\",csize[1],csize[0],csize[1],csize[0],\"0xe\"].join(\",\");\n\tvar o = [\n\t\twritextag(\"xml\", null, { 'xmlns:v': XLMLNS.v, 'xmlns:o': XLMLNS.o, 'xmlns:x': XLMLNS.x, 'xmlns:mv': XLMLNS.mv }).replace(/\\/>/,\">\"),\n\t\twritextag(\"o:shapelayout\", writextag(\"o:idmap\", null, {'v:ext':\"edit\", 'data':rId}), {'v:ext':\"edit\"}),\n\t\twritextag(\"v:shapetype\", [\n\t\t\twritextag(\"v:stroke\", null, {joinstyle:\"miter\"}),\n\t\t\twritextag(\"v:path\", null, {gradientshapeok:\"t\", 'o:connecttype':\"rect\"})\n\t\t].join(\"\"), {id:\"_x0000_t202\", 'o:spt':202, coordsize:csize.join(\",\"),path:bbox})\n\t];\n\twhile(_shapeid < rId * 1000) _shapeid += 1000;\n\n\tcomments.forEach(function(x) {\n\tvar c = decode_cell(x[0]);\n\tvar fillopts = {'color2':\"#BEFF82\", 'type':\"gradient\"};\n\tif(fillopts.type == \"gradient\") fillopts.angle = \"-180\";\n\tvar fillparm = fillopts.type == \"gradient\" ? writextag(\"o:fill\", null, {type:\"gradientUnscaled\", 'v:ext':\"view\"}) : null;\n\tvar fillxml = writextag('v:fill', fillparm, fillopts);\n\n\tvar shadata = ({on:\"t\", 'obscured':\"t\"});\n\t++_shapeid;\n\n\to = o.concat([\n\t'',\n\t\tfillxml,\n\t\twritextag(\"v:shadow\", null, shadata),\n\t\twritextag(\"v:path\", null, {'o:connecttype':\"none\"}),\n\t\t'
',\n\t\t'',\n\t\t\t'',\n\t\t\t'',\n\t\t\t/* Part 4 19.4.2.3 Anchor (Anchor) */\n\t\t\twritetag('x:Anchor', [c.c+1, 0, c.r+1, 0, c.c+3, 20, c.r+5, 20].join(\",\")),\n\t\t\twritetag('x:AutoFill', \"False\"),\n\t\t\twritetag('x:Row', String(c.r)),\n\t\t\twritetag('x:Column', String(c.c)),\n\t\t\tx[1].hidden ? '' : '',\n\t\t'',\n\t''\n\t]); });\n\to.push('');\n\treturn o.join(\"\");\n}\nRELS.CMNT = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments\";\n\nfunction sheet_insert_comments(sheet, comments) {\n\tvar dense = Array.isArray(sheet);\n\tvar cell;\n\tcomments.forEach(function(comment) {\n\t\tvar r = decode_cell(comment.ref);\n\t\tif(dense) {\n\t\t\tif(!sheet[r.r]) sheet[r.r] = [];\n\t\t\tcell = sheet[r.r][r.c];\n\t\t} else cell = sheet[comment.ref];\n\t\tif (!cell) {\n\t\t\tcell = ({t:\"z\"});\n\t\t\tif(dense) sheet[r.r][r.c] = cell;\n\t\t\telse sheet[comment.ref] = cell;\n\t\t\tvar range = safe_decode_range(sheet[\"!ref\"]||\"BDWGO1000001:A1\");\n\t\t\tif(range.s.r > r.r) range.s.r = r.r;\n\t\t\tif(range.e.r < r.r) range.e.r = r.r;\n\t\t\tif(range.s.c > r.c) range.s.c = r.c;\n\t\t\tif(range.e.c < r.c) range.e.c = r.c;\n\t\t\tvar encoded = encode_range(range);\n\t\t\tif (encoded !== sheet[\"!ref\"]) sheet[\"!ref\"] = encoded;\n\t\t}\n\n\t\tif (!cell.c) cell.c = [];\n\t\tvar o = ({a: comment.author, t: comment.t, r: comment.r});\n\t\tif(comment.h) o.h = comment.h;\n\t\tcell.c.push(o);\n\t});\n}\n\n/* 18.7 Comments */\nfunction parse_comments_xml(data, opts) {\n\t/* 18.7.6 CT_Comments */\n\tif(data.match(/<(?:\\w+:)?comments *\\/>/)) return [];\n\tvar authors = [];\n\tvar commentList = [];\n\tvar authtag = data.match(/<(?:\\w+:)?authors>([\\s\\S]*)<\\/(?:\\w+:)?authors>/);\n\tif(authtag && authtag[1]) authtag[1].split(/<\\/\\w*:?author>/).forEach(function(x) {\n\t\tif(x === \"\" || x.trim() === \"\") return;\n\t\tvar a = x.match(/<(?:\\w+:)?author[^>]*>(.*)/);\n\t\tif(a) authors.push(a[1]);\n\t});\n\tvar cmnttag = data.match(/<(?:\\w+:)?commentList>([\\s\\S]*)<\\/(?:\\w+:)?commentList>/);\n\tif(cmnttag && cmnttag[1]) cmnttag[1].split(/<\\/\\w*:?comment>/).forEach(function(x) {\n\t\tif(x === \"\" || x.trim() === \"\") return;\n\t\tvar cm = x.match(/<(?:\\w+:)?comment[^>]*>/);\n\t\tif(!cm) return;\n\t\tvar y = parsexmltag(cm[0]);\n\t\tvar comment = ({ author: y.authorId && authors[y.authorId] || \"sheetjsghost\", ref: y.ref, guid: y.guid });\n\t\tvar cell = decode_cell(y.ref);\n\t\tif(opts.sheetRows && opts.sheetRows <= cell.r) return;\n\t\tvar textMatch = x.match(/<(?:\\w+:)?text>([\\s\\S]*)<\\/(?:\\w+:)?text>/);\n\t\tvar rt = !!textMatch && !!textMatch[1] && parse_si(textMatch[1]) || {r:\"\",t:\"\",h:\"\"};\n\t\tcomment.r = rt.r;\n\t\tif(rt.r == \"\") rt.t = rt.h = \"\";\n\t\tcomment.t = rt.t.replace(/\\r\\n/g,\"\\n\").replace(/\\r/g,\"\\n\");\n\t\tif(opts.cellHTML) comment.h = rt.h;\n\t\tcommentList.push(comment);\n\t});\n\treturn commentList;\n}\n\nvar CMNT_XML_ROOT = writextag('comments', null, { 'xmlns': XMLNS.main[0] });\nfunction write_comments_xml(data) {\n\tvar o = [XML_HEADER, CMNT_XML_ROOT];\n\n\tvar iauthor = [];\n\to.push(\"\");\n\tdata.forEach(function(x) { x[1].forEach(function(w) { var a = escapexml(w.a);\n\t\tif(iauthor.indexOf(a) > -1) return;\n\t\tiauthor.push(a);\n\t\to.push(\"\" + a + \"\");\n\t}); });\n\to.push(\"\");\n\to.push(\"\");\n\tdata.forEach(function(d) {\n\t\td[1].forEach(function(c) {\n\t\t\t/* 18.7.3 CT_Comment */\n\t\t\to.push('');\n\t\t\to.push(writetag(\"t\", c.t == null ? \"\" : escapexml(c.t)));\n\t\t\to.push('');\n\t\t});\n\t});\n\to.push(\"\");\n\tif(o.length>2) { o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* [MS-XLSB] 2.4.28 BrtBeginComment */\nfunction parse_BrtBeginComment(data) {\n\tvar out = {};\n\tout.iauthor = data.read_shift(4);\n\tvar rfx = parse_UncheckedRfX(data, 16);\n\tout.rfx = rfx.s;\n\tout.ref = encode_cell(rfx.s);\n\tdata.l += 16; /*var guid = parse_GUID(data); */\n\treturn out;\n}\nfunction write_BrtBeginComment(data, o) {\n\tif(o == null) o = new_buf(36);\n\to.write_shift(4, data[1].iauthor);\n\twrite_UncheckedRfX((data[0]), o);\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.327 BrtCommentAuthor */\nvar parse_BrtCommentAuthor = parse_XLWideString;\nfunction write_BrtCommentAuthor(data) { return write_XLWideString(data.slice(0, 54)); }\n\n/* [MS-XLSB] 2.1.7.8 Comments */\nfunction parse_comments_bin(data, opts) {\n\tvar out = [];\n\tvar authors = [];\n\tvar c = {};\n\tvar pass = false;\n\trecordhopper(data, function hopper_cmnt(val, R_n, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x0278: /* 'BrtCommentAuthor' */\n\t\t\t\tauthors.push(val); break;\n\t\t\tcase 0x027B: /* 'BrtBeginComment' */\n\t\t\t\tc = val; break;\n\t\t\tcase 0x027D: /* 'BrtCommentText' */\n\t\t\t\tc.t = val.t; c.h = val.h; c.r = val.r; break;\n\t\t\tcase 0x027C: /* 'BrtEndComment' */\n\t\t\t\tc.author = authors[c.iauthor];\n\t\t\t\tdelete (c).iauthor;\n\t\t\t\tif(opts.sheetRows && c.rfx && opts.sheetRows <= c.rfx.r) break;\n\t\t\t\tif(!c.t) c.t = \"\";\n\t\t\t\tdelete c.rfx; out.push(c); break;\n\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */ break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */ break;\n\n\n\t\t\tdefault:\n\t\t\t\tif((R_n||\"\").indexOf(\"Begin\") > 0){/* empty */}\n\t\t\t\telse if((R_n||\"\").indexOf(\"End\") > 0){/* empty */}\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record \" + RT + \" \" + R_n);\n\t\t}\n\t});\n\treturn out;\n}\n\nfunction write_comments_bin(data) {\n\tvar ba = buf_array();\n\tvar iauthor = [];\n\twrite_record(ba, \"BrtBeginComments\");\n\n\twrite_record(ba, \"BrtBeginCommentAuthors\");\n\tdata.forEach(function(comment) {\n\t\tcomment[1].forEach(function(c) {\n\t\t\tif(iauthor.indexOf(c.a) > -1) return;\n\t\t\tiauthor.push(c.a.slice(0,54));\n\t\t\twrite_record(ba, \"BrtCommentAuthor\", write_BrtCommentAuthor(c.a));\n\t\t});\n\t});\n\twrite_record(ba, \"BrtEndCommentAuthors\");\n\n\twrite_record(ba, \"BrtBeginCommentList\");\n\tdata.forEach(function(comment) {\n\t\tcomment[1].forEach(function(c) {\n\t\t\tc.iauthor = iauthor.indexOf(c.a);\n\t\t\tvar range = {s:decode_cell(comment[0]),e:decode_cell(comment[0])};\n\t\t\twrite_record(ba, \"BrtBeginComment\", write_BrtBeginComment([range, c]));\n\t\t\tif(c.t && c.t.length > 0) write_record(ba, \"BrtCommentText\", write_BrtCommentText(c));\n\t\t\twrite_record(ba, \"BrtEndComment\");\n\t\t\tdelete c.iauthor;\n\t\t});\n\t});\n\twrite_record(ba, \"BrtEndCommentList\");\n\n\twrite_record(ba, \"BrtEndComments\");\n\treturn ba.end();\n}\nvar CT_VBA = \"application/vnd.ms-office.vbaProject\";\nfunction make_vba_xls(cfb) {\n\tvar newcfb = CFB.utils.cfb_new({root:\"R\"});\n\tcfb.FullPaths.forEach(function(p, i) {\n\t\tif(p.slice(-1) === \"/\" || !p.match(/_VBA_PROJECT_CUR/)) return;\n\t\tvar newpath = p.replace(/^[^\\/]*/,\"R\").replace(/\\/_VBA_PROJECT_CUR\\u0000*/, \"\");\n\t\tCFB.utils.cfb_add(newcfb, newpath, cfb.FileIndex[i].content);\n\t});\n\treturn CFB.write(newcfb);\n}\n\nfunction fill_vba_xls(cfb, vba) {\n\tvba.FullPaths.forEach(function(p, i) {\n\t\tif(i == 0) return;\n\t\tvar newpath = p.replace(/[^\\/]*[\\/]/, \"/_VBA_PROJECT_CUR/\");\n\t\tif(newpath.slice(-1) !== \"/\") CFB.utils.cfb_add(cfb, newpath, vba.FileIndex[i].content);\n\t});\n}\n\nvar VBAFMTS = [ \"xlsb\", \"xlsm\", \"xlam\", \"biff8\", \"xla\" ];\n\nRELS.DS = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/dialogsheet\";\nRELS.MS = \"http://schemas.microsoft.com/office/2006/relationships/xlMacrosheet\";\n\n/* macro and dialog sheet stubs */\nfunction parse_ds_bin() { return {'!type':'dialog'}; }\nfunction parse_ds_xml() { return {'!type':'dialog'}; }\nfunction parse_ms_bin() { return {'!type':'macro'}; }\nfunction parse_ms_xml() { return {'!type':'macro'}; }\n/* TODO: it will be useful to parse the function str */\nvar rc_to_a1 = (function(){\n\tvar rcregex = /(^|[^A-Za-z_])R(\\[?-?\\d+\\]|[1-9]\\d*|)C(\\[?-?\\d+\\]|[1-9]\\d*|)(?![A-Za-z0-9_])/g;\n\tvar rcbase = ({r:0,c:0});\n\tfunction rcfunc($$,$1,$2,$3) {\n\t\tvar cRel = false, rRel = false;\n\n\t\tif($2.length == 0) rRel = true;\n\t\telse if($2.charAt(0) == \"[\") { rRel = true; $2 = $2.slice(1, -1); }\n\n\t\tif($3.length == 0) cRel = true;\n\t\telse if($3.charAt(0) == \"[\") { cRel = true; $3 = $3.slice(1, -1); }\n\n\t\tvar R = $2.length>0?parseInt($2,10)|0:0, C = $3.length>0?parseInt($3,10)|0:0;\n\n\t\tif(cRel) C += rcbase.c; else --C;\n\t\tif(rRel) R += rcbase.r; else --R;\n\t\treturn $1 + (cRel ? \"\" : \"$\") + encode_col(C) + (rRel ? \"\" : \"$\") + encode_row(R);\n\t}\n\treturn function rc_to_a1(fstr, base) {\n\t\trcbase = base;\n\t\treturn fstr.replace(rcregex, rcfunc);\n\t};\n})();\n\nvar crefregex = /(^|[^._A-Z0-9])([$]?)([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])([$]?)(10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5})(?![_.\\(A-Za-z0-9])/g;\nvar a1_to_rc =(function(){\n\treturn function a1_to_rc(fstr, base) {\n\t\treturn fstr.replace(crefregex, function($0, $1, $2, $3, $4, $5) {\n\t\t\tvar c = decode_col($3) - ($2 ? 0 : base.c);\n\t\t\tvar r = decode_row($5) - ($4 ? 0 : base.r);\n\t\t\tvar R = (r == 0 ? \"\" : !$4 ? \"[\" + r + \"]\" : (r+1));\n\t\t\tvar C = (c == 0 ? \"\" : !$2 ? \"[\" + c + \"]\" : (c+1));\n\t\t\treturn $1 + \"R\" + R + \"C\" + C;\n\t\t});\n\t};\n})();\n\n/* no defined name can collide with a valid cell address A1:XFD1048576 ... except LOG10! */\nfunction shift_formula_str(f, delta) {\n\treturn f.replace(crefregex, function($0, $1, $2, $3, $4, $5) {\n\t\treturn $1+($2==\"$\" ? $2+$3 : encode_col(decode_col($3)+delta.c))+($4==\"$\" ? $4+$5 : encode_row(decode_row($5) + delta.r));\n\t});\n}\n\nfunction shift_formula_xlsx(f, range, cell) {\n\tvar r = decode_range(range), s = r.s, c = decode_cell(cell);\n\tvar delta = {r:c.r - s.r, c:c.c - s.c};\n\treturn shift_formula_str(f, delta);\n}\n\n/* TODO: parse formula */\nfunction fuzzyfmla(f) {\n\tif(f.length == 1) return false;\n\treturn true;\n}\n\nfunction _xlfn(f) {\n\treturn f.replace(/_xlfn\\./g,\"\");\n}\nfunction parseread1(blob) { blob.l+=1; return; }\n\n/* [MS-XLS] 2.5.51 */\nfunction parse_ColRelU(blob, length) {\n\tvar c = blob.read_shift(length == 1 ? 1 : 2);\n\treturn [c & 0x3FFF, (c >> 14) & 1, (c >> 15) & 1];\n}\n\n/* [MS-XLS] 2.5.198.105 ; [MS-XLSB] 2.5.97.89 */\nfunction parse_RgceArea(blob, length, opts) {\n\tvar w = 2;\n\tif(opts) {\n\t\tif(opts.biff >= 2 && opts.biff <= 5) return parse_RgceArea_BIFF2(blob, length, opts);\n\t\telse if(opts.biff == 12) w = 4;\n\t}\n\tvar r=blob.read_shift(w), R=blob.read_shift(w);\n\tvar c=parse_ColRelU(blob, 2);\n\tvar C=parse_ColRelU(blob, 2);\n\treturn { s:{r:r, c:c[0], cRel:c[1], rRel:c[2]}, e:{r:R, c:C[0], cRel:C[1], rRel:C[2]} };\n}\n/* BIFF 2-5 encodes flags in the row field */\nfunction parse_RgceArea_BIFF2(blob) {\n\tvar r=parse_ColRelU(blob, 2), R=parse_ColRelU(blob, 2);\n\tvar c=blob.read_shift(1);\n\tvar C=blob.read_shift(1);\n\treturn { s:{r:r[0], c:c, cRel:r[1], rRel:r[2]}, e:{r:R[0], c:C, cRel:R[1], rRel:R[2]} };\n}\n\n/* [MS-XLS] 2.5.198.105 ; [MS-XLSB] 2.5.97.90 */\nfunction parse_RgceAreaRel(blob, length, opts) {\n\tif(opts.biff < 8) return parse_RgceArea_BIFF2(blob, length, opts);\n\tvar r=blob.read_shift(opts.biff == 12 ? 4 : 2), R=blob.read_shift(opts.biff == 12 ? 4 : 2);\n\tvar c=parse_ColRelU(blob, 2);\n\tvar C=parse_ColRelU(blob, 2);\n\treturn { s:{r:r, c:c[0], cRel:c[1], rRel:c[2]}, e:{r:R, c:C[0], cRel:C[1], rRel:C[2]} };\n}\n\n/* [MS-XLS] 2.5.198.109 ; [MS-XLSB] 2.5.97.91 */\nfunction parse_RgceLoc(blob, length, opts) {\n\tif(opts && opts.biff >= 2 && opts.biff <= 5) return parse_RgceLoc_BIFF2(blob, length, opts);\n\tvar r = blob.read_shift(opts && opts.biff == 12 ? 4 : 2);\n\tvar c = parse_ColRelU(blob, 2);\n\treturn {r:r, c:c[0], cRel:c[1], rRel:c[2]};\n}\nfunction parse_RgceLoc_BIFF2(blob) {\n\tvar r = parse_ColRelU(blob, 2);\n\tvar c = blob.read_shift(1);\n\treturn {r:r[0], c:c, cRel:r[1], rRel:r[2]};\n}\n\n/* [MS-XLS] 2.5.198.107, 2.5.47 */\nfunction parse_RgceElfLoc(blob) {\n\tvar r = blob.read_shift(2);\n\tvar c = blob.read_shift(2);\n\treturn {r:r, c:c & 0xFF, fQuoted:!!(c & 0x4000), cRel:c>>15, rRel:c>>15 };\n}\n\n/* [MS-XLS] 2.5.198.111 ; [MS-XLSB] 2.5.97.92 TODO */\nfunction parse_RgceLocRel(blob, length, opts) {\n\tvar biff = opts && opts.biff ? opts.biff : 8;\n\tif(biff >= 2 && biff <= 5) return parse_RgceLocRel_BIFF2(blob, length, opts);\n\tvar r = blob.read_shift(biff >= 12 ? 4 : 2);\n\tvar cl = blob.read_shift(2);\n\tvar cRel = (cl & 0x4000) >> 14, rRel = (cl & 0x8000) >> 15;\n\tcl &= 0x3FFF;\n\tif(rRel == 1) while(r > 0x7FFFF) r -= 0x100000;\n\tif(cRel == 1) while(cl > 0x1FFF) cl = cl - 0x4000;\n\treturn {r:r,c:cl,cRel:cRel,rRel:rRel};\n}\nfunction parse_RgceLocRel_BIFF2(blob) {\n\tvar rl = blob.read_shift(2);\n\tvar c = blob.read_shift(1);\n\tvar rRel = (rl & 0x8000) >> 15, cRel = (rl & 0x4000) >> 14;\n\trl &= 0x3FFF;\n\tif(rRel == 1 && rl >= 0x2000) rl = rl - 0x4000;\n\tif(cRel == 1 && c >= 0x80) c = c - 0x100;\n\treturn {r:rl,c:c,cRel:cRel,rRel:rRel};\n}\n\n/* [MS-XLS] 2.5.198.27 ; [MS-XLSB] 2.5.97.18 */\nfunction parse_PtgArea(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar area = parse_RgceArea(blob, opts.biff >= 2 && opts.biff <= 5 ? 6 : 8, opts);\n\treturn [type, area];\n}\n\n/* [MS-XLS] 2.5.198.28 ; [MS-XLSB] 2.5.97.19 */\nfunction parse_PtgArea3d(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar ixti = blob.read_shift(2, 'i');\n\tvar w = 8;\n\tif(opts) switch(opts.biff) {\n\t\tcase 5: blob.l += 12; w = 6; break;\n\t\tcase 12: w = 12; break;\n\t}\n\tvar area = parse_RgceArea(blob, w, opts);\n\treturn [type, ixti, area];\n}\n\n/* [MS-XLS] 2.5.198.29 ; [MS-XLSB] 2.5.97.20 */\nfunction parse_PtgAreaErr(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tblob.l += opts && (opts.biff > 8) ? 12 : (opts.biff < 8 ? 6 : 8);\n\treturn [type];\n}\n/* [MS-XLS] 2.5.198.30 ; [MS-XLSB] 2.5.97.21 */\nfunction parse_PtgAreaErr3d(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar ixti = blob.read_shift(2);\n\tvar w = 8;\n\tif(opts) switch(opts.biff) {\n\t\tcase 5: blob.l += 12; w = 6; break;\n\t\tcase 12: w = 12; break;\n\t}\n\tblob.l += w;\n\treturn [type, ixti];\n}\n\n/* [MS-XLS] 2.5.198.31 ; [MS-XLSB] 2.5.97.22 */\nfunction parse_PtgAreaN(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar area = parse_RgceAreaRel(blob, length - 1, opts);\n\treturn [type, area];\n}\n\n/* [MS-XLS] 2.5.198.32 ; [MS-XLSB] 2.5.97.23 */\nfunction parse_PtgArray(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tblob.l += opts.biff == 2 ? 6 : opts.biff == 12 ? 14 : 7;\n\treturn [type];\n}\n\n/* [MS-XLS] 2.5.198.33 ; [MS-XLSB] 2.5.97.24 */\nfunction parse_PtgAttrBaxcel(blob) {\n\tvar bitSemi = blob[blob.l+1] & 0x01; /* 1 = volatile */\n\tvar bitBaxcel = 1;\n\tblob.l += 4;\n\treturn [bitSemi, bitBaxcel];\n}\n\n/* [MS-XLS] 2.5.198.34 ; [MS-XLSB] 2.5.97.25 */\nfunction parse_PtgAttrChoose(blob, length, opts) {\n\tblob.l +=2;\n\tvar offset = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\tvar o = [];\n\t/* offset is 1 less than the number of elements */\n\tfor(var i = 0; i <= offset; ++i) o.push(blob.read_shift(opts && opts.biff == 2 ? 1 : 2));\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.198.35 ; [MS-XLSB] 2.5.97.26 */\nfunction parse_PtgAttrGoto(blob, length, opts) {\n\tvar bitGoto = (blob[blob.l+1] & 0xFF) ? 1 : 0;\n\tblob.l += 2;\n\treturn [bitGoto, blob.read_shift(opts && opts.biff == 2 ? 1 : 2)];\n}\n\n/* [MS-XLS] 2.5.198.36 ; [MS-XLSB] 2.5.97.27 */\nfunction parse_PtgAttrIf(blob, length, opts) {\n\tvar bitIf = (blob[blob.l+1] & 0xFF) ? 1 : 0;\n\tblob.l += 2;\n\treturn [bitIf, blob.read_shift(opts && opts.biff == 2 ? 1 : 2)];\n}\n\n/* [MS-XLSB] 2.5.97.28 */\nfunction parse_PtgAttrIfError(blob) {\n\tvar bitIf = (blob[blob.l+1] & 0xFF) ? 1 : 0;\n\tblob.l += 2;\n\treturn [bitIf, blob.read_shift(2)];\n}\n\n/* [MS-XLS] 2.5.198.37 ; [MS-XLSB] 2.5.97.29 */\nfunction parse_PtgAttrSemi(blob, length, opts) {\n\tvar bitSemi = (blob[blob.l+1] & 0xFF) ? 1 : 0;\n\tblob.l += opts && opts.biff == 2 ? 3 : 4;\n\treturn [bitSemi];\n}\n\n/* [MS-XLS] 2.5.198.40 ; [MS-XLSB] 2.5.97.32 */\nfunction parse_PtgAttrSpaceType(blob) {\n\tvar type = blob.read_shift(1), cch = blob.read_shift(1);\n\treturn [type, cch];\n}\n\n/* [MS-XLS] 2.5.198.38 ; [MS-XLSB] 2.5.97.30 */\nfunction parse_PtgAttrSpace(blob) {\n\tblob.read_shift(2);\n\treturn parse_PtgAttrSpaceType(blob, 2);\n}\n\n/* [MS-XLS] 2.5.198.39 ; [MS-XLSB] 2.5.97.31 */\nfunction parse_PtgAttrSpaceSemi(blob) {\n\tblob.read_shift(2);\n\treturn parse_PtgAttrSpaceType(blob, 2);\n}\n\n/* [MS-XLS] 2.5.198.84 ; [MS-XLSB] 2.5.97.68 TODO */\nfunction parse_PtgRef(blob, length, opts) {\n\t//var ptg = blob[blob.l] & 0x1F;\n\tvar type = (blob[blob.l] & 0x60)>>5;\n\tblob.l += 1;\n\tvar loc = parse_RgceLoc(blob, 0, opts);\n\treturn [type, loc];\n}\n\n/* [MS-XLS] 2.5.198.88 ; [MS-XLSB] 2.5.97.72 TODO */\nfunction parse_PtgRefN(blob, length, opts) {\n\tvar type = (blob[blob.l] & 0x60)>>5;\n\tblob.l += 1;\n\tvar loc = parse_RgceLocRel(blob, 0, opts);\n\treturn [type, loc];\n}\n\n/* [MS-XLS] 2.5.198.85 ; [MS-XLSB] 2.5.97.69 TODO */\nfunction parse_PtgRef3d(blob, length, opts) {\n\tvar type = (blob[blob.l] & 0x60)>>5;\n\tblob.l += 1;\n\tvar ixti = blob.read_shift(2); // XtiIndex\n\tif(opts && opts.biff == 5) blob.l += 12;\n\tvar loc = parse_RgceLoc(blob, 0, opts); // TODO: or RgceLocRel\n\treturn [type, ixti, loc];\n}\n\n\n/* [MS-XLS] 2.5.198.62 ; [MS-XLSB] 2.5.97.45 TODO */\nfunction parse_PtgFunc(blob, length, opts) {\n\t//var ptg = blob[blob.l] & 0x1F;\n\tvar type = (blob[blob.l] & 0x60)>>5;\n\tblob.l += 1;\n\tvar iftab = blob.read_shift(opts && opts.biff <= 3 ? 1 : 2);\n\treturn [FtabArgc[iftab], Ftab[iftab], type];\n}\n/* [MS-XLS] 2.5.198.63 ; [MS-XLSB] 2.5.97.46 TODO */\nfunction parse_PtgFuncVar(blob, length, opts) {\n\tvar type = blob[blob.l++];\n\tvar cparams = blob.read_shift(1), tab = opts && opts.biff <= 3 ? [(type == 0x58 ? -1 : 0), blob.read_shift(1)]: parsetab(blob);\n\treturn [cparams, (tab[0] === 0 ? Ftab : Cetab)[tab[1]]];\n}\n\nfunction parsetab(blob) {\n\treturn [blob[blob.l+1]>>7, blob.read_shift(2) & 0x7FFF];\n}\n\n/* [MS-XLS] 2.5.198.41 ; [MS-XLSB] 2.5.97.33 */\nfunction parse_PtgAttrSum(blob, length, opts) {\n\tblob.l += opts && opts.biff == 2 ? 3 : 4; return;\n}\n\n/* [MS-XLS] 2.5.198.58 ; [MS-XLSB] 2.5.97.40 */\nfunction parse_PtgExp(blob, length, opts) {\n\tblob.l++;\n\tif(opts && opts.biff == 12) return [blob.read_shift(4, 'i'), 0];\n\tvar row = blob.read_shift(2);\n\tvar col = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\treturn [row, col];\n}\n\n/* [MS-XLS] 2.5.198.57 ; [MS-XLSB] 2.5.97.39 */\nfunction parse_PtgErr(blob) { blob.l++; return BErr[blob.read_shift(1)]; }\n\n/* [MS-XLS] 2.5.198.66 ; [MS-XLSB] 2.5.97.49 */\nfunction parse_PtgInt(blob) { blob.l++; return blob.read_shift(2); }\n\n/* [MS-XLS] 2.5.198.42 ; [MS-XLSB] 2.5.97.34 */\nfunction parse_PtgBool(blob) { blob.l++; return blob.read_shift(1)!==0;}\n\n/* [MS-XLS] 2.5.198.79 ; [MS-XLSB] 2.5.97.63 */\nfunction parse_PtgNum(blob) { blob.l++; return parse_Xnum(blob, 8); }\n\n/* [MS-XLS] 2.5.198.89 ; [MS-XLSB] 2.5.97.74 */\nfunction parse_PtgStr(blob, length, opts) { blob.l++; return parse_ShortXLUnicodeString(blob, length-1, opts); }\n\n/* [MS-XLS] 2.5.192.112 + 2.5.192.11{3,4,5,6,7} */\n/* [MS-XLSB] 2.5.97.93 + 2.5.97.9{4,5,6,7} */\nfunction parse_SerAr(blob, biff) {\n\tvar val = [blob.read_shift(1)];\n\tif(biff == 12) switch(val[0]) {\n\t\tcase 0x02: val[0] = 0x04; break; /* SerBool */\n\t\tcase 0x04: val[0] = 0x10; break; /* SerErr */\n\t\tcase 0x00: val[0] = 0x01; break; /* SerNum */\n\t\tcase 0x01: val[0] = 0x02; break; /* SerStr */\n\t}\n\tswitch(val[0]) {\n\t\tcase 0x04: /* SerBool -- boolean */\n\t\t\tval[1] = parsebool(blob, 1) ? 'TRUE' : 'FALSE';\n\t\t\tif(biff != 12) blob.l += 7; break;\n\t\tcase 0x25: /* appears to be an alias */\n\t\tcase 0x10: /* SerErr -- error */\n\t\t\tval[1] = BErr[blob[blob.l]];\n\t\t\tblob.l += ((biff == 12) ? 4 : 8); break;\n\t\tcase 0x00: /* SerNil -- honestly, I'm not sure how to reproduce this */\n\t\t\tblob.l += 8; break;\n\t\tcase 0x01: /* SerNum -- Xnum */\n\t\t\tval[1] = parse_Xnum(blob, 8); break;\n\t\tcase 0x02: /* SerStr -- XLUnicodeString (<256 chars) */\n\t\t\tval[1] = parse_XLUnicodeString2(blob, 0, {biff:biff > 0 && biff < 8 ? 2 : biff}); break;\n\t\tdefault: throw new Error(\"Bad SerAr: \" + val[0]); /* Unreachable */\n\t}\n\treturn val;\n}\n\n/* [MS-XLS] 2.5.198.61 ; [MS-XLSB] 2.5.97.44 */\nfunction parse_PtgExtraMem(blob, cce, opts) {\n\tvar count = blob.read_shift((opts.biff == 12) ? 4 : 2);\n\tvar out = [];\n\tfor(var i = 0; i != count; ++i) out.push(((opts.biff == 12) ? parse_UncheckedRfX : parse_Ref8U)(blob, 8));\n\treturn out;\n}\n\n/* [MS-XLS] 2.5.198.59 ; [MS-XLSB] 2.5.97.41 */\nfunction parse_PtgExtraArray(blob, length, opts) {\n\tvar rows = 0, cols = 0;\n\tif(opts.biff == 12) {\n\t\trows = blob.read_shift(4); // DRw\n\t\tcols = blob.read_shift(4); // DCol\n\t} else {\n\t\tcols = 1 + blob.read_shift(1); //DColByteU\n\t\trows = 1 + blob.read_shift(2); //DRw\n\t}\n\tif(opts.biff >= 2 && opts.biff < 8) { --rows; if(--cols == 0) cols = 0x100; }\n\t// $FlowIgnore\n\tfor(var i = 0, o = []; i != rows && (o[i] = []); ++i)\n\t\tfor(var j = 0; j != cols; ++j) o[i][j] = parse_SerAr(blob, opts.biff);\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.198.76 ; [MS-XLSB] 2.5.97.60 */\nfunction parse_PtgName(blob, length, opts) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar w = (!opts || (opts.biff >= 8)) ? 4 : 2;\n\tvar nameindex = blob.read_shift(w);\n\tswitch(opts.biff) {\n\t\tcase 2: blob.l += 5; break;\n\t\tcase 3: case 4: blob.l += 8; break;\n\t\tcase 5: blob.l += 12; break;\n\t}\n\treturn [type, 0, nameindex];\n}\n\n/* [MS-XLS] 2.5.198.77 ; [MS-XLSB] 2.5.97.61 */\nfunction parse_PtgNameX(blob, length, opts) {\n\tif(opts.biff == 5) return parse_PtgNameX_BIFF5(blob, length, opts);\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar ixti = blob.read_shift(2); // XtiIndex\n\tvar nameindex = blob.read_shift(4);\n\treturn [type, ixti, nameindex];\n}\nfunction parse_PtgNameX_BIFF5(blob) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar ixti = blob.read_shift(2, 'i'); // XtiIndex\n\tblob.l += 8;\n\tvar nameindex = blob.read_shift(2);\n\tblob.l += 12;\n\treturn [type, ixti, nameindex];\n}\n\n/* [MS-XLS] 2.5.198.70 ; [MS-XLSB] 2.5.97.54 */\nfunction parse_PtgMemArea(blob, length, opts) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tblob.l += (opts && opts.biff == 2 ? 3 : 4);\n\tvar cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\treturn [type, cce];\n}\n\n/* [MS-XLS] 2.5.198.72 ; [MS-XLSB] 2.5.97.56 */\nfunction parse_PtgMemFunc(blob, length, opts) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\treturn [type, cce];\n}\n\n\n/* [MS-XLS] 2.5.198.86 ; [MS-XLSB] 2.5.97.69 */\nfunction parse_PtgRefErr(blob, length, opts) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tblob.l += 4;\n\tif(opts.biff < 8) blob.l--;\n\tif(opts.biff == 12) blob.l += 2;\n\treturn [type];\n}\n\n/* [MS-XLS] 2.5.198.87 ; [MS-XLSB] 2.5.97.71 */\nfunction parse_PtgRefErr3d(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar ixti = blob.read_shift(2);\n\tvar w = 4;\n\tif(opts) switch(opts.biff) {\n\t\tcase 5: w = 15; break;\n\t\tcase 12: w = 6; break;\n\t}\n\tblob.l += w;\n\treturn [type, ixti];\n}\n\n/* [MS-XLS] 2.5.198.71 ; [MS-XLSB] 2.5.97.55 */\nvar parse_PtgMemErr = parsenoop;\n/* [MS-XLS] 2.5.198.73 ; [MS-XLSB] 2.5.97.57 */\nvar parse_PtgMemNoMem = parsenoop;\n/* [MS-XLS] 2.5.198.92 */\nvar parse_PtgTbl = parsenoop;\n\nfunction parse_PtgElfLoc(blob, length, opts) {\n\tblob.l += 2;\n\treturn [parse_RgceElfLoc(blob, 4, opts)];\n}\nfunction parse_PtgElfNoop(blob) {\n\tblob.l += 6;\n\treturn [];\n}\n/* [MS-XLS] 2.5.198.46 */\nvar parse_PtgElfCol = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.47 */\nvar parse_PtgElfColS = parse_PtgElfNoop;\n/* [MS-XLS] 2.5.198.48 */\nvar parse_PtgElfColSV = parse_PtgElfNoop;\n/* [MS-XLS] 2.5.198.49 */\nvar parse_PtgElfColV = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.50 */\nfunction parse_PtgElfLel(blob) {\n\tblob.l += 2;\n\treturn [parseuint16(blob), blob.read_shift(2) & 0x01];\n}\n/* [MS-XLS] 2.5.198.51 */\nvar parse_PtgElfRadical = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.52 */\nvar parse_PtgElfRadicalLel = parse_PtgElfLel;\n/* [MS-XLS] 2.5.198.53 */\nvar parse_PtgElfRadicalS = parse_PtgElfNoop;\n/* [MS-XLS] 2.5.198.54 */\nvar parse_PtgElfRw = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.55 */\nvar parse_PtgElfRwV = parse_PtgElfLoc;\n\n/* [MS-XLSB] 2.5.97.52 TODO */\nvar PtgListRT = [\n\t\"Data\",\n\t\"All\",\n\t\"Headers\",\n\t\"??\",\n\t\"?Data2\",\n\t\"??\",\n\t\"?DataHeaders\",\n\t\"??\",\n\t\"Totals\",\n\t\"??\",\n\t\"??\",\n\t\"??\",\n\t\"?DataTotals\",\n\t\"??\",\n\t\"??\",\n\t\"??\",\n\t\"?Current\"\n];\nfunction parse_PtgList(blob) {\n\tblob.l += 2;\n\tvar ixti = blob.read_shift(2);\n\tvar flags = blob.read_shift(2);\n\tvar idx = blob.read_shift(4);\n\tvar c = blob.read_shift(2);\n\tvar C = blob.read_shift(2);\n\tvar rt = PtgListRT[(flags >> 2) & 0x1F];\n\treturn {ixti: ixti, coltype:(flags&0x3), rt:rt, idx:idx, c:c, C:C};\n}\n/* [MS-XLS] 2.5.198.91 ; [MS-XLSB] 2.5.97.76 */\nfunction parse_PtgSxName(blob) {\n\tblob.l += 2;\n\treturn [blob.read_shift(4)];\n}\n\n/* [XLS] old spec */\nfunction parse_PtgSheet(blob, length, opts) {\n\tblob.l += 5;\n\tblob.l += 2;\n\tblob.l += (opts.biff == 2 ? 1 : 4);\n\treturn [\"PTGSHEET\"];\n}\nfunction parse_PtgEndSheet(blob, length, opts) {\n\tblob.l += (opts.biff == 2 ? 4 : 5);\n\treturn [\"PTGENDSHEET\"];\n}\nfunction parse_PtgMemAreaN(blob) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar cce = blob.read_shift(2);\n\treturn [type, cce];\n}\nfunction parse_PtgMemNoMemN(blob) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar cce = blob.read_shift(2);\n\treturn [type, cce];\n}\nfunction parse_PtgAttrNoop(blob) {\n\tblob.l += 4;\n\treturn [0, 0];\n}\n\n/* [MS-XLS] 2.5.198.25 ; [MS-XLSB] 2.5.97.16 */\nvar PtgTypes = {\n0x01: { n:'PtgExp', f:parse_PtgExp },\n0x02: { n:'PtgTbl', f:parse_PtgTbl },\n0x03: { n:'PtgAdd', f:parseread1 },\n0x04: { n:'PtgSub', f:parseread1 },\n0x05: { n:'PtgMul', f:parseread1 },\n0x06: { n:'PtgDiv', f:parseread1 },\n0x07: { n:'PtgPower', f:parseread1 },\n0x08: { n:'PtgConcat', f:parseread1 },\n0x09: { n:'PtgLt', f:parseread1 },\n0x0A: { n:'PtgLe', f:parseread1 },\n0x0B: { n:'PtgEq', f:parseread1 },\n0x0C: { n:'PtgGe', f:parseread1 },\n0x0D: { n:'PtgGt', f:parseread1 },\n0x0E: { n:'PtgNe', f:parseread1 },\n0x0F: { n:'PtgIsect', f:parseread1 },\n0x10: { n:'PtgUnion', f:parseread1 },\n0x11: { n:'PtgRange', f:parseread1 },\n0x12: { n:'PtgUplus', f:parseread1 },\n0x13: { n:'PtgUminus', f:parseread1 },\n0x14: { n:'PtgPercent', f:parseread1 },\n0x15: { n:'PtgParen', f:parseread1 },\n0x16: { n:'PtgMissArg', f:parseread1 },\n0x17: { n:'PtgStr', f:parse_PtgStr },\n0x1A: { n:'PtgSheet', f:parse_PtgSheet },\n0x1B: { n:'PtgEndSheet', f:parse_PtgEndSheet },\n0x1C: { n:'PtgErr', f:parse_PtgErr },\n0x1D: { n:'PtgBool', f:parse_PtgBool },\n0x1E: { n:'PtgInt', f:parse_PtgInt },\n0x1F: { n:'PtgNum', f:parse_PtgNum },\n0x20: { n:'PtgArray', f:parse_PtgArray },\n0x21: { n:'PtgFunc', f:parse_PtgFunc },\n0x22: { n:'PtgFuncVar', f:parse_PtgFuncVar },\n0x23: { n:'PtgName', f:parse_PtgName },\n0x24: { n:'PtgRef', f:parse_PtgRef },\n0x25: { n:'PtgArea', f:parse_PtgArea },\n0x26: { n:'PtgMemArea', f:parse_PtgMemArea },\n0x27: { n:'PtgMemErr', f:parse_PtgMemErr },\n0x28: { n:'PtgMemNoMem', f:parse_PtgMemNoMem },\n0x29: { n:'PtgMemFunc', f:parse_PtgMemFunc },\n0x2A: { n:'PtgRefErr', f:parse_PtgRefErr },\n0x2B: { n:'PtgAreaErr', f:parse_PtgAreaErr },\n0x2C: { n:'PtgRefN', f:parse_PtgRefN },\n0x2D: { n:'PtgAreaN', f:parse_PtgAreaN },\n0x2E: { n:'PtgMemAreaN', f:parse_PtgMemAreaN },\n0x2F: { n:'PtgMemNoMemN', f:parse_PtgMemNoMemN },\n0x39: { n:'PtgNameX', f:parse_PtgNameX },\n0x3A: { n:'PtgRef3d', f:parse_PtgRef3d },\n0x3B: { n:'PtgArea3d', f:parse_PtgArea3d },\n0x3C: { n:'PtgRefErr3d', f:parse_PtgRefErr3d },\n0x3D: { n:'PtgAreaErr3d', f:parse_PtgAreaErr3d },\n0xFF: {}\n};\n/* These are duplicated in the PtgTypes table */\nvar PtgDupes = {\n0x40: 0x20, 0x60: 0x20,\n0x41: 0x21, 0x61: 0x21,\n0x42: 0x22, 0x62: 0x22,\n0x43: 0x23, 0x63: 0x23,\n0x44: 0x24, 0x64: 0x24,\n0x45: 0x25, 0x65: 0x25,\n0x46: 0x26, 0x66: 0x26,\n0x47: 0x27, 0x67: 0x27,\n0x48: 0x28, 0x68: 0x28,\n0x49: 0x29, 0x69: 0x29,\n0x4A: 0x2A, 0x6A: 0x2A,\n0x4B: 0x2B, 0x6B: 0x2B,\n0x4C: 0x2C, 0x6C: 0x2C,\n0x4D: 0x2D, 0x6D: 0x2D,\n0x4E: 0x2E, 0x6E: 0x2E,\n0x4F: 0x2F, 0x6F: 0x2F,\n0x58: 0x22, 0x78: 0x22,\n0x59: 0x39, 0x79: 0x39,\n0x5A: 0x3A, 0x7A: 0x3A,\n0x5B: 0x3B, 0x7B: 0x3B,\n0x5C: 0x3C, 0x7C: 0x3C,\n0x5D: 0x3D, 0x7D: 0x3D\n};\n(function(){for(var y in PtgDupes) PtgTypes[y] = PtgTypes[PtgDupes[y]];})();\n\nvar Ptg18 = {\n0x01: { n:'PtgElfLel', f:parse_PtgElfLel },\n0x02: { n:'PtgElfRw', f:parse_PtgElfRw },\n0x03: { n:'PtgElfCol', f:parse_PtgElfCol },\n0x06: { n:'PtgElfRwV', f:parse_PtgElfRwV },\n0x07: { n:'PtgElfColV', f:parse_PtgElfColV },\n0x0A: { n:'PtgElfRadical', f:parse_PtgElfRadical },\n0x0B: { n:'PtgElfRadicalS', f:parse_PtgElfRadicalS },\n0x0D: { n:'PtgElfColS', f:parse_PtgElfColS },\n0x0F: { n:'PtgElfColSV', f:parse_PtgElfColSV },\n0x10: { n:'PtgElfRadicalLel', f:parse_PtgElfRadicalLel },\n0x19: { n:'PtgList', f:parse_PtgList },\n0x1D: { n:'PtgSxName', f:parse_PtgSxName },\n0xFF: {}\n};\nvar Ptg19 = {\n0x00: { n:'PtgAttrNoop', f:parse_PtgAttrNoop },\n0x01: { n:'PtgAttrSemi', f:parse_PtgAttrSemi },\n0x02: { n:'PtgAttrIf', f:parse_PtgAttrIf },\n0x04: { n:'PtgAttrChoose', f:parse_PtgAttrChoose },\n0x08: { n:'PtgAttrGoto', f:parse_PtgAttrGoto },\n0x10: { n:'PtgAttrSum', f:parse_PtgAttrSum },\n0x20: { n:'PtgAttrBaxcel', f:parse_PtgAttrBaxcel },\n0x40: { n:'PtgAttrSpace', f:parse_PtgAttrSpace },\n0x41: { n:'PtgAttrSpaceSemi', f:parse_PtgAttrSpaceSemi },\n0x80: { n:'PtgAttrIfError', f:parse_PtgAttrIfError },\n0xFF: {}\n};\nPtg19[0x21] = Ptg19[0x20];\n\n/* [MS-XLS] 2.5.198.103 ; [MS-XLSB] 2.5.97.87 */\nfunction parse_RgbExtra(blob, length, rgce, opts) {\n\tif(opts.biff < 8) return parsenoop(blob, length);\n\tvar target = blob.l + length;\n\tvar o = [];\n\tfor(var i = 0; i !== rgce.length; ++i) {\n\t\tswitch(rgce[i][0]) {\n\t\t\tcase 'PtgArray': /* PtgArray -> PtgExtraArray */\n\t\t\t\trgce[i][1] = parse_PtgExtraArray(blob, 0, opts);\n\t\t\t\to.push(rgce[i][1]);\n\t\t\t\tbreak;\n\t\t\tcase 'PtgMemArea': /* PtgMemArea -> PtgExtraMem */\n\t\t\t\trgce[i][2] = parse_PtgExtraMem(blob, rgce[i][1], opts);\n\t\t\t\to.push(rgce[i][2]);\n\t\t\t\tbreak;\n\t\t\tcase 'PtgExp': /* PtgExp -> PtgExtraCol */\n\t\t\t\tif(opts && opts.biff == 12) {\n\t\t\t\t\trgce[i][1][1] = blob.read_shift(4);\n\t\t\t\t\to.push(rgce[i][1]);\n\t\t\t\t} break;\n\t\t\tcase 'PtgList': /* TODO: PtgList -> PtgExtraList */\n\t\t\tcase 'PtgElfRadicalS': /* TODO: PtgElfRadicalS -> PtgExtraElf */\n\t\t\tcase 'PtgElfColS': /* TODO: PtgElfColS -> PtgExtraElf */\n\t\t\tcase 'PtgElfColSV': /* TODO: PtgElfColSV -> PtgExtraElf */\n\t\t\t\tthrow \"Unsupported \" + rgce[i][0];\n\t\t\tdefault: break;\n\t\t}\n\t}\n\tlength = target - blob.l;\n\t/* note: this is technically an error but Excel disregards */\n\t//if(target !== blob.l && blob.l !== target - length) throw new Error(target + \" != \" + blob.l);\n\tif(length !== 0) o.push(parsenoop(blob, length));\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.198.104 ; [MS-XLSB] 2.5.97.88 */\nfunction parse_Rgce(blob, length, opts) {\n\tvar target = blob.l + length;\n\tvar R, id, ptgs = [];\n\twhile(target != blob.l) {\n\t\tlength = target - blob.l;\n\t\tid = blob[blob.l];\n\t\tR = PtgTypes[id];\n\t\tif(id === 0x18 || id === 0x19) R = (id === 0x18 ? Ptg18 : Ptg19)[blob[blob.l + 1]];\n\t\tif(!R || !R.f) { /*ptgs.push*/(parsenoop(blob, length)); }\n\t\telse { ptgs.push([R.n, R.f(blob, length, opts)]); }\n\t}\n\treturn ptgs;\n}\n\nfunction stringify_array(f) {\n\tvar o = [];\n\tfor(var i = 0; i < f.length; ++i) {\n\t\tvar x = f[i], r = [];\n\t\tfor(var j = 0; j < x.length; ++j) {\n\t\t\tvar y = x[j];\n\t\t\tif(y) switch(y[0]) {\n\t\t\t\t// TODO: handle embedded quotes\n\t\t\t\tcase 0x02:\nr.push('\"' + y[1].replace(/\"/g,'\"\"') + '\"'); break;\n\t\t\t\tdefault: r.push(y[1]);\n\t\t\t} else r.push(\"\");\n\t\t}\n\t\to.push(r.join(\",\"));\n\t}\n\treturn o.join(\";\");\n}\n\n/* [MS-XLS] 2.2.2 ; [MS-XLSB] 2.2.2 TODO */\nvar PtgBinOp = {\n\tPtgAdd: \"+\",\n\tPtgConcat: \"&\",\n\tPtgDiv: \"/\",\n\tPtgEq: \"=\",\n\tPtgGe: \">=\",\n\tPtgGt: \">\",\n\tPtgLe: \"<=\",\n\tPtgLt: \"<\",\n\tPtgMul: \"*\",\n\tPtgNe: \"<>\",\n\tPtgPower: \"^\",\n\tPtgSub: \"-\"\n};\n\n// List of invalid characters needs to be tested further\nvar quoteCharacters = new RegExp(/[^\\w\\u4E00-\\u9FFF\\u3040-\\u30FF]/);\nfunction formula_quote_sheet_name(sname, opts) {\n\tif(!sname && !(opts && opts.biff <= 5 && opts.biff >= 2)) throw new Error(\"empty sheet name\");\n\tif (quoteCharacters.test(sname)) return \"'\" + sname + \"'\";\n\treturn sname;\n}\nfunction get_ixti_raw(supbooks, ixti, opts) {\n\tif(!supbooks) return \"SH33TJSERR0\";\n\tif(opts.biff > 8 && (!supbooks.XTI || !supbooks.XTI[ixti])) return supbooks.SheetNames[ixti];\n\tif(!supbooks.XTI) return \"SH33TJSERR6\";\n\tvar XTI = supbooks.XTI[ixti];\n\tif(opts.biff < 8) {\n\t\tif(ixti > 10000) ixti-= 65536;\n\t\tif(ixti < 0) ixti = -ixti;\n\t\treturn ixti == 0 ? \"\" : supbooks.XTI[ixti - 1];\n\t}\n\tif(!XTI) return \"SH33TJSERR1\";\n\tvar o = \"\";\n\tif(opts.biff > 8) switch(supbooks[XTI[0]][0]) {\n\t\tcase 0x0165: /* 'BrtSupSelf' */\n\t\t\to = XTI[1] == -1 ? \"#REF\" : supbooks.SheetNames[XTI[1]];\n\t\t\treturn XTI[1] == XTI[2] ? o : o + \":\" + supbooks.SheetNames[XTI[2]];\n\t\tcase 0x0166: /* 'BrtSupSame' */\n\t\t\tif(opts.SID != null) return supbooks.SheetNames[opts.SID];\n\t\t\treturn \"SH33TJSSAME\" + supbooks[XTI[0]][0];\n\t\tcase 0x0163: /* 'BrtSupBookSrc' */\n\t\t\t/* falls through */\n\t\tdefault: return \"SH33TJSSRC\" + supbooks[XTI[0]][0];\n\t}\n\tswitch(supbooks[XTI[0]][0][0]) {\n\t\tcase 0x0401:\n\t\t\to = XTI[1] == -1 ? \"#REF\" : (supbooks.SheetNames[XTI[1]] || \"SH33TJSERR3\");\n\t\t\treturn XTI[1] == XTI[2] ? o : o + \":\" + supbooks.SheetNames[XTI[2]];\n\t\tcase 0x3A01: return supbooks[XTI[0]].slice(1).map(function(name) { return name.Name; }).join(\";;\"); //return \"SH33TJSERR8\";\n\t\tdefault:\n\t\t\tif(!supbooks[XTI[0]][0][3]) return \"SH33TJSERR2\";\n\t\t\to = XTI[1] == -1 ? \"#REF\" : (supbooks[XTI[0]][0][3][XTI[1]] || \"SH33TJSERR4\");\n\t\t\treturn XTI[1] == XTI[2] ? o : o + \":\" + supbooks[XTI[0]][0][3][XTI[2]];\n\t}\n}\nfunction get_ixti(supbooks, ixti, opts) {\n\treturn formula_quote_sheet_name(get_ixti_raw(supbooks, ixti, opts), opts);\n}\nfunction stringify_formula(formula/*Array*/, range, cell, supbooks, opts) {\n\tvar biff = (opts && opts.biff) || 8;\n\tvar _range = /*range != null ? range :*/ {s:{c:0, r:0},e:{c:0, r:0}};\n\tvar stack = [], e1, e2, c, ixti=0, nameidx=0, r, sname=\"\";\n\tif(!formula[0] || !formula[0][0]) return \"\";\n\tvar last_sp = -1, sp = \"\";\n\tfor(var ff = 0, fflen = formula[0].length; ff < fflen; ++ff) {\n\t\tvar f = formula[0][ff];\n\t\tswitch(f[0]) {\n\t\t\tcase 'PtgUminus': /* [MS-XLS] 2.5.198.93 */\n\t\t\t\tstack.push(\"-\" + stack.pop()); break;\n\t\t\tcase 'PtgUplus': /* [MS-XLS] 2.5.198.95 */\n\t\t\t\tstack.push(\"+\" + stack.pop()); break;\n\t\t\tcase 'PtgPercent': /* [MS-XLS] 2.5.198.81 */\n\t\t\t\tstack.push(stack.pop() + \"%\"); break;\n\n\t\t\tcase 'PtgAdd': /* [MS-XLS] 2.5.198.26 */\n\t\t\tcase 'PtgConcat': /* [MS-XLS] 2.5.198.43 */\n\t\t\tcase 'PtgDiv': /* [MS-XLS] 2.5.198.45 */\n\t\t\tcase 'PtgEq': /* [MS-XLS] 2.5.198.56 */\n\t\t\tcase 'PtgGe': /* [MS-XLS] 2.5.198.64 */\n\t\t\tcase 'PtgGt': /* [MS-XLS] 2.5.198.65 */\n\t\t\tcase 'PtgLe': /* [MS-XLS] 2.5.198.68 */\n\t\t\tcase 'PtgLt': /* [MS-XLS] 2.5.198.69 */\n\t\t\tcase 'PtgMul': /* [MS-XLS] 2.5.198.75 */\n\t\t\tcase 'PtgNe': /* [MS-XLS] 2.5.198.78 */\n\t\t\tcase 'PtgPower': /* [MS-XLS] 2.5.198.82 */\n\t\t\tcase 'PtgSub': /* [MS-XLS] 2.5.198.90 */\n\t\t\t\te1 = stack.pop(); e2 = stack.pop();\n\t\t\t\tif(last_sp >= 0) {\n\t\t\t\t\tswitch(formula[0][last_sp][1][0]) {\n\t\t\t\t\t\tcase 0:\n\t\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\t\tsp = fill(\" \", formula[0][last_sp][1][1]); break;\n\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\t\tsp = fill(\"\\r\", formula[0][last_sp][1][1]); break;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tsp = \"\";\n\t\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\t\tif(opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + formula[0][last_sp][1][0]);\n\t\t\t\t\t}\n\t\t\t\t\te2 = e2 + sp;\n\t\t\t\t\tlast_sp = -1;\n\t\t\t\t}\n\t\t\t\tstack.push(e2+PtgBinOp[f[0]]+e1);\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgIsect': /* [MS-XLS] 2.5.198.67 */\n\t\t\t\te1 = stack.pop(); e2 = stack.pop();\n\t\t\t\tstack.push(e2+\" \"+e1);\n\t\t\t\tbreak;\n\t\t\tcase 'PtgUnion': /* [MS-XLS] 2.5.198.94 */\n\t\t\t\te1 = stack.pop(); e2 = stack.pop();\n\t\t\t\tstack.push(e2+\",\"+e1);\n\t\t\t\tbreak;\n\t\t\tcase 'PtgRange': /* [MS-XLS] 2.5.198.83 */\n\t\t\t\te1 = stack.pop(); e2 = stack.pop();\n\t\t\t\tstack.push(e2+\":\"+e1);\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgAttrChoose': /* [MS-XLS] 2.5.198.34 */\n\t\t\t\tbreak;\n\t\t\tcase 'PtgAttrGoto': /* [MS-XLS] 2.5.198.35 */\n\t\t\t\tbreak;\n\t\t\tcase 'PtgAttrIf': /* [MS-XLS] 2.5.198.36 */\n\t\t\t\tbreak;\n\t\t\tcase 'PtgAttrIfError': /* [MS-XLSB] 2.5.97.28 */\n\t\t\t\tbreak;\n\n\n\t\t\tcase 'PtgRef': /* [MS-XLS] 2.5.198.84 */\nc = shift_cell_xls((f[1][1]), _range, opts);\n\t\t\t\tstack.push(encode_cell_xls(c, biff));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgRefN': /* [MS-XLS] 2.5.198.88 */\nc = cell ? shift_cell_xls((f[1][1]), cell, opts) : (f[1][1]);\n\t\t\t\tstack.push(encode_cell_xls(c, biff));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgRef3d': /* [MS-XLS] 2.5.198.85 */\nixti = f[1][1]; c = shift_cell_xls((f[1][2]), _range, opts);\n\t\t\t\tsname = get_ixti(supbooks, ixti, opts);\n\t\t\t\tvar w = sname; /* IE9 fails on defined names */ // eslint-disable-line no-unused-vars\n\t\t\t\tstack.push(sname + \"!\" + encode_cell_xls(c, biff));\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgFunc': /* [MS-XLS] 2.5.198.62 */\n\t\t\tcase 'PtgFuncVar': /* [MS-XLS] 2.5.198.63 */\n\t\t\t\t/* f[1] = [argc, func, type] */\n\t\t\t\tvar argc = (f[1][0]), func = (f[1][1]);\n\t\t\t\tif(!argc) argc = 0;\n\t\t\t\targc &= 0x7F;\n\t\t\t\tvar args = argc == 0 ? [] : stack.slice(-argc);\n\t\t\t\tstack.length -= argc;\n\t\t\t\tif(func === 'User') func = args.shift();\n\t\t\t\tstack.push(func + \"(\" + args.join(\",\") + \")\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgBool': /* [MS-XLS] 2.5.198.42 */\n\t\t\t\tstack.push(f[1] ? \"TRUE\" : \"FALSE\"); break;\n\t\t\tcase 'PtgInt': /* [MS-XLS] 2.5.198.66 */\n\t\t\t\tstack.push(f[1]); break;\n\t\t\tcase 'PtgNum': /* [MS-XLS] 2.5.198.79 TODO: precision? */\n\t\t\t\tstack.push(String(f[1])); break;\n\t\t\tcase 'PtgStr': /* [MS-XLS] 2.5.198.89 */\n\t\t\t\t// $FlowIgnore\n\t\t\t\tstack.push('\"' + f[1].replace(/\"/g, '\"\"') + '\"'); break;\n\t\t\tcase 'PtgErr': /* [MS-XLS] 2.5.198.57 */\n\t\t\t\tstack.push(f[1]); break;\n\t\t\tcase 'PtgAreaN': /* [MS-XLS] 2.5.198.31 TODO */\nr = shift_range_xls(f[1][1], cell ? {s:cell} : _range, opts);\n\t\t\t\tstack.push(encode_range_xls((r), opts));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgArea': /* [MS-XLS] 2.5.198.27 TODO: fixed points */\nr = shift_range_xls(f[1][1], _range, opts);\n\t\t\t\tstack.push(encode_range_xls((r), opts));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgArea3d': /* [MS-XLS] 2.5.198.28 TODO */\nixti = f[1][1]; r = f[1][2];\n\t\t\t\tsname = get_ixti(supbooks, ixti, opts);\n\t\t\t\tstack.push(sname + \"!\" + encode_range_xls((r), opts));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgAttrSum': /* [MS-XLS] 2.5.198.41 */\n\t\t\t\tstack.push(\"SUM(\" + stack.pop() + \")\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgAttrBaxcel': /* [MS-XLS] 2.5.198.33 */\n\t\t\tcase 'PtgAttrSemi': /* [MS-XLS] 2.5.198.37 */\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgName': /* [MS-XLS] 2.5.198.76 ; [MS-XLSB] 2.5.97.60 TODO: revisions */\n\t\t\t\t/* f[1] = type, 0, nameindex */\n\t\t\t\tnameidx = (f[1][2]);\n\t\t\t\tvar lbl = (supbooks.names||[])[nameidx-1] || (supbooks[0]||[])[nameidx];\n\t\t\t\tvar name = lbl ? lbl.Name : \"SH33TJSNAME\" + String(nameidx);\n\t\t\t\tif(name in XLSXFutureFunctions) name = XLSXFutureFunctions[name];\n\t\t\t\tstack.push(name);\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgNameX': /* [MS-XLS] 2.5.198.77 ; [MS-XLSB] 2.5.97.61 TODO: revisions */\n\t\t\t\t/* f[1] = type, ixti, nameindex */\n\t\t\t\tvar bookidx = (f[1][1]); nameidx = (f[1][2]); var externbook;\n\t\t\t\t/* TODO: Properly handle missing values -- this should be using get_ixti_raw primarily */\n\t\t\t\tif(opts.biff <= 5) {\n\t\t\t\t\tif(bookidx < 0) bookidx = -bookidx;\n\t\t\t\t\tif(supbooks[bookidx]) externbook = supbooks[bookidx][nameidx];\n\t\t\t\t} else {\n\t\t\t\t\tvar o = \"\";\n\t\t\t\t\tif(((supbooks[bookidx]||[])[0]||[])[0] == 0x3A01){/* empty */}\n\t\t\t\t\telse if(((supbooks[bookidx]||[])[0]||[])[0] == 0x0401){\n\t\t\t\t\t\tif(supbooks[bookidx][nameidx] && supbooks[bookidx][nameidx].itab > 0) {\n\t\t\t\t\t\t\to = supbooks.SheetNames[supbooks[bookidx][nameidx].itab-1] + \"!\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse o = supbooks.SheetNames[nameidx-1]+ \"!\";\n\t\t\t\t\tif(supbooks[bookidx] && supbooks[bookidx][nameidx]) o += supbooks[bookidx][nameidx].Name;\n\t\t\t\t\telse if(supbooks[0] && supbooks[0][nameidx]) o += supbooks[0][nameidx].Name;\n\t\t\t\t\telse {\n\t\t\t\t\t\tvar ixtidata = get_ixti_raw(supbooks, bookidx, opts).split(\";;\");\n\t\t\t\t\t\tif(ixtidata[nameidx - 1]) o = ixtidata[nameidx - 1]; // TODO: confirm this is correct\n\t\t\t\t\t\telse o += \"SH33TJSERRX\";\n\t\t\t\t\t}\n\t\t\t\t\tstack.push(o);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif(!externbook) externbook = {Name: \"SH33TJSERRY\"};\n\t\t\t\tstack.push(externbook.Name);\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgParen': /* [MS-XLS] 2.5.198.80 */\n\t\t\t\tvar lp = '(', rp = ')';\n\t\t\t\tif(last_sp >= 0) {\n\t\t\t\t\tsp = \"\";\n\t\t\t\t\tswitch(formula[0][last_sp][1][0]) {\n\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\tcase 2: lp = fill(\" \", formula[0][last_sp][1][1]) + lp; break;\n\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\tcase 3: lp = fill(\"\\r\", formula[0][last_sp][1][1]) + lp; break;\n\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\tcase 4: rp = fill(\" \", formula[0][last_sp][1][1]) + rp; break;\n\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\tcase 5: rp = fill(\"\\r\", formula[0][last_sp][1][1]) + rp; break;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\t\tif(opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + formula[0][last_sp][1][0]);\n\t\t\t\t\t}\n\t\t\t\t\tlast_sp = -1;\n\t\t\t\t}\n\t\t\t\tstack.push(lp + stack.pop() + rp); break;\n\n\t\t\tcase 'PtgRefErr': /* [MS-XLS] 2.5.198.86 */\n\t\t\t\tstack.push('#REF!'); break;\n\n\t\t\tcase 'PtgRefErr3d': /* [MS-XLS] 2.5.198.87 */\n\t\t\t\tstack.push('#REF!'); break;\n\n\t\t\tcase 'PtgExp': /* [MS-XLS] 2.5.198.58 TODO */\n\t\t\t\tc = {c:(f[1][1]),r:(f[1][0])};\n\t\t\t\tvar q = ({c: cell.c, r:cell.r});\n\t\t\t\tif(supbooks.sharedf[encode_cell(c)]) {\n\t\t\t\t\tvar parsedf = (supbooks.sharedf[encode_cell(c)]);\n\t\t\t\t\tstack.push(stringify_formula(parsedf, _range, q, supbooks, opts));\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tvar fnd = false;\n\t\t\t\t\tfor(e1=0;e1!=supbooks.arrayf.length; ++e1) {\n\t\t\t\t\t\t/* TODO: should be something like range_has */\n\t\t\t\t\t\te2 = supbooks.arrayf[e1];\n\t\t\t\t\t\tif(c.c < e2[0].s.c || c.c > e2[0].e.c) continue;\n\t\t\t\t\t\tif(c.r < e2[0].s.r || c.r > e2[0].e.r) continue;\n\t\t\t\t\t\tstack.push(stringify_formula(e2[1], _range, q, supbooks, opts));\n\t\t\t\t\t\tfnd = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif(!fnd) stack.push(f[1]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgArray': /* [MS-XLS] 2.5.198.32 TODO */\n\t\t\t\tstack.push(\"{\" + stringify_array(f[1]) + \"}\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMemArea': /* [MS-XLS] 2.5.198.70 TODO: confirm this is a non-display */\n\t\t\t\t//stack.push(\"(\" + f[2].map(encode_range).join(\",\") + \")\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgAttrSpace': /* [MS-XLS] 2.5.198.38 */\n\t\t\tcase 'PtgAttrSpaceSemi': /* [MS-XLS] 2.5.198.39 */\n\t\t\t\tlast_sp = ff;\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgTbl': /* [MS-XLS] 2.5.198.92 TODO */\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMemErr': /* [MS-XLS] 2.5.198.71 */\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMissArg': /* [MS-XLS] 2.5.198.74 */\n\t\t\t\tstack.push(\"\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgAreaErr': /* [MS-XLS] 2.5.198.29 */\n\t\t\t\tstack.push(\"#REF!\"); break;\n\n\t\t\tcase 'PtgAreaErr3d': /* [MS-XLS] 2.5.198.30 */\n\t\t\t\tstack.push(\"#REF!\"); break;\n\n\t\t\tcase 'PtgList': /* [MS-XLSB] 2.5.97.52 */\n\t\t\t\t// $FlowIgnore\n\t\t\t\tstack.push(\"Table\" + f[1].idx + \"[#\" + f[1].rt + \"]\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMemAreaN':\n\t\t\tcase 'PtgMemNoMemN':\n\t\t\tcase 'PtgAttrNoop':\n\t\t\tcase 'PtgSheet':\n\t\t\tcase 'PtgEndSheet':\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMemFunc': /* [MS-XLS] 2.5.198.72 TODO */\n\t\t\t\tbreak;\n\t\t\tcase 'PtgMemNoMem': /* [MS-XLS] 2.5.198.73 TODO */\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgElfCol': /* [MS-XLS] 2.5.198.46 */\n\t\t\tcase 'PtgElfColS': /* [MS-XLS] 2.5.198.47 */\n\t\t\tcase 'PtgElfColSV': /* [MS-XLS] 2.5.198.48 */\n\t\t\tcase 'PtgElfColV': /* [MS-XLS] 2.5.198.49 */\n\t\t\tcase 'PtgElfLel': /* [MS-XLS] 2.5.198.50 */\n\t\t\tcase 'PtgElfRadical': /* [MS-XLS] 2.5.198.51 */\n\t\t\tcase 'PtgElfRadicalLel': /* [MS-XLS] 2.5.198.52 */\n\t\t\tcase 'PtgElfRadicalS': /* [MS-XLS] 2.5.198.53 */\n\t\t\tcase 'PtgElfRw': /* [MS-XLS] 2.5.198.54 */\n\t\t\tcase 'PtgElfRwV': /* [MS-XLS] 2.5.198.55 */\n\t\t\t\tthrow new Error(\"Unsupported ELFs\");\n\n\t\t\tcase 'PtgSxName': /* [MS-XLS] 2.5.198.91 TODO -- find a test case */\n\t\t\t\tthrow new Error('Unrecognized Formula Token: ' + String(f));\n\t\t\tdefault: throw new Error('Unrecognized Formula Token: ' + String(f));\n\t\t}\n\t\tvar PtgNonDisp = ['PtgAttrSpace', 'PtgAttrSpaceSemi', 'PtgAttrGoto'];\n\t\tif(opts.biff != 3) if(last_sp >= 0 && PtgNonDisp.indexOf(formula[0][ff][0]) == -1) {\n\t\t\tf = formula[0][last_sp];\n\t\t\tvar _left = true;\n\t\t\tswitch(f[1][0]) {\n\t\t\t\t/* note: some bad XLSB files omit the PtgParen */\n\t\t\t\tcase 4: _left = false;\n\t\t\t\t/* falls through */\n\t\t\t\tcase 0:\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tsp = fill(\" \", f[1][1]); break;\n\t\t\t\tcase 5: _left = false;\n\t\t\t\t/* falls through */\n\t\t\t\tcase 1:\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tsp = fill(\"\\r\", f[1][1]); break;\n\t\t\t\tdefault:\n\t\t\t\t\tsp = \"\";\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tif(opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + f[1][0]);\n\t\t\t}\n\t\t\tstack.push((_left ? sp : \"\") + stack.pop() + (_left ? \"\" : sp));\n\t\t\tlast_sp = -1;\n\t\t}\n\t}\n\tif(stack.length > 1 && opts.WTF) throw new Error(\"bad formula stack\");\n\treturn stack[0];\n}\n\n/* [MS-XLS] 2.5.198.1 TODO */\nfunction parse_ArrayParsedFormula(blob, length, opts) {\n\tvar target = blob.l + length, len = opts.biff == 2 ? 1 : 2;\n\tvar rgcb, cce = blob.read_shift(len); // length of rgce\n\tif(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];\n\tvar rgce = parse_Rgce(blob, cce, opts);\n\tif(length !== cce + len) rgcb = parse_RgbExtra(blob, length - cce - len, rgce, opts);\n\tblob.l = target;\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLS] 2.5.198.3 TODO */\nfunction parse_XLSCellParsedFormula(blob, length, opts) {\n\tvar target = blob.l + length, len = opts.biff == 2 ? 1 : 2;\n\tvar rgcb, cce = blob.read_shift(len); // length of rgce\n\tif(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];\n\tvar rgce = parse_Rgce(blob, cce, opts);\n\tif(length !== cce + len) rgcb = parse_RgbExtra(blob, length - cce - len, rgce, opts);\n\tblob.l = target;\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLS] 2.5.198.21 */\nfunction parse_NameParsedFormula(blob, length, opts, cce) {\n\tvar target = blob.l + length;\n\tvar rgce = parse_Rgce(blob, cce, opts);\n\tvar rgcb;\n\tif(target !== blob.l) rgcb = parse_RgbExtra(blob, target - blob.l, rgce, opts);\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLS] 2.5.198.118 TODO */\nfunction parse_SharedParsedFormula(blob, length, opts) {\n\tvar target = blob.l + length;\n\tvar rgcb, cce = blob.read_shift(2); // length of rgce\n\tvar rgce = parse_Rgce(blob, cce, opts);\n\tif(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];\n\tif(length !== cce + 2) rgcb = parse_RgbExtra(blob, target - cce - 2, rgce, opts);\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLS] 2.5.133 TODO: how to emit empty strings? */\nfunction parse_FormulaValue(blob) {\n\tvar b;\n\tif(__readUInt16LE(blob,blob.l + 6) !== 0xFFFF) return [parse_Xnum(blob),'n'];\n\tswitch(blob[blob.l]) {\n\t\tcase 0x00: blob.l += 8; return [\"String\", 's'];\n\t\tcase 0x01: b = blob[blob.l+2] === 0x1; blob.l += 8; return [b,'b'];\n\t\tcase 0x02: b = blob[blob.l+2]; blob.l += 8; return [b,'e'];\n\t\tcase 0x03: blob.l += 8; return [\"\",'s'];\n\t}\n\treturn [];\n}\nfunction write_FormulaValue(value) {\n\tif(value == null) {\n\t\t// Blank String Value\n\t\tvar o = new_buf(8);\n\t\to.write_shift(1, 0x03);\n\t\to.write_shift(1, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0xFFFF);\n\t\treturn o;\n\t} else if(typeof value == \"number\") return write_Xnum(value);\n\treturn write_Xnum(0);\n}\n\n/* [MS-XLS] 2.4.127 TODO */\nfunction parse_Formula(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar cell = parse_XLSCell(blob, 6);\n\tif(opts.biff == 2) ++blob.l;\n\tvar val = parse_FormulaValue(blob,8);\n\tvar flags = blob.read_shift(1);\n\tif(opts.biff != 2) {\n\t\tblob.read_shift(1);\n\t\tif(opts.biff >= 5) {\n\t\t\t/*var chn = */blob.read_shift(4);\n\t\t}\n\t}\n\tvar cbf = parse_XLSCellParsedFormula(blob, end - blob.l, opts);\n\treturn {cell:cell, val:val[0], formula:cbf, shared: (flags >> 3) & 1, tt:val[1]};\n}\nfunction write_Formula(cell, R, C, opts, os) {\n\t// Cell\n\tvar o1 = write_XLSCell(R, C, os);\n\n\t// FormulaValue\n\tvar o2 = write_FormulaValue(cell.v);\n\n\t// flags + cache\n\tvar o3 = new_buf(6);\n\tvar flags = 0x01 | 0x20;\n\to3.write_shift(2, flags);\n\to3.write_shift(4, 0);\n\n\t// CellParsedFormula\n\tvar bf = new_buf(cell.bf.length);\n\tfor(var i = 0; i < cell.bf.length; ++i) bf[i] = cell.bf[i];\n\n\tvar out = bconcat([o1, o2, o3, bf]);\n\treturn out;\n}\n\n\n/* XLSB Parsed Formula records have the same shape */\nfunction parse_XLSBParsedFormula(data, length, opts) {\n\tvar cce = data.read_shift(4);\n\tvar rgce = parse_Rgce(data, cce, opts);\n\tvar cb = data.read_shift(4);\n\tvar rgcb = cb > 0 ? parse_RgbExtra(data, cb, rgce, opts) : null;\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLSB] 2.5.97.1 ArrayParsedFormula */\nvar parse_XLSBArrayParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.4 CellParsedFormula */\nvar parse_XLSBCellParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.8 DVParsedFormula */\n//var parse_XLSBDVParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.9 FRTParsedFormula */\n//var parse_XLSBFRTParsedFormula = parse_XLSBParsedFormula2;\n/* [MS-XLSB] 2.5.97.12 NameParsedFormula */\nvar parse_XLSBNameParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.98 SharedParsedFormula */\nvar parse_XLSBSharedParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLS] 2.5.198.4 */\nvar Cetab = {\n0x0000: 'BEEP',\n0x0001: 'OPEN',\n0x0002: 'OPEN.LINKS',\n0x0003: 'CLOSE.ALL',\n0x0004: 'SAVE',\n0x0005: 'SAVE.AS',\n0x0006: 'FILE.DELETE',\n0x0007: 'PAGE.SETUP',\n0x0008: 'PRINT',\n0x0009: 'PRINTER.SETUP',\n0x000A: 'QUIT',\n0x000B: 'NEW.WINDOW',\n0x000C: 'ARRANGE.ALL',\n0x000D: 'WINDOW.SIZE',\n0x000E: 'WINDOW.MOVE',\n0x000F: 'FULL',\n0x0010: 'CLOSE',\n0x0011: 'RUN',\n0x0016: 'SET.PRINT.AREA',\n0x0017: 'SET.PRINT.TITLES',\n0x0018: 'SET.PAGE.BREAK',\n0x0019: 'REMOVE.PAGE.BREAK',\n0x001A: 'FONT',\n0x001B: 'DISPLAY',\n0x001C: 'PROTECT.DOCUMENT',\n0x001D: 'PRECISION',\n0x001E: 'A1.R1C1',\n0x001F: 'CALCULATE.NOW',\n0x0020: 'CALCULATION',\n0x0022: 'DATA.FIND',\n0x0023: 'EXTRACT',\n0x0024: 'DATA.DELETE',\n0x0025: 'SET.DATABASE',\n0x0026: 'SET.CRITERIA',\n0x0027: 'SORT',\n0x0028: 'DATA.SERIES',\n0x0029: 'TABLE',\n0x002A: 'FORMAT.NUMBER',\n0x002B: 'ALIGNMENT',\n0x002C: 'STYLE',\n0x002D: 'BORDER',\n0x002E: 'CELL.PROTECTION',\n0x002F: 'COLUMN.WIDTH',\n0x0030: 'UNDO',\n0x0031: 'CUT',\n0x0032: 'COPY',\n0x0033: 'PASTE',\n0x0034: 'CLEAR',\n0x0035: 'PASTE.SPECIAL',\n0x0036: 'EDIT.DELETE',\n0x0037: 'INSERT',\n0x0038: 'FILL.RIGHT',\n0x0039: 'FILL.DOWN',\n0x003D: 'DEFINE.NAME',\n0x003E: 'CREATE.NAMES',\n0x003F: 'FORMULA.GOTO',\n0x0040: 'FORMULA.FIND',\n0x0041: 'SELECT.LAST.CELL',\n0x0042: 'SHOW.ACTIVE.CELL',\n0x0043: 'GALLERY.AREA',\n0x0044: 'GALLERY.BAR',\n0x0045: 'GALLERY.COLUMN',\n0x0046: 'GALLERY.LINE',\n0x0047: 'GALLERY.PIE',\n0x0048: 'GALLERY.SCATTER',\n0x0049: 'COMBINATION',\n0x004A: 'PREFERRED',\n0x004B: 'ADD.OVERLAY',\n0x004C: 'GRIDLINES',\n0x004D: 'SET.PREFERRED',\n0x004E: 'AXES',\n0x004F: 'LEGEND',\n0x0050: 'ATTACH.TEXT',\n0x0051: 'ADD.ARROW',\n0x0052: 'SELECT.CHART',\n0x0053: 'SELECT.PLOT.AREA',\n0x0054: 'PATTERNS',\n0x0055: 'MAIN.CHART',\n0x0056: 'OVERLAY',\n0x0057: 'SCALE',\n0x0058: 'FORMAT.LEGEND',\n0x0059: 'FORMAT.TEXT',\n0x005A: 'EDIT.REPEAT',\n0x005B: 'PARSE',\n0x005C: 'JUSTIFY',\n0x005D: 'HIDE',\n0x005E: 'UNHIDE',\n0x005F: 'WORKSPACE',\n0x0060: 'FORMULA',\n0x0061: 'FORMULA.FILL',\n0x0062: 'FORMULA.ARRAY',\n0x0063: 'DATA.FIND.NEXT',\n0x0064: 'DATA.FIND.PREV',\n0x0065: 'FORMULA.FIND.NEXT',\n0x0066: 'FORMULA.FIND.PREV',\n0x0067: 'ACTIVATE',\n0x0068: 'ACTIVATE.NEXT',\n0x0069: 'ACTIVATE.PREV',\n0x006A: 'UNLOCKED.NEXT',\n0x006B: 'UNLOCKED.PREV',\n0x006C: 'COPY.PICTURE',\n0x006D: 'SELECT',\n0x006E: 'DELETE.NAME',\n0x006F: 'DELETE.FORMAT',\n0x0070: 'VLINE',\n0x0071: 'HLINE',\n0x0072: 'VPAGE',\n0x0073: 'HPAGE',\n0x0074: 'VSCROLL',\n0x0075: 'HSCROLL',\n0x0076: 'ALERT',\n0x0077: 'NEW',\n0x0078: 'CANCEL.COPY',\n0x0079: 'SHOW.CLIPBOARD',\n0x007A: 'MESSAGE',\n0x007C: 'PASTE.LINK',\n0x007D: 'APP.ACTIVATE',\n0x007E: 'DELETE.ARROW',\n0x007F: 'ROW.HEIGHT',\n0x0080: 'FORMAT.MOVE',\n0x0081: 'FORMAT.SIZE',\n0x0082: 'FORMULA.REPLACE',\n0x0083: 'SEND.KEYS',\n0x0084: 'SELECT.SPECIAL',\n0x0085: 'APPLY.NAMES',\n0x0086: 'REPLACE.FONT',\n0x0087: 'FREEZE.PANES',\n0x0088: 'SHOW.INFO',\n0x0089: 'SPLIT',\n0x008A: 'ON.WINDOW',\n0x008B: 'ON.DATA',\n0x008C: 'DISABLE.INPUT',\n0x008E: 'OUTLINE',\n0x008F: 'LIST.NAMES',\n0x0090: 'FILE.CLOSE',\n0x0091: 'SAVE.WORKBOOK',\n0x0092: 'DATA.FORM',\n0x0093: 'COPY.CHART',\n0x0094: 'ON.TIME',\n0x0095: 'WAIT',\n0x0096: 'FORMAT.FONT',\n0x0097: 'FILL.UP',\n0x0098: 'FILL.LEFT',\n0x0099: 'DELETE.OVERLAY',\n0x009B: 'SHORT.MENUS',\n0x009F: 'SET.UPDATE.STATUS',\n0x00A1: 'COLOR.PALETTE',\n0x00A2: 'DELETE.STYLE',\n0x00A3: 'WINDOW.RESTORE',\n0x00A4: 'WINDOW.MAXIMIZE',\n0x00A6: 'CHANGE.LINK',\n0x00A7: 'CALCULATE.DOCUMENT',\n0x00A8: 'ON.KEY',\n0x00A9: 'APP.RESTORE',\n0x00AA: 'APP.MOVE',\n0x00AB: 'APP.SIZE',\n0x00AC: 'APP.MINIMIZE',\n0x00AD: 'APP.MAXIMIZE',\n0x00AE: 'BRING.TO.FRONT',\n0x00AF: 'SEND.TO.BACK',\n0x00B9: 'MAIN.CHART.TYPE',\n0x00BA: 'OVERLAY.CHART.TYPE',\n0x00BB: 'SELECT.END',\n0x00BC: 'OPEN.MAIL',\n0x00BD: 'SEND.MAIL',\n0x00BE: 'STANDARD.FONT',\n0x00BF: 'CONSOLIDATE',\n0x00C0: 'SORT.SPECIAL',\n0x00C1: 'GALLERY.3D.AREA',\n0x00C2: 'GALLERY.3D.COLUMN',\n0x00C3: 'GALLERY.3D.LINE',\n0x00C4: 'GALLERY.3D.PIE',\n0x00C5: 'VIEW.3D',\n0x00C6: 'GOAL.SEEK',\n0x00C7: 'WORKGROUP',\n0x00C8: 'FILL.GROUP',\n0x00C9: 'UPDATE.LINK',\n0x00CA: 'PROMOTE',\n0x00CB: 'DEMOTE',\n0x00CC: 'SHOW.DETAIL',\n0x00CE: 'UNGROUP',\n0x00CF: 'OBJECT.PROPERTIES',\n0x00D0: 'SAVE.NEW.OBJECT',\n0x00D1: 'SHARE',\n0x00D2: 'SHARE.NAME',\n0x00D3: 'DUPLICATE',\n0x00D4: 'APPLY.STYLE',\n0x00D5: 'ASSIGN.TO.OBJECT',\n0x00D6: 'OBJECT.PROTECTION',\n0x00D7: 'HIDE.OBJECT',\n0x00D8: 'SET.EXTRACT',\n0x00D9: 'CREATE.PUBLISHER',\n0x00DA: 'SUBSCRIBE.TO',\n0x00DB: 'ATTRIBUTES',\n0x00DC: 'SHOW.TOOLBAR',\n0x00DE: 'PRINT.PREVIEW',\n0x00DF: 'EDIT.COLOR',\n0x00E0: 'SHOW.LEVELS',\n0x00E1: 'FORMAT.MAIN',\n0x00E2: 'FORMAT.OVERLAY',\n0x00E3: 'ON.RECALC',\n0x00E4: 'EDIT.SERIES',\n0x00E5: 'DEFINE.STYLE',\n0x00F0: 'LINE.PRINT',\n0x00F3: 'ENTER.DATA',\n0x00F9: 'GALLERY.RADAR',\n0x00FA: 'MERGE.STYLES',\n0x00FB: 'EDITION.OPTIONS',\n0x00FC: 'PASTE.PICTURE',\n0x00FD: 'PASTE.PICTURE.LINK',\n0x00FE: 'SPELLING',\n0x0100: 'ZOOM',\n0x0103: 'INSERT.OBJECT',\n0x0104: 'WINDOW.MINIMIZE',\n0x0109: 'SOUND.NOTE',\n0x010A: 'SOUND.PLAY',\n0x010B: 'FORMAT.SHAPE',\n0x010C: 'EXTEND.POLYGON',\n0x010D: 'FORMAT.AUTO',\n0x0110: 'GALLERY.3D.BAR',\n0x0111: 'GALLERY.3D.SURFACE',\n0x0112: 'FILL.AUTO',\n0x0114: 'CUSTOMIZE.TOOLBAR',\n0x0115: 'ADD.TOOL',\n0x0116: 'EDIT.OBJECT',\n0x0117: 'ON.DOUBLECLICK',\n0x0118: 'ON.ENTRY',\n0x0119: 'WORKBOOK.ADD',\n0x011A: 'WORKBOOK.MOVE',\n0x011B: 'WORKBOOK.COPY',\n0x011C: 'WORKBOOK.OPTIONS',\n0x011D: 'SAVE.WORKSPACE',\n0x0120: 'CHART.WIZARD',\n0x0121: 'DELETE.TOOL',\n0x0122: 'MOVE.TOOL',\n0x0123: 'WORKBOOK.SELECT',\n0x0124: 'WORKBOOK.ACTIVATE',\n0x0125: 'ASSIGN.TO.TOOL',\n0x0127: 'COPY.TOOL',\n0x0128: 'RESET.TOOL',\n0x0129: 'CONSTRAIN.NUMERIC',\n0x012A: 'PASTE.TOOL',\n0x012E: 'WORKBOOK.NEW',\n0x0131: 'SCENARIO.CELLS',\n0x0132: 'SCENARIO.DELETE',\n0x0133: 'SCENARIO.ADD',\n0x0134: 'SCENARIO.EDIT',\n0x0135: 'SCENARIO.SHOW',\n0x0136: 'SCENARIO.SHOW.NEXT',\n0x0137: 'SCENARIO.SUMMARY',\n0x0138: 'PIVOT.TABLE.WIZARD',\n0x0139: 'PIVOT.FIELD.PROPERTIES',\n0x013A: 'PIVOT.FIELD',\n0x013B: 'PIVOT.ITEM',\n0x013C: 'PIVOT.ADD.FIELDS',\n0x013E: 'OPTIONS.CALCULATION',\n0x013F: 'OPTIONS.EDIT',\n0x0140: 'OPTIONS.VIEW',\n0x0141: 'ADDIN.MANAGER',\n0x0142: 'MENU.EDITOR',\n0x0143: 'ATTACH.TOOLBARS',\n0x0144: 'VBAActivate',\n0x0145: 'OPTIONS.CHART',\n0x0148: 'VBA.INSERT.FILE',\n0x014A: 'VBA.PROCEDURE.DEFINITION',\n0x0150: 'ROUTING.SLIP',\n0x0152: 'ROUTE.DOCUMENT',\n0x0153: 'MAIL.LOGON',\n0x0156: 'INSERT.PICTURE',\n0x0157: 'EDIT.TOOL',\n0x0158: 'GALLERY.DOUGHNUT',\n0x015E: 'CHART.TREND',\n0x0160: 'PIVOT.ITEM.PROPERTIES',\n0x0162: 'WORKBOOK.INSERT',\n0x0163: 'OPTIONS.TRANSITION',\n0x0164: 'OPTIONS.GENERAL',\n0x0172: 'FILTER.ADVANCED',\n0x0175: 'MAIL.ADD.MAILER',\n0x0176: 'MAIL.DELETE.MAILER',\n0x0177: 'MAIL.REPLY',\n0x0178: 'MAIL.REPLY.ALL',\n0x0179: 'MAIL.FORWARD',\n0x017A: 'MAIL.NEXT.LETTER',\n0x017B: 'DATA.LABEL',\n0x017C: 'INSERT.TITLE',\n0x017D: 'FONT.PROPERTIES',\n0x017E: 'MACRO.OPTIONS',\n0x017F: 'WORKBOOK.HIDE',\n0x0180: 'WORKBOOK.UNHIDE',\n0x0181: 'WORKBOOK.DELETE',\n0x0182: 'WORKBOOK.NAME',\n0x0184: 'GALLERY.CUSTOM',\n0x0186: 'ADD.CHART.AUTOFORMAT',\n0x0187: 'DELETE.CHART.AUTOFORMAT',\n0x0188: 'CHART.ADD.DATA',\n0x0189: 'AUTO.OUTLINE',\n0x018A: 'TAB.ORDER',\n0x018B: 'SHOW.DIALOG',\n0x018C: 'SELECT.ALL',\n0x018D: 'UNGROUP.SHEETS',\n0x018E: 'SUBTOTAL.CREATE',\n0x018F: 'SUBTOTAL.REMOVE',\n0x0190: 'RENAME.OBJECT',\n0x019C: 'WORKBOOK.SCROLL',\n0x019D: 'WORKBOOK.NEXT',\n0x019E: 'WORKBOOK.PREV',\n0x019F: 'WORKBOOK.TAB.SPLIT',\n0x01A0: 'FULL.SCREEN',\n0x01A1: 'WORKBOOK.PROTECT',\n0x01A4: 'SCROLLBAR.PROPERTIES',\n0x01A5: 'PIVOT.SHOW.PAGES',\n0x01A6: 'TEXT.TO.COLUMNS',\n0x01A7: 'FORMAT.CHARTTYPE',\n0x01A8: 'LINK.FORMAT',\n0x01A9: 'TRACER.DISPLAY',\n0x01AE: 'TRACER.NAVIGATE',\n0x01AF: 'TRACER.CLEAR',\n0x01B0: 'TRACER.ERROR',\n0x01B1: 'PIVOT.FIELD.GROUP',\n0x01B2: 'PIVOT.FIELD.UNGROUP',\n0x01B3: 'CHECKBOX.PROPERTIES',\n0x01B4: 'LABEL.PROPERTIES',\n0x01B5: 'LISTBOX.PROPERTIES',\n0x01B6: 'EDITBOX.PROPERTIES',\n0x01B7: 'PIVOT.REFRESH',\n0x01B8: 'LINK.COMBO',\n0x01B9: 'OPEN.TEXT',\n0x01BA: 'HIDE.DIALOG',\n0x01BB: 'SET.DIALOG.FOCUS',\n0x01BC: 'ENABLE.OBJECT',\n0x01BD: 'PUSHBUTTON.PROPERTIES',\n0x01BE: 'SET.DIALOG.DEFAULT',\n0x01BF: 'FILTER',\n0x01C0: 'FILTER.SHOW.ALL',\n0x01C1: 'CLEAR.OUTLINE',\n0x01C2: 'FUNCTION.WIZARD',\n0x01C3: 'ADD.LIST.ITEM',\n0x01C4: 'SET.LIST.ITEM',\n0x01C5: 'REMOVE.LIST.ITEM',\n0x01C6: 'SELECT.LIST.ITEM',\n0x01C7: 'SET.CONTROL.VALUE',\n0x01C8: 'SAVE.COPY.AS',\n0x01CA: 'OPTIONS.LISTS.ADD',\n0x01CB: 'OPTIONS.LISTS.DELETE',\n0x01CC: 'SERIES.AXES',\n0x01CD: 'SERIES.X',\n0x01CE: 'SERIES.Y',\n0x01CF: 'ERRORBAR.X',\n0x01D0: 'ERRORBAR.Y',\n0x01D1: 'FORMAT.CHART',\n0x01D2: 'SERIES.ORDER',\n0x01D3: 'MAIL.LOGOFF',\n0x01D4: 'CLEAR.ROUTING.SLIP',\n0x01D5: 'APP.ACTIVATE.MICROSOFT',\n0x01D6: 'MAIL.EDIT.MAILER',\n0x01D7: 'ON.SHEET',\n0x01D8: 'STANDARD.WIDTH',\n0x01D9: 'SCENARIO.MERGE',\n0x01DA: 'SUMMARY.INFO',\n0x01DB: 'FIND.FILE',\n0x01DC: 'ACTIVE.CELL.FONT',\n0x01DD: 'ENABLE.TIPWIZARD',\n0x01DE: 'VBA.MAKE.ADDIN',\n0x01E0: 'INSERTDATATABLE',\n0x01E1: 'WORKGROUP.OPTIONS',\n0x01E2: 'MAIL.SEND.MAILER',\n0x01E5: 'AUTOCORRECT',\n0x01E9: 'POST.DOCUMENT',\n0x01EB: 'PICKLIST',\n0x01ED: 'VIEW.SHOW',\n0x01EE: 'VIEW.DEFINE',\n0x01EF: 'VIEW.DELETE',\n0x01FD: 'SHEET.BACKGROUND',\n0x01FE: 'INSERT.MAP.OBJECT',\n0x01FF: 'OPTIONS.MENONO',\n0x0205: 'MSOCHECKS',\n0x0206: 'NORMAL',\n0x0207: 'LAYOUT',\n0x0208: 'RM.PRINT.AREA',\n0x0209: 'CLEAR.PRINT.AREA',\n0x020A: 'ADD.PRINT.AREA',\n0x020B: 'MOVE.BRK',\n0x0221: 'HIDECURR.NOTE',\n0x0222: 'HIDEALL.NOTES',\n0x0223: 'DELETE.NOTE',\n0x0224: 'TRAVERSE.NOTES',\n0x0225: 'ACTIVATE.NOTES',\n0x026C: 'PROTECT.REVISIONS',\n0x026D: 'UNPROTECT.REVISIONS',\n0x0287: 'OPTIONS.ME',\n0x028D: 'WEB.PUBLISH',\n0x029B: 'NEWWEBQUERY',\n0x02A1: 'PIVOT.TABLE.CHART',\n0x02F1: 'OPTIONS.SAVE',\n0x02F3: 'OPTIONS.SPELL',\n0x0328: 'HIDEALL.INKANNOTS'\n};\n\n/* [MS-XLS] 2.5.198.17 */\n/* [MS-XLSB] 2.5.97.10 */\nvar Ftab = {\n0x0000: 'COUNT',\n0x0001: 'IF',\n0x0002: 'ISNA',\n0x0003: 'ISERROR',\n0x0004: 'SUM',\n0x0005: 'AVERAGE',\n0x0006: 'MIN',\n0x0007: 'MAX',\n0x0008: 'ROW',\n0x0009: 'COLUMN',\n0x000A: 'NA',\n0x000B: 'NPV',\n0x000C: 'STDEV',\n0x000D: 'DOLLAR',\n0x000E: 'FIXED',\n0x000F: 'SIN',\n0x0010: 'COS',\n0x0011: 'TAN',\n0x0012: 'ATAN',\n0x0013: 'PI',\n0x0014: 'SQRT',\n0x0015: 'EXP',\n0x0016: 'LN',\n0x0017: 'LOG10',\n0x0018: 'ABS',\n0x0019: 'INT',\n0x001A: 'SIGN',\n0x001B: 'ROUND',\n0x001C: 'LOOKUP',\n0x001D: 'INDEX',\n0x001E: 'REPT',\n0x001F: 'MID',\n0x0020: 'LEN',\n0x0021: 'VALUE',\n0x0022: 'TRUE',\n0x0023: 'FALSE',\n0x0024: 'AND',\n0x0025: 'OR',\n0x0026: 'NOT',\n0x0027: 'MOD',\n0x0028: 'DCOUNT',\n0x0029: 'DSUM',\n0x002A: 'DAVERAGE',\n0x002B: 'DMIN',\n0x002C: 'DMAX',\n0x002D: 'DSTDEV',\n0x002E: 'VAR',\n0x002F: 'DVAR',\n0x0030: 'TEXT',\n0x0031: 'LINEST',\n0x0032: 'TREND',\n0x0033: 'LOGEST',\n0x0034: 'GROWTH',\n0x0035: 'GOTO',\n0x0036: 'HALT',\n0x0037: 'RETURN',\n0x0038: 'PV',\n0x0039: 'FV',\n0x003A: 'NPER',\n0x003B: 'PMT',\n0x003C: 'RATE',\n0x003D: 'MIRR',\n0x003E: 'IRR',\n0x003F: 'RAND',\n0x0040: 'MATCH',\n0x0041: 'DATE',\n0x0042: 'TIME',\n0x0043: 'DAY',\n0x0044: 'MONTH',\n0x0045: 'YEAR',\n0x0046: 'WEEKDAY',\n0x0047: 'HOUR',\n0x0048: 'MINUTE',\n0x0049: 'SECOND',\n0x004A: 'NOW',\n0x004B: 'AREAS',\n0x004C: 'ROWS',\n0x004D: 'COLUMNS',\n0x004E: 'OFFSET',\n0x004F: 'ABSREF',\n0x0050: 'RELREF',\n0x0051: 'ARGUMENT',\n0x0052: 'SEARCH',\n0x0053: 'TRANSPOSE',\n0x0054: 'ERROR',\n0x0055: 'STEP',\n0x0056: 'TYPE',\n0x0057: 'ECHO',\n0x0058: 'SET.NAME',\n0x0059: 'CALLER',\n0x005A: 'DEREF',\n0x005B: 'WINDOWS',\n0x005C: 'SERIES',\n0x005D: 'DOCUMENTS',\n0x005E: 'ACTIVE.CELL',\n0x005F: 'SELECTION',\n0x0060: 'RESULT',\n0x0061: 'ATAN2',\n0x0062: 'ASIN',\n0x0063: 'ACOS',\n0x0064: 'CHOOSE',\n0x0065: 'HLOOKUP',\n0x0066: 'VLOOKUP',\n0x0067: 'LINKS',\n0x0068: 'INPUT',\n0x0069: 'ISREF',\n0x006A: 'GET.FORMULA',\n0x006B: 'GET.NAME',\n0x006C: 'SET.VALUE',\n0x006D: 'LOG',\n0x006E: 'EXEC',\n0x006F: 'CHAR',\n0x0070: 'LOWER',\n0x0071: 'UPPER',\n0x0072: 'PROPER',\n0x0073: 'LEFT',\n0x0074: 'RIGHT',\n0x0075: 'EXACT',\n0x0076: 'TRIM',\n0x0077: 'REPLACE',\n0x0078: 'SUBSTITUTE',\n0x0079: 'CODE',\n0x007A: 'NAMES',\n0x007B: 'DIRECTORY',\n0x007C: 'FIND',\n0x007D: 'CELL',\n0x007E: 'ISERR',\n0x007F: 'ISTEXT',\n0x0080: 'ISNUMBER',\n0x0081: 'ISBLANK',\n0x0082: 'T',\n0x0083: 'N',\n0x0084: 'FOPEN',\n0x0085: 'FCLOSE',\n0x0086: 'FSIZE',\n0x0087: 'FREADLN',\n0x0088: 'FREAD',\n0x0089: 'FWRITELN',\n0x008A: 'FWRITE',\n0x008B: 'FPOS',\n0x008C: 'DATEVALUE',\n0x008D: 'TIMEVALUE',\n0x008E: 'SLN',\n0x008F: 'SYD',\n0x0090: 'DDB',\n0x0091: 'GET.DEF',\n0x0092: 'REFTEXT',\n0x0093: 'TEXTREF',\n0x0094: 'INDIRECT',\n0x0095: 'REGISTER',\n0x0096: 'CALL',\n0x0097: 'ADD.BAR',\n0x0098: 'ADD.MENU',\n0x0099: 'ADD.COMMAND',\n0x009A: 'ENABLE.COMMAND',\n0x009B: 'CHECK.COMMAND',\n0x009C: 'RENAME.COMMAND',\n0x009D: 'SHOW.BAR',\n0x009E: 'DELETE.MENU',\n0x009F: 'DELETE.COMMAND',\n0x00A0: 'GET.CHART.ITEM',\n0x00A1: 'DIALOG.BOX',\n0x00A2: 'CLEAN',\n0x00A3: 'MDETERM',\n0x00A4: 'MINVERSE',\n0x00A5: 'MMULT',\n0x00A6: 'FILES',\n0x00A7: 'IPMT',\n0x00A8: 'PPMT',\n0x00A9: 'COUNTA',\n0x00AA: 'CANCEL.KEY',\n0x00AB: 'FOR',\n0x00AC: 'WHILE',\n0x00AD: 'BREAK',\n0x00AE: 'NEXT',\n0x00AF: 'INITIATE',\n0x00B0: 'REQUEST',\n0x00B1: 'POKE',\n0x00B2: 'EXECUTE',\n0x00B3: 'TERMINATE',\n0x00B4: 'RESTART',\n0x00B5: 'HELP',\n0x00B6: 'GET.BAR',\n0x00B7: 'PRODUCT',\n0x00B8: 'FACT',\n0x00B9: 'GET.CELL',\n0x00BA: 'GET.WORKSPACE',\n0x00BB: 'GET.WINDOW',\n0x00BC: 'GET.DOCUMENT',\n0x00BD: 'DPRODUCT',\n0x00BE: 'ISNONTEXT',\n0x00BF: 'GET.NOTE',\n0x00C0: 'NOTE',\n0x00C1: 'STDEVP',\n0x00C2: 'VARP',\n0x00C3: 'DSTDEVP',\n0x00C4: 'DVARP',\n0x00C5: 'TRUNC',\n0x00C6: 'ISLOGICAL',\n0x00C7: 'DCOUNTA',\n0x00C8: 'DELETE.BAR',\n0x00C9: 'UNREGISTER',\n0x00CC: 'USDOLLAR',\n0x00CD: 'FINDB',\n0x00CE: 'SEARCHB',\n0x00CF: 'REPLACEB',\n0x00D0: 'LEFTB',\n0x00D1: 'RIGHTB',\n0x00D2: 'MIDB',\n0x00D3: 'LENB',\n0x00D4: 'ROUNDUP',\n0x00D5: 'ROUNDDOWN',\n0x00D6: 'ASC',\n0x00D7: 'DBCS',\n0x00D8: 'RANK',\n0x00DB: 'ADDRESS',\n0x00DC: 'DAYS360',\n0x00DD: 'TODAY',\n0x00DE: 'VDB',\n0x00DF: 'ELSE',\n0x00E0: 'ELSE.IF',\n0x00E1: 'END.IF',\n0x00E2: 'FOR.CELL',\n0x00E3: 'MEDIAN',\n0x00E4: 'SUMPRODUCT',\n0x00E5: 'SINH',\n0x00E6: 'COSH',\n0x00E7: 'TANH',\n0x00E8: 'ASINH',\n0x00E9: 'ACOSH',\n0x00EA: 'ATANH',\n0x00EB: 'DGET',\n0x00EC: 'CREATE.OBJECT',\n0x00ED: 'VOLATILE',\n0x00EE: 'LAST.ERROR',\n0x00EF: 'CUSTOM.UNDO',\n0x00F0: 'CUSTOM.REPEAT',\n0x00F1: 'FORMULA.CONVERT',\n0x00F2: 'GET.LINK.INFO',\n0x00F3: 'TEXT.BOX',\n0x00F4: 'INFO',\n0x00F5: 'GROUP',\n0x00F6: 'GET.OBJECT',\n0x00F7: 'DB',\n0x00F8: 'PAUSE',\n0x00FB: 'RESUME',\n0x00FC: 'FREQUENCY',\n0x00FD: 'ADD.TOOLBAR',\n0x00FE: 'DELETE.TOOLBAR',\n0x00FF: 'User',\n0x0100: 'RESET.TOOLBAR',\n0x0101: 'EVALUATE',\n0x0102: 'GET.TOOLBAR',\n0x0103: 'GET.TOOL',\n0x0104: 'SPELLING.CHECK',\n0x0105: 'ERROR.TYPE',\n0x0106: 'APP.TITLE',\n0x0107: 'WINDOW.TITLE',\n0x0108: 'SAVE.TOOLBAR',\n0x0109: 'ENABLE.TOOL',\n0x010A: 'PRESS.TOOL',\n0x010B: 'REGISTER.ID',\n0x010C: 'GET.WORKBOOK',\n0x010D: 'AVEDEV',\n0x010E: 'BETADIST',\n0x010F: 'GAMMALN',\n0x0110: 'BETAINV',\n0x0111: 'BINOMDIST',\n0x0112: 'CHIDIST',\n0x0113: 'CHIINV',\n0x0114: 'COMBIN',\n0x0115: 'CONFIDENCE',\n0x0116: 'CRITBINOM',\n0x0117: 'EVEN',\n0x0118: 'EXPONDIST',\n0x0119: 'FDIST',\n0x011A: 'FINV',\n0x011B: 'FISHER',\n0x011C: 'FISHERINV',\n0x011D: 'FLOOR',\n0x011E: 'GAMMADIST',\n0x011F: 'GAMMAINV',\n0x0120: 'CEILING',\n0x0121: 'HYPGEOMDIST',\n0x0122: 'LOGNORMDIST',\n0x0123: 'LOGINV',\n0x0124: 'NEGBINOMDIST',\n0x0125: 'NORMDIST',\n0x0126: 'NORMSDIST',\n0x0127: 'NORMINV',\n0x0128: 'NORMSINV',\n0x0129: 'STANDARDIZE',\n0x012A: 'ODD',\n0x012B: 'PERMUT',\n0x012C: 'POISSON',\n0x012D: 'TDIST',\n0x012E: 'WEIBULL',\n0x012F: 'SUMXMY2',\n0x0130: 'SUMX2MY2',\n0x0131: 'SUMX2PY2',\n0x0132: 'CHITEST',\n0x0133: 'CORREL',\n0x0134: 'COVAR',\n0x0135: 'FORECAST',\n0x0136: 'FTEST',\n0x0137: 'INTERCEPT',\n0x0138: 'PEARSON',\n0x0139: 'RSQ',\n0x013A: 'STEYX',\n0x013B: 'SLOPE',\n0x013C: 'TTEST',\n0x013D: 'PROB',\n0x013E: 'DEVSQ',\n0x013F: 'GEOMEAN',\n0x0140: 'HARMEAN',\n0x0141: 'SUMSQ',\n0x0142: 'KURT',\n0x0143: 'SKEW',\n0x0144: 'ZTEST',\n0x0145: 'LARGE',\n0x0146: 'SMALL',\n0x0147: 'QUARTILE',\n0x0148: 'PERCENTILE',\n0x0149: 'PERCENTRANK',\n0x014A: 'MODE',\n0x014B: 'TRIMMEAN',\n0x014C: 'TINV',\n0x014E: 'MOVIE.COMMAND',\n0x014F: 'GET.MOVIE',\n0x0150: 'CONCATENATE',\n0x0151: 'POWER',\n0x0152: 'PIVOT.ADD.DATA',\n0x0153: 'GET.PIVOT.TABLE',\n0x0154: 'GET.PIVOT.FIELD',\n0x0155: 'GET.PIVOT.ITEM',\n0x0156: 'RADIANS',\n0x0157: 'DEGREES',\n0x0158: 'SUBTOTAL',\n0x0159: 'SUMIF',\n0x015A: 'COUNTIF',\n0x015B: 'COUNTBLANK',\n0x015C: 'SCENARIO.GET',\n0x015D: 'OPTIONS.LISTS.GET',\n0x015E: 'ISPMT',\n0x015F: 'DATEDIF',\n0x0160: 'DATESTRING',\n0x0161: 'NUMBERSTRING',\n0x0162: 'ROMAN',\n0x0163: 'OPEN.DIALOG',\n0x0164: 'SAVE.DIALOG',\n0x0165: 'VIEW.GET',\n0x0166: 'GETPIVOTDATA',\n0x0167: 'HYPERLINK',\n0x0168: 'PHONETIC',\n0x0169: 'AVERAGEA',\n0x016A: 'MAXA',\n0x016B: 'MINA',\n0x016C: 'STDEVPA',\n0x016D: 'VARPA',\n0x016E: 'STDEVA',\n0x016F: 'VARA',\n0x0170: 'BAHTTEXT',\n0x0171: 'THAIDAYOFWEEK',\n0x0172: 'THAIDIGIT',\n0x0173: 'THAIMONTHOFYEAR',\n0x0174: 'THAINUMSOUND',\n0x0175: 'THAINUMSTRING',\n0x0176: 'THAISTRINGLENGTH',\n0x0177: 'ISTHAIDIGIT',\n0x0178: 'ROUNDBAHTDOWN',\n0x0179: 'ROUNDBAHTUP',\n0x017A: 'THAIYEAR',\n0x017B: 'RTD',\n\n0x017C: 'CUBEVALUE',\n0x017D: 'CUBEMEMBER',\n0x017E: 'CUBEMEMBERPROPERTY',\n0x017F: 'CUBERANKEDMEMBER',\n0x0180: 'HEX2BIN',\n0x0181: 'HEX2DEC',\n0x0182: 'HEX2OCT',\n0x0183: 'DEC2BIN',\n0x0184: 'DEC2HEX',\n0x0185: 'DEC2OCT',\n0x0186: 'OCT2BIN',\n0x0187: 'OCT2HEX',\n0x0188: 'OCT2DEC',\n0x0189: 'BIN2DEC',\n0x018A: 'BIN2OCT',\n0x018B: 'BIN2HEX',\n0x018C: 'IMSUB',\n0x018D: 'IMDIV',\n0x018E: 'IMPOWER',\n0x018F: 'IMABS',\n0x0190: 'IMSQRT',\n0x0191: 'IMLN',\n0x0192: 'IMLOG2',\n0x0193: 'IMLOG10',\n0x0194: 'IMSIN',\n0x0195: 'IMCOS',\n0x0196: 'IMEXP',\n0x0197: 'IMARGUMENT',\n0x0198: 'IMCONJUGATE',\n0x0199: 'IMAGINARY',\n0x019A: 'IMREAL',\n0x019B: 'COMPLEX',\n0x019C: 'IMSUM',\n0x019D: 'IMPRODUCT',\n0x019E: 'SERIESSUM',\n0x019F: 'FACTDOUBLE',\n0x01A0: 'SQRTPI',\n0x01A1: 'QUOTIENT',\n0x01A2: 'DELTA',\n0x01A3: 'GESTEP',\n0x01A4: 'ISEVEN',\n0x01A5: 'ISODD',\n0x01A6: 'MROUND',\n0x01A7: 'ERF',\n0x01A8: 'ERFC',\n0x01A9: 'BESSELJ',\n0x01AA: 'BESSELK',\n0x01AB: 'BESSELY',\n0x01AC: 'BESSELI',\n0x01AD: 'XIRR',\n0x01AE: 'XNPV',\n0x01AF: 'PRICEMAT',\n0x01B0: 'YIELDMAT',\n0x01B1: 'INTRATE',\n0x01B2: 'RECEIVED',\n0x01B3: 'DISC',\n0x01B4: 'PRICEDISC',\n0x01B5: 'YIELDDISC',\n0x01B6: 'TBILLEQ',\n0x01B7: 'TBILLPRICE',\n0x01B8: 'TBILLYIELD',\n0x01B9: 'PRICE',\n0x01BA: 'YIELD',\n0x01BB: 'DOLLARDE',\n0x01BC: 'DOLLARFR',\n0x01BD: 'NOMINAL',\n0x01BE: 'EFFECT',\n0x01BF: 'CUMPRINC',\n0x01C0: 'CUMIPMT',\n0x01C1: 'EDATE',\n0x01C2: 'EOMONTH',\n0x01C3: 'YEARFRAC',\n0x01C4: 'COUPDAYBS',\n0x01C5: 'COUPDAYS',\n0x01C6: 'COUPDAYSNC',\n0x01C7: 'COUPNCD',\n0x01C8: 'COUPNUM',\n0x01C9: 'COUPPCD',\n0x01CA: 'DURATION',\n0x01CB: 'MDURATION',\n0x01CC: 'ODDLPRICE',\n0x01CD: 'ODDLYIELD',\n0x01CE: 'ODDFPRICE',\n0x01CF: 'ODDFYIELD',\n0x01D0: 'RANDBETWEEN',\n0x01D1: 'WEEKNUM',\n0x01D2: 'AMORDEGRC',\n0x01D3: 'AMORLINC',\n0x01D4: 'CONVERT',\n0x02D4: 'SHEETJS',\n0x01D5: 'ACCRINT',\n0x01D6: 'ACCRINTM',\n0x01D7: 'WORKDAY',\n0x01D8: 'NETWORKDAYS',\n0x01D9: 'GCD',\n0x01DA: 'MULTINOMIAL',\n0x01DB: 'LCM',\n0x01DC: 'FVSCHEDULE',\n0x01DD: 'CUBEKPIMEMBER',\n0x01DE: 'CUBESET',\n0x01DF: 'CUBESETCOUNT',\n0x01E0: 'IFERROR',\n0x01E1: 'COUNTIFS',\n0x01E2: 'SUMIFS',\n0x01E3: 'AVERAGEIF',\n0x01E4: 'AVERAGEIFS'\n};\nvar FtabArgc = {\n0x0002: 1, /* ISNA */\n0x0003: 1, /* ISERROR */\n0x000A: 0, /* NA */\n0x000F: 1, /* SIN */\n0x0010: 1, /* COS */\n0x0011: 1, /* TAN */\n0x0012: 1, /* ATAN */\n0x0013: 0, /* PI */\n0x0014: 1, /* SQRT */\n0x0015: 1, /* EXP */\n0x0016: 1, /* LN */\n0x0017: 1, /* LOG10 */\n0x0018: 1, /* ABS */\n0x0019: 1, /* INT */\n0x001A: 1, /* SIGN */\n0x001B: 2, /* ROUND */\n0x001E: 2, /* REPT */\n0x001F: 3, /* MID */\n0x0020: 1, /* LEN */\n0x0021: 1, /* VALUE */\n0x0022: 0, /* TRUE */\n0x0023: 0, /* FALSE */\n0x0026: 1, /* NOT */\n0x0027: 2, /* MOD */\n0x0028: 3, /* DCOUNT */\n0x0029: 3, /* DSUM */\n0x002A: 3, /* DAVERAGE */\n0x002B: 3, /* DMIN */\n0x002C: 3, /* DMAX */\n0x002D: 3, /* DSTDEV */\n0x002F: 3, /* DVAR */\n0x0030: 2, /* TEXT */\n0x0035: 1, /* GOTO */\n0x003D: 3, /* MIRR */\n0x003F: 0, /* RAND */\n0x0041: 3, /* DATE */\n0x0042: 3, /* TIME */\n0x0043: 1, /* DAY */\n0x0044: 1, /* MONTH */\n0x0045: 1, /* YEAR */\n0x0046: 1, /* WEEKDAY */\n0x0047: 1, /* HOUR */\n0x0048: 1, /* MINUTE */\n0x0049: 1, /* SECOND */\n0x004A: 0, /* NOW */\n0x004B: 1, /* AREAS */\n0x004C: 1, /* ROWS */\n0x004D: 1, /* COLUMNS */\n0x004F: 2, /* ABSREF */\n0x0050: 2, /* RELREF */\n0x0053: 1, /* TRANSPOSE */\n0x0055: 0, /* STEP */\n0x0056: 1, /* TYPE */\n0x0059: 0, /* CALLER */\n0x005A: 1, /* DEREF */\n0x005E: 0, /* ACTIVE.CELL */\n0x005F: 0, /* SELECTION */\n0x0061: 2, /* ATAN2 */\n0x0062: 1, /* ASIN */\n0x0063: 1, /* ACOS */\n0x0065: 3, /* HLOOKUP */\n0x0066: 3, /* VLOOKUP */\n0x0069: 1, /* ISREF */\n0x006A: 1, /* GET.FORMULA */\n0x006C: 2, /* SET.VALUE */\n0x006F: 1, /* CHAR */\n0x0070: 1, /* LOWER */\n0x0071: 1, /* UPPER */\n0x0072: 1, /* PROPER */\n0x0075: 2, /* EXACT */\n0x0076: 1, /* TRIM */\n0x0077: 4, /* REPLACE */\n0x0079: 1, /* CODE */\n0x007E: 1, /* ISERR */\n0x007F: 1, /* ISTEXT */\n0x0080: 1, /* ISNUMBER */\n0x0081: 1, /* ISBLANK */\n0x0082: 1, /* T */\n0x0083: 1, /* N */\n0x0085: 1, /* FCLOSE */\n0x0086: 1, /* FSIZE */\n0x0087: 1, /* FREADLN */\n0x0088: 2, /* FREAD */\n0x0089: 2, /* FWRITELN */\n0x008A: 2, /* FWRITE */\n0x008C: 1, /* DATEVALUE */\n0x008D: 1, /* TIMEVALUE */\n0x008E: 3, /* SLN */\n0x008F: 4, /* SYD */\n0x0090: 4, /* DDB */\n0x00A1: 1, /* DIALOG.BOX */\n0x00A2: 1, /* CLEAN */\n0x00A3: 1, /* MDETERM */\n0x00A4: 1, /* MINVERSE */\n0x00A5: 2, /* MMULT */\n0x00AC: 1, /* WHILE */\n0x00AF: 2, /* INITIATE */\n0x00B0: 2, /* REQUEST */\n0x00B1: 3, /* POKE */\n0x00B2: 2, /* EXECUTE */\n0x00B3: 1, /* TERMINATE */\n0x00B8: 1, /* FACT */\n0x00BA: 1, /* GET.WORKSPACE */\n0x00BD: 3, /* DPRODUCT */\n0x00BE: 1, /* ISNONTEXT */\n0x00C3: 3, /* DSTDEVP */\n0x00C4: 3, /* DVARP */\n0x00C5: 1, /* TRUNC */\n0x00C6: 1, /* ISLOGICAL */\n0x00C7: 3, /* DCOUNTA */\n0x00C9: 1, /* UNREGISTER */\n0x00CF: 4, /* REPLACEB */\n0x00D2: 3, /* MIDB */\n0x00D3: 1, /* LENB */\n0x00D4: 2, /* ROUNDUP */\n0x00D5: 2, /* ROUNDDOWN */\n0x00D6: 1, /* ASC */\n0x00D7: 1, /* DBCS */\n0x00E1: 0, /* END.IF */\n0x00E5: 1, /* SINH */\n0x00E6: 1, /* COSH */\n0x00E7: 1, /* TANH */\n0x00E8: 1, /* ASINH */\n0x00E9: 1, /* ACOSH */\n0x00EA: 1, /* ATANH */\n0x00EB: 3, /* DGET */\n0x00F4: 1, /* INFO */\n0x00F7: 4, /* DB */\n0x00FC: 2, /* FREQUENCY */\n0x0101: 1, /* EVALUATE */\n0x0105: 1, /* ERROR.TYPE */\n0x010F: 1, /* GAMMALN */\n0x0111: 4, /* BINOMDIST */\n0x0112: 2, /* CHIDIST */\n0x0113: 2, /* CHIINV */\n0x0114: 2, /* COMBIN */\n0x0115: 3, /* CONFIDENCE */\n0x0116: 3, /* CRITBINOM */\n0x0117: 1, /* EVEN */\n0x0118: 3, /* EXPONDIST */\n0x0119: 3, /* FDIST */\n0x011A: 3, /* FINV */\n0x011B: 1, /* FISHER */\n0x011C: 1, /* FISHERINV */\n0x011D: 2, /* FLOOR */\n0x011E: 4, /* GAMMADIST */\n0x011F: 3, /* GAMMAINV */\n0x0120: 2, /* CEILING */\n0x0121: 4, /* HYPGEOMDIST */\n0x0122: 3, /* LOGNORMDIST */\n0x0123: 3, /* LOGINV */\n0x0124: 3, /* NEGBINOMDIST */\n0x0125: 4, /* NORMDIST */\n0x0126: 1, /* NORMSDIST */\n0x0127: 3, /* NORMINV */\n0x0128: 1, /* NORMSINV */\n0x0129: 3, /* STANDARDIZE */\n0x012A: 1, /* ODD */\n0x012B: 2, /* PERMUT */\n0x012C: 3, /* POISSON */\n0x012D: 3, /* TDIST */\n0x012E: 4, /* WEIBULL */\n0x012F: 2, /* SUMXMY2 */\n0x0130: 2, /* SUMX2MY2 */\n0x0131: 2, /* SUMX2PY2 */\n0x0132: 2, /* CHITEST */\n0x0133: 2, /* CORREL */\n0x0134: 2, /* COVAR */\n0x0135: 3, /* FORECAST */\n0x0136: 2, /* FTEST */\n0x0137: 2, /* INTERCEPT */\n0x0138: 2, /* PEARSON */\n0x0139: 2, /* RSQ */\n0x013A: 2, /* STEYX */\n0x013B: 2, /* SLOPE */\n0x013C: 4, /* TTEST */\n0x0145: 2, /* LARGE */\n0x0146: 2, /* SMALL */\n0x0147: 2, /* QUARTILE */\n0x0148: 2, /* PERCENTILE */\n0x014B: 2, /* TRIMMEAN */\n0x014C: 2, /* TINV */\n0x0151: 2, /* POWER */\n0x0156: 1, /* RADIANS */\n0x0157: 1, /* DEGREES */\n0x015A: 2, /* COUNTIF */\n0x015B: 1, /* COUNTBLANK */\n0x015E: 4, /* ISPMT */\n0x015F: 3, /* DATEDIF */\n0x0160: 1, /* DATESTRING */\n0x0161: 2, /* NUMBERSTRING */\n0x0168: 1, /* PHONETIC */\n0x0170: 1, /* BAHTTEXT */\n0x0171: 1, /* THAIDAYOFWEEK */\n0x0172: 1, /* THAIDIGIT */\n0x0173: 1, /* THAIMONTHOFYEAR */\n0x0174: 1, /* THAINUMSOUND */\n0x0175: 1, /* THAINUMSTRING */\n0x0176: 1, /* THAISTRINGLENGTH */\n0x0177: 1, /* ISTHAIDIGIT */\n0x0178: 1, /* ROUNDBAHTDOWN */\n0x0179: 1, /* ROUNDBAHTUP */\n0x017A: 1, /* THAIYEAR */\n0x017E: 3, /* CUBEMEMBERPROPERTY */\n0x0181: 1, /* HEX2DEC */\n0x0188: 1, /* OCT2DEC */\n0x0189: 1, /* BIN2DEC */\n0x018C: 2, /* IMSUB */\n0x018D: 2, /* IMDIV */\n0x018E: 2, /* IMPOWER */\n0x018F: 1, /* IMABS */\n0x0190: 1, /* IMSQRT */\n0x0191: 1, /* IMLN */\n0x0192: 1, /* IMLOG2 */\n0x0193: 1, /* IMLOG10 */\n0x0194: 1, /* IMSIN */\n0x0195: 1, /* IMCOS */\n0x0196: 1, /* IMEXP */\n0x0197: 1, /* IMARGUMENT */\n0x0198: 1, /* IMCONJUGATE */\n0x0199: 1, /* IMAGINARY */\n0x019A: 1, /* IMREAL */\n0x019E: 4, /* SERIESSUM */\n0x019F: 1, /* FACTDOUBLE */\n0x01A0: 1, /* SQRTPI */\n0x01A1: 2, /* QUOTIENT */\n0x01A4: 1, /* ISEVEN */\n0x01A5: 1, /* ISODD */\n0x01A6: 2, /* MROUND */\n0x01A8: 1, /* ERFC */\n0x01A9: 2, /* BESSELJ */\n0x01AA: 2, /* BESSELK */\n0x01AB: 2, /* BESSELY */\n0x01AC: 2, /* BESSELI */\n0x01AE: 3, /* XNPV */\n0x01B6: 3, /* TBILLEQ */\n0x01B7: 3, /* TBILLPRICE */\n0x01B8: 3, /* TBILLYIELD */\n0x01BB: 2, /* DOLLARDE */\n0x01BC: 2, /* DOLLARFR */\n0x01BD: 2, /* NOMINAL */\n0x01BE: 2, /* EFFECT */\n0x01BF: 6, /* CUMPRINC */\n0x01C0: 6, /* CUMIPMT */\n0x01C1: 2, /* EDATE */\n0x01C2: 2, /* EOMONTH */\n0x01D0: 2, /* RANDBETWEEN */\n0x01D4: 3, /* CONVERT */\n0x01DC: 2, /* FVSCHEDULE */\n0x01DF: 1, /* CUBESETCOUNT */\n0x01E0: 2, /* IFERROR */\n0xFFFF: 0\n};\n/* [MS-XLSX] 2.2.3 Functions */\n/* [MS-XLSB] 2.5.97.10 Ftab */\nvar XLSXFutureFunctions = {\n\t\"_xlfn.ACOT\": \"ACOT\",\n\t\"_xlfn.ACOTH\": \"ACOTH\",\n\t\"_xlfn.AGGREGATE\": \"AGGREGATE\",\n\t\"_xlfn.ARABIC\": \"ARABIC\",\n\t\"_xlfn.AVERAGEIF\": \"AVERAGEIF\",\n\t\"_xlfn.AVERAGEIFS\": \"AVERAGEIFS\",\n\t\"_xlfn.BASE\": \"BASE\",\n\t\"_xlfn.BETA.DIST\": \"BETA.DIST\",\n\t\"_xlfn.BETA.INV\": \"BETA.INV\",\n\t\"_xlfn.BINOM.DIST\": \"BINOM.DIST\",\n\t\"_xlfn.BINOM.DIST.RANGE\": \"BINOM.DIST.RANGE\",\n\t\"_xlfn.BINOM.INV\": \"BINOM.INV\",\n\t\"_xlfn.BITAND\": \"BITAND\",\n\t\"_xlfn.BITLSHIFT\": \"BITLSHIFT\",\n\t\"_xlfn.BITOR\": \"BITOR\",\n\t\"_xlfn.BITRSHIFT\": \"BITRSHIFT\",\n\t\"_xlfn.BITXOR\": \"BITXOR\",\n\t\"_xlfn.CEILING.MATH\": \"CEILING.MATH\",\n\t\"_xlfn.CEILING.PRECISE\": \"CEILING.PRECISE\",\n\t\"_xlfn.CHISQ.DIST\": \"CHISQ.DIST\",\n\t\"_xlfn.CHISQ.DIST.RT\": \"CHISQ.DIST.RT\",\n\t\"_xlfn.CHISQ.INV\": \"CHISQ.INV\",\n\t\"_xlfn.CHISQ.INV.RT\": \"CHISQ.INV.RT\",\n\t\"_xlfn.CHISQ.TEST\": \"CHISQ.TEST\",\n\t\"_xlfn.COMBINA\": \"COMBINA\",\n\t\"_xlfn.CONCAT\": \"CONCAT\",\n\t\"_xlfn.CONFIDENCE.NORM\": \"CONFIDENCE.NORM\",\n\t\"_xlfn.CONFIDENCE.T\": \"CONFIDENCE.T\",\n\t\"_xlfn.COT\": \"COT\",\n\t\"_xlfn.COTH\": \"COTH\",\n\t\"_xlfn.COUNTIFS\": \"COUNTIFS\",\n\t\"_xlfn.COVARIANCE.P\": \"COVARIANCE.P\",\n\t\"_xlfn.COVARIANCE.S\": \"COVARIANCE.S\",\n\t\"_xlfn.CSC\": \"CSC\",\n\t\"_xlfn.CSCH\": \"CSCH\",\n\t\"_xlfn.DAYS\": \"DAYS\",\n\t\"_xlfn.DECIMAL\": \"DECIMAL\",\n\t\"_xlfn.ECMA.CEILING\": \"ECMA.CEILING\",\n\t\"_xlfn.ERF.PRECISE\": \"ERF.PRECISE\",\n\t\"_xlfn.ERFC.PRECISE\": \"ERFC.PRECISE\",\n\t\"_xlfn.EXPON.DIST\": \"EXPON.DIST\",\n\t\"_xlfn.F.DIST\": \"F.DIST\",\n\t\"_xlfn.F.DIST.RT\": \"F.DIST.RT\",\n\t\"_xlfn.F.INV\": \"F.INV\",\n\t\"_xlfn.F.INV.RT\": \"F.INV.RT\",\n\t\"_xlfn.F.TEST\": \"F.TEST\",\n\t\"_xlfn.FILTERXML\": \"FILTERXML\",\n\t\"_xlfn.FLOOR.MATH\": \"FLOOR.MATH\",\n\t\"_xlfn.FLOOR.PRECISE\": \"FLOOR.PRECISE\",\n\t\"_xlfn.FORECAST.ETS\": \"FORECAST.ETS\",\n\t\"_xlfn.FORECAST.ETS.CONFINT\": \"FORECAST.ETS.CONFINT\",\n\t\"_xlfn.FORECAST.ETS.SEASONALITY\": \"FORECAST.ETS.SEASONALITY\",\n\t\"_xlfn.FORECAST.ETS.STAT\": \"FORECAST.ETS.STAT\",\n\t\"_xlfn.FORECAST.LINEAR\": \"FORECAST.LINEAR\",\n\t\"_xlfn.FORMULATEXT\": \"FORMULATEXT\",\n\t\"_xlfn.GAMMA\": \"GAMMA\",\n\t\"_xlfn.GAMMA.DIST\": \"GAMMA.DIST\",\n\t\"_xlfn.GAMMA.INV\": \"GAMMA.INV\",\n\t\"_xlfn.GAMMALN.PRECISE\": \"GAMMALN.PRECISE\",\n\t\"_xlfn.GAUSS\": \"GAUSS\",\n\t\"_xlfn.HYPGEOM.DIST\": \"HYPGEOM.DIST\",\n\t\"_xlfn.IFERROR\": \"IFERROR\",\n\t\"_xlfn.IFNA\": \"IFNA\",\n\t\"_xlfn.IFS\": \"IFS\",\n\t\"_xlfn.IMCOSH\": \"IMCOSH\",\n\t\"_xlfn.IMCOT\": \"IMCOT\",\n\t\"_xlfn.IMCSC\": \"IMCSC\",\n\t\"_xlfn.IMCSCH\": \"IMCSCH\",\n\t\"_xlfn.IMSEC\": \"IMSEC\",\n\t\"_xlfn.IMSECH\": \"IMSECH\",\n\t\"_xlfn.IMSINH\": \"IMSINH\",\n\t\"_xlfn.IMTAN\": \"IMTAN\",\n\t\"_xlfn.ISFORMULA\": \"ISFORMULA\",\n\t\"_xlfn.ISO.CEILING\": \"ISO.CEILING\",\n\t\"_xlfn.ISOWEEKNUM\": \"ISOWEEKNUM\",\n\t\"_xlfn.LOGNORM.DIST\": \"LOGNORM.DIST\",\n\t\"_xlfn.LOGNORM.INV\": \"LOGNORM.INV\",\n\t\"_xlfn.MAXIFS\": \"MAXIFS\",\n\t\"_xlfn.MINIFS\": \"MINIFS\",\n\t\"_xlfn.MODE.MULT\": \"MODE.MULT\",\n\t\"_xlfn.MODE.SNGL\": \"MODE.SNGL\",\n\t\"_xlfn.MUNIT\": \"MUNIT\",\n\t\"_xlfn.NEGBINOM.DIST\": \"NEGBINOM.DIST\",\n\t\"_xlfn.NETWORKDAYS.INTL\": \"NETWORKDAYS.INTL\",\n\t\"_xlfn.NIGBINOM\": \"NIGBINOM\",\n\t\"_xlfn.NORM.DIST\": \"NORM.DIST\",\n\t\"_xlfn.NORM.INV\": \"NORM.INV\",\n\t\"_xlfn.NORM.S.DIST\": \"NORM.S.DIST\",\n\t\"_xlfn.NORM.S.INV\": \"NORM.S.INV\",\n\t\"_xlfn.NUMBERVALUE\": \"NUMBERVALUE\",\n\t\"_xlfn.PDURATION\": \"PDURATION\",\n\t\"_xlfn.PERCENTILE.EXC\": \"PERCENTILE.EXC\",\n\t\"_xlfn.PERCENTILE.INC\": \"PERCENTILE.INC\",\n\t\"_xlfn.PERCENTRANK.EXC\": \"PERCENTRANK.EXC\",\n\t\"_xlfn.PERCENTRANK.INC\": \"PERCENTRANK.INC\",\n\t\"_xlfn.PERMUTATIONA\": \"PERMUTATIONA\",\n\t\"_xlfn.PHI\": \"PHI\",\n\t\"_xlfn.POISSON.DIST\": \"POISSON.DIST\",\n\t\"_xlfn.QUARTILE.EXC\": \"QUARTILE.EXC\",\n\t\"_xlfn.QUARTILE.INC\": \"QUARTILE.INC\",\n\t\"_xlfn.QUERYSTRING\": \"QUERYSTRING\",\n\t\"_xlfn.RANK.AVG\": \"RANK.AVG\",\n\t\"_xlfn.RANK.EQ\": \"RANK.EQ\",\n\t\"_xlfn.RRI\": \"RRI\",\n\t\"_xlfn.SEC\": \"SEC\",\n\t\"_xlfn.SECH\": \"SECH\",\n\t\"_xlfn.SHEET\": \"SHEET\",\n\t\"_xlfn.SHEETS\": \"SHEETS\",\n\t\"_xlfn.SKEW.P\": \"SKEW.P\",\n\t\"_xlfn.STDEV.P\": \"STDEV.P\",\n\t\"_xlfn.STDEV.S\": \"STDEV.S\",\n\t\"_xlfn.SUMIFS\": \"SUMIFS\",\n\t\"_xlfn.SWITCH\": \"SWITCH\",\n\t\"_xlfn.T.DIST\": \"T.DIST\",\n\t\"_xlfn.T.DIST.2T\": \"T.DIST.2T\",\n\t\"_xlfn.T.DIST.RT\": \"T.DIST.RT\",\n\t\"_xlfn.T.INV\": \"T.INV\",\n\t\"_xlfn.T.INV.2T\": \"T.INV.2T\",\n\t\"_xlfn.T.TEST\": \"T.TEST\",\n\t\"_xlfn.TEXTJOIN\": \"TEXTJOIN\",\n\t\"_xlfn.UNICHAR\": \"UNICHAR\",\n\t\"_xlfn.UNICODE\": \"UNICODE\",\n\t\"_xlfn.VAR.P\": \"VAR.P\",\n\t\"_xlfn.VAR.S\": \"VAR.S\",\n\t\"_xlfn.WEBSERVICE\": \"WEBSERVICE\",\n\t\"_xlfn.WEIBULL.DIST\": \"WEIBULL.DIST\",\n\t\"_xlfn.WORKDAY.INTL\": \"WORKDAY.INTL\",\n\t\"_xlfn.XOR\": \"XOR\",\n\t\"_xlfn.Z.TEST\": \"Z.TEST\"\n};\n\n/* Part 3 TODO: actually parse formulae */\nfunction ods_to_csf_formula(f) {\n\tif(f.slice(0,3) == \"of:\") f = f.slice(3);\n\t/* 5.2 Basic Expressions */\n\tif(f.charCodeAt(0) == 61) {\n\t\tf = f.slice(1);\n\t\tif(f.charCodeAt(0) == 61) f = f.slice(1);\n\t}\n\tf = f.replace(/COM\\.MICROSOFT\\./g, \"\");\n\t/* Part 3 Section 5.8 References */\n\tf = f.replace(/\\[((?:\\.[A-Z]+[0-9]+)(?::\\.[A-Z]+[0-9]+)?)\\]/g, function($$, $1) { return $1.replace(/\\./g,\"\"); });\n\t/* TODO: something other than this */\n\tf = f.replace(/\\[.(#[A-Z]*[?!])\\]/g, \"$1\");\n\treturn f.replace(/[;~]/g,\",\").replace(/\\|/g,\";\");\n}\n\nfunction csf_to_ods_formula(f) {\n\tvar o = \"of:=\" + f.replace(crefregex, \"$1[.$2$3$4$5]\").replace(/\\]:\\[/g,\":\");\n\t/* TODO: something other than this */\n\treturn o.replace(/;/g, \"|\").replace(/,/g,\";\");\n}\n\nfunction ods_to_csf_3D(r) {\n\tvar a = r.split(\":\");\n\tvar s = a[0].split(\".\")[0];\n\treturn [s, a[0].split(\".\")[1] + (a.length > 1 ? (\":\" + (a[1].split(\".\")[1] || a[1].split(\".\")[0])) : \"\")];\n}\n\nfunction csf_to_ods_3D(r) {\n\treturn r.replace(/\\./,\"!\");\n}\n\nvar strs = {}; // shared strings\nvar _ssfopts = {}; // spreadsheet formatting options\n\nRELS.WS = [\n\t\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\",\n\t\"http://purl.oclc.org/ooxml/officeDocument/relationships/worksheet\"\n];\n\n/*global Map */\nvar browser_has_Map = typeof Map !== 'undefined';\n\nfunction get_sst_id(sst, str, rev) {\n\tvar i = 0, len = sst.length;\n\tif(rev) {\n\t\tif(browser_has_Map ? rev.has(str) : Object.prototype.hasOwnProperty.call(rev, str)) {\n\t\t\tvar revarr = browser_has_Map ? rev.get(str) : rev[str];\n\t\t\tfor(; i < revarr.length; ++i) {\n\t\t\t\tif(sst[revarr[i]].t === str) { sst.Count ++; return revarr[i]; }\n\t\t\t}\n\t\t}\n\t} else for(; i < len; ++i) {\n\t\tif(sst[i].t === str) { sst.Count ++; return i; }\n\t}\n\tsst[len] = ({t:str}); sst.Count ++; sst.Unique ++;\n\tif(rev) {\n\t\tif(browser_has_Map) {\n\t\t\tif(!rev.has(str)) rev.set(str, []);\n\t\t\trev.get(str).push(len);\n\t\t} else {\n\t\t\tif(!Object.prototype.hasOwnProperty.call(rev, str)) rev[str] = [];\n\t\t\trev[str].push(len);\n\t\t}\n\t}\n\treturn len;\n}\n\nfunction col_obj_w(C, col) {\n\tvar p = ({min:C+1,max:C+1});\n\t/* wch (chars), wpx (pixels) */\n\tvar wch = -1;\n\tif(col.MDW) MDW = col.MDW;\n\tif(col.width != null) p.customWidth = 1;\n\telse if(col.wpx != null) wch = px2char(col.wpx);\n\telse if(col.wch != null) wch = col.wch;\n\tif(wch > -1) { p.width = char2width(wch); p.customWidth = 1; }\n\telse if(col.width != null) p.width = col.width;\n\tif(col.hidden) p.hidden = true;\n\treturn p;\n}\n\nfunction default_margins(margins, mode) {\n\tif(!margins) return;\n\tvar defs = [0.7, 0.7, 0.75, 0.75, 0.3, 0.3];\n\tif(mode == 'xlml') defs = [1, 1, 1, 1, 0.5, 0.5];\n\tif(margins.left == null) margins.left = defs[0];\n\tif(margins.right == null) margins.right = defs[1];\n\tif(margins.top == null) margins.top = defs[2];\n\tif(margins.bottom == null) margins.bottom = defs[3];\n\tif(margins.header == null) margins.header = defs[4];\n\tif(margins.footer == null) margins.footer = defs[5];\n}\n\nfunction get_cell_style(styles, cell, opts) {\n\tvar z = opts.revssf[cell.z != null ? cell.z : \"General\"];\n\tvar i = 0x3c, len = styles.length;\n\tif(z == null && opts.ssf) {\n\t\tfor(; i < 0x188; ++i) if(opts.ssf[i] == null) {\n\t\t\tSSF.load(cell.z, i);\n\t\t\t// $FlowIgnore\n\t\t\topts.ssf[i] = cell.z;\n\t\t\topts.revssf[cell.z] = z = i;\n\t\t\tbreak;\n\t\t}\n\t}\n\tfor(i = 0; i != len; ++i) if(styles[i].numFmtId === z) return i;\n\tstyles[len] = {\n\t\tnumFmtId:z,\n\t\tfontId:0,\n\t\tfillId:0,\n\t\tborderId:0,\n\t\txfId:0,\n\t\tapplyNumberFormat:1\n\t};\n\treturn len;\n}\n\nfunction safe_format(p, fmtid, fillid, opts, themes, styles) {\n\ttry {\n\t\tif(opts.cellNF) p.z = SSF._table[fmtid];\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(p.t === 'z') return;\n\tif(p.t === 'd' && typeof p.v === 'string') p.v = parseDate(p.v);\n\tif(!opts || opts.cellText !== false) try {\n\t\tif(SSF._table[fmtid] == null) SSF.load(SSFImplicit[fmtid] || \"General\", fmtid);\n\t\tif(p.t === 'e') p.w = p.w || BErr[p.v];\n\t\telse if(fmtid === 0) {\n\t\t\tif(p.t === 'n') {\n\t\t\t\tif((p.v|0) === p.v) p.w = SSF._general_int(p.v);\n\t\t\t\telse p.w = SSF._general_num(p.v);\n\t\t\t}\n\t\t\telse if(p.t === 'd') {\n\t\t\t\tvar dd = datenum(p.v);\n\t\t\t\tif((dd|0) === dd) p.w = SSF._general_int(dd);\n\t\t\t\telse p.w = SSF._general_num(dd);\n\t\t\t}\n\t\t\telse if(p.v === undefined) return \"\";\n\t\t\telse p.w = SSF._general(p.v,_ssfopts);\n\t\t}\n\t\telse if(p.t === 'd') p.w = SSF.format(fmtid,datenum(p.v),_ssfopts);\n\t\telse p.w = SSF.format(fmtid,p.v,_ssfopts);\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(!opts.cellStyles) return;\n\tif(fillid != null) try {\n\t\tp.s = styles.Fills[fillid];\n\t\tif (p.s.fgColor && p.s.fgColor.theme && !p.s.fgColor.rgb) {\n\t\t\tp.s.fgColor.rgb = rgb_tint(themes.themeElements.clrScheme[p.s.fgColor.theme].rgb, p.s.fgColor.tint || 0);\n\t\t\tif(opts.WTF) p.s.fgColor.raw_rgb = themes.themeElements.clrScheme[p.s.fgColor.theme].rgb;\n\t\t}\n\t\tif (p.s.bgColor && p.s.bgColor.theme) {\n\t\t\tp.s.bgColor.rgb = rgb_tint(themes.themeElements.clrScheme[p.s.bgColor.theme].rgb, p.s.bgColor.tint || 0);\n\t\t\tif(opts.WTF) p.s.bgColor.raw_rgb = themes.themeElements.clrScheme[p.s.bgColor.theme].rgb;\n\t\t}\n\t} catch(e) { if(opts.WTF && styles.Fills) throw e; }\n}\n\nfunction check_ws(ws, sname, i) {\n\tif(ws && ws['!ref']) {\n\t\tvar range = safe_decode_range(ws['!ref']);\n\t\tif(range.e.c < range.s.c || range.e.r < range.s.r) throw new Error(\"Bad range (\" + i + \"): \" + ws['!ref']);\n\t}\n}\nfunction parse_ws_xml_dim(ws, s) {\n\tvar d = safe_decode_range(s);\n\tif(d.s.r<=d.e.r && d.s.c<=d.e.c && d.s.r>=0 && d.s.c>=0) ws[\"!ref\"] = encode_range(d);\n}\nvar mergecregex = /<(?:\\w:)?mergeCell ref=\"[A-Z0-9:]+\"\\s*[\\/]?>/g;\nvar sheetdataregex = /<(?:\\w+:)?sheetData[^>]*>([\\s\\S]*)<\\/(?:\\w+:)?sheetData>/;\nvar hlinkregex = /<(?:\\w:)?hyperlink [^>]*>/mg;\nvar dimregex = /\"(\\w*:\\w*)\"/;\nvar colregex = /<(?:\\w:)?col\\b[^>]*[\\/]?>/g;\nvar afregex = /<(?:\\w:)?autoFilter[^>]*([\\/]|>([\\s\\S]*)<\\/(?:\\w:)?autoFilter)>/g;\nvar marginregex= /<(?:\\w:)?pageMargins[^>]*\\/>/g;\nvar sheetprregex = /<(?:\\w:)?sheetPr\\b(?:[^>a-z][^>]*)?\\/>/;\nvar svsregex = /<(?:\\w:)?sheetViews[^>]*(?:[\\/]|>([\\s\\S]*)<\\/(?:\\w:)?sheetViews)>/;\n\n/* 18.3 Worksheets */\nfunction parse_ws_xml(data, opts, idx, rels, wb, themes, styles) {\n\tif(!data) return data;\n\tif(!rels) rels = {'!id':{}};\n\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\n\t/* 18.3.1.99 worksheet CT_Worksheet */\n\tvar s = opts.dense ? ([]) : ({});\n\tvar refguess = ({s: {r:2000000, c:2000000}, e: {r:0, c:0} });\n\n\tvar data1 = \"\", data2 = \"\";\n\tvar mtch = data.match(sheetdataregex);\n\tif(mtch) {\n\t\tdata1 = data.slice(0, mtch.index);\n\t\tdata2 = data.slice(mtch.index + mtch[0].length);\n\t} else data1 = data2 = data;\n\n\t/* 18.3.1.82 sheetPr CT_SheetPr */\n\tvar sheetPr = data1.match(sheetprregex);\n\tif(sheetPr) parse_ws_xml_sheetpr(sheetPr[0], s, wb, idx);\n\n\t/* 18.3.1.35 dimension CT_SheetDimension */\n\tvar ridx = (data1.match(/<(?:\\w*:)?dimension/)||{index:-1}).index;\n\tif(ridx > 0) {\n\t\tvar ref = data1.slice(ridx,ridx+50).match(dimregex);\n\t\tif(ref) parse_ws_xml_dim(s, ref[1]);\n\t}\n\n\t/* 18.3.1.88 sheetViews CT_SheetViews */\n\tvar svs = data1.match(svsregex);\n\tif(svs && svs[1]) parse_ws_xml_sheetviews(svs[1], wb);\n\n\t/* 18.3.1.17 cols CT_Cols */\n\tvar columns = [];\n\tif(opts.cellStyles) {\n\t\t/* 18.3.1.13 col CT_Col */\n\t\tvar cols = data1.match(colregex);\n\t\tif(cols) parse_ws_xml_cols(columns, cols);\n\t}\n\n\t/* 18.3.1.80 sheetData CT_SheetData ? */\n\tif(mtch) parse_ws_xml_data(mtch[1], s, opts, refguess, themes, styles);\n\n\t/* 18.3.1.2 autoFilter CT_AutoFilter */\n\tvar afilter = data2.match(afregex);\n\tif(afilter) s['!autofilter'] = parse_ws_xml_autofilter(afilter[0]);\n\n\t/* 18.3.1.55 mergeCells CT_MergeCells */\n\tvar merges = [];\n\tvar _merge = data2.match(mergecregex);\n\tif(_merge) for(ridx = 0; ridx != _merge.length; ++ridx)\n\t\tmerges[ridx] = safe_decode_range(_merge[ridx].slice(_merge[ridx].indexOf(\"\\\"\")+1));\n\n\t/* 18.3.1.48 hyperlinks CT_Hyperlinks */\n\tvar hlink = data2.match(hlinkregex);\n\tif(hlink) parse_ws_xml_hlinks(s, hlink, rels);\n\n\t/* 18.3.1.62 pageMargins CT_PageMargins */\n\tvar margins = data2.match(marginregex);\n\tif(margins) s['!margins'] = parse_ws_xml_margins(parsexmltag(margins[0]));\n\n\tif(!s[\"!ref\"] && refguess.e.c >= refguess.s.c && refguess.e.r >= refguess.s.r) s[\"!ref\"] = encode_range(refguess);\n\tif(opts.sheetRows > 0 && s[\"!ref\"]) {\n\t\tvar tmpref = safe_decode_range(s[\"!ref\"]);\n\t\tif(opts.sheetRows <= +tmpref.e.r) {\n\t\t\ttmpref.e.r = opts.sheetRows - 1;\n\t\t\tif(tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r;\n\t\t\tif(tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r;\n\t\t\tif(tmpref.e.c > refguess.e.c) tmpref.e.c = refguess.e.c;\n\t\t\tif(tmpref.e.c < tmpref.s.c) tmpref.s.c = tmpref.e.c;\n\t\t\ts[\"!fullref\"] = s[\"!ref\"];\n\t\t\ts[\"!ref\"] = encode_range(tmpref);\n\t\t}\n\t}\n\tif(columns.length > 0) s[\"!cols\"] = columns;\n\tif(merges.length > 0) s[\"!merges\"] = merges;\n\treturn s;\n}\n\nfunction write_ws_xml_merges(merges) {\n\tif(merges.length === 0) return \"\";\n\tvar o = '';\n\tfor(var i = 0; i != merges.length; ++i) o += '';\n\treturn o + '';\n}\n\n/* 18.3.1.82-3 sheetPr CT_ChartsheetPr / CT_SheetPr */\nfunction parse_ws_xml_sheetpr(sheetPr, s, wb, idx) {\n\tvar data = parsexmltag(sheetPr);\n\tif(!wb.Sheets[idx]) wb.Sheets[idx] = {};\n\tif(data.codeName) wb.Sheets[idx].CodeName = data.codeName;\n}\nfunction write_ws_xml_sheetpr(ws, wb, idx, opts, o) {\n\tvar needed = false;\n\tvar props = {}, payload = null;\n\tif(opts.bookType !== 'xlsx' && wb.vbaraw) {\n\t\tvar cname = wb.SheetNames[idx];\n\t\ttry { if(wb.Workbook) cname = wb.Workbook.Sheets[idx].CodeName || cname; } catch(e) {}\n\t\tneeded = true;\n\t\tprops.codeName = escapexml(cname);\n\t}\n\n\tif(!needed && !payload) return;\n\to[o.length] = (writextag('sheetPr', payload, props));\n}\n\n/* 18.3.1.85 sheetProtection CT_SheetProtection */\nvar sheetprot_deffalse = [\"objects\", \"scenarios\", \"selectLockedCells\", \"selectUnlockedCells\"];\nvar sheetprot_deftrue = [\n\t\"formatColumns\", \"formatRows\", \"formatCells\",\n\t\"insertColumns\", \"insertRows\", \"insertHyperlinks\",\n\t\"deleteColumns\", \"deleteRows\",\n\t\"sort\", \"autoFilter\", \"pivotTables\"\n];\nfunction write_ws_xml_protection(sp) {\n\t// algorithmName, hashValue, saltValue, spinCountpassword\n\tvar o = ({sheet:1});\n\tsheetprot_deffalse.forEach(function(n) { if(sp[n] != null && sp[n]) o[n] = \"1\"; });\n\tsheetprot_deftrue.forEach(function(n) { if(sp[n] != null && !sp[n]) o[n] = \"0\"; });\n\t/* TODO: algorithm */\n\tif(sp.password) o.password = crypto_CreatePasswordVerifier_Method1(sp.password).toString(16).toUpperCase();\n\treturn writextag('sheetProtection', null, o);\n}\n\nfunction parse_ws_xml_hlinks(s, data, rels) {\n\tvar dense = Array.isArray(s);\n\tfor(var i = 0; i != data.length; ++i) {\n\t\tvar val = parsexmltag(utf8read(data[i]), true);\n\t\tif(!val.ref) return;\n\t\tvar rel = ((rels || {})['!id']||[])[val.id];\n\t\tif(rel) {\n\t\t\tval.Target = rel.Target;\n\t\t\tif(val.location) val.Target += \"#\"+val.location;\n\t\t} else {\n\t\t\tval.Target = \"#\" + val.location;\n\t\t\trel = {Target: val.Target, TargetMode: 'Internal'};\n\t\t}\n\t\tval.Rel = rel;\n\t\tif(val.tooltip) { val.Tooltip = val.tooltip; delete val.tooltip; }\n\t\tvar rng = safe_decode_range(val.ref);\n\t\tfor(var R=rng.s.r;R<=rng.e.r;++R) for(var C=rng.s.c;C<=rng.e.c;++C) {\n\t\t\tvar addr = encode_cell({c:C,r:R});\n\t\t\tif(dense) {\n\t\t\t\tif(!s[R]) s[R] = [];\n\t\t\t\tif(!s[R][C]) s[R][C] = {t:\"z\",v:undefined};\n\t\t\t\ts[R][C].l = val;\n\t\t\t} else {\n\t\t\t\tif(!s[addr]) s[addr] = {t:\"z\",v:undefined};\n\t\t\t\ts[addr].l = val;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction parse_ws_xml_margins(margin) {\n\tvar o = {};\n\t[\"left\", \"right\", \"top\", \"bottom\", \"header\", \"footer\"].forEach(function(k) {\n\t\tif(margin[k]) o[k] = parseFloat(margin[k]);\n\t});\n\treturn o;\n}\nfunction write_ws_xml_margins(margin) {\n\tdefault_margins(margin);\n\treturn writextag('pageMargins', null, margin);\n}\n\nfunction parse_ws_xml_cols(columns, cols) {\n\tvar seencol = false;\n\tfor(var coli = 0; coli != cols.length; ++coli) {\n\t\tvar coll = parsexmltag(cols[coli], true);\n\t\tif(coll.hidden) coll.hidden = parsexmlbool(coll.hidden);\n\t\tvar colm=parseInt(coll.min, 10)-1, colM=parseInt(coll.max,10)-1;\n\t\tdelete coll.min; delete coll.max; coll.width = +coll.width;\n\t\tif(!seencol && coll.width) { seencol = true; find_mdw_colw(coll.width); }\n\t\tprocess_col(coll);\n\t\twhile(colm <= colM) columns[colm++] = dup(coll);\n\t}\n}\nfunction write_ws_xml_cols(ws, cols) {\n\tvar o = [\"\"], col;\n\tfor(var i = 0; i != cols.length; ++i) {\n\t\tif(!(col = cols[i])) continue;\n\t\to[o.length] = (writextag('col', null, col_obj_w(i, col)));\n\t}\n\to[o.length] = \"\";\n\treturn o.join(\"\");\n}\n\nfunction parse_ws_xml_autofilter(data) {\n\tvar o = { ref: (data.match(/ref=\"([^\"]*)\"/)||[])[1]};\n\treturn o;\n}\nfunction write_ws_xml_autofilter(data, ws, wb, idx) {\n\tvar ref = typeof data.ref == \"string\" ? data.ref : encode_range(data.ref);\n\tif(!wb.Workbook) wb.Workbook = ({Sheets:[]});\n\tif(!wb.Workbook.Names) wb.Workbook.Names = [];\n\tvar names = wb.Workbook.Names;\n\tvar range = decode_range(ref);\n\tif(range.s.r == range.e.r) { range.e.r = decode_range(ws[\"!ref\"]).e.r; ref = encode_range(range); }\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar name = names[i];\n\t\tif(name.Name != '_xlnm._FilterDatabase') continue;\n\t\tif(name.Sheet != idx) continue;\n\t\tname.Ref = \"'\" + wb.SheetNames[idx] + \"'!\" + ref; break;\n\t}\n\tif(i == names.length) names.push({ Name: '_xlnm._FilterDatabase', Sheet: idx, Ref: \"'\" + wb.SheetNames[idx] + \"'!\" + ref });\n\treturn writextag(\"autoFilter\", null, {ref:ref});\n}\n\n/* 18.3.1.88 sheetViews CT_SheetViews */\n/* 18.3.1.87 sheetView CT_SheetView */\nvar sviewregex = /<(?:\\w:)?sheetView(?:[^>a-z][^>]*)?\\/?>/;\nfunction parse_ws_xml_sheetviews(data, wb) {\n\tif(!wb.Views) wb.Views = [{}];\n\t(data.match(sviewregex)||[]).forEach(function(r, i) {\n\t\tvar tag = parsexmltag(r);\n\t\t// $FlowIgnore\n\t\tif(!wb.Views[i]) wb.Views[i] = {};\n\t\t// $FlowIgnore\n\t\tif(parsexmlbool(tag.rightToLeft)) wb.Views[i].RTL = true;\n\t});\n}\nfunction write_ws_xml_sheetviews(ws, opts, idx, wb) {\n\tvar sview = ({workbookViewId:\"0\"});\n\t// $FlowIgnore\n\tif((((wb||{}).Workbook||{}).Views||[])[0]) sview.rightToLeft = wb.Workbook.Views[0].RTL ? \"1\" : \"0\";\n\treturn writextag(\"sheetViews\", writextag(\"sheetView\", null, sview), {});\n}\n\nfunction write_ws_xml_cell(cell, ref, ws, opts) {\n\tif(cell.v === undefined && typeof cell.f !== \"string\" || cell.t === 'z') return \"\";\n\tvar vv = \"\";\n\tvar oldt = cell.t, oldv = cell.v;\n\tif(cell.t !== \"z\") switch(cell.t) {\n\t\tcase 'b': vv = cell.v ? \"1\" : \"0\"; break;\n\t\tcase 'n': vv = ''+cell.v; break;\n\t\tcase 'e': vv = BErr[cell.v]; break;\n\t\tcase 'd':\n\t\t\tif(opts && opts.cellDates) vv = parseDate(cell.v, -1).toISOString();\n\t\t\telse {\n\t\t\t\tcell = dup(cell);\n\t\t\t\tcell.t = 'n';\n\t\t\t\tvv = ''+(cell.v = datenum(parseDate(cell.v)));\n\t\t\t}\n\t\t\tif(typeof cell.z === 'undefined') cell.z = SSF._table[14];\n\t\t\tbreak;\n\t\tdefault: vv = cell.v; break;\n\t}\n\tvar v = writetag('v', escapexml(vv)), o = ({r:ref});\n\t/* TODO: cell style */\n\tvar os = get_cell_style(opts.cellXfs, cell, opts);\n\tif(os !== 0) o.s = os;\n\tswitch(cell.t) {\n\t\tcase 'n': break;\n\t\tcase 'd': o.t = \"d\"; break;\n\t\tcase 'b': o.t = \"b\"; break;\n\t\tcase 'e': o.t = \"e\"; break;\n\t\tcase 'z': break;\n\t\tdefault: if(cell.v == null) { delete cell.t; break; }\n\t\t\tif(opts && opts.bookSST) {\n\t\t\t\tv = writetag('v', ''+get_sst_id(opts.Strings, cell.v, opts.revStrings));\n\t\t\t\to.t = \"s\"; break;\n\t\t\t}\n\t\t\to.t = \"str\"; break;\n\t}\n\tif(cell.t != oldt) { cell.t = oldt; cell.v = oldv; }\n\tif(typeof cell.f == \"string\" && cell.f) {\n\t\tvar ff = cell.F && cell.F.slice(0, ref.length) == ref ? {t:\"array\", ref:cell.F} : null;\n\t\tv = writextag('f', escapexml(cell.f), ff) + (cell.v != null ? v : \"\");\n\t}\n\tif(cell.l) ws['!links'].push([ref, cell.l]);\n\tif(cell.c) ws['!comments'].push([ref, cell.c]);\n\treturn writextag('c', v, o);\n}\n\nvar parse_ws_xml_data = (function() {\n\tvar cellregex = /<(?:\\w+:)?c[ >]/, rowregex = /<\\/(?:\\w+:)?row>/;\n\tvar rregex = /r=[\"']([^\"']*)[\"']/, isregex = /<(?:\\w+:)?is>([\\S\\s]*?)<\\/(?:\\w+:)?is>/;\n\tvar refregex = /ref=[\"']([^\"']*)[\"']/;\n\tvar match_v = matchtag(\"v\"), match_f = matchtag(\"f\");\n\nreturn function parse_ws_xml_data(sdata, s, opts, guess, themes, styles) {\n\tvar ri = 0, x = \"\", cells = [], cref = [], idx=0, i=0, cc=0, d=\"\", p;\n\tvar tag, tagr = 0, tagc = 0;\n\tvar sstr, ftag;\n\tvar fmtid = 0, fillid = 0;\n\tvar do_format = Array.isArray(styles.CellXf), cf;\n\tvar arrayf = [];\n\tvar sharedf = [];\n\tvar dense = Array.isArray(s);\n\tvar rows = [], rowobj = {}, rowrite = false;\n\tfor(var marr = sdata.split(rowregex), mt = 0, marrlen = marr.length; mt != marrlen; ++mt) {\n\t\tx = marr[mt].trim();\n\t\tvar xlen = x.length;\n\t\tif(xlen === 0) continue;\n\n\t\t/* 18.3.1.73 row CT_Row */\n\t\tfor(ri = 0; ri < xlen; ++ri) if(x.charCodeAt(ri) === 62) break; ++ri;\n\t\ttag = parsexmltag(x.slice(0,ri), true);\n\t\ttagr = tag.r != null ? parseInt(tag.r, 10) : tagr+1; tagc = -1;\n\t\tif(opts.sheetRows && opts.sheetRows < tagr) continue;\n\t\tif(guess.s.r > tagr - 1) guess.s.r = tagr - 1;\n\t\tif(guess.e.r < tagr - 1) guess.e.r = tagr - 1;\n\n\t\tif(opts && opts.cellStyles) {\n\t\t\trowobj = {}; rowrite = false;\n\t\t\tif(tag.ht) { rowrite = true; rowobj.hpt = parseFloat(tag.ht); rowobj.hpx = pt2px(rowobj.hpt); }\n\t\t\tif(tag.hidden == \"1\") { rowrite = true; rowobj.hidden = true; }\n\t\t\tif(tag.outlineLevel != null) { rowrite = true; rowobj.level = +tag.outlineLevel; }\n\t\t\tif(rowrite) rows[tagr-1] = rowobj;\n\t\t}\n\n\t\t/* 18.3.1.4 c CT_Cell */\n\t\tcells = x.slice(ri).split(cellregex);\n\t\tfor(var rslice = 0; rslice != cells.length; ++rslice) if(cells[rslice].trim().charAt(0) != \"<\") break;\n\t\tcells = cells.slice(rslice);\n\t\tfor(ri = 0; ri != cells.length; ++ri) {\n\t\t\tx = cells[ri].trim();\n\t\t\tif(x.length === 0) continue;\n\t\t\tcref = x.match(rregex); idx = ri; i=0; cc=0;\n\t\t\tx = \"\":\"\") + x;\n\t\t\tif(cref != null && cref.length === 2) {\n\t\t\t\tidx = 0; d=cref[1];\n\t\t\t\tfor(i=0; i != d.length; ++i) {\n\t\t\t\t\tif((cc=d.charCodeAt(i)-64) < 1 || cc > 26) break;\n\t\t\t\t\tidx = 26*idx + cc;\n\t\t\t\t}\n\t\t\t\t--idx;\n\t\t\t\ttagc = idx;\n\t\t\t} else ++tagc;\n\t\t\tfor(i = 0; i != x.length; ++i) if(x.charCodeAt(i) === 62) break; ++i;\n\t\t\ttag = parsexmltag(x.slice(0,i), true);\n\t\t\tif(!tag.r) tag.r = encode_cell({r:tagr-1, c:tagc});\n\t\t\td = x.slice(i);\n\t\t\tp = ({t:\"\"});\n\n\t\t\tif((cref=d.match(match_v))!= null && cref[1] !== '') p.v=unescapexml(cref[1]);\n\t\t\tif(opts.cellFormula) {\n\t\t\t\tif((cref=d.match(match_f))!= null && cref[1] !== '') {\n\t\t\t\t\t/* TODO: match against XLSXFutureFunctions */\n\t\t\t\t\tp.f=unescapexml(utf8read(cref[1]));\n\t\t\t\t\tif(!opts.xlfn) p.f = _xlfn(p.f);\n\t\t\t\t\tif(cref[0].indexOf('t=\"array\"') > -1) {\n\t\t\t\t\t\tp.F = (d.match(refregex)||[])[1];\n\t\t\t\t\t\tif(p.F.indexOf(\":\") > -1) arrayf.push([safe_decode_range(p.F), p.F]);\n\t\t\t\t\t} else if(cref[0].indexOf('t=\"shared\"') > -1) {\n\t\t\t\t\t\t// TODO: parse formula\n\t\t\t\t\t\tftag = parsexmltag(cref[0]);\n\t\t\t\t\t\tvar ___f = unescapexml(utf8read(cref[1]));\n\t\t\t\t\t\tif(!opts.xlfn) ___f = _xlfn(___f);\n\t\t\t\t\t\tsharedf[parseInt(ftag.si, 10)] = [ftag, ___f, tag.r];\n\t\t\t\t\t}\n\t\t\t\t} else if((cref=d.match(/]*\\/>/))) {\n\t\t\t\t\tftag = parsexmltag(cref[0]);\n\t\t\t\t\tif(sharedf[ftag.si]) p.f = shift_formula_xlsx(sharedf[ftag.si][1], sharedf[ftag.si][2]/*[0].ref*/, tag.r);\n\t\t\t\t}\n\t\t\t\t/* TODO: factor out contains logic */\n\t\t\t\tvar _tag = decode_cell(tag.r);\n\t\t\t\tfor(i = 0; i < arrayf.length; ++i)\n\t\t\t\t\tif(_tag.r >= arrayf[i][0].s.r && _tag.r <= arrayf[i][0].e.r)\n\t\t\t\t\t\tif(_tag.c >= arrayf[i][0].s.c && _tag.c <= arrayf[i][0].e.c)\n\t\t\t\t\t\t\tp.F = arrayf[i][1];\n\t\t\t}\n\n\t\t\tif(tag.t == null && p.v === undefined) {\n\t\t\t\tif(p.f || p.F) {\n\t\t\t\t\tp.v = 0; p.t = \"n\";\n\t\t\t\t} else if(!opts.sheetStubs) continue;\n\t\t\t\telse p.t = \"z\";\n\t\t\t}\n\t\t\telse p.t = tag.t || \"n\";\n\t\t\tif(guess.s.c > tagc) guess.s.c = tagc;\n\t\t\tif(guess.e.c < tagc) guess.e.c = tagc;\n\t\t\t/* 18.18.11 t ST_CellType */\n\t\t\tswitch(p.t) {\n\t\t\t\tcase 'n':\n\t\t\t\t\tif(p.v == \"\" || p.v == null) {\n\t\t\t\t\t\tif(!opts.sheetStubs) continue;\n\t\t\t\t\t\tp.t = 'z';\n\t\t\t\t\t} else p.v = parseFloat(p.v);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 's':\n\t\t\t\t\tif(typeof p.v == 'undefined') {\n\t\t\t\t\t\tif(!opts.sheetStubs) continue;\n\t\t\t\t\t\tp.t = 'z';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsstr = strs[parseInt(p.v, 10)];\n\t\t\t\t\t\tp.v = sstr.t;\n\t\t\t\t\t\tp.r = sstr.r;\n\t\t\t\t\t\tif(opts.cellHTML) p.h = sstr.h;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'str':\n\t\t\t\t\tp.t = \"s\";\n\t\t\t\t\tp.v = (p.v!=null) ? utf8read(p.v) : '';\n\t\t\t\t\tif(opts.cellHTML) p.h = escapehtml(p.v);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'inlineStr':\n\t\t\t\t\tcref = d.match(isregex);\n\t\t\t\t\tp.t = 's';\n\t\t\t\t\tif(cref != null && (sstr = parse_si(cref[1]))) {\n\t\t\t\t\t\tp.v = sstr.t;\n\t\t\t\t\t\tif(opts.cellHTML) p.h = sstr.h;\n\t\t\t\t\t} else p.v = \"\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'b': p.v = parsexmlbool(p.v); break;\n\t\t\t\tcase 'd':\n\t\t\t\t\tif(opts.cellDates) p.v = parseDate(p.v, 1);\n\t\t\t\t\telse { p.v = datenum(parseDate(p.v, 1)); p.t = 'n'; }\n\t\t\t\t\tbreak;\n\t\t\t\t/* error string in .w, number in .v */\n\t\t\t\tcase 'e':\n\t\t\t\t\tif(!opts || opts.cellText !== false) p.w = p.v;\n\t\t\t\t\tp.v = RBErr[p.v]; break;\n\t\t\t}\n\t\t\t/* formatting */\n\t\t\tfmtid = fillid = 0;\n\t\t\tcf = null;\n\t\t\tif(do_format && tag.s !== undefined) {\n\t\t\t\tcf = styles.CellXf[tag.s];\n\t\t\t\tif(cf != null) {\n\t\t\t\t\tif(cf.numFmtId != null) fmtid = cf.numFmtId;\n\t\t\t\t\tif(opts.cellStyles) {\n\t\t\t\t\t\tif(cf.fillId != null) fillid = cf.fillId;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tsafe_format(p, fmtid, fillid, opts, themes, styles);\n\t\t\tif(opts.cellDates && do_format && p.t == 'n' && SSF.is_date(SSF._table[fmtid])) { p.t = 'd'; p.v = numdate(p.v); }\n\t\t\tif(dense) {\n\t\t\t\tvar _r = decode_cell(tag.r);\n\t\t\t\tif(!s[_r.r]) s[_r.r] = [];\n\t\t\t\ts[_r.r][_r.c] = p;\n\t\t\t} else s[tag.r] = p;\n\t\t}\n\t}\n\tif(rows.length > 0) s['!rows'] = rows;\n}; })();\n\nfunction write_ws_xml_data(ws, opts, idx, wb) {\n\tvar o = [], r = [], range = safe_decode_range(ws['!ref']), cell=\"\", ref, rr = \"\", cols = [], R=0, C=0, rows = ws['!rows'];\n\tvar dense = Array.isArray(ws);\n\tvar params = ({r:rr}), row, height = -1;\n\tfor(C = range.s.c; C <= range.e.c; ++C) cols[C] = encode_col(C);\n\tfor(R = range.s.r; R <= range.e.r; ++R) {\n\t\tr = [];\n\t\trr = encode_row(R);\n\t\tfor(C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tref = cols[C] + rr;\n\t\t\tvar _cell = dense ? (ws[R]||[])[C]: ws[ref];\n\t\t\tif(_cell === undefined) continue;\n\t\t\tif((cell = write_ws_xml_cell(_cell, ref, ws, opts, idx, wb)) != null) r.push(cell);\n\t\t}\n\t\tif(r.length > 0 || (rows && rows[R])) {\n\t\t\tparams = ({r:rr});\n\t\t\tif(rows && rows[R]) {\n\t\t\t\trow = rows[R];\n\t\t\t\tif(row.hidden) params.hidden = 1;\n\t\t\t\theight = -1;\n\t\t\t\tif(row.hpx) height = px2pt(row.hpx);\n\t\t\t\telse if(row.hpt) height = row.hpt;\n\t\t\t\tif(height > -1) { params.ht = height; params.customHeight = 1; }\n\t\t\t\tif(row.level) { params.outlineLevel = row.level; }\n\t\t\t}\n\t\t\to[o.length] = (writextag('row', r.join(\"\"), params));\n\t\t}\n\t}\n\tif(rows) for(; R < rows.length; ++R) {\n\t\tif(rows && rows[R]) {\n\t\t\tparams = ({r:R+1});\n\t\t\trow = rows[R];\n\t\t\tif(row.hidden) params.hidden = 1;\n\t\t\theight = -1;\n\t\t\tif (row.hpx) height = px2pt(row.hpx);\n\t\t\telse if (row.hpt) height = row.hpt;\n\t\t\tif (height > -1) { params.ht = height; params.customHeight = 1; }\n\t\t\tif (row.level) { params.outlineLevel = row.level; }\n\t\t\to[o.length] = (writextag('row', \"\", params));\n\t\t}\n\t}\n\treturn o.join(\"\");\n}\n\nvar WS_XML_ROOT = writextag('worksheet', null, {\n\t'xmlns': XMLNS.main[0],\n\t'xmlns:r': XMLNS.r\n});\n\nfunction write_ws_xml(idx, opts, wb, rels) {\n\tvar o = [XML_HEADER, WS_XML_ROOT];\n\tvar s = wb.SheetNames[idx], sidx = 0, rdata = \"\";\n\tvar ws = wb.Sheets[s];\n\tif(ws == null) ws = {};\n\tvar ref = ws['!ref'] || 'A1';\n\tvar range = safe_decode_range(ref);\n\tif(range.e.c > 0x3FFF || range.e.r > 0xFFFFF) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + ref + \" exceeds format limit A1:XFD1048576\");\n\t\trange.e.c = Math.min(range.e.c, 0x3FFF);\n\t\trange.e.r = Math.min(range.e.c, 0xFFFFF);\n\t\tref = encode_range(range);\n\t}\n\tif(!rels) rels = {};\n\tws['!comments'] = [];\n\tvar _drawing = [];\n\n\twrite_ws_xml_sheetpr(ws, wb, idx, opts, o);\n\n\to[o.length] = (writextag('dimension', null, {'ref': ref}));\n\n\to[o.length] = write_ws_xml_sheetviews(ws, opts, idx, wb);\n\n\t/* TODO: store in WB, process styles */\n\tif(opts.sheetFormat) o[o.length] = (writextag('sheetFormatPr', null, {\n\t\tdefaultRowHeight:opts.sheetFormat.defaultRowHeight||'16',\n\t\tbaseColWidth:opts.sheetFormat.baseColWidth||'10',\n\t\toutlineLevelRow:opts.sheetFormat.outlineLevelRow||'7'\n\t}));\n\n\tif(ws['!cols'] != null && ws['!cols'].length > 0) o[o.length] = (write_ws_xml_cols(ws, ws['!cols']));\n\n\to[sidx = o.length] = '';\n\tws['!links'] = [];\n\tif(ws['!ref'] != null) {\n\t\trdata = write_ws_xml_data(ws, opts, idx, wb, rels);\n\t\tif(rdata.length > 0) o[o.length] = (rdata);\n\t}\n\tif(o.length>sidx+1) { o[o.length] = (''); o[sidx]=o[sidx].replace(\"/>\",\">\"); }\n\n\t/* sheetCalcPr */\n\n\tif(ws['!protect'] != null) o[o.length] = write_ws_xml_protection(ws['!protect']);\n\n\t/* protectedRanges */\n\t/* scenarios */\n\n\tif(ws['!autofilter'] != null) o[o.length] = write_ws_xml_autofilter(ws['!autofilter'], ws, wb, idx);\n\n\t/* sortState */\n\t/* dataConsolidate */\n\t/* customSheetViews */\n\n\tif(ws['!merges'] != null && ws['!merges'].length > 0) o[o.length] = (write_ws_xml_merges(ws['!merges']));\n\n\t/* phoneticPr */\n\t/* conditionalFormatting */\n\t/* dataValidations */\n\n\tvar relc = -1, rel, rId = -1;\n\tif(ws['!links'].length > 0) {\n\t\to[o.length] = \"\";\nws['!links'].forEach(function(l) {\n\t\t\tif(!l[1].Target) return;\n\t\t\trel = ({\"ref\":l[0]});\n\t\t\tif(l[1].Target.charAt(0) != \"#\") {\n\t\t\t\trId = add_rels(rels, -1, escapexml(l[1].Target).replace(/#.*$/, \"\"), RELS.HLINK);\n\t\t\t\trel[\"r:id\"] = \"rId\"+rId;\n\t\t\t}\n\t\t\tif((relc = l[1].Target.indexOf(\"#\")) > -1) rel.location = escapexml(l[1].Target.slice(relc+1));\n\t\t\tif(l[1].Tooltip) rel.tooltip = escapexml(l[1].Tooltip);\n\t\t\to[o.length] = writextag(\"hyperlink\",null,rel);\n\t\t});\n\t\to[o.length] = \"\";\n\t}\n\tdelete ws['!links'];\n\n\t/* printOptions */\n\n\tif(ws['!margins'] != null) o[o.length] = write_ws_xml_margins(ws['!margins']);\n\n\t/* pageSetup */\n\t/* headerFooter */\n\t/* rowBreaks */\n\t/* colBreaks */\n\t/* customProperties */\n\t/* cellWatches */\n\n\tif(!opts || opts.ignoreEC || (opts.ignoreEC == (void 0))) o[o.length] = writetag(\"ignoredErrors\", writextag(\"ignoredError\", null, {numberStoredAsText:1, sqref:ref}));\n\n\t/* smartTags */\n\n\tif(_drawing.length > 0) {\n\t\trId = add_rels(rels, -1, \"../drawings/drawing\" + (idx+1) + \".xml\", RELS.DRAW);\n\t\to[o.length] = writextag(\"drawing\", null, {\"r:id\":\"rId\" + rId});\n\t\tws['!drawing'] = _drawing;\n\t}\n\n\tif(ws['!comments'].length > 0) {\n\t\trId = add_rels(rels, -1, \"../drawings/vmlDrawing\" + (idx+1) + \".vml\", RELS.VML);\n\t\to[o.length] = writextag(\"legacyDrawing\", null, {\"r:id\":\"rId\" + rId});\n\t\tws['!legacy'] = rId;\n\t}\n\n\t/* legacyDrawingHF */\n\t/* picture */\n\t/* oleObjects */\n\t/* controls */\n\t/* webPublishItems */\n\t/* tableParts */\n\t/* extLst */\n\n\tif(o.length>1) { o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n\n/* [MS-XLSB] 2.4.726 BrtRowHdr */\nfunction parse_BrtRowHdr(data, length) {\n\tvar z = ({});\n\tvar tgt = data.l + length;\n\tz.r = data.read_shift(4);\n\tdata.l += 4; // TODO: ixfe\n\tvar miyRw = data.read_shift(2);\n\tdata.l += 1; // TODO: top/bot padding\n\tvar flags = data.read_shift(1);\n\tdata.l = tgt;\n\tif(flags & 0x07) z.level = flags & 0x07;\n\tif(flags & 0x10) z.hidden = true;\n\tif(flags & 0x20) z.hpt = miyRw / 20;\n\treturn z;\n}\nfunction write_BrtRowHdr(R, range, ws) {\n\tvar o = new_buf(17+8*16);\n\tvar row = (ws['!rows']||[])[R]||{};\n\to.write_shift(4, R);\n\n\to.write_shift(4, 0); /* TODO: ixfe */\n\n\tvar miyRw = 0x0140;\n\tif(row.hpx) miyRw = px2pt(row.hpx) * 20;\n\telse if(row.hpt) miyRw = row.hpt * 20;\n\to.write_shift(2, miyRw);\n\n\to.write_shift(1, 0); /* top/bot padding */\n\n\tvar flags = 0x0;\n\tif(row.level) flags |= row.level;\n\tif(row.hidden) flags |= 0x10;\n\tif(row.hpx || row.hpt) flags |= 0x20;\n\to.write_shift(1, flags);\n\n\to.write_shift(1, 0); /* phonetic guide */\n\n\t/* [MS-XLSB] 2.5.8 BrtColSpan explains the mechanism */\n\tvar ncolspan = 0, lcs = o.l;\n\to.l += 4;\n\n\tvar caddr = {r:R, c:0};\n\tfor(var i = 0; i < 16; ++i) {\n\t\tif((range.s.c > ((i+1) << 10)) || (range.e.c < (i << 10))) continue;\n\t\tvar first = -1, last = -1;\n\t\tfor(var j = (i<<10); j < ((i+1)<<10); ++j) {\n\t\t\tcaddr.c = j;\n\t\t\tvar cell = Array.isArray(ws) ? (ws[caddr.r]||[])[caddr.c] : ws[encode_cell(caddr)];\n\t\t\tif(cell) { if(first < 0) first = j; last = j; }\n\t\t}\n\t\tif(first < 0) continue;\n\t\t++ncolspan;\n\t\to.write_shift(4, first);\n\t\to.write_shift(4, last);\n\t}\n\n\tvar l = o.l;\n\to.l = lcs;\n\to.write_shift(4, ncolspan);\n\to.l = l;\n\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\nfunction write_row_header(ba, ws, range, R) {\n\tvar o = write_BrtRowHdr(R, range, ws);\n\tif((o.length > 17) || (ws['!rows']||[])[R]) write_record(ba, 'BrtRowHdr', o);\n}\n\n/* [MS-XLSB] 2.4.820 BrtWsDim */\nvar parse_BrtWsDim = parse_UncheckedRfX;\nvar write_BrtWsDim = write_UncheckedRfX;\n\n/* [MS-XLSB] 2.4.821 BrtWsFmtInfo */\nfunction parse_BrtWsFmtInfo() {\n}\n//function write_BrtWsFmtInfo(ws, o) { }\n\n/* [MS-XLSB] 2.4.823 BrtWsProp */\nfunction parse_BrtWsProp(data, length) {\n\tvar z = {};\n\t/* TODO: pull flags */\n\tdata.l += 19;\n\tz.name = parse_XLSBCodeName(data, length - 19);\n\treturn z;\n}\nfunction write_BrtWsProp(str, o) {\n\tif(o == null) o = new_buf(84+4*str.length);\n\tfor(var i = 0; i < 3; ++i) o.write_shift(1,0);\n\twrite_BrtColor({auto:1}, o);\n\to.write_shift(-4,-1);\n\to.write_shift(-4,-1);\n\twrite_XLSBCodeName(str, o);\n\treturn o.slice(0, o.l);\n}\n\n/* [MS-XLSB] 2.4.306 BrtCellBlank */\nfunction parse_BrtCellBlank(data) {\n\tvar cell = parse_XLSBCell(data);\n\treturn [cell];\n}\nfunction write_BrtCellBlank(cell, ncell, o) {\n\tif(o == null) o = new_buf(8);\n\treturn write_XLSBCell(ncell, o);\n}\n\n\n/* [MS-XLSB] 2.4.307 BrtCellBool */\nfunction parse_BrtCellBool(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar fBool = data.read_shift(1);\n\treturn [cell, fBool, 'b'];\n}\nfunction write_BrtCellBool(cell, ncell, o) {\n\tif(o == null) o = new_buf(9);\n\twrite_XLSBCell(ncell, o);\n\to.write_shift(1, cell.v ? 1 : 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.308 BrtCellError */\nfunction parse_BrtCellError(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar bError = data.read_shift(1);\n\treturn [cell, bError, 'e'];\n}\n\n/* [MS-XLSB] 2.4.311 BrtCellIsst */\nfunction parse_BrtCellIsst(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar isst = data.read_shift(4);\n\treturn [cell, isst, 's'];\n}\nfunction write_BrtCellIsst(cell, ncell, o) {\n\tif(o == null) o = new_buf(12);\n\twrite_XLSBCell(ncell, o);\n\to.write_shift(4, ncell.v);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.313 BrtCellReal */\nfunction parse_BrtCellReal(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar value = parse_Xnum(data);\n\treturn [cell, value, 'n'];\n}\nfunction write_BrtCellReal(cell, ncell, o) {\n\tif(o == null) o = new_buf(16);\n\twrite_XLSBCell(ncell, o);\n\twrite_Xnum(cell.v, o);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.314 BrtCellRk */\nfunction parse_BrtCellRk(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar value = parse_RkNumber(data);\n\treturn [cell, value, 'n'];\n}\nfunction write_BrtCellRk(cell, ncell, o) {\n\tif(o == null) o = new_buf(12);\n\twrite_XLSBCell(ncell, o);\n\twrite_RkNumber(cell.v, o);\n\treturn o;\n}\n\n\n/* [MS-XLSB] 2.4.317 BrtCellSt */\nfunction parse_BrtCellSt(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar value = parse_XLWideString(data);\n\treturn [cell, value, 'str'];\n}\nfunction write_BrtCellSt(cell, ncell, o) {\n\tif(o == null) o = new_buf(12 + 4 * cell.v.length);\n\twrite_XLSBCell(ncell, o);\n\twrite_XLWideString(cell.v, o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.653 BrtFmlaBool */\nfunction parse_BrtFmlaBool(data, length, opts) {\n\tvar end = data.l + length;\n\tvar cell = parse_XLSBCell(data);\n\tcell.r = opts['!row'];\n\tvar value = data.read_shift(1);\n\tvar o = [cell, value, 'b'];\n\tif(opts.cellFormula) {\n\t\tdata.l += 2;\n\t\tvar formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n\t\to[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */\n\t}\n\telse data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.654 BrtFmlaError */\nfunction parse_BrtFmlaError(data, length, opts) {\n\tvar end = data.l + length;\n\tvar cell = parse_XLSBCell(data);\n\tcell.r = opts['!row'];\n\tvar value = data.read_shift(1);\n\tvar o = [cell, value, 'e'];\n\tif(opts.cellFormula) {\n\t\tdata.l += 2;\n\t\tvar formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n\t\to[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */\n\t}\n\telse data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.655 BrtFmlaNum */\nfunction parse_BrtFmlaNum(data, length, opts) {\n\tvar end = data.l + length;\n\tvar cell = parse_XLSBCell(data);\n\tcell.r = opts['!row'];\n\tvar value = parse_Xnum(data);\n\tvar o = [cell, value, 'n'];\n\tif(opts.cellFormula) {\n\t\tdata.l += 2;\n\t\tvar formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n\t\to[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */\n\t}\n\telse data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.656 BrtFmlaString */\nfunction parse_BrtFmlaString(data, length, opts) {\n\tvar end = data.l + length;\n\tvar cell = parse_XLSBCell(data);\n\tcell.r = opts['!row'];\n\tvar value = parse_XLWideString(data);\n\tvar o = [cell, value, 'str'];\n\tif(opts.cellFormula) {\n\t\tdata.l += 2;\n\t\tvar formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n\t\to[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */\n\t}\n\telse data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.682 BrtMergeCell */\nvar parse_BrtMergeCell = parse_UncheckedRfX;\nvar write_BrtMergeCell = write_UncheckedRfX;\n/* [MS-XLSB] 2.4.107 BrtBeginMergeCells */\nfunction write_BrtBeginMergeCells(cnt, o) {\n\tif(o == null) o = new_buf(4);\n\to.write_shift(4, cnt);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.662 BrtHLink */\nfunction parse_BrtHLink(data, length) {\n\tvar end = data.l + length;\n\tvar rfx = parse_UncheckedRfX(data, 16);\n\tvar relId = parse_XLNullableWideString(data);\n\tvar loc = parse_XLWideString(data);\n\tvar tooltip = parse_XLWideString(data);\n\tvar display = parse_XLWideString(data);\n\tdata.l = end;\n\tvar o = ({rfx:rfx, relId:relId, loc:loc, display:display});\n\tif(tooltip) o.Tooltip = tooltip;\n\treturn o;\n}\nfunction write_BrtHLink(l, rId) {\n\tvar o = new_buf(50+4*(l[1].Target.length + (l[1].Tooltip || \"\").length));\n\twrite_UncheckedRfX({s:decode_cell(l[0]), e:decode_cell(l[0])}, o);\n\twrite_RelID(\"rId\" + rId, o);\n\tvar locidx = l[1].Target.indexOf(\"#\");\n\tvar loc = locidx == -1 ? \"\" : l[1].Target.slice(locidx+1);\n\twrite_XLWideString(loc || \"\", o);\n\twrite_XLWideString(l[1].Tooltip || \"\", o);\n\twrite_XLWideString(\"\", o);\n\treturn o.slice(0, o.l);\n}\n\n/* [MS-XLSB] 2.4.692 BrtPane */\nfunction parse_BrtPane(/*data, length, opts*/) {\n}\n\n/* [MS-XLSB] 2.4.6 BrtArrFmla */\nfunction parse_BrtArrFmla(data, length, opts) {\n\tvar end = data.l + length;\n\tvar rfx = parse_RfX(data, 16);\n\tvar fAlwaysCalc = data.read_shift(1);\n\tvar o = [rfx]; o[2] = fAlwaysCalc;\n\tif(opts.cellFormula) {\n\t\tvar formula = parse_XLSBArrayParsedFormula(data, end - data.l, opts);\n\t\to[1] = formula;\n\t} else data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.750 BrtShrFmla */\nfunction parse_BrtShrFmla(data, length, opts) {\n\tvar end = data.l + length;\n\tvar rfx = parse_UncheckedRfX(data, 16);\n\tvar o = [rfx];\n\tif(opts.cellFormula) {\n\t\tvar formula = parse_XLSBSharedParsedFormula(data, end - data.l, opts);\n\t\to[1] = formula;\n\t\tdata.l = end;\n\t} else data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.323 BrtColInfo */\n/* TODO: once XLS ColInfo is set, combine the functions */\nfunction write_BrtColInfo(C, col, o) {\n\tif(o == null) o = new_buf(18);\n\tvar p = col_obj_w(C, col);\n\to.write_shift(-4, C);\n\to.write_shift(-4, C);\n\to.write_shift(4, (p.width || 10) * 256);\n\to.write_shift(4, 0/*ixfe*/); // style\n\tvar flags = 0;\n\tif(col.hidden) flags |= 0x01;\n\tif(typeof p.width == 'number') flags |= 0x02;\n\tif(col.level) flags |= (col.level << 8);\n\to.write_shift(2, flags); // bit flag\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.678 BrtMargins */\nvar BrtMarginKeys = [\"left\",\"right\",\"top\",\"bottom\",\"header\",\"footer\"];\nfunction parse_BrtMargins(data) {\n\tvar margins = ({});\n\tBrtMarginKeys.forEach(function(k) { margins[k] = parse_Xnum(data, 8); });\n\treturn margins;\n}\nfunction write_BrtMargins(margins, o) {\n\tif(o == null) o = new_buf(6*8);\n\tdefault_margins(margins);\n\tBrtMarginKeys.forEach(function(k) { write_Xnum((margins)[k], o); });\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.299 BrtBeginWsView */\nfunction parse_BrtBeginWsView(data) {\n\tvar f = data.read_shift(2);\n\tdata.l += 28;\n\treturn { RTL: f & 0x20 };\n}\nfunction write_BrtBeginWsView(ws, Workbook, o) {\n\tif(o == null) o = new_buf(30);\n\tvar f = 0x39c;\n\tif((((Workbook||{}).Views||[])[0]||{}).RTL) f |= 0x20;\n\to.write_shift(2, f); // bit flag\n\to.write_shift(4, 0);\n\to.write_shift(4, 0); // view first row\n\to.write_shift(4, 0); // view first col\n\to.write_shift(1, 0); // gridline color ICV\n\to.write_shift(1, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, 100); // zoom scale\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(4, 0); // workbook view id\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.309 BrtCellIgnoreEC */\nfunction write_BrtCellIgnoreEC(ref) {\n\tvar o = new_buf(24);\n\to.write_shift(4, 4);\n\to.write_shift(4, 1);\n\twrite_UncheckedRfX(ref, o);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.748 BrtSheetProtection */\nfunction write_BrtSheetProtection(sp, o) {\n\tif(o == null) o = new_buf(16*4+2);\n\to.write_shift(2, sp.password ? crypto_CreatePasswordVerifier_Method1(sp.password) : 0);\n\to.write_shift(4, 1); // this record should not be written if no protection\n\t[\n\t\t[\"objects\", false], // fObjects\n\t\t[\"scenarios\", false], // fScenarios\n\t\t[\"formatCells\", true], // fFormatCells\n\t\t[\"formatColumns\", true], // fFormatColumns\n\t\t[\"formatRows\", true], // fFormatRows\n\t\t[\"insertColumns\", true], // fInsertColumns\n\t\t[\"insertRows\", true], // fInsertRows\n\t\t[\"insertHyperlinks\", true], // fInsertHyperlinks\n\t\t[\"deleteColumns\", true], // fDeleteColumns\n\t\t[\"deleteRows\", true], // fDeleteRows\n\t\t[\"selectLockedCells\", false], // fSelLockedCells\n\t\t[\"sort\", true], // fSort\n\t\t[\"autoFilter\", true], // fAutoFilter\n\t\t[\"pivotTables\", true], // fPivotTables\n\t\t[\"selectUnlockedCells\", false] // fSelUnlockedCells\n\t].forEach(function(n) {\nif(n[1]) o.write_shift(4, sp[n[0]] != null && !sp[n[0]] ? 1 : 0);\n\t\telse o.write_shift(4, sp[n[0]] != null && sp[n[0]] ? 0 : 1);\n\t});\n\treturn o;\n}\n\nfunction parse_BrtDVal(/*data, length, opts*/) {\n}\nfunction parse_BrtDVal14(/*data, length, opts*/) {\n}\n/* [MS-XLSB] 2.1.7.61 Worksheet */\nfunction parse_ws_bin(data, _opts, idx, rels, wb, themes, styles) {\n\tif(!data) return data;\n\tvar opts = _opts || {};\n\tif(!rels) rels = {'!id':{}};\n\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\tvar s = (opts.dense ? [] : {});\n\n\tvar ref;\n\tvar refguess = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };\n\n\tvar state = [];\n\tvar pass = false, end = false;\n\tvar row, p, cf, R, C, addr, sstr, rr, cell;\n\tvar merges = [];\n\topts.biff = 12;\n\topts['!row'] = 0;\n\n\tvar ai = 0, af = false;\n\n\tvar arrayf = [];\n\tvar sharedf = {};\n\tvar supbooks = opts.supbooks || wb.supbooks || ([[]]);\n\tsupbooks.sharedf = sharedf;\n\tsupbooks.arrayf = arrayf;\n\tsupbooks.SheetNames = wb.SheetNames || wb.Sheets.map(function(x) { return x.name; });\n\tif(!opts.supbooks) {\n\t\topts.supbooks = supbooks;\n\t\tif(wb.Names) for(var i = 0; i < wb.Names.length; ++i) supbooks[0][i+1] = wb.Names[i];\n\t}\n\n\tvar colinfo = [], rowinfo = [];\n\tvar seencol = false;\n\n\trecordhopper(data, function ws_parse(val, R_n, RT) {\n\t\tif(end) return;\n\t\tswitch(RT) {\n\t\t\tcase 0x0094: /* 'BrtWsDim' */\n\t\t\t\tref = val; break;\n\t\t\tcase 0x0000: /* 'BrtRowHdr' */\n\t\t\t\trow = val;\n\t\t\t\tif(opts.sheetRows && opts.sheetRows <= row.r) end=true;\n\t\t\t\trr = encode_row(R = row.r);\n\t\t\t\topts['!row'] = row.r;\n\t\t\t\tif(val.hidden || val.hpt || val.level != null) {\n\t\t\t\t\tif(val.hpt) val.hpx = pt2px(val.hpt);\n\t\t\t\t\trowinfo[val.r] = val;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0002: /* 'BrtCellRk' */\n\t\t\tcase 0x0003: /* 'BrtCellError' */\n\t\t\tcase 0x0004: /* 'BrtCellBool' */\n\t\t\tcase 0x0005: /* 'BrtCellReal' */\n\t\t\tcase 0x0006: /* 'BrtCellSt' */\n\t\t\tcase 0x0007: /* 'BrtCellIsst' */\n\t\t\tcase 0x0008: /* 'BrtFmlaString' */\n\t\t\tcase 0x0009: /* 'BrtFmlaNum' */\n\t\t\tcase 0x000A: /* 'BrtFmlaBool' */\n\t\t\tcase 0x000B: /* 'BrtFmlaError' */\n\t\t\t\tp = ({t:val[2]});\n\t\t\t\tswitch(val[2]) {\n\t\t\t\t\tcase 'n': p.v = val[1]; break;\n\t\t\t\t\tcase 's': sstr = strs[val[1]]; p.v = sstr.t; p.r = sstr.r; break;\n\t\t\t\t\tcase 'b': p.v = val[1] ? true : false; break;\n\t\t\t\t\tcase 'e': p.v = val[1]; if(opts.cellText !== false) p.w = BErr[p.v]; break;\n\t\t\t\t\tcase 'str': p.t = 's'; p.v = val[1]; break;\n\t\t\t\t}\n\t\t\t\tif((cf = styles.CellXf[val[0].iStyleRef])) safe_format(p,cf.numFmtId,null,opts, themes, styles);\n\t\t\t\tC = val[0].c;\n\t\t\t\tif(opts.dense) { if(!s[R]) s[R] = []; s[R][C] = p; }\n\t\t\t\telse s[encode_col(C) + rr] = p;\n\t\t\t\tif(opts.cellFormula) {\n\t\t\t\t\taf = false;\n\t\t\t\t\tfor(ai = 0; ai < arrayf.length; ++ai) {\n\t\t\t\t\t\tvar aii = arrayf[ai];\n\t\t\t\t\t\tif(row.r >= aii[0].s.r && row.r <= aii[0].e.r)\n\t\t\t\t\t\t\tif(C >= aii[0].s.c && C <= aii[0].e.c) {\n\t\t\t\t\t\t\t\tp.F = encode_range(aii[0]); af = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(!af && val.length > 3) p.f = val[3];\n\t\t\t\t}\n\t\t\t\tif(refguess.s.r > row.r) refguess.s.r = row.r;\n\t\t\t\tif(refguess.s.c > C) refguess.s.c = C;\n\t\t\t\tif(refguess.e.r < row.r) refguess.e.r = row.r;\n\t\t\t\tif(refguess.e.c < C) refguess.e.c = C;\n\t\t\t\tif(opts.cellDates && cf && p.t == 'n' && SSF.is_date(SSF._table[cf.numFmtId])) {\n\t\t\t\t\tvar _d = SSF.parse_date_code(p.v); if(_d) { p.t = 'd'; p.v = new Date(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u); }\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0001: /* 'BrtCellBlank' */\n\t\t\t\tif(!opts.sheetStubs || pass) break;\n\t\t\t\tp = ({t:'z',v:undefined});\n\t\t\t\tC = val[0].c;\n\t\t\t\tif(opts.dense) { if(!s[R]) s[R] = []; s[R][C] = p; }\n\t\t\t\telse s[encode_col(C) + rr] = p;\n\t\t\t\tif(refguess.s.r > row.r) refguess.s.r = row.r;\n\t\t\t\tif(refguess.s.c > C) refguess.s.c = C;\n\t\t\t\tif(refguess.e.r < row.r) refguess.e.r = row.r;\n\t\t\t\tif(refguess.e.c < C) refguess.e.c = C;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x00B0: /* 'BrtMergeCell' */\n\t\t\t\tmerges.push(val); break;\n\n\t\t\tcase 0x01EE: /* 'BrtHLink' */\n\t\t\t\tvar rel = rels['!id'][val.relId];\n\t\t\t\tif(rel) {\n\t\t\t\t\tval.Target = rel.Target;\n\t\t\t\t\tif(val.loc) val.Target += \"#\"+val.loc;\n\t\t\t\t\tval.Rel = rel;\n\t\t\t\t} else if(val.relId == '') {\n\t\t\t\t\tval.Target = \"#\" + val.loc;\n\t\t\t\t}\n\t\t\t\tfor(R=val.rfx.s.r;R<=val.rfx.e.r;++R) for(C=val.rfx.s.c;C<=val.rfx.e.c;++C) {\n\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\tif(!s[R]) s[R] = [];\n\t\t\t\t\t\tif(!s[R][C]) s[R][C] = {t:'z',v:undefined};\n\t\t\t\t\t\ts[R][C].l = val;\n\t\t\t\t\t} else {\n\t\t\t\t\t\taddr = encode_cell({c:C,r:R});\n\t\t\t\t\t\tif(!s[addr]) s[addr] = {t:'z',v:undefined};\n\t\t\t\t\t\ts[addr].l = val;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 0x01AA: /* 'BrtArrFmla' */\n\t\t\t\tif(!opts.cellFormula) break;\n\t\t\t\tarrayf.push(val);\n\t\t\t\tcell = ((opts.dense ? s[R][C] : s[encode_col(C) + rr]));\n\t\t\t\tcell.f = stringify_formula(val[1], refguess, {r:row.r, c:C}, supbooks, opts);\n\t\t\t\tcell.F = encode_range(val[0]);\n\t\t\t\tbreak;\n\t\t\tcase 0x01AB: /* 'BrtShrFmla' */\n\t\t\t\tif(!opts.cellFormula) break;\n\t\t\t\tsharedf[encode_cell(val[0].s)] = val[1];\n\t\t\t\tcell = (opts.dense ? s[R][C] : s[encode_col(C) + rr]);\n\t\t\t\tcell.f = stringify_formula(val[1], refguess, {r:row.r, c:C}, supbooks, opts);\n\t\t\t\tbreak;\n\n\t\t\t/* identical to 'ColInfo' in XLS */\n\t\t\tcase 0x003C: /* 'BrtColInfo' */\n\t\t\t\tif(!opts.cellStyles) break;\n\t\t\t\twhile(val.e >= val.s) {\n\t\t\t\t\tcolinfo[val.e--] = { width: val.w/256, hidden: !!(val.flags & 0x01), level: val.level };\n\t\t\t\t\tif(!seencol) { seencol = true; find_mdw_colw(val.w/256); }\n\t\t\t\t\tprocess_col(colinfo[val.e+1]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 0x00A1: /* 'BrtBeginAFilter' */\n\t\t\t\ts['!autofilter'] = { ref:encode_range(val) };\n\t\t\t\tbreak;\n\n\t\t\tcase 0x01DC: /* 'BrtMargins' */\n\t\t\t\ts['!margins'] = val;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0093: /* 'BrtWsProp' */\n\t\t\t\tif(!wb.Sheets[idx]) wb.Sheets[idx] = {};\n\t\t\t\tif(val.name) wb.Sheets[idx].CodeName = val.name;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0089: /* 'BrtBeginWsView' */\n\t\t\t\tif(!wb.Views) wb.Views = [{}];\n\t\t\t\tif(!wb.Views[0]) wb.Views[0] = {};\n\t\t\t\tif(val.RTL) wb.Views[0].RTL = true;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x01E5: /* 'BrtWsFmtInfo' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0040: /* 'BrtDVal' */\n\t\t\tcase 0x041D: /* 'BrtDVal14' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0097: /* 'BrtPane' */\n\t\t\t\tbreak;\n\t\t\tcase 0x00AF: /* 'BrtAFilterDateGroupItem' */\n\t\t\tcase 0x0284: /* 'BrtActiveX' */\n\t\t\tcase 0x0271: /* 'BrtBigName' */\n\t\t\tcase 0x0232: /* 'BrtBkHim' */\n\t\t\tcase 0x018C: /* 'BrtBrk' */\n\t\t\tcase 0x0458: /* 'BrtCFIcon' */\n\t\t\tcase 0x047A: /* 'BrtCFRuleExt' */\n\t\t\tcase 0x01D7: /* 'BrtCFVO' */\n\t\t\tcase 0x041A: /* 'BrtCFVO14' */\n\t\t\tcase 0x0289: /* 'BrtCellIgnoreEC' */\n\t\t\tcase 0x0451: /* 'BrtCellIgnoreEC14' */\n\t\t\tcase 0x0031: /* 'BrtCellMeta' */\n\t\t\tcase 0x024D: /* 'BrtCellSmartTagProperty' */\n\t\t\tcase 0x025F: /* 'BrtCellWatch' */\n\t\t\tcase 0x0234: /* 'BrtColor' */\n\t\t\tcase 0x041F: /* 'BrtColor14' */\n\t\t\tcase 0x00A8: /* 'BrtColorFilter' */\n\t\t\tcase 0x00AE: /* 'BrtCustomFilter' */\n\t\t\tcase 0x049C: /* 'BrtCustomFilter14' */\n\t\t\tcase 0x01F3: /* 'BrtDRef' */\n\t\t\tcase 0x01FB: /* 'BrtDXF' */\n\t\t\tcase 0x0226: /* 'BrtDrawing' */\n\t\t\tcase 0x00AB: /* 'BrtDynamicFilter' */\n\t\t\tcase 0x00A7: /* 'BrtFilter' */\n\t\t\tcase 0x0499: /* 'BrtFilter14' */\n\t\t\tcase 0x00A9: /* 'BrtIconFilter' */\n\t\t\tcase 0x049D: /* 'BrtIconFilter14' */\n\t\t\tcase 0x0227: /* 'BrtLegacyDrawing' */\n\t\t\tcase 0x0228: /* 'BrtLegacyDrawingHF' */\n\t\t\tcase 0x0295: /* 'BrtListPart' */\n\t\t\tcase 0x027F: /* 'BrtOleObject' */\n\t\t\tcase 0x01DE: /* 'BrtPageSetup' */\n\t\t\tcase 0x0219: /* 'BrtPhoneticInfo' */\n\t\t\tcase 0x01DD: /* 'BrtPrintOptions' */\n\t\t\tcase 0x0218: /* 'BrtRangeProtection' */\n\t\t\tcase 0x044F: /* 'BrtRangeProtection14' */\n\t\t\tcase 0x02A8: /* 'BrtRangeProtectionIso' */\n\t\t\tcase 0x0450: /* 'BrtRangeProtectionIso14' */\n\t\t\tcase 0x0400: /* 'BrtRwDescent' */\n\t\t\tcase 0x0098: /* 'BrtSel' */\n\t\t\tcase 0x0297: /* 'BrtSheetCalcProp' */\n\t\t\tcase 0x0217: /* 'BrtSheetProtection' */\n\t\t\tcase 0x02A6: /* 'BrtSheetProtectionIso' */\n\t\t\tcase 0x01F8: /* 'BrtSlc' */\n\t\t\tcase 0x0413: /* 'BrtSparkline' */\n\t\t\tcase 0x01AC: /* 'BrtTable' */\n\t\t\tcase 0x00AA: /* 'BrtTop10Filter' */\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\tcase 0x0032: /* 'BrtValueMeta' */\n\t\t\tcase 0x0816: /* 'BrtWebExtension' */\n\t\t\tcase 0x0415: /* 'BrtWsFmtInfoEx14' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */\n\t\t\t\tstate.push(R_n); pass = true; break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */\n\t\t\t\tstate.pop(); pass = false; break;\n\n\t\t\tdefault:\n\t\t\t\tif((R_n||\"\").indexOf(\"Begin\") > 0){/* empty */}\n\t\t\t\telse if((R_n||\"\").indexOf(\"End\") > 0){/* empty */}\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record \" + RT + \" \" + R_n);\n\t\t}\n\t}, opts);\n\n\tdelete opts.supbooks;\n\tdelete opts['!row'];\n\n\tif(!s[\"!ref\"] && (refguess.s.r < 2000000 || ref && (ref.e.r > 0 || ref.e.c > 0 || ref.s.r > 0 || ref.s.c > 0))) s[\"!ref\"] = encode_range(ref || refguess);\n\tif(opts.sheetRows && s[\"!ref\"]) {\n\t\tvar tmpref = safe_decode_range(s[\"!ref\"]);\n\t\tif(opts.sheetRows <= +tmpref.e.r) {\n\t\t\ttmpref.e.r = opts.sheetRows - 1;\n\t\t\tif(tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r;\n\t\t\tif(tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r;\n\t\t\tif(tmpref.e.c > refguess.e.c) tmpref.e.c = refguess.e.c;\n\t\t\tif(tmpref.e.c < tmpref.s.c) tmpref.s.c = tmpref.e.c;\n\t\t\ts[\"!fullref\"] = s[\"!ref\"];\n\t\t\ts[\"!ref\"] = encode_range(tmpref);\n\t\t}\n\t}\n\tif(merges.length > 0) s[\"!merges\"] = merges;\n\tif(colinfo.length > 0) s[\"!cols\"] = colinfo;\n\tif(rowinfo.length > 0) s[\"!rows\"] = rowinfo;\n\treturn s;\n}\n\n/* TODO: something useful -- this is a stub */\nfunction write_ws_bin_cell(ba, cell, R, C, opts, ws) {\n\tif(cell.v === undefined) return;\n\tvar vv = \"\";\n\tswitch(cell.t) {\n\t\tcase 'b': vv = cell.v ? \"1\" : \"0\"; break;\n\t\tcase 'd': // no BrtCellDate :(\n\t\t\tcell = dup(cell);\n\t\t\tcell.z = cell.z || SSF._table[14];\n\t\t\tcell.v = datenum(parseDate(cell.v)); cell.t = 'n';\n\t\t\tbreak;\n\t\t/* falls through */\n\t\tcase 'n': case 'e': vv = ''+cell.v; break;\n\t\tdefault: vv = cell.v; break;\n\t}\n\tvar o = ({r:R, c:C});\n\t/* TODO: cell style */\n\to.s = get_cell_style(opts.cellXfs, cell, opts);\n\tif(cell.l) ws['!links'].push([encode_cell(o), cell.l]);\n\tif(cell.c) ws['!comments'].push([encode_cell(o), cell.c]);\n\tswitch(cell.t) {\n\t\tcase 's': case 'str':\n\t\t\tif(opts.bookSST) {\n\t\t\t\tvv = get_sst_id(opts.Strings, (cell.v), opts.revStrings);\n\t\t\t\to.t = \"s\"; o.v = vv;\n\t\t\t\twrite_record(ba, \"BrtCellIsst\", write_BrtCellIsst(cell, o));\n\t\t\t} else {\n\t\t\t\to.t = \"str\";\n\t\t\t\twrite_record(ba, \"BrtCellSt\", write_BrtCellSt(cell, o));\n\t\t\t}\n\t\t\treturn;\n\t\tcase 'n':\n\t\t\t/* TODO: determine threshold for Real vs RK */\n\t\t\tif(cell.v == (cell.v | 0) && cell.v > -1000 && cell.v < 1000) write_record(ba, \"BrtCellRk\", write_BrtCellRk(cell, o));\n\t\t\telse write_record(ba, \"BrtCellReal\", write_BrtCellReal(cell, o));\n\t\t\treturn;\n\t\tcase 'b':\n\t\t\to.t = \"b\";\n\t\t\twrite_record(ba, \"BrtCellBool\", write_BrtCellBool(cell, o));\n\t\t\treturn;\n\t\tcase 'e': /* TODO: error */ o.t = \"e\"; break;\n\t}\n\twrite_record(ba, \"BrtCellBlank\", write_BrtCellBlank(cell, o));\n}\n\nfunction write_CELLTABLE(ba, ws, idx, opts) {\n\tvar range = safe_decode_range(ws['!ref'] || \"A1\"), ref, rr = \"\", cols = [];\n\twrite_record(ba, 'BrtBeginSheetData');\n\tvar dense = Array.isArray(ws);\n\tvar cap = range.e.r;\n\tif(ws['!rows']) cap = Math.max(range.e.r, ws['!rows'].length - 1);\n\tfor(var R = range.s.r; R <= cap; ++R) {\n\t\trr = encode_row(R);\n\t\t/* [ACCELLTABLE] */\n\t\t/* BrtRowHdr */\n\t\twrite_row_header(ba, ws, range, R);\n\t\tif(R <= range.e.r) for(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\t/* *16384CELL */\n\t\t\tif(R === range.s.r) cols[C] = encode_col(C);\n\t\t\tref = cols[C] + rr;\n\t\t\tvar cell = dense ? (ws[R]||[])[C] : ws[ref];\n\t\t\tif(!cell) continue;\n\t\t\t/* write cell */\n\t\t\twrite_ws_bin_cell(ba, cell, R, C, opts, ws);\n\t\t}\n\t}\n\twrite_record(ba, 'BrtEndSheetData');\n}\n\nfunction write_MERGECELLS(ba, ws) {\n\tif(!ws || !ws['!merges']) return;\n\twrite_record(ba, 'BrtBeginMergeCells', write_BrtBeginMergeCells(ws['!merges'].length));\n\tws['!merges'].forEach(function(m) { write_record(ba, 'BrtMergeCell', write_BrtMergeCell(m)); });\n\twrite_record(ba, 'BrtEndMergeCells');\n}\n\nfunction write_COLINFOS(ba, ws) {\n\tif(!ws || !ws['!cols']) return;\n\twrite_record(ba, 'BrtBeginColInfos');\n\tws['!cols'].forEach(function(m, i) { if(m) write_record(ba, 'BrtColInfo', write_BrtColInfo(i, m)); });\n\twrite_record(ba, 'BrtEndColInfos');\n}\n\nfunction write_IGNOREECS(ba, ws) {\n\tif(!ws || !ws['!ref']) return;\n\twrite_record(ba, 'BrtBeginCellIgnoreECs');\n\twrite_record(ba, 'BrtCellIgnoreEC', write_BrtCellIgnoreEC(safe_decode_range(ws['!ref'])));\n\twrite_record(ba, 'BrtEndCellIgnoreECs');\n}\n\nfunction write_HLINKS(ba, ws, rels) {\n\t/* *BrtHLink */\n\tws['!links'].forEach(function(l) {\n\t\tif(!l[1].Target) return;\n\t\tvar rId = add_rels(rels, -1, l[1].Target.replace(/#.*$/, \"\"), RELS.HLINK);\n\t\twrite_record(ba, \"BrtHLink\", write_BrtHLink(l, rId));\n\t});\n\tdelete ws['!links'];\n}\nfunction write_LEGACYDRAWING(ba, ws, idx, rels) {\n\t/* [BrtLegacyDrawing] */\n\tif(ws['!comments'].length > 0) {\n\t\tvar rId = add_rels(rels, -1, \"../drawings/vmlDrawing\" + (idx+1) + \".vml\", RELS.VML);\n\t\twrite_record(ba, \"BrtLegacyDrawing\", write_RelID(\"rId\" + rId));\n\t\tws['!legacy'] = rId;\n\t}\n}\n\nfunction write_AUTOFILTER(ba, ws, wb, idx) {\n\tif(!ws['!autofilter']) return;\n\tvar data = ws['!autofilter'];\n\tvar ref = typeof data.ref === \"string\" ? data.ref : encode_range(data.ref);\n\n\t/* Update FilterDatabase defined name for the worksheet */\n\tif(!wb.Workbook) wb.Workbook = ({Sheets:[]});\n\tif(!wb.Workbook.Names) wb.Workbook.Names = [];\n\tvar names = wb.Workbook.Names;\n\tvar range = decode_range(ref);\n\tif(range.s.r == range.e.r) { range.e.r = decode_range(ws[\"!ref\"]).e.r; ref = encode_range(range); }\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar name = names[i];\n\t\tif(name.Name != '_xlnm._FilterDatabase') continue;\n\t\tif(name.Sheet != idx) continue;\n\t\tname.Ref = \"'\" + wb.SheetNames[idx] + \"'!\" + ref; break;\n\t}\n\tif(i == names.length) names.push({ Name: '_xlnm._FilterDatabase', Sheet: idx, Ref: \"'\" + wb.SheetNames[idx] + \"'!\" + ref });\n\n\twrite_record(ba, \"BrtBeginAFilter\", write_UncheckedRfX(safe_decode_range(ref)));\n\t/* *FILTERCOLUMN */\n\t/* [SORTSTATE] */\n\t/* BrtEndAFilter */\n\twrite_record(ba, \"BrtEndAFilter\");\n}\n\nfunction write_WSVIEWS2(ba, ws, Workbook) {\n\twrite_record(ba, \"BrtBeginWsViews\");\n\t{ /* 1*WSVIEW2 */\n\t\t/* [ACUID] */\n\t\twrite_record(ba, \"BrtBeginWsView\", write_BrtBeginWsView(ws, Workbook));\n\t\t/* [BrtPane] */\n\t\t/* *4BrtSel */\n\t\t/* *4SXSELECT */\n\t\t/* *FRT */\n\t\twrite_record(ba, \"BrtEndWsView\");\n\t}\n\t/* *FRT */\n\twrite_record(ba, \"BrtEndWsViews\");\n}\n\nfunction write_WSFMTINFO() {\n\t/* [ACWSFMTINFO] */\n\t//write_record(ba, \"BrtWsFmtInfo\", write_BrtWsFmtInfo(ws));\n}\n\nfunction write_SHEETPROTECT(ba, ws) {\n\tif(!ws['!protect']) return;\n\t/* [BrtSheetProtectionIso] */\n\twrite_record(ba, \"BrtSheetProtection\", write_BrtSheetProtection(ws['!protect']));\n}\n\nfunction write_ws_bin(idx, opts, wb, rels) {\n\tvar ba = buf_array();\n\tvar s = wb.SheetNames[idx], ws = wb.Sheets[s] || {};\n\tvar c = s; try { if(wb && wb.Workbook) c = wb.Workbook.Sheets[idx].CodeName || c; } catch(e) {}\n\tvar r = safe_decode_range(ws['!ref'] || \"A1\");\n\tif(r.e.c > 0x3FFF || r.e.r > 0xFFFFF) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:XFD1048576\");\n\t\tr.e.c = Math.min(r.e.c, 0x3FFF);\n\t\tr.e.r = Math.min(r.e.c, 0xFFFFF);\n\t}\n\tws['!links'] = [];\n\t/* passed back to write_zip and removed there */\n\tws['!comments'] = [];\n\twrite_record(ba, \"BrtBeginSheet\");\n\tif(wb.vbaraw) write_record(ba, \"BrtWsProp\", write_BrtWsProp(c));\n\twrite_record(ba, \"BrtWsDim\", write_BrtWsDim(r));\n\twrite_WSVIEWS2(ba, ws, wb.Workbook);\n\twrite_WSFMTINFO(ba, ws);\n\twrite_COLINFOS(ba, ws, idx, opts, wb);\n\twrite_CELLTABLE(ba, ws, idx, opts, wb);\n\t/* [BrtSheetCalcProp] */\n\twrite_SHEETPROTECT(ba, ws);\n\t/* *([BrtRangeProtectionIso] BrtRangeProtection) */\n\t/* [SCENMAN] */\n\twrite_AUTOFILTER(ba, ws, wb, idx);\n\t/* [SORTSTATE] */\n\t/* [DCON] */\n\t/* [USERSHVIEWS] */\n\twrite_MERGECELLS(ba, ws);\n\t/* [BrtPhoneticInfo] */\n\t/* *CONDITIONALFORMATTING */\n\t/* [DVALS] */\n\twrite_HLINKS(ba, ws, rels);\n\t/* [BrtPrintOptions] */\n\tif(ws['!margins']) write_record(ba, \"BrtMargins\", write_BrtMargins(ws['!margins']));\n\t/* [BrtPageSetup] */\n\t/* [HEADERFOOTER] */\n\t/* [RWBRK] */\n\t/* [COLBRK] */\n\t/* *BrtBigName */\n\t/* [CELLWATCHES] */\n\tif(!opts || opts.ignoreEC || (opts.ignoreEC == (void 0))) write_IGNOREECS(ba, ws);\n\t/* [SMARTTAGS] */\n\t/* [BrtDrawing] */\n\twrite_LEGACYDRAWING(ba, ws, idx, rels);\n\t/* [BrtLegacyDrawingHF] */\n\t/* [BrtBkHim] */\n\t/* [OLEOBJECTS] */\n\t/* [ACTIVEXCONTROLS] */\n\t/* [WEBPUBITEMS] */\n\t/* [LISTPARTS] */\n\t/* FRTWORKSHEET */\n\twrite_record(ba, \"BrtEndSheet\");\n\treturn ba.end();\n}\nRELS.CHART = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart\";\nRELS.CHARTEX = \"http://schemas.microsoft.com/office/2014/relationships/chartEx\";\n\nfunction parse_Cache(data) {\n\tvar col = [];\n\tvar num = data.match(/^/);\n\tvar f;\n\n\t/* 21.2.2.150 pt CT_NumVal */\n\t(data.match(/(.*?)<\\/c:pt>/mg)||[]).forEach(function(pt) {\n\t\tvar q = pt.match(/(.*)<\\/c:v><\\/c:pt>/);\n\t\tif(!q) return;\n\t\tcol[+q[1]] = num ? +q[2] : q[2];\n\t});\n\n\t/* 21.2.2.71 formatCode CT_Xstring */\n\tvar nf = unescapexml((data.match(/([\\s\\S]*?)<\\/c:formatCode>/) || [\"\",\"General\"])[1]);\n\n\t(data.match(/(.*?)<\\/c:f>/mg)||[]).forEach(function(F) { f = F.replace(/<.*?>/g,\"\"); });\n\n\treturn [col, nf, f];\n}\n\n/* 21.2 DrawingML - Charts */\nfunction parse_chart(data, name, opts, rels, wb, csheet) {\n\tvar cs = ((csheet || {\"!type\":\"chart\"}));\n\tif(!data) return csheet;\n\t/* 21.2.2.27 chart CT_Chart */\n\n\tvar C = 0, R = 0, col = \"A\";\n\tvar refguess = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };\n\n\t/* 21.2.2.120 numCache CT_NumData */\n\t(data.match(/[\\s\\S]*?<\\/c:numCache>/gm)||[]).forEach(function(nc) {\n\t\tvar cache = parse_Cache(nc);\n\t\trefguess.s.r = refguess.s.c = 0;\n\t\trefguess.e.c = C;\n\t\tcol = encode_col(C);\n\t\tcache[0].forEach(function(n,i) {\n\t\t\tcs[col + encode_row(i)] = {t:'n', v:n, z:cache[1] };\n\t\t\tR = i;\n\t\t});\n\t\tif(refguess.e.r < R) refguess.e.r = R;\n\t\t++C;\n\t});\n\tif(C > 0) cs[\"!ref\"] = encode_range(refguess);\n\treturn cs;\n}\nRELS.CS = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartsheet\";\n\nvar CS_XML_ROOT = writextag('chartsheet', null, {\n\t'xmlns': XMLNS.main[0],\n\t'xmlns:r': XMLNS.r\n});\n\n/* 18.3 Worksheets also covers Chartsheets */\nfunction parse_cs_xml(data, opts, idx, rels, wb) {\n\tif(!data) return data;\n\t/* 18.3.1.12 chartsheet CT_ChartSheet */\n\tif(!rels) rels = {'!id':{}};\n\tvar s = ({'!type':\"chart\", '!drawel':null, '!rel':\"\"});\n\tvar m;\n\n\t/* 18.3.1.83 sheetPr CT_ChartsheetPr */\n\tvar sheetPr = data.match(sheetprregex);\n\tif(sheetPr) parse_ws_xml_sheetpr(sheetPr[0], s, wb, idx);\n\n\t/* 18.3.1.36 drawing CT_Drawing */\n\tif((m = data.match(/drawing r:id=\"(.*?)\"/))) s['!rel'] = m[1];\n\n\tif(rels['!id'][s['!rel']]) s['!drawel'] = rels['!id'][s['!rel']];\n\treturn s;\n}\nfunction write_cs_xml(idx, opts, wb, rels) {\n\tvar o = [XML_HEADER, CS_XML_ROOT];\n\to[o.length] = writextag(\"drawing\", null, {\"r:id\": \"rId1\"});\n\tadd_rels(rels, -1, \"../drawings/drawing\" + (idx+1) + \".xml\", RELS.DRAW);\n\tif(o.length>2) { o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n\n/* [MS-XLSB] 2.4.331 BrtCsProp */\nfunction parse_BrtCsProp(data, length) {\n\tdata.l += 10;\n\tvar name = parse_XLWideString(data, length - 10);\n\treturn { name: name };\n}\n\n/* [MS-XLSB] 2.1.7.7 Chart Sheet */\nfunction parse_cs_bin(data, opts, idx, rels, wb) {\n\tif(!data) return data;\n\tif(!rels) rels = {'!id':{}};\n\tvar s = {'!type':\"chart\", '!drawel':null, '!rel':\"\"};\n\tvar state = [];\n\tvar pass = false;\n\trecordhopper(data, function cs_parse(val, R_n, RT) {\n\t\tswitch(RT) {\n\n\t\t\tcase 0x0226: /* 'BrtDrawing' */\n\t\t\t\ts['!rel'] = val; break;\n\n\t\t\tcase 0x028B: /* 'BrtCsProp' */\n\t\t\t\tif(!wb.Sheets[idx]) wb.Sheets[idx] = {};\n\t\t\t\tif(val.name) wb.Sheets[idx].CodeName = val.name;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0232: /* 'BrtBkHim' */\n\t\t\tcase 0x028C: /* 'BrtCsPageSetup' */\n\t\t\tcase 0x029D: /* 'BrtCsProtection' */\n\t\t\tcase 0x02A7: /* 'BrtCsProtectionIso' */\n\t\t\tcase 0x0227: /* 'BrtLegacyDrawing' */\n\t\t\tcase 0x0228: /* 'BrtLegacyDrawingHF' */\n\t\t\tcase 0x01DC: /* 'BrtMargins' */\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */\n\t\t\t\tstate.push(R_n); break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */\n\t\t\t\tstate.pop(); break;\n\n\t\t\tdefault:\n\t\t\t\tif((R_n||\"\").indexOf(\"Begin\") > 0) state.push(R_n);\n\t\t\t\telse if((R_n||\"\").indexOf(\"End\") > 0) state.pop();\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record \" + RT + \" \" + R_n);\n\t\t}\n\t}, opts);\n\n\tif(rels['!id'][s['!rel']]) s['!drawel'] = rels['!id'][s['!rel']];\n\treturn s;\n}\nfunction write_cs_bin() {\n\tvar ba = buf_array();\n\twrite_record(ba, \"BrtBeginSheet\");\n\t/* [BrtCsProp] */\n\t/* CSVIEWS */\n\t/* [[BrtCsProtectionIso] BrtCsProtection] */\n\t/* [USERCSVIEWS] */\n\t/* [BrtMargins] */\n\t/* [BrtCsPageSetup] */\n\t/* [HEADERFOOTER] */\n\t/* BrtDrawing */\n\t/* [BrtLegacyDrawing] */\n\t/* [BrtLegacyDrawingHF] */\n\t/* [BrtBkHim] */\n\t/* [WEBPUBITEMS] */\n\t/* FRTCHARTSHEET */\n\twrite_record(ba, \"BrtEndSheet\");\n\treturn ba.end();\n}\n/* 18.2.28 (CT_WorkbookProtection) Defaults */\nvar WBPropsDef = [\n\t['allowRefreshQuery', false, \"bool\"],\n\t['autoCompressPictures', true, \"bool\"],\n\t['backupFile', false, \"bool\"],\n\t['checkCompatibility', false, \"bool\"],\n\t['CodeName', ''],\n\t['date1904', false, \"bool\"],\n\t['defaultThemeVersion', 0, \"int\"],\n\t['filterPrivacy', false, \"bool\"],\n\t['hidePivotFieldList', false, \"bool\"],\n\t['promptedSolutions', false, \"bool\"],\n\t['publishItems', false, \"bool\"],\n\t['refreshAllConnections', false, \"bool\"],\n\t['saveExternalLinkValues', true, \"bool\"],\n\t['showBorderUnselectedTables', true, \"bool\"],\n\t['showInkAnnotation', true, \"bool\"],\n\t['showObjects', 'all'],\n\t['showPivotChartFilter', false, \"bool\"],\n\t['updateLinks', 'userSet']\n];\n\n/* 18.2.30 (CT_BookView) Defaults */\nvar WBViewDef = [\n\t['activeTab', 0, \"int\"],\n\t['autoFilterDateGrouping', true, \"bool\"],\n\t['firstSheet', 0, \"int\"],\n\t['minimized', false, \"bool\"],\n\t['showHorizontalScroll', true, \"bool\"],\n\t['showSheetTabs', true, \"bool\"],\n\t['showVerticalScroll', true, \"bool\"],\n\t['tabRatio', 600, \"int\"],\n\t['visibility', 'visible']\n\t//window{Height,Width}, {x,y}Window\n];\n\n/* 18.2.19 (CT_Sheet) Defaults */\nvar SheetDef = [\n\t//['state', 'visible']\n];\n\n/* 18.2.2 (CT_CalcPr) Defaults */\nvar CalcPrDef = [\n\t['calcCompleted', 'true'],\n\t['calcMode', 'auto'],\n\t['calcOnSave', 'true'],\n\t['concurrentCalc', 'true'],\n\t['fullCalcOnLoad', 'false'],\n\t['fullPrecision', 'true'],\n\t['iterate', 'false'],\n\t['iterateCount', '100'],\n\t['iterateDelta', '0.001'],\n\t['refMode', 'A1']\n];\n\n/* 18.2.3 (CT_CustomWorkbookView) Defaults */\n/*var CustomWBViewDef = [\n\t['autoUpdate', 'false'],\n\t['changesSavedWin', 'false'],\n\t['includeHiddenRowCol', 'true'],\n\t['includePrintSettings', 'true'],\n\t['maximized', 'false'],\n\t['minimized', 'false'],\n\t['onlySync', 'false'],\n\t['personalView', 'false'],\n\t['showComments', 'commIndicator'],\n\t['showFormulaBar', 'true'],\n\t['showHorizontalScroll', 'true'],\n\t['showObjects', 'all'],\n\t['showSheetTabs', 'true'],\n\t['showStatusbar', 'true'],\n\t['showVerticalScroll', 'true'],\n\t['tabRatio', '600'],\n\t['xWindow', '0'],\n\t['yWindow', '0']\n];*/\n\nfunction push_defaults_array(target, defaults) {\n\tfor(var j = 0; j != target.length; ++j) { var w = target[j];\n\t\tfor(var i=0; i != defaults.length; ++i) { var z = defaults[i];\n\t\t\tif(w[z[0]] == null) w[z[0]] = z[1];\n\t\t\telse switch(z[2]) {\n\t\t\tcase \"bool\": if(typeof w[z[0]] == \"string\") w[z[0]] = parsexmlbool(w[z[0]]); break;\n\t\t\tcase \"int\": if(typeof w[z[0]] == \"string\") w[z[0]] = parseInt(w[z[0]], 10); break;\n\t\t\t}\n\t\t}\n\t}\n}\nfunction push_defaults(target, defaults) {\n\tfor(var i = 0; i != defaults.length; ++i) { var z = defaults[i];\n\t\tif(target[z[0]] == null) target[z[0]] = z[1];\n\t\telse switch(z[2]) {\n\t\t\tcase \"bool\": if(typeof target[z[0]] == \"string\") target[z[0]] = parsexmlbool(target[z[0]]); break;\n\t\t\tcase \"int\": if(typeof target[z[0]] == \"string\") target[z[0]] = parseInt(target[z[0]], 10); break;\n\t\t}\n\t}\n}\n\nfunction parse_wb_defaults(wb) {\n\tpush_defaults(wb.WBProps, WBPropsDef);\n\tpush_defaults(wb.CalcPr, CalcPrDef);\n\n\tpush_defaults_array(wb.WBView, WBViewDef);\n\tpush_defaults_array(wb.Sheets, SheetDef);\n\n\t_ssfopts.date1904 = parsexmlbool(wb.WBProps.date1904);\n}\n\nfunction safe1904(wb) {\n\t/* TODO: store date1904 somewhere else */\n\tif(!wb.Workbook) return \"false\";\n\tif(!wb.Workbook.WBProps) return \"false\";\n\treturn parsexmlbool(wb.Workbook.WBProps.date1904) ? \"true\" : \"false\";\n}\n\nvar badchars = \"][*?\\/\\\\\".split(\"\");\nfunction check_ws_name(n, safe) {\n\tif(n.length > 31) { if(safe) return false; throw new Error(\"Sheet names cannot exceed 31 chars\"); }\n\tvar _good = true;\n\tbadchars.forEach(function(c) {\n\t\tif(n.indexOf(c) == -1) return;\n\t\tif(!safe) throw new Error(\"Sheet name cannot contain : \\\\ / ? * [ ]\");\n\t\t_good = false;\n\t});\n\treturn _good;\n}\nfunction check_wb_names(N, S, codes) {\n\tN.forEach(function(n,i) {\n\t\tcheck_ws_name(n);\n\t\tfor(var j = 0; j < i; ++j) if(n == N[j]) throw new Error(\"Duplicate Sheet Name: \" + n);\n\t\tif(codes) {\n\t\t\tvar cn = (S && S[i] && S[i].CodeName) || n;\n\t\t\tif(cn.charCodeAt(0) == 95 && cn.length > 22) throw new Error(\"Bad Code Name: Worksheet\" + cn);\n\t\t}\n\t});\n}\nfunction check_wb(wb) {\n\tif(!wb || !wb.SheetNames || !wb.Sheets) throw new Error(\"Invalid Workbook\");\n\tif(!wb.SheetNames.length) throw new Error(\"Workbook is empty\");\n\tvar Sheets = (wb.Workbook && wb.Workbook.Sheets) || [];\n\tcheck_wb_names(wb.SheetNames, Sheets, !!wb.vbaraw);\n\tfor(var i = 0; i < wb.SheetNames.length; ++i) check_ws(wb.Sheets[wb.SheetNames[i]], wb.SheetNames[i], i);\n\t/* TODO: validate workbook */\n}\n/* 18.2 Workbook */\nvar wbnsregex = /<\\w+:workbook/;\nfunction parse_wb_xml(data, opts) {\n\tif(!data) throw new Error(\"Could not find file\");\n\tvar wb = { AppVersion:{}, WBProps:{}, WBView:[], Sheets:[], CalcPr:{}, Names:[], xmlns: \"\" };\n\tvar pass = false, xmlns = \"xmlns\";\n\tvar dname = {}, dnstart = 0;\n\tdata.replace(tagregex, function xml_wb(x, idx) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.13 fileVersion CT_FileVersion ? */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.2.12 fileSharing CT_FileSharing ? */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.28 workbookPr CT_WorkbookPr ? */\n\t\t\tcase '':\n\t\t\t\tWBPropsDef.forEach(function(w) {\n\t\t\t\t\tif(y[w[0]] == null) return;\n\t\t\t\t\tswitch(w[2]) {\n\t\t\t\t\t\tcase \"bool\": wb.WBProps[w[0]] = parsexmlbool(y[w[0]]); break;\n\t\t\t\t\t\tcase \"int\": wb.WBProps[w[0]] = parseInt(y[w[0]], 10); break;\n\t\t\t\t\t\tdefault: wb.WBProps[w[0]] = y[w[0]];\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif(y.codeName) wb.WBProps.CodeName = utf8read(y.codeName);\n\t\t\t\tbreak;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.29 workbookProtection CT_WorkbookProtection ? */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.1 bookViews CT_BookViews ? */\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.2.30 workbookView CT_BookView + */\n\t\t\tcase '': delete y[0]; wb.WBView.push(y); break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.20 sheets CT_Sheets 1 */\n\t\t\tcase '': case '': break; // aggregate sheet\n\t\t\t/* 18.2.19 sheet CT_Sheet + */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.15 functionGroups CT_FunctionGroups ? */\n\t\t\tcase '': break;\n\t\t\t/* 18.2.14 functionGroup CT_FunctionGroup + */\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.2.8 externalReference CT_ExternalReference + */\n\t\t\tcase '': break;\n\t\t\tcase '': case '': pass=false; break;\n\t\t\t/* 18.2.5 definedName CT_DefinedName + */\n\t\t\tcase '': {\n\t\t\t\tdname.Ref = unescapexml(utf8read(data.slice(dnstart, idx)));\n\t\t\t\twb.Names.push(dname);\n\t\t\t} break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.2 calcPr CT_CalcPr ? */\n\t\t\tcase '': delete y[0]; wb.CalcPr = y; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.16 oleSize CT_OleSize ? (ref required) */\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.2.18 pivotCaches CT_PivotCaches ? */\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.2.23 smartTagTypes CT_SmartTagTypes ? */\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.2.22 smartTagType CT_SmartTagType ? */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.11 fileRecoveryPr CT_FileRecoveryPr ? */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.26 webPublishObjects CT_WebPublishObjects ? */\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.2.25 webPublishObject CT_WebPublishObject ? */\n\t\t\tcase '': case '': case '': break;\n\t\t\t/* 18.2.7 ext CT_Extension + */\n\t\t\tcase '': pass=false; break;\n\n\t\t\t/* Others */\n\t\t\tcase '': pass=true; break;\n\t\t\tcase '': pass=false; break;\n\n\t\t\t/* TODO */\n\t\t\tcase ' 0);\n\n\t/* fileVersion */\n\t/* fileSharing */\n\n\tvar workbookPr = ({codeName:\"ThisWorkbook\"});\n\tif(wb.Workbook && wb.Workbook.WBProps) {\n\t\tWBPropsDef.forEach(function(x) {\nif((wb.Workbook.WBProps[x[0]]) == null) return;\n\t\t\tif((wb.Workbook.WBProps[x[0]]) == x[1]) return;\n\t\t\tworkbookPr[x[0]] = (wb.Workbook.WBProps[x[0]]);\n\t\t});\nif(wb.Workbook.WBProps.CodeName) { workbookPr.codeName = wb.Workbook.WBProps.CodeName; delete workbookPr.CodeName; }\n\t}\n\to[o.length] = (writextag('workbookPr', null, workbookPr));\n\n\t/* workbookProtection */\n\n\tvar sheets = wb.Workbook && wb.Workbook.Sheets || [];\n\tvar i = 0;\n\n\t/* bookViews only written if first worksheet is hidden */\n\tif(sheets && sheets[0] && !!sheets[0].Hidden) {\n\t\to[o.length] = \"\";\n\t\tfor(i = 0; i != wb.SheetNames.length; ++i) {\n\t\t\tif(!sheets[i]) break;\n\t\t\tif(!sheets[i].Hidden) break;\n\t\t}\n\t\tif(i == wb.SheetNames.length) i = 0;\n\t\to[o.length] = '';\n\t\to[o.length] = \"\";\n\t}\n\n\to[o.length] = \"\";\n\tfor(i = 0; i != wb.SheetNames.length; ++i) {\n\t\tvar sht = ({name:escapexml(wb.SheetNames[i].slice(0,31))});\n\t\tsht.sheetId = \"\"+(i+1);\n\t\tsht[\"r:id\"] = \"rId\"+(i+1);\n\t\tif(sheets[i]) switch(sheets[i].Hidden) {\n\t\t\tcase 1: sht.state = \"hidden\"; break;\n\t\t\tcase 2: sht.state = \"veryHidden\"; break;\n\t\t}\n\t\to[o.length] = (writextag('sheet',null,sht));\n\t}\n\to[o.length] = \"\";\n\n\t/* functionGroups */\n\t/* externalReferences */\n\n\tif(write_names) {\n\t\to[o.length] = \"\";\n\t\tif(wb.Workbook && wb.Workbook.Names) wb.Workbook.Names.forEach(function(n) {\n\t\t\tvar d = {name:n.Name};\n\t\t\tif(n.Comment) d.comment = n.Comment;\n\t\t\tif(n.Sheet != null) d.localSheetId = \"\"+n.Sheet;\n\t\t\tif(n.Hidden) d.hidden = \"1\";\n\t\t\tif(!n.Ref) return;\n\t\t\to[o.length] = writextag('definedName', escapexml(n.Ref), d);\n\t\t});\n\t\to[o.length] = \"\";\n\t}\n\n\t/* calcPr */\n\t/* oleSize */\n\t/* customWorkbookViews */\n\t/* pivotCaches */\n\t/* smartTagPr */\n\t/* smartTagTypes */\n\t/* webPublishing */\n\t/* fileRecoveryPr */\n\t/* webPublishObjects */\n\t/* extLst */\n\n\tif(o.length>2){ o[o.length] = ''; o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* [MS-XLSB] 2.4.304 BrtBundleSh */\nfunction parse_BrtBundleSh(data, length) {\n\tvar z = {};\n\tz.Hidden = data.read_shift(4); //hsState ST_SheetState\n\tz.iTabID = data.read_shift(4);\n\tz.strRelID = parse_RelID(data,length-8);\n\tz.name = parse_XLWideString(data);\n\treturn z;\n}\nfunction write_BrtBundleSh(data, o) {\n\tif(!o) o = new_buf(127);\n\to.write_shift(4, data.Hidden);\n\to.write_shift(4, data.iTabID);\n\twrite_RelID(data.strRelID, o);\n\twrite_XLWideString(data.name.slice(0,31), o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.815 BrtWbProp */\nfunction parse_BrtWbProp(data, length) {\n\tvar o = ({});\n\tvar flags = data.read_shift(4);\n\to.defaultThemeVersion = data.read_shift(4);\n\tvar strName = (length > 8) ? parse_XLWideString(data) : \"\";\n\tif(strName.length > 0) o.CodeName = strName;\n\to.autoCompressPictures = !!(flags & 0x10000);\n\to.backupFile = !!(flags & 0x40);\n\to.checkCompatibility = !!(flags & 0x1000);\n\to.date1904 = !!(flags & 0x01);\n\to.filterPrivacy = !!(flags & 0x08);\n\to.hidePivotFieldList = !!(flags & 0x400);\n\to.promptedSolutions = !!(flags & 0x10);\n\to.publishItems = !!(flags & 0x800);\n\to.refreshAllConnections = !!(flags & 0x40000);\n\to.saveExternalLinkValues = !!(flags & 0x80);\n\to.showBorderUnselectedTables = !!(flags & 0x04);\n\to.showInkAnnotation = !!(flags & 0x20);\n\to.showObjects = [\"all\", \"placeholders\", \"none\"][(flags >> 13) & 0x03];\n\to.showPivotChartFilter = !!(flags & 0x8000);\n\to.updateLinks = [\"userSet\", \"never\", \"always\"][(flags >> 8) & 0x03];\n\treturn o;\n}\nfunction write_BrtWbProp(data, o) {\n\tif(!o) o = new_buf(72);\n\tvar flags = 0;\n\tif(data) {\n\t\t/* TODO: mirror parse_BrtWbProp fields */\n\t\tif(data.filterPrivacy) flags |= 0x08;\n\t}\n\to.write_shift(4, flags);\n\to.write_shift(4, 0);\n\twrite_XLSBCodeName(data && data.CodeName || \"ThisWorkbook\", o);\n\treturn o.slice(0, o.l);\n}\n\nfunction parse_BrtFRTArchID$(data, length) {\n\tvar o = {};\n\tdata.read_shift(4);\n\to.ArchID = data.read_shift(4);\n\tdata.l += length - 8;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.687 BrtName */\nfunction parse_BrtName(data, length, opts) {\n\tvar end = data.l + length;\n\tdata.l += 4; //var flags = data.read_shift(4);\n\tdata.l += 1; //var chKey = data.read_shift(1);\n\tvar itab = data.read_shift(4);\n\tvar name = parse_XLNameWideString(data);\n\tvar formula = parse_XLSBNameParsedFormula(data, 0, opts);\n\tvar comment = parse_XLNullableWideString(data);\n\t//if(0 /* fProc */) {\n\t\t// unusedstring1: XLNullableWideString\n\t\t// description: XLNullableWideString\n\t\t// helpTopic: XLNullableWideString\n\t\t// unusedstring2: XLNullableWideString\n\t//}\n\tdata.l = end;\n\tvar out = ({Name:name, Ptg:formula});\n\tif(itab < 0xFFFFFFF) out.Sheet = itab;\n\tif(comment) out.Comment = comment;\n\treturn out;\n}\n\n/* [MS-XLSB] 2.1.7.61 Workbook */\nfunction parse_wb_bin(data, opts) {\n\tvar wb = { AppVersion:{}, WBProps:{}, WBView:[], Sheets:[], CalcPr:{}, xmlns: \"\" };\n\tvar state = [];\n\tvar pass = false;\n\n\tif(!opts) opts = {};\n\topts.biff = 12;\n\n\tvar Names = [];\n\tvar supbooks = ([[]]);\n\tsupbooks.SheetNames = [];\n\tsupbooks.XTI = [];\n\n\trecordhopper(data, function hopper_wb(val, R_n, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x009C: /* 'BrtBundleSh' */\n\t\t\t\tsupbooks.SheetNames.push(val.name);\n\t\t\t\twb.Sheets.push(val); break;\n\n\t\t\tcase 0x0099: /* 'BrtWbProp' */\n\t\t\t\twb.WBProps = val; break;\n\n\t\t\tcase 0x0027: /* 'BrtName' */\n\t\t\t\tif(val.Sheet != null) opts.SID = val.Sheet;\n\t\t\t\tval.Ref = stringify_formula(val.Ptg, null, null, supbooks, opts);\n\t\t\t\tdelete opts.SID;\n\t\t\t\tdelete val.Ptg;\n\t\t\t\tNames.push(val);\n\t\t\t\tbreak;\n\t\t\tcase 0x040C: /* 'BrtNameExt' */ break;\n\n\t\t\tcase 0x0165: /* 'BrtSupSelf' */\n\t\t\tcase 0x0166: /* 'BrtSupSame' */\n\t\t\tcase 0x0163: /* 'BrtSupBookSrc' */\n\t\t\tcase 0x029B: /* 'BrtSupAddin' */\n\t\t\t\tif(!supbooks[0].length) supbooks[0] = [RT, val];\n\t\t\t\telse supbooks.push([RT, val]);\n\t\t\t\tsupbooks[supbooks.length - 1].XTI = [];\n\t\t\t\tbreak;\n\t\t\tcase 0x016A: /* 'BrtExternSheet' */\n\t\t\t\tif(supbooks.length === 0) { supbooks[0] = []; supbooks[0].XTI = []; }\n\t\t\t\tsupbooks[supbooks.length - 1].XTI = supbooks[supbooks.length - 1].XTI.concat(val);\n\t\t\t\tsupbooks.XTI = supbooks.XTI.concat(val);\n\t\t\t\tbreak;\n\t\t\tcase 0x0169: /* 'BrtPlaceholderName' */\n\t\t\t\tbreak;\n\n\t\t\t/* case 'BrtModelTimeGroupingCalcCol' */\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\tcase 0x0C01: /* 'BrtRevisionPtr' */\n\t\t\tcase 0x0817: /* 'BrtAbsPath15' */\n\t\t\tcase 0x0216: /* 'BrtBookProtection' */\n\t\t\tcase 0x02A5: /* 'BrtBookProtectionIso' */\n\t\t\tcase 0x009E: /* 'BrtBookView' */\n\t\t\tcase 0x009D: /* 'BrtCalcProp' */\n\t\t\tcase 0x0262: /* 'BrtCrashRecErr' */\n\t\t\tcase 0x0802: /* 'BrtDecoupledPivotCacheID' */\n\t\t\tcase 0x009B: /* 'BrtFileRecover' */\n\t\t\tcase 0x0224: /* 'BrtFileSharing' */\n\t\t\tcase 0x02A4: /* 'BrtFileSharingIso' */\n\t\t\tcase 0x0080: /* 'BrtFileVersion' */\n\t\t\tcase 0x0299: /* 'BrtFnGroup' */\n\t\t\tcase 0x0850: /* 'BrtModelRelationship' */\n\t\t\tcase 0x084D: /* 'BrtModelTable' */\n\t\t\tcase 0x0225: /* 'BrtOleSize' */\n\t\t\tcase 0x0805: /* 'BrtPivotTableRef' */\n\t\t\tcase 0x0254: /* 'BrtSmartTagType' */\n\t\t\tcase 0x081C: /* 'BrtTableSlicerCacheID' */\n\t\t\tcase 0x081B: /* 'BrtTableSlicerCacheIDs' */\n\t\t\tcase 0x0822: /* 'BrtTimelineCachePivotCacheID' */\n\t\t\tcase 0x018D: /* 'BrtUserBookView' */\n\t\t\tcase 0x009A: /* 'BrtWbFactoid' */\n\t\t\tcase 0x045D: /* 'BrtWbProp14' */\n\t\t\tcase 0x0229: /* 'BrtWebOpt' */\n\t\t\tcase 0x082B: /* 'BrtWorkBookPr15' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tstate.push(R_n); pass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tstate.pop(); pass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */\n\t\t\t\tstate.push(R_n); pass = true; break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */\n\t\t\t\tstate.pop(); pass = false; break;\n\n\t\t\tcase 0x0010: /* 'BrtFRTArchID$' */ break;\n\n\t\t\tdefault:\n\t\t\t\tif((R_n||\"\").indexOf(\"Begin\") > 0){/* empty */}\n\t\t\t\telse if((R_n||\"\").indexOf(\"End\") > 0){/* empty */}\n\t\t\t\telse if(!pass || (opts.WTF && state[state.length-1] != \"BrtACBegin\" && state[state.length-1] != \"BrtFRTBegin\")) throw new Error(\"Unexpected record \" + RT + \" \" + R_n);\n\t\t}\n\t}, opts);\n\n\tparse_wb_defaults(wb);\n\n\t// $FlowIgnore\n\twb.Names = Names;\n\n\t(wb).supbooks = supbooks;\n\treturn wb;\n}\n\nfunction write_BUNDLESHS(ba, wb) {\n\twrite_record(ba, \"BrtBeginBundleShs\");\n\tfor(var idx = 0; idx != wb.SheetNames.length; ++idx) {\n\t\tvar viz = wb.Workbook && wb.Workbook.Sheets && wb.Workbook.Sheets[idx] && wb.Workbook.Sheets[idx].Hidden || 0;\n\t\tvar d = { Hidden: viz, iTabID: idx+1, strRelID: 'rId' + (idx+1), name: wb.SheetNames[idx] };\n\t\twrite_record(ba, \"BrtBundleSh\", write_BrtBundleSh(d));\n\t}\n\twrite_record(ba, \"BrtEndBundleShs\");\n}\n\n/* [MS-XLSB] 2.4.649 BrtFileVersion */\nfunction write_BrtFileVersion(data, o) {\n\tif(!o) o = new_buf(127);\n\tfor(var i = 0; i != 4; ++i) o.write_shift(4, 0);\n\twrite_XLWideString(\"SheetJS\", o);\n\twrite_XLWideString(XLSX.version, o);\n\twrite_XLWideString(XLSX.version, o);\n\twrite_XLWideString(\"7262\", o);\n\to.length = o.l;\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.301 BrtBookView */\nfunction write_BrtBookView(idx, o) {\n\tif(!o) o = new_buf(29);\n\to.write_shift(-4, 0);\n\to.write_shift(-4, 460);\n\to.write_shift(4, 28800);\n\to.write_shift(4, 17600);\n\to.write_shift(4, 500);\n\to.write_shift(4, idx);\n\to.write_shift(4, idx);\n\tvar flags = 0x78;\n\to.write_shift(1, flags);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\nfunction write_BOOKVIEWS(ba, wb) {\n\t/* required if hidden tab appears before visible tab */\n\tif(!wb.Workbook || !wb.Workbook.Sheets) return;\n\tvar sheets = wb.Workbook.Sheets;\n\tvar i = 0, vistab = -1, hidden = -1;\n\tfor(; i < sheets.length; ++i) {\n\t\tif(!sheets[i] || !sheets[i].Hidden && vistab == -1) vistab = i;\n\t\telse if(sheets[i].Hidden == 1 && hidden == -1) hidden = i;\n\t}\n\tif(hidden > vistab) return;\n\twrite_record(ba, \"BrtBeginBookViews\");\n\twrite_record(ba, \"BrtBookView\", write_BrtBookView(vistab));\n\t/* 1*(BrtBookView *FRT) */\n\twrite_record(ba, \"BrtEndBookViews\");\n}\n\n/* [MS-XLSB] 2.4.305 BrtCalcProp */\n/*function write_BrtCalcProp(data, o) {\n\tif(!o) o = new_buf(26);\n\to.write_shift(4,0); // force recalc\n\to.write_shift(4,1);\n\to.write_shift(4,0);\n\twrite_Xnum(0, o);\n\to.write_shift(-4, 1023);\n\to.write_shift(1, 0x33);\n\to.write_shift(1, 0x00);\n\treturn o;\n}*/\n\n/* [MS-XLSB] 2.4.646 BrtFileRecover */\n/*function write_BrtFileRecover(data, o) {\n\tif(!o) o = new_buf(1);\n\to.write_shift(1,0);\n\treturn o;\n}*/\n\n/* [MS-XLSB] 2.1.7.61 Workbook */\nfunction write_wb_bin(wb, opts) {\n\tvar ba = buf_array();\n\twrite_record(ba, \"BrtBeginBook\");\n\twrite_record(ba, \"BrtFileVersion\", write_BrtFileVersion());\n\t/* [[BrtFileSharingIso] BrtFileSharing] */\n\twrite_record(ba, \"BrtWbProp\", write_BrtWbProp(wb.Workbook && wb.Workbook.WBProps || null));\n\t/* [ACABSPATH] */\n\t/* [[BrtBookProtectionIso] BrtBookProtection] */\n\twrite_BOOKVIEWS(ba, wb, opts);\n\twrite_BUNDLESHS(ba, wb, opts);\n\t/* [FNGROUP] */\n\t/* [EXTERNALS] */\n\t/* *BrtName */\n\t/* write_record(ba, \"BrtCalcProp\", write_BrtCalcProp()); */\n\t/* [BrtOleSize] */\n\t/* *(BrtUserBookView *FRT) */\n\t/* [PIVOTCACHEIDS] */\n\t/* [BrtWbFactoid] */\n\t/* [SMARTTAGTYPES] */\n\t/* [BrtWebOpt] */\n\t/* write_record(ba, \"BrtFileRecover\", write_BrtFileRecover()); */\n\t/* [WEBPUBITEMS] */\n\t/* [CRERRS] */\n\t/* FRTWORKBOOK */\n\twrite_record(ba, \"BrtEndBook\");\n\n\treturn ba.end();\n}\nfunction parse_wb(data, name, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_wb_bin((data), opts);\n\treturn parse_wb_xml((data), opts);\n}\n\nfunction parse_ws(data, name, idx, opts, rels, wb, themes, styles) {\n\tif(name.slice(-4)===\".bin\") return parse_ws_bin((data), opts, idx, rels, wb, themes, styles);\n\treturn parse_ws_xml((data), opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_cs(data, name, idx, opts, rels, wb, themes, styles) {\n\tif(name.slice(-4)===\".bin\") return parse_cs_bin((data), opts, idx, rels, wb, themes, styles);\n\treturn parse_cs_xml((data), opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_ms(data, name, idx, opts, rels, wb, themes, styles) {\n\tif(name.slice(-4)===\".bin\") return parse_ms_bin((data), opts, idx, rels, wb, themes, styles);\n\treturn parse_ms_xml((data), opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_ds(data, name, idx, opts, rels, wb, themes, styles) {\n\tif(name.slice(-4)===\".bin\") return parse_ds_bin((data), opts, idx, rels, wb, themes, styles);\n\treturn parse_ds_xml((data), opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_sty(data, name, themes, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_sty_bin((data), themes, opts);\n\treturn parse_sty_xml((data), themes, opts);\n}\n\nfunction parse_theme(data, name, opts) {\n\treturn parse_theme_xml(data, opts);\n}\n\nfunction parse_sst(data, name, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_sst_bin((data), opts);\n\treturn parse_sst_xml((data), opts);\n}\n\nfunction parse_cmnt(data, name, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_comments_bin((data), opts);\n\treturn parse_comments_xml((data), opts);\n}\n\nfunction parse_cc(data, name, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_cc_bin((data), name, opts);\n\treturn parse_cc_xml((data), name, opts);\n}\n\nfunction parse_xlink(data, rel, name, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_xlink_bin((data), rel, name, opts);\n\treturn parse_xlink_xml((data), rel, name, opts);\n}\n\nfunction write_wb(wb, name, opts) {\n\treturn (name.slice(-4)===\".bin\" ? write_wb_bin : write_wb_xml)(wb, opts);\n}\n\nfunction write_ws(data, name, opts, wb, rels) {\n\treturn (name.slice(-4)===\".bin\" ? write_ws_bin : write_ws_xml)(data, opts, wb, rels);\n}\n\n// eslint-disable-next-line no-unused-vars\nfunction write_cs(data, name, opts, wb, rels) {\n\treturn (name.slice(-4)===\".bin\" ? write_cs_bin : write_cs_xml)(data, opts, wb, rels);\n}\n\nfunction write_sty(data, name, opts) {\n\treturn (name.slice(-4)===\".bin\" ? write_sty_bin : write_sty_xml)(data, opts);\n}\n\nfunction write_sst(data, name, opts) {\n\treturn (name.slice(-4)===\".bin\" ? write_sst_bin : write_sst_xml)(data, opts);\n}\n\nfunction write_cmnt(data, name, opts) {\n\treturn (name.slice(-4)===\".bin\" ? write_comments_bin : write_comments_xml)(data, opts);\n}\n/*\nfunction write_cc(data, name:string, opts) {\n\treturn (name.slice(-4)===\".bin\" ? write_cc_bin : write_cc_xml)(data, opts);\n}\n*/\nvar attregexg2=/([\\w:]+)=((?:\")([^\"]*)(?:\")|(?:')([^']*)(?:'))/g;\nvar attregex2=/([\\w:]+)=((?:\")(?:[^\"]*)(?:\")|(?:')(?:[^']*)(?:'))/;\nfunction xlml_parsexmltag(tag, skip_root) {\n\tvar words = tag.split(/\\s+/);\n\tvar z = ([]); if(!skip_root) z[0] = words[0];\n\tif(words.length === 1) return z;\n\tvar m = tag.match(attregexg2), y, j, w, i;\n\tif(m) for(i = 0; i != m.length; ++i) {\n\t\ty = m[i].match(attregex2);\nif((j=y[1].indexOf(\":\")) === -1) z[y[1]] = y[2].slice(1,y[2].length-1);\n\t\telse {\n\t\t\tif(y[1].slice(0,6) === \"xmlns:\") w = \"xmlns\"+y[1].slice(6);\n\t\t\telse w = y[1].slice(j+1);\n\t\t\tz[w] = y[2].slice(1,y[2].length-1);\n\t\t}\n\t}\n\treturn z;\n}\nfunction xlml_parsexmltagobj(tag) {\n\tvar words = tag.split(/\\s+/);\n\tvar z = {};\n\tif(words.length === 1) return z;\n\tvar m = tag.match(attregexg2), y, j, w, i;\n\tif(m) for(i = 0; i != m.length; ++i) {\n\t\ty = m[i].match(attregex2);\nif((j=y[1].indexOf(\":\")) === -1) z[y[1]] = y[2].slice(1,y[2].length-1);\n\t\telse {\n\t\t\tif(y[1].slice(0,6) === \"xmlns:\") w = \"xmlns\"+y[1].slice(6);\n\t\t\telse w = y[1].slice(j+1);\n\t\t\tz[w] = y[2].slice(1,y[2].length-1);\n\t\t}\n\t}\n\treturn z;\n}\n\n// ----\n\nfunction xlml_format(format, value) {\n\tvar fmt = XLMLFormatMap[format] || unescapexml(format);\n\tif(fmt === \"General\") return SSF._general(value);\n\treturn SSF.format(fmt, value);\n}\n\nfunction xlml_set_custprop(Custprops, key, cp, val) {\n\tvar oval = val;\n\tswitch((cp[0].match(/dt:dt=\"([\\w.]+)\"/)||[\"\",\"\"])[1]) {\n\t\tcase \"boolean\": oval = parsexmlbool(val); break;\n\t\tcase \"i2\": case \"int\": oval = parseInt(val, 10); break;\n\t\tcase \"r4\": case \"float\": oval = parseFloat(val); break;\n\t\tcase \"date\": case \"dateTime.tz\": oval = parseDate(val); break;\n\t\tcase \"i8\": case \"string\": case \"fixed\": case \"uuid\": case \"bin.base64\": break;\n\t\tdefault: throw new Error(\"bad custprop:\" + cp[0]);\n\t}\n\tCustprops[unescapexml(key)] = oval;\n}\n\nfunction safe_format_xlml(cell, nf, o) {\n\tif(cell.t === 'z') return;\n\tif(!o || o.cellText !== false) try {\n\t\tif(cell.t === 'e') { cell.w = cell.w || BErr[cell.v]; }\n\t\telse if(nf === \"General\") {\n\t\t\tif(cell.t === 'n') {\n\t\t\t\tif((cell.v|0) === cell.v) cell.w = SSF._general_int(cell.v);\n\t\t\t\telse cell.w = SSF._general_num(cell.v);\n\t\t\t}\n\t\t\telse cell.w = SSF._general(cell.v);\n\t\t}\n\t\telse cell.w = xlml_format(nf||\"General\", cell.v);\n\t} catch(e) { if(o.WTF) throw e; }\n\ttry {\n\t\tvar z = XLMLFormatMap[nf]||nf||\"General\";\n\t\tif(o.cellNF) cell.z = z;\n\t\tif(o.cellDates && cell.t == 'n' && SSF.is_date(z)) {\n\t\t\tvar _d = SSF.parse_date_code(cell.v); if(_d) { cell.t = 'd'; cell.v = new Date(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u); }\n\t\t}\n\t} catch(e) { if(o.WTF) throw e; }\n}\n\nfunction process_style_xlml(styles, stag, opts) {\n\tif(opts.cellStyles) {\n\t\tif(stag.Interior) {\n\t\t\tvar I = stag.Interior;\n\t\t\tif(I.Pattern) I.patternType = XLMLPatternTypeMap[I.Pattern] || I.Pattern;\n\t\t}\n\t}\n\tstyles[stag.ID] = stag;\n}\n\n/* TODO: there must exist some form of OSP-blessed spec */\nfunction parse_xlml_data(xml, ss, data, cell, base, styles, csty, row, arrayf, o) {\n\tvar nf = \"General\", sid = cell.StyleID, S = {}; o = o || {};\n\tvar interiors = [];\n\tvar i = 0;\n\tif(sid === undefined && row) sid = row.StyleID;\n\tif(sid === undefined && csty) sid = csty.StyleID;\n\twhile(styles[sid] !== undefined) {\n\t\tif(styles[sid].nf) nf = styles[sid].nf;\n\t\tif(styles[sid].Interior) interiors.push(styles[sid].Interior);\n\t\tif(!styles[sid].Parent) break;\n\t\tsid = styles[sid].Parent;\n\t}\n\tswitch(data.Type) {\n\t\tcase 'Boolean':\n\t\t\tcell.t = 'b';\n\t\t\tcell.v = parsexmlbool(xml);\n\t\t\tbreak;\n\t\tcase 'String':\n\t\t\tcell.t = 's'; cell.r = xlml_fixstr(unescapexml(xml));\n\t\t\tcell.v = (xml.indexOf(\"<\") > -1 ? unescapexml(ss||xml).replace(/<.*?>/g, \"\") : cell.r); // todo: BR etc\n\t\t\tbreak;\n\t\tcase 'DateTime':\n\t\t\tif(xml.slice(-1) != \"Z\") xml += \"Z\";\n\t\t\tcell.v = (parseDate(xml) - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);\n\t\t\tif(cell.v !== cell.v) cell.v = unescapexml(xml);\n\t\t\telse if(cell.v<60) cell.v = cell.v -1;\n\t\t\tif(!nf || nf == \"General\") nf = \"yyyy-mm-dd\";\n\t\t\t/* falls through */\n\t\tcase 'Number':\n\t\t\tif(cell.v === undefined) cell.v=+xml;\n\t\t\tif(!cell.t) cell.t = 'n';\n\t\t\tbreak;\n\t\tcase 'Error': cell.t = 'e'; cell.v = RBErr[xml]; if(o.cellText !== false) cell.w = xml; break;\n\t\tdefault:\n\t\t\tif(xml == \"\" && ss == \"\") { cell.t = 'z'; }\n\t\t\telse { cell.t = 's'; cell.v = xlml_fixstr(ss||xml); }\n\t\t\tbreak;\n\t}\n\tsafe_format_xlml(cell, nf, o);\n\tif(o.cellFormula !== false) {\n\t\tif(cell.Formula) {\n\t\t\tvar fstr = unescapexml(cell.Formula);\n\t\t\t/* strictly speaking, the leading = is required but some writers omit */\n\t\t\tif(fstr.charCodeAt(0) == 61 /* = */) fstr = fstr.slice(1);\n\t\t\tcell.f = rc_to_a1(fstr, base);\n\t\t\tdelete cell.Formula;\n\t\t\tif(cell.ArrayRange == \"RC\") cell.F = rc_to_a1(\"RC:RC\", base);\n\t\t\telse if(cell.ArrayRange) {\n\t\t\t\tcell.F = rc_to_a1(cell.ArrayRange, base);\n\t\t\t\tarrayf.push([safe_decode_range(cell.F), cell.F]);\n\t\t\t}\n\t\t} else {\n\t\t\tfor(i = 0; i < arrayf.length; ++i)\n\t\t\t\tif(base.r >= arrayf[i][0].s.r && base.r <= arrayf[i][0].e.r)\n\t\t\t\t\tif(base.c >= arrayf[i][0].s.c && base.c <= arrayf[i][0].e.c)\n\t\t\t\t\t\tcell.F = arrayf[i][1];\n\t\t}\n\t}\n\tif(o.cellStyles) {\n\t\tinteriors.forEach(function(x) {\n\t\t\tif(!S.patternType && x.patternType) S.patternType = x.patternType;\n\t\t});\n\t\tcell.s = S;\n\t}\n\tif(cell.StyleID !== undefined) cell.ixfe = cell.StyleID;\n}\n\nfunction xlml_clean_comment(comment) {\n\tcomment.t = comment.v || \"\";\n\tcomment.t = comment.t.replace(/\\r\\n/g,\"\\n\").replace(/\\r/g,\"\\n\");\n\tcomment.v = comment.w = comment.ixfe = undefined;\n}\n\nfunction xlml_normalize(d) {\n\tif(has_buf && Buffer.isBuffer(d)) return d.toString('utf8');\n\tif(typeof d === 'string') return d;\n\t/* duktape */\n\tif(typeof Uint8Array !== 'undefined' && d instanceof Uint8Array) return utf8read(a2s(ab2a(d)));\n\tthrow new Error(\"Bad input format: expected Buffer or string\");\n}\n\n/* TODO: Everything */\n/* UOS uses CJK in tags */\nvar xlmlregex = /<(\\/?)([^\\s?>:\\/]+)(?:[\\s?:\\/][^>]*)?>/mg;\n//var xlmlregex = /<(\\/?)([a-z0-9]*:|)(\\w+)[^>]*>/mg;\nfunction parse_xlml_xml(d, _opts) {\n\tvar opts = _opts || {};\n\tmake_ssf(SSF);\n\tvar str = debom(xlml_normalize(d));\n\tif(opts.type == 'binary' || opts.type == 'array' || opts.type == 'base64') {\n\t\tif(typeof cptable !== 'undefined') str = cptable.utils.decode(65001, char_codes(str));\n\t\telse str = utf8read(str);\n\t}\n\tvar opening = str.slice(0, 1024).toLowerCase(), ishtml = false;\n\tif(opening.indexOf(\"= 0) ishtml = true; });\n\tif(ishtml) return HTML_.to_workbook(str, opts);\n\tvar Rn;\n\tvar state = [], tmp;\n\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\tvar sheets = {}, sheetnames = [], cursheet = (opts.dense ? [] : {}), sheetname = \"\";\n\tvar table = {}, cell = ({}), row = {};// eslint-disable-line no-unused-vars\n\tvar dtag = xlml_parsexmltag(''), didx = 0;\n\tvar c = 0, r = 0;\n\tvar refguess = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };\n\tvar styles = {}, stag = {};\n\tvar ss = \"\", fidx = 0;\n\tvar merges = [];\n\tvar Props = {}, Custprops = {}, pidx = 0, cp = [];\n\tvar comments = [], comment = ({});\n\tvar cstys = [], csty, seencol = false;\n\tvar arrayf = [];\n\tvar rowinfo = [], rowobj = {}, cc = 0, rr = 0;\n\tvar Workbook = ({ Sheets:[], WBProps:{date1904:false} }), wsprops = {};\n\txlmlregex.lastIndex = 0;\n\tstr = str.replace(//mg,\"\");\n\tvar raw_Rn3 = \"\";\n\twhile((Rn = xlmlregex.exec(str))) switch((Rn[3] = (raw_Rn3 = Rn[3]).toLowerCase())) {\n\t\tcase 'data' /*case 'Data'*/:\n\t\t\tif(raw_Rn3 == \"data\") {\n\t\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(state[state.length-1][1]) break;\n\t\t\tif(Rn[1]==='/') parse_xlml_data(str.slice(didx, Rn.index), ss, dtag, state[state.length-1][0]==/*\"Comment\"*/\"comment\"?comment:cell, {c:c,r:r}, styles, cstys[c], row, arrayf, opts);\n\t\t\telse { ss = \"\"; dtag = xlml_parsexmltag(Rn[0]); didx = Rn.index + Rn[0].length; }\n\t\t\tbreak;\n\t\tcase 'cell' /*case 'Cell'*/:\n\t\t\tif(Rn[1]==='/'){\n\t\t\t\tif(comments.length > 0) cell.c = comments;\n\t\t\t\tif((!opts.sheetRows || opts.sheetRows > r) && cell.v !== undefined) {\n\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\tif(!cursheet[r]) cursheet[r] = [];\n\t\t\t\t\t\tcursheet[r][c] = cell;\n\t\t\t\t\t} else cursheet[encode_col(c) + encode_row(r)] = cell;\n\t\t\t\t}\n\t\t\t\tif(cell.HRef) {\n\t\t\t\t\tcell.l = ({Target:cell.HRef});\n\t\t\t\t\tif(cell.HRefScreenTip) cell.l.Tooltip = cell.HRefScreenTip;\n\t\t\t\t\tdelete cell.HRef; delete cell.HRefScreenTip;\n\t\t\t\t}\n\t\t\t\tif(cell.MergeAcross || cell.MergeDown) {\n\t\t\t\t\tcc = c + (parseInt(cell.MergeAcross,10)|0);\n\t\t\t\t\trr = r + (parseInt(cell.MergeDown,10)|0);\n\t\t\t\t\tmerges.push({s:{c:c,r:r},e:{c:cc,r:rr}});\n\t\t\t\t}\n\t\t\t\tif(!opts.sheetStubs) { if(cell.MergeAcross) c = cc + 1; else ++c; }\n\t\t\t\telse if(cell.MergeAcross || cell.MergeDown) {\nfor(var cma = c; cma <= cc; ++cma) {\n\t\t\t\t\t\tfor(var cmd = r; cmd <= rr; ++cmd) {\n\t\t\t\t\t\t\tif(cma > c || cmd > r) {\n\t\t\t\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\t\t\t\tif(!cursheet[cmd]) cursheet[cmd] = [];\n\t\t\t\t\t\t\t\t\tcursheet[cmd][cma] = {t:'z'};\n\t\t\t\t\t\t\t\t} else cursheet[encode_col(cma) + encode_row(cmd)] = {t:'z'};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tc = cc + 1;\n\t\t\t\t}\n\t\t\t\telse ++c;\n\t\t\t} else {\n\t\t\t\tcell = xlml_parsexmltagobj(Rn[0]);\n\t\t\t\tif(cell.Index) c = +cell.Index - 1;\n\t\t\t\tif(c < refguess.s.c) refguess.s.c = c;\n\t\t\t\tif(c > refguess.e.c) refguess.e.c = c;\n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") ++c;\n\t\t\t\tcomments = [];\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'row' /*case 'Row'*/:\n\t\t\tif(Rn[1]==='/' || Rn[0].slice(-2) === \"/>\") {\n\t\t\t\tif(r < refguess.s.r) refguess.s.r = r;\n\t\t\t\tif(r > refguess.e.r) refguess.e.r = r;\n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") {\n\t\t\t\t\trow = xlml_parsexmltag(Rn[0]);\n\t\t\t\t\tif(row.Index) r = +row.Index - 1;\n\t\t\t\t}\n\t\t\t\tc = 0; ++r;\n\t\t\t} else {\n\t\t\t\trow = xlml_parsexmltag(Rn[0]);\n\t\t\t\tif(row.Index) r = +row.Index - 1;\n\t\t\t\trowobj = {};\n\t\t\t\tif(row.AutoFitHeight == \"0\" || row.Height) {\n\t\t\t\t\trowobj.hpx = parseInt(row.Height, 10); rowobj.hpt = px2pt(rowobj.hpx);\n\t\t\t\t\trowinfo[r] = rowobj;\n\t\t\t\t}\n\t\t\t\tif(row.Hidden == \"1\") { rowobj.hidden = true; rowinfo[r] = rowobj; }\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'worksheet' /*case 'Worksheet'*/: /* TODO: read range from FullRows/FullColumns */\n\t\t\tif(Rn[1]==='/'){\n\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));\n\t\t\t\tsheetnames.push(sheetname);\n\t\t\t\tif(refguess.s.r <= refguess.e.r && refguess.s.c <= refguess.e.c) {\n\t\t\t\t\tcursheet[\"!ref\"] = encode_range(refguess);\n\t\t\t\t\tif(opts.sheetRows && opts.sheetRows <= refguess.e.r) {\n\t\t\t\t\t\tcursheet[\"!fullref\"] = cursheet[\"!ref\"];\n\t\t\t\t\t\trefguess.e.r = opts.sheetRows - 1;\n\t\t\t\t\t\tcursheet[\"!ref\"] = encode_range(refguess);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(merges.length) cursheet[\"!merges\"] = merges;\n\t\t\t\tif(cstys.length > 0) cursheet[\"!cols\"] = cstys;\n\t\t\t\tif(rowinfo.length > 0) cursheet[\"!rows\"] = rowinfo;\n\t\t\t\tsheets[sheetname] = cursheet;\n\t\t\t} else {\n\t\t\t\trefguess = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };\n\t\t\t\tr = c = 0;\n\t\t\t\tstate.push([Rn[3], false]);\n\t\t\t\ttmp = xlml_parsexmltag(Rn[0]);\n\t\t\t\tsheetname = unescapexml(tmp.Name);\n\t\t\t\tcursheet = (opts.dense ? [] : {});\n\t\t\t\tmerges = [];\n\t\t\t\tarrayf = [];\n\t\t\t\trowinfo = [];\n\t\t\t\twsprops = {name:sheetname, Hidden:0};\n\t\t\t\tWorkbook.Sheets.push(wsprops);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'table' /*case 'Table'*/:\n\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\telse if(Rn[0].slice(-2) == \"/>\") break;\n\t\t\telse {\n\t\t\t\ttable = xlml_parsexmltag(Rn[0]);\n\t\t\t\tstate.push([Rn[3], false]);\n\t\t\t\tcstys = []; seencol = false;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'style' /*case 'Style'*/:\n\t\t\tif(Rn[1]==='/') process_style_xlml(styles, stag, opts);\n\t\t\telse stag = xlml_parsexmltag(Rn[0]);\n\t\t\tbreak;\n\n\t\tcase 'numberformat' /*case 'NumberFormat'*/:\n\t\t\tstag.nf = unescapexml(xlml_parsexmltag(Rn[0]).Format || \"General\");\n\t\t\tif(XLMLFormatMap[stag.nf]) stag.nf = XLMLFormatMap[stag.nf];\n\t\t\tfor(var ssfidx = 0; ssfidx != 0x188; ++ssfidx) if(SSF._table[ssfidx] == stag.nf) break;\n\t\t\tif(ssfidx == 0x188) for(ssfidx = 0x39; ssfidx != 0x188; ++ssfidx) if(SSF._table[ssfidx] == null) { SSF.load(stag.nf, ssfidx); break; }\n\t\t\tbreak;\n\n\t\tcase 'column' /*case 'Column'*/:\n\t\t\tif(state[state.length-1][0] !== /*'Table'*/'table') break;\n\t\t\tcsty = xlml_parsexmltag(Rn[0]);\n\t\t\tif(csty.Hidden) { csty.hidden = true; delete csty.Hidden; }\n\t\t\tif(csty.Width) csty.wpx = parseInt(csty.Width, 10);\n\t\t\tif(!seencol && csty.wpx > 10) {\n\t\t\t\tseencol = true; MDW = DEF_MDW; //find_mdw_wpx(csty.wpx);\n\t\t\t\tfor(var _col = 0; _col < cstys.length; ++_col) if(cstys[_col]) process_col(cstys[_col]);\n\t\t\t}\n\t\t\tif(seencol) process_col(csty);\n\t\t\tcstys[(csty.Index-1||cstys.length)] = csty;\n\t\t\tfor(var i = 0; i < +csty.Span; ++i) cstys[cstys.length] = dup(csty);\n\t\t\tbreak;\n\n\t\tcase 'namedrange' /*case 'NamedRange'*/:\n\t\t\tif(Rn[1]==='/') break;\n\t\t\tif(!Workbook.Names) Workbook.Names = [];\n\t\t\tvar _NamedRange = parsexmltag(Rn[0]);\n\t\t\tvar _DefinedName = ({\n\t\t\t\tName: _NamedRange.Name,\n\t\t\t\tRef: rc_to_a1(_NamedRange.RefersTo.slice(1), {r:0, c:0})\n\t\t\t});\n\t\t\tif(Workbook.Sheets.length>0) _DefinedName.Sheet=Workbook.Sheets.length-1;\nWorkbook.Names.push(_DefinedName);\n\t\t\tbreak;\n\n\t\tcase 'namedcell' /*case 'NamedCell'*/: break;\n\t\tcase 'b' /*case 'B'*/: break;\n\t\tcase 'i' /*case 'I'*/: break;\n\t\tcase 'u' /*case 'U'*/: break;\n\t\tcase 's' /*case 'S'*/: break;\n\t\tcase 'em' /*case 'EM'*/: break;\n\t\tcase 'h2' /*case 'H2'*/: break;\n\t\tcase 'h3' /*case 'H3'*/: break;\n\t\tcase 'sub' /*case 'Sub'*/: break;\n\t\tcase 'sup' /*case 'Sup'*/: break;\n\t\tcase 'span' /*case 'Span'*/: break;\n\t\tcase 'alignment' /*case 'Alignment'*/:\n\t\t\tbreak;\n\t\tcase 'borders' /*case 'Borders'*/: break;\n\t\tcase 'border' /*case 'Border'*/: break;\n\t\tcase 'font' /*case 'Font'*/:\n\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\telse if(Rn[1]===\"/\") ss += str.slice(fidx, Rn.index);\n\t\t\telse fidx = Rn.index + Rn[0].length;\n\t\t\tbreak;\n\t\tcase 'interior' /*case 'Interior'*/:\n\t\t\tif(!opts.cellStyles) break;\n\t\t\tstag.Interior = xlml_parsexmltag(Rn[0]);\n\t\t\tbreak;\n\t\tcase 'protection' /*case 'Protection'*/: break;\n\n\t\tcase 'author' /*case 'Author'*/:\n\t\tcase 'title' /*case 'Title'*/:\n\t\tcase 'description' /*case 'Description'*/:\n\t\tcase 'created' /*case 'Created'*/:\n\t\tcase 'keywords' /*case 'Keywords'*/:\n\t\tcase 'subject' /*case 'Subject'*/:\n\t\tcase 'category' /*case 'Category'*/:\n\t\tcase 'company' /*case 'Company'*/:\n\t\tcase 'lastauthor' /*case 'LastAuthor'*/:\n\t\tcase 'lastsaved' /*case 'LastSaved'*/:\n\t\tcase 'lastprinted' /*case 'LastPrinted'*/:\n\t\tcase 'version' /*case 'Version'*/:\n\t\tcase 'revision' /*case 'Revision'*/:\n\t\tcase 'totaltime' /*case 'TotalTime'*/:\n\t\tcase 'hyperlinkbase' /*case 'HyperlinkBase'*/:\n\t\tcase 'manager' /*case 'Manager'*/:\n\t\tcase 'contentstatus' /*case 'ContentStatus'*/:\n\t\tcase 'identifier' /*case 'Identifier'*/:\n\t\tcase 'language' /*case 'Language'*/:\n\t\tcase 'appname' /*case 'AppName'*/:\n\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\telse if(Rn[1]===\"/\") xlml_set_prop(Props, raw_Rn3, str.slice(pidx, Rn.index));\n\t\t\telse pidx = Rn.index + Rn[0].length;\n\t\t\tbreak;\n\t\tcase 'paragraphs' /*case 'Paragraphs'*/: break;\n\n\t\tcase 'styles' /*case 'Styles'*/:\n\t\tcase 'workbook' /*case 'Workbook'*/:\n\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\telse state.push([Rn[3], false]);\n\t\t\tbreak;\n\n\t\tcase 'comment' /*case 'Comment'*/:\n\t\t\tif(Rn[1]==='/'){\n\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));\n\t\t\t\txlml_clean_comment(comment);\n\t\t\t\tcomments.push(comment);\n\t\t\t} else {\n\t\t\t\tstate.push([Rn[3], false]);\n\t\t\t\ttmp = xlml_parsexmltag(Rn[0]);\n\t\t\t\tcomment = ({a:tmp.Author});\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'autofilter' /*case 'AutoFilter'*/:\n\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\tvar AutoFilter = xlml_parsexmltag(Rn[0]);\n\t\t\t\tcursheet['!autofilter'] = { ref:rc_to_a1(AutoFilter.Range).replace(/\\$/g,\"\") };\n\t\t\t\tstate.push([Rn[3], true]);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'name' /*case 'Name'*/: break;\n\n\t\tcase 'datavalidation' /*case 'DataValidation'*/:\n\t\t\tif(Rn[1]==='/'){\n\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));\n\t\t\t} else {\n\t\t\t\tif(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'pixelsperinch' /*case 'PixelsPerInch'*/:\n\t\t\tbreak;\n\t\tcase 'componentoptions' /*case 'ComponentOptions'*/:\n\t\tcase 'documentproperties' /*case 'DocumentProperties'*/:\n\t\tcase 'customdocumentproperties' /*case 'CustomDocumentProperties'*/:\n\t\tcase 'officedocumentsettings' /*case 'OfficeDocumentSettings'*/:\n\t\tcase 'pivottable' /*case 'PivotTable'*/:\n\t\tcase 'pivotcache' /*case 'PivotCache'*/:\n\t\tcase 'names' /*case 'Names'*/:\n\t\tcase 'mapinfo' /*case 'MapInfo'*/:\n\t\tcase 'pagebreaks' /*case 'PageBreaks'*/:\n\t\tcase 'querytable' /*case 'QueryTable'*/:\n\t\tcase 'sorting' /*case 'Sorting'*/:\n\t\tcase 'schema' /*case 'Schema'*/: //case 'data' /*case 'data'*/:\n\t\tcase 'conditionalformatting' /*case 'ConditionalFormatting'*/:\n\t\tcase 'smarttagtype' /*case 'SmartTagType'*/:\n\t\tcase 'smarttags' /*case 'SmartTags'*/:\n\t\tcase 'excelworkbook' /*case 'ExcelWorkbook'*/:\n\t\tcase 'workbookoptions' /*case 'WorkbookOptions'*/:\n\t\tcase 'worksheetoptions' /*case 'WorksheetOptions'*/:\n\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\t/* FODS file root is */\n\t\t\tif(state.length == 0 && Rn[3] == \"document\") return parse_fods(str, opts);\n\t\t\t/* UOS file root is */\n\t\t\tif(state.length == 0 && Rn[3] == \"uof\"/*\"UOF\"*/) return parse_fods(str, opts);\n\n\t\t\tvar seen = true;\n\t\t\tswitch(state[state.length-1][0]) {\n\t\t\t\t/* OfficeDocumentSettings */\n\t\t\t\tcase 'officedocumentsettings' /*case 'OfficeDocumentSettings'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'allowpng' /*case 'AllowPNG'*/: break;\n\t\t\t\t\tcase 'removepersonalinformation' /*case 'RemovePersonalInformation'*/: break;\n\t\t\t\t\tcase 'downloadcomponents' /*case 'DownloadComponents'*/: break;\n\t\t\t\t\tcase 'locationofcomponents' /*case 'LocationOfComponents'*/: break;\n\t\t\t\t\tcase 'colors' /*case 'Colors'*/: break;\n\t\t\t\t\tcase 'color' /*case 'Color'*/: break;\n\t\t\t\t\tcase 'index' /*case 'Index'*/: break;\n\t\t\t\t\tcase 'rgb' /*case 'RGB'*/: break;\n\t\t\t\t\tcase 'targetscreensize' /*case 'TargetScreenSize'*/: break;\n\t\t\t\t\tcase 'readonlyrecommended' /*case 'ReadOnlyRecommended'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* ComponentOptions */\n\t\t\t\tcase 'componentoptions' /*case 'ComponentOptions'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'toolbar' /*case 'Toolbar'*/: break;\n\t\t\t\t\tcase 'hideofficelogo' /*case 'HideOfficeLogo'*/: break;\n\t\t\t\t\tcase 'spreadsheetautofit' /*case 'SpreadsheetAutoFit'*/: break;\n\t\t\t\t\tcase 'label' /*case 'Label'*/: break;\n\t\t\t\t\tcase 'caption' /*case 'Caption'*/: break;\n\t\t\t\t\tcase 'maxheight' /*case 'MaxHeight'*/: break;\n\t\t\t\t\tcase 'maxwidth' /*case 'MaxWidth'*/: break;\n\t\t\t\t\tcase 'nextsheetnumber' /*case 'NextSheetNumber'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* ExcelWorkbook */\n\t\t\t\tcase 'excelworkbook' /*case 'ExcelWorkbook'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'date1904' /*case 'Date1904'*/:\nWorkbook.WBProps.date1904 = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'windowheight' /*case 'WindowHeight'*/: break;\n\t\t\t\t\tcase 'windowwidth' /*case 'WindowWidth'*/: break;\n\t\t\t\t\tcase 'windowtopx' /*case 'WindowTopX'*/: break;\n\t\t\t\t\tcase 'windowtopy' /*case 'WindowTopY'*/: break;\n\t\t\t\t\tcase 'tabratio' /*case 'TabRatio'*/: break;\n\t\t\t\t\tcase 'protectstructure' /*case 'ProtectStructure'*/: break;\n\t\t\t\t\tcase 'protectwindow' /*case 'ProtectWindow'*/: break;\n\t\t\t\t\tcase 'protectwindows' /*case 'ProtectWindows'*/: break;\n\t\t\t\t\tcase 'activesheet' /*case 'ActiveSheet'*/: break;\n\t\t\t\t\tcase 'displayinknotes' /*case 'DisplayInkNotes'*/: break;\n\t\t\t\t\tcase 'firstvisiblesheet' /*case 'FirstVisibleSheet'*/: break;\n\t\t\t\t\tcase 'supbook' /*case 'SupBook'*/: break;\n\t\t\t\t\tcase 'sheetname' /*case 'SheetName'*/: break;\n\t\t\t\t\tcase 'sheetindex' /*case 'SheetIndex'*/: break;\n\t\t\t\t\tcase 'sheetindexfirst' /*case 'SheetIndexFirst'*/: break;\n\t\t\t\t\tcase 'sheetindexlast' /*case 'SheetIndexLast'*/: break;\n\t\t\t\t\tcase 'dll' /*case 'Dll'*/: break;\n\t\t\t\t\tcase 'acceptlabelsinformulas' /*case 'AcceptLabelsInFormulas'*/: break;\n\t\t\t\t\tcase 'donotsavelinkvalues' /*case 'DoNotSaveLinkValues'*/: break;\n\t\t\t\t\tcase 'iteration' /*case 'Iteration'*/: break;\n\t\t\t\t\tcase 'maxiterations' /*case 'MaxIterations'*/: break;\n\t\t\t\t\tcase 'maxchange' /*case 'MaxChange'*/: break;\n\t\t\t\t\tcase 'path' /*case 'Path'*/: break;\n\t\t\t\t\tcase 'xct' /*case 'Xct'*/: break;\n\t\t\t\t\tcase 'count' /*case 'Count'*/: break;\n\t\t\t\t\tcase 'selectedsheets' /*case 'SelectedSheets'*/: break;\n\t\t\t\t\tcase 'calculation' /*case 'Calculation'*/: break;\n\t\t\t\t\tcase 'uncalced' /*case 'Uncalced'*/: break;\n\t\t\t\t\tcase 'startupprompt' /*case 'StartupPrompt'*/: break;\n\t\t\t\t\tcase 'crn' /*case 'Crn'*/: break;\n\t\t\t\t\tcase 'externname' /*case 'ExternName'*/: break;\n\t\t\t\t\tcase 'formula' /*case 'Formula'*/: break;\n\t\t\t\t\tcase 'colfirst' /*case 'ColFirst'*/: break;\n\t\t\t\t\tcase 'collast' /*case 'ColLast'*/: break;\n\t\t\t\t\tcase 'wantadvise' /*case 'WantAdvise'*/: break;\n\t\t\t\t\tcase 'boolean' /*case 'Boolean'*/: break;\n\t\t\t\t\tcase 'error' /*case 'Error'*/: break;\n\t\t\t\t\tcase 'text' /*case 'Text'*/: break;\n\t\t\t\t\tcase 'ole' /*case 'OLE'*/: break;\n\t\t\t\t\tcase 'noautorecover' /*case 'NoAutoRecover'*/: break;\n\t\t\t\t\tcase 'publishobjects' /*case 'PublishObjects'*/: break;\n\t\t\t\t\tcase 'donotcalculatebeforesave' /*case 'DoNotCalculateBeforeSave'*/: break;\n\t\t\t\t\tcase 'number' /*case 'Number'*/: break;\n\t\t\t\t\tcase 'refmoder1c1' /*case 'RefModeR1C1'*/: break;\n\t\t\t\t\tcase 'embedsavesmarttags' /*case 'EmbedSaveSmartTags'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* WorkbookOptions */\n\t\t\t\tcase 'workbookoptions' /*case 'WorkbookOptions'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'owcversion' /*case 'OWCVersion'*/: break;\n\t\t\t\t\tcase 'height' /*case 'Height'*/: break;\n\t\t\t\t\tcase 'width' /*case 'Width'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* WorksheetOptions */\n\t\t\t\tcase 'worksheetoptions' /*case 'WorksheetOptions'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'visible' /*case 'Visible'*/:\n\t\t\t\t\t\tif(Rn[0].slice(-2) === \"/>\"){/* empty */}\n\t\t\t\t\t\telse if(Rn[1]===\"/\") switch(str.slice(pidx, Rn.index)) {\n\t\t\t\t\t\t\tcase \"SheetHidden\": wsprops.Hidden = 1; break;\n\t\t\t\t\t\t\tcase \"SheetVeryHidden\": wsprops.Hidden = 2; break;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse pidx = Rn.index + Rn[0].length;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'header' /*case 'Header'*/:\n\t\t\t\t\t\tif(!cursheet['!margins']) default_margins(cursheet['!margins']={}, 'xlml');\n\t\t\t\t\t\tcursheet['!margins'].header = parsexmltag(Rn[0]).Margin;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'footer' /*case 'Footer'*/:\n\t\t\t\t\t\tif(!cursheet['!margins']) default_margins(cursheet['!margins']={}, 'xlml');\n\t\t\t\t\t\tcursheet['!margins'].footer = parsexmltag(Rn[0]).Margin;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'pagemargins' /*case 'PageMargins'*/:\n\t\t\t\t\t\tvar pagemargins = parsexmltag(Rn[0]);\n\t\t\t\t\t\tif(!cursheet['!margins']) default_margins(cursheet['!margins']={},'xlml');\n\t\t\t\t\t\tif(pagemargins.Top) cursheet['!margins'].top = pagemargins.Top;\n\t\t\t\t\t\tif(pagemargins.Left) cursheet['!margins'].left = pagemargins.Left;\n\t\t\t\t\t\tif(pagemargins.Right) cursheet['!margins'].right = pagemargins.Right;\n\t\t\t\t\t\tif(pagemargins.Bottom) cursheet['!margins'].bottom = pagemargins.Bottom;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'displayrighttoleft' /*case 'DisplayRightToLeft'*/:\n\t\t\t\t\t\tif(!Workbook.Views) Workbook.Views = [];\n\t\t\t\t\t\tif(!Workbook.Views[0]) Workbook.Views[0] = {};\n\t\t\t\t\t\tWorkbook.Views[0].RTL = true;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'freezepanes' /*case 'FreezePanes'*/: break;\n\t\t\t\t\tcase 'frozennosplit' /*case 'FrozenNoSplit'*/: break;\n\n\t\t\t\t\tcase 'splithorizontal' /*case 'SplitHorizontal'*/:\n\t\t\t\t\tcase 'splitvertical' /*case 'SplitVertical'*/:\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'donotdisplaygridlines' /*case 'DoNotDisplayGridlines'*/:\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'activerow' /*case 'ActiveRow'*/: break;\n\t\t\t\t\tcase 'activecol' /*case 'ActiveCol'*/: break;\n\t\t\t\t\tcase 'toprowbottompane' /*case 'TopRowBottomPane'*/: break;\n\t\t\t\t\tcase 'leftcolumnrightpane' /*case 'LeftColumnRightPane'*/: break;\n\n\t\t\t\t\tcase 'unsynced' /*case 'Unsynced'*/: break;\n\t\t\t\t\tcase 'print' /*case 'Print'*/: break;\n\t\t\t\t\tcase 'panes' /*case 'Panes'*/: break;\n\t\t\t\t\tcase 'scale' /*case 'Scale'*/: break;\n\t\t\t\t\tcase 'pane' /*case 'Pane'*/: break;\n\t\t\t\t\tcase 'number' /*case 'Number'*/: break;\n\t\t\t\t\tcase 'layout' /*case 'Layout'*/: break;\n\t\t\t\t\tcase 'pagesetup' /*case 'PageSetup'*/: break;\n\t\t\t\t\tcase 'selected' /*case 'Selected'*/: break;\n\t\t\t\t\tcase 'protectobjects' /*case 'ProtectObjects'*/: break;\n\t\t\t\t\tcase 'enableselection' /*case 'EnableSelection'*/: break;\n\t\t\t\t\tcase 'protectscenarios' /*case 'ProtectScenarios'*/: break;\n\t\t\t\t\tcase 'validprinterinfo' /*case 'ValidPrinterInfo'*/: break;\n\t\t\t\t\tcase 'horizontalresolution' /*case 'HorizontalResolution'*/: break;\n\t\t\t\t\tcase 'verticalresolution' /*case 'VerticalResolution'*/: break;\n\t\t\t\t\tcase 'numberofcopies' /*case 'NumberofCopies'*/: break;\n\t\t\t\t\tcase 'activepane' /*case 'ActivePane'*/: break;\n\t\t\t\t\tcase 'toprowvisible' /*case 'TopRowVisible'*/: break;\n\t\t\t\t\tcase 'leftcolumnvisible' /*case 'LeftColumnVisible'*/: break;\n\t\t\t\t\tcase 'fittopage' /*case 'FitToPage'*/: break;\n\t\t\t\t\tcase 'rangeselection' /*case 'RangeSelection'*/: break;\n\t\t\t\t\tcase 'papersizeindex' /*case 'PaperSizeIndex'*/: break;\n\t\t\t\t\tcase 'pagelayoutzoom' /*case 'PageLayoutZoom'*/: break;\n\t\t\t\t\tcase 'pagebreakzoom' /*case 'PageBreakZoom'*/: break;\n\t\t\t\t\tcase 'filteron' /*case 'FilterOn'*/: break;\n\t\t\t\t\tcase 'fitwidth' /*case 'FitWidth'*/: break;\n\t\t\t\t\tcase 'fitheight' /*case 'FitHeight'*/: break;\n\t\t\t\t\tcase 'commentslayout' /*case 'CommentsLayout'*/: break;\n\t\t\t\t\tcase 'zoom' /*case 'Zoom'*/: break;\n\t\t\t\t\tcase 'lefttoright' /*case 'LeftToRight'*/: break;\n\t\t\t\t\tcase 'gridlines' /*case 'Gridlines'*/: break;\n\t\t\t\t\tcase 'allowsort' /*case 'AllowSort'*/: break;\n\t\t\t\t\tcase 'allowfilter' /*case 'AllowFilter'*/: break;\n\t\t\t\t\tcase 'allowinsertrows' /*case 'AllowInsertRows'*/: break;\n\t\t\t\t\tcase 'allowdeleterows' /*case 'AllowDeleteRows'*/: break;\n\t\t\t\t\tcase 'allowinsertcols' /*case 'AllowInsertCols'*/: break;\n\t\t\t\t\tcase 'allowdeletecols' /*case 'AllowDeleteCols'*/: break;\n\t\t\t\t\tcase 'allowinserthyperlinks' /*case 'AllowInsertHyperlinks'*/: break;\n\t\t\t\t\tcase 'allowformatcells' /*case 'AllowFormatCells'*/: break;\n\t\t\t\t\tcase 'allowsizecols' /*case 'AllowSizeCols'*/: break;\n\t\t\t\t\tcase 'allowsizerows' /*case 'AllowSizeRows'*/: break;\n\t\t\t\t\tcase 'nosummaryrowsbelowdetail' /*case 'NoSummaryRowsBelowDetail'*/: break;\n\t\t\t\t\tcase 'tabcolorindex' /*case 'TabColorIndex'*/: break;\n\t\t\t\t\tcase 'donotdisplayheadings' /*case 'DoNotDisplayHeadings'*/: break;\n\t\t\t\t\tcase 'showpagelayoutzoom' /*case 'ShowPageLayoutZoom'*/: break;\n\t\t\t\t\tcase 'nosummarycolumnsrightdetail' /*case 'NoSummaryColumnsRightDetail'*/: break;\n\t\t\t\t\tcase 'blackandwhite' /*case 'BlackAndWhite'*/: break;\n\t\t\t\t\tcase 'donotdisplayzeros' /*case 'DoNotDisplayZeros'*/: break;\n\t\t\t\t\tcase 'displaypagebreak' /*case 'DisplayPageBreak'*/: break;\n\t\t\t\t\tcase 'rowcolheadings' /*case 'RowColHeadings'*/: break;\n\t\t\t\t\tcase 'donotdisplayoutline' /*case 'DoNotDisplayOutline'*/: break;\n\t\t\t\t\tcase 'noorientation' /*case 'NoOrientation'*/: break;\n\t\t\t\t\tcase 'allowusepivottables' /*case 'AllowUsePivotTables'*/: break;\n\t\t\t\t\tcase 'zeroheight' /*case 'ZeroHeight'*/: break;\n\t\t\t\t\tcase 'viewablerange' /*case 'ViewableRange'*/: break;\n\t\t\t\t\tcase 'selection' /*case 'Selection'*/: break;\n\t\t\t\t\tcase 'protectcontents' /*case 'ProtectContents'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* PivotTable */\n\t\t\t\tcase 'pivottable' /*case 'PivotTable'*/: case 'pivotcache' /*case 'PivotCache'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'immediateitemsondrop' /*case 'ImmediateItemsOnDrop'*/: break;\n\t\t\t\t\tcase 'showpagemultipleitemlabel' /*case 'ShowPageMultipleItemLabel'*/: break;\n\t\t\t\t\tcase 'compactrowindent' /*case 'CompactRowIndent'*/: break;\n\t\t\t\t\tcase 'location' /*case 'Location'*/: break;\n\t\t\t\t\tcase 'pivotfield' /*case 'PivotField'*/: break;\n\t\t\t\t\tcase 'orientation' /*case 'Orientation'*/: break;\n\t\t\t\t\tcase 'layoutform' /*case 'LayoutForm'*/: break;\n\t\t\t\t\tcase 'layoutsubtotallocation' /*case 'LayoutSubtotalLocation'*/: break;\n\t\t\t\t\tcase 'layoutcompactrow' /*case 'LayoutCompactRow'*/: break;\n\t\t\t\t\tcase 'position' /*case 'Position'*/: break;\n\t\t\t\t\tcase 'pivotitem' /*case 'PivotItem'*/: break;\n\t\t\t\t\tcase 'datatype' /*case 'DataType'*/: break;\n\t\t\t\t\tcase 'datafield' /*case 'DataField'*/: break;\n\t\t\t\t\tcase 'sourcename' /*case 'SourceName'*/: break;\n\t\t\t\t\tcase 'parentfield' /*case 'ParentField'*/: break;\n\t\t\t\t\tcase 'ptlineitems' /*case 'PTLineItems'*/: break;\n\t\t\t\t\tcase 'ptlineitem' /*case 'PTLineItem'*/: break;\n\t\t\t\t\tcase 'countofsameitems' /*case 'CountOfSameItems'*/: break;\n\t\t\t\t\tcase 'item' /*case 'Item'*/: break;\n\t\t\t\t\tcase 'itemtype' /*case 'ItemType'*/: break;\n\t\t\t\t\tcase 'ptsource' /*case 'PTSource'*/: break;\n\t\t\t\t\tcase 'cacheindex' /*case 'CacheIndex'*/: break;\n\t\t\t\t\tcase 'consolidationreference' /*case 'ConsolidationReference'*/: break;\n\t\t\t\t\tcase 'filename' /*case 'FileName'*/: break;\n\t\t\t\t\tcase 'reference' /*case 'Reference'*/: break;\n\t\t\t\t\tcase 'nocolumngrand' /*case 'NoColumnGrand'*/: break;\n\t\t\t\t\tcase 'norowgrand' /*case 'NoRowGrand'*/: break;\n\t\t\t\t\tcase 'blanklineafteritems' /*case 'BlankLineAfterItems'*/: break;\n\t\t\t\t\tcase 'hidden' /*case 'Hidden'*/: break;\n\t\t\t\t\tcase 'subtotal' /*case 'Subtotal'*/: break;\n\t\t\t\t\tcase 'basefield' /*case 'BaseField'*/: break;\n\t\t\t\t\tcase 'mapchilditems' /*case 'MapChildItems'*/: break;\n\t\t\t\t\tcase 'function' /*case 'Function'*/: break;\n\t\t\t\t\tcase 'refreshonfileopen' /*case 'RefreshOnFileOpen'*/: break;\n\t\t\t\t\tcase 'printsettitles' /*case 'PrintSetTitles'*/: break;\n\t\t\t\t\tcase 'mergelabels' /*case 'MergeLabels'*/: break;\n\t\t\t\t\tcase 'defaultversion' /*case 'DefaultVersion'*/: break;\n\t\t\t\t\tcase 'refreshname' /*case 'RefreshName'*/: break;\n\t\t\t\t\tcase 'refreshdate' /*case 'RefreshDate'*/: break;\n\t\t\t\t\tcase 'refreshdatecopy' /*case 'RefreshDateCopy'*/: break;\n\t\t\t\t\tcase 'versionlastrefresh' /*case 'VersionLastRefresh'*/: break;\n\t\t\t\t\tcase 'versionlastupdate' /*case 'VersionLastUpdate'*/: break;\n\t\t\t\t\tcase 'versionupdateablemin' /*case 'VersionUpdateableMin'*/: break;\n\t\t\t\t\tcase 'versionrefreshablemin' /*case 'VersionRefreshableMin'*/: break;\n\t\t\t\t\tcase 'calculation' /*case 'Calculation'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* PageBreaks */\n\t\t\t\tcase 'pagebreaks' /*case 'PageBreaks'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'colbreaks' /*case 'ColBreaks'*/: break;\n\t\t\t\t\tcase 'colbreak' /*case 'ColBreak'*/: break;\n\t\t\t\t\tcase 'rowbreaks' /*case 'RowBreaks'*/: break;\n\t\t\t\t\tcase 'rowbreak' /*case 'RowBreak'*/: break;\n\t\t\t\t\tcase 'colstart' /*case 'ColStart'*/: break;\n\t\t\t\t\tcase 'colend' /*case 'ColEnd'*/: break;\n\t\t\t\t\tcase 'rowend' /*case 'RowEnd'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* AutoFilter */\n\t\t\t\tcase 'autofilter' /*case 'AutoFilter'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'autofiltercolumn' /*case 'AutoFilterColumn'*/: break;\n\t\t\t\t\tcase 'autofiltercondition' /*case 'AutoFilterCondition'*/: break;\n\t\t\t\t\tcase 'autofilterand' /*case 'AutoFilterAnd'*/: break;\n\t\t\t\t\tcase 'autofilteror' /*case 'AutoFilterOr'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* QueryTable */\n\t\t\t\tcase 'querytable' /*case 'QueryTable'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'id' /*case 'Id'*/: break;\n\t\t\t\t\tcase 'autoformatfont' /*case 'AutoFormatFont'*/: break;\n\t\t\t\t\tcase 'autoformatpattern' /*case 'AutoFormatPattern'*/: break;\n\t\t\t\t\tcase 'querysource' /*case 'QuerySource'*/: break;\n\t\t\t\t\tcase 'querytype' /*case 'QueryType'*/: break;\n\t\t\t\t\tcase 'enableredirections' /*case 'EnableRedirections'*/: break;\n\t\t\t\t\tcase 'refreshedinxl9' /*case 'RefreshedInXl9'*/: break;\n\t\t\t\t\tcase 'urlstring' /*case 'URLString'*/: break;\n\t\t\t\t\tcase 'htmltables' /*case 'HTMLTables'*/: break;\n\t\t\t\t\tcase 'connection' /*case 'Connection'*/: break;\n\t\t\t\t\tcase 'commandtext' /*case 'CommandText'*/: break;\n\t\t\t\t\tcase 'refreshinfo' /*case 'RefreshInfo'*/: break;\n\t\t\t\t\tcase 'notitles' /*case 'NoTitles'*/: break;\n\t\t\t\t\tcase 'nextid' /*case 'NextId'*/: break;\n\t\t\t\t\tcase 'columninfo' /*case 'ColumnInfo'*/: break;\n\t\t\t\t\tcase 'overwritecells' /*case 'OverwriteCells'*/: break;\n\t\t\t\t\tcase 'donotpromptforfile' /*case 'DoNotPromptForFile'*/: break;\n\t\t\t\t\tcase 'textwizardsettings' /*case 'TextWizardSettings'*/: break;\n\t\t\t\t\tcase 'source' /*case 'Source'*/: break;\n\t\t\t\t\tcase 'number' /*case 'Number'*/: break;\n\t\t\t\t\tcase 'decimal' /*case 'Decimal'*/: break;\n\t\t\t\t\tcase 'thousandseparator' /*case 'ThousandSeparator'*/: break;\n\t\t\t\t\tcase 'trailingminusnumbers' /*case 'TrailingMinusNumbers'*/: break;\n\t\t\t\t\tcase 'formatsettings' /*case 'FormatSettings'*/: break;\n\t\t\t\t\tcase 'fieldtype' /*case 'FieldType'*/: break;\n\t\t\t\t\tcase 'delimiters' /*case 'Delimiters'*/: break;\n\t\t\t\t\tcase 'tab' /*case 'Tab'*/: break;\n\t\t\t\t\tcase 'comma' /*case 'Comma'*/: break;\n\t\t\t\t\tcase 'autoformatname' /*case 'AutoFormatName'*/: break;\n\t\t\t\t\tcase 'versionlastedit' /*case 'VersionLastEdit'*/: break;\n\t\t\t\t\tcase 'versionlastrefresh' /*case 'VersionLastRefresh'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\tcase 'datavalidation' /*case 'DataValidation'*/:\n\t\t\t\tswitch(Rn[3]) {\n\t\t\t\t\tcase 'range' /*case 'Range'*/: break;\n\n\t\t\t\t\tcase 'type' /*case 'Type'*/: break;\n\t\t\t\t\tcase 'min' /*case 'Min'*/: break;\n\t\t\t\t\tcase 'max' /*case 'Max'*/: break;\n\t\t\t\t\tcase 'sort' /*case 'Sort'*/: break;\n\t\t\t\t\tcase 'descending' /*case 'Descending'*/: break;\n\t\t\t\t\tcase 'order' /*case 'Order'*/: break;\n\t\t\t\t\tcase 'casesensitive' /*case 'CaseSensitive'*/: break;\n\t\t\t\t\tcase 'value' /*case 'Value'*/: break;\n\t\t\t\t\tcase 'errorstyle' /*case 'ErrorStyle'*/: break;\n\t\t\t\t\tcase 'errormessage' /*case 'ErrorMessage'*/: break;\n\t\t\t\t\tcase 'errortitle' /*case 'ErrorTitle'*/: break;\n\t\t\t\t\tcase 'inputmessage' /*case 'InputMessage'*/: break;\n\t\t\t\t\tcase 'inputtitle' /*case 'InputTitle'*/: break;\n\t\t\t\t\tcase 'combohide' /*case 'ComboHide'*/: break;\n\t\t\t\t\tcase 'inputhide' /*case 'InputHide'*/: break;\n\t\t\t\t\tcase 'condition' /*case 'Condition'*/: break;\n\t\t\t\t\tcase 'qualifier' /*case 'Qualifier'*/: break;\n\t\t\t\t\tcase 'useblank' /*case 'UseBlank'*/: break;\n\t\t\t\t\tcase 'value1' /*case 'Value1'*/: break;\n\t\t\t\t\tcase 'value2' /*case 'Value2'*/: break;\n\t\t\t\t\tcase 'format' /*case 'Format'*/: break;\n\n\t\t\t\t\tcase 'cellrangelist' /*case 'CellRangeList'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\tcase 'sorting' /*case 'Sorting'*/:\n\t\t\t\tcase 'conditionalformatting' /*case 'ConditionalFormatting'*/:\n\t\t\t\tswitch(Rn[3]) {\n\t\t\t\t\tcase 'range' /*case 'Range'*/: break;\n\t\t\t\t\tcase 'type' /*case 'Type'*/: break;\n\t\t\t\t\tcase 'min' /*case 'Min'*/: break;\n\t\t\t\t\tcase 'max' /*case 'Max'*/: break;\n\t\t\t\t\tcase 'sort' /*case 'Sort'*/: break;\n\t\t\t\t\tcase 'descending' /*case 'Descending'*/: break;\n\t\t\t\t\tcase 'order' /*case 'Order'*/: break;\n\t\t\t\t\tcase 'casesensitive' /*case 'CaseSensitive'*/: break;\n\t\t\t\t\tcase 'value' /*case 'Value'*/: break;\n\t\t\t\t\tcase 'errorstyle' /*case 'ErrorStyle'*/: break;\n\t\t\t\t\tcase 'errormessage' /*case 'ErrorMessage'*/: break;\n\t\t\t\t\tcase 'errortitle' /*case 'ErrorTitle'*/: break;\n\t\t\t\t\tcase 'cellrangelist' /*case 'CellRangeList'*/: break;\n\t\t\t\t\tcase 'inputmessage' /*case 'InputMessage'*/: break;\n\t\t\t\t\tcase 'inputtitle' /*case 'InputTitle'*/: break;\n\t\t\t\t\tcase 'combohide' /*case 'ComboHide'*/: break;\n\t\t\t\t\tcase 'inputhide' /*case 'InputHide'*/: break;\n\t\t\t\t\tcase 'condition' /*case 'Condition'*/: break;\n\t\t\t\t\tcase 'qualifier' /*case 'Qualifier'*/: break;\n\t\t\t\t\tcase 'useblank' /*case 'UseBlank'*/: break;\n\t\t\t\t\tcase 'value1' /*case 'Value1'*/: break;\n\t\t\t\t\tcase 'value2' /*case 'Value2'*/: break;\n\t\t\t\t\tcase 'format' /*case 'Format'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* MapInfo (schema) */\n\t\t\t\tcase 'mapinfo' /*case 'MapInfo'*/: case 'schema' /*case 'Schema'*/: case 'data' /*case 'data'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'map' /*case 'Map'*/: break;\n\t\t\t\t\tcase 'entry' /*case 'Entry'*/: break;\n\t\t\t\t\tcase 'range' /*case 'Range'*/: break;\n\t\t\t\t\tcase 'xpath' /*case 'XPath'*/: break;\n\t\t\t\t\tcase 'field' /*case 'Field'*/: break;\n\t\t\t\t\tcase 'xsdtype' /*case 'XSDType'*/: break;\n\t\t\t\t\tcase 'filteron' /*case 'FilterOn'*/: break;\n\t\t\t\t\tcase 'aggregate' /*case 'Aggregate'*/: break;\n\t\t\t\t\tcase 'elementtype' /*case 'ElementType'*/: break;\n\t\t\t\t\tcase 'attributetype' /*case 'AttributeType'*/: break;\n\t\t\t\t/* These are from xsd (XML Schema Definition) */\n\t\t\t\t\tcase 'schema' /*case 'schema'*/:\n\t\t\t\t\tcase 'element' /*case 'element'*/:\n\t\t\t\t\tcase 'complextype' /*case 'complexType'*/:\n\t\t\t\t\tcase 'datatype' /*case 'datatype'*/:\n\t\t\t\t\tcase 'all' /*case 'all'*/:\n\t\t\t\t\tcase 'attribute' /*case 'attribute'*/:\n\t\t\t\t\tcase 'extends' /*case 'extends'*/: break;\n\n\t\t\t\t\tcase 'row' /*case 'row'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* SmartTags (can be anything) */\n\t\t\t\tcase 'smarttags' /*case 'SmartTags'*/: break;\n\n\t\t\t\tdefault: seen = false; break;\n\t\t\t}\n\t\t\tif(seen) break;\n\t\t\t/* CustomDocumentProperties */\n\t\t\tif(Rn[3].match(/!\\[CDATA/)) break;\n\t\t\tif(!state[state.length-1][1]) throw 'Unrecognized tag: ' + Rn[3] + \"|\" + state.join(\"|\");\n\t\t\tif(state[state.length-1][0]===/*'CustomDocumentProperties'*/'customdocumentproperties') {\n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\t\telse if(Rn[1]===\"/\") xlml_set_custprop(Custprops, raw_Rn3, cp, str.slice(pidx, Rn.index));\n\t\t\t\telse { cp = Rn; pidx = Rn.index + Rn[0].length; }\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(opts.WTF) throw 'Unrecognized tag: ' + Rn[3] + \"|\" + state.join(\"|\");\n\t}\n\tvar out = ({});\n\tif(!opts.bookSheets && !opts.bookProps) out.Sheets = sheets;\n\tout.SheetNames = sheetnames;\n\tout.Workbook = Workbook;\n\tout.SSF = SSF.get_table();\n\tout.Props = Props;\n\tout.Custprops = Custprops;\n\treturn out;\n}\n\nfunction parse_xlml(data, opts) {\n\tfix_read_opts(opts=opts||{});\n\tswitch(opts.type||\"base64\") {\n\t\tcase \"base64\": return parse_xlml_xml(Base64.decode(data), opts);\n\t\tcase \"binary\": case \"buffer\": case \"file\": return parse_xlml_xml(data, opts);\n\t\tcase \"array\": return parse_xlml_xml(a2s(data), opts);\n\t}\n}\n\n/* TODO */\nfunction write_props_xlml(wb, opts) {\n\tvar o = [];\n\t/* DocumentProperties */\n\tif(wb.Props) o.push(xlml_write_docprops(wb.Props, opts));\n\t/* CustomDocumentProperties */\n\tif(wb.Custprops) o.push(xlml_write_custprops(wb.Props, wb.Custprops, opts));\n\treturn o.join(\"\");\n}\n/* TODO */\nfunction write_wb_xlml() {\n\t/* OfficeDocumentSettings */\n\t/* ExcelWorkbook */\n\treturn \"\";\n}\n/* TODO */\nfunction write_sty_xlml(wb, opts) {\n\t/* Styles */\n\tvar styles = [''];\n\topts.cellXfs.forEach(function(xf, id) {\n\t\tvar payload = [];\n\t\tpayload.push(writextag('NumberFormat', null, {\"ss:Format\": escapexml(SSF._table[xf.numFmtId])}));\n\n\t\tvar o = {\"ss:ID\": \"s\" + (21+id)};\n\t\tstyles.push(writextag('Style', payload.join(\"\"), o));\n\t});\n\treturn writextag(\"Styles\", styles.join(\"\"));\n}\nfunction write_name_xlml(n) { return writextag(\"NamedRange\", null, {\"ss:Name\": n.Name, \"ss:RefersTo\":\"=\" + a1_to_rc(n.Ref, {r:0,c:0})}); }\nfunction write_names_xlml(wb) {\n\tif(!((wb||{}).Workbook||{}).Names) return \"\";\nvar names = wb.Workbook.Names;\n\tvar out = [];\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar n = names[i];\n\t\tif(n.Sheet != null) continue;\n\t\tif(n.Name.match(/^_xlfn\\./)) continue;\n\t\tout.push(write_name_xlml(n));\n\t}\n\treturn writextag(\"Names\", out.join(\"\"));\n}\nfunction write_ws_xlml_names(ws, opts, idx, wb) {\n\tif(!ws) return \"\";\n\tif(!((wb||{}).Workbook||{}).Names) return \"\";\nvar names = wb.Workbook.Names;\n\tvar out = [];\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar n = names[i];\n\t\tif(n.Sheet != idx) continue;\n\t\t/*switch(n.Name) {\n\t\t\tcase \"_\": continue;\n\t\t}*/\n\t\tif(n.Name.match(/^_xlfn\\./)) continue;\n\t\tout.push(write_name_xlml(n));\n\t}\n\treturn out.join(\"\");\n}\n/* WorksheetOptions */\nfunction write_ws_xlml_wsopts(ws, opts, idx, wb) {\n\tif(!ws) return \"\";\n\tvar o = [];\n\t/* NOTE: spec technically allows any order, but stick with implied order */\n\n\t/* FitToPage */\n\t/* DoNotDisplayColHeaders */\n\t/* DoNotDisplayRowHeaders */\n\t/* ViewableRange */\n\t/* Selection */\n\t/* GridlineColor */\n\t/* Name */\n\t/* ExcelWorksheetType */\n\t/* IntlMacro */\n\t/* Unsynced */\n\t/* Selected */\n\t/* CodeName */\n\n\tif(ws['!margins']) {\n\t\to.push(\"\");\n\t\tif(ws['!margins'].header) o.push(writextag(\"Header\", null, {'x:Margin':ws['!margins'].header}));\n\t\tif(ws['!margins'].footer) o.push(writextag(\"Footer\", null, {'x:Margin':ws['!margins'].footer}));\n\t\to.push(writextag(\"PageMargins\", null, {\n\t\t\t'x:Bottom': ws['!margins'].bottom || \"0.75\",\n\t\t\t'x:Left': ws['!margins'].left || \"0.7\",\n\t\t\t'x:Right': ws['!margins'].right || \"0.7\",\n\t\t\t'x:Top': ws['!margins'].top || \"0.75\"\n\t\t}));\n\t\to.push(\"\");\n\t}\n\n\t/* PageSetup */\n\t/* DisplayPageBreak */\n\t/* TransitionExpressionEvaluation */\n\t/* TransitionFormulaEntry */\n\t/* Print */\n\t/* Zoom */\n\t/* PageLayoutZoom */\n\t/* PageBreakZoom */\n\t/* ShowPageBreakZoom */\n\t/* DefaultRowHeight */\n\t/* DefaultColumnWidth */\n\t/* StandardWidth */\n\n\tif(wb && wb.Workbook && wb.Workbook.Sheets && wb.Workbook.Sheets[idx]) {\n\t\t/* Visible */\n\t\tif(wb.Workbook.Sheets[idx].Hidden) o.push(writextag(\"Visible\", (wb.Workbook.Sheets[idx].Hidden == 1 ? \"SheetHidden\" : \"SheetVeryHidden\"), {}));\n\t\telse {\n\t\t\t/* Selected */\n\t\t\tfor(var i = 0; i < idx; ++i) if(wb.Workbook.Sheets[i] && !wb.Workbook.Sheets[i].Hidden) break;\n\t\t\tif(i == idx) o.push(\"\");\n\t\t}\n\t}\n\n\t/* LeftColumnVisible */\n\n\tif(((((wb||{}).Workbook||{}).Views||[])[0]||{}).RTL) o.push(\"\");\n\n\t/* GridlineColorIndex */\n\t/* DisplayFormulas */\n\t/* DoNotDisplayGridlines */\n\t/* DoNotDisplayHeadings */\n\t/* DoNotDisplayOutline */\n\t/* ApplyAutomaticOutlineStyles */\n\t/* NoSummaryRowsBelowDetail */\n\t/* NoSummaryColumnsRightDetail */\n\t/* DoNotDisplayZeros */\n\t/* ActiveRow */\n\t/* ActiveColumn */\n\t/* FilterOn */\n\t/* RangeSelection */\n\t/* TopRowVisible */\n\t/* TopRowBottomPane */\n\t/* LeftColumnRightPane */\n\t/* ActivePane */\n\t/* SplitHorizontal */\n\t/* SplitVertical */\n\t/* FreezePanes */\n\t/* FrozenNoSplit */\n\t/* TabColorIndex */\n\t/* Panes */\n\n\t/* NOTE: Password not supported in XLML Format */\n\tif(ws['!protect']) {\n\t\to.push(writetag(\"ProtectContents\", \"True\"));\n\t\tif(ws['!protect'].objects) o.push(writetag(\"ProtectObjects\", \"True\"));\n\t\tif(ws['!protect'].scenarios) o.push(writetag(\"ProtectScenarios\", \"True\"));\n\t\tif(ws['!protect'].selectLockedCells != null && !ws['!protect'].selectLockedCells) o.push(writetag(\"EnableSelection\", \"NoSelection\"));\n\t\telse if(ws['!protect'].selectUnlockedCells != null && !ws['!protect'].selectUnlockedCells) o.push(writetag(\"EnableSelection\", \"UnlockedCells\"));\n\t[\n\t\t[ \"formatCells\", \"AllowFormatCells\" ],\n\t\t[ \"formatColumns\", \"AllowSizeCols\" ],\n\t\t[ \"formatRows\", \"AllowSizeRows\" ],\n\t\t[ \"insertColumns\", \"AllowInsertCols\" ],\n\t\t[ \"insertRows\", \"AllowInsertRows\" ],\n\t\t[ \"insertHyperlinks\", \"AllowInsertHyperlinks\" ],\n\t\t[ \"deleteColumns\", \"AllowDeleteCols\" ],\n\t\t[ \"deleteRows\", \"AllowDeleteRows\" ],\n\t\t[ \"sort\", \"AllowSort\" ],\n\t\t[ \"autoFilter\", \"AllowFilter\" ],\n\t\t[ \"pivotTables\", \"AllowUsePivotTables\" ]\n\t].forEach(function(x) { if(ws['!protect'][x[0]]) o.push(\"<\"+x[1]+\"/>\"); });\n\t}\n\n\tif(o.length == 0) return \"\";\n\treturn writextag(\"WorksheetOptions\", o.join(\"\"), {xmlns:XLMLNS.x});\n}\nfunction write_ws_xlml_comment(comments) {\n\treturn comments.map(function(c) {\n\t\t// TODO: formatted text\n\t\tvar t = xlml_unfixstr(c.t||\"\");\n\t\tvar d =writextag(\"ss:Data\", t, {\"xmlns\":\"http://www.w3.org/TR/REC-html40\"});\n\t\treturn writextag(\"Comment\", d, {\"ss:Author\":c.a});\n\t}).join(\"\");\n}\nfunction write_ws_xlml_cell(cell, ref, ws, opts, idx, wb, addr){\n\tif(!cell || (cell.v == undefined && cell.f == undefined)) return \"\";\n\n\tvar attr = {};\n\tif(cell.f) attr[\"ss:Formula\"] = \"=\" + escapexml(a1_to_rc(cell.f, addr));\n\tif(cell.F && cell.F.slice(0, ref.length) == ref) {\n\t\tvar end = decode_cell(cell.F.slice(ref.length + 1));\n\t\tattr[\"ss:ArrayRange\"] = \"RC:R\" + (end.r == addr.r ? \"\" : \"[\" + (end.r - addr.r) + \"]\") + \"C\" + (end.c == addr.c ? \"\" : \"[\" + (end.c - addr.c) + \"]\");\n\t}\n\n\tif(cell.l && cell.l.Target) {\n\t\tattr[\"ss:HRef\"] = escapexml(cell.l.Target);\n\t\tif(cell.l.Tooltip) attr[\"x:HRefScreenTip\"] = escapexml(cell.l.Tooltip);\n\t}\n\n\tif(ws['!merges']) {\n\t\tvar marr = ws['!merges'];\n\t\tfor(var mi = 0; mi != marr.length; ++mi) {\n\t\t\tif(marr[mi].s.c != addr.c || marr[mi].s.r != addr.r) continue;\n\t\t\tif(marr[mi].e.c > marr[mi].s.c) attr['ss:MergeAcross'] = marr[mi].e.c - marr[mi].s.c;\n\t\t\tif(marr[mi].e.r > marr[mi].s.r) attr['ss:MergeDown'] = marr[mi].e.r - marr[mi].s.r;\n\t\t}\n\t}\n\n\tvar t = \"\", p = \"\";\n\tswitch(cell.t) {\n\t\tcase 'z': if(!opts.sheetStubs) return \"\"; break;\n\t\tcase 'n': t = 'Number'; p = String(cell.v); break;\n\t\tcase 'b': t = 'Boolean'; p = (cell.v ? \"1\" : \"0\"); break;\n\t\tcase 'e': t = 'Error'; p = BErr[cell.v]; break;\n\t\tcase 'd': t = 'DateTime'; p = new Date(cell.v).toISOString(); if(cell.z == null) cell.z = cell.z || SSF._table[14]; break;\n\t\tcase 's': t = 'String'; p = escapexlml(cell.v||\"\"); break;\n\t}\n\t/* TODO: cell style */\n\tvar os = get_cell_style(opts.cellXfs, cell, opts);\n\tattr[\"ss:StyleID\"] = \"s\" + (21+os);\n\tattr[\"ss:Index\"] = addr.c + 1;\n\tvar _v = (cell.v != null ? p : \"\");\n\tvar m = cell.t == 'z' ? \"\" : ('' + _v + '');\n\n\tif((cell.c||[]).length > 0) m += write_ws_xlml_comment(cell.c);\n\n\treturn writextag(\"Cell\", m, attr);\n}\nfunction write_ws_xlml_row(R, row) {\n\tvar o = '';\n}\n/* TODO */\nfunction write_ws_xlml_table(ws, opts, idx, wb) {\n\tif(!ws['!ref']) return \"\";\n\tvar range = safe_decode_range(ws['!ref']);\n\tvar marr = ws['!merges'] || [], mi = 0;\n\tvar o = [];\n\tif(ws['!cols']) ws['!cols'].forEach(function(n, i) {\n\t\tprocess_col(n);\n\t\tvar w = !!n.width;\n\t\tvar p = col_obj_w(i, n);\n\t\tvar k = {\"ss:Index\":i+1};\n\t\tif(w) k['ss:Width'] = width2px(p.width);\n\t\tif(n.hidden) k['ss:Hidden']=\"1\";\n\t\to.push(writextag(\"Column\",null,k));\n\t});\n\tvar dense = Array.isArray(ws);\n\tfor(var R = range.s.r; R <= range.e.r; ++R) {\n\t\tvar row = [write_ws_xlml_row(R, (ws['!rows']||[])[R])];\n\t\tfor(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tvar skip = false;\n\t\t\tfor(mi = 0; mi != marr.length; ++mi) {\n\t\t\t\tif(marr[mi].s.c > C) continue;\n\t\t\t\tif(marr[mi].s.r > R) continue;\n\t\t\t\tif(marr[mi].e.c < C) continue;\n\t\t\t\tif(marr[mi].e.r < R) continue;\n\t\t\t\tif(marr[mi].s.c != C || marr[mi].s.r != R) skip = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(skip) continue;\n\t\t\tvar addr = {r:R,c:C};\n\t\t\tvar ref = encode_cell(addr), cell = dense ? (ws[R]||[])[C] : ws[ref];\n\t\t\trow.push(write_ws_xlml_cell(cell, ref, ws, opts, idx, wb, addr));\n\t\t}\n\t\trow.push(\"\");\n\t\tif(row.length > 2) o.push(row.join(\"\"));\n\t}\n\treturn o.join(\"\");\n}\nfunction write_ws_xlml(idx, opts, wb) {\n\tvar o = [];\n\tvar s = wb.SheetNames[idx];\n\tvar ws = wb.Sheets[s];\n\n\tvar t = ws ? write_ws_xlml_names(ws, opts, idx, wb) : \"\";\n\tif(t.length > 0) o.push(\"\" + t + \"\");\n\n\t/* Table */\n\tt = ws ? write_ws_xlml_table(ws, opts, idx, wb) : \"\";\n\tif(t.length > 0) o.push(\"\" + t + \"
\");\n\n\t/* WorksheetOptions */\n\to.push(write_ws_xlml_wsopts(ws, opts, idx, wb));\n\n\treturn o.join(\"\");\n}\nfunction write_xlml(wb, opts) {\n\tif(!opts) opts = {};\n\tif(!wb.SSF) wb.SSF = SSF.get_table();\n\tif(wb.SSF) {\n\t\tmake_ssf(SSF); SSF.load_table(wb.SSF);\n\t\t// $FlowIgnore\n\t\topts.revssf = evert_num(wb.SSF); opts.revssf[wb.SSF[65535]] = 0;\n\t\topts.ssf = wb.SSF;\n\t\topts.cellXfs = [];\n\t\tget_cell_style(opts.cellXfs, {}, {revssf:{\"General\":0}});\n\t}\n\tvar d = [];\n\td.push(write_props_xlml(wb, opts));\n\td.push(write_wb_xlml(wb, opts));\n\td.push(\"\");\n\td.push(\"\");\n\tfor(var i = 0; i < wb.SheetNames.length; ++i)\n\t\td.push(writextag(\"Worksheet\", write_ws_xlml(i, opts, wb), {\"ss:Name\":escapexml(wb.SheetNames[i])}));\n\td[2] = write_sty_xlml(wb, opts);\n\td[3] = write_names_xlml(wb, opts);\n\treturn XML_HEADER + writextag(\"Workbook\", d.join(\"\"), {\n\t\t'xmlns': XLMLNS.ss,\n\t\t'xmlns:o': XLMLNS.o,\n\t\t'xmlns:x': XLMLNS.x,\n\t\t'xmlns:ss': XLMLNS.ss,\n\t\t'xmlns:dt': XLMLNS.dt,\n\t\t'xmlns:html': XLMLNS.html\n\t});\n}\n/* [MS-OLEDS] 2.3.8 CompObjStream */\nfunction parse_compobj(obj) {\n\tvar v = {};\n\tvar o = obj.content;\n/* [MS-OLEDS] 2.3.7 CompObjHeader -- All fields MUST be ignored */\n\to.l = 28;\n\n\tv.AnsiUserType = o.read_shift(0, \"lpstr-ansi\");\n\tv.AnsiClipboardFormat = parse_ClipboardFormatOrAnsiString(o);\n\n\tif(o.length - o.l <= 4) return v;\n\n\tvar m = o.read_shift(4);\n\tif(m == 0 || m > 40) return v;\n\to.l-=4; v.Reserved1 = o.read_shift(0, \"lpstr-ansi\");\n\n\tif(o.length - o.l <= 4) return v;\n\tm = o.read_shift(4);\n\tif(m !== 0x71b239f4) return v;\n\tv.UnicodeClipboardFormat = parse_ClipboardFormatOrUnicodeString(o);\n\n\tm = o.read_shift(4);\n\tif(m == 0 || m > 40) return v;\n\to.l-=4; v.Reserved2 = o.read_shift(0, \"lpwstr\");\n}\n\n/*\n\tContinue logic for:\n\t- 2.4.58 Continue\n\t- 2.4.59 ContinueBigName\n\t- 2.4.60 ContinueFrt\n\t- 2.4.61 ContinueFrt11\n\t- 2.4.62 ContinueFrt12\n*/\nfunction slurp(R, blob, length, opts) {\n\tvar l = length;\n\tvar bufs = [];\n\tvar d = blob.slice(blob.l,blob.l+l);\n\tif(opts && opts.enc && opts.enc.insitu) switch(R.n) {\n\tcase 'BOF': case 'FilePass': case 'FileLock': case 'InterfaceHdr': case 'RRDInfo': case 'RRDHead': case 'UsrExcl': break;\n\tdefault:\n\t\tif(d.length === 0) break;\n\t\topts.enc.insitu(d);\n\t}\n\tbufs.push(d);\n\tblob.l += l;\n\tvar next = (XLSRecordEnum[__readUInt16LE(blob,blob.l)]);\n\tvar start = 0;\n\twhile(next != null && next.n.slice(0,8) === 'Continue') {\n\t\tl = __readUInt16LE(blob,blob.l+2);\n\t\tstart = blob.l + 4;\n\t\tif(next.n == 'ContinueFrt') start += 4;\n\t\telse if(next.n.slice(0,11) == 'ContinueFrt') start += 12;\n\t\tbufs.push(blob.slice(start,blob.l+4+l));\n\t\tblob.l += 4+l;\n\t\tnext = (XLSRecordEnum[__readUInt16LE(blob, blob.l)]);\n\t}\n\tvar b = (bconcat(bufs));\n\tprep_blob(b, 0);\n\tvar ll = 0; b.lens = [];\n\tfor(var j = 0; j < bufs.length; ++j) { b.lens.push(ll); ll += bufs[j].length; }\n\treturn R.f(b, b.length, opts);\n}\n\nfunction safe_format_xf(p, opts, date1904) {\n\tif(p.t === 'z') return;\n\tif(!p.XF) return;\n\tvar fmtid = 0;\n\ttry {\n\t\tfmtid = p.z || p.XF.numFmtId || 0;\n\t\tif(opts.cellNF) p.z = SSF._table[fmtid];\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(!opts || opts.cellText !== false) try {\n\t\tif(p.t === 'e') { p.w = p.w || BErr[p.v]; }\n\t\telse if(fmtid === 0 || fmtid == \"General\") {\n\t\t\tif(p.t === 'n') {\n\t\t\t\tif((p.v|0) === p.v) p.w = SSF._general_int(p.v);\n\t\t\t\telse p.w = SSF._general_num(p.v);\n\t\t\t}\n\t\t\telse p.w = SSF._general(p.v);\n\t\t}\n\t\telse p.w = SSF.format(fmtid,p.v, {date1904:!!date1904});\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(opts.cellDates && fmtid && p.t == 'n' && SSF.is_date(SSF._table[fmtid] || String(fmtid))) {\n\t\tvar _d = SSF.parse_date_code(p.v); if(_d) { p.t = 'd'; p.v = new Date(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u); }\n\t}\n}\n\nfunction make_cell(val, ixfe, t) {\n\treturn ({v:val, ixfe:ixfe, t:t});\n}\n\n// 2.3.2\nfunction parse_workbook(blob, options) {\n\tvar wb = ({opts:{}});\n\tvar Sheets = {};\n\tif(DENSE != null && options.dense == null) options.dense = DENSE;\n\tvar out = ((options.dense ? [] : {}));\n\tvar Directory = {};\n\tvar range = ({});\n\tvar last_formula = null;\n\tvar sst = ([]);\n\tvar cur_sheet = \"\";\n\tvar Preamble = {};\n\tvar lastcell, last_cell = \"\", cc, cmnt, rngC, rngR;\n\tvar sharedf = {};\n\tvar arrayf = [];\n\tvar temp_val;\n\tvar country;\n\tvar cell_valid = true;\n\tvar XFs = []; /* XF records */\n\tvar palette = [];\n\tvar Workbook = ({ Sheets:[], WBProps:{date1904:false}, Views:[{}] }), wsprops = {};\n\tvar get_rgb = function getrgb(icv) {\n\t\tif(icv < 8) return XLSIcv[icv];\n\t\tif(icv < 64) return palette[icv-8] || XLSIcv[icv];\n\t\treturn XLSIcv[icv];\n\t};\n\tvar process_cell_style = function pcs(cell, line, options) {\n\t\tvar xfd = line.XF.data;\n\t\tif(!xfd || !xfd.patternType || !options || !options.cellStyles) return;\n\t\tline.s = ({});\n\t\tline.s.patternType = xfd.patternType;\n\t\tvar t;\n\t\tif((t = rgb2Hex(get_rgb(xfd.icvFore)))) { line.s.fgColor = {rgb:t}; }\n\t\tif((t = rgb2Hex(get_rgb(xfd.icvBack)))) { line.s.bgColor = {rgb:t}; }\n\t};\n\tvar addcell = function addcell(cell, line, options) {\n\t\tif(file_depth > 1) return;\n\t\tif(options.sheetRows && cell.r >= options.sheetRows) cell_valid = false;\n\t\tif(!cell_valid) return;\n\t\tif(options.cellStyles && line.XF && line.XF.data) process_cell_style(cell, line, options);\n\t\tdelete line.ixfe; delete line.XF;\n\t\tlastcell = cell;\n\t\tlast_cell = encode_cell(cell);\n\t\tif(!range || !range.s || !range.e) range = {s:{r:0,c:0},e:{r:0,c:0}};\n\t\tif(cell.r < range.s.r) range.s.r = cell.r;\n\t\tif(cell.c < range.s.c) range.s.c = cell.c;\n\t\tif(cell.r + 1 > range.e.r) range.e.r = cell.r + 1;\n\t\tif(cell.c + 1 > range.e.c) range.e.c = cell.c + 1;\n\t\tif(options.cellFormula && line.f) {\n\t\t\tfor(var afi = 0; afi < arrayf.length; ++afi) {\n\t\t\t\tif(arrayf[afi][0].s.c > cell.c || arrayf[afi][0].s.r > cell.r) continue;\n\t\t\t\tif(arrayf[afi][0].e.c < cell.c || arrayf[afi][0].e.r < cell.r) continue;\n\t\t\t\tline.F = encode_range(arrayf[afi][0]);\n\t\t\t\tif(arrayf[afi][0].s.c != cell.c || arrayf[afi][0].s.r != cell.r) delete line.f;\n\t\t\t\tif(line.f) line.f = \"\" + stringify_formula(arrayf[afi][1], range, cell, supbooks, opts);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t{\n\t\t\tif(options.dense) {\n\t\t\t\tif(!out[cell.r]) out[cell.r] = [];\n\t\t\t\tout[cell.r][cell.c] = line;\n\t\t\t} else out[last_cell] = line;\n\t\t}\n\t};\n\tvar opts = ({\n\t\tenc: false, // encrypted\n\t\tsbcch: 0, // cch in the preceding SupBook\n\t\tsnames: [], // sheetnames\n\t\tsharedf: sharedf, // shared formulae by address\n\t\tarrayf: arrayf, // array formulae array\n\t\trrtabid: [], // RRTabId\n\t\tlastuser: \"\", // Last User from WriteAccess\n\t\tbiff: 8, // BIFF version\n\t\tcodepage: 0, // CP from CodePage record\n\t\twinlocked: 0, // fLockWn from WinProtect\n\t\tcellStyles: !!options && !!options.cellStyles,\n\t\tWTF: !!options && !!options.wtf\n\t});\n\tif(options.password) opts.password = options.password;\n\tvar themes;\n\tvar merges = [];\n\tvar objects = [];\n\tvar colinfo = [], rowinfo = [];\n\t// eslint-disable-next-line no-unused-vars\n\tvar defwidth = 0, defheight = 0; // twips / MDW respectively\n\tvar seencol = false;\n\tvar supbooks = ([]); // 1-indexed, will hold extern names\n\tsupbooks.SheetNames = opts.snames;\n\tsupbooks.sharedf = opts.sharedf;\n\tsupbooks.arrayf = opts.arrayf;\n\tsupbooks.names = [];\n\tsupbooks.XTI = [];\n\tvar last_Rn = '';\n\tvar file_depth = 0; /* TODO: make a real stack */\n\tvar BIFF2Fmt = 0, BIFF2FmtTable = [];\n\tvar FilterDatabases = []; /* TODO: sort out supbooks and process elsewhere */\n\tvar last_lbl;\n\n\t/* explicit override for some broken writers */\n\topts.codepage = 1200;\n\tset_cp(1200);\n\tvar seen_codepage = false;\n\twhile(blob.l < blob.length - 1) {\n\t\tvar s = blob.l;\n\t\tvar RecordType = blob.read_shift(2);\n\t\tif(RecordType === 0 && last_Rn === 'EOF') break;\n\t\tvar length = (blob.l === blob.length ? 0 : blob.read_shift(2));\n\t\tvar R = XLSRecordEnum[RecordType];\n\t\t//console.log(RecordType.toString(16), RecordType, R, blob.l, length, blob.length);\n\t\t//if(!R) console.log(blob.slice(blob.l, blob.l + length));\n\t\tif(R && R.f) {\n\t\t\tif(options.bookSheets) {\n\t\t\t\tif(last_Rn === 'BoundSheet8' && R.n !== 'BoundSheet8') break;\n\t\t\t}\n\t\t\tlast_Rn = R.n;\n\t\t\tif(R.r === 2 || R.r == 12) {\n\t\t\t\tvar rt = blob.read_shift(2); length -= 2;\n\t\t\t\tif(!opts.enc && rt !== RecordType && (((rt&0xFF)<<8)|(rt>>8)) !== RecordType) throw new Error(\"rt mismatch: \" + rt + \"!=\" + RecordType);\n\t\t\t\tif(R.r == 12){ blob.l += 10; length -= 10; } // skip FRT\n\t\t\t}\n\t\t\t//console.error(R,blob.l,length,blob.length);\n\t\t\tvar val = ({});\n\t\t\tif(R.n === 'EOF') val = R.f(blob, length, opts);\n\t\t\telse val = slurp(R, blob, length, opts);\n\t\t\tvar Rn = R.n;\nif(file_depth == 0 && Rn != 'BOF') continue;\n\t\t\t/* nested switch statements to workaround V8 128 limit */\n\t\t\tswitch(Rn) {\n\t\t\t\t/* Workbook Options */\n\t\t\t\tcase 'Date1904':\nwb.opts.Date1904 = Workbook.WBProps.date1904 = val; break;\n\t\t\t\tcase 'WriteProtect': wb.opts.WriteProtect = true; break;\n\t\t\t\tcase 'FilePass':\n\t\t\t\t\tif(!opts.enc) blob.l = 0;\n\t\t\t\t\topts.enc = val;\n\t\t\t\t\tif(!options.password) throw new Error(\"File is password-protected\");\n\t\t\t\t\tif(val.valid == null) throw new Error(\"Encryption scheme unsupported\");\n\t\t\t\t\tif(!val.valid) throw new Error(\"Password is incorrect\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'WriteAccess': opts.lastuser = val; break;\n\t\t\t\tcase 'FileSharing': break; //TODO\n\t\t\t\tcase 'CodePage':\n\t\t\t\t\tvar cpval = Number(val);\n\t\t\t\t\t/* overrides based on test cases */\n\t\t\t\t\tswitch(cpval) {\n\t\t\t\t\t\tcase 0x5212: cpval = 1200; break;\n\t\t\t\t\t\tcase 0x8000: cpval = 10000; break;\n\t\t\t\t\t\tcase 0x8001: cpval = 1252; break;\n\t\t\t\t\t}\n\t\t\t\t\tset_cp(opts.codepage = cpval);\n\t\t\t\t\tseen_codepage = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'RRTabId': opts.rrtabid = val; break;\n\t\t\t\tcase 'WinProtect': opts.winlocked = val; break;\n\t\t\t\tcase 'Template': break; // TODO\n\t\t\t\tcase 'BookBool': break; // TODO\n\t\t\t\tcase 'UsesELFs': break;\n\t\t\t\tcase 'MTRSettings': break;\n\t\t\t\tcase 'RefreshAll':\n\t\t\t\tcase 'CalcCount':\n\t\t\t\tcase 'CalcDelta':\n\t\t\t\tcase 'CalcIter':\n\t\t\t\tcase 'CalcMode':\n\t\t\t\tcase 'CalcPrecision':\n\t\t\t\tcase 'CalcSaveRecalc':\n\t\t\t\t\twb.opts[Rn] = val; break;\n\t\t\t\tcase 'CalcRefMode': opts.CalcRefMode = val; break; // TODO: implement R1C1\n\t\t\t\tcase 'Uncalced': break;\n\t\t\t\tcase 'ForceFullCalculation': wb.opts.FullCalc = val; break;\n\t\t\t\tcase 'WsBool':\n\t\t\t\t\tif(val.fDialog) out[\"!type\"] = \"dialog\";\n\t\t\t\t\tbreak; // TODO\n\t\t\t\tcase 'XF':\n\t\t\t\t\tXFs.push(val); break;\n\t\t\t\tcase 'ExtSST': break; // TODO\n\t\t\t\tcase 'BookExt': break; // TODO\n\t\t\t\tcase 'RichTextStream': break;\n\t\t\t\tcase 'BkHim': break;\n\n\t\t\t\tcase 'SupBook':\n\t\t\t\t\tsupbooks.push([val]);\n\t\t\t\t\tsupbooks[supbooks.length-1].XTI = [];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'ExternName':\n\t\t\t\t\tsupbooks[supbooks.length-1].push(val);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Index': break; // TODO\n\t\t\t\tcase 'Lbl':\n\t\t\t\t\tlast_lbl = ({\n\t\t\t\t\t\tName: val.Name,\n\t\t\t\t\t\tRef: stringify_formula(val.rgce,range,null,supbooks,opts)\n\t\t\t\t\t});\n\t\t\t\t\tif(val.itab > 0) last_lbl.Sheet = val.itab - 1;\n\t\t\t\t\tsupbooks.names.push(last_lbl);\n\t\t\t\t\tif(!supbooks[0]) { supbooks[0] = []; supbooks[0].XTI = []; }\n\t\t\t\t\tsupbooks[supbooks.length-1].push(val);\n\t\t\t\t\tif(val.Name == \"_xlnm._FilterDatabase\" && val.itab > 0)\n\t\t\t\t\t\tif(val.rgce && val.rgce[0] && val.rgce[0][0] && val.rgce[0][0][0] == 'PtgArea3d')\n\t\t\t\t\t\t\tFilterDatabases[val.itab - 1] = { ref: encode_range(val.rgce[0][0][1][2]) };\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'ExternCount': opts.ExternCount = val; break;\n\t\t\t\tcase 'ExternSheet':\n\t\t\t\t\tif(supbooks.length == 0) { supbooks[0] = []; supbooks[0].XTI = []; }\n\t\t\t\t\tsupbooks[supbooks.length - 1].XTI = supbooks[supbooks.length - 1].XTI.concat(val); supbooks.XTI = supbooks.XTI.concat(val); break;\n\t\t\t\tcase 'NameCmt':\n\t\t\t\t\t/* TODO: search for correct name */\n\t\t\t\t\tif(opts.biff < 8) break;\n\t\t\t\t\tif(last_lbl != null) last_lbl.Comment = val[1];\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Protect': out[\"!protect\"] = val; break; /* for sheet or book */\n\t\t\t\tcase 'Password': if(val !== 0 && opts.WTF) console.error(\"Password verifier: \" + val); break;\n\t\t\t\tcase 'Prot4Rev': case 'Prot4RevPass': break; /*TODO: Revision Control*/\n\n\t\t\t\tcase 'BoundSheet8': {\n\t\t\t\t\tDirectory[val.pos] = val;\n\t\t\t\t\topts.snames.push(val.name);\n\t\t\t\t} break;\n\t\t\t\tcase 'EOF': {\n\t\t\t\t\tif(--file_depth) break;\n\t\t\t\t\tif(range.e) {\n\t\t\t\t\t\tif(range.e.r > 0 && range.e.c > 0) {\n\t\t\t\t\t\t\trange.e.r--; range.e.c--;\n\t\t\t\t\t\t\tout[\"!ref\"] = encode_range(range);\n\t\t\t\t\t\t\tif(options.sheetRows && options.sheetRows <= range.e.r) {\n\t\t\t\t\t\t\t\tvar tmpri = range.e.r;\n\t\t\t\t\t\t\t\trange.e.r = options.sheetRows - 1;\n\t\t\t\t\t\t\t\tout[\"!fullref\"] = out[\"!ref\"];\n\t\t\t\t\t\t\t\tout[\"!ref\"] = encode_range(range);\n\t\t\t\t\t\t\t\trange.e.r = tmpri;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\trange.e.r++; range.e.c++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(merges.length > 0) out[\"!merges\"] = merges;\n\t\t\t\t\t\tif(objects.length > 0) out[\"!objects\"] = objects;\n\t\t\t\t\t\tif(colinfo.length > 0) out[\"!cols\"] = colinfo;\n\t\t\t\t\t\tif(rowinfo.length > 0) out[\"!rows\"] = rowinfo;\n\t\t\t\t\t\tWorkbook.Sheets.push(wsprops);\n\t\t\t\t\t}\n\t\t\t\t\tif(cur_sheet === \"\") Preamble = out; else Sheets[cur_sheet] = out;\n\t\t\t\t\tout = ((options.dense ? [] : {}));\n\t\t\t\t} break;\n\t\t\t\tcase 'BOF': {\n\t\t\t\t\tif(opts.biff === 8) opts.biff = {\n0x0009:2,\n0x0209:3,\n0x0409:4\n\t\t\t\t\t}[RecordType] || {\n0x0200:2,\n0x0300:3,\n0x0400:4,\n0x0500:5,\n0x0600:8,\n0x0002:2,\n0x0007:2\n\t\t\t\t\t}[val.BIFFVer] || 8;\n\t\t\t\t\tif(opts.biff == 8 && val.BIFFVer == 0 && val.dt == 16) opts.biff = 2;\n\t\t\t\t\tif(file_depth++) break;\n\t\t\t\t\tcell_valid = true;\n\t\t\t\t\tout = ((options.dense ? [] : {}));\n\n\t\t\t\t\tif(opts.biff < 8 && !seen_codepage) { seen_codepage = true; set_cp(opts.codepage = options.codepage || 1252); }\n\t\t\t\t\tif(opts.biff < 5) {\n\t\t\t\t\t\tif(cur_sheet === \"\") cur_sheet = \"Sheet1\";\n\t\t\t\t\t\trange = {s:{r:0,c:0},e:{r:0,c:0}};\n\t\t\t\t\t\t/* fake BoundSheet8 */\n\t\t\t\t\t\tvar fakebs8 = {pos: blob.l - length, name:cur_sheet};\n\t\t\t\t\t\tDirectory[fakebs8.pos] = fakebs8;\n\t\t\t\t\t\topts.snames.push(cur_sheet);\n\t\t\t\t\t}\n\t\t\t\t\telse cur_sheet = (Directory[s] || {name:\"\"}).name;\n\t\t\t\t\tif(val.dt == 0x20) out[\"!type\"] = \"chart\";\n\t\t\t\t\tif(val.dt == 0x40) out[\"!type\"] = \"macro\";\n\t\t\t\t\tmerges = [];\n\t\t\t\t\tobjects = [];\n\t\t\t\t\topts.arrayf = arrayf = [];\n\t\t\t\t\tcolinfo = []; rowinfo = [];\n\t\t\t\t\tdefwidth = defheight = 0;\n\t\t\t\t\tseencol = false;\n\t\t\t\t\twsprops = {Hidden:(Directory[s]||{hs:0}).hs, name:cur_sheet };\n\t\t\t\t} break;\n\n\t\t\t\tcase 'Number': case 'BIFF2NUM': case 'BIFF2INT': {\n\t\t\t\t\tif(out[\"!type\"] == \"chart\") if(options.dense ? (out[val.r]||[])[val.c]: out[encode_cell({c:val.c, r:val.r})]) ++val.c;\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe]||{}, v:val.val, t:'n'});\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 'BoolErr': {\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe], v:val.val, t:val.t});\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 'RK': {\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe], v:val.rknum, t:'n'});\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 'MulRk': {\n\t\t\t\t\tfor(var j = val.c; j <= val.C; ++j) {\n\t\t\t\t\t\tvar ixfe = val.rkrec[j-val.c][0];\n\t\t\t\t\t\ttemp_val= ({ixfe:ixfe, XF:XFs[ixfe], v:val.rkrec[j-val.c][1], t:'n'});\n\t\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F];\n\t\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\t\taddcell({c:j, r:val.r}, temp_val, options);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 'Formula': {\n\t\t\t\t\tif(val.val == 'String') { last_formula = val; break; }\n\t\t\t\t\ttemp_val = make_cell(val.val, val.cell.ixfe, val.tt);\n\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\tif(options.cellFormula) {\n\t\t\t\t\t\tvar _f = val.formula;\n\t\t\t\t\t\tif(_f && _f[0] && _f[0][0] && _f[0][0][0] == 'PtgExp') {\n\t\t\t\t\t\t\tvar _fr = _f[0][0][1][0], _fc = _f[0][0][1][1];\n\t\t\t\t\t\t\tvar _fe = encode_cell({r:_fr, c:_fc});\n\t\t\t\t\t\t\tif(sharedf[_fe]) temp_val.f = \"\"+stringify_formula(val.formula,range,val.cell,supbooks, opts);\n\t\t\t\t\t\t\telse temp_val.F = ((options.dense ? (out[_fr]||[])[_fc]: out[_fe]) || {}).F;\n\t\t\t\t\t\t} else temp_val.f = \"\"+stringify_formula(val.formula,range,val.cell,supbooks, opts);\n\t\t\t\t\t}\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell(val.cell, temp_val, options);\n\t\t\t\t\tlast_formula = val;\n\t\t\t\t} break;\n\t\t\t\tcase 'String': {\n\t\t\t\t\tif(last_formula) { /* technically always true */\n\t\t\t\t\t\tlast_formula.val = val;\n\t\t\t\t\t\ttemp_val = make_cell(val, last_formula.cell.ixfe, 's');\n\t\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\t\tif(options.cellFormula) {\n\t\t\t\t\t\t\ttemp_val.f = \"\"+stringify_formula(last_formula.formula, range, last_formula.cell, supbooks, opts);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F];\n\t\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\t\taddcell(last_formula.cell, temp_val, options);\n\t\t\t\t\t\tlast_formula = null;\n\t\t\t\t\t} else throw new Error(\"String record expects Formula\");\n\t\t\t\t} break;\n\t\t\t\tcase 'Array': {\n\t\t\t\t\tarrayf.push(val);\n\t\t\t\t\tvar _arraystart = encode_cell(val[0].s);\n\t\t\t\t\tcc = options.dense ? (out[val[0].s.r]||[])[val[0].s.c] : out[_arraystart];\n\t\t\t\t\tif(options.cellFormula && cc) {\n\t\t\t\t\t\tif(!last_formula) break; /* technically unreachable */\n\t\t\t\t\t\tif(!_arraystart || !cc) break;\n\t\t\t\t\t\tcc.f = \"\"+stringify_formula(val[1], range, val[0], supbooks, opts);\n\t\t\t\t\t\tcc.F = encode_range(val[0]);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 'ShrFmla': {\n\t\t\t\t\tif(!cell_valid) break;\n\t\t\t\t\tif(!options.cellFormula) break;\n\t\t\t\t\tif(last_cell) {\n\t\t\t\t\t\t/* TODO: capture range */\n\t\t\t\t\t\tif(!last_formula) break; /* technically unreachable */\n\t\t\t\t\t\tsharedf[encode_cell(last_formula.cell)]= val[0];\n\t\t\t\t\t\tcc = options.dense ? (out[last_formula.cell.r]||[])[last_formula.cell.c] : out[encode_cell(last_formula.cell)];\n\t\t\t\t\t\t(cc||{}).f = \"\"+stringify_formula(val[0], range, lastcell, supbooks, opts);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 'LabelSst':\n\t\t\t\t\ttemp_val=make_cell(sst[val.isst].t, val.ixfe, 's');\n\t\t\t\t\tif(sst[val.isst].h) temp_val.h = sst[val.isst].h;\n\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Blank': if(options.sheetStubs) {\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe], t:'z'});\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 'MulBlank': if(options.sheetStubs) {\n\t\t\t\t\tfor(var _j = val.c; _j <= val.C; ++_j) {\n\t\t\t\t\t\tvar _ixfe = val.ixfe[_j-val.c];\n\t\t\t\t\t\ttemp_val= ({ixfe:_ixfe, XF:XFs[_ixfe], t:'z'});\n\t\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F];\n\t\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\t\taddcell({c:_j, r:val.r}, temp_val, options);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 'RString':\n\t\t\t\tcase 'Label': case 'BIFF2STR':\n\t\t\t\t\ttemp_val=make_cell(val.val, val.ixfe, 's');\n\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Dimensions': {\n\t\t\t\t\tif(file_depth === 1) range = val; /* TODO: stack */\n\t\t\t\t} break;\n\t\t\t\tcase 'SST': {\n\t\t\t\t\tsst = val;\n\t\t\t\t} break;\n\t\t\t\tcase 'Format': { /* val = [id, fmt] */\n\t\t\t\t\tif(opts.biff == 4) {\n\t\t\t\t\t\tBIFF2FmtTable[BIFF2Fmt++] = val[1];\n\t\t\t\t\t\tfor(var b4idx = 0; b4idx < BIFF2Fmt + 163; ++b4idx) if(SSF._table[b4idx] == val[1]) break;\n\t\t\t\t\t\tif(b4idx >= 163) SSF.load(val[1], BIFF2Fmt + 163);\n\t\t\t\t\t}\n\t\t\t\t\telse SSF.load(val[1], val[0]);\n\t\t\t\t} break;\n\t\t\t\tcase 'BIFF2FORMAT': {\n\t\t\t\t\tBIFF2FmtTable[BIFF2Fmt++] = val;\n\t\t\t\t\tfor(var b2idx = 0; b2idx < BIFF2Fmt + 163; ++b2idx) if(SSF._table[b2idx] == val) break;\n\t\t\t\t\tif(b2idx >= 163) SSF.load(val, BIFF2Fmt + 163);\n\t\t\t\t} break;\n\n\t\t\t\tcase 'MergeCells': merges = merges.concat(val); break;\n\n\t\t\t\tcase 'Obj': objects[val.cmo[0]] = opts.lastobj = val; break;\n\t\t\t\tcase 'TxO': opts.lastobj.TxO = val; break;\n\t\t\t\tcase 'ImData': opts.lastobj.ImData = val; break;\n\n\t\t\t\tcase 'HLink': {\n\t\t\t\t\tfor(rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR)\n\t\t\t\t\t\tfor(rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) {\n\t\t\t\t\t\t\tcc = options.dense ? (out[rngR]||[])[rngC] : out[encode_cell({c:rngC,r:rngR})];\n\t\t\t\t\t\t\tif(cc) cc.l = val[1];\n\t\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 'HLinkTooltip': {\n\t\t\t\t\tfor(rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR)\n\t\t\t\t\t\tfor(rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) {\n\t\t\t\t\t\t\tcc = options.dense ? (out[rngR]||[])[rngC] : out[encode_cell({c:rngC,r:rngR})];\n\t\t\t\t\t\t\tif(cc && cc.l) cc.l.Tooltip = val[1];\n\t\t\t\t\t\t\t}\n\t\t\t\t} break;\n\n\t\t\t\t/* Comments */\n\t\t\t\tcase 'Note': {\n\t\t\t\t\tif(opts.biff <= 5 && opts.biff >= 2) break; /* TODO: BIFF5 */\n\t\t\t\t\tcc = options.dense ? (out[val[0].r]||[])[val[0].c] : out[encode_cell(val[0])];\n\t\t\t\t\tvar noteobj = objects[val[2]];\n\t\t\t\t\tif(!cc) {\n\t\t\t\t\t\tif(options.dense) {\n\t\t\t\t\t\t\tif(!out[val[0].r]) out[val[0].r] = [];\n\t\t\t\t\t\t\tcc = out[val[0].r][val[0].c] = ({t:\"z\"});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcc = out[encode_cell(val[0])] = ({t:\"z\"});\n\t\t\t\t\t\t}\n\t\t\t\t\t\trange.e.r = Math.max(range.e.r, val[0].r);\n\t\t\t\t\t\trange.s.r = Math.min(range.s.r, val[0].r);\n\t\t\t\t\t\trange.e.c = Math.max(range.e.c, val[0].c);\n\t\t\t\t\t\trange.s.c = Math.min(range.s.c, val[0].c);\n\t\t\t\t\t}\n\t\t\t\t\tif(!cc.c) cc.c = [];\n\t\t\t\t\tcmnt = {a:val[1],t:noteobj.TxO.t};\n\t\t\t\t\tcc.c.push(cmnt);\n\t\t\t\t} break;\n\n\t\t\t\tdefault: switch(R.n) { /* nested */\n\t\t\t\tcase 'ClrtClient': break;\n\t\t\t\tcase 'XFExt': update_xfext(XFs[val.ixfe], val.ext); break;\n\n\t\t\t\tcase 'DefColWidth': defwidth = val; break;\n\t\t\t\tcase 'DefaultRowHeight': defheight = val[1]; break; // TODO: flags\n\n\t\t\t\tcase 'ColInfo': {\n\t\t\t\t\tif(!opts.cellStyles) break;\n\t\t\t\t\twhile(val.e >= val.s) {\n\t\t\t\t\t\tcolinfo[val.e--] = { width: val.w/256 };\n\t\t\t\t\t\tif(!seencol) { seencol = true; find_mdw_colw(val.w/256); }\n\t\t\t\t\t\tprocess_col(colinfo[val.e+1]);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 'Row': {\n\t\t\t\t\tvar rowobj = {};\n\t\t\t\t\tif(val.level != null) { rowinfo[val.r] = rowobj; rowobj.level = val.level; }\n\t\t\t\t\tif(val.hidden) { rowinfo[val.r] = rowobj; rowobj.hidden = true; }\n\t\t\t\t\tif(val.hpt) {\n\t\t\t\t\t\trowinfo[val.r] = rowobj;\n\t\t\t\t\t\trowobj.hpt = val.hpt; rowobj.hpx = pt2px(val.hpt);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\n\t\t\t\tcase 'LeftMargin':\n\t\t\t\tcase 'RightMargin':\n\t\t\t\tcase 'TopMargin':\n\t\t\t\tcase 'BottomMargin':\n\t\t\t\t\tif(!out['!margins']) default_margins(out['!margins'] = {});\n\t\t\t\t\tout['!margins'][Rn.slice(0,-6).toLowerCase()] = val;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Setup': // TODO\n\t\t\t\t\tif(!out['!margins']) default_margins(out['!margins'] = {});\n\t\t\t\t\tout['!margins'].header = val.header;\n\t\t\t\t\tout['!margins'].footer = val.footer;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Window2': // TODO\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tif(val.RTL) Workbook.Views[0].RTL = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Header': break; // TODO\n\t\t\t\tcase 'Footer': break; // TODO\n\t\t\t\tcase 'HCenter': break; // TODO\n\t\t\t\tcase 'VCenter': break; // TODO\n\t\t\t\tcase 'Pls': break; // TODO\n\t\t\t\tcase 'GCW': break;\n\t\t\t\tcase 'LHRecord': break;\n\t\t\t\tcase 'DBCell': break; // TODO\n\t\t\t\tcase 'EntExU2': break; // TODO\n\t\t\t\tcase 'SxView': break; // TODO\n\t\t\t\tcase 'Sxvd': break; // TODO\n\t\t\t\tcase 'SXVI': break; // TODO\n\t\t\t\tcase 'SXVDEx': break; // TODO\n\t\t\t\tcase 'SxIvd': break; // TODO\n\t\t\t\tcase 'SXString': break; // TODO\n\t\t\t\tcase 'Sync': break;\n\t\t\t\tcase 'Addin': break;\n\t\t\t\tcase 'SXDI': break; // TODO\n\t\t\t\tcase 'SXLI': break; // TODO\n\t\t\t\tcase 'SXEx': break; // TODO\n\t\t\t\tcase 'QsiSXTag': break; // TODO\n\t\t\t\tcase 'Selection': break;\n\t\t\t\tcase 'Feat': break;\n\t\t\t\tcase 'FeatHdr': case 'FeatHdr11': break;\n\t\t\t\tcase 'Feature11': case 'Feature12': case 'List12': break;\n\t\t\t\tcase 'Country': country = val; break;\n\t\t\t\tcase 'RecalcId': break;\n\t\t\t\tcase 'DxGCol': break; // TODO: htmlify\n\t\t\t\tcase 'Fbi': case 'Fbi2': case 'GelFrame': break;\n\t\t\t\tcase 'Font': break; // TODO\n\t\t\t\tcase 'XFCRC': break; // TODO\n\t\t\t\tcase 'Style': break; // TODO\n\t\t\t\tcase 'StyleExt': break; // TODO\n\t\t\t\tcase 'Palette': palette = val; break;\n\t\t\t\tcase 'Theme': themes = val; break;\n\t\t\t\t/* Protection */\n\t\t\t\tcase 'ScenarioProtect': break;\n\t\t\t\tcase 'ObjProtect': break;\n\n\t\t\t\t/* Conditional Formatting */\n\t\t\t\tcase 'CondFmt12': break;\n\n\t\t\t\t/* Table */\n\t\t\t\tcase 'Table': break; // TODO\n\t\t\t\tcase 'TableStyles': break; // TODO\n\t\t\t\tcase 'TableStyle': break; // TODO\n\t\t\t\tcase 'TableStyleElement': break; // TODO\n\n\t\t\t\t/* PivotTable */\n\t\t\t\tcase 'SXStreamID': break; // TODO\n\t\t\t\tcase 'SXVS': break; // TODO\n\t\t\t\tcase 'DConRef': break; // TODO\n\t\t\t\tcase 'SXAddl': break; // TODO\n\t\t\t\tcase 'DConBin': break; // TODO\n\t\t\t\tcase 'DConName': break; // TODO\n\t\t\t\tcase 'SXPI': break; // TODO\n\t\t\t\tcase 'SxFormat': break; // TODO\n\t\t\t\tcase 'SxSelect': break; // TODO\n\t\t\t\tcase 'SxRule': break; // TODO\n\t\t\t\tcase 'SxFilt': break; // TODO\n\t\t\t\tcase 'SxItm': break; // TODO\n\t\t\t\tcase 'SxDXF': break; // TODO\n\n\t\t\t\t/* Scenario Manager */\n\t\t\t\tcase 'ScenMan': break;\n\n\t\t\t\t/* Data Consolidation */\n\t\t\t\tcase 'DCon': break;\n\n\t\t\t\t/* Watched Cell */\n\t\t\t\tcase 'CellWatch': break;\n\n\t\t\t\t/* Print Settings */\n\t\t\t\tcase 'PrintRowCol': break;\n\t\t\t\tcase 'PrintGrid': break;\n\t\t\t\tcase 'PrintSize': break;\n\n\t\t\t\tcase 'XCT': break;\n\t\t\t\tcase 'CRN': break;\n\n\t\t\t\tcase 'Scl': {\n\t\t\t\t\t//console.log(\"Zoom Level:\", val[0]/val[1],val);\n\t\t\t\t} break;\n\t\t\t\tcase 'SheetExt': {\n\t\t\t\t\t/* empty */\n\t\t\t\t} break;\n\t\t\t\tcase 'SheetExtOptional': {\n\t\t\t\t\t/* empty */\n\t\t\t\t} break;\n\n\t\t\t\t/* VBA */\n\t\t\t\tcase 'ObNoMacros': {\n\t\t\t\t\t/* empty */\n\t\t\t\t} break;\n\t\t\t\tcase 'ObProj': {\n\t\t\t\t\t/* empty */\n\t\t\t\t} break;\n\t\t\t\tcase 'CodeName': {\nif(!cur_sheet) Workbook.WBProps.CodeName = val || \"ThisWorkbook\";\n\t\t\t\t\telse wsprops.CodeName = val || wsprops.name;\n\t\t\t\t} break;\n\t\t\t\tcase 'GUIDTypeLib': {\n\t\t\t\t\t/* empty */\n\t\t\t\t} break;\n\n\t\t\t\tcase 'WOpt': break; // TODO: WTF?\n\t\t\t\tcase 'PhoneticInfo': break;\n\n\t\t\t\tcase 'OleObjectSize': break;\n\n\t\t\t\t/* Differential Formatting */\n\t\t\t\tcase 'DXF': case 'DXFN': case 'DXFN12': case 'DXFN12List': case 'DXFN12NoCB': break;\n\n\t\t\t\t/* Data Validation */\n\t\t\t\tcase 'Dv': case 'DVal': break;\n\n\t\t\t\t/* Data Series */\n\t\t\t\tcase 'BRAI': case 'Series': case 'SeriesText': break;\n\n\t\t\t\t/* Data Connection */\n\t\t\t\tcase 'DConn': break;\n\t\t\t\tcase 'DbOrParamQry': break;\n\t\t\t\tcase 'DBQueryExt': break;\n\n\t\t\t\tcase 'OleDbConn': break;\n\t\t\t\tcase 'ExtString': break;\n\n\t\t\t\t/* Formatting */\n\t\t\t\tcase 'IFmtRecord': break;\n\t\t\t\tcase 'CondFmt': case 'CF': case 'CF12': case 'CFEx': break;\n\n\t\t\t\t/* Explicitly Ignored */\n\t\t\t\tcase 'Excel9File': break;\n\t\t\t\tcase 'Units': break;\n\t\t\t\tcase 'InterfaceHdr': case 'Mms': case 'InterfaceEnd': case 'DSF': break;\n\t\t\t\tcase 'BuiltInFnGroupCount': /* 2.4.30 0x0E or 0x10 but excel 2011 generates 0x11? */ break;\n\t\t\t\t/* View Stuff */\n\t\t\t\tcase 'Window1': case 'HideObj': case 'GridSet': case 'Guts':\n\t\t\t\tcase 'UserBView': case 'UserSViewBegin': case 'UserSViewEnd': break;\n\t\t\t\tcase 'Pane': break;\n\t\t\t\tdefault: switch(R.n) { /* nested */\n\t\t\t\t/* Chart */\n\t\t\t\tcase 'Dat':\n\t\t\t\tcase 'Begin': case 'End':\n\t\t\t\tcase 'StartBlock': case 'EndBlock':\n\t\t\t\tcase 'Frame': case 'Area':\n\t\t\t\tcase 'Axis': case 'AxisLine': case 'Tick': break;\n\t\t\t\tcase 'AxesUsed':\n\t\t\t\tcase 'CrtLayout12': case 'CrtLayout12A': case 'CrtLink': case 'CrtLine': case 'CrtMlFrt': case 'CrtMlFrtContinue': break;\n\t\t\t\tcase 'LineFormat': case 'AreaFormat':\n\t\t\t\tcase 'Chart': case 'Chart3d': case 'Chart3DBarShape': case 'ChartFormat': case 'ChartFrtInfo': break;\n\t\t\t\tcase 'PlotArea': case 'PlotGrowth': break;\n\t\t\t\tcase 'SeriesList': case 'SerParent': case 'SerAuxTrend': break;\n\t\t\t\tcase 'DataFormat': case 'SerToCrt': case 'FontX': break;\n\t\t\t\tcase 'CatSerRange': case 'AxcExt': case 'SerFmt': break;\n\t\t\t\tcase 'ShtProps': break;\n\t\t\t\tcase 'DefaultText': case 'Text': case 'CatLab': break;\n\t\t\t\tcase 'DataLabExtContents': break;\n\t\t\t\tcase 'Legend': case 'LegendException': break;\n\t\t\t\tcase 'Pie': case 'Scatter': break;\n\t\t\t\tcase 'PieFormat': case 'MarkerFormat': break;\n\t\t\t\tcase 'StartObject': case 'EndObject': break;\n\t\t\t\tcase 'AlRuns': case 'ObjectLink': break;\n\t\t\t\tcase 'SIIndex': break;\n\t\t\t\tcase 'AttachedLabel': case 'YMult': break;\n\n\t\t\t\t/* Chart Group */\n\t\t\t\tcase 'Line': case 'Bar': break;\n\t\t\t\tcase 'Surf': break;\n\n\t\t\t\t/* Axis Group */\n\t\t\t\tcase 'AxisParent': break;\n\t\t\t\tcase 'Pos': break;\n\t\t\t\tcase 'ValueRange': break;\n\n\t\t\t\t/* Pivot Chart */\n\t\t\t\tcase 'SXViewEx9': break; // TODO\n\t\t\t\tcase 'SXViewLink': break;\n\t\t\t\tcase 'PivotChartBits': break;\n\t\t\t\tcase 'SBaseRef': break;\n\t\t\t\tcase 'TextPropsStream': break;\n\n\t\t\t\t/* Chart Misc */\n\t\t\t\tcase 'LnExt': break;\n\t\t\t\tcase 'MkrExt': break;\n\t\t\t\tcase 'CrtCoopt': break;\n\n\t\t\t\t/* Query Table */\n\t\t\t\tcase 'Qsi': case 'Qsif': case 'Qsir': case 'QsiSXTag': break;\n\t\t\t\tcase 'TxtQry': break;\n\n\t\t\t\t/* Filter */\n\t\t\t\tcase 'FilterMode': break;\n\t\t\t\tcase 'AutoFilter': case 'AutoFilterInfo': break;\n\t\t\t\tcase 'AutoFilter12': break;\n\t\t\t\tcase 'DropDownObjIds': break;\n\t\t\t\tcase 'Sort': break;\n\t\t\t\tcase 'SortData': break;\n\n\t\t\t\t/* Drawing */\n\t\t\t\tcase 'ShapePropsStream': break;\n\t\t\t\tcase 'MsoDrawing': case 'MsoDrawingGroup': case 'MsoDrawingSelection': break;\n\t\t\t\t/* Pub Stuff */\n\t\t\t\tcase 'WebPub': case 'AutoWebPub': break;\n\n\t\t\t\t/* Print Stuff */\n\t\t\t\tcase 'HeaderFooter': case 'HFPicture': case 'PLV':\n\t\t\t\tcase 'HorizontalPageBreaks': case 'VerticalPageBreaks': break;\n\t\t\t\t/* Behavioral */\n\t\t\t\tcase 'Backup': case 'CompressPictures': case 'Compat12': break;\n\n\t\t\t\t/* Should not Happen */\n\t\t\t\tcase 'Continue': case 'ContinueFrt12': break;\n\n\t\t\t\t/* Future Records */\n\t\t\t\tcase 'FrtFontList': case 'FrtWrapper': break;\n\n\t\t\t\tdefault: switch(R.n) { /* nested */\n\t\t\t\t/* BIFF5 records */\n\t\t\t\tcase 'TabIdConf': case 'Radar': case 'RadarArea': case 'DropBar': case 'Intl': case 'CoordList': case 'SerAuxErrBar': break;\n\n\t\t\t\t/* BIFF2-4 records */\n\t\t\t\tcase 'BIFF2FONTCLR': case 'BIFF2FMTCNT': case 'BIFF2FONTXTRA': break;\n\t\t\t\tcase 'BIFF2XF': case 'BIFF3XF': case 'BIFF4XF': break;\n\t\t\t\tcase 'BIFF4FMTCNT': case 'BIFF2ROW': case 'BIFF2WINDOW2': break;\n\n\t\t\t\t/* Miscellaneous */\n\t\t\t\tcase 'SCENARIO': case 'DConBin': case 'PicF': case 'DataLabExt':\n\t\t\t\tcase 'Lel': case 'BopPop': case 'BopPopCustom': case 'RealTimeData':\n\t\t\t\tcase 'Name': break;\n\t\t\t\tcase 'LHNGraph': case 'FnGroupName': case 'AddMenu': case 'LPr': break;\n\t\t\t\tcase 'ListObj': case 'ListField': break;\n\t\t\t\tcase 'RRSort': break;\n\t\t\t\tcase 'BigName': break;\n\t\t\t\tcase 'ToolbarHdr': case 'ToolbarEnd': break;\n\t\t\t\tcase 'DDEObjName': break;\n\t\t\t\tcase 'FRTArchId$': break;\n\t\t\t\tdefault: if(options.WTF) throw 'Unrecognized Record ' + R.n;\n\t\t\t}}}}\n\t\t} else blob.l += length;\n\t}\n\twb.SheetNames=keys(Directory).sort(function(a,b) { return Number(a) - Number(b); }).map(function(x){return Directory[x].name;});\n\tif(!options.bookSheets) wb.Sheets=Sheets;\n\tif(wb.Sheets) FilterDatabases.forEach(function(r,i) { wb.Sheets[wb.SheetNames[i]]['!autofilter'] = r; });\n\twb.Preamble=Preamble;\n\twb.Strings = sst;\n\twb.SSF = SSF.get_table();\n\tif(opts.enc) wb.Encryption = opts.enc;\n\tif(themes) wb.Themes = themes;\n\twb.Metadata = {};\n\tif(country !== undefined) wb.Metadata.Country = country;\n\tif(supbooks.names.length > 0) Workbook.Names = supbooks.names;\n\twb.Workbook = Workbook;\n\treturn wb;\n}\n\n/* TODO: split props*/\nvar PSCLSID = {\n\tSI: \"e0859ff2f94f6810ab9108002b27b3d9\",\n\tDSI: \"02d5cdd59c2e1b10939708002b2cf9ae\",\n\tUDI: \"05d5cdd59c2e1b10939708002b2cf9ae\"\n};\nfunction parse_xls_props(cfb, props, o) {\n\t/* [MS-OSHARED] 2.3.3.2.2 Document Summary Information Property Set */\n\tvar DSI = CFB.find(cfb, '!DocumentSummaryInformation');\n\tif(DSI && DSI.size > 0) try {\n\t\tvar DocSummary = parse_PropertySetStream(DSI, DocSummaryPIDDSI, PSCLSID.DSI);\n\t\tfor(var d in DocSummary) props[d] = DocSummary[d];\n\t} catch(e) {if(o.WTF) throw e;/* empty */}\n\n\t/* [MS-OSHARED] 2.3.3.2.1 Summary Information Property Set*/\n\tvar SI = CFB.find(cfb, '!SummaryInformation');\n\tif(SI && SI.size > 0) try {\n\t\tvar Summary = parse_PropertySetStream(SI, SummaryPIDSI, PSCLSID.SI);\n\t\tfor(var s in Summary) if(props[s] == null) props[s] = Summary[s];\n\t} catch(e) {if(o.WTF) throw e;/* empty */}\n\n\tif(props.HeadingPairs && props.TitlesOfParts) {\n\t\tload_props_pairs(props.HeadingPairs, props.TitlesOfParts, props, o);\n\t\tdelete props.HeadingPairs; delete props.TitlesOfParts;\n\t}\n}\nfunction write_xls_props(wb, cfb) {\n\tvar DSEntries = [], SEntries = [], CEntries = [];\n\tvar i = 0, Keys;\n\tif(wb.Props) {\n\t\tKeys = keys(wb.Props);\n\t\t// $FlowIgnore\n\t\tfor(i = 0; i < Keys.length; ++i) (Object.prototype.hasOwnProperty.call(DocSummaryRE, Keys[i]) ? DSEntries : Object.prototype.hasOwnProperty.call(SummaryRE, Keys[i]) ? SEntries : CEntries).push([Keys[i], wb.Props[Keys[i]]]);\n\t}\n\tif(wb.Custprops) {\n\t\tKeys = keys(wb.Custprops);\n\t\t// $FlowIgnore\n\t\tfor(i = 0; i < Keys.length; ++i) if(!Object.prototype.hasOwnProperty.call((wb.Props||{}), Keys[i])) (Object.prototype.hasOwnProperty.call(DocSummaryRE, Keys[i]) ? DSEntries : Object.prototype.hasOwnProperty.call(SummaryRE, Keys[i]) ? SEntries : CEntries).push([Keys[i], wb.Custprops[Keys[i]]]);\n\t}\n\tvar CEntries2 = [];\n\tfor(i = 0; i < CEntries.length; ++i) {\n\t\tif(XLSPSSkip.indexOf(CEntries[i][0]) > -1) continue;\n\t\tif(CEntries[i][1] == null) continue;\n\t\tCEntries2.push(CEntries[i]);\n\t}\n\tif(SEntries.length) CFB.utils.cfb_add(cfb, \"/\\u0005SummaryInformation\", write_PropertySetStream(SEntries, PSCLSID.SI, SummaryRE, SummaryPIDSI));\n\tif(DSEntries.length || CEntries2.length) CFB.utils.cfb_add(cfb, \"/\\u0005DocumentSummaryInformation\", write_PropertySetStream(DSEntries, PSCLSID.DSI, DocSummaryRE, DocSummaryPIDDSI, CEntries2.length ? CEntries2 : null, PSCLSID.UDI));\n}\n\nfunction parse_xlscfb(cfb, options) {\nif(!options) options = {};\nfix_read_opts(options);\nreset_cp();\nif(options.codepage) set_ansi(options.codepage);\nvar CompObj, WB;\nif(cfb.FullPaths) {\n\tif(CFB.find(cfb, '/encryption')) throw new Error(\"File is password-protected\");\n\tCompObj = CFB.find(cfb, '!CompObj');\n\tWB = CFB.find(cfb, '/Workbook') || CFB.find(cfb, '/Book');\n} else {\n\tswitch(options.type) {\n\t\tcase 'base64': cfb = s2a(Base64.decode(cfb)); break;\n\t\tcase 'binary': cfb = s2a(cfb); break;\n\t\tcase 'buffer': break;\n\t\tcase 'array': if(!Array.isArray(cfb)) cfb = Array.prototype.slice.call(cfb); break;\n\t}\n\tprep_blob(cfb, 0);\n\tWB = ({content: cfb});\n}\nvar WorkbookP;\n\nvar _data;\nif(CompObj) parse_compobj(CompObj);\nif(options.bookProps && !options.bookSheets) WorkbookP = ({});\nelse {\n\tvar T = has_buf ? 'buffer' : 'array';\n\tif(WB && WB.content) WorkbookP = parse_workbook(WB.content, options);\n\t/* Quattro Pro 7-8 */\n\telse if((_data=CFB.find(cfb, 'PerfectOffice_MAIN')) && _data.content) WorkbookP = WK_.to_workbook(_data.content, (options.type = T, options));\n\t/* Quattro Pro 9 */\n\telse if((_data=CFB.find(cfb, 'NativeContent_MAIN')) && _data.content) WorkbookP = WK_.to_workbook(_data.content, (options.type = T, options));\n\telse throw new Error(\"Cannot find Workbook stream\");\n\tif(options.bookVBA && cfb.FullPaths && CFB.find(cfb, '/_VBA_PROJECT_CUR/VBA/dir')) WorkbookP.vbaraw = make_vba_xls(cfb);\n}\n\nvar props = {};\nif(cfb.FullPaths) parse_xls_props(cfb, props, options);\n\nWorkbookP.Props = WorkbookP.Custprops = props; /* TODO: split up properties */\nif(options.bookFiles) WorkbookP.cfb = cfb;\n/*WorkbookP.CompObjP = CompObjP; // TODO: storage? */\nreturn WorkbookP;\n}\n\n\nfunction write_xlscfb(wb, opts) {\n\tvar o = opts || {};\n\tvar cfb = CFB.utils.cfb_new({root:\"R\"});\n\tvar wbpath = \"/Workbook\";\n\tswitch(o.bookType || \"xls\") {\n\t\tcase \"xls\": o.bookType = \"biff8\";\n\t\t/* falls through */\n\t\tcase \"xla\": if(!o.bookType) o.bookType = \"xla\";\n\t\t/* falls through */\n\t\tcase \"biff8\": wbpath = \"/Workbook\"; o.biff = 8; break;\n\t\tcase \"biff5\": wbpath = \"/Book\"; o.biff = 5; break;\n\t\tdefault: throw new Error(\"invalid type \" + o.bookType + \" for XLS CFB\");\n\t}\n\tCFB.utils.cfb_add(cfb, wbpath, write_biff_buf(wb, o));\n\tif(o.biff == 8 && (wb.Props || wb.Custprops)) write_xls_props(wb, cfb);\n\t// TODO: SI, DSI, CO\n\tif(o.biff == 8 && wb.vbaraw) fill_vba_xls(cfb, CFB.read(wb.vbaraw, {type: typeof wb.vbaraw == \"string\" ? \"binary\" : \"buffer\"}));\n\treturn cfb;\n}\n/* [MS-XLSB] 2.3 Record Enumeration */\nvar XLSBRecordEnum = {\n0x0000: { n:\"BrtRowHdr\", f:parse_BrtRowHdr },\n0x0001: { n:\"BrtCellBlank\", f:parse_BrtCellBlank },\n0x0002: { n:\"BrtCellRk\", f:parse_BrtCellRk },\n0x0003: { n:\"BrtCellError\", f:parse_BrtCellError },\n0x0004: { n:\"BrtCellBool\", f:parse_BrtCellBool },\n0x0005: { n:\"BrtCellReal\", f:parse_BrtCellReal },\n0x0006: { n:\"BrtCellSt\", f:parse_BrtCellSt },\n0x0007: { n:\"BrtCellIsst\", f:parse_BrtCellIsst },\n0x0008: { n:\"BrtFmlaString\", f:parse_BrtFmlaString },\n0x0009: { n:\"BrtFmlaNum\", f:parse_BrtFmlaNum },\n0x000A: { n:\"BrtFmlaBool\", f:parse_BrtFmlaBool },\n0x000B: { n:\"BrtFmlaError\", f:parse_BrtFmlaError },\n0x0010: { n:\"BrtFRTArchID$\", f:parse_BrtFRTArchID$ },\n0x0013: { n:\"BrtSSTItem\", f:parse_RichStr },\n0x0014: { n:\"BrtPCDIMissing\" },\n0x0015: { n:\"BrtPCDINumber\" },\n0x0016: { n:\"BrtPCDIBoolean\" },\n0x0017: { n:\"BrtPCDIError\" },\n0x0018: { n:\"BrtPCDIString\" },\n0x0019: { n:\"BrtPCDIDatetime\" },\n0x001A: { n:\"BrtPCDIIndex\" },\n0x001B: { n:\"BrtPCDIAMissing\" },\n0x001C: { n:\"BrtPCDIANumber\" },\n0x001D: { n:\"BrtPCDIABoolean\" },\n0x001E: { n:\"BrtPCDIAError\" },\n0x001F: { n:\"BrtPCDIAString\" },\n0x0020: { n:\"BrtPCDIADatetime\" },\n0x0021: { n:\"BrtPCRRecord\" },\n0x0022: { n:\"BrtPCRRecordDt\" },\n0x0023: { n:\"BrtFRTBegin\" },\n0x0024: { n:\"BrtFRTEnd\" },\n0x0025: { n:\"BrtACBegin\" },\n0x0026: { n:\"BrtACEnd\" },\n0x0027: { n:\"BrtName\", f:parse_BrtName },\n0x0028: { n:\"BrtIndexRowBlock\" },\n0x002A: { n:\"BrtIndexBlock\" },\n0x002B: { n:\"BrtFont\", f:parse_BrtFont },\n0x002C: { n:\"BrtFmt\", f:parse_BrtFmt },\n0x002D: { n:\"BrtFill\", f:parse_BrtFill },\n0x002E: { n:\"BrtBorder\", f:parse_BrtBorder },\n0x002F: { n:\"BrtXF\", f:parse_BrtXF },\n0x0030: { n:\"BrtStyle\" },\n0x0031: { n:\"BrtCellMeta\" },\n0x0032: { n:\"BrtValueMeta\" },\n0x0033: { n:\"BrtMdb\" },\n0x0034: { n:\"BrtBeginFmd\" },\n0x0035: { n:\"BrtEndFmd\" },\n0x0036: { n:\"BrtBeginMdx\" },\n0x0037: { n:\"BrtEndMdx\" },\n0x0038: { n:\"BrtBeginMdxTuple\" },\n0x0039: { n:\"BrtEndMdxTuple\" },\n0x003A: { n:\"BrtMdxMbrIstr\" },\n0x003B: { n:\"BrtStr\" },\n0x003C: { n:\"BrtColInfo\", f:parse_ColInfo },\n0x003E: { n:\"BrtCellRString\" },\n0x003F: { n:\"BrtCalcChainItem$\", f:parse_BrtCalcChainItem$ },\n0x0040: { n:\"BrtDVal\", f:parse_BrtDVal },\n0x0041: { n:\"BrtSxvcellNum\" },\n0x0042: { n:\"BrtSxvcellStr\" },\n0x0043: { n:\"BrtSxvcellBool\" },\n0x0044: { n:\"BrtSxvcellErr\" },\n0x0045: { n:\"BrtSxvcellDate\" },\n0x0046: { n:\"BrtSxvcellNil\" },\n0x0080: { n:\"BrtFileVersion\" },\n0x0081: { n:\"BrtBeginSheet\" },\n0x0082: { n:\"BrtEndSheet\" },\n0x0083: { n:\"BrtBeginBook\", f:parsenoop, p:0 },\n0x0084: { n:\"BrtEndBook\" },\n0x0085: { n:\"BrtBeginWsViews\" },\n0x0086: { n:\"BrtEndWsViews\" },\n0x0087: { n:\"BrtBeginBookViews\" },\n0x0088: { n:\"BrtEndBookViews\" },\n0x0089: { n:\"BrtBeginWsView\", f:parse_BrtBeginWsView },\n0x008A: { n:\"BrtEndWsView\" },\n0x008B: { n:\"BrtBeginCsViews\" },\n0x008C: { n:\"BrtEndCsViews\" },\n0x008D: { n:\"BrtBeginCsView\" },\n0x008E: { n:\"BrtEndCsView\" },\n0x008F: { n:\"BrtBeginBundleShs\" },\n0x0090: { n:\"BrtEndBundleShs\" },\n0x0091: { n:\"BrtBeginSheetData\" },\n0x0092: { n:\"BrtEndSheetData\" },\n0x0093: { n:\"BrtWsProp\", f:parse_BrtWsProp },\n0x0094: { n:\"BrtWsDim\", f:parse_BrtWsDim, p:16 },\n0x0097: { n:\"BrtPane\", f:parse_BrtPane },\n0x0098: { n:\"BrtSel\" },\n0x0099: { n:\"BrtWbProp\", f:parse_BrtWbProp },\n0x009A: { n:\"BrtWbFactoid\" },\n0x009B: { n:\"BrtFileRecover\" },\n0x009C: { n:\"BrtBundleSh\", f:parse_BrtBundleSh },\n0x009D: { n:\"BrtCalcProp\" },\n0x009E: { n:\"BrtBookView\" },\n0x009F: { n:\"BrtBeginSst\", f:parse_BrtBeginSst },\n0x00A0: { n:\"BrtEndSst\" },\n0x00A1: { n:\"BrtBeginAFilter\", f:parse_UncheckedRfX },\n0x00A2: { n:\"BrtEndAFilter\" },\n0x00A3: { n:\"BrtBeginFilterColumn\" },\n0x00A4: { n:\"BrtEndFilterColumn\" },\n0x00A5: { n:\"BrtBeginFilters\" },\n0x00A6: { n:\"BrtEndFilters\" },\n0x00A7: { n:\"BrtFilter\" },\n0x00A8: { n:\"BrtColorFilter\" },\n0x00A9: { n:\"BrtIconFilter\" },\n0x00AA: { n:\"BrtTop10Filter\" },\n0x00AB: { n:\"BrtDynamicFilter\" },\n0x00AC: { n:\"BrtBeginCustomFilters\" },\n0x00AD: { n:\"BrtEndCustomFilters\" },\n0x00AE: { n:\"BrtCustomFilter\" },\n0x00AF: { n:\"BrtAFilterDateGroupItem\" },\n0x00B0: { n:\"BrtMergeCell\", f:parse_BrtMergeCell },\n0x00B1: { n:\"BrtBeginMergeCells\" },\n0x00B2: { n:\"BrtEndMergeCells\" },\n0x00B3: { n:\"BrtBeginPivotCacheDef\" },\n0x00B4: { n:\"BrtEndPivotCacheDef\" },\n0x00B5: { n:\"BrtBeginPCDFields\" },\n0x00B6: { n:\"BrtEndPCDFields\" },\n0x00B7: { n:\"BrtBeginPCDField\" },\n0x00B8: { n:\"BrtEndPCDField\" },\n0x00B9: { n:\"BrtBeginPCDSource\" },\n0x00BA: { n:\"BrtEndPCDSource\" },\n0x00BB: { n:\"BrtBeginPCDSRange\" },\n0x00BC: { n:\"BrtEndPCDSRange\" },\n0x00BD: { n:\"BrtBeginPCDFAtbl\" },\n0x00BE: { n:\"BrtEndPCDFAtbl\" },\n0x00BF: { n:\"BrtBeginPCDIRun\" },\n0x00C0: { n:\"BrtEndPCDIRun\" },\n0x00C1: { n:\"BrtBeginPivotCacheRecords\" },\n0x00C2: { n:\"BrtEndPivotCacheRecords\" },\n0x00C3: { n:\"BrtBeginPCDHierarchies\" },\n0x00C4: { n:\"BrtEndPCDHierarchies\" },\n0x00C5: { n:\"BrtBeginPCDHierarchy\" },\n0x00C6: { n:\"BrtEndPCDHierarchy\" },\n0x00C7: { n:\"BrtBeginPCDHFieldsUsage\" },\n0x00C8: { n:\"BrtEndPCDHFieldsUsage\" },\n0x00C9: { n:\"BrtBeginExtConnection\" },\n0x00CA: { n:\"BrtEndExtConnection\" },\n0x00CB: { n:\"BrtBeginECDbProps\" },\n0x00CC: { n:\"BrtEndECDbProps\" },\n0x00CD: { n:\"BrtBeginECOlapProps\" },\n0x00CE: { n:\"BrtEndECOlapProps\" },\n0x00CF: { n:\"BrtBeginPCDSConsol\" },\n0x00D0: { n:\"BrtEndPCDSConsol\" },\n0x00D1: { n:\"BrtBeginPCDSCPages\" },\n0x00D2: { n:\"BrtEndPCDSCPages\" },\n0x00D3: { n:\"BrtBeginPCDSCPage\" },\n0x00D4: { n:\"BrtEndPCDSCPage\" },\n0x00D5: { n:\"BrtBeginPCDSCPItem\" },\n0x00D6: { n:\"BrtEndPCDSCPItem\" },\n0x00D7: { n:\"BrtBeginPCDSCSets\" },\n0x00D8: { n:\"BrtEndPCDSCSets\" },\n0x00D9: { n:\"BrtBeginPCDSCSet\" },\n0x00DA: { n:\"BrtEndPCDSCSet\" },\n0x00DB: { n:\"BrtBeginPCDFGroup\" },\n0x00DC: { n:\"BrtEndPCDFGroup\" },\n0x00DD: { n:\"BrtBeginPCDFGItems\" },\n0x00DE: { n:\"BrtEndPCDFGItems\" },\n0x00DF: { n:\"BrtBeginPCDFGRange\" },\n0x00E0: { n:\"BrtEndPCDFGRange\" },\n0x00E1: { n:\"BrtBeginPCDFGDiscrete\" },\n0x00E2: { n:\"BrtEndPCDFGDiscrete\" },\n0x00E3: { n:\"BrtBeginPCDSDTupleCache\" },\n0x00E4: { n:\"BrtEndPCDSDTupleCache\" },\n0x00E5: { n:\"BrtBeginPCDSDTCEntries\" },\n0x00E6: { n:\"BrtEndPCDSDTCEntries\" },\n0x00E7: { n:\"BrtBeginPCDSDTCEMembers\" },\n0x00E8: { n:\"BrtEndPCDSDTCEMembers\" },\n0x00E9: { n:\"BrtBeginPCDSDTCEMember\" },\n0x00EA: { n:\"BrtEndPCDSDTCEMember\" },\n0x00EB: { n:\"BrtBeginPCDSDTCQueries\" },\n0x00EC: { n:\"BrtEndPCDSDTCQueries\" },\n0x00ED: { n:\"BrtBeginPCDSDTCQuery\" },\n0x00EE: { n:\"BrtEndPCDSDTCQuery\" },\n0x00EF: { n:\"BrtBeginPCDSDTCSets\" },\n0x00F0: { n:\"BrtEndPCDSDTCSets\" },\n0x00F1: { n:\"BrtBeginPCDSDTCSet\" },\n0x00F2: { n:\"BrtEndPCDSDTCSet\" },\n0x00F3: { n:\"BrtBeginPCDCalcItems\" },\n0x00F4: { n:\"BrtEndPCDCalcItems\" },\n0x00F5: { n:\"BrtBeginPCDCalcItem\" },\n0x00F6: { n:\"BrtEndPCDCalcItem\" },\n0x00F7: { n:\"BrtBeginPRule\" },\n0x00F8: { n:\"BrtEndPRule\" },\n0x00F9: { n:\"BrtBeginPRFilters\" },\n0x00FA: { n:\"BrtEndPRFilters\" },\n0x00FB: { n:\"BrtBeginPRFilter\" },\n0x00FC: { n:\"BrtEndPRFilter\" },\n0x00FD: { n:\"BrtBeginPNames\" },\n0x00FE: { n:\"BrtEndPNames\" },\n0x00FF: { n:\"BrtBeginPName\" },\n0x0100: { n:\"BrtEndPName\" },\n0x0101: { n:\"BrtBeginPNPairs\" },\n0x0102: { n:\"BrtEndPNPairs\" },\n0x0103: { n:\"BrtBeginPNPair\" },\n0x0104: { n:\"BrtEndPNPair\" },\n0x0105: { n:\"BrtBeginECWebProps\" },\n0x0106: { n:\"BrtEndECWebProps\" },\n0x0107: { n:\"BrtBeginEcWpTables\" },\n0x0108: { n:\"BrtEndECWPTables\" },\n0x0109: { n:\"BrtBeginECParams\" },\n0x010A: { n:\"BrtEndECParams\" },\n0x010B: { n:\"BrtBeginECParam\" },\n0x010C: { n:\"BrtEndECParam\" },\n0x010D: { n:\"BrtBeginPCDKPIs\" },\n0x010E: { n:\"BrtEndPCDKPIs\" },\n0x010F: { n:\"BrtBeginPCDKPI\" },\n0x0110: { n:\"BrtEndPCDKPI\" },\n0x0111: { n:\"BrtBeginDims\" },\n0x0112: { n:\"BrtEndDims\" },\n0x0113: { n:\"BrtBeginDim\" },\n0x0114: { n:\"BrtEndDim\" },\n0x0115: { n:\"BrtIndexPartEnd\" },\n0x0116: { n:\"BrtBeginStyleSheet\" },\n0x0117: { n:\"BrtEndStyleSheet\" },\n0x0118: { n:\"BrtBeginSXView\" },\n0x0119: { n:\"BrtEndSXVI\" },\n0x011A: { n:\"BrtBeginSXVI\" },\n0x011B: { n:\"BrtBeginSXVIs\" },\n0x011C: { n:\"BrtEndSXVIs\" },\n0x011D: { n:\"BrtBeginSXVD\" },\n0x011E: { n:\"BrtEndSXVD\" },\n0x011F: { n:\"BrtBeginSXVDs\" },\n0x0120: { n:\"BrtEndSXVDs\" },\n0x0121: { n:\"BrtBeginSXPI\" },\n0x0122: { n:\"BrtEndSXPI\" },\n0x0123: { n:\"BrtBeginSXPIs\" },\n0x0124: { n:\"BrtEndSXPIs\" },\n0x0125: { n:\"BrtBeginSXDI\" },\n0x0126: { n:\"BrtEndSXDI\" },\n0x0127: { n:\"BrtBeginSXDIs\" },\n0x0128: { n:\"BrtEndSXDIs\" },\n0x0129: { n:\"BrtBeginSXLI\" },\n0x012A: { n:\"BrtEndSXLI\" },\n0x012B: { n:\"BrtBeginSXLIRws\" },\n0x012C: { n:\"BrtEndSXLIRws\" },\n0x012D: { n:\"BrtBeginSXLICols\" },\n0x012E: { n:\"BrtEndSXLICols\" },\n0x012F: { n:\"BrtBeginSXFormat\" },\n0x0130: { n:\"BrtEndSXFormat\" },\n0x0131: { n:\"BrtBeginSXFormats\" },\n0x0132: { n:\"BrtEndSxFormats\" },\n0x0133: { n:\"BrtBeginSxSelect\" },\n0x0134: { n:\"BrtEndSxSelect\" },\n0x0135: { n:\"BrtBeginISXVDRws\" },\n0x0136: { n:\"BrtEndISXVDRws\" },\n0x0137: { n:\"BrtBeginISXVDCols\" },\n0x0138: { n:\"BrtEndISXVDCols\" },\n0x0139: { n:\"BrtEndSXLocation\" },\n0x013A: { n:\"BrtBeginSXLocation\" },\n0x013B: { n:\"BrtEndSXView\" },\n0x013C: { n:\"BrtBeginSXTHs\" },\n0x013D: { n:\"BrtEndSXTHs\" },\n0x013E: { n:\"BrtBeginSXTH\" },\n0x013F: { n:\"BrtEndSXTH\" },\n0x0140: { n:\"BrtBeginISXTHRws\" },\n0x0141: { n:\"BrtEndISXTHRws\" },\n0x0142: { n:\"BrtBeginISXTHCols\" },\n0x0143: { n:\"BrtEndISXTHCols\" },\n0x0144: { n:\"BrtBeginSXTDMPS\" },\n0x0145: { n:\"BrtEndSXTDMPs\" },\n0x0146: { n:\"BrtBeginSXTDMP\" },\n0x0147: { n:\"BrtEndSXTDMP\" },\n0x0148: { n:\"BrtBeginSXTHItems\" },\n0x0149: { n:\"BrtEndSXTHItems\" },\n0x014A: { n:\"BrtBeginSXTHItem\" },\n0x014B: { n:\"BrtEndSXTHItem\" },\n0x014C: { n:\"BrtBeginMetadata\" },\n0x014D: { n:\"BrtEndMetadata\" },\n0x014E: { n:\"BrtBeginEsmdtinfo\" },\n0x014F: { n:\"BrtMdtinfo\" },\n0x0150: { n:\"BrtEndEsmdtinfo\" },\n0x0151: { n:\"BrtBeginEsmdb\" },\n0x0152: { n:\"BrtEndEsmdb\" },\n0x0153: { n:\"BrtBeginEsfmd\" },\n0x0154: { n:\"BrtEndEsfmd\" },\n0x0155: { n:\"BrtBeginSingleCells\" },\n0x0156: { n:\"BrtEndSingleCells\" },\n0x0157: { n:\"BrtBeginList\" },\n0x0158: { n:\"BrtEndList\" },\n0x0159: { n:\"BrtBeginListCols\" },\n0x015A: { n:\"BrtEndListCols\" },\n0x015B: { n:\"BrtBeginListCol\" },\n0x015C: { n:\"BrtEndListCol\" },\n0x015D: { n:\"BrtBeginListXmlCPr\" },\n0x015E: { n:\"BrtEndListXmlCPr\" },\n0x015F: { n:\"BrtListCCFmla\" },\n0x0160: { n:\"BrtListTrFmla\" },\n0x0161: { n:\"BrtBeginExternals\" },\n0x0162: { n:\"BrtEndExternals\" },\n0x0163: { n:\"BrtSupBookSrc\", f:parse_RelID},\n0x0165: { n:\"BrtSupSelf\" },\n0x0166: { n:\"BrtSupSame\" },\n0x0167: { n:\"BrtSupTabs\" },\n0x0168: { n:\"BrtBeginSupBook\" },\n0x0169: { n:\"BrtPlaceholderName\" },\n0x016A: { n:\"BrtExternSheet\", f:parse_ExternSheet },\n0x016B: { n:\"BrtExternTableStart\" },\n0x016C: { n:\"BrtExternTableEnd\" },\n0x016E: { n:\"BrtExternRowHdr\" },\n0x016F: { n:\"BrtExternCellBlank\" },\n0x0170: { n:\"BrtExternCellReal\" },\n0x0171: { n:\"BrtExternCellBool\" },\n0x0172: { n:\"BrtExternCellError\" },\n0x0173: { n:\"BrtExternCellString\" },\n0x0174: { n:\"BrtBeginEsmdx\" },\n0x0175: { n:\"BrtEndEsmdx\" },\n0x0176: { n:\"BrtBeginMdxSet\" },\n0x0177: { n:\"BrtEndMdxSet\" },\n0x0178: { n:\"BrtBeginMdxMbrProp\" },\n0x0179: { n:\"BrtEndMdxMbrProp\" },\n0x017A: { n:\"BrtBeginMdxKPI\" },\n0x017B: { n:\"BrtEndMdxKPI\" },\n0x017C: { n:\"BrtBeginEsstr\" },\n0x017D: { n:\"BrtEndEsstr\" },\n0x017E: { n:\"BrtBeginPRFItem\" },\n0x017F: { n:\"BrtEndPRFItem\" },\n0x0180: { n:\"BrtBeginPivotCacheIDs\" },\n0x0181: { n:\"BrtEndPivotCacheIDs\" },\n0x0182: { n:\"BrtBeginPivotCacheID\" },\n0x0183: { n:\"BrtEndPivotCacheID\" },\n0x0184: { n:\"BrtBeginISXVIs\" },\n0x0185: { n:\"BrtEndISXVIs\" },\n0x0186: { n:\"BrtBeginColInfos\" },\n0x0187: { n:\"BrtEndColInfos\" },\n0x0188: { n:\"BrtBeginRwBrk\" },\n0x0189: { n:\"BrtEndRwBrk\" },\n0x018A: { n:\"BrtBeginColBrk\" },\n0x018B: { n:\"BrtEndColBrk\" },\n0x018C: { n:\"BrtBrk\" },\n0x018D: { n:\"BrtUserBookView\" },\n0x018E: { n:\"BrtInfo\" },\n0x018F: { n:\"BrtCUsr\" },\n0x0190: { n:\"BrtUsr\" },\n0x0191: { n:\"BrtBeginUsers\" },\n0x0193: { n:\"BrtEOF\" },\n0x0194: { n:\"BrtUCR\" },\n0x0195: { n:\"BrtRRInsDel\" },\n0x0196: { n:\"BrtRREndInsDel\" },\n0x0197: { n:\"BrtRRMove\" },\n0x0198: { n:\"BrtRREndMove\" },\n0x0199: { n:\"BrtRRChgCell\" },\n0x019A: { n:\"BrtRREndChgCell\" },\n0x019B: { n:\"BrtRRHeader\" },\n0x019C: { n:\"BrtRRUserView\" },\n0x019D: { n:\"BrtRRRenSheet\" },\n0x019E: { n:\"BrtRRInsertSh\" },\n0x019F: { n:\"BrtRRDefName\" },\n0x01A0: { n:\"BrtRRNote\" },\n0x01A1: { n:\"BrtRRConflict\" },\n0x01A2: { n:\"BrtRRTQSIF\" },\n0x01A3: { n:\"BrtRRFormat\" },\n0x01A4: { n:\"BrtRREndFormat\" },\n0x01A5: { n:\"BrtRRAutoFmt\" },\n0x01A6: { n:\"BrtBeginUserShViews\" },\n0x01A7: { n:\"BrtBeginUserShView\" },\n0x01A8: { n:\"BrtEndUserShView\" },\n0x01A9: { n:\"BrtEndUserShViews\" },\n0x01AA: { n:\"BrtArrFmla\", f:parse_BrtArrFmla },\n0x01AB: { n:\"BrtShrFmla\", f:parse_BrtShrFmla },\n0x01AC: { n:\"BrtTable\" },\n0x01AD: { n:\"BrtBeginExtConnections\" },\n0x01AE: { n:\"BrtEndExtConnections\" },\n0x01AF: { n:\"BrtBeginPCDCalcMems\" },\n0x01B0: { n:\"BrtEndPCDCalcMems\" },\n0x01B1: { n:\"BrtBeginPCDCalcMem\" },\n0x01B2: { n:\"BrtEndPCDCalcMem\" },\n0x01B3: { n:\"BrtBeginPCDHGLevels\" },\n0x01B4: { n:\"BrtEndPCDHGLevels\" },\n0x01B5: { n:\"BrtBeginPCDHGLevel\" },\n0x01B6: { n:\"BrtEndPCDHGLevel\" },\n0x01B7: { n:\"BrtBeginPCDHGLGroups\" },\n0x01B8: { n:\"BrtEndPCDHGLGroups\" },\n0x01B9: { n:\"BrtBeginPCDHGLGroup\" },\n0x01BA: { n:\"BrtEndPCDHGLGroup\" },\n0x01BB: { n:\"BrtBeginPCDHGLGMembers\" },\n0x01BC: { n:\"BrtEndPCDHGLGMembers\" },\n0x01BD: { n:\"BrtBeginPCDHGLGMember\" },\n0x01BE: { n:\"BrtEndPCDHGLGMember\" },\n0x01BF: { n:\"BrtBeginQSI\" },\n0x01C0: { n:\"BrtEndQSI\" },\n0x01C1: { n:\"BrtBeginQSIR\" },\n0x01C2: { n:\"BrtEndQSIR\" },\n0x01C3: { n:\"BrtBeginDeletedNames\" },\n0x01C4: { n:\"BrtEndDeletedNames\" },\n0x01C5: { n:\"BrtBeginDeletedName\" },\n0x01C6: { n:\"BrtEndDeletedName\" },\n0x01C7: { n:\"BrtBeginQSIFs\" },\n0x01C8: { n:\"BrtEndQSIFs\" },\n0x01C9: { n:\"BrtBeginQSIF\" },\n0x01CA: { n:\"BrtEndQSIF\" },\n0x01CB: { n:\"BrtBeginAutoSortScope\" },\n0x01CC: { n:\"BrtEndAutoSortScope\" },\n0x01CD: { n:\"BrtBeginConditionalFormatting\" },\n0x01CE: { n:\"BrtEndConditionalFormatting\" },\n0x01CF: { n:\"BrtBeginCFRule\" },\n0x01D0: { n:\"BrtEndCFRule\" },\n0x01D1: { n:\"BrtBeginIconSet\" },\n0x01D2: { n:\"BrtEndIconSet\" },\n0x01D3: { n:\"BrtBeginDatabar\" },\n0x01D4: { n:\"BrtEndDatabar\" },\n0x01D5: { n:\"BrtBeginColorScale\" },\n0x01D6: { n:\"BrtEndColorScale\" },\n0x01D7: { n:\"BrtCFVO\" },\n0x01D8: { n:\"BrtExternValueMeta\" },\n0x01D9: { n:\"BrtBeginColorPalette\" },\n0x01DA: { n:\"BrtEndColorPalette\" },\n0x01DB: { n:\"BrtIndexedColor\" },\n0x01DC: { n:\"BrtMargins\", f:parse_BrtMargins },\n0x01DD: { n:\"BrtPrintOptions\" },\n0x01DE: { n:\"BrtPageSetup\" },\n0x01DF: { n:\"BrtBeginHeaderFooter\" },\n0x01E0: { n:\"BrtEndHeaderFooter\" },\n0x01E1: { n:\"BrtBeginSXCrtFormat\" },\n0x01E2: { n:\"BrtEndSXCrtFormat\" },\n0x01E3: { n:\"BrtBeginSXCrtFormats\" },\n0x01E4: { n:\"BrtEndSXCrtFormats\" },\n0x01E5: { n:\"BrtWsFmtInfo\", f:parse_BrtWsFmtInfo },\n0x01E6: { n:\"BrtBeginMgs\" },\n0x01E7: { n:\"BrtEndMGs\" },\n0x01E8: { n:\"BrtBeginMGMaps\" },\n0x01E9: { n:\"BrtEndMGMaps\" },\n0x01EA: { n:\"BrtBeginMG\" },\n0x01EB: { n:\"BrtEndMG\" },\n0x01EC: { n:\"BrtBeginMap\" },\n0x01ED: { n:\"BrtEndMap\" },\n0x01EE: { n:\"BrtHLink\", f:parse_BrtHLink },\n0x01EF: { n:\"BrtBeginDCon\" },\n0x01F0: { n:\"BrtEndDCon\" },\n0x01F1: { n:\"BrtBeginDRefs\" },\n0x01F2: { n:\"BrtEndDRefs\" },\n0x01F3: { n:\"BrtDRef\" },\n0x01F4: { n:\"BrtBeginScenMan\" },\n0x01F5: { n:\"BrtEndScenMan\" },\n0x01F6: { n:\"BrtBeginSct\" },\n0x01F7: { n:\"BrtEndSct\" },\n0x01F8: { n:\"BrtSlc\" },\n0x01F9: { n:\"BrtBeginDXFs\" },\n0x01FA: { n:\"BrtEndDXFs\" },\n0x01FB: { n:\"BrtDXF\" },\n0x01FC: { n:\"BrtBeginTableStyles\" },\n0x01FD: { n:\"BrtEndTableStyles\" },\n0x01FE: { n:\"BrtBeginTableStyle\" },\n0x01FF: { n:\"BrtEndTableStyle\" },\n0x0200: { n:\"BrtTableStyleElement\" },\n0x0201: { n:\"BrtTableStyleClient\" },\n0x0202: { n:\"BrtBeginVolDeps\" },\n0x0203: { n:\"BrtEndVolDeps\" },\n0x0204: { n:\"BrtBeginVolType\" },\n0x0205: { n:\"BrtEndVolType\" },\n0x0206: { n:\"BrtBeginVolMain\" },\n0x0207: { n:\"BrtEndVolMain\" },\n0x0208: { n:\"BrtBeginVolTopic\" },\n0x0209: { n:\"BrtEndVolTopic\" },\n0x020A: { n:\"BrtVolSubtopic\" },\n0x020B: { n:\"BrtVolRef\" },\n0x020C: { n:\"BrtVolNum\" },\n0x020D: { n:\"BrtVolErr\" },\n0x020E: { n:\"BrtVolStr\" },\n0x020F: { n:\"BrtVolBool\" },\n0x0210: { n:\"BrtBeginCalcChain$\" },\n0x0211: { n:\"BrtEndCalcChain$\" },\n0x0212: { n:\"BrtBeginSortState\" },\n0x0213: { n:\"BrtEndSortState\" },\n0x0214: { n:\"BrtBeginSortCond\" },\n0x0215: { n:\"BrtEndSortCond\" },\n0x0216: { n:\"BrtBookProtection\" },\n0x0217: { n:\"BrtSheetProtection\" },\n0x0218: { n:\"BrtRangeProtection\" },\n0x0219: { n:\"BrtPhoneticInfo\" },\n0x021A: { n:\"BrtBeginECTxtWiz\" },\n0x021B: { n:\"BrtEndECTxtWiz\" },\n0x021C: { n:\"BrtBeginECTWFldInfoLst\" },\n0x021D: { n:\"BrtEndECTWFldInfoLst\" },\n0x021E: { n:\"BrtBeginECTwFldInfo\" },\n0x0224: { n:\"BrtFileSharing\" },\n0x0225: { n:\"BrtOleSize\" },\n0x0226: { n:\"BrtDrawing\", f:parse_RelID },\n0x0227: { n:\"BrtLegacyDrawing\" },\n0x0228: { n:\"BrtLegacyDrawingHF\" },\n0x0229: { n:\"BrtWebOpt\" },\n0x022A: { n:\"BrtBeginWebPubItems\" },\n0x022B: { n:\"BrtEndWebPubItems\" },\n0x022C: { n:\"BrtBeginWebPubItem\" },\n0x022D: { n:\"BrtEndWebPubItem\" },\n0x022E: { n:\"BrtBeginSXCondFmt\" },\n0x022F: { n:\"BrtEndSXCondFmt\" },\n0x0230: { n:\"BrtBeginSXCondFmts\" },\n0x0231: { n:\"BrtEndSXCondFmts\" },\n0x0232: { n:\"BrtBkHim\" },\n0x0234: { n:\"BrtColor\" },\n0x0235: { n:\"BrtBeginIndexedColors\" },\n0x0236: { n:\"BrtEndIndexedColors\" },\n0x0239: { n:\"BrtBeginMRUColors\" },\n0x023A: { n:\"BrtEndMRUColors\" },\n0x023C: { n:\"BrtMRUColor\" },\n0x023D: { n:\"BrtBeginDVals\" },\n0x023E: { n:\"BrtEndDVals\" },\n0x0241: { n:\"BrtSupNameStart\" },\n0x0242: { n:\"BrtSupNameValueStart\" },\n0x0243: { n:\"BrtSupNameValueEnd\" },\n0x0244: { n:\"BrtSupNameNum\" },\n0x0245: { n:\"BrtSupNameErr\" },\n0x0246: { n:\"BrtSupNameSt\" },\n0x0247: { n:\"BrtSupNameNil\" },\n0x0248: { n:\"BrtSupNameBool\" },\n0x0249: { n:\"BrtSupNameFmla\" },\n0x024A: { n:\"BrtSupNameBits\" },\n0x024B: { n:\"BrtSupNameEnd\" },\n0x024C: { n:\"BrtEndSupBook\" },\n0x024D: { n:\"BrtCellSmartTagProperty\" },\n0x024E: { n:\"BrtBeginCellSmartTag\" },\n0x024F: { n:\"BrtEndCellSmartTag\" },\n0x0250: { n:\"BrtBeginCellSmartTags\" },\n0x0251: { n:\"BrtEndCellSmartTags\" },\n0x0252: { n:\"BrtBeginSmartTags\" },\n0x0253: { n:\"BrtEndSmartTags\" },\n0x0254: { n:\"BrtSmartTagType\" },\n0x0255: { n:\"BrtBeginSmartTagTypes\" },\n0x0256: { n:\"BrtEndSmartTagTypes\" },\n0x0257: { n:\"BrtBeginSXFilters\" },\n0x0258: { n:\"BrtEndSXFilters\" },\n0x0259: { n:\"BrtBeginSXFILTER\" },\n0x025A: { n:\"BrtEndSXFilter\" },\n0x025B: { n:\"BrtBeginFills\" },\n0x025C: { n:\"BrtEndFills\" },\n0x025D: { n:\"BrtBeginCellWatches\" },\n0x025E: { n:\"BrtEndCellWatches\" },\n0x025F: { n:\"BrtCellWatch\" },\n0x0260: { n:\"BrtBeginCRErrs\" },\n0x0261: { n:\"BrtEndCRErrs\" },\n0x0262: { n:\"BrtCrashRecErr\" },\n0x0263: { n:\"BrtBeginFonts\" },\n0x0264: { n:\"BrtEndFonts\" },\n0x0265: { n:\"BrtBeginBorders\" },\n0x0266: { n:\"BrtEndBorders\" },\n0x0267: { n:\"BrtBeginFmts\" },\n0x0268: { n:\"BrtEndFmts\" },\n0x0269: { n:\"BrtBeginCellXFs\" },\n0x026A: { n:\"BrtEndCellXFs\" },\n0x026B: { n:\"BrtBeginStyles\" },\n0x026C: { n:\"BrtEndStyles\" },\n0x0271: { n:\"BrtBigName\" },\n0x0272: { n:\"BrtBeginCellStyleXFs\" },\n0x0273: { n:\"BrtEndCellStyleXFs\" },\n0x0274: { n:\"BrtBeginComments\" },\n0x0275: { n:\"BrtEndComments\" },\n0x0276: { n:\"BrtBeginCommentAuthors\" },\n0x0277: { n:\"BrtEndCommentAuthors\" },\n0x0278: { n:\"BrtCommentAuthor\", f:parse_BrtCommentAuthor },\n0x0279: { n:\"BrtBeginCommentList\" },\n0x027A: { n:\"BrtEndCommentList\" },\n0x027B: { n:\"BrtBeginComment\", f:parse_BrtBeginComment},\n0x027C: { n:\"BrtEndComment\" },\n0x027D: { n:\"BrtCommentText\", f:parse_BrtCommentText },\n0x027E: { n:\"BrtBeginOleObjects\" },\n0x027F: { n:\"BrtOleObject\" },\n0x0280: { n:\"BrtEndOleObjects\" },\n0x0281: { n:\"BrtBeginSxrules\" },\n0x0282: { n:\"BrtEndSxRules\" },\n0x0283: { n:\"BrtBeginActiveXControls\" },\n0x0284: { n:\"BrtActiveX\" },\n0x0285: { n:\"BrtEndActiveXControls\" },\n0x0286: { n:\"BrtBeginPCDSDTCEMembersSortBy\" },\n0x0288: { n:\"BrtBeginCellIgnoreECs\" },\n0x0289: { n:\"BrtCellIgnoreEC\" },\n0x028A: { n:\"BrtEndCellIgnoreECs\" },\n0x028B: { n:\"BrtCsProp\", f:parse_BrtCsProp },\n0x028C: { n:\"BrtCsPageSetup\" },\n0x028D: { n:\"BrtBeginUserCsViews\" },\n0x028E: { n:\"BrtEndUserCsViews\" },\n0x028F: { n:\"BrtBeginUserCsView\" },\n0x0290: { n:\"BrtEndUserCsView\" },\n0x0291: { n:\"BrtBeginPcdSFCIEntries\" },\n0x0292: { n:\"BrtEndPCDSFCIEntries\" },\n0x0293: { n:\"BrtPCDSFCIEntry\" },\n0x0294: { n:\"BrtBeginListParts\" },\n0x0295: { n:\"BrtListPart\" },\n0x0296: { n:\"BrtEndListParts\" },\n0x0297: { n:\"BrtSheetCalcProp\" },\n0x0298: { n:\"BrtBeginFnGroup\" },\n0x0299: { n:\"BrtFnGroup\" },\n0x029A: { n:\"BrtEndFnGroup\" },\n0x029B: { n:\"BrtSupAddin\" },\n0x029C: { n:\"BrtSXTDMPOrder\" },\n0x029D: { n:\"BrtCsProtection\" },\n0x029F: { n:\"BrtBeginWsSortMap\" },\n0x02A0: { n:\"BrtEndWsSortMap\" },\n0x02A1: { n:\"BrtBeginRRSort\" },\n0x02A2: { n:\"BrtEndRRSort\" },\n0x02A3: { n:\"BrtRRSortItem\" },\n0x02A4: { n:\"BrtFileSharingIso\" },\n0x02A5: { n:\"BrtBookProtectionIso\" },\n0x02A6: { n:\"BrtSheetProtectionIso\" },\n0x02A7: { n:\"BrtCsProtectionIso\" },\n0x02A8: { n:\"BrtRangeProtectionIso\" },\n0x02A9: { n:\"BrtDValList\" },\n0x0400: { n:\"BrtRwDescent\" },\n0x0401: { n:\"BrtKnownFonts\" },\n0x0402: { n:\"BrtBeginSXTupleSet\" },\n0x0403: { n:\"BrtEndSXTupleSet\" },\n0x0404: { n:\"BrtBeginSXTupleSetHeader\" },\n0x0405: { n:\"BrtEndSXTupleSetHeader\" },\n0x0406: { n:\"BrtSXTupleSetHeaderItem\" },\n0x0407: { n:\"BrtBeginSXTupleSetData\" },\n0x0408: { n:\"BrtEndSXTupleSetData\" },\n0x0409: { n:\"BrtBeginSXTupleSetRow\" },\n0x040A: { n:\"BrtEndSXTupleSetRow\" },\n0x040B: { n:\"BrtSXTupleSetRowItem\" },\n0x040C: { n:\"BrtNameExt\" },\n0x040D: { n:\"BrtPCDH14\" },\n0x040E: { n:\"BrtBeginPCDCalcMem14\" },\n0x040F: { n:\"BrtEndPCDCalcMem14\" },\n0x0410: { n:\"BrtSXTH14\" },\n0x0411: { n:\"BrtBeginSparklineGroup\" },\n0x0412: { n:\"BrtEndSparklineGroup\" },\n0x0413: { n:\"BrtSparkline\" },\n0x0414: { n:\"BrtSXDI14\" },\n0x0415: { n:\"BrtWsFmtInfoEx14\" },\n0x0416: { n:\"BrtBeginConditionalFormatting14\" },\n0x0417: { n:\"BrtEndConditionalFormatting14\" },\n0x0418: { n:\"BrtBeginCFRule14\" },\n0x0419: { n:\"BrtEndCFRule14\" },\n0x041A: { n:\"BrtCFVO14\" },\n0x041B: { n:\"BrtBeginDatabar14\" },\n0x041C: { n:\"BrtBeginIconSet14\" },\n0x041D: { n:\"BrtDVal14\", f: parse_BrtDVal14 },\n0x041E: { n:\"BrtBeginDVals14\" },\n0x041F: { n:\"BrtColor14\" },\n0x0420: { n:\"BrtBeginSparklines\" },\n0x0421: { n:\"BrtEndSparklines\" },\n0x0422: { n:\"BrtBeginSparklineGroups\" },\n0x0423: { n:\"BrtEndSparklineGroups\" },\n0x0425: { n:\"BrtSXVD14\" },\n0x0426: { n:\"BrtBeginSXView14\" },\n0x0427: { n:\"BrtEndSXView14\" },\n0x0428: { n:\"BrtBeginSXView16\" },\n0x0429: { n:\"BrtEndSXView16\" },\n0x042A: { n:\"BrtBeginPCD14\" },\n0x042B: { n:\"BrtEndPCD14\" },\n0x042C: { n:\"BrtBeginExtConn14\" },\n0x042D: { n:\"BrtEndExtConn14\" },\n0x042E: { n:\"BrtBeginSlicerCacheIDs\" },\n0x042F: { n:\"BrtEndSlicerCacheIDs\" },\n0x0430: { n:\"BrtBeginSlicerCacheID\" },\n0x0431: { n:\"BrtEndSlicerCacheID\" },\n0x0433: { n:\"BrtBeginSlicerCache\" },\n0x0434: { n:\"BrtEndSlicerCache\" },\n0x0435: { n:\"BrtBeginSlicerCacheDef\" },\n0x0436: { n:\"BrtEndSlicerCacheDef\" },\n0x0437: { n:\"BrtBeginSlicersEx\" },\n0x0438: { n:\"BrtEndSlicersEx\" },\n0x0439: { n:\"BrtBeginSlicerEx\" },\n0x043A: { n:\"BrtEndSlicerEx\" },\n0x043B: { n:\"BrtBeginSlicer\" },\n0x043C: { n:\"BrtEndSlicer\" },\n0x043D: { n:\"BrtSlicerCachePivotTables\" },\n0x043E: { n:\"BrtBeginSlicerCacheOlapImpl\" },\n0x043F: { n:\"BrtEndSlicerCacheOlapImpl\" },\n0x0440: { n:\"BrtBeginSlicerCacheLevelsData\" },\n0x0441: { n:\"BrtEndSlicerCacheLevelsData\" },\n0x0442: { n:\"BrtBeginSlicerCacheLevelData\" },\n0x0443: { n:\"BrtEndSlicerCacheLevelData\" },\n0x0444: { n:\"BrtBeginSlicerCacheSiRanges\" },\n0x0445: { n:\"BrtEndSlicerCacheSiRanges\" },\n0x0446: { n:\"BrtBeginSlicerCacheSiRange\" },\n0x0447: { n:\"BrtEndSlicerCacheSiRange\" },\n0x0448: { n:\"BrtSlicerCacheOlapItem\" },\n0x0449: { n:\"BrtBeginSlicerCacheSelections\" },\n0x044A: { n:\"BrtSlicerCacheSelection\" },\n0x044B: { n:\"BrtEndSlicerCacheSelections\" },\n0x044C: { n:\"BrtBeginSlicerCacheNative\" },\n0x044D: { n:\"BrtEndSlicerCacheNative\" },\n0x044E: { n:\"BrtSlicerCacheNativeItem\" },\n0x044F: { n:\"BrtRangeProtection14\" },\n0x0450: { n:\"BrtRangeProtectionIso14\" },\n0x0451: { n:\"BrtCellIgnoreEC14\" },\n0x0457: { n:\"BrtList14\" },\n0x0458: { n:\"BrtCFIcon\" },\n0x0459: { n:\"BrtBeginSlicerCachesPivotCacheIDs\" },\n0x045A: { n:\"BrtEndSlicerCachesPivotCacheIDs\" },\n0x045B: { n:\"BrtBeginSlicers\" },\n0x045C: { n:\"BrtEndSlicers\" },\n0x045D: { n:\"BrtWbProp14\" },\n0x045E: { n:\"BrtBeginSXEdit\" },\n0x045F: { n:\"BrtEndSXEdit\" },\n0x0460: { n:\"BrtBeginSXEdits\" },\n0x0461: { n:\"BrtEndSXEdits\" },\n0x0462: { n:\"BrtBeginSXChange\" },\n0x0463: { n:\"BrtEndSXChange\" },\n0x0464: { n:\"BrtBeginSXChanges\" },\n0x0465: { n:\"BrtEndSXChanges\" },\n0x0466: { n:\"BrtSXTupleItems\" },\n0x0468: { n:\"BrtBeginSlicerStyle\" },\n0x0469: { n:\"BrtEndSlicerStyle\" },\n0x046A: { n:\"BrtSlicerStyleElement\" },\n0x046B: { n:\"BrtBeginStyleSheetExt14\" },\n0x046C: { n:\"BrtEndStyleSheetExt14\" },\n0x046D: { n:\"BrtBeginSlicerCachesPivotCacheID\" },\n0x046E: { n:\"BrtEndSlicerCachesPivotCacheID\" },\n0x046F: { n:\"BrtBeginConditionalFormattings\" },\n0x0470: { n:\"BrtEndConditionalFormattings\" },\n0x0471: { n:\"BrtBeginPCDCalcMemExt\" },\n0x0472: { n:\"BrtEndPCDCalcMemExt\" },\n0x0473: { n:\"BrtBeginPCDCalcMemsExt\" },\n0x0474: { n:\"BrtEndPCDCalcMemsExt\" },\n0x0475: { n:\"BrtPCDField14\" },\n0x0476: { n:\"BrtBeginSlicerStyles\" },\n0x0477: { n:\"BrtEndSlicerStyles\" },\n0x0478: { n:\"BrtBeginSlicerStyleElements\" },\n0x0479: { n:\"BrtEndSlicerStyleElements\" },\n0x047A: { n:\"BrtCFRuleExt\" },\n0x047B: { n:\"BrtBeginSXCondFmt14\" },\n0x047C: { n:\"BrtEndSXCondFmt14\" },\n0x047D: { n:\"BrtBeginSXCondFmts14\" },\n0x047E: { n:\"BrtEndSXCondFmts14\" },\n0x0480: { n:\"BrtBeginSortCond14\" },\n0x0481: { n:\"BrtEndSortCond14\" },\n0x0482: { n:\"BrtEndDVals14\" },\n0x0483: { n:\"BrtEndIconSet14\" },\n0x0484: { n:\"BrtEndDatabar14\" },\n0x0485: { n:\"BrtBeginColorScale14\" },\n0x0486: { n:\"BrtEndColorScale14\" },\n0x0487: { n:\"BrtBeginSxrules14\" },\n0x0488: { n:\"BrtEndSxrules14\" },\n0x0489: { n:\"BrtBeginPRule14\" },\n0x048A: { n:\"BrtEndPRule14\" },\n0x048B: { n:\"BrtBeginPRFilters14\" },\n0x048C: { n:\"BrtEndPRFilters14\" },\n0x048D: { n:\"BrtBeginPRFilter14\" },\n0x048E: { n:\"BrtEndPRFilter14\" },\n0x048F: { n:\"BrtBeginPRFItem14\" },\n0x0490: { n:\"BrtEndPRFItem14\" },\n0x0491: { n:\"BrtBeginCellIgnoreECs14\" },\n0x0492: { n:\"BrtEndCellIgnoreECs14\" },\n0x0493: { n:\"BrtDxf14\" },\n0x0494: { n:\"BrtBeginDxF14s\" },\n0x0495: { n:\"BrtEndDxf14s\" },\n0x0499: { n:\"BrtFilter14\" },\n0x049A: { n:\"BrtBeginCustomFilters14\" },\n0x049C: { n:\"BrtCustomFilter14\" },\n0x049D: { n:\"BrtIconFilter14\" },\n0x049E: { n:\"BrtPivotCacheConnectionName\" },\n0x0800: { n:\"BrtBeginDecoupledPivotCacheIDs\" },\n0x0801: { n:\"BrtEndDecoupledPivotCacheIDs\" },\n0x0802: { n:\"BrtDecoupledPivotCacheID\" },\n0x0803: { n:\"BrtBeginPivotTableRefs\" },\n0x0804: { n:\"BrtEndPivotTableRefs\" },\n0x0805: { n:\"BrtPivotTableRef\" },\n0x0806: { n:\"BrtSlicerCacheBookPivotTables\" },\n0x0807: { n:\"BrtBeginSxvcells\" },\n0x0808: { n:\"BrtEndSxvcells\" },\n0x0809: { n:\"BrtBeginSxRow\" },\n0x080A: { n:\"BrtEndSxRow\" },\n0x080C: { n:\"BrtPcdCalcMem15\" },\n0x0813: { n:\"BrtQsi15\" },\n0x0814: { n:\"BrtBeginWebExtensions\" },\n0x0815: { n:\"BrtEndWebExtensions\" },\n0x0816: { n:\"BrtWebExtension\" },\n0x0817: { n:\"BrtAbsPath15\" },\n0x0818: { n:\"BrtBeginPivotTableUISettings\" },\n0x0819: { n:\"BrtEndPivotTableUISettings\" },\n0x081B: { n:\"BrtTableSlicerCacheIDs\" },\n0x081C: { n:\"BrtTableSlicerCacheID\" },\n0x081D: { n:\"BrtBeginTableSlicerCache\" },\n0x081E: { n:\"BrtEndTableSlicerCache\" },\n0x081F: { n:\"BrtSxFilter15\" },\n0x0820: { n:\"BrtBeginTimelineCachePivotCacheIDs\" },\n0x0821: { n:\"BrtEndTimelineCachePivotCacheIDs\" },\n0x0822: { n:\"BrtTimelineCachePivotCacheID\" },\n0x0823: { n:\"BrtBeginTimelineCacheIDs\" },\n0x0824: { n:\"BrtEndTimelineCacheIDs\" },\n0x0825: { n:\"BrtBeginTimelineCacheID\" },\n0x0826: { n:\"BrtEndTimelineCacheID\" },\n0x0827: { n:\"BrtBeginTimelinesEx\" },\n0x0828: { n:\"BrtEndTimelinesEx\" },\n0x0829: { n:\"BrtBeginTimelineEx\" },\n0x082A: { n:\"BrtEndTimelineEx\" },\n0x082B: { n:\"BrtWorkBookPr15\" },\n0x082C: { n:\"BrtPCDH15\" },\n0x082D: { n:\"BrtBeginTimelineStyle\" },\n0x082E: { n:\"BrtEndTimelineStyle\" },\n0x082F: { n:\"BrtTimelineStyleElement\" },\n0x0830: { n:\"BrtBeginTimelineStylesheetExt15\" },\n0x0831: { n:\"BrtEndTimelineStylesheetExt15\" },\n0x0832: { n:\"BrtBeginTimelineStyles\" },\n0x0833: { n:\"BrtEndTimelineStyles\" },\n0x0834: { n:\"BrtBeginTimelineStyleElements\" },\n0x0835: { n:\"BrtEndTimelineStyleElements\" },\n0x0836: { n:\"BrtDxf15\" },\n0x0837: { n:\"BrtBeginDxfs15\" },\n0x0838: { n:\"brtEndDxfs15\" },\n0x0839: { n:\"BrtSlicerCacheHideItemsWithNoData\" },\n0x083A: { n:\"BrtBeginItemUniqueNames\" },\n0x083B: { n:\"BrtEndItemUniqueNames\" },\n0x083C: { n:\"BrtItemUniqueName\" },\n0x083D: { n:\"BrtBeginExtConn15\" },\n0x083E: { n:\"BrtEndExtConn15\" },\n0x083F: { n:\"BrtBeginOledbPr15\" },\n0x0840: { n:\"BrtEndOledbPr15\" },\n0x0841: { n:\"BrtBeginDataFeedPr15\" },\n0x0842: { n:\"BrtEndDataFeedPr15\" },\n0x0843: { n:\"BrtTextPr15\" },\n0x0844: { n:\"BrtRangePr15\" },\n0x0845: { n:\"BrtDbCommand15\" },\n0x0846: { n:\"BrtBeginDbTables15\" },\n0x0847: { n:\"BrtEndDbTables15\" },\n0x0848: { n:\"BrtDbTable15\" },\n0x0849: { n:\"BrtBeginDataModel\" },\n0x084A: { n:\"BrtEndDataModel\" },\n0x084B: { n:\"BrtBeginModelTables\" },\n0x084C: { n:\"BrtEndModelTables\" },\n0x084D: { n:\"BrtModelTable\" },\n0x084E: { n:\"BrtBeginModelRelationships\" },\n0x084F: { n:\"BrtEndModelRelationships\" },\n0x0850: { n:\"BrtModelRelationship\" },\n0x0851: { n:\"BrtBeginECTxtWiz15\" },\n0x0852: { n:\"BrtEndECTxtWiz15\" },\n0x0853: { n:\"BrtBeginECTWFldInfoLst15\" },\n0x0854: { n:\"BrtEndECTWFldInfoLst15\" },\n0x0855: { n:\"BrtBeginECTWFldInfo15\" },\n0x0856: { n:\"BrtFieldListActiveItem\" },\n0x0857: { n:\"BrtPivotCacheIdVersion\" },\n0x0858: { n:\"BrtSXDI15\" },\n0x0859: { n:\"BrtBeginModelTimeGroupings\" },\n0x085A: { n:\"BrtEndModelTimeGroupings\" },\n0x085B: { n:\"BrtBeginModelTimeGrouping\" },\n0x085C: { n:\"BrtEndModelTimeGrouping\" },\n0x085D: { n:\"BrtModelTimeGroupingCalcCol\" },\n0x0C00: { n:\"BrtUid\" },\n0x0C01: { n:\"BrtRevisionPtr\" },\n0x13e7: { n:\"BrtBeginCalcFeatures\" },\n0x13e8: { n:\"BrtEndCalcFeatures\" },\n0x13e9: { n:\"BrtCalcFeature\" },\n0xFFFF: { n:\"\" }\n};\n\nvar XLSBRE = evert_key(XLSBRecordEnum, 'n');\n\n/* [MS-XLS] 2.3 Record Enumeration */\nvar XLSRecordEnum = {\n0x0003: { n:\"BIFF2NUM\", f:parse_BIFF2NUM },\n0x0004: { n:\"BIFF2STR\", f:parse_BIFF2STR },\n0x0006: { n:\"Formula\", f:parse_Formula },\n0x0009: { n:'BOF', f:parse_BOF },\n0x000a: { n:'EOF', f:parsenoop2 },\n0x000c: { n:\"CalcCount\", f:parseuint16 },\n0x000d: { n:\"CalcMode\", f:parseuint16 },\n0x000e: { n:\"CalcPrecision\", f:parsebool },\n0x000f: { n:\"CalcRefMode\", f:parsebool },\n0x0010: { n:\"CalcDelta\", f:parse_Xnum },\n0x0011: { n:\"CalcIter\", f:parsebool },\n0x0012: { n:\"Protect\", f:parsebool },\n0x0013: { n:\"Password\", f:parseuint16 },\n0x0014: { n:\"Header\", f:parse_XLHeaderFooter },\n0x0015: { n:\"Footer\", f:parse_XLHeaderFooter },\n0x0017: { n:\"ExternSheet\", f:parse_ExternSheet },\n0x0018: { n:\"Lbl\", f:parse_Lbl },\n0x0019: { n:\"WinProtect\", f:parsebool },\n0x001a: { n:\"VerticalPageBreaks\" },\n0x001b: { n:\"HorizontalPageBreaks\" },\n0x001c: { n:\"Note\", f:parse_Note },\n0x001d: { n:\"Selection\" },\n0x0022: { n:\"Date1904\", f:parsebool },\n0x0023: { n:\"ExternName\", f:parse_ExternName },\n0x0024: { n:\"COLWIDTH\" },\n0x0026: { n:\"LeftMargin\", f:parse_Xnum },\n0x0027: { n:\"RightMargin\", f:parse_Xnum },\n0x0028: { n:\"TopMargin\", f:parse_Xnum },\n0x0029: { n:\"BottomMargin\", f:parse_Xnum },\n0x002a: { n:\"PrintRowCol\", f:parsebool },\n0x002b: { n:\"PrintGrid\", f:parsebool },\n0x002f: { n:\"FilePass\", f:parse_FilePass },\n0x0031: { n:\"Font\", f:parse_Font },\n0x0033: { n:\"PrintSize\", f:parseuint16 },\n0x003c: { n:\"Continue\" },\n0x003d: { n:\"Window1\", f:parse_Window1 },\n0x0040: { n:\"Backup\", f:parsebool },\n0x0041: { n:\"Pane\", f:parse_Pane },\n0x0042: { n:'CodePage', f:parseuint16 },\n0x004d: { n:\"Pls\" },\n0x0050: { n:\"DCon\" },\n0x0051: { n:\"DConRef\" },\n0x0052: { n:\"DConName\" },\n0x0055: { n:\"DefColWidth\", f:parseuint16 },\n0x0059: { n:\"XCT\" },\n0x005a: { n:\"CRN\" },\n0x005b: { n:\"FileSharing\" },\n0x005c: { n:'WriteAccess', f:parse_WriteAccess },\n0x005d: { n:\"Obj\", f:parse_Obj },\n0x005e: { n:\"Uncalced\" },\n0x005f: { n:\"CalcSaveRecalc\", f:parsebool },\n0x0060: { n:\"Template\" },\n0x0061: { n:\"Intl\" },\n0x0063: { n:\"ObjProtect\", f:parsebool },\n0x007d: { n:\"ColInfo\", f:parse_ColInfo },\n0x0080: { n:\"Guts\", f:parse_Guts },\n0x0081: { n:\"WsBool\", f:parse_WsBool },\n0x0082: { n:\"GridSet\", f:parseuint16 },\n0x0083: { n:\"HCenter\", f:parsebool },\n0x0084: { n:\"VCenter\", f:parsebool },\n0x0085: { n:'BoundSheet8', f:parse_BoundSheet8 },\n0x0086: { n:\"WriteProtect\" },\n0x008c: { n:\"Country\", f:parse_Country },\n0x008d: { n:\"HideObj\", f:parseuint16 },\n0x0090: { n:\"Sort\" },\n0x0092: { n:\"Palette\", f:parse_Palette },\n0x0097: { n:\"Sync\" },\n0x0098: { n:\"LPr\" },\n0x0099: { n:\"DxGCol\" },\n0x009a: { n:\"FnGroupName\" },\n0x009b: { n:\"FilterMode\" },\n0x009c: { n:\"BuiltInFnGroupCount\", f:parseuint16 },\n0x009d: { n:\"AutoFilterInfo\" },\n0x009e: { n:\"AutoFilter\" },\n0x00a0: { n:\"Scl\", f:parse_Scl },\n0x00a1: { n:\"Setup\", f:parse_Setup },\n0x00ae: { n:\"ScenMan\" },\n0x00af: { n:\"SCENARIO\" },\n0x00b0: { n:\"SxView\" },\n0x00b1: { n:\"Sxvd\" },\n0x00b2: { n:\"SXVI\" },\n0x00b4: { n:\"SxIvd\" },\n0x00b5: { n:\"SXLI\" },\n0x00b6: { n:\"SXPI\" },\n0x00b8: { n:\"DocRoute\" },\n0x00b9: { n:\"RecipName\" },\n0x00bd: { n:\"MulRk\", f:parse_MulRk },\n0x00be: { n:\"MulBlank\", f:parse_MulBlank },\n0x00c1: { n:'Mms', f:parsenoop2 },\n0x00c5: { n:\"SXDI\" },\n0x00c6: { n:\"SXDB\" },\n0x00c7: { n:\"SXFDB\" },\n0x00c8: { n:\"SXDBB\" },\n0x00c9: { n:\"SXNum\" },\n0x00ca: { n:\"SxBool\", f:parsebool },\n0x00cb: { n:\"SxErr\" },\n0x00cc: { n:\"SXInt\" },\n0x00cd: { n:\"SXString\" },\n0x00ce: { n:\"SXDtr\" },\n0x00cf: { n:\"SxNil\" },\n0x00d0: { n:\"SXTbl\" },\n0x00d1: { n:\"SXTBRGIITM\" },\n0x00d2: { n:\"SxTbpg\" },\n0x00d3: { n:\"ObProj\" },\n0x00d5: { n:\"SXStreamID\" },\n0x00d7: { n:\"DBCell\" },\n0x00d8: { n:\"SXRng\" },\n0x00d9: { n:\"SxIsxoper\" },\n0x00da: { n:\"BookBool\", f:parseuint16 },\n0x00dc: { n:\"DbOrParamQry\" },\n0x00dd: { n:\"ScenarioProtect\", f:parsebool },\n0x00de: { n:\"OleObjectSize\" },\n0x00e0: { n:\"XF\", f:parse_XF },\n0x00e1: { n:'InterfaceHdr', f:parse_InterfaceHdr },\n0x00e2: { n:'InterfaceEnd', f:parsenoop2 },\n0x00e3: { n:\"SXVS\" },\n0x00e5: { n:\"MergeCells\", f:parse_MergeCells },\n0x00e9: { n:\"BkHim\" },\n0x00eb: { n:\"MsoDrawingGroup\" },\n0x00ec: { n:\"MsoDrawing\" },\n0x00ed: { n:\"MsoDrawingSelection\" },\n0x00ef: { n:\"PhoneticInfo\" },\n0x00f0: { n:\"SxRule\" },\n0x00f1: { n:\"SXEx\" },\n0x00f2: { n:\"SxFilt\" },\n0x00f4: { n:\"SxDXF\" },\n0x00f5: { n:\"SxItm\" },\n0x00f6: { n:\"SxName\" },\n0x00f7: { n:\"SxSelect\" },\n0x00f8: { n:\"SXPair\" },\n0x00f9: { n:\"SxFmla\" },\n0x00fb: { n:\"SxFormat\" },\n0x00fc: { n:\"SST\", f:parse_SST },\n0x00fd: { n:\"LabelSst\", f:parse_LabelSst },\n0x00ff: { n:\"ExtSST\", f:parse_ExtSST },\n0x0100: { n:\"SXVDEx\" },\n0x0103: { n:\"SXFormula\" },\n0x0122: { n:\"SXDBEx\" },\n0x0137: { n:\"RRDInsDel\" },\n0x0138: { n:\"RRDHead\" },\n0x013b: { n:\"RRDChgCell\" },\n0x013d: { n:\"RRTabId\", f:parseuint16a },\n0x013e: { n:\"RRDRenSheet\" },\n0x013f: { n:\"RRSort\" },\n0x0140: { n:\"RRDMove\" },\n0x014a: { n:\"RRFormat\" },\n0x014b: { n:\"RRAutoFmt\" },\n0x014d: { n:\"RRInsertSh\" },\n0x014e: { n:\"RRDMoveBegin\" },\n0x014f: { n:\"RRDMoveEnd\" },\n0x0150: { n:\"RRDInsDelBegin\" },\n0x0151: { n:\"RRDInsDelEnd\" },\n0x0152: { n:\"RRDConflict\" },\n0x0153: { n:\"RRDDefName\" },\n0x0154: { n:\"RRDRstEtxp\" },\n0x015f: { n:\"LRng\" },\n0x0160: { n:\"UsesELFs\", f:parsebool },\n0x0161: { n:\"DSF\", f:parsenoop2 },\n0x0191: { n:\"CUsr\" },\n0x0192: { n:\"CbUsr\" },\n0x0193: { n:\"UsrInfo\" },\n0x0194: { n:\"UsrExcl\" },\n0x0195: { n:\"FileLock\" },\n0x0196: { n:\"RRDInfo\" },\n0x0197: { n:\"BCUsrs\" },\n0x0198: { n:\"UsrChk\" },\n0x01a9: { n:\"UserBView\" },\n0x01aa: { n:\"UserSViewBegin\" },\n0x01ab: { n:\"UserSViewEnd\" },\n0x01ac: { n:\"RRDUserView\" },\n0x01ad: { n:\"Qsi\" },\n0x01ae: { n:\"SupBook\", f:parse_SupBook },\n0x01af: { n:\"Prot4Rev\", f:parsebool },\n0x01b0: { n:\"CondFmt\" },\n0x01b1: { n:\"CF\" },\n0x01b2: { n:\"DVal\" },\n0x01b5: { n:\"DConBin\" },\n0x01b6: { n:\"TxO\", f:parse_TxO },\n0x01b7: { n:\"RefreshAll\", f:parsebool },\n0x01b8: { n:\"HLink\", f:parse_HLink },\n0x01b9: { n:\"Lel\" },\n0x01ba: { n:\"CodeName\", f:parse_XLUnicodeString },\n0x01bb: { n:\"SXFDBType\" },\n0x01bc: { n:\"Prot4RevPass\", f:parseuint16 },\n0x01bd: { n:\"ObNoMacros\" },\n0x01be: { n:\"Dv\" },\n0x01c0: { n:\"Excel9File\", f:parsenoop2 },\n0x01c1: { n:\"RecalcId\", f:parse_RecalcId, r:2},\n0x01c2: { n:\"EntExU2\", f:parsenoop2 },\n0x0200: { n:\"Dimensions\", f:parse_Dimensions },\n0x0201: { n:\"Blank\", f:parse_Blank },\n0x0203: { n:\"Number\", f:parse_Number },\n0x0204: { n:\"Label\", f:parse_Label },\n0x0205: { n:\"BoolErr\", f:parse_BoolErr },\n0x0206: { n:\"Formula\", f:parse_Formula },\n0x0207: { n:\"String\", f:parse_String },\n0x0208: { n:'Row', f:parse_Row },\n0x020b: { n:\"Index\" },\n0x0221: { n:\"Array\", f:parse_Array },\n0x0225: { n:\"DefaultRowHeight\", f:parse_DefaultRowHeight },\n0x0236: { n:\"Table\" },\n0x023e: { n:\"Window2\", f:parse_Window2 },\n0x027e: { n:\"RK\", f:parse_RK },\n0x0293: { n:\"Style\" },\n0x0406: { n:\"Formula\", f:parse_Formula },\n0x0418: { n:\"BigName\" },\n0x041e: { n:\"Format\", f:parse_Format },\n0x043c: { n:\"ContinueBigName\" },\n0x04bc: { n:\"ShrFmla\", f:parse_ShrFmla },\n0x0800: { n:\"HLinkTooltip\", f:parse_HLinkTooltip },\n0x0801: { n:\"WebPub\" },\n0x0802: { n:\"QsiSXTag\" },\n0x0803: { n:\"DBQueryExt\" },\n0x0804: { n:\"ExtString\" },\n0x0805: { n:\"TxtQry\" },\n0x0806: { n:\"Qsir\" },\n0x0807: { n:\"Qsif\" },\n0x0808: { n:\"RRDTQSIF\" },\n0x0809: { n:'BOF', f:parse_BOF },\n0x080a: { n:\"OleDbConn\" },\n0x080b: { n:\"WOpt\" },\n0x080c: { n:\"SXViewEx\" },\n0x080d: { n:\"SXTH\" },\n0x080e: { n:\"SXPIEx\" },\n0x080f: { n:\"SXVDTEx\" },\n0x0810: { n:\"SXViewEx9\" },\n0x0812: { n:\"ContinueFrt\" },\n0x0813: { n:\"RealTimeData\" },\n0x0850: { n:\"ChartFrtInfo\" },\n0x0851: { n:\"FrtWrapper\" },\n0x0852: { n:\"StartBlock\" },\n0x0853: { n:\"EndBlock\" },\n0x0854: { n:\"StartObject\" },\n0x0855: { n:\"EndObject\" },\n0x0856: { n:\"CatLab\" },\n0x0857: { n:\"YMult\" },\n0x0858: { n:\"SXViewLink\" },\n0x0859: { n:\"PivotChartBits\" },\n0x085a: { n:\"FrtFontList\" },\n0x0862: { n:\"SheetExt\" },\n0x0863: { n:\"BookExt\", r:12},\n0x0864: { n:\"SXAddl\" },\n0x0865: { n:\"CrErr\" },\n0x0866: { n:\"HFPicture\" },\n0x0867: { n:'FeatHdr', f:parsenoop2 },\n0x0868: { n:\"Feat\" },\n0x086a: { n:\"DataLabExt\" },\n0x086b: { n:\"DataLabExtContents\" },\n0x086c: { n:\"CellWatch\" },\n0x0871: { n:\"FeatHdr11\" },\n0x0872: { n:\"Feature11\" },\n0x0874: { n:\"DropDownObjIds\" },\n0x0875: { n:\"ContinueFrt11\" },\n0x0876: { n:\"DConn\" },\n0x0877: { n:\"List12\" },\n0x0878: { n:\"Feature12\" },\n0x0879: { n:\"CondFmt12\" },\n0x087a: { n:\"CF12\" },\n0x087b: { n:\"CFEx\" },\n0x087c: { n:\"XFCRC\", f:parse_XFCRC, r:12 },\n0x087d: { n:\"XFExt\", f:parse_XFExt, r:12 },\n0x087e: { n:\"AutoFilter12\" },\n0x087f: { n:\"ContinueFrt12\" },\n0x0884: { n:\"MDTInfo\" },\n0x0885: { n:\"MDXStr\" },\n0x0886: { n:\"MDXTuple\" },\n0x0887: { n:\"MDXSet\" },\n0x0888: { n:\"MDXProp\" },\n0x0889: { n:\"MDXKPI\" },\n0x088a: { n:\"MDB\" },\n0x088b: { n:\"PLV\" },\n0x088c: { n:\"Compat12\", f:parsebool, r:12 },\n0x088d: { n:\"DXF\" },\n0x088e: { n:\"TableStyles\", r:12 },\n0x088f: { n:\"TableStyle\" },\n0x0890: { n:\"TableStyleElement\" },\n0x0892: { n:\"StyleExt\" },\n0x0893: { n:\"NamePublish\" },\n0x0894: { n:\"NameCmt\", f:parse_NameCmt, r:12 },\n0x0895: { n:\"SortData\" },\n0x0896: { n:\"Theme\", f:parse_Theme, r:12 },\n0x0897: { n:\"GUIDTypeLib\" },\n0x0898: { n:\"FnGrp12\" },\n0x0899: { n:\"NameFnGrp12\" },\n0x089a: { n:\"MTRSettings\", f:parse_MTRSettings, r:12 },\n0x089b: { n:\"CompressPictures\", f:parsenoop2 },\n0x089c: { n:\"HeaderFooter\" },\n0x089d: { n:\"CrtLayout12\" },\n0x089e: { n:\"CrtMlFrt\" },\n0x089f: { n:\"CrtMlFrtContinue\" },\n0x08a3: { n:\"ForceFullCalculation\", f:parse_ForceFullCalculation },\n0x08a4: { n:\"ShapePropsStream\" },\n0x08a5: { n:\"TextPropsStream\" },\n0x08a6: { n:\"RichTextStream\" },\n0x08a7: { n:\"CrtLayout12A\" },\n0x1001: { n:\"Units\" },\n0x1002: { n:\"Chart\" },\n0x1003: { n:\"Series\" },\n0x1006: { n:\"DataFormat\" },\n0x1007: { n:\"LineFormat\" },\n0x1009: { n:\"MarkerFormat\" },\n0x100a: { n:\"AreaFormat\" },\n0x100b: { n:\"PieFormat\" },\n0x100c: { n:\"AttachedLabel\" },\n0x100d: { n:\"SeriesText\" },\n0x1014: { n:\"ChartFormat\" },\n0x1015: { n:\"Legend\" },\n0x1016: { n:\"SeriesList\" },\n0x1017: { n:\"Bar\" },\n0x1018: { n:\"Line\" },\n0x1019: { n:\"Pie\" },\n0x101a: { n:\"Area\" },\n0x101b: { n:\"Scatter\" },\n0x101c: { n:\"CrtLine\" },\n0x101d: { n:\"Axis\" },\n0x101e: { n:\"Tick\" },\n0x101f: { n:\"ValueRange\" },\n0x1020: { n:\"CatSerRange\" },\n0x1021: { n:\"AxisLine\" },\n0x1022: { n:\"CrtLink\" },\n0x1024: { n:\"DefaultText\" },\n0x1025: { n:\"Text\" },\n0x1026: { n:\"FontX\", f:parseuint16 },\n0x1027: { n:\"ObjectLink\" },\n0x1032: { n:\"Frame\" },\n0x1033: { n:\"Begin\" },\n0x1034: { n:\"End\" },\n0x1035: { n:\"PlotArea\" },\n0x103a: { n:\"Chart3d\" },\n0x103c: { n:\"PicF\" },\n0x103d: { n:\"DropBar\" },\n0x103e: { n:\"Radar\" },\n0x103f: { n:\"Surf\" },\n0x1040: { n:\"RadarArea\" },\n0x1041: { n:\"AxisParent\" },\n0x1043: { n:\"LegendException\" },\n0x1044: { n:\"ShtProps\", f:parse_ShtProps },\n0x1045: { n:\"SerToCrt\" },\n0x1046: { n:\"AxesUsed\" },\n0x1048: { n:\"SBaseRef\" },\n0x104a: { n:\"SerParent\" },\n0x104b: { n:\"SerAuxTrend\" },\n0x104e: { n:\"IFmtRecord\" },\n0x104f: { n:\"Pos\" },\n0x1050: { n:\"AlRuns\" },\n0x1051: { n:\"BRAI\" },\n0x105b: { n:\"SerAuxErrBar\" },\n0x105c: { n:\"ClrtClient\", f:parse_ClrtClient },\n0x105d: { n:\"SerFmt\" },\n0x105f: { n:\"Chart3DBarShape\" },\n0x1060: { n:\"Fbi\" },\n0x1061: { n:\"BopPop\" },\n0x1062: { n:\"AxcExt\" },\n0x1063: { n:\"Dat\" },\n0x1064: { n:\"PlotGrowth\" },\n0x1065: { n:\"SIIndex\" },\n0x1066: { n:\"GelFrame\" },\n0x1067: { n:\"BopPopCustom\" },\n0x1068: { n:\"Fbi2\" },\n\n0x0000: { n:\"Dimensions\", f:parse_Dimensions },\n0x0002: { n:\"BIFF2INT\", f:parse_BIFF2INT },\n0x0005: { n:\"BoolErr\", f:parse_BoolErr },\n0x0007: { n:\"String\", f:parse_BIFF2STRING },\n0x0008: { n:\"BIFF2ROW\" },\n0x000b: { n:\"Index\" },\n0x0016: { n:\"ExternCount\", f:parseuint16 },\n0x001e: { n:\"BIFF2FORMAT\", f:parse_BIFF2Format },\n0x001f: { n:\"BIFF2FMTCNT\" }, /* 16-bit cnt of BIFF2FORMAT records */\n0x0020: { n:\"BIFF2COLINFO\" },\n0x0021: { n:\"Array\", f:parse_Array },\n0x0025: { n:\"DefaultRowHeight\", f:parse_DefaultRowHeight },\n0x0032: { n:\"BIFF2FONTXTRA\", f:parse_BIFF2FONTXTRA },\n0x0034: { n:\"DDEObjName\" },\n0x003e: { n:\"BIFF2WINDOW2\" },\n0x0043: { n:\"BIFF2XF\" },\n0x0045: { n:\"BIFF2FONTCLR\" },\n0x0056: { n:\"BIFF4FMTCNT\" }, /* 16-bit cnt, similar to BIFF2 */\n0x007e: { n:\"RK\" }, /* Not necessarily same as 0x027e */\n0x007f: { n:\"ImData\", f:parse_ImData },\n0x0087: { n:\"Addin\" },\n0x0088: { n:\"Edg\" },\n0x0089: { n:\"Pub\" },\n0x0091: { n:\"Sub\" },\n0x0094: { n:\"LHRecord\" },\n0x0095: { n:\"LHNGraph\" },\n0x0096: { n:\"Sound\" },\n0x00a9: { n:\"CoordList\" },\n0x00ab: { n:\"GCW\" },\n0x00bc: { n:\"ShrFmla\" }, /* Not necessarily same as 0x04bc */\n0x00bf: { n:\"ToolbarHdr\" },\n0x00c0: { n:\"ToolbarEnd\" },\n0x00c2: { n:\"AddMenu\" },\n0x00c3: { n:\"DelMenu\" },\n0x00d6: { n:\"RString\", f:parse_RString },\n0x00df: { n:\"UDDesc\" },\n0x00ea: { n:\"TabIdConf\" },\n0x0162: { n:\"XL5Modify\" },\n0x01a5: { n:\"FileSharing2\" },\n0x0209: { n:'BOF', f:parse_BOF },\n0x0218: { n:\"Lbl\", f:parse_Lbl },\n0x0223: { n:\"ExternName\", f:parse_ExternName },\n0x0231: { n:\"Font\" },\n0x0243: { n:\"BIFF3XF\" },\n0x0409: { n:'BOF', f:parse_BOF },\n0x0443: { n:\"BIFF4XF\" },\n0x086d: { n:\"FeatInfo\" },\n0x0873: { n:\"FeatInfo11\" },\n0x0881: { n:\"SXAddl12\" },\n0x08c0: { n:\"AutoWebPub\" },\n0x08c1: { n:\"ListObj\" },\n0x08c2: { n:\"ListField\" },\n0x08c3: { n:\"ListDV\" },\n0x08c4: { n:\"ListCondFmt\" },\n0x08c5: { n:\"ListCF\" },\n0x08c6: { n:\"FMQry\" },\n0x08c7: { n:\"FMSQry\" },\n0x08c8: { n:\"PLV\" },\n0x08c9: { n:\"LnExt\" },\n0x08ca: { n:\"MkrExt\" },\n0x08cb: { n:\"CrtCoopt\" },\n0x08d6: { n:\"FRTArchId$\", r:12 },\n\n0x7262: {}\n};\n\nvar XLSRE = evert_key(XLSRecordEnum, 'n');\nfunction write_biff_rec(ba, type, payload, length) {\n\tvar t = +type || +XLSRE[type];\n\tif(isNaN(t)) return;\n\tvar len = length || (payload||[]).length || 0;\n\tvar o = ba.next(4);\n\to.write_shift(2, t);\n\to.write_shift(2, len);\n\tif(len > 0 && is_buf(payload)) ba.push(payload);\n}\n\nfunction write_biff_continue(ba, type, payload, length) {\n\tvar len = length || (payload||[]).length || 0;\n\tif(len <= 8224) return write_biff_rec(ba, type, payload, len);\n\tvar t = +type || +XLSRE[type];\n\tif(isNaN(t)) return;\n\tvar parts = payload.parts || [], sidx = 0;\n\tvar i = 0, w = 0;\n\twhile(w + (parts[sidx] || 8224) <= 8224) { w+= (parts[sidx] || 8224); sidx++; }\n\tvar o = ba.next(4);\n\to.write_shift(2, t);\n\to.write_shift(2, w);\n\tba.push(payload.slice(i, i + w));\n\ti += w;\n\twhile(i < len) {\n\t\to = ba.next(4);\n\t\to.write_shift(2, 0x3c); // TODO: figure out correct continue type\n\t\tw = 0;\n\t\twhile(w + (parts[sidx] || 8224) <= 8224) { w+= (parts[sidx] || 8224); sidx++; }\n\t\to.write_shift(2, w);\n\t\tba.push(payload.slice(i, i+w)); i+= w;\n\t}\n}\n\nfunction write_BIFF2Cell(out, r, c) {\n\tif(!out) out = new_buf(7);\n\tout.write_shift(2, r);\n\tout.write_shift(2, c);\n\tout.write_shift(2, 0);\n\tout.write_shift(1, 0);\n\treturn out;\n}\n\nfunction write_BIFF2BERR(r, c, val, t) {\n\tvar out = new_buf(9);\n\twrite_BIFF2Cell(out, r, c);\n\tif(t == 'e') { out.write_shift(1, val); out.write_shift(1, 1); }\n\telse { out.write_shift(1, val?1:0); out.write_shift(1, 0); }\n\treturn out;\n}\n\n/* TODO: codepage, large strings */\nfunction write_BIFF2LABEL(r, c, val) {\n\tvar out = new_buf(8 + 2*val.length);\n\twrite_BIFF2Cell(out, r, c);\n\tout.write_shift(1, val.length);\n\tout.write_shift(val.length, val, 'sbcs');\n\treturn out.l < out.length ? out.slice(0, out.l) : out;\n}\n\nfunction write_ws_biff2_cell(ba, cell, R, C) {\n\tif(cell.v != null) switch(cell.t) {\n\t\tcase 'd': case 'n':\n\t\t\tvar v = cell.t == 'd' ? datenum(parseDate(cell.v)) : cell.v;\n\t\t\tif((v == (v|0)) && (v >= 0) && (v < 65536))\n\t\t\t\twrite_biff_rec(ba, 0x0002, write_BIFF2INT(R, C, v));\n\t\t\telse\n\t\t\t\twrite_biff_rec(ba, 0x0003, write_BIFF2NUM(R,C, v));\n\t\t\treturn;\n\t\tcase 'b': case 'e': write_biff_rec(ba, 0x0005, write_BIFF2BERR(R, C, cell.v, cell.t)); return;\n\t\t/* TODO: codepage, sst */\n\t\tcase 's': case 'str':\n\t\t\twrite_biff_rec(ba, 0x0004, write_BIFF2LABEL(R, C, cell.v));\n\t\t\treturn;\n\t}\n\twrite_biff_rec(ba, 0x0001, write_BIFF2Cell(null, R, C));\n}\n\nfunction write_ws_biff2(ba, ws, idx, opts) {\n\tvar dense = Array.isArray(ws);\n\tvar range = safe_decode_range(ws['!ref'] || \"A1\"), ref, rr = \"\", cols = [];\n\tif(range.e.c > 0xFF || range.e.r > 0x3FFF) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:IV16384\");\n\t\trange.e.c = Math.min(range.e.c, 0xFF);\n\t\trange.e.r = Math.min(range.e.c, 0x3FFF);\n\t\tref = encode_range(range);\n\t}\n\tfor(var R = range.s.r; R <= range.e.r; ++R) {\n\t\trr = encode_row(R);\n\t\tfor(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tif(R === range.s.r) cols[C] = encode_col(C);\n\t\t\tref = cols[C] + rr;\n\t\t\tvar cell = dense ? (ws[R]||[])[C] : ws[ref];\n\t\t\tif(!cell) continue;\n\t\t\t/* write cell */\n\t\t\twrite_ws_biff2_cell(ba, cell, R, C, opts);\n\t\t}\n\t}\n}\n\n/* Based on test files */\nfunction write_biff2_buf(wb, opts) {\n\tvar o = opts || {};\n\tif(DENSE != null && o.dense == null) o.dense = DENSE;\n\tvar ba = buf_array();\n\tvar idx = 0;\n\tfor(var i=0;i 0xFF || range.e.r >= MAX_ROWS) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:IV16384\");\n\t\trange.e.c = Math.min(range.e.c, 0xFF);\n\t\trange.e.r = Math.min(range.e.c, MAX_ROWS-1);\n\t}\n\n\twrite_biff_rec(ba, 0x0809, write_BOF(wb, 0x10, opts));\n\t/* [Uncalced] Index */\n\twrite_biff_rec(ba, \"CalcMode\", writeuint16(1));\n\twrite_biff_rec(ba, \"CalcCount\", writeuint16(100));\n\twrite_biff_rec(ba, \"CalcRefMode\", writebool(true));\n\twrite_biff_rec(ba, \"CalcIter\", writebool(false));\n\twrite_biff_rec(ba, \"CalcDelta\", write_Xnum(0.001));\n\twrite_biff_rec(ba, \"CalcSaveRecalc\", writebool(true));\n\twrite_biff_rec(ba, \"PrintRowCol\", writebool(false));\n\twrite_biff_rec(ba, \"PrintGrid\", writebool(false));\n\twrite_biff_rec(ba, \"GridSet\", writeuint16(1));\n\twrite_biff_rec(ba, \"Guts\", write_Guts([0,0]));\n\t/* DefaultRowHeight WsBool [Sync] [LPr] [HorizontalPageBreaks] [VerticalPageBreaks] */\n\t/* Header (string) */\n\t/* Footer (string) */\n\twrite_biff_rec(ba, \"HCenter\", writebool(false));\n\twrite_biff_rec(ba, \"VCenter\", writebool(false));\n\t/* ... */\n\twrite_biff_rec(ba, 0x200, write_Dimensions(range, opts));\n\t/* ... */\n\n\tif(b8) ws['!links'] = [];\n\tfor(var R = range.s.r; R <= range.e.r; ++R) {\n\t\trr = encode_row(R);\n\t\tfor(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tif(R === range.s.r) cols[C] = encode_col(C);\n\t\t\tref = cols[C] + rr;\n\t\t\tvar cell = dense ? (ws[R]||[])[C] : ws[ref];\n\t\t\tif(!cell) continue;\n\t\t\t/* write cell */\n\t\t\twrite_ws_biff8_cell(ba, cell, R, C, opts);\n\t\t\tif(b8 && cell.l) ws['!links'].push([ref, cell.l]);\n\t\t}\n\t}\n\tvar cname = _sheet.CodeName || _sheet.name || s;\n\t/* ... */\n\tif(b8 && _WB.Views) write_biff_rec(ba, \"Window2\", write_Window2(_WB.Views[0]));\n\t/* ... */\n\tif(b8 && (ws['!merges']||[]).length) write_biff_rec(ba, \"MergeCells\", write_MergeCells(ws['!merges']));\n\t/* [LRng] *QUERYTABLE [PHONETICINFO] CONDFMTS */\n\tif(b8) write_ws_biff8_hlinks(ba, ws);\n\t/* [DVAL] */\n\twrite_biff_rec(ba, \"CodeName\", write_XLUnicodeString(cname, opts));\n\t/* *WebPub *CellWatch [SheetExt] */\n\tif(b8) write_FEAT(ba, ws);\n\t/* *FEAT11 *RECORD12 */\n\twrite_biff_rec(ba, \"EOF\");\n\treturn ba.end();\n}\n\n/* [MS-XLS] 2.1.7.20.3 */\nfunction write_biff8_global(wb, bufs, opts) {\n\tvar A = buf_array();\n\tvar _WB = ((wb||{}).Workbook||{});\n\tvar _sheets = (_WB.Sheets||[]);\n\tvar _wb = _WB.WBProps||{};\n\tvar b8 = opts.biff == 8, b5 = opts.biff == 5;\n\twrite_biff_rec(A, 0x0809, write_BOF(wb, 0x05, opts));\n\tif(opts.bookType == \"xla\") write_biff_rec(A, \"Addin\");\n\twrite_biff_rec(A, \"InterfaceHdr\", b8 ? writeuint16(0x04b0) : null);\n\twrite_biff_rec(A, \"Mms\", writezeroes(2));\n\tif(b5) write_biff_rec(A, \"ToolbarHdr\");\n\tif(b5) write_biff_rec(A, \"ToolbarEnd\");\n\twrite_biff_rec(A, \"InterfaceEnd\");\n\twrite_biff_rec(A, \"WriteAccess\", write_WriteAccess(\"SheetJS\", opts));\n\t/* [FileSharing] */\n\twrite_biff_rec(A, \"CodePage\", writeuint16(b8 ? 0x04b0 : 0x04E4));\n\t/* *2047 Lel */\n\tif(b8) write_biff_rec(A, \"DSF\", writeuint16(0));\n\tif(b8) write_biff_rec(A, \"Excel9File\");\n\twrite_biff_rec(A, \"RRTabId\", write_RRTabId(wb.SheetNames.length));\n\tif(b8 && wb.vbaraw) write_biff_rec(A, \"ObProj\");\n\t/* [ObNoMacros] */\n\tif(b8 && wb.vbaraw) {\n\t\tvar cname = _wb.CodeName || \"ThisWorkbook\";\n\t\twrite_biff_rec(A, \"CodeName\", write_XLUnicodeString(cname, opts));\n\t}\n\twrite_biff_rec(A, \"BuiltInFnGroupCount\", writeuint16(0x11));\n\t/* *FnGroupName *FnGrp12 */\n\t/* *Lbl */\n\t/* [OleObjectSize] */\n\twrite_biff_rec(A, \"WinProtect\", writebool(false));\n\twrite_biff_rec(A, \"Protect\", writebool(false));\n\twrite_biff_rec(A, \"Password\", writeuint16(0));\n\tif(b8) write_biff_rec(A, \"Prot4Rev\", writebool(false));\n\tif(b8) write_biff_rec(A, \"Prot4RevPass\", writeuint16(0));\n\twrite_biff_rec(A, \"Window1\", write_Window1(opts));\n\twrite_biff_rec(A, \"Backup\", writebool(false));\n\twrite_biff_rec(A, \"HideObj\", writeuint16(0));\n\twrite_biff_rec(A, \"Date1904\", writebool(safe1904(wb)==\"true\"));\n\twrite_biff_rec(A, \"CalcPrecision\", writebool(true));\n\tif(b8) write_biff_rec(A, \"RefreshAll\", writebool(false));\n\twrite_biff_rec(A, \"BookBool\", writeuint16(0));\n\t/* ... */\n\twrite_FONTS_biff8(A, wb, opts);\n\twrite_FMTS_biff8(A, wb.SSF, opts);\n\twrite_CELLXFS_biff8(A, opts);\n\t/* ... */\n\tif(b8) write_biff_rec(A, \"UsesELFs\", writebool(false));\n\tvar a = A.end();\n\n\tvar C = buf_array();\n\t/* METADATA [MTRSettings] [ForceFullCalculation] */\n\tif(b8) write_biff_rec(C, \"Country\", write_Country());\n\t/* *SUPBOOK *LBL *RTD [RecalcId] *HFPicture *MSODRAWINGGROUP */\n\n\t/* BIFF8: [SST *Continue] ExtSST */\n\tif(b8 && opts.Strings) write_biff_continue(C, \"SST\", write_SST(opts.Strings, opts));\n\n\t/* *WebPub [WOpt] [CrErr] [BookExt] *FeatHdr *DConn [THEME] [CompressPictures] [Compat12] [GUIDTypeLib] */\n\twrite_biff_rec(C, \"EOF\");\n\tvar c = C.end();\n\n\tvar B = buf_array();\n\tvar blen = 0, j = 0;\n\tfor(j = 0; j < wb.SheetNames.length; ++j) blen += (b8 ? 12 : 11) + (b8 ? 2 : 1) * wb.SheetNames[j].length;\n\tvar start = a.length + blen + c.length;\n\tfor(j = 0; j < wb.SheetNames.length; ++j) {\n\t\tvar _sheet = _sheets[j] || ({});\n\t\twrite_biff_rec(B, \"BoundSheet8\", write_BoundSheet8({pos:start, hs:_sheet.Hidden||0, dt:0, name:wb.SheetNames[j]}, opts));\n\t\tstart += bufs[j].length;\n\t}\n\t/* 1*BoundSheet8 */\n\tvar b = B.end();\n\tif(blen != b.length) throw new Error(\"BS8 \" + blen + \" != \" + b.length);\n\n\tvar out = [];\n\tif(a.length) out.push(a);\n\tif(b.length) out.push(b);\n\tif(c.length) out.push(c);\n\treturn __toBuffer([out]);\n}\n\n/* [MS-XLS] 2.1.7.20 Workbook Stream */\nfunction write_biff8_buf(wb, opts) {\n\tvar o = opts || {};\n\tvar bufs = [];\n\n\tif(wb && !wb.SSF) {\n\t\twb.SSF = SSF.get_table();\n\t}\n\tif(wb && wb.SSF) {\n\t\tmake_ssf(SSF); SSF.load_table(wb.SSF);\n\t\t// $FlowIgnore\n\t\to.revssf = evert_num(wb.SSF); o.revssf[wb.SSF[65535]] = 0;\n\t\to.ssf = wb.SSF;\n\t}\n\n\to.Strings = []; o.Strings.Count = 0; o.Strings.Unique = 0;\n\tfix_write_opts(o);\n\n\to.cellXfs = [];\n\tget_cell_style(o.cellXfs, {}, {revssf:{\"General\":0}});\n\n\tif(!wb.Props) wb.Props = {};\n\n\tfor(var i = 0; i < wb.SheetNames.length; ++i) bufs[bufs.length] = write_ws_biff8(i, o, wb);\n\tbufs.unshift(write_biff8_global(wb, bufs, o));\n\treturn __toBuffer([bufs]);\n}\n\nfunction write_biff_buf(wb, opts) {\n\tvar o = opts || {};\n\tswitch(o.biff || 2) {\n\t\tcase 8: case 5: return write_biff8_buf(wb, opts);\n\t\tcase 4: case 3: case 2: return write_biff2_buf(wb, opts);\n\t}\n\tthrow new Error(\"invalid type \" + o.bookType + \" for BIFF\");\n}\n/* note: browser DOM element cannot see mso- style attrs, must parse */\nvar HTML_ = (function() {\n\tfunction html_to_sheet(str, _opts) {\n\t\tvar opts = _opts || {};\n\t\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\t\tvar ws = opts.dense ? ([]) : ({});\n\t\tstr = str.replace(//g, \"\");\n\t\tvar mtch = str.match(/\");\n\t\tvar mtch2 = str.match(/<\\/table/i);\n\t\tvar i = mtch.index, j = mtch2 && mtch2.index || str.length;\n\t\tvar rows = split_regex(str.slice(i, j), /(:?]*>)/i, \"\");\n\t\tvar R = -1, C = 0, RS = 0, CS = 0;\n\t\tvar range = {s:{r:10000000, c:10000000},e:{r:0,c:0}};\n\t\tvar merges = [];\n\t\tfor(i = 0; i < rows.length; ++i) {\n\t\t\tvar row = rows[i].trim();\n\t\t\tvar hd = row.slice(0,3).toLowerCase();\n\t\t\tif(hd == \"/i);\n\t\t\tfor(j = 0; j < cells.length; ++j) {\n\t\t\t\tvar cell = cells[j].trim();\n\t\t\t\tif(!cell.match(/\")) > -1) m = m.slice(cc+1);\n\t\t\t\tfor(var midx = 0; midx < merges.length; ++midx) {\n\t\t\t\t\tvar _merge = merges[midx];\n\t\t\t\t\tif(_merge.s.c == C && _merge.s.r < R && R <= _merge.e.r) { C = _merge.e.c + 1; midx = -1; }\n\t\t\t\t}\n\t\t\t\tvar tag = parsexmltag(cell.slice(0, cell.indexOf(\">\")));\n\t\t\t\tCS = tag.colspan ? +tag.colspan : 1;\n\t\t\t\tif((RS = +tag.rowspan)>1 || CS>1) merges.push({s:{r:R,c:C},e:{r:R + (RS||1) - 1, c:C + CS - 1}});\n\t\t\t\tvar _t = tag.t || \"\";\n\t\t\t\t/* TODO: generate stub cells */\n\t\t\t\tif(!m.length) { C += CS; continue; }\n\t\t\t\tm = htmldecode(m);\n\t\t\t\tif(range.s.r > R) range.s.r = R; if(range.e.r < R) range.e.r = R;\n\t\t\t\tif(range.s.c > C) range.s.c = C; if(range.e.c < C) range.e.c = C;\n\t\t\t\tif(!m.length) continue;\n\t\t\t\tvar o = {t:'s', v:m};\n\t\t\t\tif(opts.raw || !m.trim().length || _t == 's'){}\n\t\t\t\telse if(m === 'TRUE') o = {t:'b', v:true};\n\t\t\t\telse if(m === 'FALSE') o = {t:'b', v:false};\n\t\t\t\telse if(!isNaN(fuzzynum(m))) o = {t:'n', v:fuzzynum(m)};\n\t\t\t\telse if(!isNaN(fuzzydate(m).getDate())) {\n\t\t\t\t\to = ({t:'d', v:parseDate(m)});\n\t\t\t\t\tif(!opts.cellDates) o = ({t:'n', v:datenum(o.v)});\n\t\t\t\t\to.z = opts.dateNF || SSF._table[14];\n\t\t\t\t}\n\t\t\t\tif(opts.dense) { if(!ws[R]) ws[R] = []; ws[R][C] = o; }\n\t\t\t\telse ws[encode_cell({r:R, c:C})] = o;\n\t\t\t\tC += CS;\n\t\t\t}\n\t\t}\n\t\tws['!ref'] = encode_range(range);\n\t\tif(merges.length) ws[\"!merges\"] = merges;\n\t\treturn ws;\n\t}\n\tfunction html_to_book(str, opts) {\n\t\treturn sheet_to_workbook(html_to_sheet(str, opts), opts);\n\t}\n\tfunction make_html_row(ws, r, R, o) {\n\t\tvar M = (ws['!merges'] ||[]);\n\t\tvar oo = [];\n\t\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\t\tvar RS = 0, CS = 0;\n\t\t\tfor(var j = 0; j < M.length; ++j) {\n\t\t\t\tif(M[j].s.r > R || M[j].s.c > C) continue;\n\t\t\t\tif(M[j].e.r < R || M[j].e.c < C) continue;\n\t\t\t\tif(M[j].s.r < R || M[j].s.c < C) { RS = -1; break; }\n\t\t\t\tRS = M[j].e.r - M[j].s.r + 1; CS = M[j].e.c - M[j].s.c + 1; break;\n\t\t\t}\n\t\t\tif(RS < 0) continue;\n\t\t\tvar coord = encode_cell({r:R,c:C});\n\t\t\tvar cell = o.dense ? (ws[R]||[])[C] : ws[coord];\n\t\t\t/* TODO: html entities */\n\t\t\tvar w = (cell && cell.v != null) && (cell.h || escapehtml(cell.w || (format_cell(cell), cell.w) || \"\")) || \"\";\n\t\t\tvar sp = ({});\n\t\t\tif(RS > 1) sp.rowspan = RS;\n\t\t\tif(CS > 1) sp.colspan = CS;\n\t\t\tsp.t = cell && cell.t || 'z';\n\t\t\tif(o.editable) w = '' + w + '';\n\t\t\tsp.id = (o.id || \"sjs\") + \"-\" + coord;\n\t\t\tif(sp.t != \"z\") { sp.v = cell.v; if(cell.z != null) sp.z = cell.z; }\n\t\t\too.push(writextag('td', w, sp));\n\t\t}\n\t\tvar preamble = \"\";\n\t\treturn preamble + oo.join(\"\") + \"\";\n\t}\n\tfunction make_html_preamble(ws, R, o) {\n\t\tvar out = [];\n\t\treturn out.join(\"\") + '';\n\t}\n\tvar _BEGIN = 'SheetJS Table Export';\n\tvar _END = '';\n\tfunction sheet_to_html(ws, opts/*, wb:?Workbook*/) {\n\t\tvar o = opts || {};\n\t\tvar header = o.header != null ? o.header : _BEGIN;\n\t\tvar footer = o.footer != null ? o.footer : _END;\n\t\tvar out = [header];\n\t\tvar r = decode_range(ws['!ref']);\n\t\to.dense = Array.isArray(ws);\n\t\tout.push(make_html_preamble(ws, r, o));\n\t\tfor(var R = r.s.r; R <= r.e.r; ++R) out.push(make_html_row(ws, r, R, o));\n\t\tout.push(\"
\" + footer);\n\t\treturn out.join(\"\");\n\n\t}\n\treturn {\n\t\tto_workbook: html_to_book,\n\t\tto_sheet: html_to_sheet,\n\t\t_row: make_html_row,\n\t\tBEGIN: _BEGIN,\n\t\tEND: _END,\n\t\t_preamble: make_html_preamble,\n\t\tfrom_sheet: sheet_to_html\n\t};\n})();\n\nfunction sheet_add_dom(ws, table, _opts) {\n\tvar opts = _opts || {};\n\tif(DENSE != null) opts.dense = DENSE;\n\tvar or_R = 0, or_C = 0;\n\tif(opts.origin != null) {\n\t\tif(typeof opts.origin == 'number') or_R = opts.origin;\n\t\telse {\n\t\t\tvar _origin = typeof opts.origin == \"string\" ? decode_cell(opts.origin) : opts.origin;\n\t\t\tor_R = _origin.r; or_C = _origin.c;\n\t\t}\n\t}\n\tvar rows = table.getElementsByTagName('tr');\n\tvar sheetRows = Math.min(opts.sheetRows||10000000, rows.length);\n\tvar range = {s:{r:0,c:0},e:{r:or_R,c:or_C}};\n\tif(ws[\"!ref\"]) {\n\t\tvar _range = decode_range(ws[\"!ref\"]);\n\t\trange.s.r = Math.min(range.s.r, _range.s.r);\n\t\trange.s.c = Math.min(range.s.c, _range.s.c);\n\t\trange.e.r = Math.max(range.e.r, _range.e.r);\n\t\trange.e.c = Math.max(range.e.c, _range.e.c);\n\t\tif(or_R == -1) range.e.r = or_R = _range.e.r + 1;\n\t}\n\tvar merges = [], midx = 0;\n\tvar rowinfo = ws[\"!rows\"] || (ws[\"!rows\"] = []);\n\tvar _R = 0, R = 0, _C = 0, C = 0, RS = 0, CS = 0;\n\tif(!ws[\"!cols\"]) ws['!cols'] = [];\n\tfor(; _R < rows.length && R < sheetRows; ++_R) {\n\t\tvar row = rows[_R];\n\t\tif (is_dom_element_hidden(row)) {\n\t\t\tif (opts.display) continue;\n\t\t\trowinfo[R] = {hidden: true};\n\t\t}\n\t\tvar elts = (row.children);\n\t\tfor(_C = C = 0; _C < elts.length; ++_C) {\n\t\t\tvar elt = elts[_C];\n\t\t\tif (opts.display && is_dom_element_hidden(elt)) continue;\n\t\t\tvar v = elt.hasAttribute('v') ? elt.getAttribute('v') : htmldecode(elt.innerHTML);\n\t\t\tvar z = elt.getAttribute('z');\n\t\t\tfor(midx = 0; midx < merges.length; ++midx) {\n\t\t\t\tvar m = merges[midx];\n\t\t\t\tif(m.s.c == C + or_C && m.s.r < R + or_R && R + or_R <= m.e.r) { C = m.e.c+1 - or_C; midx = -1; }\n\t\t\t}\n\t\t\t/* TODO: figure out how to extract nonstandard mso- style */\n\t\t\tCS = +elt.getAttribute(\"colspan\") || 1;\n\t\t\tif( ((RS = (+elt.getAttribute(\"rowspan\") || 1)))>1 || CS>1) merges.push({s:{r:R + or_R,c:C + or_C},e:{r:R + or_R + (RS||1) - 1, c:C + or_C + (CS||1) - 1}});\n\t\t\tvar o = {t:'s', v:v};\n\t\t\tvar _t = elt.getAttribute(\"t\") || \"\";\n\t\t\tif(v != null) {\n\t\t\t\tif(v.length == 0) o.t = _t || 'z';\n\t\t\t\telse if(opts.raw || v.trim().length == 0 || _t == \"s\"){}\n\t\t\t\telse if(v === 'TRUE') o = {t:'b', v:true};\n\t\t\t\telse if(v === 'FALSE') o = {t:'b', v:false};\n\t\t\t\telse if(!isNaN(fuzzynum(v))) o = {t:'n', v:fuzzynum(v)};\n\t\t\t\telse if(!isNaN(fuzzydate(v).getDate())) {\n\t\t\t\t\to = ({t:'d', v:parseDate(v)});\n\t\t\t\t\tif(!opts.cellDates) o = ({t:'n', v:datenum(o.v)});\n\t\t\t\t\to.z = opts.dateNF || SSF._table[14];\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(o.z === undefined && z != null) o.z = z;\n\t\t\tif(opts.dense) { if(!ws[R + or_R]) ws[R + or_R] = []; ws[R + or_R][C + or_C] = o; }\n\t\t\telse ws[encode_cell({c:C + or_C, r:R + or_R})] = o;\n\t\t\tif(range.e.c < C + or_C) range.e.c = C + or_C;\n\t\t\tC += CS;\n\t\t}\n\t\t++R;\n\t}\n\tif(merges.length) ws['!merges'] = (ws[\"!merges\"] || []).concat(merges);\n\trange.e.r = Math.max(range.e.r, R - 1 + or_R);\n\tws['!ref'] = encode_range(range);\n\tif(R >= sheetRows) ws['!fullref'] = encode_range((range.e.r = rows.length-_R+R-1 + or_R,range)); // We can count the real number of rows to parse but we don't to improve the performance\n\treturn ws;\n}\n\nfunction parse_dom_table(table, _opts) {\n\tvar opts = _opts || {};\n\tvar ws = opts.dense ? ([]) : ({});\n\treturn sheet_add_dom(ws, table, _opts);\n}\n\nfunction table_to_book(table, opts) {\n\treturn sheet_to_workbook(parse_dom_table(table, opts), opts);\n}\n\nfunction is_dom_element_hidden(element) {\n\tvar display = '';\n\tvar get_computed_style = get_get_computed_style_function(element);\n\tif(get_computed_style) display = get_computed_style(element).getPropertyValue('display');\n\tif(!display) display = element.style.display; // Fallback for cases when getComputedStyle is not available (e.g. an old browser or some Node.js environments) or doesn't work (e.g. if the element is not inserted to a document)\n\treturn display === 'none';\n}\n\n/* global getComputedStyle */\nfunction get_get_computed_style_function(element) {\n\t// The proper getComputedStyle implementation is the one defined in the element window\n\tif(element.ownerDocument.defaultView && typeof element.ownerDocument.defaultView.getComputedStyle === 'function') return element.ownerDocument.defaultView.getComputedStyle;\n\t// If it is not available, try to get one from the global namespace\n\tif(typeof getComputedStyle === 'function') return getComputedStyle;\n\treturn null;\n}\n/* OpenDocument */\nvar parse_content_xml = (function() {\n\n\tvar parse_text_p = function(text) {\n\t\t/* 6.1.2 White Space Characters */\n\t\tvar fixed = text\n\t\t\t.replace(/[\\t\\r\\n]/g, \" \").trim().replace(/ +/g, \" \")\n\t\t\t.replace(//g,\" \")\n\t\t\t.replace(//g, function($$,$1) { return Array(parseInt($1,10)+1).join(\" \"); })\n\t\t\t.replace(/]*\\/>/g,\"\\t\")\n\t\t\t.replace(//g,\"\\n\");\n\t\tvar v = unescapexml(fixed.replace(/<[^>]*>/g,\"\"));\n\n\t\treturn [v];\n\t};\n\n\tvar number_formats = {\n\t\t/* ods name: [short ssf fmt, long ssf fmt] */\n\t\tday: [\"d\", \"dd\"],\n\t\tmonth: [\"m\", \"mm\"],\n\t\tyear: [\"y\", \"yy\"],\n\t\thours: [\"h\", \"hh\"],\n\t\tminutes: [\"m\", \"mm\"],\n\t\tseconds: [\"s\", \"ss\"],\n\t\t\"am-pm\": [\"A/P\", \"AM/PM\"],\n\t\t\"day-of-week\": [\"ddd\", \"dddd\"],\n\t\tera: [\"e\", \"ee\"],\n\t\t/* there is no native representation of LO \"Q\" format */\n\t\tquarter: [\"\\\\Qm\", \"m\\\\\\\"th quarter\\\"\"]\n\t};\n\n\treturn function pcx(d, _opts) {\n\t\tvar opts = _opts || {};\n\t\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\t\tvar str = xlml_normalize(d);\n\t\tvar state = [], tmp;\n\t\tvar tag;\n\t\tvar NFtag = {name:\"\"}, NF = \"\", pidx = 0;\n\t\tvar sheetag;\n\t\tvar rowtag;\n\t\tvar Sheets = {}, SheetNames = [];\n\t\tvar ws = opts.dense ? ([]) : ({});\n\t\tvar Rn, q;\n\t\tvar ctag = ({value:\"\"});\n\t\tvar textp = \"\", textpidx = 0, textptag;\n\t\tvar textR = [];\n\t\tvar R = -1, C = -1, range = {s: {r:1000000,c:10000000}, e: {r:0, c:0}};\n\t\tvar row_ol = 0;\n\t\tvar number_format_map = {};\n\t\tvar merges = [], mrange = {}, mR = 0, mC = 0;\n\t\tvar rowinfo = [], rowpeat = 1, colpeat = 1;\n\t\tvar arrayf = [];\n\t\tvar WB = {Names:[]};\n\t\tvar atag = ({});\n\t\tvar _Ref = [\"\", \"\"];\n\t\tvar comments = [], comment = ({});\n\t\tvar creator = \"\", creatoridx = 0;\n\t\tvar isstub = false, intable = false;\n\t\tvar i = 0;\n\t\txlmlregex.lastIndex = 0;\n\t\tstr = str.replace(//mg,\"\").replace(//gm,\"\");\n\t\twhile((Rn = xlmlregex.exec(str))) switch((Rn[3]=Rn[3].replace(/_.*$/,\"\"))) {\n\n\t\t\tcase 'table': case '工作表': // 9.1.2 \n\t\t\t\tif(Rn[1]==='/') {\n\t\t\t\t\tif(range.e.c >= range.s.c && range.e.r >= range.s.r) ws['!ref'] = encode_range(range);\n\t\t\t\t\tif(opts.sheetRows > 0 && opts.sheetRows <= range.e.r) {\n\t\t\t\t\t\tws['!fullref'] = ws['!ref'];\n\t\t\t\t\t\trange.e.r = opts.sheetRows - 1;\n\t\t\t\t\t\tws['!ref'] = encode_range(range);\n\t\t\t\t\t}\n\t\t\t\t\tif(merges.length) ws['!merges'] = merges;\n\t\t\t\t\tif(rowinfo.length) ws[\"!rows\"] = rowinfo;\n\t\t\t\t\tsheetag.name = sheetag['名称'] || sheetag.name;\n\t\t\t\t\tif(typeof JSON !== 'undefined') JSON.stringify(sheetag);\n\t\t\t\t\tSheetNames.push(sheetag.name);\n\t\t\t\t\tSheets[sheetag.name] = ws;\n\t\t\t\t\tintable = false;\n\t\t\t\t}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\t\tsheetag = parsexmltag(Rn[0], false);\n\t\t\t\t\tR = C = -1;\n\t\t\t\t\trange.s.r = range.s.c = 10000000; range.e.r = range.e.c = 0;\n\t\t\t\t\tws = opts.dense ? ([]) : ({}); merges = [];\n\t\t\t\t\trowinfo = [];\n\t\t\t\t\tintable = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'table-row-group': // 9.1.9 \n\t\t\t\tif(Rn[1] === \"/\") --row_ol; else ++row_ol;\n\t\t\t\tbreak;\n\t\t\tcase 'table-row': case '行': // 9.1.3 \n\t\t\t\tif(Rn[1] === '/') { R+=rowpeat; rowpeat = 1; break; }\n\t\t\t\trowtag = parsexmltag(Rn[0], false);\n\t\t\t\tif(rowtag['行号']) R = rowtag['行号'] - 1; else if(R == -1) R = 0;\n\t\t\t\trowpeat = +rowtag['number-rows-repeated'] || 1;\n\t\t\t\t/* TODO: remove magic */\n\t\t\t\tif(rowpeat < 10) for(i = 0; i < rowpeat; ++i) if(row_ol > 0) rowinfo[R + i] = {level: row_ol};\n\t\t\t\tC = -1; break;\n\t\t\tcase 'covered-table-cell': // 9.1.5 \n\t\t\t\tif(Rn[1] !== '/') ++C;\n\t\t\t\tif(opts.sheetStubs) {\n\t\t\t\t\tif(opts.dense) { if(!ws[R]) ws[R] = []; ws[R][C] = {t:'z'}; }\n\t\t\t\t\telse ws[encode_cell({r:R,c:C})] = {t:'z'};\n\t\t\t\t}\n\t\t\t\ttextp = \"\"; textR = [];\n\t\t\t\tbreak; /* stub */\n\t\t\tcase 'table-cell': case '数据':\n\t\t\t\tif(Rn[0].charAt(Rn[0].length-2) === '/') {\n\t\t\t\t\t++C;\n\t\t\t\t\tctag = parsexmltag(Rn[0], false);\n\t\t\t\t\tcolpeat = parseInt(ctag['number-columns-repeated']||\"1\", 10);\n\t\t\t\t\tq = ({t:'z', v:null});\n\t\t\t\t\tif(ctag.formula && opts.cellFormula != false) q.f = ods_to_csf_formula(unescapexml(ctag.formula));\n\t\t\t\t\tif((ctag['数据类型'] || ctag['value-type']) == \"string\") {\n\t\t\t\t\t\tq.t = \"s\"; q.v = unescapexml(ctag['string-value'] || \"\");\n\t\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\t\tif(!ws[R]) ws[R] = [];\n\t\t\t\t\t\t\tws[R][C] = q;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tws[encode_cell({r:R,c:C})] = q;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tC+= colpeat-1;\n\t\t\t\t} else if(Rn[1]!=='/') {\n\t\t\t\t\t++C;\n\t\t\t\t\tcolpeat = 1;\n\t\t\t\t\tvar rptR = rowpeat ? R + rowpeat - 1 : R;\n\t\t\t\t\tif(C > range.e.c) range.e.c = C;\n\t\t\t\t\tif(C < range.s.c) range.s.c = C;\n\t\t\t\t\tif(R < range.s.r) range.s.r = R;\n\t\t\t\t\tif(rptR > range.e.r) range.e.r = rptR;\n\t\t\t\t\tctag = parsexmltag(Rn[0], false);\n\t\t\t\t\tcomments = []; comment = ({});\n\t\t\t\t\tq = ({t:ctag['数据类型'] || ctag['value-type'], v:null});\n\t\t\t\t\tif(opts.cellFormula) {\n\t\t\t\t\t\tif(ctag.formula) ctag.formula = unescapexml(ctag.formula);\n\t\t\t\t\t\tif(ctag['number-matrix-columns-spanned'] && ctag['number-matrix-rows-spanned']) {\n\t\t\t\t\t\t\tmR = parseInt(ctag['number-matrix-rows-spanned'],10) || 0;\n\t\t\t\t\t\t\tmC = parseInt(ctag['number-matrix-columns-spanned'],10) || 0;\n\t\t\t\t\t\t\tmrange = {s: {r:R,c:C}, e:{r:R + mR-1,c:C + mC-1}};\n\t\t\t\t\t\t\tq.F = encode_range(mrange);\n\t\t\t\t\t\t\tarrayf.push([mrange, q.F]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(ctag.formula) q.f = ods_to_csf_formula(ctag.formula);\n\t\t\t\t\t\telse for(i = 0; i < arrayf.length; ++i)\n\t\t\t\t\t\t\tif(R >= arrayf[i][0].s.r && R <= arrayf[i][0].e.r)\n\t\t\t\t\t\t\t\tif(C >= arrayf[i][0].s.c && C <= arrayf[i][0].e.c)\n\t\t\t\t\t\t\t\t\tq.F = arrayf[i][1];\n\t\t\t\t\t}\n\t\t\t\t\tif(ctag['number-columns-spanned'] || ctag['number-rows-spanned']) {\n\t\t\t\t\t\tmR = parseInt(ctag['number-rows-spanned'],10) || 0;\n\t\t\t\t\t\tmC = parseInt(ctag['number-columns-spanned'],10) || 0;\n\t\t\t\t\t\tmrange = {s: {r:R,c:C}, e:{r:R + mR-1,c:C + mC-1}};\n\t\t\t\t\t\tmerges.push(mrange);\n\t\t\t\t\t}\n\n\t\t\t\t\t/* 19.675.2 table:number-columns-repeated */\n\t\t\t\t\tif(ctag['number-columns-repeated']) colpeat = parseInt(ctag['number-columns-repeated'], 10);\n\n\t\t\t\t\t/* 19.385 office:value-type */\n\t\t\t\t\tswitch(q.t) {\n\t\t\t\t\t\tcase 'boolean': q.t = 'b'; q.v = parsexmlbool(ctag['boolean-value']); break;\n\t\t\t\t\t\tcase 'float': q.t = 'n'; q.v = parseFloat(ctag.value); break;\n\t\t\t\t\t\tcase 'percentage': q.t = 'n'; q.v = parseFloat(ctag.value); break;\n\t\t\t\t\t\tcase 'currency': q.t = 'n'; q.v = parseFloat(ctag.value); break;\n\t\t\t\t\t\tcase 'date': q.t = 'd'; q.v = parseDate(ctag['date-value']);\n\t\t\t\t\t\t\tif(!opts.cellDates) { q.t = 'n'; q.v = datenum(q.v); }\n\t\t\t\t\t\t\tq.z = 'm/d/yy'; break;\n\t\t\t\t\t\tcase 'time': q.t = 'n'; q.v = parse_isodur(ctag['time-value'])/86400; break;\n\t\t\t\t\t\tcase 'number': q.t = 'n'; q.v = parseFloat(ctag['数据数值']); break;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tif(q.t === 'string' || q.t === 'text' || !q.t) {\n\t\t\t\t\t\t\t\tq.t = 's';\n\t\t\t\t\t\t\t\tif(ctag['string-value'] != null) { textp = unescapexml(ctag['string-value']); textR = []; }\n\t\t\t\t\t\t\t} else throw new Error('Unsupported value type ' + q.t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tisstub = false;\n\t\t\t\t\tif(q.t === 's') {\n\t\t\t\t\t\tq.v = textp || '';\n\t\t\t\t\t\tif(textR.length) q.R = textR;\n\t\t\t\t\t\tisstub = textpidx == 0;\n\t\t\t\t\t}\n\t\t\t\t\tif(atag.Target) q.l = atag;\n\t\t\t\t\tif(comments.length > 0) { q.c = comments; comments = []; }\n\t\t\t\t\tif(textp && opts.cellText !== false) q.w = textp;\n\t\t\t\t\tif(isstub) { q.t = \"z\"; delete q.v; }\n\t\t\t\t\tif(!isstub || opts.sheetStubs) {\n\t\t\t\t\t\tif(!(opts.sheetRows && opts.sheetRows <= R)) {\n\t\t\t\t\t\t\tfor(var rpt = 0; rpt < rowpeat; ++rpt) {\n\t\t\t\t\t\t\t\tcolpeat = parseInt(ctag['number-columns-repeated']||\"1\", 10);\n\t\t\t\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\t\t\t\tif(!ws[R + rpt]) ws[R + rpt] = [];\n\t\t\t\t\t\t\t\t\tws[R + rpt][C] = rpt == 0 ? q : dup(q);\n\t\t\t\t\t\t\t\t\twhile(--colpeat > 0) ws[R + rpt][C + colpeat] = dup(q);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tws[encode_cell({r:R + rpt,c:C})] = q;\n\t\t\t\t\t\t\t\t\twhile(--colpeat > 0) ws[encode_cell({r:R + rpt,c:C + colpeat})] = dup(q);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif(range.e.c <= C) range.e.c = C;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcolpeat = parseInt(ctag['number-columns-repeated']||\"1\", 10);\n\t\t\t\t\tC += colpeat-1; colpeat = 0;\n\t\t\t\t\tq = {};\n\t\t\t\t\ttextp = \"\"; textR = [];\n\t\t\t\t}\n\t\t\t\tatag = ({});\n\t\t\t\tbreak; // 9.1.4 \n\n\t\t\t/* pure state */\n\t\t\tcase 'document': // TODO: is the root for FODS\n\t\t\tcase 'document-content': case '电子表格文档': // 3.1.3.2 \n\t\t\tcase 'spreadsheet': case '主体': // 3.7 \n\t\t\tcase 'scripts': // 3.12 \n\t\t\tcase 'styles': // TODO \n\t\t\tcase 'font-face-decls': // 3.14 \n\t\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw \"Bad state: \"+tmp;}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\t\tbreak;\n\n\t\t\tcase 'annotation': // 14.1 \n\t\t\t\tif(Rn[1]==='/'){\n\t\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw \"Bad state: \"+tmp;\n\t\t\t\t\tcomment.t = textp;\n\t\t\t\t\tif(textR.length) comment.R = textR;\n\t\t\t\t\tcomment.a = creator;\n\t\t\t\t\tcomments.push(comment);\n\t\t\t\t}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') {state.push([Rn[3], false]);}\n\t\t\t\tcreator = \"\"; creatoridx = 0;\n\t\t\t\ttextp = \"\"; textpidx = 0; textR = [];\n\t\t\t\tbreak;\n\n\t\t\tcase 'creator': // 4.3.2.7 \n\t\t\t\tif(Rn[1]==='/') { creator = str.slice(creatoridx,Rn.index); }\n\t\t\t\telse creatoridx = Rn.index + Rn[0].length;\n\t\t\t\tbreak;\n\n\t\t\t/* ignore state */\n\t\t\tcase 'meta': case '元数据': // TODO: FODS/UOF\n\t\t\tcase 'settings': // TODO: \n\t\t\tcase 'config-item-set': // TODO: \n\t\t\tcase 'config-item-map-indexed': // TODO: \n\t\t\tcase 'config-item-map-entry': // TODO: \n\t\t\tcase 'config-item-map-named': // TODO: \n\t\t\tcase 'shapes': // 9.2.8 \n\t\t\tcase 'frame': // 10.4.2 \n\t\t\tcase 'text-box': // 10.4.3 \n\t\t\tcase 'image': // 10.4.4 \n\t\t\tcase 'data-pilot-tables': // 9.6.2 \n\t\t\tcase 'list-style': // 16.30 \n\t\t\tcase 'form': // 13.13 \n\t\t\tcase 'dde-links': // 9.8 \n\t\t\tcase 'event-listeners': // TODO\n\t\t\tcase 'chart': // TODO\n\t\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw \"Bad state: \"+tmp;}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], false]);\n\t\t\t\ttextp = \"\"; textpidx = 0; textR = [];\n\t\t\t\tbreak;\n\n\t\t\tcase 'scientific-number': // TODO: \n\t\t\t\tbreak;\n\t\t\tcase 'currency-symbol': // TODO: \n\t\t\t\tbreak;\n\t\t\tcase 'currency-style': // TODO: \n\t\t\t\tbreak;\n\t\t\tcase 'number-style': // 16.27.2 \n\t\t\tcase 'percentage-style': // 16.27.9 \n\t\t\tcase 'date-style': // 16.27.10 \n\t\t\tcase 'time-style': // 16.27.18 \n\t\t\t\tif(Rn[1]==='/'){\n\t\t\t\t\tnumber_format_map[NFtag.name] = NF;\n\t\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw \"Bad state: \"+tmp;\n\t\t\t\t} else if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\t\tNF = \"\";\n\t\t\t\t\tNFtag = parsexmltag(Rn[0], false);\n\t\t\t\t\tstate.push([Rn[3], true]);\n\t\t\t\t} break;\n\n\t\t\tcase 'script': break; // 3.13 \n\t\t\tcase 'libraries': break; // TODO: \n\t\t\tcase 'automatic-styles': break; // 3.15.3 \n\t\t\tcase 'master-styles': break; // TODO: \n\n\t\t\tcase 'default-style': // TODO: \n\t\t\tcase 'page-layout': break; // TODO: \n\t\t\tcase 'style': // 16.2 \n\t\t\t\tbreak;\n\t\t\tcase 'map': break; // 16.3 \n\t\t\tcase 'font-face': break; // 16.21 \n\n\t\t\tcase 'paragraph-properties': break; // 17.6 \n\t\t\tcase 'table-properties': break; // 17.15 \n\t\t\tcase 'table-column-properties': break; // 17.16 \n\t\t\tcase 'table-row-properties': break; // 17.17 \n\t\t\tcase 'table-cell-properties': break; // 17.18 \n\n\t\t\tcase 'number': // 16.27.3 \n\t\t\t\tswitch(state[state.length-1][0]) {\n\t\t\t\t\tcase 'time-style':\n\t\t\t\t\tcase 'date-style':\n\t\t\t\t\t\ttag = parsexmltag(Rn[0], false);\n\t\t\t\t\t\tNF += number_formats[Rn[3]][tag.style==='long'?1:0]; break;\n\t\t\t\t} break;\n\n\t\t\tcase 'fraction': break; // TODO 16.27.6 \n\n\t\t\tcase 'day': // 16.27.11 \n\t\t\tcase 'month': // 16.27.12 \n\t\t\tcase 'year': // 16.27.13 \n\t\t\tcase 'era': // 16.27.14 \n\t\t\tcase 'day-of-week': // 16.27.15 \n\t\t\tcase 'week-of-year': // 16.27.16 \n\t\t\tcase 'quarter': // 16.27.17 \n\t\t\tcase 'hours': // 16.27.19 \n\t\t\tcase 'minutes': // 16.27.20 \n\t\t\tcase 'seconds': // 16.27.21 \n\t\t\tcase 'am-pm': // 16.27.22 \n\t\t\t\tswitch(state[state.length-1][0]) {\n\t\t\t\t\tcase 'time-style':\n\t\t\t\t\tcase 'date-style':\n\t\t\t\t\t\ttag = parsexmltag(Rn[0], false);\n\t\t\t\t\t\tNF += number_formats[Rn[3]][tag.style==='long'?1:0]; break;\n\t\t\t\t} break;\n\n\t\t\tcase 'boolean-style': break; // 16.27.23 \n\t\t\tcase 'boolean': break; // 16.27.24 \n\t\t\tcase 'text-style': break; // 16.27.25 \n\t\t\tcase 'text': // 16.27.26 \n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\t\telse if(Rn[1]===\"/\") switch(state[state.length-1][0]) {\n\t\t\t\t\tcase 'number-style':\n\t\t\t\t\tcase 'date-style':\n\t\t\t\t\tcase 'time-style':\n\t\t\t\t\t\tNF += str.slice(pidx, Rn.index);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\telse pidx = Rn.index + Rn[0].length;\n\t\t\t\tbreak;\n\n\t\t\tcase 'named-range': // 9.4.12 \n\t\t\t\ttag = parsexmltag(Rn[0], false);\n\t\t\t\t_Ref = ods_to_csf_3D(tag['cell-range-address']);\n\t\t\t\tvar nrange = ({Name:tag.name, Ref:_Ref[0] + '!' + _Ref[1]});\n\t\t\t\tif(intable) nrange.Sheet = SheetNames.length;\n\t\t\t\tWB.Names.push(nrange);\n\t\t\t\tbreak;\n\n\t\t\tcase 'text-content': break; // 16.27.27 \n\t\t\tcase 'text-properties': break; // 16.27.27 \n\t\t\tcase 'embedded-text': break; // 16.27.4 \n\n\t\t\tcase 'body': case '电子表格': break; // 3.3 16.9.6 19.726.3\n\n\t\t\tcase 'forms': break; // 12.25.2 13.2\n\t\t\tcase 'table-column': break; // 9.1.6 \n\t\t\tcase 'table-header-rows': break; // 9.1.7 \n\t\t\tcase 'table-rows': break; // 9.1.12 \n\t\t\t/* TODO: outline levels */\n\t\t\tcase 'table-column-group': break; // 9.1.10 \n\t\t\tcase 'table-header-columns': break; // 9.1.11 \n\t\t\tcase 'table-columns': break; // 9.1.12 \n\n\t\t\tcase 'null-date': break; // 9.4.2 TODO: date1904\n\n\t\t\tcase 'graphic-properties': break; // 17.21 \n\t\t\tcase 'calculation-settings': break; // 9.4.1 \n\t\t\tcase 'named-expressions': break; // 9.4.11 \n\t\t\tcase 'label-range': break; // 9.4.9 \n\t\t\tcase 'label-ranges': break; // 9.4.10 \n\t\t\tcase 'named-expression': break; // 9.4.13 \n\t\t\tcase 'sort': break; // 9.4.19 \n\t\t\tcase 'sort-by': break; // 9.4.20 \n\t\t\tcase 'sort-groups': break; // 9.4.22 \n\n\t\t\tcase 'tab': break; // 6.1.4 \n\t\t\tcase 'line-break': break; // 6.1.5 \n\t\t\tcase 'span': break; // 6.1.7 \n\t\t\tcase 'p': case '文本串': // 5.1.3 \n\t\t\t\tif(Rn[1]==='/' && (!ctag || !ctag['string-value'])) {\n\t\t\t\t\tvar ptp = parse_text_p(str.slice(textpidx,Rn.index), textptag);\n\t\t\t\t\ttextp = (textp.length > 0 ? textp + \"\\n\" : \"\") + ptp[0];\n\t\t\t\t} else { textptag = parsexmltag(Rn[0], false); textpidx = Rn.index + Rn[0].length; }\n\t\t\t\tbreak; // \n\t\t\tcase 's': break; // \n\n\t\t\tcase 'database-range': // 9.4.15 \n\t\t\t\tif(Rn[1]==='/') break;\n\t\t\t\ttry {\n\t\t\t\t\t_Ref = ods_to_csf_3D(parsexmltag(Rn[0])['target-range-address']);\n\t\t\t\t\tSheets[_Ref[0]]['!autofilter'] = { ref:_Ref[1] };\n\t\t\t\t} catch(e) {/* empty */}\n\t\t\t\tbreak;\n\n\t\t\tcase 'date': break; // <*:date>\n\n\t\t\tcase 'object': break; // 10.4.6.2 \n\t\t\tcase 'title': case '标题': break; // <*:title> OR \n\t\t\tcase 'desc': break; // <*:desc>\n\t\t\tcase 'binary-data': break; // 10.4.5 TODO: b64 blob\n\n\t\t\t/* 9.2 Advanced Tables */\n\t\t\tcase 'table-source': break; // 9.2.6\n\t\t\tcase 'scenario': break; // 9.2.6\n\n\t\t\tcase 'iteration': break; // 9.4.3 \n\t\t\tcase 'content-validations': break; // 9.4.4 \n\t\t\tcase 'filter': break; // 9.5.2 \n\t\t\tcase 'filter-and': break; // 9.5.3 \n\t\t\tcase 'filter-or': break; // 9.5.4 \n\t\t\tcase 'filter-condition': break; // 9.5.5 \n\n\t\t\tcase 'list-level-style-bullet': break; // 16.31 \n\t\t\tcase 'page-count': break; // TODO \n\t\t\tcase 'time': break; // TODO \n\n\t\t\t/* 9.3 Advanced Table Cells */\n\t\t\tcase 'cell-range-source': break; // 9.3.1 \n\t\t\tcase 'property': break; // 13.8 \n\n\t\t\tcase 'a': // 6.1.8 hyperlink\n\t\t\t\tif(Rn[1]!== '/') {\n\t\t\t\t\tatag = parsexmltag(Rn[0], false);\n\t\t\t\t\tif(!atag.href) break;\n\t\t\t\t\tatag.Target = atag.href; delete atag.href;\n\t\t\t\t\tif(atag.Target.charAt(0) == \"#\" && atag.Target.indexOf(\".\") > -1) {\n\t\t\t\t\t\t_Ref = ods_to_csf_3D(atag.Target.slice(1));\n\t\t\t\t\t\tatag.Target = \"#\" + _Ref[0] + \"!\" + _Ref[1];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t/* non-standard */\n\t\t\tcase 'table-protection': break;\n\t\t\tcase 'data-pilot-grand-total': break; // ';\n\treturn function wso() {\n\t\treturn XML_HEADER + payload;\n\t};\n})();\nvar write_content_ods = (function() {\n\t/* 6.1.2 White Space Characters */\n\tvar write_text_p = function(text) {\n\t\treturn escapexml(text)\n\t\t\t.replace(/ +/g, function($$){return '';})\n\t\t\t.replace(/\\t/g, \"\")\n\t\t\t.replace(/\\n/g, \"\")\n\t\t\t.replace(/^ /, \"\").replace(/ $/, \"\");\n\t};\n\n\tvar null_cell_xml = ' \\n';\n\tvar covered_cell_xml = ' \\n';\n\tvar write_ws = function(ws, wb, i) {\n\t\t/* Section 9 Tables */\n\t\tvar o = [];\n\t\to.push(' \\n');\n\t\tvar R=0,C=0, range = decode_range(ws['!ref']);\n\t\tvar marr = ws['!merges'] || [], mi = 0;\n\t\tvar dense = Array.isArray(ws);\n\t\tfor(R = 0; R < range.s.r; ++R) o.push(' \\n');\n\t\tfor(; R <= range.e.r; ++R) {\n\t\t\to.push(' \\n');\n\t\t\tfor(C=0; C < range.s.c; ++C) o.push(null_cell_xml);\n\t\t\tfor(; C <= range.e.c; ++C) {\n\t\t\t\tvar skip = false, ct = {}, textp = \"\";\n\t\t\t\tfor(mi = 0; mi != marr.length; ++mi) {\n\t\t\t\t\tif(marr[mi].s.c > C) continue;\n\t\t\t\t\tif(marr[mi].s.r > R) continue;\n\t\t\t\t\tif(marr[mi].e.c < C) continue;\n\t\t\t\t\tif(marr[mi].e.r < R) continue;\n\t\t\t\t\tif(marr[mi].s.c != C || marr[mi].s.r != R) skip = true;\n\t\t\t\t\tct['table:number-columns-spanned'] = (marr[mi].e.c - marr[mi].s.c + 1);\n\t\t\t\t\tct['table:number-rows-spanned'] = (marr[mi].e.r - marr[mi].s.r + 1);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif(skip) { o.push(covered_cell_xml); continue; }\n\t\t\t\tvar ref = encode_cell({r:R, c:C}), cell = dense ? (ws[R]||[])[C]: ws[ref];\n\t\t\t\tif(cell && cell.f) {\n\t\t\t\t\tct['table:formula'] = escapexml(csf_to_ods_formula(cell.f));\n\t\t\t\t\tif(cell.F) {\n\t\t\t\t\t\tif(cell.F.slice(0, ref.length) == ref) {\n\t\t\t\t\t\t\tvar _Fref = decode_range(cell.F);\n\t\t\t\t\t\t\tct['table:number-matrix-columns-spanned'] = (_Fref.e.c - _Fref.s.c + 1);\n\t\t\t\t\t\t\tct['table:number-matrix-rows-spanned'] = (_Fref.e.r - _Fref.s.r + 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(!cell) { o.push(null_cell_xml); continue; }\n\t\t\t\tswitch(cell.t) {\n\t\t\t\t\tcase 'b':\n\t\t\t\t\t\ttextp = (cell.v ? 'TRUE' : 'FALSE');\n\t\t\t\t\t\tct['office:value-type'] = \"boolean\";\n\t\t\t\t\t\tct['office:boolean-value'] = (cell.v ? 'true' : 'false');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'n':\n\t\t\t\t\t\ttextp = (cell.w||String(cell.v||0));\n\t\t\t\t\t\tct['office:value-type'] = \"float\";\n\t\t\t\t\t\tct['office:value'] = (cell.v||0);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 's': case 'str':\n\t\t\t\t\t\ttextp = cell.v == null ? \"\" : cell.v;\n\t\t\t\t\t\tct['office:value-type'] = \"string\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'd':\n\t\t\t\t\t\ttextp = (cell.w||(parseDate(cell.v).toISOString()));\n\t\t\t\t\t\tct['office:value-type'] = \"date\";\n\t\t\t\t\t\tct['office:date-value'] = (parseDate(cell.v).toISOString());\n\t\t\t\t\t\tct['table:style-name'] = \"ce1\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t//case 'e':\n\t\t\t\t\tdefault: o.push(null_cell_xml); continue;\n\t\t\t\t}\n\t\t\t\tvar text_p = write_text_p(textp);\n\t\t\t\tif(cell.l && cell.l.Target) {\n\t\t\t\t\tvar _tgt = cell.l.Target; _tgt = _tgt.charAt(0) == \"#\" ? \"#\" + csf_to_ods_3D(_tgt.slice(1)) : _tgt;\n\t\t\t\t\ttext_p = writextag('text:a', text_p, {'xlink:href': _tgt});\n\t\t\t\t}\n\t\t\t\to.push(' ' + writextag('table:table-cell', writextag('text:p', text_p, {}), ct) + '\\n');\n\t\t\t}\n\t\t\to.push(' \\n');\n\t\t}\n\t\to.push(' \\n');\n\t\treturn o.join(\"\");\n\t};\n\n\tvar write_automatic_styles_ods = function(o) {\n\t\to.push(' \\n');\n\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\t\to.push(' /\\n');\n\t\to.push(' \\n');\n\t\to.push(' /\\n');\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\n\t\t/* table */\n\t\to.push(' \\n'); // style:master-page-name=\"mp1\">\\n');\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\n\t\t/* table cells, text */\n\t\to.push(' \\n');\n\n\t\t/* page-layout */\n\n\t\to.push(' \\n');\n\t};\n\n\treturn function wcx(wb, opts) {\n\t\tvar o = [XML_HEADER];\n\t\t/* 3.1.3.2 */\n\t\tvar attr = wxt_helper({\n\t\t\t'xmlns:office': \"urn:oasis:names:tc:opendocument:xmlns:office:1.0\",\n\t\t\t'xmlns:table': \"urn:oasis:names:tc:opendocument:xmlns:table:1.0\",\n\t\t\t'xmlns:style': \"urn:oasis:names:tc:opendocument:xmlns:style:1.0\",\n\t\t\t'xmlns:text': \"urn:oasis:names:tc:opendocument:xmlns:text:1.0\",\n\t\t\t'xmlns:draw': \"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0\",\n\t\t\t'xmlns:fo': \"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0\",\n\t\t\t'xmlns:xlink': \"http://www.w3.org/1999/xlink\",\n\t\t\t'xmlns:dc': \"http://purl.org/dc/elements/1.1/\",\n\t\t\t'xmlns:meta': \"urn:oasis:names:tc:opendocument:xmlns:meta:1.0\",\n\t\t\t'xmlns:number': \"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0\",\n\t\t\t'xmlns:presentation': \"urn:oasis:names:tc:opendocument:xmlns:presentation:1.0\",\n\t\t\t'xmlns:svg': \"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0\",\n\t\t\t'xmlns:chart': \"urn:oasis:names:tc:opendocument:xmlns:chart:1.0\",\n\t\t\t'xmlns:dr3d': \"urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0\",\n\t\t\t'xmlns:math': \"http://www.w3.org/1998/Math/MathML\",\n\t\t\t'xmlns:form': \"urn:oasis:names:tc:opendocument:xmlns:form:1.0\",\n\t\t\t'xmlns:script': \"urn:oasis:names:tc:opendocument:xmlns:script:1.0\",\n\t\t\t'xmlns:ooo': \"http://openoffice.org/2004/office\",\n\t\t\t'xmlns:ooow': \"http://openoffice.org/2004/writer\",\n\t\t\t'xmlns:oooc': \"http://openoffice.org/2004/calc\",\n\t\t\t'xmlns:dom': \"http://www.w3.org/2001/xml-events\",\n\t\t\t'xmlns:xforms': \"http://www.w3.org/2002/xforms\",\n\t\t\t'xmlns:xsd': \"http://www.w3.org/2001/XMLSchema\",\n\t\t\t'xmlns:xsi': \"http://www.w3.org/2001/XMLSchema-instance\",\n\t\t\t'xmlns:sheet': \"urn:oasis:names:tc:opendocument:sh33tjs:1.0\",\n\t\t\t'xmlns:rpt': \"http://openoffice.org/2005/report\",\n\t\t\t'xmlns:of': \"urn:oasis:names:tc:opendocument:xmlns:of:1.2\",\n\t\t\t'xmlns:xhtml': \"http://www.w3.org/1999/xhtml\",\n\t\t\t'xmlns:grddl': \"http://www.w3.org/2003/g/data-view#\",\n\t\t\t'xmlns:tableooo': \"http://openoffice.org/2009/table\",\n\t\t\t'xmlns:drawooo': \"http://openoffice.org/2010/draw\",\n\t\t\t'xmlns:calcext': \"urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0\",\n\t\t\t'xmlns:loext': \"urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0\",\n\t\t\t'xmlns:field': \"urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0\",\n\t\t\t'xmlns:formx': \"urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0\",\n\t\t\t'xmlns:css3t': \"http://www.w3.org/TR/css3-text/\",\n\t\t\t'office:version': \"1.2\"\n\t\t});\n\n\t\tvar fods = wxt_helper({\n\t\t\t'xmlns:config': \"urn:oasis:names:tc:opendocument:xmlns:config:1.0\",\n\t\t\t'office:mimetype': \"application/vnd.oasis.opendocument.spreadsheet\"\n\t\t});\n\n\t\tif(opts.bookType == \"fods\") o.push('\\n');\n\t\telse o.push('\\n');\n\t\twrite_automatic_styles_ods(o);\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\t\tfor(var i = 0; i != wb.SheetNames.length; ++i) o.push(write_ws(wb.Sheets[wb.SheetNames[i]], wb, i, opts));\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\t\tif(opts.bookType == \"fods\") o.push('');\n\t\telse o.push('');\n\t\treturn o.join(\"\");\n\t};\n})();\n\nfunction write_ods(wb, opts) {\n\tif(opts.bookType == \"fods\") return write_content_ods(wb, opts);\n\nvar zip = zip_new();\n\tvar f = \"\";\n\n\tvar manifest = [];\n\tvar rdf = [];\n\n\t/* Part 3 Section 3.3 MIME Media Type */\n\tf = \"mimetype\";\n\tzip_add_file(zip, f, \"application/vnd.oasis.opendocument.spreadsheet\");\n\n\t/* Part 1 Section 2.2 Documents */\n\tf = \"content.xml\";\n\tzip_add_file(zip, f, write_content_ods(wb, opts));\n\tmanifest.push([f, \"text/xml\"]);\n\trdf.push([f, \"ContentFile\"]);\n\n\t/* TODO: these are hard-coded styles to satiate excel */\n\tf = \"styles.xml\";\n\tzip_add_file(zip, f, write_styles_ods(wb, opts));\n\tmanifest.push([f, \"text/xml\"]);\n\trdf.push([f, \"StylesFile\"]);\n\n\t/* TODO: this is hard-coded to satiate excel */\n\tf = \"meta.xml\";\n\tzip_add_file(zip, f, write_meta_ods());\n\tmanifest.push([f, \"text/xml\"]);\n\trdf.push([f, \"MetadataFile\"]);\n\n\t/* Part 3 Section 6 Metadata Manifest File */\n\tf = \"manifest.rdf\";\n\tzip_add_file(zip, f, write_rdf(rdf/*, opts*/));\n\tmanifest.push([f, \"application/rdf+xml\"]);\n\n\t/* Part 3 Section 4 Manifest File */\n\tf = \"META-INF/manifest.xml\";\n\tzip_add_file(zip, f, write_manifest(manifest/*, opts*/));\n\n\treturn zip;\n}\n\nfunction write_sheet_index(wb, sheet) {\n\tif(!sheet) return 0;\n\tvar idx = wb.SheetNames.indexOf(sheet);\n\tif(idx == -1) throw new Error(\"Sheet not found: \" + sheet);\n\treturn idx;\n}\n\nfunction write_obj_str(factory) {\n\treturn function write_str(wb, o) {\n\t\tvar idx = write_sheet_index(wb, o.sheet);\n\t\treturn factory.from_sheet(wb.Sheets[wb.SheetNames[idx]], o, wb);\n\t};\n}\n\nvar write_htm_str = write_obj_str(HTML_);\nvar write_csv_str = write_obj_str({from_sheet:sheet_to_csv});\nvar write_slk_str = write_obj_str(typeof SYLK !== \"undefined\" ? SYLK : {});\nvar write_dif_str = write_obj_str(typeof DIF !== \"undefined\" ? DIF : {});\nvar write_prn_str = write_obj_str(typeof PRN !== \"undefined\" ? PRN : {});\nvar write_rtf_str = write_obj_str(typeof RTF !== \"undefined\" ? RTF : {});\nvar write_txt_str = write_obj_str({from_sheet:sheet_to_txt});\nvar write_dbf_buf = write_obj_str(typeof DBF !== \"undefined\" ? DBF : {});\nvar write_eth_str = write_obj_str(typeof ETH !== \"undefined\" ? ETH : {});\n\nfunction fix_opts_func(defaults) {\n\treturn function fix_opts(opts) {\n\t\tfor(var i = 0; i != defaults.length; ++i) {\n\t\t\tvar d = defaults[i];\n\t\t\tif(opts[d[0]] === undefined) opts[d[0]] = d[1];\n\t\t\tif(d[2] === 'n') opts[d[0]] = Number(opts[d[0]]);\n\t\t}\n\t};\n}\n\nvar fix_read_opts = function(opts) {\nfix_opts_func([\n\t['cellNF', false], /* emit cell number format string as .z */\n\t['cellHTML', true], /* emit html string as .h */\n\t['cellFormula', true], /* emit formulae as .f */\n\t['cellStyles', false], /* emits style/theme as .s */\n\t['cellText', true], /* emit formatted text as .w */\n\t['cellDates', false], /* emit date cells with type `d` */\n\n\t['sheetStubs', false], /* emit empty cells */\n\t['sheetRows', 0, 'n'], /* read n rows (0 = read all rows) */\n\n\t['bookDeps', false], /* parse calculation chains */\n\t['bookSheets', false], /* only try to get sheet names (no Sheets) */\n\t['bookProps', false], /* only try to get properties (no Sheets) */\n\t['bookFiles', false], /* include raw file structure (keys, files, cfb) */\n\t['bookVBA', false], /* include vba raw data (vbaraw) */\n\n\t['password',''], /* password */\n\t['WTF', false] /* WTF mode (throws errors) */\n])(opts);\n};\n\nvar fix_write_opts = fix_opts_func([\n\t['cellDates', false], /* write date cells with type `d` */\n\n\t['bookSST', false], /* Generate Shared String Table */\n\n\t['bookType', 'xlsx'], /* Type of workbook (xlsx/m/b) */\n\n\t['compression', false], /* Use file compression */\n\n\t['WTF', false] /* WTF mode (throws errors) */\n]);\nfunction get_sheet_type(n) {\n\tif(RELS.WS.indexOf(n) > -1) return \"sheet\";\n\tif(RELS.CS && n == RELS.CS) return \"chart\";\n\tif(RELS.DS && n == RELS.DS) return \"dialog\";\n\tif(RELS.MS && n == RELS.MS) return \"macro\";\n\treturn (n && n.length) ? n : \"sheet\";\n}\nfunction safe_parse_wbrels(wbrels, sheets) {\n\tif(!wbrels) return 0;\n\ttry {\n\t\twbrels = sheets.map(function pwbr(w) { if(!w.id) w.id = w.strRelID; return [w.name, wbrels['!id'][w.id].Target, get_sheet_type(wbrels['!id'][w.id].Type)]; });\n\t} catch(e) { return null; }\n\treturn !wbrels || wbrels.length === 0 ? null : wbrels;\n}\n\nfunction safe_parse_sheet(zip, path, relsPath, sheet, idx, sheetRels, sheets, stype, opts, wb, themes, styles) {\n\ttry {\n\t\tsheetRels[sheet]=parse_rels(getzipstr(zip, relsPath, true), path);\n\t\tvar data = getzipdata(zip, path);\n\t\tvar _ws;\n\t\tswitch(stype) {\n\t\t\tcase 'sheet': _ws = parse_ws(data, path, idx, opts, sheetRels[sheet], wb, themes, styles); break;\n\t\t\tcase 'chart': _ws = parse_cs(data, path, idx, opts, sheetRels[sheet], wb, themes, styles);\n\t\t\t\tif(!_ws || !_ws['!drawel']) break;\n\t\t\t\tvar dfile = resolve_path(_ws['!drawel'].Target, path);\n\t\t\t\tvar drelsp = get_rels_path(dfile);\n\t\t\t\tvar draw = parse_drawing(getzipstr(zip, dfile, true), parse_rels(getzipstr(zip, drelsp, true), dfile));\n\t\t\t\tvar chartp = resolve_path(draw, dfile);\n\t\t\t\tvar crelsp = get_rels_path(chartp);\n\t\t\t\t_ws = parse_chart(getzipstr(zip, chartp, true), chartp, opts, parse_rels(getzipstr(zip, crelsp, true), chartp), wb, _ws);\n\t\t\t\tbreak;\n\t\t\tcase 'macro': _ws = parse_ms(data, path, idx, opts, sheetRels[sheet], wb, themes, styles); break;\n\t\t\tcase 'dialog': _ws = parse_ds(data, path, idx, opts, sheetRels[sheet], wb, themes, styles); break;\n\t\t\tdefault: throw new Error(\"Unrecognized sheet type \" + stype);\n\t\t}\n\t\tsheets[sheet] = _ws;\n\n\t\t/* scan rels for comments */\n\t\tvar comments = [];\n\t\tif(sheetRels && sheetRels[sheet]) keys(sheetRels[sheet]).forEach(function(n) {\n\t\t\tif(sheetRels[sheet][n].Type == RELS.CMNT) {\n\t\t\t\tvar dfile = resolve_path(sheetRels[sheet][n].Target, path);\n\t\t\t\tcomments = parse_cmnt(getzipdata(zip, dfile, true), dfile, opts);\n\t\t\t\tif(!comments || !comments.length) return;\n\t\t\t\tsheet_insert_comments(_ws, comments);\n\t\t\t}\n\t\t});\n\t} catch(e) { if(opts.WTF) throw e; }\n}\n\nfunction strip_front_slash(x) { return x.charAt(0) == '/' ? x.slice(1) : x; }\n\nfunction parse_zip(zip, opts) {\n\tmake_ssf(SSF);\n\topts = opts || {};\n\tfix_read_opts(opts);\n\n\t/* OpenDocument Part 3 Section 2.2.1 OpenDocument Package */\n\tif(safegetzipfile(zip, 'META-INF/manifest.xml')) return parse_ods(zip, opts);\n\t/* UOC */\n\tif(safegetzipfile(zip, 'objectdata.xml')) return parse_ods(zip, opts);\n\t/* Numbers */\n\tif(safegetzipfile(zip, 'Index/Document.iwa')) throw new Error('Unsupported NUMBERS file');\n\n\tvar entries = zipentries(zip);\n\tvar dir = parse_ct((getzipstr(zip, '[Content_Types].xml')));\n\tvar xlsb = false;\n\tvar sheets, binname;\n\tif(dir.workbooks.length === 0) {\n\t\tbinname = \"xl/workbook.xml\";\n\t\tif(getzipdata(zip,binname, true)) dir.workbooks.push(binname);\n\t}\n\tif(dir.workbooks.length === 0) {\n\t\tbinname = \"xl/workbook.bin\";\n\t\tif(!getzipdata(zip,binname,true)) throw new Error(\"Could not find workbook\");\n\t\tdir.workbooks.push(binname);\n\t\txlsb = true;\n\t}\n\tif(dir.workbooks[0].slice(-3) == \"bin\") xlsb = true;\n\n\tvar themes = ({});\n\tvar styles = ({});\n\tif(!opts.bookSheets && !opts.bookProps) {\n\t\tstrs = [];\n\t\tif(dir.sst) try { strs=parse_sst(getzipdata(zip, strip_front_slash(dir.sst)), dir.sst, opts); } catch(e) { if(opts.WTF) throw e; }\n\n\t\tif(opts.cellStyles && dir.themes.length) themes = parse_theme(getzipstr(zip, dir.themes[0].replace(/^\\//,''), true)||\"\",dir.themes[0], opts);\n\n\t\tif(dir.style) styles = parse_sty(getzipdata(zip, strip_front_slash(dir.style)), dir.style, themes, opts);\n\t}\n\n\t/*var externbooks = */dir.links.map(function(link) {\n\t\ttry {\n\t\t\tvar rels = parse_rels(getzipstr(zip, get_rels_path(strip_front_slash(link))), link);\n\t\t\treturn parse_xlink(getzipdata(zip, strip_front_slash(link)), rels, link, opts);\n\t\t} catch(e) {}\n\t});\n\n\tvar wb = parse_wb(getzipdata(zip, strip_front_slash(dir.workbooks[0])), dir.workbooks[0], opts);\n\n\tvar props = {}, propdata = \"\";\n\n\tif(dir.coreprops.length) {\n\t\tpropdata = getzipdata(zip, strip_front_slash(dir.coreprops[0]), true);\n\t\tif(propdata) props = parse_core_props(propdata);\n\t\tif(dir.extprops.length !== 0) {\n\t\t\tpropdata = getzipdata(zip, strip_front_slash(dir.extprops[0]), true);\n\t\t\tif(propdata) parse_ext_props(propdata, props, opts);\n\t\t}\n\t}\n\n\tvar custprops = {};\n\tif(!opts.bookSheets || opts.bookProps) {\n\t\tif (dir.custprops.length !== 0) {\n\t\t\tpropdata = getzipstr(zip, strip_front_slash(dir.custprops[0]), true);\n\t\t\tif(propdata) custprops = parse_cust_props(propdata, opts);\n\t\t}\n\t}\n\n\tvar out = ({});\n\tif(opts.bookSheets || opts.bookProps) {\n\t\tif(wb.Sheets) sheets = wb.Sheets.map(function pluck(x){ return x.name; });\n\t\telse if(props.Worksheets && props.SheetNames.length > 0) sheets=props.SheetNames;\n\t\tif(opts.bookProps) { out.Props = props; out.Custprops = custprops; }\n\t\tif(opts.bookSheets && typeof sheets !== 'undefined') out.SheetNames = sheets;\n\t\tif(opts.bookSheets ? out.SheetNames : opts.bookProps) return out;\n\t}\n\tsheets = {};\n\n\tvar deps = {};\n\tif(opts.bookDeps && dir.calcchain) deps=parse_cc(getzipdata(zip, strip_front_slash(dir.calcchain)),dir.calcchain,opts);\n\n\tvar i=0;\n\tvar sheetRels = ({});\n\tvar path, relsPath;\n\n\t{\n\t\tvar wbsheets = wb.Sheets;\n\t\tprops.Worksheets = wbsheets.length;\n\t\tprops.SheetNames = [];\n\t\tfor(var j = 0; j != wbsheets.length; ++j) {\n\t\t\tprops.SheetNames[j] = wbsheets[j].name;\n\t\t}\n\t}\n\n\tvar wbext = xlsb ? \"bin\" : \"xml\";\n\tvar wbrelsi = dir.workbooks[0].lastIndexOf(\"/\");\n\tvar wbrelsfile = (dir.workbooks[0].slice(0, wbrelsi+1) + \"_rels/\" + dir.workbooks[0].slice(wbrelsi+1) + \".rels\").replace(/^\\//,\"\");\n\tif(!safegetzipfile(zip, wbrelsfile)) wbrelsfile = 'xl/_rels/workbook.' + wbext + '.rels';\n\tvar wbrels = parse_rels(getzipstr(zip, wbrelsfile, true), wbrelsfile);\n\tif(wbrels) wbrels = safe_parse_wbrels(wbrels, wb.Sheets);\n\n\t/* Numbers iOS hack */\n\tvar nmode = (getzipdata(zip,\"xl/worksheets/sheet.xml\",true))?1:0;\n\twsloop: for(i = 0; i != props.Worksheets; ++i) {\n\t\tvar stype = \"sheet\";\n\t\tif(wbrels && wbrels[i]) {\n\t\t\tpath = 'xl/' + (wbrels[i][1]).replace(/[\\/]?xl\\//, \"\");\n\t\t\tif(!safegetzipfile(zip, path)) path = wbrels[i][1];\n\t\t\tif(!safegetzipfile(zip, path)) path = wbrelsfile.replace(/_rels\\/.*$/,\"\") + wbrels[i][1];\n\t\t\tstype = wbrels[i][2];\n\t\t} else {\n\t\t\tpath = 'xl/worksheets/sheet'+(i+1-nmode)+\".\" + wbext;\n\t\t\tpath = path.replace(/sheet0\\./,\"sheet.\");\n\t\t}\n\t\trelsPath = path.replace(/^(.*)(\\/)([^\\/]*)$/, \"$1/_rels/$3.rels\");\n\t\tif(opts && opts.sheets != null) switch(typeof opts.sheets) {\n\t\t\tcase \"number\": if(i != opts.sheets) continue wsloop; break;\n\t\t\tcase \"string\": if(props.SheetNames[i].toLowerCase() != opts.sheets.toLowerCase()) continue wsloop; break;\n\t\t\tdefault: if(Array.isArray && Array.isArray(opts.sheets)) {\n\t\t\t\tvar snjseen = false;\n\t\t\t\tfor(var snj = 0; snj != opts.sheets.length; ++snj) {\n\t\t\t\t\tif(typeof opts.sheets[snj] == \"number\" && opts.sheets[snj] == i) snjseen=1;\n\t\t\t\t\tif(typeof opts.sheets[snj] == \"string\" && opts.sheets[snj].toLowerCase() == props.SheetNames[i].toLowerCase()) snjseen = 1;\n\t\t\t\t}\n\t\t\t\tif(!snjseen) continue wsloop;\n\t\t\t}\n\t\t}\n\t\tsafe_parse_sheet(zip, path, relsPath, props.SheetNames[i], i, sheetRels, sheets, stype, opts, wb, themes, styles);\n\t}\n\n\tout = ({\n\t\tDirectory: dir,\n\t\tWorkbook: wb,\n\t\tProps: props,\n\t\tCustprops: custprops,\n\t\tDeps: deps,\n\t\tSheets: sheets,\n\t\tSheetNames: props.SheetNames,\n\t\tStrings: strs,\n\t\tStyles: styles,\n\t\tThemes: themes,\n\t\tSSF: SSF.get_table()\n\t});\n\tif(opts && opts.bookFiles) {\n\t\tout.keys = entries;\n\t\tout.files = zip.files;\n\t}\n\tif(opts && opts.bookVBA) {\n\t\tif(dir.vba.length > 0) out.vbaraw = getzipdata(zip,strip_front_slash(dir.vba[0]),true);\n\t\telse if(dir.defaults && dir.defaults.bin === CT_VBA) out.vbaraw = getzipdata(zip, 'xl/vbaProject.bin',true);\n\t}\n\treturn out;\n}\n\n/* [MS-OFFCRYPTO] 2.1.1 */\nfunction parse_xlsxcfb(cfb, _opts) {\n\tvar opts = _opts || {};\n\tvar f = 'Workbook', data = CFB.find(cfb, f);\n\ttry {\n\tf = '/!DataSpaces/Version';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\t/*var version = */parse_DataSpaceVersionInfo(data.content);\n\n\t/* 2.3.4.1 */\n\tf = '/!DataSpaces/DataSpaceMap';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\tvar dsm = parse_DataSpaceMap(data.content);\n\tif(dsm.length !== 1 || dsm[0].comps.length !== 1 || dsm[0].comps[0].t !== 0 || dsm[0].name !== \"StrongEncryptionDataSpace\" || dsm[0].comps[0].v !== \"EncryptedPackage\")\n\t\tthrow new Error(\"ECMA-376 Encrypted file bad \" + f);\n\n\t/* 2.3.4.2 */\n\tf = '/!DataSpaces/DataSpaceInfo/StrongEncryptionDataSpace';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\tvar seds = parse_DataSpaceDefinition(data.content);\n\tif(seds.length != 1 || seds[0] != \"StrongEncryptionTransform\")\n\t\tthrow new Error(\"ECMA-376 Encrypted file bad \" + f);\n\n\t/* 2.3.4.3 */\n\tf = '/!DataSpaces/TransformInfo/StrongEncryptionTransform/!Primary';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\t/*var hdr = */parse_Primary(data.content);\n\t} catch(e) {}\n\n\tf = '/EncryptionInfo';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\tvar einfo = parse_EncryptionInfo(data.content);\n\n\t/* 2.3.4.4 */\n\tf = '/EncryptedPackage';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\n/*global decrypt_agile */\nif(einfo[0] == 0x04 && typeof decrypt_agile !== 'undefined') return decrypt_agile(einfo[1], data.content, opts.password || \"\", opts);\n/*global decrypt_std76 */\nif(einfo[0] == 0x02 && typeof decrypt_std76 !== 'undefined') return decrypt_std76(einfo[1], data.content, opts.password || \"\", opts);\n\tthrow new Error(\"File is password-protected\");\n}\n\nfunction write_zip(wb, opts) {\n\t_shapeid = 1024;\n\tif(opts.bookType == \"ods\") return write_ods(wb, opts);\n\tif(wb && !wb.SSF) {\n\t\twb.SSF = SSF.get_table();\n\t}\n\tif(wb && wb.SSF) {\n\t\tmake_ssf(SSF); SSF.load_table(wb.SSF);\n\t\t// $FlowIgnore\n\t\topts.revssf = evert_num(wb.SSF); opts.revssf[wb.SSF[65535]] = 0;\n\t\topts.ssf = wb.SSF;\n\t}\n\topts.rels = {}; opts.wbrels = {};\n\topts.Strings = []; opts.Strings.Count = 0; opts.Strings.Unique = 0;\n\tif(browser_has_Map) opts.revStrings = new Map();\n\telse { opts.revStrings = {}; opts.revStrings.foo = []; delete opts.revStrings.foo; }\n\tvar wbext = opts.bookType == \"xlsb\" ? \"bin\" : \"xml\";\n\tvar vbafmt = VBAFMTS.indexOf(opts.bookType) > -1;\n\tvar ct = new_ct();\n\tfix_write_opts(opts = opts || {});\nvar zip = zip_new();\n\tvar f = \"\", rId = 0;\n\n\topts.cellXfs = [];\n\tget_cell_style(opts.cellXfs, {}, {revssf:{\"General\":0}});\n\n\tif(!wb.Props) wb.Props = {};\n\n\tf = \"docProps/core.xml\";\n\tzip_add_file(zip, f, write_core_props(wb.Props, opts));\n\tct.coreprops.push(f);\n\tadd_rels(opts.rels, 2, f, RELS.CORE_PROPS);\n\nf = \"docProps/app.xml\";\n\tif(wb.Props && wb.Props.SheetNames){/* empty */}\n\telse if(!wb.Workbook || !wb.Workbook.Sheets) wb.Props.SheetNames = wb.SheetNames;\n\telse {\n\t\tvar _sn = [];\n\t\tfor(var _i = 0; _i < wb.SheetNames.length; ++_i)\n\t\t\tif((wb.Workbook.Sheets[_i]||{}).Hidden != 2) _sn.push(wb.SheetNames[_i]);\n\t\twb.Props.SheetNames = _sn;\n\t}\n\twb.Props.Worksheets = wb.Props.SheetNames.length;\n\tzip_add_file(zip, f, write_ext_props(wb.Props, opts));\n\tct.extprops.push(f);\n\tadd_rels(opts.rels, 3, f, RELS.EXT_PROPS);\n\n\tif(wb.Custprops !== wb.Props && keys(wb.Custprops||{}).length > 0) {\n\t\tf = \"docProps/custom.xml\";\n\t\tzip_add_file(zip, f, write_cust_props(wb.Custprops, opts));\n\t\tct.custprops.push(f);\n\t\tadd_rels(opts.rels, 4, f, RELS.CUST_PROPS);\n\t}\n\n\tfor(rId=1;rId <= wb.SheetNames.length; ++rId) {\n\t\tvar wsrels = {'!id':{}};\n\t\tvar ws = wb.Sheets[wb.SheetNames[rId-1]];\n\t\tvar _type = (ws || {})[\"!type\"] || \"sheet\";\n\t\tswitch(_type) {\n\t\tcase \"chart\":\n\t\t\t/* falls through */\n\t\tdefault:\n\t\t\tf = \"xl/worksheets/sheet\" + rId + \".\" + wbext;\n\t\t\tzip_add_file(zip, f, write_ws(rId-1, f, opts, wb, wsrels));\n\t\t\tct.sheets.push(f);\n\t\t\tadd_rels(opts.wbrels, -1, \"worksheets/sheet\" + rId + \".\" + wbext, RELS.WS[0]);\n\t\t}\n\n\t\tif(ws) {\n\t\t\tvar comments = ws['!comments'];\n\t\t\tvar need_vml = false;\n\t\t\tif(comments && comments.length > 0) {\n\t\t\t\tvar cf = \"xl/comments\" + rId + \".\" + wbext;\n\t\t\t\tzip_add_file(zip, cf, write_cmnt(comments, cf, opts));\n\t\t\t\tct.comments.push(cf);\n\t\t\t\tadd_rels(wsrels, -1, \"../comments\" + rId + \".\" + wbext, RELS.CMNT);\n\t\t\t\tneed_vml = true;\n\t\t\t}\n\t\t\tif(ws['!legacy']) {\n\t\t\t\tif(need_vml) zip_add_file(zip, \"xl/drawings/vmlDrawing\" + (rId) + \".vml\", write_comments_vml(rId, ws['!comments']));\n\t\t\t}\n\t\t\tdelete ws['!comments'];\n\t\t\tdelete ws['!legacy'];\n\t\t}\n\n\t\tif(wsrels['!id'].rId1) zip_add_file(zip, get_rels_path(f), write_rels(wsrels));\n\t}\n\n\tif(opts.Strings != null && opts.Strings.length > 0) {\n\t\tf = \"xl/sharedStrings.\" + wbext;\n\t\tzip_add_file(zip, f, write_sst(opts.Strings, f, opts));\n\t\tct.strs.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"sharedStrings.\" + wbext, RELS.SST);\n\t}\n\n\tf = \"xl/workbook.\" + wbext;\n\tzip_add_file(zip, f, write_wb(wb, f, opts));\n\tct.workbooks.push(f);\n\tadd_rels(opts.rels, 1, f, RELS.WB);\n\n\t/* TODO: something more intelligent with themes */\n\n\tf = \"xl/theme/theme1.xml\";\n\tzip_add_file(zip, f, write_theme(wb.Themes, opts));\n\tct.themes.push(f);\n\tadd_rels(opts.wbrels, -1, \"theme/theme1.xml\", RELS.THEME);\n\n\t/* TODO: something more intelligent with styles */\n\n\tf = \"xl/styles.\" + wbext;\n\tzip_add_file(zip, f, write_sty(wb, f, opts));\n\tct.styles.push(f);\n\tadd_rels(opts.wbrels, -1, \"styles.\" + wbext, RELS.STY);\n\n\tif(wb.vbaraw && vbafmt) {\n\t\tf = \"xl/vbaProject.bin\";\n\t\tzip_add_file(zip, f, wb.vbaraw);\n\t\tct.vba.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"vbaProject.bin\", RELS.VBA);\n\t}\n\n\tzip_add_file(zip, \"[Content_Types].xml\", write_ct(ct, opts));\n\tzip_add_file(zip, '_rels/.rels', write_rels(opts.rels));\n\tzip_add_file(zip, 'xl/_rels/workbook.' + wbext + '.rels', write_rels(opts.wbrels));\n\n\tdelete opts.revssf; delete opts.ssf;\n\treturn zip;\n}\nfunction firstbyte(f,o) {\n\tvar x = \"\";\n\tswitch((o||{}).type || \"base64\") {\n\t\tcase 'buffer': return [f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7]];\n\t\tcase 'base64': x = Base64.decode(f.slice(0,12)); break;\n\t\tcase 'binary': x = f; break;\n\t\tcase 'array': return [f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7]];\n\t\tdefault: throw new Error(\"Unrecognized type \" + (o && o.type || \"undefined\"));\n\t}\n\treturn [x.charCodeAt(0), x.charCodeAt(1), x.charCodeAt(2), x.charCodeAt(3), x.charCodeAt(4), x.charCodeAt(5), x.charCodeAt(6), x.charCodeAt(7)];\n}\n\nfunction read_cfb(cfb, opts) {\n\tif(CFB.find(cfb, \"EncryptedPackage\")) return parse_xlsxcfb(cfb, opts);\n\treturn parse_xlscfb(cfb, opts);\n}\n\nfunction read_zip(data, opts) {\nvar zip, d = data;\n\tvar o = opts||{};\n\tif(!o.type) o.type = (has_buf && Buffer.isBuffer(data)) ? \"buffer\" : \"base64\";\n\tzip = zip_read(d, o);\n\treturn parse_zip(zip, o);\n}\n\nfunction read_plaintext(data, o) {\n\tvar i = 0;\n\tmain: while(i < data.length) switch(data.charCodeAt(i)) {\n\t\tcase 0x0A: case 0x0D: case 0x20: ++i; break;\n\t\tcase 0x3C: return parse_xlml(data.slice(i),o);\n\t\tdefault: break main;\n\t}\n\treturn PRN.to_workbook(data, o);\n}\n\nfunction read_plaintext_raw(data, o) {\n\tvar str = \"\", bytes = firstbyte(data, o);\n\tswitch(o.type) {\n\t\tcase 'base64': str = Base64.decode(data); break;\n\t\tcase 'binary': str = data; break;\n\t\tcase 'buffer': str = data.toString('binary'); break;\n\t\tcase 'array': str = cc2str(data); break;\n\t\tdefault: throw new Error(\"Unrecognized type \" + o.type);\n\t}\n\tif(bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF) str = utf8read(str);\n\treturn read_plaintext(str, o);\n}\n\nfunction read_utf16(data, o) {\n\tvar d = data;\n\tif(o.type == 'base64') d = Base64.decode(d);\n\td = cptable.utils.decode(1200, d.slice(2), 'str');\n\to.type = \"binary\";\n\treturn read_plaintext(d, o);\n}\n\nfunction bstrify(data) {\n\treturn !data.match(/[^\\x00-\\x7F]/) ? data : utf8write(data);\n}\n\nfunction read_prn(data, d, o, str) {\n\tif(str) { o.type = \"string\"; return PRN.to_workbook(data, o); }\n\treturn PRN.to_workbook(d, o);\n}\n\nfunction readSync(data, opts) {\n\treset_cp();\n\tif(typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) return readSync(new Uint8Array(data), opts);\n\tvar d = data, n = [0,0,0,0], str = false;\n\tvar o = opts||{};\n\tif(o.cellStyles) { o.cellNF = true; o.sheetStubs = true; }\n\t_ssfopts = {};\n\tif(o.dateNF) _ssfopts.dateNF = o.dateNF;\n\tif(!o.type) o.type = (has_buf && Buffer.isBuffer(data)) ? \"buffer\" : \"base64\";\n\tif(o.type == \"file\") { o.type = has_buf ? \"buffer\" : \"binary\"; d = read_binary(data); }\n\tif(o.type == \"string\") { str = true; o.type = \"binary\"; o.codepage = 65001; d = bstrify(data); }\n\tif(o.type == 'array' && typeof Uint8Array !== 'undefined' && data instanceof Uint8Array && typeof ArrayBuffer !== 'undefined') {\n\t\t// $FlowIgnore\n\t\tvar ab=new ArrayBuffer(3), vu=new Uint8Array(ab); vu.foo=\"bar\";\n\t\t// $FlowIgnore\n\t\tif(!vu.foo) {o=dup(o); o.type='array'; return readSync(ab2a(d), o);}\n\t}\n\tswitch((n = firstbyte(d, o))[0]) {\n\t\tcase 0xD0: if(n[1] === 0xCF && n[2] === 0x11 && n[3] === 0xE0 && n[4] === 0xA1 && n[5] === 0xB1 && n[6] === 0x1A && n[7] === 0xE1) return read_cfb(CFB.read(d, o), o); break;\n\t\tcase 0x09: if(n[1] <= 0x04) return parse_xlscfb(d, o); break;\n\t\tcase 0x3C: return parse_xlml(d, o);\n\t\tcase 0x49: if(n[1] === 0x44) return read_wb_ID(d, o); break;\n\t\tcase 0x54: if(n[1] === 0x41 && n[2] === 0x42 && n[3] === 0x4C) return DIF.to_workbook(d, o); break;\n\t\tcase 0x50: return (n[1] === 0x4B && n[2] < 0x09 && n[3] < 0x09) ? read_zip(d, o) : read_prn(data, d, o, str);\n\t\tcase 0xEF: return n[3] === 0x3C ? parse_xlml(d, o) : read_prn(data, d, o, str);\n\t\tcase 0xFF: if(n[1] === 0xFE) { return read_utf16(d, o); } break;\n\t\tcase 0x00: if(n[1] === 0x00 && n[2] >= 0x02 && n[3] === 0x00) return WK_.to_workbook(d, o); break;\n\t\tcase 0x03: case 0x83: case 0x8B: case 0x8C: return DBF.to_workbook(d, o);\n\t\tcase 0x7B: if(n[1] === 0x5C && n[2] === 0x72 && n[3] === 0x74) return RTF.to_workbook(d, o); break;\n\t\tcase 0x0A: case 0x0D: case 0x20: return read_plaintext_raw(d, o);\n\t}\n\tif(DBF.versions.indexOf(n[0]) > -1 && n[2] <= 12 && n[3] <= 31) return DBF.to_workbook(d, o);\n\treturn read_prn(data, d, o, str);\n}\n\nfunction readFileSync(filename, opts) {\n\tvar o = opts||{}; o.type = 'file';\n\treturn readSync(filename, o);\n}\nfunction write_cfb_ctr(cfb, o) {\n\tswitch(o.type) {\n\t\tcase \"base64\": case \"binary\": break;\n\t\tcase \"buffer\": case \"array\": o.type = \"\"; break;\n\t\tcase \"file\": return write_dl(o.file, CFB.write(cfb, {type:has_buf ? 'buffer' : \"\"}));\n\t\tcase \"string\": throw new Error(\"'string' output type invalid for '\" + o.bookType + \"' files\");\n\t\tdefault: throw new Error(\"Unrecognized type \" + o.type);\n\t}\n\treturn CFB.write(cfb, o);\n}\n\nfunction write_zip_type(wb, opts) {\n\tvar o = opts||{};\n\tvar z = write_zip(wb, o);\n\tvar oopts = {};\n\tif(o.compression) oopts.compression = 'DEFLATE';\n\tif(o.password) oopts.type = has_buf ? \"nodebuffer\" : \"string\";\n\telse switch(o.type) {\n\t\tcase \"base64\": oopts.type = \"base64\"; break;\n\t\tcase \"binary\": oopts.type = \"string\"; break;\n\t\tcase \"string\": throw new Error(\"'string' output type invalid for '\" + o.bookType + \"' files\");\n\t\tcase \"buffer\":\n\t\tcase \"file\": oopts.type = has_buf ? \"nodebuffer\" : \"string\"; break;\n\t\tdefault: throw new Error(\"Unrecognized type \" + o.type);\n\t}\n\tvar out = z.FullPaths ? CFB.write(z, {fileType:\"zip\", type: {\"nodebuffer\": \"buffer\", \"string\": \"binary\"}[oopts.type] || oopts.type}) : z.generate(oopts);\n/*jshint -W083 */\n\tif(o.password && typeof encrypt_agile !== 'undefined') return write_cfb_ctr(encrypt_agile(out, o.password), o); // eslint-disable-line no-undef\n/*jshint +W083 */\n\tif(o.type === \"file\") return write_dl(o.file, out);\n\treturn o.type == \"string\" ? utf8read(out) : out;\n}\n\nfunction write_cfb_type(wb, opts) {\n\tvar o = opts||{};\n\tvar cfb = write_xlscfb(wb, o);\n\treturn write_cfb_ctr(cfb, o);\n}\n\nfunction write_string_type(out, opts, bom) {\n\tif(!bom) bom = \"\";\n\tvar o = bom + out;\n\tswitch(opts.type) {\n\t\tcase \"base64\": return Base64.encode(utf8write(o));\n\t\tcase \"binary\": return utf8write(o);\n\t\tcase \"string\": return out;\n\t\tcase \"file\": return write_dl(opts.file, o, 'utf8');\n\t\tcase \"buffer\": {\n\t\t\tif(has_buf) return Buffer_from(o, 'utf8');\n\t\t\telse return write_string_type(o, {type:'binary'}).split(\"\").map(function(c) { return c.charCodeAt(0); });\n\t\t}\n\t}\n\tthrow new Error(\"Unrecognized type \" + opts.type);\n}\n\nfunction write_stxt_type(out, opts) {\n\tswitch(opts.type) {\n\t\tcase \"base64\": return Base64.encode(out);\n\t\tcase \"binary\": return out;\n\t\tcase \"string\": return out; /* override in sheet_to_txt */\n\t\tcase \"file\": return write_dl(opts.file, out, 'binary');\n\t\tcase \"buffer\": {\n\t\t\tif(has_buf) return Buffer_from(out, 'binary');\n\t\t\telse return out.split(\"\").map(function(c) { return c.charCodeAt(0); });\n\t\t}\n\t}\n\tthrow new Error(\"Unrecognized type \" + opts.type);\n}\n\n/* TODO: test consistency */\nfunction write_binary_type(out, opts) {\n\tswitch(opts.type) {\n\t\tcase \"string\":\n\t\tcase \"base64\":\n\t\tcase \"binary\":\n\t\t\tvar bstr = \"\";\n\t\t\t// $FlowIgnore\n\t\t\tfor(var i = 0; i < out.length; ++i) bstr += String.fromCharCode(out[i]);\n\t\t\treturn opts.type == 'base64' ? Base64.encode(bstr) : opts.type == 'string' ? utf8read(bstr) : bstr;\n\t\tcase \"file\": return write_dl(opts.file, out);\n\t\tcase \"buffer\": return out;\n\t\tdefault: throw new Error(\"Unrecognized type \" + opts.type);\n\t}\n}\n\nfunction writeSync(wb, opts) {\n\treset_cp();\n\tcheck_wb(wb);\n\tvar o = opts||{};\n\tif(o.cellStyles) { o.cellNF = true; o.sheetStubs = true; }\n\tif(o.type == \"array\") { o.type = \"binary\"; var out = (writeSync(wb, o)); o.type = \"array\"; return s2ab(out); }\n\tswitch(o.bookType || 'xlsb') {\n\t\tcase 'xml':\n\t\tcase 'xlml': return write_string_type(write_xlml(wb, o), o);\n\t\tcase 'slk':\n\t\tcase 'sylk': return write_string_type(write_slk_str(wb, o), o);\n\t\tcase 'htm':\n\t\tcase 'html': return write_string_type(write_htm_str(wb, o), o);\n\t\tcase 'txt': return write_stxt_type(write_txt_str(wb, o), o);\n\t\tcase 'csv': return write_string_type(write_csv_str(wb, o), o, \"\\ufeff\");\n\t\tcase 'dif': return write_string_type(write_dif_str(wb, o), o);\n\t\tcase 'dbf': return write_binary_type(write_dbf_buf(wb, o), o);\n\t\tcase 'prn': return write_string_type(write_prn_str(wb, o), o);\n\t\tcase 'rtf': return write_string_type(write_rtf_str(wb, o), o);\n\t\tcase 'eth': return write_string_type(write_eth_str(wb, o), o);\n\t\tcase 'fods': return write_string_type(write_ods(wb, o), o);\n\t\tcase 'biff2': if(!o.biff) o.biff = 2; /* falls through */\n\t\tcase 'biff3': if(!o.biff) o.biff = 3; /* falls through */\n\t\tcase 'biff4': if(!o.biff) o.biff = 4; return write_binary_type(write_biff_buf(wb, o), o);\n\t\tcase 'biff5': if(!o.biff) o.biff = 5; /* falls through */\n\t\tcase 'biff8':\n\t\tcase 'xla':\n\t\tcase 'xls': if(!o.biff) o.biff = 8; return write_cfb_type(wb, o);\n\t\tcase 'xlsx':\n\t\tcase 'xlsm':\n\t\tcase 'xlam':\n\t\tcase 'xlsb':\n\t\tcase 'ods': return write_zip_type(wb, o);\n\t\tdefault: throw new Error (\"Unrecognized bookType |\" + o.bookType + \"|\");\n\t}\n}\n\nfunction resolve_book_type(o) {\n\tif(o.bookType) return;\n\tvar _BT = {\n\t\t\"xls\": \"biff8\",\n\t\t\"htm\": \"html\",\n\t\t\"slk\": \"sylk\",\n\t\t\"socialcalc\": \"eth\",\n\t\t\"Sh33tJS\": \"WTF\"\n\t};\n\tvar ext = o.file.slice(o.file.lastIndexOf(\".\")).toLowerCase();\n\tif(ext.match(/^\\.[a-z]+$/)) o.bookType = ext.slice(1);\n\to.bookType = _BT[o.bookType] || o.bookType;\n}\n\nfunction writeFileSync(wb, filename, opts) {\n\tvar o = opts||{}; o.type = 'file';\n\to.file = filename;\n\tresolve_book_type(o);\n\treturn writeSync(wb, o);\n}\n\nfunction writeFileAsync(filename, wb, opts, cb) {\n\tvar o = opts||{}; o.type = 'file';\n\to.file = filename;\n\tresolve_book_type(o);\n\to.type = 'buffer';\n\tvar _cb = cb; if(!(_cb instanceof Function)) _cb = (opts);\n\treturn _fs.writeFile(filename, writeSync(wb, o), _cb);\n}\nfunction make_json_row(sheet, r, R, cols, header, hdr, dense, o) {\n\tvar rr = encode_row(R);\n\tvar defval = o.defval, raw = o.raw || !Object.prototype.hasOwnProperty.call(o, \"raw\");\n\tvar isempty = true;\n\tvar row = (header === 1) ? [] : {};\n\tif(header !== 1) {\n\t\tif(Object.defineProperty) try { Object.defineProperty(row, '__rowNum__', {value:R, enumerable:false}); } catch(e) { row.__rowNum__ = R; }\n\t\telse row.__rowNum__ = R;\n\t}\n\tif(!dense || sheet[R]) for (var C = r.s.c; C <= r.e.c; ++C) {\n\t\tvar val = dense ? sheet[R][C] : sheet[cols[C] + rr];\n\t\tif(val === undefined || val.t === undefined) {\n\t\t\tif(defval === undefined) continue;\n\t\t\tif(hdr[C] != null) { row[hdr[C]] = defval; }\n\t\t\tcontinue;\n\t\t}\n\t\tvar v = val.v;\n\t\tswitch(val.t){\n\t\t\tcase 'z': if(v == null) break; continue;\n\t\t\tcase 'e': v = void 0; break;\n\t\t\tcase 's': case 'd': case 'b': case 'n': break;\n\t\t\tdefault: throw new Error('unrecognized type ' + val.t);\n\t\t}\n\t\tif(hdr[C] != null) {\n\t\t\tif(v == null) {\n\t\t\t\tif(defval !== undefined) row[hdr[C]] = defval;\n\t\t\t\telse if(raw && v === null) row[hdr[C]] = null;\n\t\t\t\telse continue;\n\t\t\t} else {\n\t\t\t\trow[hdr[C]] = raw || (o.rawNumbers && val.t == \"n\") ? v : format_cell(val,v,o);\n\t\t\t}\n\t\t\tif(v != null) isempty = false;\n\t\t}\n\t}\n\treturn { row: row, isempty: isempty };\n}\n\n\nfunction sheet_to_json(sheet, opts) {\n\tif(sheet == null || sheet[\"!ref\"] == null) return [];\n\tvar val = {t:'n',v:0}, header = 0, offset = 1, hdr = [], v=0, vv=\"\";\n\tvar r = {s:{r:0,c:0},e:{r:0,c:0}};\n\tvar o = opts || {};\n\tvar range = o.range != null ? o.range : sheet[\"!ref\"];\n\tif(o.header === 1) header = 1;\n\telse if(o.header === \"A\") header = 2;\n\telse if(Array.isArray(o.header)) header = 3;\n\telse if(o.header == null) header = 0;\n\tswitch(typeof range) {\n\t\tcase 'string': r = safe_decode_range(range); break;\n\t\tcase 'number': r = safe_decode_range(sheet[\"!ref\"]); r.s.r = range; break;\n\t\tdefault: r = range;\n\t}\n\tif(header > 0) offset = 0;\n\tvar rr = encode_row(r.s.r);\n\tvar cols = [];\n\tvar out = [];\n\tvar outi = 0, counter = 0;\n\tvar dense = Array.isArray(sheet);\n\tvar R = r.s.r, C = 0, CC = 0;\n\tif(dense && !sheet[R]) sheet[R] = [];\n\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\tcols[C] = encode_col(C);\n\t\tval = dense ? sheet[R][C] : sheet[cols[C] + rr];\n\t\tswitch(header) {\n\t\t\tcase 1: hdr[C] = C - r.s.c; break;\n\t\t\tcase 2: hdr[C] = cols[C]; break;\n\t\t\tcase 3: hdr[C] = o.header[C - r.s.c]; break;\n\t\t\tdefault:\n\t\t\t\tif(val == null) val = {w: \"__EMPTY\", t: \"s\"};\n\t\t\t\tvv = v = format_cell(val, null, o);\n\t\t\t\tcounter = 0;\n\t\t\t\tfor(CC = 0; CC < hdr.length; ++CC) if(hdr[CC] == vv) vv = v + \"_\" + (++counter);\n\t\t\t\thdr[C] = vv;\n\t\t}\n\t}\n\tfor (R = r.s.r + offset; R <= r.e.r; ++R) {\n\t\tvar row = make_json_row(sheet, r, R, cols, header, hdr, dense, o);\n\t\tif((row.isempty === false) || (header === 1 ? o.blankrows !== false : !!o.blankrows)) out[outi++] = row.row;\n\t}\n\tout.length = outi;\n\treturn out;\n}\n\nvar qreg = /\"/g;\nfunction make_csv_row(sheet, r, R, cols, fs, rs, FS, o) {\n\tvar isempty = true;\n\tvar row = [], txt = \"\", rr = encode_row(R);\n\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\tif (!cols[C]) continue;\n\t\tvar val = o.dense ? (sheet[R]||[])[C]: sheet[cols[C] + rr];\n\t\tif(val == null) txt = \"\";\n\t\telse if(val.v != null) {\n\t\t\tisempty = false;\n\t\t\ttxt = ''+(o.rawNumbers && val.t == \"n\" ? val.v : format_cell(val, null, o));\n\t\t\tfor(var i = 0, cc = 0; i !== txt.length; ++i) if((cc = txt.charCodeAt(i)) === fs || cc === rs || cc === 34 || o.forceQuotes) {txt = \"\\\"\" + txt.replace(qreg, '\"\"') + \"\\\"\"; break; }\n\t\t\tif(txt == \"ID\") txt = '\"ID\"';\n\t\t} else if(val.f != null && !val.F) {\n\t\t\tisempty = false;\n\t\t\ttxt = '=' + val.f; if(txt.indexOf(\",\") >= 0) txt = '\"' + txt.replace(qreg, '\"\"') + '\"';\n\t\t} else txt = \"\";\n\t\t/* NOTE: Excel CSV does not support array formulae */\n\t\trow.push(txt);\n\t}\n\tif(o.blankrows === false && isempty) return null;\n\treturn row.join(FS);\n}\n\nfunction sheet_to_csv(sheet, opts) {\n\tvar out = [];\n\tvar o = opts == null ? {} : opts;\n\tif(sheet == null || sheet[\"!ref\"] == null) return \"\";\n\tvar r = safe_decode_range(sheet[\"!ref\"]);\n\tvar FS = o.FS !== undefined ? o.FS : \",\", fs = FS.charCodeAt(0);\n\tvar RS = o.RS !== undefined ? o.RS : \"\\n\", rs = RS.charCodeAt(0);\n\tvar endregex = new RegExp((FS==\"|\" ? \"\\\\|\" : FS)+\"+$\");\n\tvar row = \"\", cols = [];\n\to.dense = Array.isArray(sheet);\n\tvar colinfo = o.skipHidden && sheet[\"!cols\"] || [];\n\tvar rowinfo = o.skipHidden && sheet[\"!rows\"] || [];\n\tfor(var C = r.s.c; C <= r.e.c; ++C) if (!((colinfo[C]||{}).hidden)) cols[C] = encode_col(C);\n\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\tif ((rowinfo[R]||{}).hidden) continue;\n\t\trow = make_csv_row(sheet, r, R, cols, fs, rs, FS, o);\n\t\tif(row == null) { continue; }\n\t\tif(o.strip) row = row.replace(endregex,\"\");\n\t\tout.push(row + RS);\n\t}\n\tdelete o.dense;\n\treturn out.join(\"\");\n}\n\nfunction sheet_to_txt(sheet, opts) {\n\tif(!opts) opts = {}; opts.FS = \"\\t\"; opts.RS = \"\\n\";\n\tvar s = sheet_to_csv(sheet, opts);\n\tif(typeof cptable == 'undefined' || opts.type == 'string') return s;\n\tvar o = cptable.utils.encode(1200, s, 'str');\n\treturn String.fromCharCode(255) + String.fromCharCode(254) + o;\n}\n\nfunction sheet_to_formulae(sheet) {\n\tvar y = \"\", x, val=\"\";\n\tif(sheet == null || sheet[\"!ref\"] == null) return [];\n\tvar r = safe_decode_range(sheet['!ref']), rr = \"\", cols = [], C;\n\tvar cmds = [];\n\tvar dense = Array.isArray(sheet);\n\tfor(C = r.s.c; C <= r.e.c; ++C) cols[C] = encode_col(C);\n\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\trr = encode_row(R);\n\t\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\t\ty = cols[C] + rr;\n\t\t\tx = dense ? (sheet[R]||[])[C] : sheet[y];\n\t\t\tval = \"\";\n\t\t\tif(x === undefined) continue;\n\t\t\telse if(x.F != null) {\n\t\t\t\ty = x.F;\n\t\t\t\tif(!x.f) continue;\n\t\t\t\tval = x.f;\n\t\t\t\tif(y.indexOf(\":\") == -1) y = y + \":\" + y;\n\t\t\t}\n\t\t\tif(x.f != null) val = x.f;\n\t\t\telse if(x.t == 'z') continue;\n\t\t\telse if(x.t == 'n' && x.v != null) val = \"\" + x.v;\n\t\t\telse if(x.t == 'b') val = x.v ? \"TRUE\" : \"FALSE\";\n\t\t\telse if(x.w !== undefined) val = \"'\" + x.w;\n\t\t\telse if(x.v === undefined) continue;\n\t\t\telse if(x.t == 's') val = \"'\" + x.v;\n\t\t\telse val = \"\"+x.v;\n\t\t\tcmds[cmds.length] = y + \"=\" + val;\n\t\t}\n\t}\n\treturn cmds;\n}\n\nfunction sheet_add_json(_ws, js, opts) {\n\tvar o = opts || {};\n\tvar offset = +!o.skipHeader;\n\tvar ws = _ws || ({});\n\tvar _R = 0, _C = 0;\n\tif(ws && o.origin != null) {\n\t\tif(typeof o.origin == 'number') _R = o.origin;\n\t\telse {\n\t\t\tvar _origin = typeof o.origin == \"string\" ? decode_cell(o.origin) : o.origin;\n\t\t\t_R = _origin.r; _C = _origin.c;\n\t\t}\n\t}\n\tvar cell;\n\tvar range = ({s: {c:0, r:0}, e: {c:_C, r:_R + js.length - 1 + offset}});\n\tif(ws['!ref']) {\n\t\tvar _range = safe_decode_range(ws['!ref']);\n\t\trange.e.c = Math.max(range.e.c, _range.e.c);\n\t\trange.e.r = Math.max(range.e.r, _range.e.r);\n\t\tif(_R == -1) { _R = _range.e.r + 1; range.e.r = _R + js.length - 1 + offset; }\n\t} else {\n\t\tif(_R == -1) { _R = 0; range.e.r = js.length - 1 + offset; }\n\t}\n\tvar hdr = o.header || [], C = 0;\n\n\tjs.forEach(function (JS, R) {\n\t\tkeys(JS).forEach(function(k) {\n\t\t\tif((C=hdr.indexOf(k)) == -1) hdr[C=hdr.length] = k;\n\t\t\tvar v = JS[k];\n\t\t\tvar t = 'z';\n\t\t\tvar z = \"\";\n\t\t\tvar ref = encode_cell({c:_C + C,r:_R + R + offset});\n\t\t\tcell = utils.sheet_get_cell(ws, ref);\n\t\t\tif(v && typeof v === 'object' && !(v instanceof Date)){\n\t\t\t\tws[ref] = v;\n\t\t\t} else {\n\t\t\t\tif(typeof v == 'number') t = 'n';\n\t\t\t\telse if(typeof v == 'boolean') t = 'b';\n\t\t\t\telse if(typeof v == 'string') t = 's';\n\t\t\t\telse if(v instanceof Date) {\n\t\t\t\t\tt = 'd';\n\t\t\t\t\tif(!o.cellDates) { t = 'n'; v = datenum(v); }\n\t\t\t\t\tz = (o.dateNF || SSF._table[14]);\n\t\t\t\t}\n\t\t\t\tif(!cell) ws[ref] = cell = ({t:t, v:v});\n\t\t\t\telse {\n\t\t\t\t\tcell.t = t; cell.v = v;\n\t\t\t\t\tdelete cell.w; delete cell.R;\n\t\t\t\t\tif(z) cell.z = z;\n\t\t\t\t}\n\t\t\t\tif(z) cell.z = z;\n\t\t\t}\n\t\t});\n\t});\n\trange.e.c = Math.max(range.e.c, _C + hdr.length - 1);\n\tvar __R = encode_row(_R);\n\tif(offset) for(C = 0; C < hdr.length; ++C) ws[encode_col(C + _C) + __R] = {t:'s', v:hdr[C]};\n\tws['!ref'] = encode_range(range);\n\treturn ws;\n}\nfunction json_to_sheet(js, opts) { return sheet_add_json(null, js, opts); }\n\nvar utils = {\n\tencode_col: encode_col,\n\tencode_row: encode_row,\n\tencode_cell: encode_cell,\n\tencode_range: encode_range,\n\tdecode_col: decode_col,\n\tdecode_row: decode_row,\n\tsplit_cell: split_cell,\n\tdecode_cell: decode_cell,\n\tdecode_range: decode_range,\n\tformat_cell: format_cell,\n\tget_formulae: sheet_to_formulae,\n\tmake_csv: sheet_to_csv,\n\tmake_json: sheet_to_json,\n\tmake_formulae: sheet_to_formulae,\n\tsheet_add_aoa: sheet_add_aoa,\n\tsheet_add_json: sheet_add_json,\n\tsheet_add_dom: sheet_add_dom,\n\taoa_to_sheet: aoa_to_sheet,\n\tjson_to_sheet: json_to_sheet,\n\ttable_to_sheet: parse_dom_table,\n\ttable_to_book: table_to_book,\n\tsheet_to_csv: sheet_to_csv,\n\tsheet_to_txt: sheet_to_txt,\n\tsheet_to_json: sheet_to_json,\n\tsheet_to_html: HTML_.from_sheet,\n\tsheet_to_formulae: sheet_to_formulae,\n\tsheet_to_row_object_array: sheet_to_json\n};\n\n(function(utils) {\nutils.consts = utils.consts || {};\nfunction add_consts(R/*Array*/) { R.forEach(function(a){ utils.consts[a[0]] = a[1]; }); }\n\nfunction get_default(x, y, z) { return x[y] != null ? x[y] : (x[y] = z); }\n\n/* get cell, creating a stub if necessary */\nfunction ws_get_cell_stub(ws, R, C) {\n\t/* A1 cell address */\n\tif(typeof R == \"string\") {\n\t\t/* dense */\n\t\tif(Array.isArray(ws)) {\n\t\t\tvar RC = decode_cell(R);\n\t\t\tif(!ws[RC.r]) ws[RC.r] = [];\n\t\t\treturn ws[RC.r][RC.c] || (ws[RC.r][RC.c] = {t:'z'});\n\t\t}\n\t\treturn ws[R] || (ws[R] = {t:'z'});\n\t}\n\t/* cell address object */\n\tif(typeof R != \"number\") return ws_get_cell_stub(ws, encode_cell(R));\n\t/* R and C are 0-based indices */\n\treturn ws_get_cell_stub(ws, encode_cell({r:R,c:C||0}));\n}\nutils.sheet_get_cell = ws_get_cell_stub;\n\n/* find sheet index for given name / validate index */\nfunction wb_sheet_idx(wb, sh) {\n\tif(typeof sh == \"number\") {\n\t\tif(sh >= 0 && wb.SheetNames.length > sh) return sh;\n\t\tthrow new Error(\"Cannot find sheet # \" + sh);\n\t} else if(typeof sh == \"string\") {\n\t\tvar idx = wb.SheetNames.indexOf(sh);\n\t\tif(idx > -1) return idx;\n\t\tthrow new Error(\"Cannot find sheet name |\" + sh + \"|\");\n\t} else throw new Error(\"Cannot find sheet |\" + sh + \"|\");\n}\n\n/* simple blank workbook object */\nutils.book_new = function() {\n\treturn { SheetNames: [], Sheets: {} };\n};\n\n/* add a worksheet to the end of a given workbook */\nutils.book_append_sheet = function(wb, ws, name) {\n\tif(!name) for(var i = 1; i <= 0xFFFF; ++i, name = undefined) if(wb.SheetNames.indexOf(name = \"Sheet\" + i) == -1) break;\n\tif(!name || wb.SheetNames.length >= 0xFFFF) throw new Error(\"Too many worksheets\");\n\tcheck_ws_name(name);\n\tif(wb.SheetNames.indexOf(name) >= 0) throw new Error(\"Worksheet with name |\" + name + \"| already exists!\");\n\n\twb.SheetNames.push(name);\n\twb.Sheets[name] = ws;\n};\n\n/* set sheet visibility (visible/hidden/very hidden) */\nutils.book_set_sheet_visibility = function(wb, sh, vis) {\n\tget_default(wb,\"Workbook\",{});\n\tget_default(wb.Workbook,\"Sheets\",[]);\n\n\tvar idx = wb_sheet_idx(wb, sh);\n\t// $FlowIgnore\n\tget_default(wb.Workbook.Sheets,idx, {});\n\n\tswitch(vis) {\n\t\tcase 0: case 1: case 2: break;\n\t\tdefault: throw new Error(\"Bad sheet visibility setting \" + vis);\n\t}\n\t// $FlowIgnore\n\twb.Workbook.Sheets[idx].Hidden = vis;\n};\nadd_consts([\n\t[\"SHEET_VISIBLE\", 0],\n\t[\"SHEET_HIDDEN\", 1],\n\t[\"SHEET_VERY_HIDDEN\", 2]\n]);\n\n/* set number format */\nutils.cell_set_number_format = function(cell, fmt) {\n\tcell.z = fmt;\n\treturn cell;\n};\n\n/* set cell hyperlink */\nutils.cell_set_hyperlink = function(cell, target, tooltip) {\n\tif(!target) {\n\t\tdelete cell.l;\n\t} else {\n\t\tcell.l = ({ Target: target });\n\t\tif(tooltip) cell.l.Tooltip = tooltip;\n\t}\n\treturn cell;\n};\nutils.cell_set_internal_link = function(cell, range, tooltip) { return utils.cell_set_hyperlink(cell, \"#\" + range, tooltip); };\n\n/* add to cell comments */\nutils.cell_add_comment = function(cell, text, author) {\n\tif(!cell.c) cell.c = [];\n\tcell.c.push({t:text, a:author||\"SheetJS\"});\n};\n\n/* set array formula and flush related cells */\nutils.sheet_set_array_formula = function(ws, range, formula) {\n\tvar rng = typeof range != \"string\" ? range : safe_decode_range(range);\n\tvar rngstr = typeof range == \"string\" ? range : encode_range(range);\n\tfor(var R = rng.s.r; R <= rng.e.r; ++R) for(var C = rng.s.c; C <= rng.e.c; ++C) {\n\t\tvar cell = ws_get_cell_stub(ws, R, C);\n\t\tcell.t = 'n';\n\t\tcell.F = rngstr;\n\t\tdelete cell.v;\n\t\tif(R == rng.s.r && C == rng.s.c) cell.f = formula;\n\t}\n\treturn ws;\n};\n\nreturn utils;\n})(utils);\n\nif(has_buf && typeof require != 'undefined') (function() {\n\tvar Readable = require('stream').Readable;\n\n\tvar write_csv_stream = function(sheet, opts) {\n\t\tvar stream = Readable();\n\t\tvar o = opts == null ? {} : opts;\n\t\tif(sheet == null || sheet[\"!ref\"] == null) { stream.push(null); return stream; }\n\t\tvar r = safe_decode_range(sheet[\"!ref\"]);\n\t\tvar FS = o.FS !== undefined ? o.FS : \",\", fs = FS.charCodeAt(0);\n\t\tvar RS = o.RS !== undefined ? o.RS : \"\\n\", rs = RS.charCodeAt(0);\n\t\tvar endregex = new RegExp((FS==\"|\" ? \"\\\\|\" : FS)+\"+$\");\n\t\tvar row = \"\", cols = [];\n\t\to.dense = Array.isArray(sheet);\n\t\tvar colinfo = o.skipHidden && sheet[\"!cols\"] || [];\n\t\tvar rowinfo = o.skipHidden && sheet[\"!rows\"] || [];\n\t\tfor(var C = r.s.c; C <= r.e.c; ++C) if (!((colinfo[C]||{}).hidden)) cols[C] = encode_col(C);\n\t\tvar R = r.s.r;\n\t\tvar BOM = false;\n\t\tstream._read = function() {\n\t\t\tif(!BOM) { BOM = true; return stream.push(\"\\uFEFF\"); }\n\t\t\twhile(R <= r.e.r) {\n\t\t\t\t++R;\n\t\t\t\tif ((rowinfo[R-1]||{}).hidden) continue;\n\t\t\t\trow = make_csv_row(sheet, r, R-1, cols, fs, rs, FS, o);\n\t\t\t\tif(row != null) {\n\t\t\t\t\tif(o.strip) row = row.replace(endregex,\"\");\n\t\t\t\t\tstream.push(row + RS);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(R > r.e.r) return stream.push(null);\n\t\t};\n\t\treturn stream;\n\t};\n\n\tvar write_html_stream = function(ws, opts) {\n\t\tvar stream = Readable();\n\n\t\tvar o = opts || {};\n\t\tvar header = o.header != null ? o.header : HTML_.BEGIN;\n\t\tvar footer = o.footer != null ? o.footer : HTML_.END;\n\t\tstream.push(header);\n\t\tvar r = decode_range(ws['!ref']);\n\t\to.dense = Array.isArray(ws);\n\t\tstream.push(HTML_._preamble(ws, r, o));\n\t\tvar R = r.s.r;\n\t\tvar end = false;\n\t\tstream._read = function() {\n\t\t\tif(R > r.e.r) {\n\t\t\t\tif(!end) { end = true; stream.push(\"\" + footer); }\n\t\t\t\treturn stream.push(null);\n\t\t\t}\n\t\t\twhile(R <= r.e.r) {\n\t\t\t\tstream.push(HTML_._row(ws, r, R, o));\n\t\t\t\t++R;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t};\n\t\treturn stream;\n\t};\n\n\tvar write_json_stream = function(sheet, opts) {\n\t\tvar stream = Readable({objectMode:true});\n\n\t\tif(sheet == null || sheet[\"!ref\"] == null) { stream.push(null); return stream; }\n\t\tvar val = {t:'n',v:0}, header = 0, offset = 1, hdr = [], v=0, vv=\"\";\n\t\tvar r = {s:{r:0,c:0},e:{r:0,c:0}};\n\t\tvar o = opts || {};\n\t\tvar range = o.range != null ? o.range : sheet[\"!ref\"];\n\t\tif(o.header === 1) header = 1;\n\t\telse if(o.header === \"A\") header = 2;\n\t\telse if(Array.isArray(o.header)) header = 3;\n\t\tswitch(typeof range) {\n\t\t\tcase 'string': r = safe_decode_range(range); break;\n\t\t\tcase 'number': r = safe_decode_range(sheet[\"!ref\"]); r.s.r = range; break;\n\t\t\tdefault: r = range;\n\t\t}\n\t\tif(header > 0) offset = 0;\n\t\tvar rr = encode_row(r.s.r);\n\t\tvar cols = [];\n\t\tvar counter = 0;\n\t\tvar dense = Array.isArray(sheet);\n\t\tvar R = r.s.r, C = 0, CC = 0;\n\t\tif(dense && !sheet[R]) sheet[R] = [];\n\t\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\t\tcols[C] = encode_col(C);\n\t\t\tval = dense ? sheet[R][C] : sheet[cols[C] + rr];\n\t\t\tswitch(header) {\n\t\t\t\tcase 1: hdr[C] = C - r.s.c; break;\n\t\t\t\tcase 2: hdr[C] = cols[C]; break;\n\t\t\t\tcase 3: hdr[C] = o.header[C - r.s.c]; break;\n\t\t\t\tdefault:\n\t\t\t\t\tif(val == null) val = {w: \"__EMPTY\", t: \"s\"};\n\t\t\t\t\tvv = v = format_cell(val, null, o);\n\t\t\t\t\tcounter = 0;\n\t\t\t\t\tfor(CC = 0; CC < hdr.length; ++CC) if(hdr[CC] == vv) vv = v + \"_\" + (++counter);\n\t\t\t\t\thdr[C] = vv;\n\t\t\t}\n\t\t}\n\t\tR = r.s.r + offset;\n\t\tstream._read = function() {\n\t\t\tif(R > r.e.r) return stream.push(null);\n\t\t\twhile(R <= r.e.r) {\n\t\t\t\t//if ((rowinfo[R-1]||{}).hidden) continue;\n\t\t\t\tvar row = make_json_row(sheet, r, R, cols, header, hdr, dense, o);\n\t\t\t\t++R;\n\t\t\t\tif((row.isempty === false) || (header === 1 ? o.blankrows !== false : !!o.blankrows)) {\n\t\t\t\t\tstream.push(row.row);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\treturn stream;\n\t};\n\n\tXLSX.stream = {\n\t\tto_json: write_json_stream,\n\t\tto_html: write_html_stream,\n\t\tto_csv: write_csv_stream\n\t};\n})();\n\nif(typeof parse_xlscfb !== \"undefined\") XLSX.parse_xlscfb = parse_xlscfb;\nXLSX.parse_zip = parse_zip;\nXLSX.read = readSync; //xlsread\nXLSX.readFile = readFileSync; //readFile\nXLSX.readFileSync = readFileSync;\nXLSX.write = writeSync;\nXLSX.writeFile = writeFileSync;\nXLSX.writeFileSync = writeFileSync;\nXLSX.writeFileAsync = writeFileAsync;\nXLSX.utils = utils;\nXLSX.SSF = SSF;\nif(typeof CFB !== \"undefined\") XLSX.CFB = CFB;\n}\n/*global define */\nif(typeof exports !== 'undefined') make_xlsx_lib(exports);\nelse if(typeof module !== 'undefined' && module.exports) make_xlsx_lib(module.exports);\nelse if(typeof define === 'function' && define.amd) define(function() { if(!XLSX.version) make_xlsx_lib(XLSX); return XLSX; });\nelse make_xlsx_lib(XLSX);\n/*exported XLS, ODS */\nvar XLS = XLSX, ODS = XLSX;\n","'use strict';\nvar toInteger = require('../internals/to-integer');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `String.prototype.repeat` method implementation\n// https://tc39.github.io/ecma262/#sec-string.prototype.repeat\nmodule.exports = ''.repeat || function repeat(count) {\n var str = String(requireObjectCoercible(this));\n var result = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError('Wrong number of repetitions');\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str;\n return result;\n};\n","'use strict';\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar isRegExp = require('../internals/is-regexp');\nvar anObject = require('../internals/an-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar speciesConstructor = require('../internals/species-constructor');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar toLength = require('../internals/to-length');\nvar callRegExpExec = require('../internals/regexp-exec-abstract');\nvar regexpExec = require('../internals/regexp-exec');\nvar fails = require('../internals/fails');\n\nvar arrayPush = [].push;\nvar min = Math.min;\nvar MAX_UINT32 = 0xFFFFFFFF;\n\n// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { return !RegExp(MAX_UINT32, 'y'); });\n\n// @@split logic\nfixRegExpWellKnownSymbolLogic('split', 2, function (SPLIT, nativeSplit, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'.split(/(b)*/)[1] == 'c' ||\n 'test'.split(/(?:)/, -1).length != 4 ||\n 'ab'.split(/(?:ab)*/).length != 2 ||\n '.'.split(/(.?)(.?)/).length != 4 ||\n '.'.split(/()()/).length > 1 ||\n ''.split(/.?/).length\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = String(requireObjectCoercible(this));\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (separator === undefined) return [string];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) {\n return nativeSplit.call(string, separator, lim);\n }\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy.lastIndex;\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match.length > 1 && match.index < string.length) arrayPush.apply(output, match.slice(1));\n lastLength = match[0].length;\n lastLastIndex = lastIndex;\n if (output.length >= lim) break;\n }\n if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop\n }\n if (lastLastIndex === string.length) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output.length > lim ? output.slice(0, lim) : output;\n };\n // Chakra, V8\n } else if ('0'.split(undefined, 0).length) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : nativeSplit.call(this, separator, limit);\n };\n } else internalSplit = nativeSplit;\n\n return [\n // `String.prototype.split` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = requireObjectCoercible(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(String(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (regexp, limit) {\n var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== nativeSplit);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (SUPPORTS_Y ? 'y' : 'g');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = SUPPORTS_Y ? q : 0;\n var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n var e;\n if (\n z === null ||\n (e = min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n}, !SUPPORTS_Y);\n","// `SameValue` abstract operation\n// https://tc39.github.io/ecma262/#sec-samevalue\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","import toInteger from '../toInteger/index.js';\nimport getUTCWeekYear from '../getUTCWeekYear/index.js';\nimport startOfUTCWeek from '../startOfUTCWeek/index.js';\nimport requiredArgs from '../requiredArgs/index.js'; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function startOfUTCWeekYear(dirtyDate, dirtyOptions) {\n requiredArgs(1, arguments);\n var options = dirtyOptions || {};\n var locale = options.locale;\n var localeFirstWeekContainsDate = locale && locale.options && locale.options.firstWeekContainsDate;\n var defaultFirstWeekContainsDate = localeFirstWeekContainsDate == null ? 1 : toInteger(localeFirstWeekContainsDate);\n var firstWeekContainsDate = options.firstWeekContainsDate == null ? defaultFirstWeekContainsDate : toInteger(options.firstWeekContainsDate);\n var year = getUTCWeekYear(dirtyDate, dirtyOptions);\n var firstWeek = new Date(0);\n firstWeek.setUTCFullYear(year, 0, firstWeekContainsDate);\n firstWeek.setUTCHours(0, 0, 0, 0);\n var date = startOfUTCWeek(firstWeek, dirtyOptions);\n return date;\n}","import toDate from '../../toDate/index.js';\nimport startOfUTCWeek from '../startOfUTCWeek/index.js';\nimport startOfUTCWeekYear from '../startOfUTCWeekYear/index.js';\nimport requiredArgs from '../requiredArgs/index.js';\nvar MILLISECONDS_IN_WEEK = 604800000; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function getUTCWeek(dirtyDate, options) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var diff = startOfUTCWeek(date, options).getTime() - startOfUTCWeekYear(date, options).getTime(); // Round the number of days to the nearest integer\n // because the number of milliseconds in a week is not constant\n // (e.g. it's different in the week of the daylight saving time clock shift)\n\n return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;\n}","import './VIcon.sass'\n\n// Mixins\nimport BindsAttrs from '../../mixins/binds-attrs'\nimport Colorable from '../../mixins/colorable'\nimport Sizeable from '../../mixins/sizeable'\nimport Themeable from '../../mixins/themeable'\n\n// Util\nimport { convertToUnit, keys, remapInternalIcon } from '../../util/helpers'\n\n// Types\nimport Vue, { CreateElement, VNode, VNodeChildren, VNodeData } from 'vue'\nimport mixins from '../../util/mixins'\nimport { VuetifyIcon, VuetifyIconComponent } from 'vuetify/types/services/icons'\n\nenum SIZE_MAP {\n xSmall = '12px',\n small = '16px',\n default = '24px',\n medium = '28px',\n large = '36px',\n xLarge = '40px'\n}\n\nfunction isFontAwesome5 (iconType: string): boolean {\n return ['fas', 'far', 'fal', 'fab', 'fad'].some(val => iconType.includes(val))\n}\n\nfunction isSvgPath (icon: string): boolean {\n return (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(icon) && /[\\dz]$/i.test(icon) && icon.length > 4)\n}\n\nconst VIcon = mixins(\n BindsAttrs,\n Colorable,\n Sizeable,\n Themeable\n /* @vue/component */\n).extend({\n name: 'v-icon',\n\n props: {\n dense: Boolean,\n disabled: Boolean,\n left: Boolean,\n right: Boolean,\n size: [Number, String],\n tag: {\n type: String,\n required: false,\n default: 'i',\n },\n },\n\n computed: {\n medium () {\n return false\n },\n hasClickListener (): boolean {\n return Boolean(\n this.listeners$.click || this.listeners$['!click']\n )\n },\n },\n\n methods: {\n getIcon (): VuetifyIcon {\n let iconName = ''\n if (this.$slots.default) iconName = this.$slots.default[0].text!.trim()\n\n return remapInternalIcon(this, iconName)\n },\n getSize (): string | undefined {\n const sizes = {\n xSmall: this.xSmall,\n small: this.small,\n medium: this.medium,\n large: this.large,\n xLarge: this.xLarge,\n }\n\n const explicitSize = keys(sizes).find(key => sizes[key])\n\n return (\n (explicitSize && SIZE_MAP[explicitSize]) || convertToUnit(this.size)\n )\n },\n // Component data for both font and svg icon.\n getDefaultData (): VNodeData {\n const data: VNodeData = {\n staticClass: 'v-icon notranslate',\n class: {\n 'v-icon--disabled': this.disabled,\n 'v-icon--left': this.left,\n 'v-icon--link': this.hasClickListener,\n 'v-icon--right': this.right,\n 'v-icon--dense': this.dense,\n },\n attrs: {\n 'aria-hidden': !this.hasClickListener,\n disabled: this.hasClickListener && this.disabled,\n type: this.hasClickListener ? 'button' : undefined,\n ...this.attrs$,\n },\n on: this.listeners$,\n }\n\n return data\n },\n applyColors (data: VNodeData): void {\n data.class = { ...data.class, ...this.themeClasses }\n this.setTextColor(this.color, data)\n },\n renderFontIcon (icon: string, h: CreateElement): VNode {\n const newChildren: VNodeChildren = []\n const data = this.getDefaultData()\n\n let iconType = 'material-icons'\n // Material Icon delimiter is _\n // https://material.io/icons/\n const delimiterIndex = icon.indexOf('-')\n const isMaterialIcon = delimiterIndex <= -1\n\n if (isMaterialIcon) {\n // Material icon uses ligatures.\n newChildren.push(icon)\n } else {\n iconType = icon.slice(0, delimiterIndex)\n if (isFontAwesome5(iconType)) iconType = ''\n }\n\n data.class[iconType] = true\n data.class[icon] = !isMaterialIcon\n\n const fontSize = this.getSize()\n if (fontSize) data.style = { fontSize }\n\n this.applyColors(data)\n\n return h(this.hasClickListener ? 'button' : this.tag, data, newChildren)\n },\n renderSvgIcon (icon: string, h: CreateElement): VNode {\n const fontSize = this.getSize()\n const wrapperData = {\n ...this.getDefaultData(),\n style: fontSize ? {\n fontSize,\n height: fontSize,\n width: fontSize,\n } : undefined,\n }\n wrapperData.class['v-icon--svg'] = true\n this.applyColors(wrapperData)\n\n const svgData: VNodeData = {\n attrs: {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 24 24',\n height: fontSize || '24',\n width: fontSize || '24',\n role: 'img',\n 'aria-hidden': true,\n },\n }\n\n return h(this.hasClickListener ? 'button' : 'span', wrapperData, [\n h('svg', svgData, [\n h('path', {\n attrs: {\n d: icon,\n },\n }),\n ]),\n ])\n },\n renderSvgIconComponent (\n icon: VuetifyIconComponent,\n h: CreateElement\n ): VNode {\n const data = this.getDefaultData()\n data.class['v-icon--is-component'] = true\n\n const size = this.getSize()\n if (size) {\n data.style = {\n fontSize: size,\n height: size,\n width: size,\n }\n }\n\n this.applyColors(data)\n\n const component = icon.component\n data.props = icon.props\n data.nativeOn = data.on\n\n return h(component, data)\n },\n },\n\n render (h: CreateElement): VNode {\n const icon = this.getIcon()\n\n if (typeof icon === 'string') {\n if (isSvgPath(icon)) {\n return this.renderSvgIcon(icon, h)\n }\n return this.renderFontIcon(icon, h)\n }\n\n return this.renderSvgIconComponent(icon, h)\n },\n})\n\nexport default Vue.extend({\n name: 'v-icon',\n\n $_wrapperFor: VIcon,\n\n functional: true,\n\n render (h, { data, children }): VNode {\n let iconName = ''\n\n // Support usage of v-text and v-html\n if (data.domProps) {\n iconName = data.domProps.textContent ||\n data.domProps.innerHTML ||\n iconName\n\n // Remove nodes so it doesn't\n // overwrite our changes\n delete data.domProps.textContent\n delete data.domProps.innerHTML\n }\n\n return h(VIcon, data, iconName ? [iconName] : children)\n },\n})\n","'use strict';\nvar $ = require('../internals/export');\nvar $reduce = require('../internals/array-reduce').left;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar STRICT_METHOD = arrayMethodIsStrict('reduce');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('reduce', { 1: 0 });\n\n// `Array.prototype.reduce` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.reduce\n$({ target: 'Array', proto: true, forced: !STRICT_METHOD || !USES_TO_LENGTH }, {\n reduce: function reduce(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","/** PURE_IMPORTS_START tslib,_util_isFunction,_Observer,_Subscription,_internal_symbol_rxSubscriber,_config,_util_hostReportError PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { isFunction } from './util/isFunction';\nimport { empty as emptyObserver } from './Observer';\nimport { Subscription } from './Subscription';\nimport { rxSubscriber as rxSubscriberSymbol } from '../internal/symbol/rxSubscriber';\nimport { config } from './config';\nimport { hostReportError } from './util/hostReportError';\nvar Subscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(Subscriber, _super);\n function Subscriber(destinationOrNext, error, complete) {\n var _this = _super.call(this) || this;\n _this.syncErrorValue = null;\n _this.syncErrorThrown = false;\n _this.syncErrorThrowable = false;\n _this.isStopped = false;\n switch (arguments.length) {\n case 0:\n _this.destination = emptyObserver;\n break;\n case 1:\n if (!destinationOrNext) {\n _this.destination = emptyObserver;\n break;\n }\n if (typeof destinationOrNext === 'object') {\n if (destinationOrNext instanceof Subscriber) {\n _this.syncErrorThrowable = destinationOrNext.syncErrorThrowable;\n _this.destination = destinationOrNext;\n destinationOrNext.add(_this);\n }\n else {\n _this.syncErrorThrowable = true;\n _this.destination = new SafeSubscriber(_this, destinationOrNext);\n }\n break;\n }\n default:\n _this.syncErrorThrowable = true;\n _this.destination = new SafeSubscriber(_this, destinationOrNext, error, complete);\n break;\n }\n return _this;\n }\n Subscriber.prototype[rxSubscriberSymbol] = function () { return this; };\n Subscriber.create = function (next, error, complete) {\n var subscriber = new Subscriber(next, error, complete);\n subscriber.syncErrorThrowable = false;\n return subscriber;\n };\n Subscriber.prototype.next = function (value) {\n if (!this.isStopped) {\n this._next(value);\n }\n };\n Subscriber.prototype.error = function (err) {\n if (!this.isStopped) {\n this.isStopped = true;\n this._error(err);\n }\n };\n Subscriber.prototype.complete = function () {\n if (!this.isStopped) {\n this.isStopped = true;\n this._complete();\n }\n };\n Subscriber.prototype.unsubscribe = function () {\n if (this.closed) {\n return;\n }\n this.isStopped = true;\n _super.prototype.unsubscribe.call(this);\n };\n Subscriber.prototype._next = function (value) {\n this.destination.next(value);\n };\n Subscriber.prototype._error = function (err) {\n this.destination.error(err);\n this.unsubscribe();\n };\n Subscriber.prototype._complete = function () {\n this.destination.complete();\n this.unsubscribe();\n };\n Subscriber.prototype._unsubscribeAndRecycle = function () {\n var _parentOrParents = this._parentOrParents;\n this._parentOrParents = null;\n this.unsubscribe();\n this.closed = false;\n this.isStopped = false;\n this._parentOrParents = _parentOrParents;\n return this;\n };\n return Subscriber;\n}(Subscription));\nexport { Subscriber };\nvar SafeSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(SafeSubscriber, _super);\n function SafeSubscriber(_parentSubscriber, observerOrNext, error, complete) {\n var _this = _super.call(this) || this;\n _this._parentSubscriber = _parentSubscriber;\n var next;\n var context = _this;\n if (isFunction(observerOrNext)) {\n next = observerOrNext;\n }\n else if (observerOrNext) {\n next = observerOrNext.next;\n error = observerOrNext.error;\n complete = observerOrNext.complete;\n if (observerOrNext !== emptyObserver) {\n context = Object.create(observerOrNext);\n if (isFunction(context.unsubscribe)) {\n _this.add(context.unsubscribe.bind(context));\n }\n context.unsubscribe = _this.unsubscribe.bind(_this);\n }\n }\n _this._context = context;\n _this._next = next;\n _this._error = error;\n _this._complete = complete;\n return _this;\n }\n SafeSubscriber.prototype.next = function (value) {\n if (!this.isStopped && this._next) {\n var _parentSubscriber = this._parentSubscriber;\n if (!config.useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) {\n this.__tryOrUnsub(this._next, value);\n }\n else if (this.__tryOrSetError(_parentSubscriber, this._next, value)) {\n this.unsubscribe();\n }\n }\n };\n SafeSubscriber.prototype.error = function (err) {\n if (!this.isStopped) {\n var _parentSubscriber = this._parentSubscriber;\n var useDeprecatedSynchronousErrorHandling = config.useDeprecatedSynchronousErrorHandling;\n if (this._error) {\n if (!useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) {\n this.__tryOrUnsub(this._error, err);\n this.unsubscribe();\n }\n else {\n this.__tryOrSetError(_parentSubscriber, this._error, err);\n this.unsubscribe();\n }\n }\n else if (!_parentSubscriber.syncErrorThrowable) {\n this.unsubscribe();\n if (useDeprecatedSynchronousErrorHandling) {\n throw err;\n }\n hostReportError(err);\n }\n else {\n if (useDeprecatedSynchronousErrorHandling) {\n _parentSubscriber.syncErrorValue = err;\n _parentSubscriber.syncErrorThrown = true;\n }\n else {\n hostReportError(err);\n }\n this.unsubscribe();\n }\n }\n };\n SafeSubscriber.prototype.complete = function () {\n var _this = this;\n if (!this.isStopped) {\n var _parentSubscriber = this._parentSubscriber;\n if (this._complete) {\n var wrappedComplete = function () { return _this._complete.call(_this._context); };\n if (!config.useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) {\n this.__tryOrUnsub(wrappedComplete);\n this.unsubscribe();\n }\n else {\n this.__tryOrSetError(_parentSubscriber, wrappedComplete);\n this.unsubscribe();\n }\n }\n else {\n this.unsubscribe();\n }\n }\n };\n SafeSubscriber.prototype.__tryOrUnsub = function (fn, value) {\n try {\n fn.call(this._context, value);\n }\n catch (err) {\n this.unsubscribe();\n if (config.useDeprecatedSynchronousErrorHandling) {\n throw err;\n }\n else {\n hostReportError(err);\n }\n }\n };\n SafeSubscriber.prototype.__tryOrSetError = function (parent, fn, value) {\n if (!config.useDeprecatedSynchronousErrorHandling) {\n throw new Error('bad call');\n }\n try {\n fn.call(this._context, value);\n }\n catch (err) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n parent.syncErrorValue = err;\n parent.syncErrorThrown = true;\n return true;\n }\n else {\n hostReportError(err);\n return true;\n }\n }\n return false;\n };\n SafeSubscriber.prototype._unsubscribe = function () {\n var _parentSubscriber = this._parentSubscriber;\n this._context = null;\n this._parentSubscriber = null;\n _parentSubscriber.unsubscribe();\n };\n return SafeSubscriber;\n}(Subscriber));\nexport { SafeSubscriber };\n//# sourceMappingURL=Subscriber.js.map\n","'use strict';\nvar toObject = require('../internals/to-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toLength = require('../internals/to-length');\n\nvar min = Math.min;\n\n// `Array.prototype.copyWithin` method implementation\n// https://tc39.github.io/ecma262/#sec-array.prototype.copywithin\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","var classof = require('./classof-raw');\nvar regexpExec = require('./regexp-exec');\n\n// `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n\n if (classof(R) !== 'RegExp') {\n throw TypeError('RegExp#exec called on incompatible receiver');\n }\n\n return regexpExec.call(R, S);\n};\n\n","/** PURE_IMPORTS_START _map PURE_IMPORTS_END */\nimport { map } from './map';\nexport function pluck() {\n var properties = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n properties[_i] = arguments[_i];\n }\n var length = properties.length;\n if (length === 0) {\n throw new Error('list of properties cannot be empty.');\n }\n return function (source) { return map(plucker(properties, length))(source); };\n}\nfunction plucker(props, length) {\n var mapper = function (x) {\n var currentProp = x;\n for (var i = 0; i < length; i++) {\n var p = currentProp != null ? currentProp[props[i]] : undefined;\n if (p !== void 0) {\n currentProp = p;\n }\n else {\n return undefined;\n }\n }\n return currentProp;\n };\n return mapper;\n}\n//# sourceMappingURL=pluck.js.map\n","var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar forEach = require('../internals/array-for-each');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nfor (var COLLECTION_NAME in DOMIterables) {\n var Collection = global[COLLECTION_NAME];\n var CollectionPrototype = Collection && Collection.prototype;\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype && CollectionPrototype.forEach !== forEach) try {\n createNonEnumerableProperty(CollectionPrototype, 'forEach', forEach);\n } catch (error) {\n CollectionPrototype.forEach = forEach;\n }\n}\n","/*\n\nJSZip - A Javascript class for generating and reading zip files\n\n\n(c) 2009-2014 Stuart Knightley \nDual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/master/LICENSE.markdown.\n\nJSZip uses the library pako released under the MIT license :\nhttps://github.com/nodeca/pako/blob/master/LICENSE\n\nNote: since JSZip 3 removed critical functionality, this version assigns to the\n`JSZipSync` variable. Another JSZip version can be loaded in parallel.\n*/\n(function(e){\n\tif(\"object\"==typeof exports&&\"undefined\"!=typeof module&&\"undefined\"==typeof DO_NOT_EXPORT_JSZIP)module.exports=e();\n\telse if(\"function\"==typeof define&&define.amd&&\"undefined\"==typeof DO_NOT_EXPORT_JSZIP){JSZipSync=e();define([],e);}\n\telse{\n\t\tvar f;\n\t\t\"undefined\"!=typeof globalThis?f=globalThis:\n\t\t\"undefined\"!=typeof window?f=window:\n\t\t\"undefined\"!=typeof global?f=global:\n\t\t\"undefined\"!=typeof $ && $.global?f=$.global:\n\t\t\"undefined\"!=typeof self&&(f=self),f.JSZipSync=e()\n\t}\n}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error(\"Cannot find module '\"+o+\"'\")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o> 2;\n enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n enc4 = chr3 & 63;\n\n if (isNaN(chr2)) {\n enc3 = enc4 = 64;\n }\n else if (isNaN(chr3)) {\n enc4 = 64;\n }\n\n output = output + _keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4);\n\n }\n\n return output;\n};\n\n// public method for decoding\nexports.decode = function(input, utf8) {\n var output = \"\";\n var chr1, chr2, chr3;\n var enc1, enc2, enc3, enc4;\n var i = 0;\n\n input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\n\n while (i < input.length) {\n\n enc1 = _keyStr.indexOf(input.charAt(i++));\n enc2 = _keyStr.indexOf(input.charAt(i++));\n enc3 = _keyStr.indexOf(input.charAt(i++));\n enc4 = _keyStr.indexOf(input.charAt(i++));\n\n chr1 = (enc1 << 2) | (enc2 >> 4);\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n chr3 = ((enc3 & 3) << 6) | enc4;\n\n output = output + String.fromCharCode(chr1);\n\n if (enc3 != 64) {\n output = output + String.fromCharCode(chr2);\n }\n if (enc4 != 64) {\n output = output + String.fromCharCode(chr3);\n }\n\n }\n\n return output;\n\n};\n\n},{}],2:[function(_dereq_,module,exports){\n'use strict';\nfunction CompressedObject() {\n this.compressedSize = 0;\n this.uncompressedSize = 0;\n this.crc32 = 0;\n this.compressionMethod = null;\n this.compressedContent = null;\n}\n\nCompressedObject.prototype = {\n /**\n * Return the decompressed content in an unspecified format.\n * The format will depend on the decompressor.\n * @return {Object} the decompressed content.\n */\n getContent: function() {\n return null; // see implementation\n },\n /**\n * Return the compressed content in an unspecified format.\n * The format will depend on the compressed conten source.\n * @return {Object} the compressed content.\n */\n getCompressedContent: function() {\n return null; // see implementation\n }\n};\nmodule.exports = CompressedObject;\n\n},{}],3:[function(_dereq_,module,exports){\n'use strict';\nexports.STORE = {\n magic: \"\\x00\\x00\",\n compress: function(content) {\n return content; // no compression\n },\n uncompress: function(content) {\n return content; // no compression\n },\n compressInputType: null,\n uncompressInputType: null\n};\nexports.DEFLATE = _dereq_('./flate');\n\n},{\"./flate\":8}],4:[function(_dereq_,module,exports){\n'use strict';\n\nvar utils = _dereq_('./utils');\n\nvar table = [\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA,\n 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,\n 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,\n 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,\n 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,\n 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,\n 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC,\n 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,\n 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,\n 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940,\n 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,\n 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116,\n 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,\n 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,\n 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,\n 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A,\n 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818,\n 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,\n 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,\n 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,\n 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C,\n 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,\n 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,\n 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,\n 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,\n 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086,\n 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,\n 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4,\n 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,\n 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,\n 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,\n 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,\n 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE,\n 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,\n 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,\n 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,\n 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252,\n 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,\n 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60,\n 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,\n 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,\n 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04,\n 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,\n 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A,\n 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,\n 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,\n 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,\n 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E,\n 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,\n 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,\n 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,\n 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,\n 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0,\n 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,\n 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6,\n 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,\n 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D\n];\n\n/**\n *\n * Javascript crc32\n * http://www.webtoolkit.info/\n *\n */\nmodule.exports = function crc32(input, crc) {\n if (typeof input === \"undefined\" || !input.length) {\n return 0;\n }\n\n var isArray = utils.getTypeOf(input) !== \"string\";\n\n if (typeof(crc) == \"undefined\") {\n crc = 0;\n }\n var x = 0;\n var y = 0;\n var b = 0;\n\n crc = crc ^ (-1);\n for (var i = 0, iTop = input.length; i < iTop; i++) {\n b = isArray ? input[i] : input.charCodeAt(i);\n y = (crc ^ b) & 0xFF;\n x = table[y];\n crc = (crc >>> 8) ^ x;\n }\n\n return crc ^ (-1);\n};\n// vim: set shiftwidth=4 softtabstop=4:\n\n},{\"./utils\":21}],5:[function(_dereq_,module,exports){\n'use strict';\nvar utils = _dereq_('./utils');\n\nfunction DataReader(data) {\n this.data = null; // type : see implementation\n this.length = 0;\n this.index = 0;\n}\nDataReader.prototype = {\n /**\n * Check that the offset will not go too far.\n * @param {string} offset the additional offset to check.\n * @throws {Error} an Error if the offset is out of bounds.\n */\n checkOffset: function(offset) {\n this.checkIndex(this.index + offset);\n },\n /**\n * Check that the specifed index will not be too far.\n * @param {string} newIndex the index to check.\n * @throws {Error} an Error if the index is out of bounds.\n */\n checkIndex: function(newIndex) {\n if (this.length < newIndex || newIndex < 0) {\n throw new Error(\"End of data reached (data length = \" + this.length + \", asked index = \" + (newIndex) + \"). Corrupted zip ?\");\n }\n },\n /**\n * Change the index.\n * @param {number} newIndex The new index.\n * @throws {Error} if the new index is out of the data.\n */\n setIndex: function(newIndex) {\n this.checkIndex(newIndex);\n this.index = newIndex;\n },\n /**\n * Skip the next n bytes.\n * @param {number} n the number of bytes to skip.\n * @throws {Error} if the new index is out of the data.\n */\n skip: function(n) {\n this.setIndex(this.index + n);\n },\n /**\n * Get the byte at the specified index.\n * @param {number} i the index to use.\n * @return {number} a byte.\n */\n byteAt: function(i) {\n // see implementations\n },\n /**\n * Get the next number with a given byte size.\n * @param {number} size the number of bytes to read.\n * @return {number} the corresponding number.\n */\n readInt: function(size) {\n var result = 0,\n i;\n this.checkOffset(size);\n for (i = this.index + size - 1; i >= this.index; i--) {\n result = (result << 8) + this.byteAt(i);\n }\n this.index += size;\n return result;\n },\n /**\n * Get the next string with a given byte size.\n * @param {number} size the number of bytes to read.\n * @return {string} the corresponding string.\n */\n readString: function(size) {\n return utils.transformTo(\"string\", this.readData(size));\n },\n /**\n * Get raw data without conversion, bytes.\n * @param {number} size the number of bytes to read.\n * @return {Object} the raw data, implementation specific.\n */\n readData: function(size) {\n // see implementations\n },\n /**\n * Find the last occurence of a zip signature (4 bytes).\n * @param {string} sig the signature to find.\n * @return {number} the index of the last occurence, -1 if not found.\n */\n lastIndexOfSignature: function(sig) {\n // see implementations\n },\n /**\n * Get the next date.\n * @return {Date} the date.\n */\n readDate: function() {\n var dostime = this.readInt(4);\n return new Date(\n ((dostime >> 25) & 0x7f) + 1980, // year\n ((dostime >> 21) & 0x0f) - 1, // month\n (dostime >> 16) & 0x1f, // day\n (dostime >> 11) & 0x1f, // hour\n (dostime >> 5) & 0x3f, // minute\n (dostime & 0x1f) << 1); // second\n }\n};\nmodule.exports = DataReader;\n\n},{\"./utils\":21}],6:[function(_dereq_,module,exports){\n'use strict';\nexports.base64 = false;\nexports.binary = false;\nexports.dir = false;\nexports.createFolders = false;\nexports.date = null;\nexports.compression = null;\nexports.comment = null;\n\n},{}],7:[function(_dereq_,module,exports){\n'use strict';\nvar utils = _dereq_('./utils');\n\n/**\n * @deprecated\n * This function will be removed in a future version without replacement.\n */\nexports.string2binary = function(str) {\n return utils.string2binary(str);\n};\n\n/**\n * @deprecated\n * This function will be removed in a future version without replacement.\n */\nexports.string2Uint8Array = function(str) {\n return utils.transformTo(\"uint8array\", str);\n};\n\n/**\n * @deprecated\n * This function will be removed in a future version without replacement.\n */\nexports.uint8Array2String = function(array) {\n return utils.transformTo(\"string\", array);\n};\n\n/**\n * @deprecated\n * This function will be removed in a future version without replacement.\n */\nexports.string2Blob = function(str) {\n var buffer = utils.transformTo(\"arraybuffer\", str);\n return utils.arrayBuffer2Blob(buffer);\n};\n\n/**\n * @deprecated\n * This function will be removed in a future version without replacement.\n */\nexports.arrayBuffer2Blob = function(buffer) {\n return utils.arrayBuffer2Blob(buffer);\n};\n\n/**\n * @deprecated\n * This function will be removed in a future version without replacement.\n */\nexports.transformTo = function(outputType, input) {\n return utils.transformTo(outputType, input);\n};\n\n/**\n * @deprecated\n * This function will be removed in a future version without replacement.\n */\nexports.getTypeOf = function(input) {\n return utils.getTypeOf(input);\n};\n\n/**\n * @deprecated\n * This function will be removed in a future version without replacement.\n */\nexports.checkSupport = function(type) {\n return utils.checkSupport(type);\n};\n\n/**\n * @deprecated\n * This value will be removed in a future version without replacement.\n */\nexports.MAX_VALUE_16BITS = utils.MAX_VALUE_16BITS;\n\n/**\n * @deprecated\n * This value will be removed in a future version without replacement.\n */\nexports.MAX_VALUE_32BITS = utils.MAX_VALUE_32BITS;\n\n\n/**\n * @deprecated\n * This function will be removed in a future version without replacement.\n */\nexports.pretty = function(str) {\n return utils.pretty(str);\n};\n\n/**\n * @deprecated\n * This function will be removed in a future version without replacement.\n */\nexports.findCompression = function(compressionMethod) {\n return utils.findCompression(compressionMethod);\n};\n\n/**\n * @deprecated\n * This function will be removed in a future version without replacement.\n */\nexports.isRegExp = function (object) {\n return utils.isRegExp(object);\n};\n\n\n},{\"./utils\":21}],8:[function(_dereq_,module,exports){\n'use strict';\nvar USE_TYPEDARRAY = (typeof Uint8Array !== 'undefined') && (typeof Uint16Array !== 'undefined') && (typeof Uint32Array !== 'undefined');\n\nvar pako = _dereq_(\"pako\");\nexports.uncompressInputType = USE_TYPEDARRAY ? \"uint8array\" : \"array\";\nexports.compressInputType = USE_TYPEDARRAY ? \"uint8array\" : \"array\";\n\nexports.magic = \"\\x08\\x00\";\nexports.compress = function(input) {\n return pako.deflateRaw(input);\n};\nexports.uncompress = function(input) {\n return pako.inflateRaw(input);\n};\n\n},{\"pako\":24}],9:[function(_dereq_,module,exports){\n'use strict';\n\nvar base64 = _dereq_('./base64');\n\n/**\nUsage:\n zip = new JSZip();\n zip.file(\"hello.txt\", \"Hello, World!\").file(\"tempfile\", \"nothing\");\n zip.folder(\"images\").file(\"smile.gif\", base64Data, {base64: true});\n zip.file(\"Xmas.txt\", \"Ho ho ho !\", {date : new Date(\"December 25, 2007 00:00:01\")});\n zip.remove(\"tempfile\");\n\n base64zip = zip.generate();\n\n**/\n\n/**\n * Representation a of zip file in js\n * @constructor\n * @param {String=|ArrayBuffer=|Uint8Array=} data the data to load, if any (optional).\n * @param {Object=} options the options for creating this objects (optional).\n */\nfunction JSZipSync(data, options) {\n // if this constructor is used without `new`, it adds `new` before itself:\n if(!(this instanceof JSZipSync)) return new JSZipSync(data, options);\n\n // object containing the files :\n // {\n // \"folder/\" : {...},\n // \"folder/data.txt\" : {...}\n // }\n this.files = {};\n\n this.comment = null;\n\n // Where we are in the hierarchy\n this.root = \"\";\n if (data) {\n this.load(data, options);\n }\n this.clone = function() {\n var newObj = new JSZipSync();\n for (var i in this) {\n if (typeof this[i] !== \"function\") {\n newObj[i] = this[i];\n }\n }\n return newObj;\n };\n}\nJSZipSync.prototype = _dereq_('./object');\nJSZipSync.prototype.load = _dereq_('./load');\nJSZipSync.support = _dereq_('./support');\nJSZipSync.defaults = _dereq_('./defaults');\n\n/**\n * @deprecated\n * This namespace will be removed in a future version without replacement.\n */\nJSZipSync.utils = _dereq_('./deprecatedPublicUtils');\n\nJSZipSync.base64 = {\n /**\n * @deprecated\n * This method will be removed in a future version without replacement.\n */\n encode : function(input) {\n return base64.encode(input);\n },\n /**\n * @deprecated\n * This method will be removed in a future version without replacement.\n */\n decode : function(input) {\n return base64.decode(input);\n }\n};\nJSZipSync.compressions = _dereq_('./compressions');\nmodule.exports = JSZipSync;\n\n},{\"./base64\":1,\"./compressions\":3,\"./defaults\":6,\"./deprecatedPublicUtils\":7,\"./load\":10,\"./object\":13,\"./support\":17}],10:[function(_dereq_,module,exports){\n'use strict';\nvar base64 = _dereq_('./base64');\nvar ZipEntries = _dereq_('./zipEntries');\nmodule.exports = function(data, options) {\n var files, zipEntries, i, input;\n options = options || {};\n if (options.base64) {\n data = base64.decode(data);\n }\n\n zipEntries = new ZipEntries(data, options);\n files = zipEntries.files;\n for (i = 0; i < files.length; i++) {\n input = files[i];\n this.file(input.fileName, input.decompressed, {\n binary: true,\n optimizedBinaryString: true,\n date: input.date,\n dir: input.dir,\n comment : input.fileComment.length ? input.fileComment : null,\n createFolders: options.createFolders\n });\n }\n if (zipEntries.zipComment.length) {\n this.comment = zipEntries.zipComment;\n }\n\n return this;\n};\n\n},{\"./base64\":1,\"./zipEntries\":22}],11:[function(_dereq_,module,exports){\n(function (Buffer){\n'use strict';\nvar Buffer_from = /*::(*/function(){}/*:: :any)*/;\nif(typeof Buffer !== 'undefined') {\n\tvar nbfs = !Buffer.from;\n\tif(!nbfs) try { Buffer.from(\"foo\", \"utf8\"); } catch(e) { nbfs = true; }\n\tBuffer_from = nbfs ? function(buf, enc) { return (enc) ? new Buffer(buf, enc) : new Buffer(buf); } : Buffer.from.bind(Buffer);\n\t// $FlowIgnore\n\tif(!Buffer.alloc) Buffer.alloc = function(n) { return new Buffer(n); };\n}\nmodule.exports = function(data, encoding){\n return typeof data == 'number' ? Buffer.alloc(data) : Buffer_from(data, encoding);\n};\nmodule.exports.test = function(b){\n return Buffer.isBuffer(b);\n};\n}).call(this,(typeof Buffer !== \"undefined\" ? Buffer : undefined))\n},{}],12:[function(_dereq_,module,exports){\n'use strict';\nvar Uint8ArrayReader = _dereq_('./uint8ArrayReader');\n\nfunction NodeBufferReader(data) {\n this.data = data;\n this.length = this.data.length;\n this.index = 0;\n}\nNodeBufferReader.prototype = new Uint8ArrayReader();\n\n/**\n * @see DataReader.readData\n */\nNodeBufferReader.prototype.readData = function(size) {\n this.checkOffset(size);\n var result = this.data.slice(this.index, this.index + size);\n this.index += size;\n return result;\n};\nmodule.exports = NodeBufferReader;\n\n},{\"./uint8ArrayReader\":18}],13:[function(_dereq_,module,exports){\n'use strict';\nvar support = _dereq_('./support');\nvar utils = _dereq_('./utils');\nvar crc32 = _dereq_('./crc32');\nvar signature = _dereq_('./signature');\nvar defaults = _dereq_('./defaults');\nvar base64 = _dereq_('./base64');\nvar compressions = _dereq_('./compressions');\nvar CompressedObject = _dereq_('./compressedObject');\nvar nodeBuffer = _dereq_('./nodeBuffer');\nvar utf8 = _dereq_('./utf8');\nvar StringWriter = _dereq_('./stringWriter');\nvar Uint8ArrayWriter = _dereq_('./uint8ArrayWriter');\n\n/**\n * Returns the raw data of a ZipObject, decompress the content if necessary.\n * @param {ZipObject} file the file to use.\n * @return {String|ArrayBuffer|Uint8Array|Buffer} the data.\n */\nvar getRawData = function(file) {\n if (file._data instanceof CompressedObject) {\n file._data = file._data.getContent();\n file.options.binary = true;\n file.options.base64 = false;\n\n if (utils.getTypeOf(file._data) === \"uint8array\") {\n var copy = file._data;\n // when reading an arraybuffer, the CompressedObject mechanism will keep it and subarray() a Uint8Array.\n // if we request a file in the same format, we might get the same Uint8Array or its ArrayBuffer (the original zip file).\n file._data = new Uint8Array(copy.length);\n // with an empty Uint8Array, Opera fails with a \"Offset larger than array size\"\n if (copy.length !== 0) {\n file._data.set(copy, 0);\n }\n }\n }\n return file._data;\n};\n\n/**\n * Returns the data of a ZipObject in a binary form. If the content is an unicode string, encode it.\n * @param {ZipObject} file the file to use.\n * @return {String|ArrayBuffer|Uint8Array|Buffer} the data.\n */\nvar getBinaryData = function(file) {\n var result = getRawData(file),\n type = utils.getTypeOf(result);\n if (type === \"string\") {\n if (!file.options.binary) {\n // unicode text !\n // unicode string => binary string is a painful process, check if we can avoid it.\n if (support.nodebuffer) {\n return nodeBuffer(result, \"utf-8\");\n }\n }\n return file.asBinary();\n }\n return result;\n};\n\n/**\n * Transform this._data into a string.\n * @param {function} filter a function String -> String, applied if not null on the result.\n * @return {String} the string representing this._data.\n */\nvar dataToString = function(asUTF8) {\n var result = getRawData(this);\n if (result === null || typeof result === \"undefined\") {\n return \"\";\n }\n // if the data is a base64 string, we decode it before checking the encoding !\n if (this.options.base64) {\n result = base64.decode(result);\n }\n if (asUTF8 && this.options.binary) {\n // JSZip.prototype.utf8decode supports arrays as input\n // skip to array => string step, utf8decode will do it.\n result = out.utf8decode(result);\n }\n else {\n // no utf8 transformation, do the array => string step.\n result = utils.transformTo(\"string\", result);\n }\n\n if (!asUTF8 && !this.options.binary) {\n result = utils.transformTo(\"string\", out.utf8encode(result));\n }\n return result;\n};\n/**\n * A simple object representing a file in the zip file.\n * @constructor\n * @param {string} name the name of the file\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data\n * @param {Object} options the options of the file\n */\nvar ZipObject = function(name, data, options) {\n this.name = name;\n this.dir = options.dir;\n this.date = options.date;\n this.comment = options.comment;\n\n this._data = data;\n this.options = options;\n\n /*\n * This object contains initial values for dir and date.\n * With them, we can check if the user changed the deprecated metadata in\n * `ZipObject#options` or not.\n */\n this._initialMetadata = {\n dir : options.dir,\n date : options.date\n };\n};\n\nZipObject.prototype = {\n /**\n * Return the content as UTF8 string.\n * @return {string} the UTF8 string.\n */\n asText: function() {\n return dataToString.call(this, true);\n },\n /**\n * Returns the binary content.\n * @return {string} the content as binary.\n */\n asBinary: function() {\n return dataToString.call(this, false);\n },\n /**\n * Returns the content as a nodejs Buffer.\n * @return {Buffer} the content as a Buffer.\n */\n asNodeBuffer: function() {\n var result = getBinaryData(this);\n return utils.transformTo(\"nodebuffer\", result);\n },\n /**\n * Returns the content as an Uint8Array.\n * @return {Uint8Array} the content as an Uint8Array.\n */\n asUint8Array: function() {\n var result = getBinaryData(this);\n return utils.transformTo(\"uint8array\", result);\n },\n /**\n * Returns the content as an ArrayBuffer.\n * @return {ArrayBuffer} the content as an ArrayBufer.\n */\n asArrayBuffer: function() {\n return this.asUint8Array().buffer;\n }\n};\n\n/**\n * Transform an integer into a string in hexadecimal.\n * @private\n * @param {number} dec the number to convert.\n * @param {number} bytes the number of bytes to generate.\n * @returns {string} the result.\n */\nvar decToHex = function(dec, bytes) {\n var hex = \"\",\n i;\n for (i = 0; i < bytes; i++) {\n hex += String.fromCharCode(dec & 0xff);\n dec = dec >>> 8;\n }\n return hex;\n};\n\n/**\n * Merge the objects passed as parameters into a new one.\n * @private\n * @param {...Object} var_args All objects to merge.\n * @return {Object} a new object with the data of the others.\n */\nvar extend = function() {\n var result = {}, i, attr;\n for (i = 0; i < arguments.length; i++) { // arguments is not enumerable in some browsers\n for (attr in arguments[i]) {\n if (arguments[i].hasOwnProperty(attr) && typeof result[attr] === \"undefined\") {\n result[attr] = arguments[i][attr];\n }\n }\n }\n return result;\n};\n\n/**\n * Transforms the (incomplete) options from the user into the complete\n * set of options to create a file.\n * @private\n * @param {Object} o the options from the user.\n * @return {Object} the complete set of options.\n */\nvar prepareFileAttrs = function(o) {\n o = o || {};\n if (o.base64 === true && (o.binary === null || o.binary === undefined)) {\n o.binary = true;\n }\n o = extend(o, defaults);\n o.date = o.date || new Date();\n if (o.compression !== null) o.compression = o.compression.toUpperCase();\n\n return o;\n};\n\n/**\n * Add a file in the current folder.\n * @private\n * @param {string} name the name of the file\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data of the file\n * @param {Object} o the options of the file\n * @return {Object} the new file.\n */\nvar fileAdd = function(name, data, o) {\n // be sure sub folders exist\n var dataType = utils.getTypeOf(data),\n parent;\n\n o = prepareFileAttrs(o);\n\n if (o.createFolders && (parent = parentFolder(name))) {\n folderAdd.call(this, parent, true);\n }\n\n if (o.dir || data === null || typeof data === \"undefined\") {\n o.base64 = false;\n o.binary = false;\n data = null;\n }\n else if (dataType === \"string\") {\n if (o.binary && !o.base64) {\n // optimizedBinaryString == true means that the file has already been filtered with a 0xFF mask\n if (o.optimizedBinaryString !== true) {\n // this is a string, not in a base64 format.\n // Be sure that this is a correct \"binary string\"\n data = utils.string2binary(data);\n }\n }\n }\n else { // arraybuffer, uint8array, ...\n o.base64 = false;\n o.binary = true;\n\n if (!dataType && !(data instanceof CompressedObject)) {\n throw new Error(\"The data of '\" + name + \"' is in an unsupported format !\");\n }\n\n // special case : it's way easier to work with Uint8Array than with ArrayBuffer\n if (dataType === \"arraybuffer\") {\n data = utils.transformTo(\"uint8array\", data);\n }\n }\n\n var object = new ZipObject(name, data, o);\n this.files[name] = object;\n return object;\n};\n\n/**\n * Find the parent folder of the path.\n * @private\n * @param {string} path the path to use\n * @return {string} the parent folder, or \"\"\n */\nvar parentFolder = function (path) {\n if (path.slice(-1) == '/') {\n path = path.substring(0, path.length - 1);\n }\n var lastSlash = path.lastIndexOf('/');\n return (lastSlash > 0) ? path.substring(0, lastSlash) : \"\";\n};\n\n/**\n * Add a (sub) folder in the current folder.\n * @private\n * @param {string} name the folder's name\n * @param {boolean=} [createFolders] If true, automatically create sub\n * folders. Defaults to false.\n * @return {Object} the new folder.\n */\nvar folderAdd = function(name, createFolders) {\n // Check the name ends with a /\n if (name.slice(-1) != \"/\") {\n name += \"/\"; // IE doesn't like substr(-1)\n }\n\n createFolders = (typeof createFolders !== 'undefined') ? createFolders : false;\n\n // Does this folder already exist?\n if (!this.files[name]) {\n fileAdd.call(this, name, null, {\n dir: true,\n createFolders: createFolders\n });\n }\n return this.files[name];\n};\n\n/**\n * Generate a JSZip.CompressedObject for a given zipOject.\n * @param {ZipObject} file the object to read.\n * @param {JSZip.compression} compression the compression to use.\n * @return {JSZip.CompressedObject} the compressed result.\n */\nvar generateCompressedObjectFrom = function(file, compression) {\n var result = new CompressedObject(),\n content;\n\n // the data has not been decompressed, we might reuse things !\n if (file._data instanceof CompressedObject) {\n result.uncompressedSize = file._data.uncompressedSize;\n result.crc32 = file._data.crc32;\n\n if (result.uncompressedSize === 0 || file.dir) {\n compression = compressions['STORE'];\n result.compressedContent = \"\";\n result.crc32 = 0;\n }\n else if (file._data.compressionMethod === compression.magic) {\n result.compressedContent = file._data.getCompressedContent();\n }\n else {\n content = file._data.getContent();\n // need to decompress / recompress\n result.compressedContent = compression.compress(utils.transformTo(compression.compressInputType, content));\n }\n }\n else {\n // have uncompressed data\n content = getBinaryData(file);\n if (!content || content.length === 0 || file.dir) {\n compression = compressions['STORE'];\n content = \"\";\n }\n result.uncompressedSize = content.length;\n result.crc32 = crc32(content);\n result.compressedContent = compression.compress(utils.transformTo(compression.compressInputType, content));\n }\n\n result.compressedSize = result.compressedContent.length;\n result.compressionMethod = compression.magic;\n\n return result;\n};\n\n/**\n * Generate the various parts used in the construction of the final zip file.\n * @param {string} name the file name.\n * @param {ZipObject} file the file content.\n * @param {JSZip.CompressedObject} compressedObject the compressed object.\n * @param {number} offset the current offset from the start of the zip file.\n * @return {object} the zip parts.\n */\nvar generateZipParts = function(name, file, compressedObject, offset) {\n var data = compressedObject.compressedContent,\n utfEncodedFileName = utils.transformTo(\"string\", utf8.utf8encode(file.name)),\n comment = file.comment || \"\",\n utfEncodedComment = utils.transformTo(\"string\", utf8.utf8encode(comment)),\n useUTF8ForFileName = utfEncodedFileName.length !== file.name.length,\n useUTF8ForComment = utfEncodedComment.length !== comment.length,\n o = file.options,\n dosTime,\n dosDate,\n extraFields = \"\",\n unicodePathExtraField = \"\",\n unicodeCommentExtraField = \"\",\n dir, date;\n\n\n // handle the deprecated options.dir\n if (file._initialMetadata.dir !== file.dir) {\n dir = file.dir;\n } else {\n dir = o.dir;\n }\n\n // handle the deprecated options.date\n if(file._initialMetadata.date !== file.date) {\n date = file.date;\n } else {\n date = o.date;\n }\n\n\n dosTime = date.getHours();\n dosTime = dosTime << 6;\n dosTime = dosTime | date.getMinutes();\n dosTime = dosTime << 5;\n dosTime = dosTime | date.getSeconds() / 2;\n\n dosDate = date.getFullYear() - 1980;\n dosDate = dosDate << 4;\n dosDate = dosDate | (date.getMonth() + 1);\n dosDate = dosDate << 5;\n dosDate = dosDate | date.getDate();\n\n if (useUTF8ForFileName) {\n // set the unicode path extra field. unzip needs at least one extra\n // field to correctly handle unicode path, so using the path is as good\n // as any other information. This could improve the situation with\n // other archive managers too.\n // This field is usually used without the utf8 flag, with a non\n // unicode path in the header (winrar, winzip). This helps (a bit)\n // with the messy Windows' default compressed folders feature but\n // breaks on p7zip which doesn't seek the unicode path extra field.\n // So for now, UTF-8 everywhere !\n unicodePathExtraField =\n // Version\n decToHex(1, 1) +\n // NameCRC32\n decToHex(crc32(utfEncodedFileName), 4) +\n // UnicodeName\n utfEncodedFileName;\n\n extraFields +=\n // Info-ZIP Unicode Path Extra Field\n \"\\x75\\x70\" +\n // size\n decToHex(unicodePathExtraField.length, 2) +\n // content\n unicodePathExtraField;\n }\n\n if(useUTF8ForComment) {\n\n unicodeCommentExtraField =\n // Version\n decToHex(1, 1) +\n // CommentCRC32\n decToHex(this.crc32(utfEncodedComment), 4) +\n // UnicodeName\n utfEncodedComment;\n\n extraFields +=\n // Info-ZIP Unicode Path Extra Field\n \"\\x75\\x63\" +\n // size\n decToHex(unicodeCommentExtraField.length, 2) +\n // content\n unicodeCommentExtraField;\n }\n\n var header = \"\";\n\n // version needed to extract\n header += \"\\x0A\\x00\";\n // general purpose bit flag\n // set bit 11 if utf8\n header += (useUTF8ForFileName || useUTF8ForComment) ? \"\\x00\\x08\" : \"\\x00\\x00\";\n // compression method\n header += compressedObject.compressionMethod;\n // last mod file time\n header += decToHex(dosTime, 2);\n // last mod file date\n header += decToHex(dosDate, 2);\n // crc-32\n header += decToHex(compressedObject.crc32, 4);\n // compressed size\n header += decToHex(compressedObject.compressedSize, 4);\n // uncompressed size\n header += decToHex(compressedObject.uncompressedSize, 4);\n // file name length\n header += decToHex(utfEncodedFileName.length, 2);\n // extra field length\n header += decToHex(extraFields.length, 2);\n\n\n var fileRecord = signature.LOCAL_FILE_HEADER + header + utfEncodedFileName + extraFields;\n\n var dirRecord = signature.CENTRAL_FILE_HEADER +\n // version made by (00: DOS)\n \"\\x14\\x00\" +\n // file header (common to file and central directory)\n header +\n // file comment length\n decToHex(utfEncodedComment.length, 2) +\n // disk number start\n \"\\x00\\x00\" +\n // internal file attributes TODO\n \"\\x00\\x00\" +\n // external file attributes\n (dir === true ? \"\\x10\\x00\\x00\\x00\" : \"\\x00\\x00\\x00\\x00\") +\n // relative offset of local header\n decToHex(offset, 4) +\n // file name\n utfEncodedFileName +\n // extra field\n extraFields +\n // file comment\n utfEncodedComment;\n\n return {\n fileRecord: fileRecord,\n dirRecord: dirRecord,\n compressedObject: compressedObject\n };\n};\n\n\n// return the actual prototype of JSZip\nvar out = {\n /**\n * Read an existing zip and merge the data in the current JSZip object.\n * The implementation is in jszip-load.js, don't forget to include it.\n * @param {String|ArrayBuffer|Uint8Array|Buffer} stream The stream to load\n * @param {Object} options Options for loading the stream.\n * options.base64 : is the stream in base64 ? default : false\n * @return {JSZip} the current JSZip object\n */\n load: function(stream, options) {\n throw new Error(\"Load method is not defined. Is the file jszip-load.js included ?\");\n },\n\n /**\n * Filter nested files/folders with the specified function.\n * @param {Function} search the predicate to use :\n * function (relativePath, file) {...}\n * It takes 2 arguments : the relative path and the file.\n * @return {Array} An array of matching elements.\n */\n filter: function(search) {\n var result = [],\n filename, relativePath, file, fileClone;\n for (filename in this.files) {\n if (!this.files.hasOwnProperty(filename)) {\n continue;\n }\n file = this.files[filename];\n // return a new object, don't let the user mess with our internal objects :)\n fileClone = new ZipObject(file.name, file._data, extend(file.options));\n relativePath = filename.slice(this.root.length, filename.length);\n if (filename.slice(0, this.root.length) === this.root && // the file is in the current root\n search(relativePath, fileClone)) { // and the file matches the function\n result.push(fileClone);\n }\n }\n return result;\n },\n\n /**\n * Add a file to the zip file, or search a file.\n * @param {string|RegExp} name The name of the file to add (if data is defined),\n * the name of the file to find (if no data) or a regex to match files.\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data The file data, either raw or base64 encoded\n * @param {Object} o File options\n * @return {JSZip|Object|Array} this JSZip object (when adding a file),\n * a file (when searching by string) or an array of files (when searching by regex).\n */\n file: function(name, data, o) {\n if (arguments.length === 1) {\n if (utils.isRegExp(name)) {\n var regexp = name;\n return this.filter(function(relativePath, file) {\n return !file.dir && regexp.test(relativePath);\n });\n }\n else { // text\n return this.filter(function(relativePath, file) {\n return !file.dir && relativePath === name;\n })[0] || null;\n }\n }\n else { // more than one argument : we have data !\n name = this.root + name;\n fileAdd.call(this, name, data, o);\n }\n return this;\n },\n\n /**\n * Add a directory to the zip file, or search.\n * @param {String|RegExp} arg The name of the directory to add, or a regex to search folders.\n * @return {JSZip} an object with the new directory as the root, or an array containing matching folders.\n */\n folder: function(arg) {\n if (!arg) {\n return this;\n }\n\n if (utils.isRegExp(arg)) {\n return this.filter(function(relativePath, file) {\n return file.dir && arg.test(relativePath);\n });\n }\n\n // else, name is a new folder\n var name = this.root + arg;\n var newFolder = folderAdd.call(this, name);\n\n // Allow chaining by returning a new object with this folder as the root\n var ret = this.clone();\n ret.root = newFolder.name;\n return ret;\n },\n\n /**\n * Delete a file, or a directory and all sub-files, from the zip\n * @param {string} name the name of the file to delete\n * @return {JSZip} this JSZip object\n */\n remove: function(name) {\n name = this.root + name;\n var file = this.files[name];\n if (!file) {\n // Look for any folders\n if (name.slice(-1) != \"/\") {\n name += \"/\";\n }\n file = this.files[name];\n }\n\n if (file && !file.dir) {\n // file\n delete this.files[name];\n } else {\n // maybe a folder, delete recursively\n var kids = this.filter(function(relativePath, file) {\n return file.name.slice(0, name.length) === name;\n });\n for (var i = 0; i < kids.length; i++) {\n delete this.files[kids[i].name];\n }\n }\n\n return this;\n },\n\n /**\n * Generate the complete zip file\n * @param {Object} options the options to generate the zip file :\n * - base64, (deprecated, use type instead) true to generate base64.\n * - compression, \"STORE\" by default.\n * - type, \"base64\" by default. Values are : string, base64, uint8array, arraybuffer, blob.\n * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the zip file\n */\n generate: function(options) {\n options = extend(options || {}, {\n base64: true,\n compression: \"STORE\",\n type: \"base64\",\n comment: null\n });\n\n utils.checkSupport(options.type);\n\n var zipData = [],\n localDirLength = 0,\n centralDirLength = 0,\n writer, i,\n utfEncodedComment = utils.transformTo(\"string\", this.utf8encode(options.comment || this.comment || \"\"));\n\n // first, generate all the zip parts.\n for (var name in this.files) {\n if (!this.files.hasOwnProperty(name)) {\n continue;\n }\n var file = this.files[name];\n\n var compressionName = file.options.compression || options.compression.toUpperCase();\n var compression = compressions[compressionName];\n if (!compression) {\n throw new Error(compressionName + \" is not a valid compression method !\");\n }\n\n var compressedObject = generateCompressedObjectFrom.call(this, file, compression);\n\n var zipPart = generateZipParts.call(this, name, file, compressedObject, localDirLength);\n localDirLength += zipPart.fileRecord.length + compressedObject.compressedSize;\n centralDirLength += zipPart.dirRecord.length;\n zipData.push(zipPart);\n }\n\n var dirEnd = \"\";\n\n // end of central dir signature\n dirEnd = signature.CENTRAL_DIRECTORY_END +\n // number of this disk\n \"\\x00\\x00\" +\n // number of the disk with the start of the central directory\n \"\\x00\\x00\" +\n // total number of entries in the central directory on this disk\n decToHex(zipData.length, 2) +\n // total number of entries in the central directory\n decToHex(zipData.length, 2) +\n // size of the central directory 4 bytes\n decToHex(centralDirLength, 4) +\n // offset of start of central directory with respect to the starting disk number\n decToHex(localDirLength, 4) +\n // .ZIP file comment length\n decToHex(utfEncodedComment.length, 2) +\n // .ZIP file comment\n utfEncodedComment;\n\n\n // we have all the parts (and the total length)\n // time to create a writer !\n var typeName = options.type.toLowerCase();\n if(typeName===\"uint8array\"||typeName===\"arraybuffer\"||typeName===\"blob\"||typeName===\"nodebuffer\") {\n writer = new Uint8ArrayWriter(localDirLength + centralDirLength + dirEnd.length);\n }else{\n writer = new StringWriter(localDirLength + centralDirLength + dirEnd.length);\n }\n\n for (i = 0; i < zipData.length; i++) {\n writer.append(zipData[i].fileRecord);\n writer.append(zipData[i].compressedObject.compressedContent);\n }\n for (i = 0; i < zipData.length; i++) {\n writer.append(zipData[i].dirRecord);\n }\n\n writer.append(dirEnd);\n\n var zip = writer.finalize();\n\n\n\n switch(options.type.toLowerCase()) {\n // case \"zip is an Uint8Array\"\n case \"uint8array\" :\n case \"arraybuffer\" :\n case \"nodebuffer\" :\n return utils.transformTo(options.type.toLowerCase(), zip);\n case \"blob\" :\n return utils.arrayBuffer2Blob(utils.transformTo(\"arraybuffer\", zip));\n // case \"zip is a string\"\n case \"base64\" :\n return (options.base64) ? base64.encode(zip) : zip;\n default : // case \"string\" :\n return zip;\n }\n\n },\n\n /**\n * @deprecated\n * This method will be removed in a future version without replacement.\n */\n crc32: function (input, crc) {\n return crc32(input, crc);\n },\n\n /**\n * @deprecated\n * This method will be removed in a future version without replacement.\n */\n utf8encode: function (string) {\n return utils.transformTo(\"string\", utf8.utf8encode(string));\n },\n\n /**\n * @deprecated\n * This method will be removed in a future version without replacement.\n */\n utf8decode: function (input) {\n return utf8.utf8decode(input);\n }\n};\nmodule.exports = out;\n\n},{\"./base64\":1,\"./compressedObject\":2,\"./compressions\":3,\"./crc32\":4,\"./defaults\":6,\"./nodeBuffer\":11,\"./signature\":14,\"./stringWriter\":16,\"./support\":17,\"./uint8ArrayWriter\":19,\"./utf8\":20,\"./utils\":21}],14:[function(_dereq_,module,exports){\n'use strict';\nexports.LOCAL_FILE_HEADER = \"PK\\x03\\x04\";\nexports.CENTRAL_FILE_HEADER = \"PK\\x01\\x02\";\nexports.CENTRAL_DIRECTORY_END = \"PK\\x05\\x06\";\nexports.ZIP64_CENTRAL_DIRECTORY_LOCATOR = \"PK\\x06\\x07\";\nexports.ZIP64_CENTRAL_DIRECTORY_END = \"PK\\x06\\x06\";\nexports.DATA_DESCRIPTOR = \"PK\\x07\\x08\";\n\n},{}],15:[function(_dereq_,module,exports){\n'use strict';\nvar DataReader = _dereq_('./dataReader');\nvar utils = _dereq_('./utils');\n\nfunction StringReader(data, optimizedBinaryString) {\n this.data = data;\n if (!optimizedBinaryString) {\n this.data = utils.string2binary(this.data);\n }\n this.length = this.data.length;\n this.index = 0;\n}\nStringReader.prototype = new DataReader();\n/**\n * @see DataReader.byteAt\n */\nStringReader.prototype.byteAt = function(i) {\n return this.data.charCodeAt(i);\n};\n/**\n * @see DataReader.lastIndexOfSignature\n */\nStringReader.prototype.lastIndexOfSignature = function(sig) {\n return this.data.lastIndexOf(sig);\n};\n/**\n * @see DataReader.readData\n */\nStringReader.prototype.readData = function(size) {\n this.checkOffset(size);\n // this will work because the constructor applied the \"& 0xff\" mask.\n var result = this.data.slice(this.index, this.index + size);\n this.index += size;\n return result;\n};\nmodule.exports = StringReader;\n\n},{\"./dataReader\":5,\"./utils\":21}],16:[function(_dereq_,module,exports){\n'use strict';\n\nvar utils = _dereq_('./utils');\n\n/**\n * An object to write any content to a string.\n * @constructor\n */\nvar StringWriter = function() {\n this.data = [];\n};\nStringWriter.prototype = {\n /**\n * Append any content to the current string.\n * @param {Object} input the content to add.\n */\n append: function(input) {\n input = utils.transformTo(\"string\", input);\n this.data.push(input);\n },\n /**\n * Finalize the construction an return the result.\n * @return {string} the generated string.\n */\n finalize: function() {\n return this.data.join(\"\");\n }\n};\n\nmodule.exports = StringWriter;\n\n},{\"./utils\":21}],17:[function(_dereq_,module,exports){\n(function (Buffer){\n'use strict';\nexports.base64 = true;\nexports.array = true;\nexports.string = true;\nexports.arraybuffer = typeof ArrayBuffer !== \"undefined\" && typeof Uint8Array !== \"undefined\";\n// contains true if JSZip can read/generate nodejs Buffer, false otherwise.\n// Browserify will provide a Buffer implementation for browsers, which is\n// an augmented Uint8Array (i.e., can be used as either Buffer or U8).\nexports.nodebuffer = typeof Buffer !== \"undefined\";\n// contains true if JSZip can read/generate Uint8Array, false otherwise.\nexports.uint8array = typeof Uint8Array !== \"undefined\";\n\nif (typeof ArrayBuffer === \"undefined\") {\n exports.blob = false;\n}\nelse {\n var buffer = new ArrayBuffer(0);\n try {\n exports.blob = new Blob([buffer], {\n type: \"application/zip\"\n }).size === 0;\n }\n catch (e) {\n try {\n var Builder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder;\n var builder = new Builder();\n builder.append(buffer);\n exports.blob = builder.getBlob('application/zip').size === 0;\n }\n catch (e) {\n exports.blob = false;\n }\n }\n}\n\n}).call(this,(typeof Buffer !== \"undefined\" ? Buffer : undefined))\n},{}],18:[function(_dereq_,module,exports){\n'use strict';\nvar DataReader = _dereq_('./dataReader');\n\nfunction Uint8ArrayReader(data) {\n if (data) {\n this.data = data;\n this.length = this.data.length;\n this.index = 0;\n }\n}\nUint8ArrayReader.prototype = new DataReader();\n/**\n * @see DataReader.byteAt\n */\nUint8ArrayReader.prototype.byteAt = function(i) {\n return this.data[i];\n};\n/**\n * @see DataReader.lastIndexOfSignature\n */\nUint8ArrayReader.prototype.lastIndexOfSignature = function(sig) {\n var sig0 = sig.charCodeAt(0),\n sig1 = sig.charCodeAt(1),\n sig2 = sig.charCodeAt(2),\n sig3 = sig.charCodeAt(3);\n for (var i = this.length - 4; i >= 0; --i) {\n if (this.data[i] === sig0 && this.data[i + 1] === sig1 && this.data[i + 2] === sig2 && this.data[i + 3] === sig3) {\n return i;\n }\n }\n\n return -1;\n};\n/**\n * @see DataReader.readData\n */\nUint8ArrayReader.prototype.readData = function(size) {\n this.checkOffset(size);\n if(size === 0) {\n // in IE10, when using subarray(idx, idx), we get the array [0x00] instead of [].\n return new Uint8Array(0);\n }\n var result = this.data.subarray(this.index, this.index + size);\n this.index += size;\n return result;\n};\nmodule.exports = Uint8ArrayReader;\n\n},{\"./dataReader\":5}],19:[function(_dereq_,module,exports){\n'use strict';\n\nvar utils = _dereq_('./utils');\n\n/**\n * An object to write any content to an Uint8Array.\n * @constructor\n * @param {number} length The length of the array.\n */\nvar Uint8ArrayWriter = function(length) {\n this.data = new Uint8Array(length);\n this.index = 0;\n};\nUint8ArrayWriter.prototype = {\n /**\n * Append any content to the current array.\n * @param {Object} input the content to add.\n */\n append: function(input) {\n if (input.length !== 0) {\n // with an empty Uint8Array, Opera fails with a \"Offset larger than array size\"\n input = utils.transformTo(\"uint8array\", input);\n this.data.set(input, this.index);\n this.index += input.length;\n }\n },\n /**\n * Finalize the construction an return the result.\n * @return {Uint8Array} the generated array.\n */\n finalize: function() {\n return this.data;\n }\n};\n\nmodule.exports = Uint8ArrayWriter;\n\n},{\"./utils\":21}],20:[function(_dereq_,module,exports){\n'use strict';\n\nvar utils = _dereq_('./utils');\nvar support = _dereq_('./support');\nvar nodeBuffer = _dereq_('./nodeBuffer');\n\n/**\n * The following functions come from pako, from pako/lib/utils/strings\n * released under the MIT license, see pako https://github.com/nodeca/pako/\n */\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nvar _utf8len = new Array(256);\nfor (var i=0; i<256; i++) {\n _utf8len[i] = (i >= 252 ? 6 : i >= 248 ? 5 : i >= 240 ? 4 : i >= 224 ? 3 : i >= 192 ? 2 : 1);\n}\n_utf8len[254]=_utf8len[254]=1; // Invalid sequence start\n\n// convert string to array (typed, when possible)\nvar string2buf = function (str) {\n var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n // count binary size\n for (m_pos = 0; m_pos < str_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if (((c & 0xfc00) === 0xd800) && (m_pos+1 < str_len)) {\n c2 = str.charCodeAt(m_pos+1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n buf_len += (c < 0x80) ? 1 : ((c < 0x800) ? 2 : ((c < 0x10000) ? 3 : 4));\n }\n\n // allocate buffer\n if (support.uint8array) {\n buf = new Uint8Array(buf_len);\n } else {\n buf = new Array(buf_len);\n }\n\n // convert\n for (i=0, m_pos = 0; i < buf_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) {\n c2 = str.charCodeAt(m_pos+1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n if (c < 0x80) {\n /* one byte */\n buf[i++] = c;\n } else if (c < 0x800) {\n /* two bytes */\n buf[i++] = 0xC0 | (c >>> 6);\n buf[i++] = 0x80 | (c & 0x3f);\n } else if (c < 0x10000) {\n /* three bytes */\n buf[i++] = 0xE0 | (c >>> 12);\n buf[i++] = 0x80 | ((c >>> 6) & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n } else {\n /* four bytes */\n buf[i++] = 0xf0 | (c >>> 18);\n buf[i++] = 0x80 | ((c >>> 12) & 0x3f);\n buf[i++] = 0x80 | ((c >>> 6) & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n }\n }\n\n return buf;\n};\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max - length limit (mandatory);\nvar utf8border = function(buf, max) {\n var pos;\n\n max = max || buf.length;\n if (max > buf.length) { max = buf.length; }\n\n // go back from last position, until start of sequence found\n pos = max-1;\n while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n // Fuckup - very small and broken sequence,\n // return max, because we should return something anyway.\n if (pos < 0) { return max; }\n\n // If we came to start of buffer - that means vuffer is too small,\n // return max too.\n if (pos === 0) { return max; }\n\n return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n\n// convert array to string\nvar buf2string = function (buf) {\n var str, i, out, c, c_len;\n var len = buf.length;\n\n // Reserve max possible length (2 words per char)\n // NB: by unknown reasons, Array is significantly faster for\n // String.fromCharCode.apply than Uint16Array.\n var utf16buf = new Array(len*2);\n\n for (out=0, i=0; i 4) { utf16buf[out++] = 0xfffd; i += c_len-1; continue; }\n\n // apply mask on first byte\n c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n // join the rest\n while (c_len > 1 && i < len) {\n c = (c << 6) | (buf[i++] & 0x3f);\n c_len--;\n }\n\n // terminated by end of string?\n if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n if (c < 0x10000) {\n utf16buf[out++] = c;\n } else {\n c -= 0x10000;\n utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n }\n }\n\n // shrinkBuf(utf16buf, out)\n if (utf16buf.length !== out) {\n if(utf16buf.subarray) {\n utf16buf = utf16buf.subarray(0, out);\n } else {\n utf16buf.length = out;\n }\n }\n\n // return String.fromCharCode.apply(null, utf16buf);\n return utils.applyFromCharCode(utf16buf);\n};\n\n\n// That's all for the pako functions.\n\n\n/**\n * Transform a javascript string into an array (typed if possible) of bytes,\n * UTF-8 encoded.\n * @param {String} str the string to encode\n * @return {Array|Uint8Array|Buffer} the UTF-8 encoded string.\n */\nexports.utf8encode = function utf8encode(str) {\n if (support.nodebuffer) {\n return nodeBuffer(str, \"utf-8\");\n }\n\n return string2buf(str);\n};\n\n\n/**\n * Transform a bytes array (or a representation) representing an UTF-8 encoded\n * string into a javascript string.\n * @param {Array|Uint8Array|Buffer} buf the data de decode\n * @return {String} the decoded string.\n */\nexports.utf8decode = function utf8decode(buf) {\n if (support.nodebuffer) {\n return utils.transformTo(\"nodebuffer\", buf).toString(\"utf-8\");\n }\n\n buf = utils.transformTo(support.uint8array ? \"uint8array\" : \"array\", buf);\n\n // return buf2string(buf);\n // Chrome prefers to work with \"small\" chunks of data\n // for the method buf2string.\n // Firefox and Chrome has their own shortcut, IE doesn't seem to really care.\n var result = [], k = 0, len = buf.length, chunk = 65536;\n while (k < len) {\n var nextBoundary = utf8border(buf, Math.min(k + chunk, len));\n if (support.uint8array) {\n result.push(buf2string(buf.subarray(k, nextBoundary)));\n } else {\n result.push(buf2string(buf.slice(k, nextBoundary)));\n }\n k = nextBoundary;\n }\n return result.join(\"\");\n\n};\n// vim: set shiftwidth=4 softtabstop=4:\n\n},{\"./nodeBuffer\":11,\"./support\":17,\"./utils\":21}],21:[function(_dereq_,module,exports){\n'use strict';\nvar support = _dereq_('./support');\nvar compressions = _dereq_('./compressions');\nvar nodeBuffer = _dereq_('./nodeBuffer');\n/**\n * Convert a string to a \"binary string\" : a string containing only char codes between 0 and 255.\n * @param {string} str the string to transform.\n * @return {String} the binary string.\n */\nexports.string2binary = function(str) {\n var result = \"\";\n for (var i = 0; i < str.length; i++) {\n result += String.fromCharCode(str.charCodeAt(i) & 0xff);\n }\n return result;\n};\nexports.arrayBuffer2Blob = function(buffer) {\n exports.checkSupport(\"blob\");\n\n try {\n // Blob constructor\n return new Blob([buffer], {\n type: \"application/zip\"\n });\n }\n catch (e) {\n\n try {\n // deprecated, browser only, old way\n var Builder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder;\n var builder = new Builder();\n builder.append(buffer);\n return builder.getBlob('application/zip');\n }\n catch (e) {\n\n // well, fuck ?!\n throw new Error(\"Bug : can't construct the Blob.\");\n }\n }\n\n\n};\n/**\n * The identity function.\n * @param {Object} input the input.\n * @return {Object} the same input.\n */\nfunction identity(input) {\n return input;\n}\n\n/**\n * Fill in an array with a string.\n * @param {String} str the string to use.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to fill in (will be mutated).\n * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated array.\n */\nfunction stringToArrayLike(str, array) {\n for (var i = 0; i < str.length; ++i) {\n array[i] = str.charCodeAt(i) & 0xFF;\n }\n return array;\n}\n\n/**\n * Transform an array-like object to a string.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.\n * @return {String} the result.\n */\nfunction arrayLikeToString(array) {\n // Performances notes :\n // --------------------\n // String.fromCharCode.apply(null, array) is the fastest, see\n // see http://jsperf.com/converting-a-uint8array-to-a-string/2\n // but the stack is limited (and we can get huge arrays !).\n //\n // result += String.fromCharCode(array[i]); generate too many strings !\n //\n // This code is inspired by http://jsperf.com/arraybuffer-to-string-apply-performance/2\n var chunk = 65536;\n var result = [],\n len = array.length,\n type = exports.getTypeOf(array),\n k = 0,\n canUseApply = true;\n try {\n switch(type) {\n case \"uint8array\":\n String.fromCharCode.apply(null, new Uint8Array(0));\n break;\n case \"nodebuffer\":\n String.fromCharCode.apply(null, nodeBuffer(0));\n break;\n }\n } catch(e) {\n canUseApply = false;\n }\n\n // no apply : slow and painful algorithm\n // default browser on android 4.*\n if (!canUseApply) {\n var resultStr = \"\";\n for(var i = 0; i < array.length;i++) {\n resultStr += String.fromCharCode(array[i]);\n }\n return resultStr;\n }\n while (k < len && chunk > 1) {\n try {\n if (type === \"array\" || type === \"nodebuffer\") {\n result.push(String.fromCharCode.apply(null, array.slice(k, Math.min(k + chunk, len))));\n }\n else {\n result.push(String.fromCharCode.apply(null, array.subarray(k, Math.min(k + chunk, len))));\n }\n k += chunk;\n }\n catch (e) {\n chunk = Math.floor(chunk / 2);\n }\n }\n return result.join(\"\");\n}\n\nexports.applyFromCharCode = arrayLikeToString;\n\n\n/**\n * Copy the data from an array-like to an other array-like.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayFrom the origin array.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayTo the destination array which will be mutated.\n * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated destination array.\n */\nfunction arrayLikeToArrayLike(arrayFrom, arrayTo) {\n for (var i = 0; i < arrayFrom.length; i++) {\n arrayTo[i] = arrayFrom[i];\n }\n return arrayTo;\n}\n\n// a matrix containing functions to transform everything into everything.\nvar transform = {};\n\n// string to ?\ntransform[\"string\"] = {\n \"string\": identity,\n \"array\": function(input) {\n return stringToArrayLike(input, new Array(input.length));\n },\n \"arraybuffer\": function(input) {\n return transform[\"string\"][\"uint8array\"](input).buffer;\n },\n \"uint8array\": function(input) {\n return stringToArrayLike(input, new Uint8Array(input.length));\n },\n \"nodebuffer\": function(input) {\n return stringToArrayLike(input, nodeBuffer(input.length));\n }\n};\n\n// array to ?\ntransform[\"array\"] = {\n \"string\": arrayLikeToString,\n \"array\": identity,\n \"arraybuffer\": function(input) {\n return (new Uint8Array(input)).buffer;\n },\n \"uint8array\": function(input) {\n return new Uint8Array(input);\n },\n \"nodebuffer\": function(input) {\n return nodeBuffer(input);\n }\n};\n\n// arraybuffer to ?\ntransform[\"arraybuffer\"] = {\n \"string\": function(input) {\n return arrayLikeToString(new Uint8Array(input));\n },\n \"array\": function(input) {\n return arrayLikeToArrayLike(new Uint8Array(input), new Array(input.byteLength));\n },\n \"arraybuffer\": identity,\n \"uint8array\": function(input) {\n return new Uint8Array(input);\n },\n \"nodebuffer\": function(input) {\n return nodeBuffer(new Uint8Array(input));\n }\n};\n\n// uint8array to ?\ntransform[\"uint8array\"] = {\n \"string\": arrayLikeToString,\n \"array\": function(input) {\n return arrayLikeToArrayLike(input, new Array(input.length));\n },\n \"arraybuffer\": function(input) {\n return input.buffer;\n },\n \"uint8array\": identity,\n \"nodebuffer\": function(input) {\n return nodeBuffer(input);\n }\n};\n\n// nodebuffer to ?\ntransform[\"nodebuffer\"] = {\n \"string\": arrayLikeToString,\n \"array\": function(input) {\n return arrayLikeToArrayLike(input, new Array(input.length));\n },\n \"arraybuffer\": function(input) {\n return transform[\"nodebuffer\"][\"uint8array\"](input).buffer;\n },\n \"uint8array\": function(input) {\n return arrayLikeToArrayLike(input, new Uint8Array(input.length));\n },\n \"nodebuffer\": identity\n};\n\n/**\n * Transform an input into any type.\n * The supported output type are : string, array, uint8array, arraybuffer, nodebuffer.\n * If no output type is specified, the unmodified input will be returned.\n * @param {String} outputType the output type.\n * @param {String|Array|ArrayBuffer|Uint8Array|Buffer} input the input to convert.\n * @throws {Error} an Error if the browser doesn't support the requested output type.\n */\nexports.transformTo = function(outputType, input) {\n if (!input) {\n // undefined, null, etc\n // an empty string won't harm.\n input = \"\";\n }\n if (!outputType) {\n return input;\n }\n exports.checkSupport(outputType);\n var inputType = exports.getTypeOf(input);\n var result = transform[inputType][outputType](input);\n return result;\n};\n\n/**\n * Return the type of the input.\n * The type will be in a format valid for JSZip.utils.transformTo : string, array, uint8array, arraybuffer.\n * @param {Object} input the input to identify.\n * @return {String} the (lowercase) type of the input.\n */\nexports.getTypeOf = function(input) {\n if (typeof input === \"string\") {\n return \"string\";\n }\n if (Object.prototype.toString.call(input) === \"[object Array]\") {\n return \"array\";\n }\n if (support.nodebuffer && nodeBuffer.test(input)) {\n return \"nodebuffer\";\n }\n if (support.uint8array && input instanceof Uint8Array) {\n return \"uint8array\";\n }\n if (support.arraybuffer && input instanceof ArrayBuffer) {\n return \"arraybuffer\";\n }\n};\n\n/**\n * Throw an exception if the type is not supported.\n * @param {String} type the type to check.\n * @throws {Error} an Error if the browser doesn't support the requested type.\n */\nexports.checkSupport = function(type) {\n var supported = support[type.toLowerCase()];\n if (!supported) {\n throw new Error(type + \" is not supported by this browser\");\n }\n};\nexports.MAX_VALUE_16BITS = 65535;\nexports.MAX_VALUE_32BITS = -1; // well, \"\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\" is parsed as -1\n\n/**\n * Prettify a string read as binary.\n * @param {string} str the string to prettify.\n * @return {string} a pretty string.\n */\nexports.pretty = function(str) {\n var res = '',\n code, i;\n for (i = 0; i < (str || \"\").length; i++) {\n code = str.charCodeAt(i);\n res += '\\\\x' + (code < 16 ? \"0\" : \"\") + code.toString(16).toUpperCase();\n }\n return res;\n};\n\n/**\n * Find a compression registered in JSZip.\n * @param {string} compressionMethod the method magic to find.\n * @return {Object|null} the JSZip compression object, null if none found.\n */\nexports.findCompression = function(compressionMethod) {\n for (var method in compressions) {\n if (!compressions.hasOwnProperty(method)) {\n continue;\n }\n if (compressions[method].magic === compressionMethod) {\n return compressions[method];\n }\n }\n return null;\n};\n/**\n* Cross-window, cross-Node-context regular expression detection\n* @param {Object} object Anything\n* @return {Boolean} true if the object is a regular expression,\n* false otherwise\n*/\nexports.isRegExp = function (object) {\n return Object.prototype.toString.call(object) === \"[object RegExp]\";\n};\n\n\n},{\"./compressions\":3,\"./nodeBuffer\":11,\"./support\":17}],22:[function(_dereq_,module,exports){\n'use strict';\nvar StringReader = _dereq_('./stringReader');\nvar NodeBufferReader = _dereq_('./nodeBufferReader');\nvar Uint8ArrayReader = _dereq_('./uint8ArrayReader');\nvar utils = _dereq_('./utils');\nvar sig = _dereq_('./signature');\nvar ZipEntry = _dereq_('./zipEntry');\nvar support = _dereq_('./support');\nvar jszipProto = _dereq_('./object');\n// class ZipEntries {{{\n/**\n * All the entries in the zip file.\n * @constructor\n * @param {String|ArrayBuffer|Uint8Array} data the binary stream to load.\n * @param {Object} loadOptions Options for loading the stream.\n */\nfunction ZipEntries(data, loadOptions) {\n this.files = [];\n this.loadOptions = loadOptions;\n if (data) {\n this.load(data);\n }\n}\nZipEntries.prototype = {\n /**\n * Check that the reader is on the speficied signature.\n * @param {string} expectedSignature the expected signature.\n * @throws {Error} if it is an other signature.\n */\n checkSignature: function(expectedSignature) {\n var signature = this.reader.readString(4);\n if (signature !== expectedSignature) {\n throw new Error(\"Corrupted zip or bug : unexpected signature \" + \"(\" + utils.pretty(signature) + \", expected \" + utils.pretty(expectedSignature) + \")\");\n }\n },\n /**\n * Read the end of the central directory.\n */\n readBlockEndOfCentral: function() {\n this.diskNumber = this.reader.readInt(2);\n this.diskWithCentralDirStart = this.reader.readInt(2);\n this.centralDirRecordsOnThisDisk = this.reader.readInt(2);\n this.centralDirRecords = this.reader.readInt(2);\n this.centralDirSize = this.reader.readInt(4);\n this.centralDirOffset = this.reader.readInt(4);\n\n this.zipCommentLength = this.reader.readInt(2);\n // warning : the encoding depends of the system locale\n // On a linux machine with LANG=en_US.utf8, this field is utf8 encoded.\n // On a windows machine, this field is encoded with the localized windows code page.\n this.zipComment = this.reader.readString(this.zipCommentLength);\n // To get consistent behavior with the generation part, we will assume that\n // this is utf8 encoded.\n this.zipComment = jszipProto.utf8decode(this.zipComment);\n },\n /**\n * Read the end of the Zip 64 central directory.\n * Not merged with the method readEndOfCentral :\n * The end of central can coexist with its Zip64 brother,\n * I don't want to read the wrong number of bytes !\n */\n readBlockZip64EndOfCentral: function() {\n this.zip64EndOfCentralSize = this.reader.readInt(8);\n this.versionMadeBy = this.reader.readString(2);\n this.versionNeeded = this.reader.readInt(2);\n this.diskNumber = this.reader.readInt(4);\n this.diskWithCentralDirStart = this.reader.readInt(4);\n this.centralDirRecordsOnThisDisk = this.reader.readInt(8);\n this.centralDirRecords = this.reader.readInt(8);\n this.centralDirSize = this.reader.readInt(8);\n this.centralDirOffset = this.reader.readInt(8);\n\n this.zip64ExtensibleData = {};\n var extraDataSize = this.zip64EndOfCentralSize - 44,\n index = 0,\n extraFieldId,\n extraFieldLength,\n extraFieldValue;\n while (index < extraDataSize) {\n extraFieldId = this.reader.readInt(2);\n extraFieldLength = this.reader.readInt(4);\n extraFieldValue = this.reader.readString(extraFieldLength);\n this.zip64ExtensibleData[extraFieldId] = {\n id: extraFieldId,\n length: extraFieldLength,\n value: extraFieldValue\n };\n }\n },\n /**\n * Read the end of the Zip 64 central directory locator.\n */\n readBlockZip64EndOfCentralLocator: function() {\n this.diskWithZip64CentralDirStart = this.reader.readInt(4);\n this.relativeOffsetEndOfZip64CentralDir = this.reader.readInt(8);\n this.disksCount = this.reader.readInt(4);\n if (this.disksCount > 1) {\n throw new Error(\"Multi-volumes zip are not supported\");\n }\n },\n /**\n * Read the local files, based on the offset read in the central part.\n */\n readLocalFiles: function() {\n var i, file;\n for (i = 0; i < this.files.length; i++) {\n file = this.files[i];\n this.reader.setIndex(file.localHeaderOffset);\n this.checkSignature(sig.LOCAL_FILE_HEADER);\n file.readLocalPart(this.reader);\n file.handleUTF8();\n }\n },\n /**\n * Read the central directory.\n */\n readCentralDir: function() {\n var file;\n\n this.reader.setIndex(this.centralDirOffset);\n while (this.reader.readString(4) === sig.CENTRAL_FILE_HEADER) {\n file = new ZipEntry({\n zip64: this.zip64\n }, this.loadOptions);\n file.readCentralPart(this.reader);\n this.files.push(file);\n }\n },\n /**\n * Read the end of central directory.\n */\n readEndOfCentral: function() {\n var offset = this.reader.lastIndexOfSignature(sig.CENTRAL_DIRECTORY_END);\n if (offset === -1) {\n throw new Error(\"Corrupted zip : can't find end of central directory\");\n }\n this.reader.setIndex(offset);\n this.checkSignature(sig.CENTRAL_DIRECTORY_END);\n this.readBlockEndOfCentral();\n\n\n /* extract from the zip spec :\n 4) If one of the fields in the end of central directory\n record is too small to hold required data, the field\n should be set to -1 (0xFFFF or 0xFFFFFFFF) and the\n ZIP64 format record should be created.\n 5) The end of central directory record and the\n Zip64 end of central directory locator record must\n reside on the same disk when splitting or spanning\n an archive.\n */\n if (this.diskNumber === utils.MAX_VALUE_16BITS || this.diskWithCentralDirStart === utils.MAX_VALUE_16BITS || this.centralDirRecordsOnThisDisk === utils.MAX_VALUE_16BITS || this.centralDirRecords === utils.MAX_VALUE_16BITS || this.centralDirSize === utils.MAX_VALUE_32BITS || this.centralDirOffset === utils.MAX_VALUE_32BITS) {\n this.zip64 = true;\n\n /*\n Warning : the zip64 extension is supported, but ONLY if the 64bits integer read from\n the zip file can fit into a 32bits integer. This cannot be solved : Javascript represents\n all numbers as 64-bit double precision IEEE 754 floating point numbers.\n So, we have 53bits for integers and bitwise operations treat everything as 32bits.\n see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Bitwise_Operators\n and http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf section 8.5\n */\n\n // should look for a zip64 EOCD locator\n offset = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR);\n if (offset === -1) {\n throw new Error(\"Corrupted zip : can't find the ZIP64 end of central directory locator\");\n }\n this.reader.setIndex(offset);\n this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR);\n this.readBlockZip64EndOfCentralLocator();\n\n // now the zip64 EOCD record\n this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir);\n this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_END);\n this.readBlockZip64EndOfCentral();\n }\n },\n prepareReader: function(data) {\n var type = utils.getTypeOf(data);\n if (type === \"string\" && !support.uint8array) {\n this.reader = new StringReader(data, this.loadOptions.optimizedBinaryString);\n }\n else if (type === \"nodebuffer\") {\n this.reader = new NodeBufferReader(data);\n }\n else {\n this.reader = new Uint8ArrayReader(utils.transformTo(\"uint8array\", data));\n }\n },\n /**\n * Read a zip file and create ZipEntries.\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the binary string representing a zip file.\n */\n load: function(data) {\n this.prepareReader(data);\n this.readEndOfCentral();\n this.readCentralDir();\n this.readLocalFiles();\n }\n};\n// }}} end of ZipEntries\nmodule.exports = ZipEntries;\n\n},{\"./nodeBufferReader\":12,\"./object\":13,\"./signature\":14,\"./stringReader\":15,\"./support\":17,\"./uint8ArrayReader\":18,\"./utils\":21,\"./zipEntry\":23}],23:[function(_dereq_,module,exports){\n'use strict';\nvar StringReader = _dereq_('./stringReader');\nvar utils = _dereq_('./utils');\nvar CompressedObject = _dereq_('./compressedObject');\nvar jszipProto = _dereq_('./object');\n// class ZipEntry {{{\n/**\n * An entry in the zip file.\n * @constructor\n * @param {Object} options Options of the current file.\n * @param {Object} loadOptions Options for loading the stream.\n */\nfunction ZipEntry(options, loadOptions) {\n this.options = options;\n this.loadOptions = loadOptions;\n}\nZipEntry.prototype = {\n /**\n * say if the file is encrypted.\n * @return {boolean} true if the file is encrypted, false otherwise.\n */\n isEncrypted: function() {\n // bit 1 is set\n return (this.bitFlag & 0x0001) === 0x0001;\n },\n /**\n * say if the file has utf-8 filename/comment.\n * @return {boolean} true if the filename/comment is in utf-8, false otherwise.\n */\n useUTF8: function() {\n // bit 11 is set\n return (this.bitFlag & 0x0800) === 0x0800;\n },\n /**\n * Prepare the function used to generate the compressed content from this ZipFile.\n * @param {DataReader} reader the reader to use.\n * @param {number} from the offset from where we should read the data.\n * @param {number} length the length of the data to read.\n * @return {Function} the callback to get the compressed content (the type depends of the DataReader class).\n */\n prepareCompressedContent: function(reader, from, length) {\n return function() {\n var previousIndex = reader.index;\n reader.setIndex(from);\n var compressedFileData = reader.readData(length);\n reader.setIndex(previousIndex);\n\n return compressedFileData;\n };\n },\n /**\n * Prepare the function used to generate the uncompressed content from this ZipFile.\n * @param {DataReader} reader the reader to use.\n * @param {number} from the offset from where we should read the data.\n * @param {number} length the length of the data to read.\n * @param {JSZip.compression} compression the compression used on this file.\n * @param {number} uncompressedSize the uncompressed size to expect.\n * @return {Function} the callback to get the uncompressed content (the type depends of the DataReader class).\n */\n prepareContent: function(reader, from, length, compression, uncompressedSize) {\n return function() {\n\n var compressedFileData = utils.transformTo(compression.uncompressInputType, this.getCompressedContent());\n var uncompressedFileData = compression.uncompress(compressedFileData);\n\n if (uncompressedFileData.length !== uncompressedSize) {\n throw new Error(\"Bug : uncompressed data size mismatch\");\n }\n\n return uncompressedFileData;\n };\n },\n /**\n * Read the local part of a zip file and add the info in this object.\n * @param {DataReader} reader the reader to use.\n */\n readLocalPart: function(reader) {\n var compression, localExtraFieldsLength;\n\n // we already know everything from the central dir !\n // If the central dir data are false, we are doomed.\n // On the bright side, the local part is scary : zip64, data descriptors, both, etc.\n // The less data we get here, the more reliable this should be.\n // Let's skip the whole header and dash to the data !\n reader.skip(22);\n // in some zip created on windows, the filename stored in the central dir contains \\ instead of /.\n // Strangely, the filename here is OK.\n // I would love to treat these zip files as corrupted (see http://www.info-zip.org/FAQ.html#backslashes\n // or APPNOTE#4.4.17.1, \"All slashes MUST be forward slashes '/'\") but there are a lot of bad zip generators...\n // Search \"unzip mismatching \"local\" filename continuing with \"central\" filename version\" on\n // the internet.\n //\n // I think I see the logic here : the central directory is used to display\n // content and the local directory is used to extract the files. Mixing / and \\\n // may be used to display \\ to windows users and use / when extracting the files.\n // Unfortunately, this lead also to some issues : http://seclists.org/fulldisclosure/2009/Sep/394\n this.fileNameLength = reader.readInt(2);\n localExtraFieldsLength = reader.readInt(2); // can't be sure this will be the same as the central dir\n this.fileName = reader.readString(this.fileNameLength);\n reader.skip(localExtraFieldsLength);\n\n if (this.compressedSize == -1 || this.uncompressedSize == -1) {\n throw new Error(\"Bug or corrupted zip : didn't get enough informations from the central directory \" + \"(compressedSize == -1 || uncompressedSize == -1)\");\n }\n\n compression = utils.findCompression(this.compressionMethod);\n if (compression === null) { // no compression found\n throw new Error(\"Corrupted zip : compression \" + utils.pretty(this.compressionMethod) + \" unknown (inner file : \" + this.fileName + \")\");\n }\n this.decompressed = new CompressedObject();\n this.decompressed.compressedSize = this.compressedSize;\n this.decompressed.uncompressedSize = this.uncompressedSize;\n this.decompressed.crc32 = this.crc32;\n this.decompressed.compressionMethod = this.compressionMethod;\n this.decompressed.getCompressedContent = this.prepareCompressedContent(reader, reader.index, this.compressedSize, compression);\n this.decompressed.getContent = this.prepareContent(reader, reader.index, this.compressedSize, compression, this.uncompressedSize);\n\n // we need to compute the crc32...\n if (this.loadOptions.checkCRC32) {\n this.decompressed = utils.transformTo(\"string\", this.decompressed.getContent());\n if (jszipProto.crc32(this.decompressed) !== this.crc32) {\n throw new Error(\"Corrupted zip : CRC32 mismatch\");\n }\n }\n },\n\n /**\n * Read the central part of a zip file and add the info in this object.\n * @param {DataReader} reader the reader to use.\n */\n readCentralPart: function(reader) {\n this.versionMadeBy = reader.readString(2);\n this.versionNeeded = reader.readInt(2);\n this.bitFlag = reader.readInt(2);\n this.compressionMethod = reader.readString(2);\n this.date = reader.readDate();\n this.crc32 = reader.readInt(4);\n this.compressedSize = reader.readInt(4);\n this.uncompressedSize = reader.readInt(4);\n this.fileNameLength = reader.readInt(2);\n this.extraFieldsLength = reader.readInt(2);\n this.fileCommentLength = reader.readInt(2);\n this.diskNumberStart = reader.readInt(2);\n this.internalFileAttributes = reader.readInt(2);\n this.externalFileAttributes = reader.readInt(4);\n this.localHeaderOffset = reader.readInt(4);\n\n if (this.isEncrypted()) {\n throw new Error(\"Encrypted zip are not supported\");\n }\n\n this.fileName = reader.readString(this.fileNameLength);\n this.readExtraFields(reader);\n this.parseZIP64ExtraField(reader);\n this.fileComment = reader.readString(this.fileCommentLength);\n\n // warning, this is true only for zip with madeBy == DOS (plateform dependent feature)\n this.dir = this.externalFileAttributes & 0x00000010 ? true : false;\n },\n /**\n * Parse the ZIP64 extra field and merge the info in the current ZipEntry.\n * @param {DataReader} reader the reader to use.\n */\n parseZIP64ExtraField: function(reader) {\n\n if (!this.extraFields[0x0001]) {\n return;\n }\n\n // should be something, preparing the extra reader\n var extraReader = new StringReader(this.extraFields[0x0001].value);\n\n // I really hope that these 64bits integer can fit in 32 bits integer, because js\n // won't let us have more.\n if (this.uncompressedSize === utils.MAX_VALUE_32BITS) {\n this.uncompressedSize = extraReader.readInt(8);\n }\n if (this.compressedSize === utils.MAX_VALUE_32BITS) {\n this.compressedSize = extraReader.readInt(8);\n }\n if (this.localHeaderOffset === utils.MAX_VALUE_32BITS) {\n this.localHeaderOffset = extraReader.readInt(8);\n }\n if (this.diskNumberStart === utils.MAX_VALUE_32BITS) {\n this.diskNumberStart = extraReader.readInt(4);\n }\n },\n /**\n * Read the central part of a zip file and add the info in this object.\n * @param {DataReader} reader the reader to use.\n */\n readExtraFields: function(reader) {\n var start = reader.index,\n extraFieldId,\n extraFieldLength,\n extraFieldValue;\n\n this.extraFields = this.extraFields || {};\n\n while (reader.index < start + this.extraFieldsLength) {\n extraFieldId = reader.readInt(2);\n extraFieldLength = reader.readInt(2);\n extraFieldValue = reader.readString(extraFieldLength);\n\n this.extraFields[extraFieldId] = {\n id: extraFieldId,\n length: extraFieldLength,\n value: extraFieldValue\n };\n }\n },\n /**\n * Apply an UTF8 transformation if needed.\n */\n handleUTF8: function() {\n if (this.useUTF8()) {\n this.fileName = jszipProto.utf8decode(this.fileName);\n this.fileComment = jszipProto.utf8decode(this.fileComment);\n } else {\n var upath = this.findExtraFieldUnicodePath();\n if (upath !== null) {\n this.fileName = upath;\n }\n var ucomment = this.findExtraFieldUnicodeComment();\n if (ucomment !== null) {\n this.fileComment = ucomment;\n }\n }\n },\n\n /**\n * Find the unicode path declared in the extra field, if any.\n * @return {String} the unicode path, null otherwise.\n */\n findExtraFieldUnicodePath: function() {\n var upathField = this.extraFields[0x7075];\n if (upathField) {\n var extraReader = new StringReader(upathField.value);\n\n // wrong version\n if (extraReader.readInt(1) !== 1) {\n return null;\n }\n\n // the crc of the filename changed, this field is out of date.\n if (jszipProto.crc32(this.fileName) !== extraReader.readInt(4)) {\n return null;\n }\n\n return jszipProto.utf8decode(extraReader.readString(upathField.length - 5));\n }\n return null;\n },\n\n /**\n * Find the unicode comment declared in the extra field, if any.\n * @return {String} the unicode comment, null otherwise.\n */\n findExtraFieldUnicodeComment: function() {\n var ucommentField = this.extraFields[0x6375];\n if (ucommentField) {\n var extraReader = new StringReader(ucommentField.value);\n\n // wrong version\n if (extraReader.readInt(1) !== 1) {\n return null;\n }\n\n // the crc of the comment changed, this field is out of date.\n if (jszipProto.crc32(this.fileComment) !== extraReader.readInt(4)) {\n return null;\n }\n\n return jszipProto.utf8decode(extraReader.readString(ucommentField.length - 5));\n }\n return null;\n }\n};\nmodule.exports = ZipEntry;\n\n},{\"./compressedObject\":2,\"./object\":13,\"./stringReader\":15,\"./utils\":21}],24:[function(_dereq_,module,exports){\n// Top level file is just a mixin of submodules & constants\n'use strict';\n\nvar assign = _dereq_('./lib/utils/common').assign;\n\nvar deflate = _dereq_('./lib/deflate');\nvar inflate = _dereq_('./lib/inflate');\nvar constants = _dereq_('./lib/zlib/constants');\n\nvar pako = {};\n\nassign(pako, deflate, inflate, constants);\n\nmodule.exports = pako;\n},{\"./lib/deflate\":25,\"./lib/inflate\":26,\"./lib/utils/common\":27,\"./lib/zlib/constants\":30}],25:[function(_dereq_,module,exports){\n'use strict';\n\n\nvar zlib_deflate = _dereq_('./zlib/deflate.js');\nvar utils = _dereq_('./utils/common');\nvar strings = _dereq_('./utils/strings');\nvar msg = _dereq_('./zlib/messages');\nvar zstream = _dereq_('./zlib/zstream');\n\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nvar Z_NO_FLUSH = 0;\nvar Z_FINISH = 4;\n\nvar Z_OK = 0;\nvar Z_STREAM_END = 1;\n\nvar Z_DEFAULT_COMPRESSION = -1;\n\nvar Z_DEFAULT_STRATEGY = 0;\n\nvar Z_DEFLATED = 8;\n\n/* ===========================================================================*/\n\n\n/**\n * class Deflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[deflate]],\n * [[deflateRaw]] and [[gzip]].\n **/\n\n/* internal\n * Deflate.chunks -> Array\n *\n * Chunks of output data, if [[Deflate#onData]] not overriden.\n **/\n\n/**\n * Deflate.result -> Uint8Array|Array\n *\n * Compressed result, generated by default [[Deflate#onData]]\n * and [[Deflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Deflate#push]] with `Z_FINISH` / `true` param).\n **/\n\n/**\n * Deflate.err -> Number\n *\n * Error code after deflate finished. 0 (Z_OK) on success.\n * You will not need it in real life, because deflate errors\n * are possible only on wrong options or bad `onData` / `onEnd`\n * custom handlers.\n **/\n\n/**\n * Deflate.msg -> String\n *\n * Error message, if [[Deflate.err]] != 0\n **/\n\n\n/**\n * new Deflate(options)\n * - options (Object): zlib deflate options.\n *\n * Creates new deflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `level`\n * - `windowBits`\n * - `memLevel`\n * - `strategy`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw deflate\n * - `gzip` (Boolean) - create gzip wrapper\n * - `to` (String) - if equal to 'string', then result will be \"binary string\"\n * (each char code [0..255])\n * - `header` (Object) - custom header for gzip\n * - `text` (Boolean) - true if compressed data believed to be text\n * - `time` (Number) - modification time, unix timestamp\n * - `os` (Number) - operation system code\n * - `extra` (Array) - array of bytes with extra data (max 65536)\n * - `name` (String) - file name (binary string)\n * - `comment` (String) - comment (binary string)\n * - `hcrc` (Boolean) - true if header crc should be added\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var deflate = new pako.Deflate({ level: 3});\n *\n * deflate.push(chunk1, false);\n * deflate.push(chunk2, true); // true -> last chunk\n *\n * if (deflate.err) { throw new Error(deflate.err); }\n *\n * console.log(deflate.result);\n * ```\n **/\nvar Deflate = function(options) {\n\n this.options = utils.assign({\n level: Z_DEFAULT_COMPRESSION,\n method: Z_DEFLATED,\n chunkSize: 16384,\n windowBits: 15,\n memLevel: 8,\n strategy: Z_DEFAULT_STRATEGY,\n to: ''\n }, options || {});\n\n var opt = this.options;\n\n if (opt.raw && (opt.windowBits > 0)) {\n opt.windowBits = -opt.windowBits;\n }\n\n else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) {\n opt.windowBits += 16;\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new zstream();\n this.strm.avail_out = 0;\n\n var status = zlib_deflate.deflateInit2(\n this.strm,\n opt.level,\n opt.method,\n opt.windowBits,\n opt.memLevel,\n opt.strategy\n );\n\n if (status !== Z_OK) {\n throw new Error(msg[status]);\n }\n\n if (opt.header) {\n zlib_deflate.deflateSetHeader(this.strm, opt.header);\n }\n};\n\n/**\n * Deflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|String): input data. Strings will be converted to\n * utf8 byte sequence.\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n * See constants. Skipped or `false` means Z_NO_FLUSH, `true` meansh Z_FINISH.\n *\n * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with\n * new compressed chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That flush internal pending buffers and call\n * [[Deflate#onEnd]].\n *\n * On fail call [[Deflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * array format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\nDeflate.prototype.push = function(data, mode) {\n var strm = this.strm;\n var chunkSize = this.options.chunkSize;\n var status, _mode;\n\n if (this.ended) { return false; }\n\n _mode = (mode === ~~mode) ? mode : ((mode === true) ? Z_FINISH : Z_NO_FLUSH);\n\n // Convert data if needed\n if (typeof data === 'string') {\n // If we need to compress text, change encoding to utf8.\n strm.input = strings.string2buf(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n do {\n if (strm.avail_out === 0) {\n strm.output = new utils.Buf8(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n status = zlib_deflate.deflate(strm, _mode); /* no bad return value */\n\n if (status !== Z_STREAM_END && status !== Z_OK) {\n this.onEnd(status);\n this.ended = true;\n return false;\n }\n if (strm.avail_out === 0 || (strm.avail_in === 0 && _mode === Z_FINISH)) {\n if (this.options.to === 'string') {\n this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output, strm.next_out)));\n } else {\n this.onData(utils.shrinkBuf(strm.output, strm.next_out));\n }\n }\n } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END);\n\n // Finalize on the last chunk.\n if (_mode === Z_FINISH) {\n status = zlib_deflate.deflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return status === Z_OK;\n }\n\n return true;\n};\n\n\n/**\n * Deflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): ouput data. Type of array depends\n * on js engine support. When string output requested, each chunk\n * will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nDeflate.prototype.onData = function(chunk) {\n this.chunks.push(chunk);\n};\n\n\n/**\n * Deflate#onEnd(status) -> Void\n * - status (Number): deflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called once after you tell deflate that input stream complete\n * or error happenned. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nDeflate.prototype.onEnd = function(status) {\n // On success - join\n if (status === Z_OK) {\n if (this.options.to === 'string') {\n this.result = this.chunks.join('');\n } else {\n this.result = utils.flattenChunks(this.chunks);\n }\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n};\n\n\n/**\n * deflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * Compress `data` with deflate alrorythm and `options`.\n *\n * Supported options are:\n *\n * - level\n * - windowBits\n * - memLevel\n * - strategy\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be \"binary string\"\n * (each char code [0..255])\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , data = Uint8Array([1,2,3,4,5,6,7,8,9]);\n *\n * console.log(pako.deflate(data));\n * ```\n **/\nfunction deflate(input, options) {\n var deflator = new Deflate(options);\n\n deflator.push(input, true);\n\n // That will never happens, if you don't cheat with options :)\n if (deflator.err) { throw deflator.msg; }\n\n return deflator.result;\n}\n\n\n/**\n * deflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction deflateRaw(input, options) {\n options = options || {};\n options.raw = true;\n return deflate(input, options);\n}\n\n\n/**\n * gzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but create gzip wrapper instead of\n * deflate one.\n **/\nfunction gzip(input, options) {\n options = options || {};\n options.gzip = true;\n return deflate(input, options);\n}\n\n\nexports.Deflate = Deflate;\nexports.deflate = deflate;\nexports.deflateRaw = deflateRaw;\nexports.gzip = gzip;\n},{\"./utils/common\":27,\"./utils/strings\":28,\"./zlib/deflate.js\":32,\"./zlib/messages\":37,\"./zlib/zstream\":39}],26:[function(_dereq_,module,exports){\n'use strict';\n\n\nvar zlib_inflate = _dereq_('./zlib/inflate.js');\nvar utils = _dereq_('./utils/common');\nvar strings = _dereq_('./utils/strings');\nvar c = _dereq_('./zlib/constants');\nvar msg = _dereq_('./zlib/messages');\nvar zstream = _dereq_('./zlib/zstream');\nvar gzheader = _dereq_('./zlib/gzheader');\n\n\n/**\n * class Inflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[inflate]]\n * and [[inflateRaw]].\n **/\n\n/* internal\n * inflate.chunks -> Array\n *\n * Chunks of output data, if [[Inflate#onData]] not overriden.\n **/\n\n/**\n * Inflate.result -> Uint8Array|Array|String\n *\n * Uncompressed result, generated by default [[Inflate#onData]]\n * and [[Inflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Inflate#push]] with `Z_FINISH` / `true` param).\n **/\n\n/**\n * Inflate.err -> Number\n *\n * Error code after inflate finished. 0 (Z_OK) on success.\n * Should be checked if broken data possible.\n **/\n\n/**\n * Inflate.msg -> String\n *\n * Error message, if [[Inflate.err]] != 0\n **/\n\n\n/**\n * new Inflate(options)\n * - options (Object): zlib inflate options.\n *\n * Creates new inflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `windowBits`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw inflate\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n * By default, when no options set, autodetect deflate/gzip data format via\n * wrapper header.\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var inflate = new pako.Inflate({ level: 3});\n *\n * inflate.push(chunk1, false);\n * inflate.push(chunk2, true); // true -> last chunk\n *\n * if (inflate.err) { throw new Error(inflate.err); }\n *\n * console.log(inflate.result);\n * ```\n **/\nvar Inflate = function(options) {\n\n this.options = utils.assign({\n chunkSize: 16384,\n windowBits: 0,\n to: ''\n }, options || {});\n\n var opt = this.options;\n\n // Force window size for `raw` data, if not set directly,\n // because we have no header for autodetect.\n if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) {\n opt.windowBits = -opt.windowBits;\n if (opt.windowBits === 0) { opt.windowBits = -15; }\n }\n\n // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate\n if ((opt.windowBits >= 0) && (opt.windowBits < 16) &&\n !(options && options.windowBits)) {\n opt.windowBits += 32;\n }\n\n // Gzip header has no info about windows size, we can do autodetect only\n // for deflate. So, if window size not set, force it to max when gzip possible\n if ((opt.windowBits > 15) && (opt.windowBits < 48)) {\n // bit 3 (16) -> gzipped data\n // bit 4 (32) -> autodetect gzip/deflate\n if ((opt.windowBits & 15) === 0) {\n opt.windowBits |= 15;\n }\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new zstream();\n this.strm.avail_out = 0;\n\n var status = zlib_inflate.inflateInit2(\n this.strm,\n opt.windowBits\n );\n\n if (status !== c.Z_OK) {\n throw new Error(msg[status]);\n }\n\n this.header = new gzheader();\n\n zlib_inflate.inflateGetHeader(this.strm, this.header);\n};\n\n/**\n * Inflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|String): input data\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n * See constants. Skipped or `false` means Z_NO_FLUSH, `true` meansh Z_FINISH.\n *\n * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with\n * new output chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That flush internal pending buffers and call\n * [[Inflate#onEnd]].\n *\n * On fail call [[Inflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\nInflate.prototype.push = function(data, mode) {\n var strm = this.strm;\n var chunkSize = this.options.chunkSize;\n var status, _mode;\n var next_out_utf8, tail, utf8str;\n\n if (this.ended) { return false; }\n _mode = (mode === ~~mode) ? mode : ((mode === true) ? c.Z_FINISH : c.Z_NO_FLUSH);\n\n // Convert data if needed\n if (typeof data === 'string') {\n // Only binary strings can be decompressed on practice\n strm.input = strings.binstring2buf(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n do {\n if (strm.avail_out === 0) {\n strm.output = new utils.Buf8(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n\n status = zlib_inflate.inflate(strm, c.Z_NO_FLUSH); /* no bad return value */\n\n if (status !== c.Z_STREAM_END && status !== c.Z_OK) {\n this.onEnd(status);\n this.ended = true;\n return false;\n }\n\n if (strm.next_out) {\n if (strm.avail_out === 0 || status === c.Z_STREAM_END || (strm.avail_in === 0 && _mode === c.Z_FINISH)) {\n\n if (this.options.to === 'string') {\n\n next_out_utf8 = strings.utf8border(strm.output, strm.next_out);\n\n tail = strm.next_out - next_out_utf8;\n utf8str = strings.buf2string(strm.output, next_out_utf8);\n\n // move tail\n strm.next_out = tail;\n strm.avail_out = chunkSize - tail;\n if (tail) { utils.arraySet(strm.output, strm.output, next_out_utf8, tail, 0); }\n\n this.onData(utf8str);\n\n } else {\n this.onData(utils.shrinkBuf(strm.output, strm.next_out));\n }\n }\n }\n } while ((strm.avail_in > 0) && status !== c.Z_STREAM_END);\n\n if (status === c.Z_STREAM_END) {\n _mode = c.Z_FINISH;\n }\n // Finalize on the last chunk.\n if (_mode === c.Z_FINISH) {\n status = zlib_inflate.inflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return status === c.Z_OK;\n }\n\n return true;\n};\n\n\n/**\n * Inflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): ouput data. Type of array depends\n * on js engine support. When string output requested, each chunk\n * will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nInflate.prototype.onData = function(chunk) {\n this.chunks.push(chunk);\n};\n\n\n/**\n * Inflate#onEnd(status) -> Void\n * - status (Number): inflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called once after you tell inflate that input stream complete\n * or error happenned. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nInflate.prototype.onEnd = function(status) {\n // On success - join\n if (status === c.Z_OK) {\n if (this.options.to === 'string') {\n // Glue & convert here, until we teach pako to send\n // utf8 alligned strings to onData\n this.result = this.chunks.join('');\n } else {\n this.result = utils.flattenChunks(this.chunks);\n }\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n};\n\n\n/**\n * inflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Decompress `data` with inflate/ungzip and `options`. Autodetect\n * format via wrapper header by default. That's why we don't provide\n * separate `ungzip` method.\n *\n * Supported options are:\n *\n * - windowBits\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , input = pako.deflate([1,2,3,4,5,6,7,8,9])\n * , output;\n *\n * try {\n * output = pako.inflate(input);\n * } catch (err)\n * console.log(err);\n * }\n * ```\n **/\nfunction inflate(input, options) {\n var inflator = new Inflate(options);\n\n inflator.push(input, true);\n\n // That will never happens, if you don't cheat with options :)\n if (inflator.err) { throw inflator.msg; }\n\n return inflator.result;\n}\n\n\n/**\n * inflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * The same as [[inflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction inflateRaw(input, options) {\n options = options || {};\n options.raw = true;\n return inflate(input, options);\n}\n\n\n/**\n * ungzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Just shortcut to [[inflate]], because it autodetects format\n * by header.content. Done for convenience.\n **/\n\n\nexports.Inflate = Inflate;\nexports.inflate = inflate;\nexports.inflateRaw = inflateRaw;\nexports.ungzip = inflate;\n\n},{\"./utils/common\":27,\"./utils/strings\":28,\"./zlib/constants\":30,\"./zlib/gzheader\":33,\"./zlib/inflate.js\":35,\"./zlib/messages\":37,\"./zlib/zstream\":39}],27:[function(_dereq_,module,exports){\n'use strict';\n\n\nvar TYPED_OK = (typeof Uint8Array !== 'undefined') &&\n (typeof Uint16Array !== 'undefined') &&\n (typeof Int32Array !== 'undefined');\n\n\nexports.assign = function (obj /*from1, from2, from3, ...*/) {\n var sources = Array.prototype.slice.call(arguments, 1);\n while (sources.length) {\n var source = sources.shift();\n if (!source) { continue; }\n\n if (typeof(source) !== 'object') {\n throw new TypeError(source + 'must be non-object');\n }\n\n for (var p in source) {\n if (source.hasOwnProperty(p)) {\n obj[p] = source[p];\n }\n }\n }\n\n return obj;\n};\n\n\n// reduce buffer size, avoiding mem copy\nexports.shrinkBuf = function (buf, size) {\n if (buf.length === size) { return buf; }\n if (buf.subarray) { return buf.subarray(0, size); }\n buf.length = size;\n return buf;\n};\n\n\nvar fnTyped = {\n arraySet: function (dest, src, src_offs, len, dest_offs) {\n if (src.subarray && dest.subarray) {\n dest.set(src.subarray(src_offs, src_offs+len), dest_offs);\n return;\n }\n // Fallback to ordinary array\n for(var i=0; i= 252 ? 6 : i >= 248 ? 5 : i >= 240 ? 4 : i >= 224 ? 3 : i >= 192 ? 2 : 1);\n}\n_utf8len[254]=_utf8len[254]=1; // Invalid sequence start\n\n\n// convert string to array (typed, when possible)\nexports.string2buf = function (str) {\n var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n // count binary size\n for (m_pos = 0; m_pos < str_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) {\n c2 = str.charCodeAt(m_pos+1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n }\n\n // allocate buffer\n buf = new utils.Buf8(buf_len);\n\n // convert\n for (i=0, m_pos = 0; i < buf_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) {\n c2 = str.charCodeAt(m_pos+1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n if (c < 0x80) {\n /* one byte */\n buf[i++] = c;\n } else if (c < 0x800) {\n /* two bytes */\n buf[i++] = 0xC0 | (c >>> 6);\n buf[i++] = 0x80 | (c & 0x3f);\n } else if (c < 0x10000) {\n /* three bytes */\n buf[i++] = 0xE0 | (c >>> 12);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n } else {\n /* four bytes */\n buf[i++] = 0xf0 | (c >>> 18);\n buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n }\n }\n\n return buf;\n};\n\n// Helper (used in 2 places)\nfunction buf2binstring(buf, len) {\n // use fallback for big arrays to avoid stack overflow\n if (len < 65537) {\n if ((buf.subarray && STR_APPLY_UIA_OK) || (!buf.subarray && STR_APPLY_OK)) {\n return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len));\n }\n }\n\n var result = '';\n for(var i=0; i < len; i++) {\n result += String.fromCharCode(buf[i]);\n }\n return result;\n}\n\n\n// Convert byte array to binary string\nexports.buf2binstring = function(buf) {\n return buf2binstring(buf, buf.length);\n};\n\n\n// Convert binary string (typed, when possible)\nexports.binstring2buf = function(str) {\n var buf = new utils.Buf8(str.length);\n for(var i=0, len=buf.length; i < len; i++) {\n buf[i] = str.charCodeAt(i);\n }\n return buf;\n};\n\n\n// convert array to string\nexports.buf2string = function (buf, max) {\n var i, out, c, c_len;\n var len = max || buf.length;\n\n // Reserve max possible length (2 words per char)\n // NB: by unknown reasons, Array is significantly faster for\n // String.fromCharCode.apply than Uint16Array.\n var utf16buf = new Array(len*2);\n\n for (out=0, i=0; i 4) { utf16buf[out++] = 0xfffd; i += c_len-1; continue; }\n\n // apply mask on first byte\n c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n // join the rest\n while (c_len > 1 && i < len) {\n c = (c << 6) | (buf[i++] & 0x3f);\n c_len--;\n }\n\n // terminated by end of string?\n if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n if (c < 0x10000) {\n utf16buf[out++] = c;\n } else {\n c -= 0x10000;\n utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n }\n }\n\n return buf2binstring(utf16buf, out);\n};\n\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max - length limit (mandatory);\nexports.utf8border = function(buf, max) {\n var pos;\n\n max = max || buf.length;\n if (max > buf.length) { max = buf.length; }\n\n // go back from last position, until start of sequence found\n pos = max-1;\n while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n // Fuckup - very small and broken sequence,\n // return max, because we should return something anyway.\n if (pos < 0) { return max; }\n\n // If we came to start of buffer - that means vuffer is too small,\n // return max too.\n if (pos === 0) { return max; }\n\n return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n\n},{\"./common\":27}],29:[function(_dereq_,module,exports){\n'use strict';\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It doesn't worth to make additional optimizationa as in original.\n// Small size is preferable.\n\nfunction adler32(adler, buf, len, pos) {\n var s1 = (adler & 0xffff) |0\n , s2 = ((adler >>> 16) & 0xffff) |0\n , n = 0;\n\n while (len !== 0) {\n // Set limit ~ twice less than 5552, to keep\n // s2 in 31-bits, because we force signed ints.\n // in other case %= will fail.\n n = len > 2000 ? 2000 : len;\n len -= n;\n\n do {\n s1 = (s1 + buf[pos++]) |0;\n s2 = (s2 + s1) |0;\n } while (--n);\n\n s1 %= 65521;\n s2 %= 65521;\n }\n\n return (s1 | (s2 << 16)) |0;\n}\n\n\nmodule.exports = adler32;\n},{}],30:[function(_dereq_,module,exports){\nmodule.exports = {\n\n /* Allowed flush values; see deflate() and inflate() below for details */\n Z_NO_FLUSH: 0,\n Z_PARTIAL_FLUSH: 1,\n Z_SYNC_FLUSH: 2,\n Z_FULL_FLUSH: 3,\n Z_FINISH: 4,\n Z_BLOCK: 5,\n Z_TREES: 6,\n\n /* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\n Z_OK: 0,\n Z_STREAM_END: 1,\n Z_NEED_DICT: 2,\n Z_ERRNO: -1,\n Z_STREAM_ERROR: -2,\n Z_DATA_ERROR: -3,\n //Z_MEM_ERROR: -4,\n Z_BUF_ERROR: -5,\n //Z_VERSION_ERROR: -6,\n\n /* compression levels */\n Z_NO_COMPRESSION: 0,\n Z_BEST_SPEED: 1,\n Z_BEST_COMPRESSION: 9,\n Z_DEFAULT_COMPRESSION: -1,\n\n\n Z_FILTERED: 1,\n Z_HUFFMAN_ONLY: 2,\n Z_RLE: 3,\n Z_FIXED: 4,\n Z_DEFAULT_STRATEGY: 0,\n\n /* Possible values of the data_type field (though see inflate()) */\n Z_BINARY: 0,\n Z_TEXT: 1,\n //Z_ASCII: 1, // = Z_TEXT (deprecated)\n Z_UNKNOWN: 2,\n\n /* The deflate compression method */\n Z_DEFLATED: 8\n //Z_NULL: null // Use -1 or null inline, depending on var type\n};\n},{}],31:[function(_dereq_,module,exports){\n'use strict';\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n\n// Use ordinary array, since untyped makes no boost here\nfunction makeTable() {\n var c, table = [];\n\n for(var n =0; n < 256; n++){\n c = n;\n for(var k =0; k < 8; k++){\n c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n }\n table[n] = c;\n }\n\n return table;\n}\n\n// Create table on load. Just 255 signed longs. Not a problem.\nvar crcTable = makeTable();\n\n\nfunction crc32(crc, buf, len, pos) {\n var t = crcTable\n , end = pos + len;\n\n crc = crc ^ (-1);\n\n for (var i = pos; i < end; i++ ) {\n crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n }\n\n return (crc ^ (-1)); // >>> 0;\n}\n\n\nmodule.exports = crc32;\n},{}],32:[function(_dereq_,module,exports){\n'use strict';\n\nvar utils = _dereq_('../utils/common');\nvar trees = _dereq_('./trees');\nvar adler32 = _dereq_('./adler32');\nvar crc32 = _dereq_('./crc32');\nvar msg = _dereq_('./messages');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\nvar Z_NO_FLUSH = 0;\nvar Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH = 2;\nvar Z_FULL_FLUSH = 3;\nvar Z_FINISH = 4;\nvar Z_BLOCK = 5;\n//var Z_TREES = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK = 0;\nvar Z_STREAM_END = 1;\n//var Z_NEED_DICT = 2;\n//var Z_ERRNO = -1;\nvar Z_STREAM_ERROR = -2;\nvar Z_DATA_ERROR = -3;\n//var Z_MEM_ERROR = -4;\nvar Z_BUF_ERROR = -5;\n//var Z_VERSION_ERROR = -6;\n\n\n/* compression levels */\n//var Z_NO_COMPRESSION = 0;\n//var Z_BEST_SPEED = 1;\n//var Z_BEST_COMPRESSION = 9;\nvar Z_DEFAULT_COMPRESSION = -1;\n\n\nvar Z_FILTERED = 1;\nvar Z_HUFFMAN_ONLY = 2;\nvar Z_RLE = 3;\nvar Z_FIXED = 4;\nvar Z_DEFAULT_STRATEGY = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\n//var Z_BINARY = 0;\n//var Z_TEXT = 1;\n//var Z_ASCII = 1; // = Z_TEXT\nvar Z_UNKNOWN = 2;\n\n\n/* The deflate compression method */\nvar Z_DEFLATED = 8;\n\n/*============================================================================*/\n\n\nvar MAX_MEM_LEVEL = 9;\n/* Maximum value for memLevel in deflateInit2 */\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_MEM_LEVEL = 8;\n\n\nvar LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\nvar LITERALS = 256;\n/* number of literal bytes 0..255 */\nvar L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\nvar D_CODES = 30;\n/* number of distance codes */\nvar BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\nvar HEAP_SIZE = 2*L_CODES + 1;\n/* maximum heap size */\nvar MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\nvar MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);\n\nvar PRESET_DICT = 0x20;\n\nvar INIT_STATE = 42;\nvar EXTRA_STATE = 69;\nvar NAME_STATE = 73;\nvar COMMENT_STATE = 91;\nvar HCRC_STATE = 103;\nvar BUSY_STATE = 113;\nvar FINISH_STATE = 666;\n\nvar BS_NEED_MORE = 1; /* block not completed, need more input or more output */\nvar BS_BLOCK_DONE = 2; /* block flush performed */\nvar BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */\nvar BS_FINISH_DONE = 4; /* finish done, accept no more input or output */\n\nvar OS_CODE = 0x03; // Unix :) . Don't detect, use this default.\n\nfunction err(strm, errorCode) {\n strm.msg = msg[errorCode];\n return errorCode;\n}\n\nfunction rank(f) {\n return ((f) << 1) - ((f) > 4 ? 9 : 0);\n}\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n\n/* =========================================================================\n * Flush as much pending output as possible. All deflate() output goes\n * through this function so some applications may wish to modify it\n * to avoid allocating a large strm->output buffer and copying into it.\n * (See also read_buf()).\n */\nfunction flush_pending(strm) {\n var s = strm.state;\n\n //_tr_flush_bits(s);\n var len = s.pending;\n if (len > strm.avail_out) {\n len = strm.avail_out;\n }\n if (len === 0) { return; }\n\n utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);\n strm.next_out += len;\n s.pending_out += len;\n strm.total_out += len;\n strm.avail_out -= len;\n s.pending -= len;\n if (s.pending === 0) {\n s.pending_out = 0;\n }\n}\n\n\nfunction flush_block_only (s, last) {\n trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);\n s.block_start = s.strstart;\n flush_pending(s.strm);\n}\n\n\nfunction put_byte(s, b) {\n s.pending_buf[s.pending++] = b;\n}\n\n\n/* =========================================================================\n * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n * IN assertion: the stream state is correct and there is enough room in\n * pending_buf.\n */\nfunction putShortMSB(s, b) {\n// put_byte(s, (Byte)(b >> 8));\n// put_byte(s, (Byte)(b & 0xff));\n s.pending_buf[s.pending++] = (b >>> 8) & 0xff;\n s.pending_buf[s.pending++] = b & 0xff;\n}\n\n\n/* ===========================================================================\n * Read a new buffer from the current input stream, update the adler32\n * and total number of bytes read. All deflate() input goes through\n * this function so some applications may wish to modify it to avoid\n * allocating a large strm->input buffer and copying from it.\n * (See also flush_pending()).\n */\nfunction read_buf(strm, buf, start, size) {\n var len = strm.avail_in;\n\n if (len > size) { len = size; }\n if (len === 0) { return 0; }\n\n strm.avail_in -= len;\n\n utils.arraySet(buf, strm.input, strm.next_in, len, start);\n if (strm.state.wrap === 1) {\n strm.adler = adler32(strm.adler, buf, len, start);\n }\n\n else if (strm.state.wrap === 2) {\n strm.adler = crc32(strm.adler, buf, len, start);\n }\n\n strm.next_in += len;\n strm.total_in += len;\n\n return len;\n}\n\n\n/* ===========================================================================\n * Set match_start to the longest match starting at the given string and\n * return its length. Matches shorter or equal to prev_length are discarded,\n * in which case the result is equal to prev_length and match_start is\n * garbage.\n * IN assertions: cur_match is the head of the hash chain for the current\n * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n * OUT assertion: the match length is not greater than s->lookahead.\n */\nfunction longest_match(s, cur_match) {\n var chain_length = s.max_chain_length; /* max hash chain length */\n var scan = s.strstart; /* current string */\n var match; /* matched string */\n var len; /* length of current match */\n var best_len = s.prev_length; /* best match length so far */\n var nice_match = s.nice_match; /* stop if match long enough */\n var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?\n s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;\n\n var _win = s.window; // shortcut\n\n var wmask = s.w_mask;\n var prev = s.prev;\n\n /* Stop when cur_match becomes <= limit. To simplify the code,\n * we prevent matches with the string of window index 0.\n */\n\n var strend = s.strstart + MAX_MATCH;\n var scan_end1 = _win[scan + best_len - 1];\n var scan_end = _win[scan + best_len];\n\n /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n * It is easy to get rid of this optimization if necessary.\n */\n // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n /* Do not waste too much time if we already have a good match: */\n if (s.prev_length >= s.good_match) {\n chain_length >>= 2;\n }\n /* Do not look for matches beyond the end of the input. This is necessary\n * to make deflate deterministic.\n */\n if (nice_match > s.lookahead) { nice_match = s.lookahead; }\n\n // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n do {\n // Assert(cur_match < s->strstart, \"no future\");\n match = cur_match;\n\n /* Skip to next match if the match length cannot increase\n * or if the match length is less than 2. Note that the checks below\n * for insufficient lookahead only occur occasionally for performance\n * reasons. Therefore uninitialized memory will be accessed, and\n * conditional jumps will be made that depend on those values.\n * However the length of the match is limited to the lookahead, so\n * the output of deflate is not affected by the uninitialized values.\n */\n\n if (_win[match + best_len] !== scan_end ||\n _win[match + best_len - 1] !== scan_end1 ||\n _win[match] !== _win[scan] ||\n _win[++match] !== _win[scan + 1]) {\n continue;\n }\n\n /* The check at best_len-1 can be removed because it will be made\n * again later. (This heuristic is not always a win.)\n * It is not necessary to compare scan[2] and match[2] since they\n * are always equal when the other bytes match, given that\n * the hash keys are equal and that HASH_BITS >= 8.\n */\n scan += 2;\n match++;\n // Assert(*scan == *match, \"match[2]?\");\n\n /* We check for insufficient lookahead only every 8th comparison;\n * the 256th check will be made at strstart+258.\n */\n do {\n /*jshint noempty:false*/\n } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n scan < strend);\n\n // Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n len = MAX_MATCH - (strend - scan);\n scan = strend - MAX_MATCH;\n\n if (len > best_len) {\n s.match_start = cur_match;\n best_len = len;\n if (len >= nice_match) {\n break;\n }\n scan_end1 = _win[scan + best_len - 1];\n scan_end = _win[scan + best_len];\n }\n } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\n if (best_len <= s.lookahead) {\n return best_len;\n }\n return s.lookahead;\n}\n\n\n/* ===========================================================================\n * Fill the window when the lookahead becomes insufficient.\n * Updates strstart and lookahead.\n *\n * IN assertion: lookahead < MIN_LOOKAHEAD\n * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n * At least one byte has been read, or avail_in == 0; reads are\n * performed for at least two bytes (required for the zip translate_eol\n * option -- not supported here).\n */\nfunction fill_window(s) {\n var _w_size = s.w_size;\n var p, n, m, more, str;\n\n //Assert(s->lookahead < MIN_LOOKAHEAD, \"already enough lookahead\");\n\n do {\n more = s.window_size - s.lookahead - s.strstart;\n\n // JS ints have 32 bit, block below not needed\n /* Deal with !@#$% 64K limit: */\n //if (sizeof(int) <= 2) {\n // if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n // more = wsize;\n //\n // } else if (more == (unsigned)(-1)) {\n // /* Very unlikely, but possible on 16 bit machine if\n // * strstart == 0 && lookahead == 1 (input done a byte at time)\n // */\n // more--;\n // }\n //}\n\n\n /* If the window is almost full and there is insufficient lookahead,\n * move the upper half to the lower one to make room in the upper half.\n */\n if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n\n utils.arraySet(s.window, s.window, _w_size, _w_size, 0);\n s.match_start -= _w_size;\n s.strstart -= _w_size;\n /* we now have strstart >= MAX_DIST */\n s.block_start -= _w_size;\n\n /* Slide the hash table (could be avoided with 32 bit values\n at the expense of memory usage). We slide even when level == 0\n to keep the hash table consistent if we switch back to level > 0\n later. (Using level 0 permanently is not an optimal usage of\n zlib, so we don't care about this pathological case.)\n */\n\n n = s.hash_size;\n p = n;\n do {\n m = s.head[--p];\n s.head[p] = (m >= _w_size ? m - _w_size : 0);\n } while (--n);\n\n n = _w_size;\n p = n;\n do {\n m = s.prev[--p];\n s.prev[p] = (m >= _w_size ? m - _w_size : 0);\n /* If n is not on any hash chain, prev[n] is garbage but\n * its value will never be used.\n */\n } while (--n);\n\n more += _w_size;\n }\n if (s.strm.avail_in === 0) {\n break;\n }\n\n /* If there was no sliding:\n * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n * more == window_size - lookahead - strstart\n * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n * => more >= window_size - 2*WSIZE + 2\n * In the BIG_MEM or MMAP case (not yet supported),\n * window_size == input_size + MIN_LOOKAHEAD &&\n * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n * Otherwise, window_size == 2*WSIZE so more >= 2.\n * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n */\n //Assert(more >= 2, \"more < 2\");\n n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n s.lookahead += n;\n\n /* Initialize the hash value now that we have some input: */\n if (s.lookahead + s.insert >= MIN_MATCH) {\n str = s.strstart - s.insert;\n s.ins_h = s.window[str];\n\n /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask;\n//#if MIN_MATCH != 3\n// Call update_hash() MIN_MATCH-3 more times\n//#endif\n while (s.insert) {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH-1]) & s.hash_mask;\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = str;\n str++;\n s.insert--;\n if (s.lookahead + s.insert < MIN_MATCH) {\n break;\n }\n }\n }\n /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n * but this is not important since only literal bytes will be emitted.\n */\n\n } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n\n /* If the WIN_INIT bytes after the end of the current data have never been\n * written, then zero those bytes in order to avoid memory check reports of\n * the use of uninitialized (or uninitialised as Julian writes) bytes by\n * the longest match routines. Update the high water mark for the next\n * time through here. WIN_INIT is set to MAX_MATCH since the longest match\n * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n */\n// if (s.high_water < s.window_size) {\n// var curr = s.strstart + s.lookahead;\n// var init = 0;\n//\n// if (s.high_water < curr) {\n// /* Previous high water mark below current data -- zero WIN_INIT\n// * bytes or up to end of window, whichever is less.\n// */\n// init = s.window_size - curr;\n// if (init > WIN_INIT)\n// init = WIN_INIT;\n// zmemzero(s->window + curr, (unsigned)init);\n// s->high_water = curr + init;\n// }\n// else if (s->high_water < (ulg)curr + WIN_INIT) {\n// /* High water mark at or above current data, but below current data\n// * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n// * to end of window, whichever is less.\n// */\n// init = (ulg)curr + WIN_INIT - s->high_water;\n// if (init > s->window_size - s->high_water)\n// init = s->window_size - s->high_water;\n// zmemzero(s->window + s->high_water, (unsigned)init);\n// s->high_water += init;\n// }\n// }\n//\n// Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,\n// \"not enough room for search\");\n}\n\n/* ===========================================================================\n * Copy without compression as much as possible from the input stream, return\n * the current block state.\n * This function does not insert new strings in the dictionary since\n * uncompressible data is probably not useful. This function is used\n * only for the level=0 compression option.\n * NOTE: this function should be optimized to avoid extra copying from\n * window to pending_buf.\n */\nfunction deflate_stored(s, flush) {\n /* Stored blocks are limited to 0xffff bytes, pending_buf is limited\n * to pending_buf_size, and each stored block has a 5 byte header:\n */\n var max_block_size = 0xffff;\n\n if (max_block_size > s.pending_buf_size - 5) {\n max_block_size = s.pending_buf_size - 5;\n }\n\n /* Copy as much as possible from input to output: */\n for (;;) {\n /* Fill the window as much as possible: */\n if (s.lookahead <= 1) {\n\n //Assert(s->strstart < s->w_size+MAX_DIST(s) ||\n // s->block_start >= (long)s->w_size, \"slide too late\");\n// if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||\n// s.block_start >= s.w_size)) {\n// throw new Error(\"slide too late\");\n// }\n\n fill_window(s);\n if (s.lookahead === 0 && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n\n if (s.lookahead === 0) {\n break;\n }\n /* flush the current block */\n }\n //Assert(s->block_start >= 0L, \"block gone\");\n// if (s.block_start < 0) throw new Error(\"block gone\");\n\n s.strstart += s.lookahead;\n s.lookahead = 0;\n\n /* Emit a stored block if pending_buf will be full: */\n var max_start = s.block_start + max_block_size;\n\n if (s.strstart === 0 || s.strstart >= max_start) {\n /* strstart == 0 is possible when wraparound on 16-bit machine */\n s.lookahead = s.strstart - max_start;\n s.strstart = max_start;\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n\n\n }\n /* Flush if we may have to slide, otherwise block_start may become\n * negative and the data will be gone:\n */\n if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n\n s.insert = 0;\n\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n\n if (s.strstart > s.block_start) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n return BS_NEED_MORE;\n}\n\n/* ===========================================================================\n * Compress as much as possible from the input stream, return the current\n * block state.\n * This function does not perform lazy evaluation of matches and inserts\n * new strings in the dictionary only for unmatched strings or for short\n * matches. It is used only for the fast compression options.\n */\nfunction deflate_fast(s, flush) {\n var hash_head; /* head of the hash chain */\n var bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) {\n break; /* flush the current block */\n }\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n * At this point we have always match_length < MIN_MATCH\n */\n if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n }\n if (s.match_length >= MIN_MATCH) {\n // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only\n\n /*** _tr_tally_dist(s, s.strstart - s.match_start,\n s.match_length - MIN_MATCH, bflush); ***/\n bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n\n /* Insert new strings in the hash table only if the match length\n * is not too large. This saves time but degrades compression.\n */\n if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {\n s.match_length--; /* string at strstart already in table */\n do {\n s.strstart++;\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n * always MIN_MATCH bytes ahead.\n */\n } while (--s.match_length !== 0);\n s.strstart++;\n } else\n {\n s.strstart += s.match_length;\n s.match_length = 0;\n s.ins_h = s.window[s.strstart];\n /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask;\n\n//#if MIN_MATCH != 3\n// Call UPDATE_HASH() MIN_MATCH-3 more times\n//#endif\n /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n * matter since it will be recomputed at next deflate call.\n */\n }\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s.window[s.strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = ((s.strstart < (MIN_MATCH-1)) ? s.strstart : MIN_MATCH-1);\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * Same as above, but achieves better compression. We use a lazy\n * evaluation for matches: a match is finally adopted only if there is\n * no better match at the next window position.\n */\nfunction deflate_slow(s, flush) {\n var hash_head; /* head of hash chain */\n var bflush; /* set if current block must be flushed */\n\n var max_insert;\n\n /* Process the input block. */\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n */\n s.prev_length = s.match_length;\n s.prev_match = s.match_start;\n s.match_length = MIN_MATCH-1;\n\n if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&\n s.strstart - hash_head <= (s.w_size-MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n\n if (s.match_length <= 5 &&\n (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {\n\n /* If prev_match is also MIN_MATCH, match_start is garbage\n * but we will ignore the current match anyway.\n */\n s.match_length = MIN_MATCH-1;\n }\n }\n /* If there was a match at the previous step and the current\n * match is not better, output the previous match:\n */\n if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n max_insert = s.strstart + s.lookahead - MIN_MATCH;\n /* Do not insert strings in hash table beyond this. */\n\n //check_match(s, s.strstart-1, s.prev_match, s.prev_length);\n\n /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n s.prev_length - MIN_MATCH, bflush);***/\n bflush = trees._tr_tally(s, s.strstart - 1- s.prev_match, s.prev_length - MIN_MATCH);\n /* Insert in hash table all strings up to the end of the match.\n * strstart-1 and strstart are already inserted. If there is not\n * enough lookahead, the last two strings are not inserted in\n * the hash table.\n */\n s.lookahead -= s.prev_length-1;\n s.prev_length -= 2;\n do {\n if (++s.strstart <= max_insert) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n } while (--s.prev_length !== 0);\n s.match_available = 0;\n s.match_length = MIN_MATCH-1;\n s.strstart++;\n\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n } else if (s.match_available) {\n /* If there was no match at the previous position, output a\n * single literal. If there was a match but the current match\n * is longer, truncate the previous match to a single literal.\n */\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart-1]);\n\n if (bflush) {\n /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n flush_block_only(s, false);\n /***/\n }\n s.strstart++;\n s.lookahead--;\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n } else {\n /* There is no previous match to compare with, wait for\n * the next step to decide.\n */\n s.match_available = 1;\n s.strstart++;\n s.lookahead--;\n }\n }\n //Assert (flush != Z_NO_FLUSH, \"no flush?\");\n if (s.match_available) {\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart-1]);\n\n s.match_available = 0;\n }\n s.insert = s.strstart < MIN_MATCH-1 ? s.strstart : MIN_MATCH-1;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n return BS_BLOCK_DONE;\n}\n\n\n/* ===========================================================================\n * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n * one. Do not maintain a hash table. (It will be regenerated if this run of\n * deflate switches away from Z_RLE.)\n */\nfunction deflate_rle(s, flush) {\n var bflush; /* set if current block must be flushed */\n var prev; /* byte at distance one to match */\n var scan, strend; /* scan goes up to strend for length of run */\n\n var _win = s.window;\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the longest run, plus one for the unrolled loop.\n */\n if (s.lookahead <= MAX_MATCH) {\n fill_window(s);\n if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* See how many times the previous byte repeats */\n s.match_length = 0;\n if (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n scan = s.strstart - 1;\n prev = _win[scan];\n if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n strend = s.strstart + MAX_MATCH;\n do {\n /*jshint noempty:false*/\n } while (prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n scan < strend);\n s.match_length = MAX_MATCH - (strend - scan);\n if (s.match_length > s.lookahead) {\n s.match_length = s.lookahead;\n }\n }\n //Assert(scan <= s->window+(uInt)(s->window_size-1), \"wild scan\");\n }\n\n /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n if (s.match_length >= MIN_MATCH) {\n //check_match(s, s.strstart, s.strstart - 1, s.match_length);\n\n /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n s.strstart += s.match_length;\n s.match_length = 0;\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table.\n * (It will be regenerated if this run of deflate switches away from Huffman.)\n */\nfunction deflate_huff(s, flush) {\n var bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we have a literal to write. */\n if (s.lookahead === 0) {\n fill_window(s);\n if (s.lookahead === 0) {\n if (flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n break; /* flush the current block */\n }\n }\n\n /* Output a literal byte */\n s.match_length = 0;\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n s.lookahead--;\n s.strstart++;\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* Values for max_lazy_match, good_match and max_chain_length, depending on\n * the desired pack level (0..9). The values given below have been tuned to\n * exclude worst case performance for pathological files. Better values may be\n * found for specific files.\n */\nvar Config = function (good_length, max_lazy, nice_length, max_chain, func) {\n this.good_length = good_length;\n this.max_lazy = max_lazy;\n this.nice_length = nice_length;\n this.max_chain = max_chain;\n this.func = func;\n};\n\nvar configuration_table;\n\nconfiguration_table = [\n /* good lazy nice chain */\n new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */\n new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */\n new Config(4, 5, 16, 8, deflate_fast), /* 2 */\n new Config(4, 6, 32, 32, deflate_fast), /* 3 */\n\n new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */\n new Config(8, 16, 32, 32, deflate_slow), /* 5 */\n new Config(8, 16, 128, 128, deflate_slow), /* 6 */\n new Config(8, 32, 128, 256, deflate_slow), /* 7 */\n new Config(32, 128, 258, 1024, deflate_slow), /* 8 */\n new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */\n];\n\n\n/* ===========================================================================\n * Initialize the \"longest match\" routines for a new zlib stream\n */\nfunction lm_init(s) {\n s.window_size = 2 * s.w_size;\n\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n\n /* Set the default configuration parameters:\n */\n s.max_lazy_match = configuration_table[s.level].max_lazy;\n s.good_match = configuration_table[s.level].good_length;\n s.nice_match = configuration_table[s.level].nice_length;\n s.max_chain_length = configuration_table[s.level].max_chain;\n\n s.strstart = 0;\n s.block_start = 0;\n s.lookahead = 0;\n s.insert = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n s.ins_h = 0;\n}\n\n\nfunction DeflateState() {\n this.strm = null; /* pointer back to this zlib stream */\n this.status = 0; /* as the name implies */\n this.pending_buf = null; /* output still pending */\n this.pending_buf_size = 0; /* size of pending_buf */\n this.pending_out = 0; /* next pending byte to output to the stream */\n this.pending = 0; /* nb of bytes in the pending buffer */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n this.gzhead = null; /* gzip header information to write */\n this.gzindex = 0; /* where in extra, name, or comment */\n this.method = Z_DEFLATED; /* can only be DEFLATED */\n this.last_flush = -1; /* value of flush param for previous deflate call */\n\n this.w_size = 0; /* LZ77 window size (32K by default) */\n this.w_bits = 0; /* log2(w_size) (8..16) */\n this.w_mask = 0; /* w_size - 1 */\n\n this.window = null;\n /* Sliding window. Input bytes are read into the second half of the window,\n * and move to the first half later to keep a dictionary of at least wSize\n * bytes. With this organization, matches are limited to a distance of\n * wSize-MAX_MATCH bytes, but this ensures that IO is always\n * performed with a length multiple of the block size.\n */\n\n this.window_size = 0;\n /* Actual size of window: 2*wSize, except when the user input buffer\n * is directly used as sliding window.\n */\n\n this.prev = null;\n /* Link to older string with same hash index. To limit the size of this\n * array to 64K, this link is maintained only for the last 32K strings.\n * An index in this array is thus a window index modulo 32K.\n */\n\n this.head = null; /* Heads of the hash chains or NIL. */\n\n this.ins_h = 0; /* hash index of string to be inserted */\n this.hash_size = 0; /* number of elements in hash table */\n this.hash_bits = 0; /* log2(hash_size) */\n this.hash_mask = 0; /* hash_size-1 */\n\n this.hash_shift = 0;\n /* Number of bits by which ins_h must be shifted at each input\n * step. It must be such that after MIN_MATCH steps, the oldest\n * byte no longer takes part in the hash key, that is:\n * hash_shift * MIN_MATCH >= hash_bits\n */\n\n this.block_start = 0;\n /* Window position at the beginning of the current output block. Gets\n * negative when the window is moved backwards.\n */\n\n this.match_length = 0; /* length of best match */\n this.prev_match = 0; /* previous match */\n this.match_available = 0; /* set if previous match exists */\n this.strstart = 0; /* start of string to insert */\n this.match_start = 0; /* start of matching string */\n this.lookahead = 0; /* number of valid bytes ahead in window */\n\n this.prev_length = 0;\n /* Length of the best match at previous step. Matches not greater than this\n * are discarded. This is used in the lazy match evaluation.\n */\n\n this.max_chain_length = 0;\n /* To speed up deflation, hash chains are never searched beyond this\n * length. A higher limit improves compression ratio but degrades the\n * speed.\n */\n\n this.max_lazy_match = 0;\n /* Attempt to find a better match only when the current match is strictly\n * smaller than this value. This mechanism is used only for compression\n * levels >= 4.\n */\n // That's alias to max_lazy_match, don't use directly\n //this.max_insert_length = 0;\n /* Insert new strings in the hash table only if the match length is not\n * greater than this length. This saves time but degrades compression.\n * max_insert_length is used only for compression levels <= 3.\n */\n\n this.level = 0; /* compression level (1..9) */\n this.strategy = 0; /* favor or force Huffman coding*/\n\n this.good_match = 0;\n /* Use a faster search when the previous match is longer than this */\n\n this.nice_match = 0; /* Stop searching when current match exceeds this */\n\n /* used by trees.c: */\n\n /* Didn't use ct_data typedef below to suppress compiler warning */\n\n // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */\n // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */\n\n // Use flat array of DOUBLE size, with interleaved fata,\n // because JS does not support effective\n this.dyn_ltree = new utils.Buf16(HEAP_SIZE * 2);\n this.dyn_dtree = new utils.Buf16((2*D_CODES+1) * 2);\n this.bl_tree = new utils.Buf16((2*BL_CODES+1) * 2);\n zero(this.dyn_ltree);\n zero(this.dyn_dtree);\n zero(this.bl_tree);\n\n this.l_desc = null; /* desc. for literal tree */\n this.d_desc = null; /* desc. for distance tree */\n this.bl_desc = null; /* desc. for bit length tree */\n\n //ush bl_count[MAX_BITS+1];\n this.bl_count = new utils.Buf16(MAX_BITS+1);\n /* number of codes at each bit length for an optimal tree */\n\n //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */\n this.heap = new utils.Buf16(2*L_CODES+1); /* heap used to build the Huffman trees */\n zero(this.heap);\n\n this.heap_len = 0; /* number of elements in the heap */\n this.heap_max = 0; /* element of largest frequency */\n /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n * The same heap array is used to build all trees.\n */\n\n this.depth = new utils.Buf16(2*L_CODES+1); //uch depth[2*L_CODES+1];\n zero(this.depth);\n /* Depth of each subtree used as tie breaker for trees of equal frequency\n */\n\n this.l_buf = 0; /* buffer index for literals or lengths */\n\n this.lit_bufsize = 0;\n /* Size of match buffer for literals/lengths. There are 4 reasons for\n * limiting lit_bufsize to 64K:\n * - frequencies can be kept in 16 bit counters\n * - if compression is not successful for the first block, all input\n * data is still in the window so we can still emit a stored block even\n * when input comes from standard input. (This can also be done for\n * all blocks if lit_bufsize is not greater than 32K.)\n * - if compression is not successful for a file smaller than 64K, we can\n * even emit a stored file instead of a stored block (saving 5 bytes).\n * This is applicable only for zip (not gzip or zlib).\n * - creating new Huffman trees less frequently may not provide fast\n * adaptation to changes in the input data statistics. (Take for\n * example a binary file with poorly compressible code followed by\n * a highly compressible string table.) Smaller buffer sizes give\n * fast adaptation but have of course the overhead of transmitting\n * trees more frequently.\n * - I can't count above 4\n */\n\n this.last_lit = 0; /* running index in l_buf */\n\n this.d_buf = 0;\n /* Buffer index for distances. To simplify the code, d_buf and l_buf have\n * the same number of elements. To use different lengths, an extra flag\n * array would be necessary.\n */\n\n this.opt_len = 0; /* bit length of current block with optimal trees */\n this.static_len = 0; /* bit length of current block with static trees */\n this.matches = 0; /* number of string matches in current block */\n this.insert = 0; /* bytes at end of window left to insert */\n\n\n this.bi_buf = 0;\n /* Output buffer. bits are inserted starting at the bottom (least\n * significant bits).\n */\n this.bi_valid = 0;\n /* Number of valid bits in bi_buf. All bits above the last valid bit\n * are always zero.\n */\n\n // Used for window memory init. We safely ignore it for JS. That makes\n // sense only for pointers and memory check tools.\n //this.high_water = 0;\n /* High water mark offset in window for initialized bytes -- bytes above\n * this are set to zero in order to avoid memory check warnings when\n * longest match routines access bytes past the input. This is then\n * updated to the new high water mark.\n */\n}\n\n\nfunction deflateResetKeep(strm) {\n var s;\n\n if (!strm || !strm.state) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n strm.total_in = strm.total_out = 0;\n strm.data_type = Z_UNKNOWN;\n\n s = strm.state;\n s.pending = 0;\n s.pending_out = 0;\n\n if (s.wrap < 0) {\n s.wrap = -s.wrap;\n /* was made negative by deflate(..., Z_FINISH); */\n }\n s.status = (s.wrap ? INIT_STATE : BUSY_STATE);\n strm.adler = (s.wrap === 2) ?\n 0 // crc32(0, Z_NULL, 0)\n :\n 1; // adler32(0, Z_NULL, 0)\n s.last_flush = Z_NO_FLUSH;\n trees._tr_init(s);\n return Z_OK;\n}\n\n\nfunction deflateReset(strm) {\n var ret = deflateResetKeep(strm);\n if (ret === Z_OK) {\n lm_init(strm.state);\n }\n return ret;\n}\n\n\nfunction deflateSetHeader(strm, head) {\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; }\n strm.state.gzhead = head;\n return Z_OK;\n}\n\n\nfunction deflateInit2(strm, level, method, windowBits, memLevel, strategy) {\n if (!strm) { // === Z_NULL\n return Z_STREAM_ERROR;\n }\n var wrap = 1;\n\n if (level === Z_DEFAULT_COMPRESSION) {\n level = 6;\n }\n\n if (windowBits < 0) { /* suppress zlib wrapper */\n wrap = 0;\n windowBits = -windowBits;\n }\n\n else if (windowBits > 15) {\n wrap = 2; /* write gzip wrapper instead */\n windowBits -= 16;\n }\n\n\n if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED ||\n windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||\n strategy < 0 || strategy > Z_FIXED) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n\n if (windowBits === 8) {\n windowBits = 9;\n }\n /* until 256-byte window bug fixed */\n\n var s = new DeflateState();\n\n strm.state = s;\n s.strm = strm;\n\n s.wrap = wrap;\n s.gzhead = null;\n s.w_bits = windowBits;\n s.w_size = 1 << s.w_bits;\n s.w_mask = s.w_size - 1;\n\n s.hash_bits = memLevel + 7;\n s.hash_size = 1 << s.hash_bits;\n s.hash_mask = s.hash_size - 1;\n s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n\n s.window = new utils.Buf8(s.w_size * 2);\n s.head = new utils.Buf16(s.hash_size);\n s.prev = new utils.Buf16(s.w_size);\n\n // Don't need mem init magic for JS.\n //s.high_water = 0; /* nothing written to s->window yet */\n\n s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */\n\n s.pending_buf_size = s.lit_bufsize * 4;\n s.pending_buf = new utils.Buf8(s.pending_buf_size);\n\n s.d_buf = s.lit_bufsize >> 1;\n s.l_buf = (1 + 2) * s.lit_bufsize;\n\n s.level = level;\n s.strategy = strategy;\n s.method = method;\n\n return deflateReset(strm);\n}\n\nfunction deflateInit(strm, level) {\n return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);\n}\n\n\nfunction deflate(strm, flush) {\n var old_flush, s;\n var beg, val; // for gzip header write only\n\n if (!strm || !strm.state ||\n flush > Z_BLOCK || flush < 0) {\n return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;\n }\n\n s = strm.state;\n\n if (!strm.output ||\n (!strm.input && strm.avail_in !== 0) ||\n (s.status === FINISH_STATE && flush !== Z_FINISH)) {\n return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR);\n }\n\n s.strm = strm; /* just in case */\n old_flush = s.last_flush;\n s.last_flush = flush;\n\n /* Write the header */\n if (s.status === INIT_STATE) {\n\n if (s.wrap === 2) { // GZIP header\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n put_byte(s, 31);\n put_byte(s, 139);\n put_byte(s, 8);\n if (!s.gzhead) { // s->gzhead == Z_NULL\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, OS_CODE);\n s.status = BUSY_STATE;\n }\n else {\n put_byte(s, (s.gzhead.text ? 1 : 0) +\n (s.gzhead.hcrc ? 2 : 0) +\n (!s.gzhead.extra ? 0 : 4) +\n (!s.gzhead.name ? 0 : 8) +\n (!s.gzhead.comment ? 0 : 16)\n );\n put_byte(s, s.gzhead.time & 0xff);\n put_byte(s, (s.gzhead.time >> 8) & 0xff);\n put_byte(s, (s.gzhead.time >> 16) & 0xff);\n put_byte(s, (s.gzhead.time >> 24) & 0xff);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, s.gzhead.os & 0xff);\n if (s.gzhead.extra && s.gzhead.extra.length) {\n put_byte(s, s.gzhead.extra.length & 0xff);\n put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);\n }\n if (s.gzhead.hcrc) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);\n }\n s.gzindex = 0;\n s.status = EXTRA_STATE;\n }\n }\n else // DEFLATE header\n {\n var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;\n var level_flags = -1;\n\n if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {\n level_flags = 0;\n } else if (s.level < 6) {\n level_flags = 1;\n } else if (s.level === 6) {\n level_flags = 2;\n } else {\n level_flags = 3;\n }\n header |= (level_flags << 6);\n if (s.strstart !== 0) { header |= PRESET_DICT; }\n header += 31 - (header % 31);\n\n s.status = BUSY_STATE;\n putShortMSB(s, header);\n\n /* Save the adler32 of the preset dictionary: */\n if (s.strstart !== 0) {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n strm.adler = 1; // adler32(0L, Z_NULL, 0);\n }\n }\n\n//#ifdef GZIP\n if (s.status === EXTRA_STATE) {\n if (s.gzhead.extra/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n\n while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n break;\n }\n }\n put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);\n s.gzindex++;\n }\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (s.gzindex === s.gzhead.extra.length) {\n s.gzindex = 0;\n s.status = NAME_STATE;\n }\n }\n else {\n s.status = NAME_STATE;\n }\n }\n if (s.status === NAME_STATE) {\n if (s.gzhead.name/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n //int val;\n\n do {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n val = 1;\n break;\n }\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.name.length) {\n val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n\n if (s.gzhead.hcrc && s.pending > beg){\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (val === 0) {\n s.gzindex = 0;\n s.status = COMMENT_STATE;\n }\n }\n else {\n s.status = COMMENT_STATE;\n }\n }\n if (s.status === COMMENT_STATE) {\n if (s.gzhead.comment/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n //int val;\n\n do {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n val = 1;\n break;\n }\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.comment.length) {\n val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (val === 0) {\n s.status = HCRC_STATE;\n }\n }\n else {\n s.status = HCRC_STATE;\n }\n }\n if (s.status === HCRC_STATE) {\n if (s.gzhead.hcrc) {\n if (s.pending + 2 > s.pending_buf_size) {\n flush_pending(strm);\n }\n if (s.pending + 2 <= s.pending_buf_size) {\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n s.status = BUSY_STATE;\n }\n }\n else {\n s.status = BUSY_STATE;\n }\n }\n//#endif\n\n /* Flush as much pending output as possible */\n if (s.pending !== 0) {\n flush_pending(strm);\n if (strm.avail_out === 0) {\n /* Since avail_out is 0, deflate will be called again with\n * more output space, but possibly with both pending and\n * avail_in equal to zero. There won't be anything to do,\n * but this is not an error situation so make sure we\n * return OK instead of BUF_ERROR at next call of deflate:\n */\n s.last_flush = -1;\n return Z_OK;\n }\n\n /* Make sure there is something to do and avoid duplicate consecutive\n * flushes. For repeated and useless calls with Z_FINISH, we keep\n * returning Z_STREAM_END instead of Z_BUF_ERROR.\n */\n } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&\n flush !== Z_FINISH) {\n return err(strm, Z_BUF_ERROR);\n }\n\n /* User must not provide more input after the first FINISH: */\n if (s.status === FINISH_STATE && strm.avail_in !== 0) {\n return err(strm, Z_BUF_ERROR);\n }\n\n /* Start a new block or continue the current one.\n */\n if (strm.avail_in !== 0 || s.lookahead !== 0 ||\n (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) {\n var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :\n (s.strategy === Z_RLE ? deflate_rle(s, flush) :\n configuration_table[s.level].func(s, flush));\n\n if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {\n s.status = FINISH_STATE;\n }\n if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n if (strm.avail_out === 0) {\n s.last_flush = -1;\n /* avoid BUF_ERROR next call, see above */\n }\n return Z_OK;\n /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n * of deflate should use the same flush parameter to make sure\n * that the flush is complete. So we don't have to output an\n * empty block here, this will be done at next call. This also\n * ensures that for a very small output buffer, we emit at most\n * one empty block.\n */\n }\n if (bstate === BS_BLOCK_DONE) {\n if (flush === Z_PARTIAL_FLUSH) {\n trees._tr_align(s);\n }\n else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */\n\n trees._tr_stored_block(s, 0, 0, false);\n /* For a full flush, this empty block will be recognized\n * as a special marker by inflate_sync().\n */\n if (flush === Z_FULL_FLUSH) {\n /*** CLEAR_HASH(s); ***/ /* forget history */\n zero(s.head); // Fill with NIL (= 0);\n\n if (s.lookahead === 0) {\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n }\n }\n flush_pending(strm);\n if (strm.avail_out === 0) {\n s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */\n return Z_OK;\n }\n }\n }\n //Assert(strm->avail_out > 0, \"bug2\");\n //if (strm.avail_out <= 0) { throw new Error(\"bug2\");}\n\n if (flush !== Z_FINISH) { return Z_OK; }\n if (s.wrap <= 0) { return Z_STREAM_END; }\n\n /* Write the trailer */\n if (s.wrap === 2) {\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n put_byte(s, (strm.adler >> 16) & 0xff);\n put_byte(s, (strm.adler >> 24) & 0xff);\n put_byte(s, strm.total_in & 0xff);\n put_byte(s, (strm.total_in >> 8) & 0xff);\n put_byte(s, (strm.total_in >> 16) & 0xff);\n put_byte(s, (strm.total_in >> 24) & 0xff);\n }\n else\n {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n\n flush_pending(strm);\n /* If avail_out is zero, the application will call deflate again\n * to flush the rest.\n */\n if (s.wrap > 0) { s.wrap = -s.wrap; }\n /* write the trailer only once! */\n return s.pending !== 0 ? Z_OK : Z_STREAM_END;\n}\n\nfunction deflateEnd(strm) {\n var status;\n\n if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n return Z_STREAM_ERROR;\n }\n\n status = strm.state.status;\n if (status !== INIT_STATE &&\n status !== EXTRA_STATE &&\n status !== NAME_STATE &&\n status !== COMMENT_STATE &&\n status !== HCRC_STATE &&\n status !== BUSY_STATE &&\n status !== FINISH_STATE\n ) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n strm.state = null;\n\n return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;\n}\n\n/* =========================================================================\n * Copy the source state to the destination state\n */\n//function deflateCopy(dest, source) {\n//\n//}\n\nexports.deflateInit = deflateInit;\nexports.deflateInit2 = deflateInit2;\nexports.deflateReset = deflateReset;\nexports.deflateResetKeep = deflateResetKeep;\nexports.deflateSetHeader = deflateSetHeader;\nexports.deflate = deflate;\nexports.deflateEnd = deflateEnd;\nexports.deflateInfo = 'pako deflate (from Nodeca project)';\n\n/* Not implemented\nexports.deflateBound = deflateBound;\nexports.deflateCopy = deflateCopy;\nexports.deflateSetDictionary = deflateSetDictionary;\nexports.deflateParams = deflateParams;\nexports.deflatePending = deflatePending;\nexports.deflatePrime = deflatePrime;\nexports.deflateTune = deflateTune;\n*/\n},{\"../utils/common\":27,\"./adler32\":29,\"./crc32\":31,\"./messages\":37,\"./trees\":38}],33:[function(_dereq_,module,exports){\n'use strict';\n\n\nfunction GZheader() {\n /* true if compressed data believed to be text */\n this.text = 0;\n /* modification time */\n this.time = 0;\n /* extra flags (not used when writing a gzip file) */\n this.xflags = 0;\n /* operating system */\n this.os = 0;\n /* pointer to extra field or Z_NULL if none */\n this.extra = null;\n /* extra field length (valid if extra != Z_NULL) */\n this.extra_len = 0; // Actually, we don't need it in JS,\n // but leave for few code modifications\n\n //\n // Setup limits is not necessary because in js we should not preallocate memory\n // for inflate use constant limit in 65536 bytes\n //\n\n /* space at extra (only when reading header) */\n // this.extra_max = 0;\n /* pointer to zero-terminated file name or Z_NULL */\n this.name = '';\n /* space at name (only when reading header) */\n // this.name_max = 0;\n /* pointer to zero-terminated comment or Z_NULL */\n this.comment = '';\n /* space at comment (only when reading header) */\n // this.comm_max = 0;\n /* true if there was or will be a header crc */\n this.hcrc = 0;\n /* true when done reading gzip header (not used when writing a gzip file) */\n this.done = false;\n}\n\nmodule.exports = GZheader;\n},{}],34:[function(_dereq_,module,exports){\n'use strict';\n\n// See state defs from inflate.js\nvar BAD = 30; /* got a data error -- remain here until reset */\nvar TYPE = 12; /* i: waiting for type bits, including last-flag bit */\n\n/*\n Decode literal, length, and distance codes and write out the resulting\n literal and match bytes until either not enough input or output is\n available, an end-of-block is encountered, or a data error is encountered.\n When large enough input and output buffers are supplied to inflate(), for\n example, a 16K input buffer and a 64K output buffer, more than 95% of the\n inflate execution time is spent in this routine.\n\n Entry assumptions:\n\n state.mode === LEN\n strm.avail_in >= 6\n strm.avail_out >= 258\n start >= strm.avail_out\n state.bits < 8\n\n On return, state.mode is one of:\n\n LEN -- ran out of enough output space or enough available input\n TYPE -- reached end of block code, inflate() to interpret next block\n BAD -- error in block data\n\n Notes:\n\n - The maximum input bits used by a length/distance pair is 15 bits for the\n length code, 5 bits for the length extra, 15 bits for the distance code,\n and 13 bits for the distance extra. This totals 48 bits, or six bytes.\n Therefore if strm.avail_in >= 6, then there is enough input to avoid\n checking for available input while decoding.\n\n - The maximum bytes that a single length/distance pair can output is 258\n bytes, which is the maximum length that can be coded. inflate_fast()\n requires strm.avail_out >= 258 for each loop to avoid checking for\n output space.\n */\nmodule.exports = function inflate_fast(strm, start) {\n var state;\n var _in; /* local strm.input */\n var last; /* have enough input while in < last */\n var _out; /* local strm.output */\n var beg; /* inflate()'s initial strm.output */\n var end; /* while out < end, enough space available */\n//#ifdef INFLATE_STRICT\n var dmax; /* maximum distance from zlib header */\n//#endif\n var wsize; /* window size or zero if not using window */\n var whave; /* valid bytes in the window */\n var wnext; /* window write index */\n var window; /* allocated sliding window, if wsize != 0 */\n var hold; /* local strm.hold */\n var bits; /* local strm.bits */\n var lcode; /* local strm.lencode */\n var dcode; /* local strm.distcode */\n var lmask; /* mask for first level of length codes */\n var dmask; /* mask for first level of distance codes */\n var here; /* retrieved table entry */\n var op; /* code bits, operation, extra bits, or */\n /* window position, window bytes to copy */\n var len; /* match length, unused bytes */\n var dist; /* match distance */\n var from; /* where to copy match from */\n var from_source;\n\n\n var input, output; // JS specific, because we have no pointers\n\n /* copy state to local variables */\n state = strm.state;\n //here = state.here;\n _in = strm.next_in;\n input = strm.input;\n last = _in + (strm.avail_in - 5);\n _out = strm.next_out;\n output = strm.output;\n beg = _out - (start - strm.avail_out);\n end = _out + (strm.avail_out - 257);\n//#ifdef INFLATE_STRICT\n dmax = state.dmax;\n//#endif\n wsize = state.wsize;\n whave = state.whave;\n wnext = state.wnext;\n window = state.window;\n hold = state.hold;\n bits = state.bits;\n lcode = state.lencode;\n dcode = state.distcode;\n lmask = (1 << state.lenbits) - 1;\n dmask = (1 << state.distbits) - 1;\n\n\n /* decode literals and length/distances until end-of-block or not enough\n input data or output space */\n\n top:\n do {\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n\n here = lcode[hold & lmask];\n\n dolen:\n for (;;) { // Goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n if (op === 0) { /* literal */\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n output[_out++] = here & 0xffff/*here.val*/;\n }\n else if (op & 16) { /* length base */\n len = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (op) {\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n len += hold & ((1 << op) - 1);\n hold >>>= op;\n bits -= op;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", len));\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n here = dcode[hold & dmask];\n\n dodist:\n for (;;) { // goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n\n if (op & 16) { /* distance base */\n dist = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n }\n dist += hold & ((1 << op) - 1);\n//#ifdef INFLATE_STRICT\n if (dist > dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break top;\n }\n//#endif\n hold >>>= op;\n bits -= op;\n //Tracevv((stderr, \"inflate: distance %u\\n\", dist));\n op = _out - beg; /* max distance in output */\n if (dist > op) { /* see if copy from window */\n op = dist - op; /* distance back in window */\n if (op > whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break top;\n }\n\n// (!) This block is disabled in zlib defailts,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// if (len <= op - whave) {\n// do {\n// output[_out++] = 0;\n// } while (--len);\n// continue top;\n// }\n// len -= op - whave;\n// do {\n// output[_out++] = 0;\n// } while (--op > whave);\n// if (op === 0) {\n// from = _out - dist;\n// do {\n// output[_out++] = output[from++];\n// } while (--len);\n// continue top;\n// }\n//#endif\n }\n from = 0; // window index\n from_source = window;\n if (wnext === 0) { /* very common case */\n from += wsize - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n else if (wnext < op) { /* wrap around window */\n from += wsize + wnext - op;\n op -= wnext;\n if (op < len) { /* some from end of window */\n len -= op;\n do {\n output[_out++] = window[from++];\n } while (--op);\n from = 0;\n if (wnext < len) { /* some from start of window */\n op = wnext;\n len -= op;\n do {\n output[_out++] = window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n }\n else { /* contiguous in window */\n from += wnext - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n while (len > 2) {\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n len -= 3;\n }\n if (len) {\n output[_out++] = from_source[from++];\n if (len > 1) {\n output[_out++] = from_source[from++];\n }\n }\n }\n else {\n from = _out - dist; /* copy direct from output */\n do { /* minimum length is three */\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n len -= 3;\n } while (len > 2);\n if (len) {\n output[_out++] = output[from++];\n if (len > 1) {\n output[_out++] = output[from++];\n }\n }\n }\n }\n else if ((op & 64) === 0) { /* 2nd level distance code */\n here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dodist;\n }\n else {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n }\n else if ((op & 64) === 0) { /* 2nd level length code */\n here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dolen;\n }\n else if (op & 32) { /* end-of-block */\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.mode = TYPE;\n break top;\n }\n else {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n } while (_in < last && _out < end);\n\n /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n len = bits >> 3;\n _in -= len;\n bits -= len << 3;\n hold &= (1 << bits) - 1;\n\n /* update state and return */\n strm.next_in = _in;\n strm.next_out = _out;\n strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));\n strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));\n state.hold = hold;\n state.bits = bits;\n return;\n};\n\n},{}],35:[function(_dereq_,module,exports){\n'use strict';\n\n\nvar utils = _dereq_('../utils/common');\nvar adler32 = _dereq_('./adler32');\nvar crc32 = _dereq_('./crc32');\nvar inflate_fast = _dereq_('./inffast');\nvar inflate_table = _dereq_('./inftrees');\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\n//var Z_NO_FLUSH = 0;\n//var Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH = 2;\n//var Z_FULL_FLUSH = 3;\nvar Z_FINISH = 4;\nvar Z_BLOCK = 5;\nvar Z_TREES = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK = 0;\nvar Z_STREAM_END = 1;\nvar Z_NEED_DICT = 2;\n//var Z_ERRNO = -1;\nvar Z_STREAM_ERROR = -2;\nvar Z_DATA_ERROR = -3;\nvar Z_MEM_ERROR = -4;\nvar Z_BUF_ERROR = -5;\n//var Z_VERSION_ERROR = -6;\n\n/* The deflate compression method */\nvar Z_DEFLATED = 8;\n\n\n/* STATES ====================================================================*/\n/* ===========================================================================*/\n\n\nvar HEAD = 1; /* i: waiting for magic header */\nvar FLAGS = 2; /* i: waiting for method and flags (gzip) */\nvar TIME = 3; /* i: waiting for modification time (gzip) */\nvar OS = 4; /* i: waiting for extra flags and operating system (gzip) */\nvar EXLEN = 5; /* i: waiting for extra length (gzip) */\nvar EXTRA = 6; /* i: waiting for extra bytes (gzip) */\nvar NAME = 7; /* i: waiting for end of file name (gzip) */\nvar COMMENT = 8; /* i: waiting for end of comment (gzip) */\nvar HCRC = 9; /* i: waiting for header crc (gzip) */\nvar DICTID = 10; /* i: waiting for dictionary check value */\nvar DICT = 11; /* waiting for inflateSetDictionary() call */\nvar TYPE = 12; /* i: waiting for type bits, including last-flag bit */\nvar TYPEDO = 13; /* i: same, but skip check to exit inflate on new block */\nvar STORED = 14; /* i: waiting for stored size (length and complement) */\nvar COPY_ = 15; /* i/o: same as COPY below, but only first time in */\nvar COPY = 16; /* i/o: waiting for input or output to copy stored block */\nvar TABLE = 17; /* i: waiting for dynamic block table lengths */\nvar LENLENS = 18; /* i: waiting for code length code lengths */\nvar CODELENS = 19; /* i: waiting for length/lit and distance code lengths */\nvar LEN_ = 20; /* i: same as LEN below, but only first time in */\nvar LEN = 21; /* i: waiting for length/lit/eob code */\nvar LENEXT = 22; /* i: waiting for length extra bits */\nvar DIST = 23; /* i: waiting for distance code */\nvar DISTEXT = 24; /* i: waiting for distance extra bits */\nvar MATCH = 25; /* o: waiting for output space to copy string */\nvar LIT = 26; /* o: waiting for output space to write literal */\nvar CHECK = 27; /* i: waiting for 32-bit check value */\nvar LENGTH = 28; /* i: waiting for 32-bit length (gzip) */\nvar DONE = 29; /* finished check, done -- remain here until reset */\nvar BAD = 30; /* got a data error -- remain here until reset */\nvar MEM = 31; /* got an inflate() memory error -- remain here until reset */\nvar SYNC = 32; /* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\n\n\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_WBITS = MAX_WBITS;\n\n\nfunction ZSWAP32(q) {\n return (((q >>> 24) & 0xff) +\n ((q >>> 8) & 0xff00) +\n ((q & 0xff00) << 8) +\n ((q & 0xff) << 24));\n}\n\n\nfunction InflateState() {\n this.mode = 0; /* current inflate mode */\n this.last = false; /* true if processing last block */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n this.havedict = false; /* true if dictionary provided */\n this.flags = 0; /* gzip header method and flags (0 if zlib) */\n this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */\n this.check = 0; /* protected copy of check value */\n this.total = 0; /* protected copy of output count */\n // TODO: may be {}\n this.head = null; /* where to save gzip header information */\n\n /* sliding window */\n this.wbits = 0; /* log base 2 of requested window size */\n this.wsize = 0; /* window size or zero if not using window */\n this.whave = 0; /* valid bytes in the window */\n this.wnext = 0; /* window write index */\n this.window = null; /* allocated sliding window, if needed */\n\n /* bit accumulator */\n this.hold = 0; /* input bit accumulator */\n this.bits = 0; /* number of bits in \"in\" */\n\n /* for string and stored block copying */\n this.length = 0; /* literal or length of data to copy */\n this.offset = 0; /* distance back to copy string from */\n\n /* for table and code decoding */\n this.extra = 0; /* extra bits needed */\n\n /* fixed and dynamic code tables */\n this.lencode = null; /* starting table for length/literal codes */\n this.distcode = null; /* starting table for distance codes */\n this.lenbits = 0; /* index bits for lencode */\n this.distbits = 0; /* index bits for distcode */\n\n /* dynamic table building */\n this.ncode = 0; /* number of code length code lengths */\n this.nlen = 0; /* number of length code lengths */\n this.ndist = 0; /* number of distance code lengths */\n this.have = 0; /* number of code lengths in lens[] */\n this.next = null; /* next available space in codes[] */\n\n this.lens = new utils.Buf16(320); /* temporary storage for code lengths */\n this.work = new utils.Buf16(288); /* work area for code table building */\n\n /*\n because we don't have pointers in js, we use lencode and distcode directly\n as buffers so we don't need codes\n */\n //this.codes = new utils.Buf32(ENOUGH); /* space for code tables */\n this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */\n this.distdyn = null; /* dynamic table for distance codes (JS specific) */\n this.sane = 0; /* if false, allow invalid distance too far */\n this.back = 0; /* bits back of last unprocessed length/lit */\n this.was = 0; /* initial length of match */\n}\n\nfunction inflateResetKeep(strm) {\n var state;\n\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n strm.total_in = strm.total_out = state.total = 0;\n strm.msg = ''; /*Z_NULL*/\n if (state.wrap) { /* to support ill-conceived Java test suite */\n strm.adler = state.wrap & 1;\n }\n state.mode = HEAD;\n state.last = 0;\n state.havedict = 0;\n state.dmax = 32768;\n state.head = null/*Z_NULL*/;\n state.hold = 0;\n state.bits = 0;\n //state.lencode = state.distcode = state.next = state.codes;\n state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);\n state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);\n\n state.sane = 1;\n state.back = -1;\n //Tracev((stderr, \"inflate: reset\\n\"));\n return Z_OK;\n}\n\nfunction inflateReset(strm) {\n var state;\n\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n state.wsize = 0;\n state.whave = 0;\n state.wnext = 0;\n return inflateResetKeep(strm);\n\n}\n\nfunction inflateReset2(strm, windowBits) {\n var wrap;\n var state;\n\n /* get the state */\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n\n /* extract wrap request from windowBits parameter */\n if (windowBits < 0) {\n wrap = 0;\n windowBits = -windowBits;\n }\n else {\n wrap = (windowBits >> 4) + 1;\n if (windowBits < 48) {\n windowBits &= 15;\n }\n }\n\n /* set number of window bits, free window if different */\n if (windowBits && (windowBits < 8 || windowBits > 15)) {\n return Z_STREAM_ERROR;\n }\n if (state.window !== null && state.wbits !== windowBits) {\n state.window = null;\n }\n\n /* update state and reset the rest of it */\n state.wrap = wrap;\n state.wbits = windowBits;\n return inflateReset(strm);\n}\n\nfunction inflateInit2(strm, windowBits) {\n var ret;\n var state;\n\n if (!strm) { return Z_STREAM_ERROR; }\n //strm.msg = Z_NULL; /* in case we return an error */\n\n state = new InflateState();\n\n //if (state === Z_NULL) return Z_MEM_ERROR;\n //Tracev((stderr, \"inflate: allocated\\n\"));\n strm.state = state;\n state.window = null/*Z_NULL*/;\n ret = inflateReset2(strm, windowBits);\n if (ret !== Z_OK) {\n strm.state = null/*Z_NULL*/;\n }\n return ret;\n}\n\nfunction inflateInit(strm) {\n return inflateInit2(strm, DEF_WBITS);\n}\n\n\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding. Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter. This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time. However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\nvar virgin = true;\n\nvar lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\nfunction fixedtables(state) {\n /* build fixed huffman tables if first call (may not be thread safe) */\n if (virgin) {\n var sym;\n\n lenfix = new utils.Buf32(512);\n distfix = new utils.Buf32(32);\n\n /* literal/length table */\n sym = 0;\n while (sym < 144) { state.lens[sym++] = 8; }\n while (sym < 256) { state.lens[sym++] = 9; }\n while (sym < 280) { state.lens[sym++] = 7; }\n while (sym < 288) { state.lens[sym++] = 8; }\n\n inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, {bits: 9});\n\n /* distance table */\n sym = 0;\n while (sym < 32) { state.lens[sym++] = 5; }\n\n inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, {bits: 5});\n\n /* do this just once */\n virgin = false;\n }\n\n state.lencode = lenfix;\n state.lenbits = 9;\n state.distcode = distfix;\n state.distbits = 5;\n}\n\n\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning. If window does not exist yet, create it. This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\nfunction updatewindow(strm, src, end, copy) {\n var dist;\n var state = strm.state;\n\n /* if it hasn't been done already, allocate space for the window */\n if (state.window === null) {\n state.wsize = 1 << state.wbits;\n state.wnext = 0;\n state.whave = 0;\n\n state.window = new utils.Buf8(state.wsize);\n }\n\n /* copy state->wsize or less output bytes into the circular window */\n if (copy >= state.wsize) {\n utils.arraySet(state.window,src, end - state.wsize, state.wsize, 0);\n state.wnext = 0;\n state.whave = state.wsize;\n }\n else {\n dist = state.wsize - state.wnext;\n if (dist > copy) {\n dist = copy;\n }\n //zmemcpy(state->window + state->wnext, end - copy, dist);\n utils.arraySet(state.window,src, end - copy, dist, state.wnext);\n copy -= dist;\n if (copy) {\n //zmemcpy(state->window, end - copy, copy);\n utils.arraySet(state.window,src, end - copy, copy, 0);\n state.wnext = copy;\n state.whave = state.wsize;\n }\n else {\n state.wnext += dist;\n if (state.wnext === state.wsize) { state.wnext = 0; }\n if (state.whave < state.wsize) { state.whave += dist; }\n }\n }\n return 0;\n}\n\nfunction inflate(strm, flush) {\n var state;\n var input, output; // input/output buffers\n var next; /* next input INDEX */\n var put; /* next output INDEX */\n var have, left; /* available input and output */\n var hold; /* bit buffer */\n var bits; /* bits in bit buffer */\n var _in, _out; /* save starting available input and output */\n var copy; /* number of stored or match bytes to copy */\n var from; /* where to copy match bytes from */\n var from_source;\n var here = 0; /* current decoding table entry */\n var here_bits, here_op, here_val; // paked \"here\" denormalized (JS specific)\n //var last; /* parent table entry */\n var last_bits, last_op, last_val; // paked \"last\" denormalized (JS specific)\n var len; /* length to copy for repeats, bits to drop */\n var ret; /* return code */\n var hbuf = new utils.Buf8(4); /* buffer for gzip header crc calculation */\n var opts;\n\n var n; // temporary var for NEED_BITS\n\n var order = /* permutation of code lengths */\n [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];\n\n\n if (!strm || !strm.state || !strm.output ||\n (!strm.input && strm.avail_in !== 0)) {\n return Z_STREAM_ERROR;\n }\n\n state = strm.state;\n if (state.mode === TYPE) { state.mode = TYPEDO; } /* skip check */\n\n\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n _in = have;\n _out = left;\n ret = Z_OK;\n\n inf_leave: // goto emulation\n for (;;) {\n switch (state.mode) {\n case HEAD:\n if (state.wrap === 0) {\n state.mode = TYPEDO;\n break;\n }\n //=== NEEDBITS(16);\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */\n state.check = 0/*crc32(0L, Z_NULL, 0)*/;\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = FLAGS;\n break;\n }\n state.flags = 0; /* expect zlib header */\n if (state.head) {\n state.head.done = false;\n }\n if (!(state.wrap & 1) || /* check if zlib header allowed */\n (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {\n strm.msg = 'incorrect header check';\n state.mode = BAD;\n break;\n }\n if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n len = (hold & 0x0f)/*BITS(4)*/ + 8;\n if (state.wbits === 0) {\n state.wbits = len;\n }\n else if (len > state.wbits) {\n strm.msg = 'invalid window size';\n state.mode = BAD;\n break;\n }\n state.dmax = 1 << len;\n //Tracev((stderr, \"inflate: zlib header ok\\n\"));\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = hold & 0x200 ? DICTID : TYPE;\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n break;\n case FLAGS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.flags = hold;\n if ((state.flags & 0xff) !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n if (state.flags & 0xe000) {\n strm.msg = 'unknown header flags set';\n state.mode = BAD;\n break;\n }\n if (state.head) {\n state.head.text = ((hold >> 8) & 1);\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = TIME;\n /* falls through */\n case TIME:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.time = hold;\n }\n if (state.flags & 0x0200) {\n //=== CRC4(state.check, hold)\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n hbuf[2] = (hold >>> 16) & 0xff;\n hbuf[3] = (hold >>> 24) & 0xff;\n state.check = crc32(state.check, hbuf, 4, 0);\n //===\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = OS;\n /* falls through */\n case OS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.xflags = (hold & 0xff);\n state.head.os = (hold >> 8);\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = EXLEN;\n /* falls through */\n case EXLEN:\n if (state.flags & 0x0400) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length = hold;\n if (state.head) {\n state.head.extra_len = hold;\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n else if (state.head) {\n state.head.extra = null/*Z_NULL*/;\n }\n state.mode = EXTRA;\n /* falls through */\n case EXTRA:\n if (state.flags & 0x0400) {\n copy = state.length;\n if (copy > have) { copy = have; }\n if (copy) {\n if (state.head) {\n len = state.head.extra_len - state.length;\n if (!state.head.extra) {\n // Use untyped array for more conveniend processing later\n state.head.extra = new Array(state.head.extra_len);\n }\n utils.arraySet(\n state.head.extra,\n input,\n next,\n // extra field is limited to 65536 bytes\n // - no need for additional size check\n copy,\n /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n len\n );\n //zmemcpy(state.head.extra + len, next,\n // len + copy > state.head.extra_max ?\n // state.head.extra_max - len : copy);\n }\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n state.length -= copy;\n }\n if (state.length) { break inf_leave; }\n }\n state.length = 0;\n state.mode = NAME;\n /* falls through */\n case NAME:\n if (state.flags & 0x0800) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n // TODO: 2 or 1 bytes?\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.name_max*/)) {\n state.head.name += String.fromCharCode(len);\n }\n } while (len && copy < have);\n\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.name = null;\n }\n state.length = 0;\n state.mode = COMMENT;\n /* falls through */\n case COMMENT:\n if (state.flags & 0x1000) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.comm_max*/)) {\n state.head.comment += String.fromCharCode(len);\n }\n } while (len && copy < have);\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.comment = null;\n }\n state.mode = HCRC;\n /* falls through */\n case HCRC:\n if (state.flags & 0x0200) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (hold !== (state.check & 0xffff)) {\n strm.msg = 'header crc mismatch';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n if (state.head) {\n state.head.hcrc = ((state.flags >> 9) & 1);\n state.head.done = true;\n }\n strm.adler = state.check = 0 /*crc32(0L, Z_NULL, 0)*/;\n state.mode = TYPE;\n break;\n case DICTID:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n strm.adler = state.check = ZSWAP32(hold);\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = DICT;\n /* falls through */\n case DICT:\n if (state.havedict === 0) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n return Z_NEED_DICT;\n }\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = TYPE;\n /* falls through */\n case TYPE:\n if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case TYPEDO:\n if (state.last) {\n //--- BYTEBITS() ---//\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n state.mode = CHECK;\n break;\n }\n //=== NEEDBITS(3); */\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.last = (hold & 0x01)/*BITS(1)*/;\n //--- DROPBITS(1) ---//\n hold >>>= 1;\n bits -= 1;\n //---//\n\n switch ((hold & 0x03)/*BITS(2)*/) {\n case 0: /* stored block */\n //Tracev((stderr, \"inflate: stored block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = STORED;\n break;\n case 1: /* fixed block */\n fixedtables(state);\n //Tracev((stderr, \"inflate: fixed codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = LEN_; /* decode codes */\n if (flush === Z_TREES) {\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break inf_leave;\n }\n break;\n case 2: /* dynamic block */\n //Tracev((stderr, \"inflate: dynamic codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = TABLE;\n break;\n case 3:\n strm.msg = 'invalid block type';\n state.mode = BAD;\n }\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break;\n case STORED:\n //--- BYTEBITS() ---// /* go to byte boundary */\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {\n strm.msg = 'invalid stored block lengths';\n state.mode = BAD;\n break;\n }\n state.length = hold & 0xffff;\n //Tracev((stderr, \"inflate: stored length %u\\n\",\n // state.length));\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = COPY_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case COPY_:\n state.mode = COPY;\n /* falls through */\n case COPY:\n copy = state.length;\n if (copy) {\n if (copy > have) { copy = have; }\n if (copy > left) { copy = left; }\n if (copy === 0) { break inf_leave; }\n //--- zmemcpy(put, next, copy); ---\n utils.arraySet(output, input, next, copy, put);\n //---//\n have -= copy;\n next += copy;\n left -= copy;\n put += copy;\n state.length -= copy;\n break;\n }\n //Tracev((stderr, \"inflate: stored end\\n\"));\n state.mode = TYPE;\n break;\n case TABLE:\n //=== NEEDBITS(14); */\n while (bits < 14) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n//#ifndef PKZIP_BUG_WORKAROUND\n if (state.nlen > 286 || state.ndist > 30) {\n strm.msg = 'too many length or distance symbols';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracev((stderr, \"inflate: table sizes ok\\n\"));\n state.have = 0;\n state.mode = LENLENS;\n /* falls through */\n case LENLENS:\n while (state.have < state.ncode) {\n //=== NEEDBITS(3);\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n while (state.have < 19) {\n state.lens[order[state.have++]] = 0;\n }\n // We have separate tables & no pointers. 2 commented lines below not needed.\n //state.next = state.codes;\n //state.lencode = state.next;\n // Switch to use dynamic table\n state.lencode = state.lendyn;\n state.lenbits = 7;\n\n opts = {bits: state.lenbits};\n ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n state.lenbits = opts.bits;\n\n if (ret) {\n strm.msg = 'invalid code lengths set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, \"inflate: code lengths ok\\n\"));\n state.have = 0;\n state.mode = CODELENS;\n /* falls through */\n case CODELENS:\n while (state.have < state.nlen + state.ndist) {\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_val < 16) {\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.lens[state.have++] = here_val;\n }\n else {\n if (here_val === 16) {\n //=== NEEDBITS(here.bits + 2);\n n = here_bits + 2;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n if (state.have === 0) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n len = state.lens[state.have - 1];\n copy = 3 + (hold & 0x03);//BITS(2);\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n }\n else if (here_val === 17) {\n //=== NEEDBITS(here.bits + 3);\n n = here_bits + 3;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 3 + (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n else {\n //=== NEEDBITS(here.bits + 7);\n n = here_bits + 7;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 11 + (hold & 0x7f);//BITS(7);\n //--- DROPBITS(7) ---//\n hold >>>= 7;\n bits -= 7;\n //---//\n }\n if (state.have + copy > state.nlen + state.ndist) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n while (copy--) {\n state.lens[state.have++] = len;\n }\n }\n }\n\n /* handle error breaks in while */\n if (state.mode === BAD) { break; }\n\n /* check for end-of-block code (better have one) */\n if (state.lens[256] === 0) {\n strm.msg = 'invalid code -- missing end-of-block';\n state.mode = BAD;\n break;\n }\n\n /* build code tables -- note: do not change the lenbits or distbits\n values here (9 and 6) without reading the comments in inftrees.h\n concerning the ENOUGH constants, which depend on those values */\n state.lenbits = 9;\n\n opts = {bits: state.lenbits};\n ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.lenbits = opts.bits;\n // state.lencode = state.next;\n\n if (ret) {\n strm.msg = 'invalid literal/lengths set';\n state.mode = BAD;\n break;\n }\n\n state.distbits = 6;\n //state.distcode.copy(state.codes);\n // Switch to use dynamic table\n state.distcode = state.distdyn;\n opts = {bits: state.distbits};\n ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.distbits = opts.bits;\n // state.distcode = state.next;\n\n if (ret) {\n strm.msg = 'invalid distances set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, 'inflate: codes ok\\n'));\n state.mode = LEN_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case LEN_:\n state.mode = LEN;\n /* falls through */\n case LEN:\n if (have >= 6 && left >= 258) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n inflate_fast(strm, _out);\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n if (state.mode === TYPE) {\n state.back = -1;\n }\n break;\n }\n state.back = 0;\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) -1)]; /*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if (here_bits <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_op && (here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.lencode[last_val +\n ((hold & ((1 << (last_bits + last_op)) -1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n state.length = here_val;\n if (here_op === 0) {\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n state.mode = LIT;\n break;\n }\n if (here_op & 32) {\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.back = -1;\n state.mode = TYPE;\n break;\n }\n if (here_op & 64) {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break;\n }\n state.extra = here_op & 15;\n state.mode = LENEXT;\n /* falls through */\n case LENEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length += hold & ((1 << state.extra) -1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", state.length));\n state.was = state.length;\n state.mode = DIST;\n /* falls through */\n case DIST:\n for (;;) {\n here = state.distcode[hold & ((1 << state.distbits) -1)];/*BITS(state.distbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if ((here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.distcode[last_val +\n ((hold & ((1 << (last_bits + last_op)) -1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n if (here_op & 64) {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break;\n }\n state.offset = here_val;\n state.extra = (here_op) & 15;\n state.mode = DISTEXT;\n /* falls through */\n case DISTEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.offset += hold & ((1 << state.extra) -1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n//#ifdef INFLATE_STRICT\n if (state.offset > state.dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracevv((stderr, \"inflate: distance %u\\n\", state.offset));\n state.mode = MATCH;\n /* falls through */\n case MATCH:\n if (left === 0) { break inf_leave; }\n copy = _out - left;\n if (state.offset > copy) { /* copy from window */\n copy = state.offset - copy;\n if (copy > state.whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n// (!) This block is disabled in zlib defailts,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// Trace((stderr, \"inflate.c too far\\n\"));\n// copy -= state.whave;\n// if (copy > state.length) { copy = state.length; }\n// if (copy > left) { copy = left; }\n// left -= copy;\n// state.length -= copy;\n// do {\n// output[put++] = 0;\n// } while (--copy);\n// if (state.length === 0) { state.mode = LEN; }\n// break;\n//#endif\n }\n if (copy > state.wnext) {\n copy -= state.wnext;\n from = state.wsize - copy;\n }\n else {\n from = state.wnext - copy;\n }\n if (copy > state.length) { copy = state.length; }\n from_source = state.window;\n }\n else { /* copy from output */\n from_source = output;\n from = put - state.offset;\n copy = state.length;\n }\n if (copy > left) { copy = left; }\n left -= copy;\n state.length -= copy;\n do {\n output[put++] = from_source[from++];\n } while (--copy);\n if (state.length === 0) { state.mode = LEN; }\n break;\n case LIT:\n if (left === 0) { break inf_leave; }\n output[put++] = state.length;\n left--;\n state.mode = LEN;\n break;\n case CHECK:\n if (state.wrap) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n // Use '|' insdead of '+' to make sure that result is signed\n hold |= input[next++] << bits;\n bits += 8;\n }\n //===//\n _out -= left;\n strm.total_out += _out;\n state.total += _out;\n if (_out) {\n strm.adler = state.check =\n /*UPDATE(state.check, put - _out, _out);*/\n (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));\n\n }\n _out = left;\n // NB: crc32 stored as signed 32-bit int, ZSWAP32 returns signed too\n if ((state.flags ? hold : ZSWAP32(hold)) !== state.check) {\n strm.msg = 'incorrect data check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: check matches trailer\\n\"));\n }\n state.mode = LENGTH;\n /* falls through */\n case LENGTH:\n if (state.wrap && state.flags) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (hold !== (state.total & 0xffffffff)) {\n strm.msg = 'incorrect length check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: length matches trailer\\n\"));\n }\n state.mode = DONE;\n /* falls through */\n case DONE:\n ret = Z_STREAM_END;\n break inf_leave;\n case BAD:\n ret = Z_DATA_ERROR;\n break inf_leave;\n case MEM:\n return Z_MEM_ERROR;\n case SYNC:\n /* falls through */\n default:\n return Z_STREAM_ERROR;\n }\n }\n\n // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n /*\n Return from inflate(), updating the total counts and the check value.\n If there was no progress during the inflate() call, return a buffer\n error. Call updatewindow() to create and/or update the window state.\n Note: a memory error from inflate() is non-recoverable.\n */\n\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n\n if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&\n (state.mode < CHECK || flush !== Z_FINISH))) {\n if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {\n state.mode = MEM;\n return Z_MEM_ERROR;\n }\n }\n _in -= strm.avail_in;\n _out -= strm.avail_out;\n strm.total_in += _in;\n strm.total_out += _out;\n state.total += _out;\n if (state.wrap && _out) {\n strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/\n (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));\n }\n strm.data_type = state.bits + (state.last ? 64 : 0) +\n (state.mode === TYPE ? 128 : 0) +\n (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {\n ret = Z_BUF_ERROR;\n }\n return ret;\n}\n\nfunction inflateEnd(strm) {\n\n if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {\n return Z_STREAM_ERROR;\n }\n\n var state = strm.state;\n if (state.window) {\n state.window = null;\n }\n strm.state = null;\n return Z_OK;\n}\n\nfunction inflateGetHeader(strm, head) {\n var state;\n\n /* check state */\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }\n\n /* save header structure */\n state.head = head;\n head.done = false;\n return Z_OK;\n}\n\n\nexports.inflateReset = inflateReset;\nexports.inflateReset2 = inflateReset2;\nexports.inflateResetKeep = inflateResetKeep;\nexports.inflateInit = inflateInit;\nexports.inflateInit2 = inflateInit2;\nexports.inflate = inflate;\nexports.inflateEnd = inflateEnd;\nexports.inflateGetHeader = inflateGetHeader;\nexports.inflateInfo = 'pako inflate (from Nodeca project)';\n\n/* Not implemented\nexports.inflateCopy = inflateCopy;\nexports.inflateGetDictionary = inflateGetDictionary;\nexports.inflateMark = inflateMark;\nexports.inflatePrime = inflatePrime;\nexports.inflateSetDictionary = inflateSetDictionary;\nexports.inflateSync = inflateSync;\nexports.inflateSyncPoint = inflateSyncPoint;\nexports.inflateUndermine = inflateUndermine;\n*/\n},{\"../utils/common\":27,\"./adler32\":29,\"./crc32\":31,\"./inffast\":34,\"./inftrees\":36}],36:[function(_dereq_,module,exports){\n'use strict';\n\n\nvar utils = _dereq_('../utils/common');\n\nvar MAXBITS = 15;\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\nvar lbase = [ /* Length codes 257..285 base */\n 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n];\n\nvar lext = [ /* Length codes 257..285 extra */\n 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,\n 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78\n];\n\nvar dbase = [ /* Distance codes 0..29 base */\n 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n 8193, 12289, 16385, 24577, 0, 0\n];\n\nvar dext = [ /* Distance codes 0..29 extra */\n 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,\n 23, 23, 24, 24, 25, 25, 26, 26, 27, 27,\n 28, 28, 29, 29, 64, 64\n];\n\nmodule.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts)\n{\n var bits = opts.bits;\n //here = opts.here; /* table entry for duplication */\n\n var len = 0; /* a code's length in bits */\n var sym = 0; /* index of code symbols */\n var min = 0, max = 0; /* minimum and maximum code lengths */\n var root = 0; /* number of index bits for root table */\n var curr = 0; /* number of index bits for current table */\n var drop = 0; /* code bits to drop for sub-table */\n var left = 0; /* number of prefix codes available */\n var used = 0; /* code entries in table used */\n var huff = 0; /* Huffman code */\n var incr; /* for incrementing code, index */\n var fill; /* index for replicating entries */\n var low; /* low bits for current root entry */\n var mask; /* mask for low root bits */\n var next; /* next available space in table */\n var base = null; /* base value table to use */\n var base_index = 0;\n// var shoextra; /* extra bits table to use */\n var end; /* use base and extra for symbol > end */\n var count = new utils.Buf16(MAXBITS+1); //[MAXBITS+1]; /* number of codes of each length */\n var offs = new utils.Buf16(MAXBITS+1); //[MAXBITS+1]; /* offsets in table for each length */\n var extra = null;\n var extra_index = 0;\n\n var here_bits, here_op, here_val;\n\n /*\n Process a set of code lengths to create a canonical Huffman code. The\n code lengths are lens[0..codes-1]. Each length corresponds to the\n symbols 0..codes-1. The Huffman code is generated by first sorting the\n symbols by length from short to long, and retaining the symbol order\n for codes with equal lengths. Then the code starts with all zero bits\n for the first code of the shortest length, and the codes are integer\n increments for the same length, and zeros are appended as the length\n increases. For the deflate format, these bits are stored backwards\n from their more natural integer increment ordering, and so when the\n decoding tables are built in the large loop below, the integer codes\n are incremented backwards.\n\n This routine assumes, but does not check, that all of the entries in\n lens[] are in the range 0..MAXBITS. The caller must assure this.\n 1..MAXBITS is interpreted as that code length. zero means that that\n symbol does not occur in this code.\n\n The codes are sorted by computing a count of codes for each length,\n creating from that a table of starting indices for each length in the\n sorted table, and then entering the symbols in order in the sorted\n table. The sorted table is work[], with that space being provided by\n the caller.\n\n The length counts are used for other purposes as well, i.e. finding\n the minimum and maximum length codes, determining if there are any\n codes at all, checking for a valid set of lengths, and looking ahead\n at length counts to determine sub-table sizes when building the\n decoding tables.\n */\n\n /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n for (len = 0; len <= MAXBITS; len++) {\n count[len] = 0;\n }\n for (sym = 0; sym < codes; sym++) {\n count[lens[lens_index + sym]]++;\n }\n\n /* bound code lengths, force root to be within code lengths */\n root = bits;\n for (max = MAXBITS; max >= 1; max--) {\n if (count[max] !== 0) { break; }\n }\n if (root > max) {\n root = max;\n }\n if (max === 0) { /* no symbols to code at all */\n //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */\n //table.bits[opts.table_index] = 1; //here.bits = (var char)1;\n //table.val[opts.table_index++] = 0; //here.val = (var short)0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n\n //table.op[opts.table_index] = 64;\n //table.bits[opts.table_index] = 1;\n //table.val[opts.table_index++] = 0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n opts.bits = 1;\n return 0; /* no symbols, but wait for decoding to report error */\n }\n for (min = 1; min < max; min++) {\n if (count[min] !== 0) { break; }\n }\n if (root < min) {\n root = min;\n }\n\n /* check for an over-subscribed or incomplete set of lengths */\n left = 1;\n for (len = 1; len <= MAXBITS; len++) {\n left <<= 1;\n left -= count[len];\n if (left < 0) {\n return -1;\n } /* over-subscribed */\n }\n if (left > 0 && (type === CODES || max !== 1)) {\n return -1; /* incomplete set */\n }\n\n /* generate offsets into symbol table for each length for sorting */\n offs[1] = 0;\n for (len = 1; len < MAXBITS; len++) {\n offs[len + 1] = offs[len] + count[len];\n }\n\n /* sort symbols by length, by symbol order within each length */\n for (sym = 0; sym < codes; sym++) {\n if (lens[lens_index + sym] !== 0) {\n work[offs[lens[lens_index + sym]]++] = sym;\n }\n }\n\n /*\n Create and fill in decoding tables. In this loop, the table being\n filled is at next and has curr index bits. The code being used is huff\n with length len. That code is converted to an index by dropping drop\n bits off of the bottom. For codes where len is less than drop + curr,\n those top drop + curr - len bits are incremented through all values to\n fill the table with replicated entries.\n\n root is the number of index bits for the root table. When len exceeds\n root, sub-tables are created pointed to by the root entry with an index\n of the low root bits of huff. This is saved in low to check for when a\n new sub-table should be started. drop is zero when the root table is\n being filled, and drop is root when sub-tables are being filled.\n\n When a new sub-table is needed, it is necessary to look ahead in the\n code lengths to determine what size sub-table is needed. The length\n counts are used for this, and so count[] is decremented as codes are\n entered in the tables.\n\n used keeps track of how many table entries have been allocated from the\n provided *table space. It is checked for LENS and DIST tables against\n the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n the initial root table size constants. See the comments in inftrees.h\n for more information.\n\n sym increments through all symbols, and the loop terminates when\n all codes of length max, i.e. all codes, have been processed. This\n routine permits incomplete codes, so another loop after this one fills\n in the rest of the decoding tables with invalid code markers.\n */\n\n /* set up for code type */\n // poor man optimization - use if-else instead of switch,\n // to avoid deopts in old v8\n if (type === CODES) {\n base = extra = work; /* dummy value--not used */\n end = 19;\n } else if (type === LENS) {\n base = lbase;\n base_index -= 257;\n extra = lext;\n extra_index -= 257;\n end = 256;\n } else { /* DISTS */\n base = dbase;\n extra = dext;\n end = -1;\n }\n\n /* initialize opts for loop */\n huff = 0; /* starting code */\n sym = 0; /* starting code symbol */\n len = min; /* starting code length */\n next = table_index; /* current table to fill in */\n curr = root; /* current table index bits */\n drop = 0; /* current bits to drop from code for index */\n low = -1; /* trigger new sub-table when len > root */\n used = 1 << root; /* use root table entries */\n mask = used - 1; /* mask for comparing low */\n\n /* check available table space */\n if ((type === LENS && used > ENOUGH_LENS) ||\n (type === DISTS && used > ENOUGH_DISTS)) {\n return 1;\n }\n\n var i=0;\n /* process all codes and make table entries */\n for (;;) {\n i++;\n /* create table entry */\n here_bits = len - drop;\n if (work[sym] < end) {\n here_op = 0;\n here_val = work[sym];\n }\n else if (work[sym] > end) {\n here_op = extra[extra_index + work[sym]];\n here_val = base[base_index + work[sym]];\n }\n else {\n here_op = 32 + 64; /* end of block */\n here_val = 0;\n }\n\n /* replicate for those indices with low len bits equal to huff */\n incr = 1 << (len - drop);\n fill = 1 << curr;\n min = fill; /* save offset to next table */\n do {\n fill -= incr;\n table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;\n } while (fill !== 0);\n\n /* backwards increment the len-bit code huff */\n incr = 1 << (len - 1);\n while (huff & incr) {\n incr >>= 1;\n }\n if (incr !== 0) {\n huff &= incr - 1;\n huff += incr;\n } else {\n huff = 0;\n }\n\n /* go to next symbol, update count, len */\n sym++;\n if (--count[len] === 0) {\n if (len === max) { break; }\n len = lens[lens_index + work[sym]];\n }\n\n /* create new sub-table if needed */\n if (len > root && (huff & mask) !== low) {\n /* if first time, transition to sub-tables */\n if (drop === 0) {\n drop = root;\n }\n\n /* increment past last table */\n next += min; /* here min is 1 << curr */\n\n /* determine length of next table */\n curr = len - drop;\n left = 1 << curr;\n while (curr + drop < max) {\n left -= count[curr + drop];\n if (left <= 0) { break; }\n curr++;\n left <<= 1;\n }\n\n /* check for enough space */\n used += 1 << curr;\n if ((type === LENS && used > ENOUGH_LENS) ||\n (type === DISTS && used > ENOUGH_DISTS)) {\n return 1;\n }\n\n /* point entry in root table to sub-table */\n low = huff & mask;\n /*table.op[low] = curr;\n table.bits[low] = root;\n table.val[low] = next - opts.table_index;*/\n table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;\n }\n }\n\n /* fill in remaining table entry if code is incomplete (guaranteed to have\n at most one remaining entry, since if the code is incomplete, the\n maximum code length that was allowed to get this far is one bit) */\n if (huff !== 0) {\n //table.op[next + huff] = 64; /* invalid code marker */\n //table.bits[next + huff] = len - drop;\n //table.val[next + huff] = 0;\n table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;\n }\n\n /* set return parameters */\n //opts.table_index += used;\n opts.bits = root;\n return 0;\n};\n\n},{\"../utils/common\":27}],37:[function(_dereq_,module,exports){\n'use strict';\n\nmodule.exports = {\n '2': 'need dictionary', /* Z_NEED_DICT 2 */\n '1': 'stream end', /* Z_STREAM_END 1 */\n '0': '', /* Z_OK 0 */\n '-1': 'file error', /* Z_ERRNO (-1) */\n '-2': 'stream error', /* Z_STREAM_ERROR (-2) */\n '-3': 'data error', /* Z_DATA_ERROR (-3) */\n '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */\n '-5': 'buffer error', /* Z_BUF_ERROR (-5) */\n '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n},{}],38:[function(_dereq_,module,exports){\n'use strict';\n\n\nvar utils = _dereq_('../utils/common');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n//var Z_FILTERED = 1;\n//var Z_HUFFMAN_ONLY = 2;\n//var Z_RLE = 3;\nvar Z_FIXED = 4;\n//var Z_DEFAULT_STRATEGY = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\nvar Z_BINARY = 0;\nvar Z_TEXT = 1;\n//var Z_ASCII = 1; // = Z_TEXT\nvar Z_UNKNOWN = 2;\n\n/*============================================================================*/\n\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n// From zutil.h\n\nvar STORED_BLOCK = 0;\nvar STATIC_TREES = 1;\nvar DYN_TREES = 2;\n/* The three kinds of block type */\n\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\n/* The minimum and maximum match lengths */\n\n// From deflate.h\n/* ===========================================================================\n * Internal compression state.\n */\n\nvar LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\n\nvar LITERALS = 256;\n/* number of literal bytes 0..255 */\n\nvar L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\n\nvar D_CODES = 30;\n/* number of distance codes */\n\nvar BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\n\nvar HEAP_SIZE = 2*L_CODES + 1;\n/* maximum heap size */\n\nvar MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar Buf_size = 16;\n/* size of bit buffer in bi_buf */\n\n\n/* ===========================================================================\n * Constants\n */\n\nvar MAX_BL_BITS = 7;\n/* Bit length codes must not exceed MAX_BL_BITS bits */\n\nvar END_BLOCK = 256;\n/* end of block literal code */\n\nvar REP_3_6 = 16;\n/* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\nvar REPZ_3_10 = 17;\n/* repeat a zero length 3-10 times (3 bits of repeat count) */\n\nvar REPZ_11_138 = 18;\n/* repeat a zero length 11-138 times (7 bits of repeat count) */\n\nvar extra_lbits = /* extra bits for each length code */\n [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];\n\nvar extra_dbits = /* extra bits for each distance code */\n [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];\n\nvar extra_blbits = /* extra bits for each bit length code */\n [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];\n\nvar bl_order =\n [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];\n/* The lengths of the bit length codes are sent in order of decreasing\n * probability, to avoid transmitting the lengths for unused bit length codes.\n */\n\n/* ===========================================================================\n * Local data. These are initialized only once.\n */\n\n// We pre-fill arrays with 0 to avoid uninitialized gaps\n\nvar DIST_CODE_LEN = 512; /* see definition of array dist_code below */\n\n// !!!! Use flat array insdead of structure, Freq = i*2, Len = i*2+1\nvar static_ltree = new Array((L_CODES+2) * 2);\nzero(static_ltree);\n/* The static literal tree. Since the bit lengths are imposed, there is no\n * need for the L_CODES extra codes used during heap construction. However\n * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n * below).\n */\n\nvar static_dtree = new Array(D_CODES * 2);\nzero(static_dtree);\n/* The static distance tree. (Actually a trivial tree since all codes use\n * 5 bits.)\n */\n\nvar _dist_code = new Array(DIST_CODE_LEN);\nzero(_dist_code);\n/* Distance codes. The first 256 values correspond to the distances\n * 3 .. 258, the last 256 values correspond to the top 8 bits of\n * the 15 bit distances.\n */\n\nvar _length_code = new Array(MAX_MATCH-MIN_MATCH+1);\nzero(_length_code);\n/* length code for each normalized match length (0 == MIN_MATCH) */\n\nvar base_length = new Array(LENGTH_CODES);\nzero(base_length);\n/* First normalized length for each code (0 = MIN_MATCH) */\n\nvar base_dist = new Array(D_CODES);\nzero(base_dist);\n/* First normalized distance for each code (0 = distance of 1) */\n\n\nvar StaticTreeDesc = function (static_tree, extra_bits, extra_base, elems, max_length) {\n\n this.static_tree = static_tree; /* static tree or NULL */\n this.extra_bits = extra_bits; /* extra bits for each code or NULL */\n this.extra_base = extra_base; /* base index for extra_bits */\n this.elems = elems; /* max number of elements in the tree */\n this.max_length = max_length; /* max bit length for the codes */\n\n // show if `static_tree` has data or dummy - needed for monomorphic objects\n this.has_stree = static_tree && static_tree.length;\n};\n\n\nvar static_l_desc;\nvar static_d_desc;\nvar static_bl_desc;\n\n\nvar TreeDesc = function(dyn_tree, stat_desc) {\n this.dyn_tree = dyn_tree; /* the dynamic tree */\n this.max_code = 0; /* largest code with non zero frequency */\n this.stat_desc = stat_desc; /* the corresponding static tree */\n};\n\n\n\nfunction d_code(dist) {\n return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n}\n\n\n/* ===========================================================================\n * Output a short LSB first on the stream.\n * IN assertion: there is enough room in pendingBuf.\n */\nfunction put_short (s, w) {\n// put_byte(s, (uch)((w) & 0xff));\n// put_byte(s, (uch)((ush)(w) >> 8));\n s.pending_buf[s.pending++] = (w) & 0xff;\n s.pending_buf[s.pending++] = (w >>> 8) & 0xff;\n}\n\n\n/* ===========================================================================\n * Send a value on a given number of bits.\n * IN assertion: length <= 16 and value fits in length bits.\n */\nfunction send_bits(s, value, length) {\n if (s.bi_valid > (Buf_size - length)) {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n put_short(s, s.bi_buf);\n s.bi_buf = value >> (Buf_size - s.bi_valid);\n s.bi_valid += length - Buf_size;\n } else {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n s.bi_valid += length;\n }\n}\n\n\nfunction send_code(s, c, tree) {\n send_bits(s, tree[c*2]/*.Code*/, tree[c*2 + 1]/*.Len*/);\n}\n\n\n/* ===========================================================================\n * Reverse the first len bits of a code, using straightforward code (a faster\n * method would use a table)\n * IN assertion: 1 <= len <= 15\n */\nfunction bi_reverse(code, len) {\n var res = 0;\n do {\n res |= code & 1;\n code >>>= 1;\n res <<= 1;\n } while (--len > 0);\n return res >>> 1;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer, keeping at most 7 bits in it.\n */\nfunction bi_flush(s) {\n if (s.bi_valid === 16) {\n put_short(s, s.bi_buf);\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n } else if (s.bi_valid >= 8) {\n s.pending_buf[s.pending++] = s.bi_buf & 0xff;\n s.bi_buf >>= 8;\n s.bi_valid -= 8;\n }\n}\n\n\n/* ===========================================================================\n * Compute the optimal bit lengths for a tree and update the total bit length\n * for the current block.\n * IN assertion: the fields freq and dad are set, heap[heap_max] and\n * above are the tree nodes sorted by increasing frequency.\n * OUT assertions: the field len is set to the optimal bit length, the\n * array bl_count contains the frequencies for each bit length.\n * The length opt_len is updated; static_len is also updated if stree is\n * not null.\n */\nfunction gen_bitlen(s, desc)\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n{\n var tree = desc.dyn_tree;\n var max_code = desc.max_code;\n var stree = desc.stat_desc.static_tree;\n var has_stree = desc.stat_desc.has_stree;\n var extra = desc.stat_desc.extra_bits;\n var base = desc.stat_desc.extra_base;\n var max_length = desc.stat_desc.max_length;\n var h; /* heap index */\n var n, m; /* iterate over the tree elements */\n var bits; /* bit length */\n var xbits; /* extra bits */\n var f; /* frequency */\n var overflow = 0; /* number of elements with bit length too large */\n\n for (bits = 0; bits <= MAX_BITS; bits++) {\n s.bl_count[bits] = 0;\n }\n\n /* In a first pass, compute the optimal bit lengths (which may\n * overflow in the case of the bit length tree).\n */\n tree[s.heap[s.heap_max]*2 + 1]/*.Len*/ = 0; /* root of the heap */\n\n for (h = s.heap_max+1; h < HEAP_SIZE; h++) {\n n = s.heap[h];\n bits = tree[tree[n*2 +1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;\n if (bits > max_length) {\n bits = max_length;\n overflow++;\n }\n tree[n*2 + 1]/*.Len*/ = bits;\n /* We overwrite tree[n].Dad which is no longer needed */\n\n if (n > max_code) { continue; } /* not a leaf node */\n\n s.bl_count[bits]++;\n xbits = 0;\n if (n >= base) {\n xbits = extra[n-base];\n }\n f = tree[n * 2]/*.Freq*/;\n s.opt_len += f * (bits + xbits);\n if (has_stree) {\n s.static_len += f * (stree[n*2 + 1]/*.Len*/ + xbits);\n }\n }\n if (overflow === 0) { return; }\n\n // Trace((stderr,\"\\nbit length overflow\\n\"));\n /* This happens for example on obj2 and pic of the Calgary corpus */\n\n /* Find the first bit length which could increase: */\n do {\n bits = max_length-1;\n while (s.bl_count[bits] === 0) { bits--; }\n s.bl_count[bits]--; /* move one leaf down the tree */\n s.bl_count[bits+1] += 2; /* move one overflow item as its brother */\n s.bl_count[max_length]--;\n /* The brother of the overflow item also moves one step up,\n * but this does not affect bl_count[max_length]\n */\n overflow -= 2;\n } while (overflow > 0);\n\n /* Now recompute all bit lengths, scanning in increasing frequency.\n * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n * lengths instead of fixing only the wrong ones. This idea is taken\n * from 'ar' written by Haruhiko Okumura.)\n */\n for (bits = max_length; bits !== 0; bits--) {\n n = s.bl_count[bits];\n while (n !== 0) {\n m = s.heap[--h];\n if (m > max_code) { continue; }\n if (tree[m*2 + 1]/*.Len*/ !== bits) {\n // Trace((stderr,\"code %d bits %d->%d\\n\", m, tree[m].Len, bits));\n s.opt_len += (bits - tree[m*2 + 1]/*.Len*/)*tree[m*2]/*.Freq*/;\n tree[m*2 + 1]/*.Len*/ = bits;\n }\n n--;\n }\n }\n}\n\n\n/* ===========================================================================\n * Generate the codes for a given tree and bit counts (which need not be\n * optimal).\n * IN assertion: the array bl_count contains the bit length statistics for\n * the given tree and the field len is set for all tree elements.\n * OUT assertion: the field code is set for all tree elements of non\n * zero code length.\n */\nfunction gen_codes(tree, max_code, bl_count)\n// ct_data *tree; /* the tree to decorate */\n// int max_code; /* largest code with non zero frequency */\n// ushf *bl_count; /* number of codes at each bit length */\n{\n var next_code = new Array(MAX_BITS+1); /* next code value for each bit length */\n var code = 0; /* running code value */\n var bits; /* bit index */\n var n; /* code index */\n\n /* The distribution counts are first used to generate the code values\n * without bit reversal.\n */\n for (bits = 1; bits <= MAX_BITS; bits++) {\n next_code[bits] = code = (code + bl_count[bits-1]) << 1;\n }\n /* Check that the bit counts in bl_count are consistent. The last code\n * must be all ones.\n */\n //Assert (code + bl_count[MAX_BITS]-1 == (1< length code (0..28) */\n length = 0;\n for (code = 0; code < LENGTH_CODES-1; code++) {\n base_length[code] = length;\n for (n = 0; n < (1< dist code (0..29) */\n dist = 0;\n for (code = 0 ; code < 16; code++) {\n base_dist[code] = dist;\n for (n = 0; n < (1<>= 7; /* from now on, all distances are divided by 128 */\n for ( ; code < D_CODES; code++) {\n base_dist[code] = dist << 7;\n for (n = 0; n < (1<<(extra_dbits[code]-7)); n++) {\n _dist_code[256 + dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: 256+dist != 512\");\n\n /* Construct the codes of the static literal tree */\n for (bits = 0; bits <= MAX_BITS; bits++) {\n bl_count[bits] = 0;\n }\n\n n = 0;\n while (n <= 143) {\n static_ltree[n*2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n while (n <= 255) {\n static_ltree[n*2 + 1]/*.Len*/ = 9;\n n++;\n bl_count[9]++;\n }\n while (n <= 279) {\n static_ltree[n*2 + 1]/*.Len*/ = 7;\n n++;\n bl_count[7]++;\n }\n while (n <= 287) {\n static_ltree[n*2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n /* Codes 286 and 287 do not exist, but we must include them in the\n * tree construction to get a canonical Huffman tree (longest code\n * all ones)\n */\n gen_codes(static_ltree, L_CODES+1, bl_count);\n\n /* The static distance tree is trivial: */\n for (n = 0; n < D_CODES; n++) {\n static_dtree[n*2 + 1]/*.Len*/ = 5;\n static_dtree[n*2]/*.Code*/ = bi_reverse(n, 5);\n }\n\n // Now data ready and we can init static trees\n static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS);\n static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS);\n static_bl_desc =new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS);\n\n //static_init_done = true;\n}\n\n\n/* ===========================================================================\n * Initialize a new block.\n */\nfunction init_block(s) {\n var n; /* iterates over tree elements */\n\n /* Initialize the trees. */\n for (n = 0; n < L_CODES; n++) { s.dyn_ltree[n*2]/*.Freq*/ = 0; }\n for (n = 0; n < D_CODES; n++) { s.dyn_dtree[n*2]/*.Freq*/ = 0; }\n for (n = 0; n < BL_CODES; n++) { s.bl_tree[n*2]/*.Freq*/ = 0; }\n\n s.dyn_ltree[END_BLOCK*2]/*.Freq*/ = 1;\n s.opt_len = s.static_len = 0;\n s.last_lit = s.matches = 0;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer and align the output on a byte boundary\n */\nfunction bi_windup(s)\n{\n if (s.bi_valid > 8) {\n put_short(s, s.bi_buf);\n } else if (s.bi_valid > 0) {\n //put_byte(s, (Byte)s->bi_buf);\n s.pending_buf[s.pending++] = s.bi_buf;\n }\n s.bi_buf = 0;\n s.bi_valid = 0;\n}\n\n/* ===========================================================================\n * Copy a stored block, storing first the length and its\n * one's complement if requested.\n */\nfunction copy_block(s, buf, len, header)\n//DeflateState *s;\n//charf *buf; /* the input data */\n//unsigned len; /* its length */\n//int header; /* true if block header must be written */\n{\n bi_windup(s); /* align on byte boundary */\n\n if (header) {\n put_short(s, len);\n put_short(s, ~len);\n }\n// while (len--) {\n// put_byte(s, *buf++);\n// }\n utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);\n s.pending += len;\n}\n\n/* ===========================================================================\n * Compares to subtrees, using the tree depth as tie breaker when\n * the subtrees have equal frequency. This minimizes the worst case length.\n */\nfunction smaller(tree, n, m, depth) {\n var _n2 = n*2;\n var _m2 = m*2;\n return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||\n (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));\n}\n\n/* ===========================================================================\n * Restore the heap property by moving down the tree starting at node k,\n * exchanging a node with the smallest of its two sons if necessary, stopping\n * when the heap property is re-established (each father smaller than its\n * two sons).\n */\nfunction pqdownheap(s, tree, k)\n// deflate_state *s;\n// ct_data *tree; /* the tree to restore */\n// int k; /* node to move down */\n{\n var v = s.heap[k];\n var j = k << 1; /* left son of k */\n while (j <= s.heap_len) {\n /* Set j to the smallest of the two sons: */\n if (j < s.heap_len &&\n smaller(tree, s.heap[j+1], s.heap[j], s.depth)) {\n j++;\n }\n /* Exit if v is smaller than both sons */\n if (smaller(tree, v, s.heap[j], s.depth)) { break; }\n\n /* Exchange v with the smallest son */\n s.heap[k] = s.heap[j];\n k = j;\n\n /* And continue down the tree, setting j to the left son of k */\n j <<= 1;\n }\n s.heap[k] = v;\n}\n\n\n// inlined manually\n// var SMALLEST = 1;\n\n/* ===========================================================================\n * Send the block data compressed using the given Huffman trees\n */\nfunction compress_block(s, ltree, dtree)\n// deflate_state *s;\n// const ct_data *ltree; /* literal tree */\n// const ct_data *dtree; /* distance tree */\n{\n var dist; /* distance of matched string */\n var lc; /* match length or unmatched char (if dist == 0) */\n var lx = 0; /* running index in l_buf */\n var code; /* the code to send */\n var extra; /* number of extra bits to send */\n\n if (s.last_lit !== 0) {\n do {\n dist = (s.pending_buf[s.d_buf + lx*2] << 8) | (s.pending_buf[s.d_buf + lx*2 + 1]);\n lc = s.pending_buf[s.l_buf + lx];\n lx++;\n\n if (dist === 0) {\n send_code(s, lc, ltree); /* send a literal byte */\n //Tracecv(isgraph(lc), (stderr,\" '%c' \", lc));\n } else {\n /* Here, lc is the match length - MIN_MATCH */\n code = _length_code[lc];\n send_code(s, code+LITERALS+1, ltree); /* send the length code */\n extra = extra_lbits[code];\n if (extra !== 0) {\n lc -= base_length[code];\n send_bits(s, lc, extra); /* send the extra length bits */\n }\n dist--; /* dist is now the match distance - 1 */\n code = d_code(dist);\n //Assert (code < D_CODES, \"bad d_code\");\n\n send_code(s, code, dtree); /* send the distance code */\n extra = extra_dbits[code];\n if (extra !== 0) {\n dist -= base_dist[code];\n send_bits(s, dist, extra); /* send the extra distance bits */\n }\n } /* literal or match pair ? */\n\n /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */\n //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,\n // \"pendingBuf overflow\");\n\n } while (lx < s.last_lit);\n }\n\n send_code(s, END_BLOCK, ltree);\n}\n\n\n/* ===========================================================================\n * Construct one Huffman tree and assigns the code bit strings and lengths.\n * Update the total bit length for the current block.\n * IN assertion: the field freq is set for all tree elements.\n * OUT assertions: the fields len and code are set to the optimal bit length\n * and corresponding code. The length opt_len is updated; static_len is\n * also updated if stree is not null. The field max_code is set.\n */\nfunction build_tree(s, desc)\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n{\n var tree = desc.dyn_tree;\n var stree = desc.stat_desc.static_tree;\n var has_stree = desc.stat_desc.has_stree;\n var elems = desc.stat_desc.elems;\n var n, m; /* iterate over heap elements */\n var max_code = -1; /* largest code with non zero frequency */\n var node; /* new node being created */\n\n /* Construct the initial heap, with least frequent element in\n * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n * heap[0] is not used.\n */\n s.heap_len = 0;\n s.heap_max = HEAP_SIZE;\n\n for (n = 0; n < elems; n++) {\n if (tree[n * 2]/*.Freq*/ !== 0) {\n s.heap[++s.heap_len] = max_code = n;\n s.depth[n] = 0;\n\n } else {\n tree[n*2 + 1]/*.Len*/ = 0;\n }\n }\n\n /* The pkzip format requires that at least one distance code exists,\n * and that at least one bit should be sent even if there is only one\n * possible code. So to avoid special checks later on we force at least\n * two codes of non zero frequency.\n */\n while (s.heap_len < 2) {\n node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);\n tree[node * 2]/*.Freq*/ = 1;\n s.depth[node] = 0;\n s.opt_len--;\n\n if (has_stree) {\n s.static_len -= stree[node*2 + 1]/*.Len*/;\n }\n /* node is 0 or 1 so it does not have extra bits */\n }\n desc.max_code = max_code;\n\n /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n * establish sub-heaps of increasing lengths:\n */\n for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }\n\n /* Construct the Huffman tree by repeatedly combining the least two\n * frequent nodes.\n */\n node = elems; /* next internal node of the tree */\n do {\n //pqremove(s, tree, n); /* n = node of least frequency */\n /*** pqremove ***/\n n = s.heap[1/*SMALLEST*/];\n s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];\n pqdownheap(s, tree, 1/*SMALLEST*/);\n /***/\n\n m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */\n\n s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */\n s.heap[--s.heap_max] = m;\n\n /* Create a new node father of n and m */\n tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;\n s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n tree[n*2 + 1]/*.Dad*/ = tree[m*2 + 1]/*.Dad*/ = node;\n\n /* and insert the new node in the heap */\n s.heap[1/*SMALLEST*/] = node++;\n pqdownheap(s, tree, 1/*SMALLEST*/);\n\n } while (s.heap_len >= 2);\n\n s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];\n\n /* At this point, the fields freq and dad are set. We can now\n * generate the bit lengths.\n */\n gen_bitlen(s, desc);\n\n /* The field len is now set, we can generate the bit codes */\n gen_codes(tree, max_code, s.bl_count);\n}\n\n\n/* ===========================================================================\n * Scan a literal or distance tree to determine the frequencies of the codes\n * in the bit length tree.\n */\nfunction scan_tree(s, tree, max_code)\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n{\n var n; /* iterates over all tree elements */\n var prevlen = -1; /* last emitted length */\n var curlen; /* length of current code */\n\n var nextlen = tree[0*2 + 1]/*.Len*/; /* length of next code */\n\n var count = 0; /* repeat count of the current code */\n var max_count = 7; /* max repeat count */\n var min_count = 4; /* min repeat count */\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n tree[(max_code+1)*2 + 1]/*.Len*/ = 0xffff; /* guard */\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n+1)*2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n s.bl_tree[curlen * 2]/*.Freq*/ += count;\n\n } else if (curlen !== 0) {\n\n if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }\n s.bl_tree[REP_3_6*2]/*.Freq*/++;\n\n } else if (count <= 10) {\n s.bl_tree[REPZ_3_10*2]/*.Freq*/++;\n\n } else {\n s.bl_tree[REPZ_11_138*2]/*.Freq*/++;\n }\n\n count = 0;\n prevlen = curlen;\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n}\n\n\n/* ===========================================================================\n * Send a literal or distance tree in compressed form, using the codes in\n * bl_tree.\n */\nfunction send_tree(s, tree, max_code)\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n{\n var n; /* iterates over all tree elements */\n var prevlen = -1; /* last emitted length */\n var curlen; /* length of current code */\n\n var nextlen = tree[0*2 + 1]/*.Len*/; /* length of next code */\n\n var count = 0; /* repeat count of the current code */\n var max_count = 7; /* max repeat count */\n var min_count = 4; /* min repeat count */\n\n /* tree[max_code+1].Len = -1; */ /* guard already set */\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n+1)*2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);\n\n } else if (curlen !== 0) {\n if (curlen !== prevlen) {\n send_code(s, curlen, s.bl_tree);\n count--;\n }\n //Assert(count >= 3 && count <= 6, \" 3_6?\");\n send_code(s, REP_3_6, s.bl_tree);\n send_bits(s, count-3, 2);\n\n } else if (count <= 10) {\n send_code(s, REPZ_3_10, s.bl_tree);\n send_bits(s, count-3, 3);\n\n } else {\n send_code(s, REPZ_11_138, s.bl_tree);\n send_bits(s, count-11, 7);\n }\n\n count = 0;\n prevlen = curlen;\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n}\n\n\n/* ===========================================================================\n * Construct the Huffman tree for the bit lengths and return the index in\n * bl_order of the last bit length code to send.\n */\nfunction build_bl_tree(s) {\n var max_blindex; /* index of last bit length code of non zero freq */\n\n /* Determine the bit length frequencies for literal and distance trees */\n scan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n scan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\n /* Build the bit length tree: */\n build_tree(s, s.bl_desc);\n /* opt_len now includes the length of the tree representations, except\n * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n */\n\n /* Determine the number of bit length codes to send. The pkzip format\n * requires that at least 4 bit length codes be sent. (appnote.txt says\n * 3 but the actual value used is 4.)\n */\n for (max_blindex = BL_CODES-1; max_blindex >= 3; max_blindex--) {\n if (s.bl_tree[bl_order[max_blindex]*2 + 1]/*.Len*/ !== 0) {\n break;\n }\n }\n /* Update opt_len to include the bit length tree and counts */\n s.opt_len += 3*(max_blindex+1) + 5+5+4;\n //Tracev((stderr, \"\\ndyn trees: dyn %ld, stat %ld\",\n // s->opt_len, s->static_len));\n\n return max_blindex;\n}\n\n\n/* ===========================================================================\n * Send the header for a block using dynamic Huffman trees: the counts, the\n * lengths of the bit length codes, the literal tree and the distance tree.\n * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n */\nfunction send_all_trees(s, lcodes, dcodes, blcodes)\n// deflate_state *s;\n// int lcodes, dcodes, blcodes; /* number of codes for each tree */\n{\n var rank; /* index in bl_order */\n\n //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \"not enough codes\");\n //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n // \"too many codes\");\n //Tracev((stderr, \"\\nbl counts: \"));\n send_bits(s, lcodes-257, 5); /* not +255 as stated in appnote.txt */\n send_bits(s, dcodes-1, 5);\n send_bits(s, blcodes-4, 4); /* not -3 as stated in appnote.txt */\n for (rank = 0; rank < blcodes; rank++) {\n //Tracev((stderr, \"\\nbl code %2d \", bl_order[rank]));\n send_bits(s, s.bl_tree[bl_order[rank]*2 + 1]/*.Len*/, 3);\n }\n //Tracev((stderr, \"\\nbl tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_ltree, lcodes-1); /* literal tree */\n //Tracev((stderr, \"\\nlit tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_dtree, dcodes-1); /* distance tree */\n //Tracev((stderr, \"\\ndist tree: sent %ld\", s->bits_sent));\n}\n\n\n/* ===========================================================================\n * Check if the data type is TEXT or BINARY, using the following algorithm:\n * - TEXT if the two conditions below are satisfied:\n * a) There are no non-portable control characters belonging to the\n * \"black list\" (0..6, 14..25, 28..31).\n * b) There is at least one printable character belonging to the\n * \"white list\" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n * - BINARY otherwise.\n * - The following partially-portable control characters form a\n * \"gray list\" that is ignored in this detection algorithm:\n * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n * IN assertion: the fields Freq of dyn_ltree are set.\n */\nfunction detect_data_type(s) {\n /* black_mask is the bit mask of black-listed bytes\n * set bits 0..6, 14..25, and 28..31\n * 0xf3ffc07f = binary 11110011111111111100000001111111\n */\n var black_mask = 0xf3ffc07f;\n var n;\n\n /* Check for non-textual (\"black-listed\") bytes. */\n for (n = 0; n <= 31; n++, black_mask >>>= 1) {\n if ((black_mask & 1) && (s.dyn_ltree[n*2]/*.Freq*/ !== 0)) {\n return Z_BINARY;\n }\n }\n\n /* Check for textual (\"white-listed\") bytes. */\n if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||\n s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n for (n = 32; n < LITERALS; n++) {\n if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n }\n\n /* There are no \"black-listed\" or \"white-listed\" bytes:\n * this stream either is empty or has tolerated (\"gray-listed\") bytes only.\n */\n return Z_BINARY;\n}\n\n\nvar static_init_done = false;\n\n/* ===========================================================================\n * Initialize the tree data structures for a new zlib stream.\n */\nfunction _tr_init(s)\n{\n\n if (!static_init_done) {\n tr_static_init();\n static_init_done = true;\n }\n\n s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc);\n s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc);\n s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n /* Initialize the first block of the first file: */\n init_block(s);\n}\n\n\n/* ===========================================================================\n * Send a stored block\n */\nfunction _tr_stored_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf; /* input block */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n{\n send_bits(s, (STORED_BLOCK<<1)+(last ? 1 : 0), 3); /* send block type */\n copy_block(s, buf, stored_len, true); /* with header */\n}\n\n\n/* ===========================================================================\n * Send one empty static block to give enough lookahead for inflate.\n * This takes 10 bits, of which 7 may remain in the bit buffer.\n */\nfunction _tr_align(s) {\n send_bits(s, STATIC_TREES<<1, 3);\n send_code(s, END_BLOCK, static_ltree);\n bi_flush(s);\n}\n\n\n/* ===========================================================================\n * Determine the best encoding for the current block: dynamic trees, static\n * trees or store, and output the encoded block to the zip file.\n */\nfunction _tr_flush_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf; /* input block, or NULL if too old */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n{\n var opt_lenb, static_lenb; /* opt_len and static_len in bytes */\n var max_blindex = 0; /* index of last bit length code of non zero freq */\n\n /* Build the Huffman trees unless a stored block is forced */\n if (s.level > 0) {\n\n /* Check if the file is binary or text */\n if (s.strm.data_type === Z_UNKNOWN) {\n s.strm.data_type = detect_data_type(s);\n }\n\n /* Construct the literal and distance trees */\n build_tree(s, s.l_desc);\n // Tracev((stderr, \"\\nlit data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n\n build_tree(s, s.d_desc);\n // Tracev((stderr, \"\\ndist data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n /* At this point, opt_len and static_len are the total bit lengths of\n * the compressed block data, excluding the tree representations.\n */\n\n /* Build the bit length tree for the above two trees, and get the index\n * in bl_order of the last bit length code to send.\n */\n max_blindex = build_bl_tree(s);\n\n /* Determine the best encoding. Compute the block lengths in bytes. */\n opt_lenb = (s.opt_len+3+7) >>> 3;\n static_lenb = (s.static_len+3+7) >>> 3;\n\n // Tracev((stderr, \"\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \",\n // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n // s->last_lit));\n\n if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }\n\n } else {\n // Assert(buf != (char*)0, \"lost buf\");\n opt_lenb = static_lenb = stored_len + 5; /* force a stored block */\n }\n\n if ((stored_len+4 <= opt_lenb) && (buf !== -1)) {\n /* 4: two words for the lengths */\n\n /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n * Otherwise we can't have processed more than WSIZE input bytes since\n * the last block flush, because compression would have been\n * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n * transform a block into a stored block.\n */\n _tr_stored_block(s, buf, stored_len, last);\n\n } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {\n\n send_bits(s, (STATIC_TREES<<1) + (last ? 1 : 0), 3);\n compress_block(s, static_ltree, static_dtree);\n\n } else {\n send_bits(s, (DYN_TREES<<1) + (last ? 1 : 0), 3);\n send_all_trees(s, s.l_desc.max_code+1, s.d_desc.max_code+1, max_blindex+1);\n compress_block(s, s.dyn_ltree, s.dyn_dtree);\n }\n // Assert (s->compressed_len == s->bits_sent, \"bad compressed size\");\n /* The above check is made mod 2^32, for files larger than 512 MB\n * and uLong implemented on 32 bits.\n */\n init_block(s);\n\n if (last) {\n bi_windup(s);\n }\n // Tracev((stderr,\"\\ncomprlen %lu(%lu) \", s->compressed_len>>3,\n // s->compressed_len-7*last));\n}\n\n/* ===========================================================================\n * Save the match info and tally the frequency counts. Return true if\n * the current block must be flushed.\n */\nfunction _tr_tally(s, dist, lc)\n// deflate_state *s;\n// unsigned dist; /* distance of matched string */\n// unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */\n{\n //var out_length, in_length, dcode;\n\n s.pending_buf[s.d_buf + s.last_lit * 2] = (dist >>> 8) & 0xff;\n s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;\n\n s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;\n s.last_lit++;\n\n if (dist === 0) {\n /* lc is the unmatched char */\n s.dyn_ltree[lc*2]/*.Freq*/++;\n } else {\n s.matches++;\n /* Here, lc is the match length - MIN_MATCH */\n dist--; /* dist = match distance - 1 */\n //Assert((ush)dist < (ush)MAX_DIST(s) &&\n // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n // (ush)d_code(dist) < (ush)D_CODES, \"_tr_tally: bad match\");\n\n s.dyn_ltree[(_length_code[lc]+LITERALS+1) * 2]/*.Freq*/++;\n s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;\n }\n\n// (!) This block is disabled in zlib defailts,\n// don't enable it for binary compatibility\n\n//#ifdef TRUNCATE_BLOCK\n// /* Try to guess if it is profitable to stop the current block here */\n// if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {\n// /* Compute an upper bound for the compressed length */\n// out_length = s.last_lit*8;\n// in_length = s.strstart - s.block_start;\n//\n// for (dcode = 0; dcode < D_CODES; dcode++) {\n// out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);\n// }\n// out_length >>>= 3;\n// //Tracev((stderr,\"\\nlast_lit %u, in %ld, out ~%ld(%ld%%) \",\n// // s->last_lit, in_length, out_length,\n// // 100L - out_length*100L/in_length));\n// if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {\n// return true;\n// }\n// }\n//#endif\n\n return (s.last_lit === s.lit_bufsize-1);\n /* We avoid equality with lit_bufsize because of wraparound at 64K\n * on 16 bit machines and because stored blocks are restricted to\n * 64K-1 bytes.\n */\n}\n\nexports._tr_init = _tr_init;\nexports._tr_stored_block = _tr_stored_block;\nexports._tr_flush_block = _tr_flush_block;\nexports._tr_tally = _tr_tally;\nexports._tr_align = _tr_align;\n},{\"../utils/common\":27}],39:[function(_dereq_,module,exports){\n'use strict';\n\n\nfunction ZStream() {\n /* next input byte */\n this.input = null; // JS specific, because we have no pointers\n this.next_in = 0;\n /* number of bytes available at input */\n this.avail_in = 0;\n /* total number of input bytes read so far */\n this.total_in = 0;\n /* next output byte should be put there */\n this.output = null; // JS specific, because we have no pointers\n this.next_out = 0;\n /* remaining free space at output */\n this.avail_out = 0;\n /* total number of bytes output so far */\n this.total_out = 0;\n /* last error message, NULL if no error */\n this.msg = ''/*Z_NULL*/;\n /* not visible by applications */\n this.state = null;\n /* best guess about the data type: binary or text */\n this.data_type = 2/*Z_UNKNOWN*/;\n /* adler32 value of the uncompressed data */\n this.adler = 0;\n}\n\nmodule.exports = ZStream;\n},{}]},{},[9])\n(9)\n}));\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar toLength = require('../internals/to-length');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar speciesConstructor = require('../internals/species-constructor');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.subarray` method\n// https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.subarray\nexportTypedArrayMethod('subarray', function subarray(begin, end) {\n var O = aTypedArray(this);\n var length = O.length;\n var beginIndex = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O.constructor))(\n O.buffer,\n O.byteOffset + beginIndex * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - beginIndex)\n );\n});\n","'use strict';\nvar $forEach = require('../internals/array-iteration').forEach;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar STRICT_METHOD = arrayMethodIsStrict('forEach');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('forEach');\n\n// `Array.prototype.forEach` method implementation\n// https://tc39.github.io/ecma262/#sec-array.prototype.foreach\nmodule.exports = (!STRICT_METHOD || !USES_TO_LENGTH) ? function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n} : [].forEach;\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport function isScheduler(value) {\n return value && typeof value.schedule === 'function';\n}\n//# sourceMappingURL=isScheduler.js.map\n","/** PURE_IMPORTS_START _Observable,_Subscription PURE_IMPORTS_END */\nimport { Observable } from '../Observable';\nimport { Subscription } from '../Subscription';\nexport function scheduleArray(input, scheduler) {\n return new Observable(function (subscriber) {\n var sub = new Subscription();\n var i = 0;\n sub.add(scheduler.schedule(function () {\n if (i === input.length) {\n subscriber.complete();\n return;\n }\n subscriber.next(input[i++]);\n if (!subscriber.closed) {\n sub.add(this.schedule());\n }\n }));\n return sub;\n });\n}\n//# sourceMappingURL=scheduleArray.js.map\n","/** PURE_IMPORTS_START _Observable,_util_subscribeToArray,_scheduled_scheduleArray PURE_IMPORTS_END */\nimport { Observable } from '../Observable';\nimport { subscribeToArray } from '../util/subscribeToArray';\nimport { scheduleArray } from '../scheduled/scheduleArray';\nexport function fromArray(input, scheduler) {\n if (!scheduler) {\n return new Observable(subscribeToArray(input));\n }\n else {\n return scheduleArray(input, scheduler);\n }\n}\n//# sourceMappingURL=fromArray.js.map\n","/** PURE_IMPORTS_START _util_isScheduler,_fromArray,_scheduled_scheduleArray PURE_IMPORTS_END */\nimport { isScheduler } from '../util/isScheduler';\nimport { fromArray } from './fromArray';\nimport { scheduleArray } from '../scheduled/scheduleArray';\nexport function of() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var scheduler = args[args.length - 1];\n if (isScheduler(scheduler)) {\n args.pop();\n return scheduleArray(args, scheduler);\n }\n else {\n return fromArray(args);\n }\n}\n//# sourceMappingURL=of.js.map\n","var toPositiveInteger = require('../internals/to-positive-integer');\n\nmodule.exports = function (it, BYTES) {\n var offset = toPositiveInteger(it);\n if (offset % BYTES) throw RangeError('Wrong offset');\n return offset;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.anchor` method\n// https://tc39.github.io/ecma262/#sec-string.prototype.anchor\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('anchor') }, {\n anchor: function anchor(name) {\n return createHTML(this, 'a', 'name', name);\n }\n});\n","module.exports = function (it, Constructor, name) {\n if (!(it instanceof Constructor)) {\n throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation');\n } return it;\n};\n","/*!\n * surveyjs - Survey JavaScript library v1.8.58\n * Copyright (c) 2015-2021 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\", [\"vue\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"survey-vue\"] = factory(require(\"vue\"));\n\telse\n\t\troot[\"Survey\"] = factory(root[\"Vue\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_vue__) {\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/******/ \t\t}\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// 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, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\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/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = \"./src/entries/vue.ts\");\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ \"./node_modules/signature_pad/dist/signature_pad.mjs\":\n/*!***********************************************************!*\\\n !*** ./node_modules/signature_pad/dist/signature_pad.mjs ***!\n \\***********************************************************/\n/*! exports provided: default */\n/***/ (function(__webpack_module__, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\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__[\"default\"] = (SignaturePad);\n\n\n/***/ }),\n\n/***/ \"./node_modules/sortablejs/modular/sortable.esm.js\":\n/*!*********************************************************!*\\\n !*** ./node_modules/sortablejs/modular/sortable.esm.js ***!\n \\*********************************************************/\n/*! exports provided: default, MultiDrag, Sortable, Swap */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MultiDrag\", function() { return MultiDragPlugin; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Sortable\", function() { return Sortable; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Swap\", function() { return SwapPlugin; });\n/**!\n * Sortable 1.13.0\n * @author\tRubaXa \n * @author\towenm \n * @license MIT\n */\nfunction _typeof(obj) {\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n\n ownKeys.forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n}\n\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nvar version = \"1.13.0\";\n\nfunction userAgent(pattern) {\n if (typeof window !== 'undefined' && window.navigator) {\n return !!\n /*@__PURE__*/\n navigator.userAgent.match(pattern);\n }\n}\n\nvar IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i);\nvar Edge = userAgent(/Edge/i);\nvar FireFox = userAgent(/firefox/i);\nvar Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nvar IOS = userAgent(/iP(ad|od|hone)/i);\nvar ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\n\nvar captureMode = {\n capture: false,\n passive: false\n};\n\nfunction on(el, event, fn) {\n el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\n\nfunction off(el, event, fn) {\n el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\n\nfunction matches(\n/**HTMLElement*/\nel,\n/**String*/\nselector) {\n if (!selector) return;\n selector[0] === '>' && (selector = selector.substring(1));\n\n if (el) {\n try {\n if (el.matches) {\n return el.matches(selector);\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(selector);\n } else if (el.webkitMatchesSelector) {\n return el.webkitMatchesSelector(selector);\n }\n } catch (_) {\n return false;\n }\n }\n\n return false;\n}\n\nfunction getParentOrHost(el) {\n return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;\n}\n\nfunction closest(\n/**HTMLElement*/\nel,\n/**String*/\nselector,\n/**HTMLElement*/\nctx, includeCTX) {\n if (el) {\n ctx = ctx || document;\n\n do {\n if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {\n return el;\n }\n\n if (el === ctx) break;\n /* jshint boss:true */\n } while (el = getParentOrHost(el));\n }\n\n return null;\n}\n\nvar R_SPACE = /\\s+/g;\n\nfunction toggleClass(el, name, state) {\n if (el && name) {\n if (el.classList) {\n el.classList[state ? 'add' : 'remove'](name);\n } else {\n var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n }\n }\n}\n\nfunction css(el, prop, val) {\n var style = el && el.style;\n\n if (style) {\n if (val === void 0) {\n if (document.defaultView && document.defaultView.getComputedStyle) {\n val = document.defaultView.getComputedStyle(el, '');\n } else if (el.currentStyle) {\n val = el.currentStyle;\n }\n\n return prop === void 0 ? val : val[prop];\n } else {\n if (!(prop in style) && prop.indexOf('webkit') === -1) {\n prop = '-webkit-' + prop;\n }\n\n style[prop] = val + (typeof val === 'string' ? '' : 'px');\n }\n }\n}\n\nfunction matrix(el, selfOnly) {\n var appliedTransforms = '';\n\n if (typeof el === 'string') {\n appliedTransforms = el;\n } else {\n do {\n var transform = css(el, 'transform');\n\n if (transform && transform !== 'none') {\n appliedTransforms = transform + ' ' + appliedTransforms;\n }\n /* jshint boss:true */\n\n } while (!selfOnly && (el = el.parentNode));\n }\n\n var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n /*jshint -W056 */\n\n return matrixFn && new matrixFn(appliedTransforms);\n}\n\nfunction find(ctx, tagName, iterator) {\n if (ctx) {\n var list = ctx.getElementsByTagName(tagName),\n i = 0,\n n = list.length;\n\n if (iterator) {\n for (; i < n; i++) {\n iterator(list[i], i);\n }\n }\n\n return list;\n }\n\n return [];\n}\n\nfunction getWindowScrollingElement() {\n var scrollingElement = document.scrollingElement;\n\n if (scrollingElement) {\n return scrollingElement;\n } else {\n return document.documentElement;\n }\n}\n/**\n * Returns the \"bounding client rect\" of given element\n * @param {HTMLElement} el The element whose boundingClientRect is wanted\n * @param {[Boolean]} relativeToContainingBlock Whether the rect should be relative to the containing block of (including) the container\n * @param {[Boolean]} relativeToNonStaticParent Whether the rect should be relative to the relative parent of (including) the contaienr\n * @param {[Boolean]} undoScale Whether the container's scale() should be undone\n * @param {[HTMLElement]} container The parent the element will be placed in\n * @return {Object} The boundingClientRect of el, with specified adjustments\n */\n\n\nfunction getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {\n if (!el.getBoundingClientRect && el !== window) return;\n var elRect, top, left, bottom, right, height, width;\n\n if (el !== window && el.parentNode && el !== getWindowScrollingElement()) {\n elRect = el.getBoundingClientRect();\n top = elRect.top;\n left = elRect.left;\n bottom = elRect.bottom;\n right = elRect.right;\n height = elRect.height;\n width = elRect.width;\n } else {\n top = 0;\n left = 0;\n bottom = window.innerHeight;\n right = window.innerWidth;\n height = window.innerHeight;\n width = window.innerWidth;\n }\n\n if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {\n // Adjust for translate()\n container = container || el.parentNode; // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n // Not needed on <= IE11\n\n if (!IE11OrLess) {\n do {\n if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n var containerRect = container.getBoundingClientRect(); // Set relative to edges of padding box of container\n\n top -= containerRect.top + parseInt(css(container, 'border-top-width'));\n left -= containerRect.left + parseInt(css(container, 'border-left-width'));\n bottom = top + elRect.height;\n right = left + elRect.width;\n break;\n }\n /* jshint boss:true */\n\n } while (container = container.parentNode);\n }\n }\n\n if (undoScale && el !== window) {\n // Adjust for scale()\n var elMatrix = matrix(container || el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d;\n\n if (elMatrix) {\n top /= scaleY;\n left /= scaleX;\n width /= scaleX;\n height /= scaleY;\n bottom = top + height;\n right = left + width;\n }\n }\n\n return {\n top: top,\n left: left,\n bottom: bottom,\n right: right,\n width: width,\n height: height\n };\n}\n/**\n * Checks if a side of an element is scrolled past a side of its parents\n * @param {HTMLElement} el The element who's side being scrolled out of view is in question\n * @param {String} elSide Side of the element in question ('top', 'left', 'right', 'bottom')\n * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom')\n * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element\n */\n\n\nfunction isScrolledPast(el, elSide, parentSide) {\n var parent = getParentAutoScrollElement(el, true),\n elSideVal = getRect(el)[elSide];\n /* jshint boss:true */\n\n while (parent) {\n var parentSideVal = getRect(parent)[parentSide],\n visible = void 0;\n\n if (parentSide === 'top' || parentSide === 'left') {\n visible = elSideVal >= parentSideVal;\n } else {\n visible = elSideVal <= parentSideVal;\n }\n\n if (!visible) return parent;\n if (parent === getWindowScrollingElement()) break;\n parent = getParentAutoScrollElement(parent, false);\n }\n\n return false;\n}\n/**\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\n * and non-draggable elements\n * @param {HTMLElement} el The parent element\n * @param {Number} childNum The index of the child\n * @param {Object} options Parent Sortable's options\n * @return {HTMLElement} The child at index childNum, or null if not found\n */\n\n\nfunction getChild(el, childNum, options) {\n var currentChild = 0,\n i = 0,\n children = el.children;\n\n while (i < children.length) {\n if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && children[i] !== Sortable.dragged && closest(children[i], options.draggable, el, false)) {\n if (currentChild === childNum) {\n return children[i];\n }\n\n currentChild++;\n }\n\n i++;\n }\n\n return null;\n}\n/**\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\n * @param {HTMLElement} el Parent element\n * @param {selector} selector Any other elements that should be ignored\n * @return {HTMLElement} The last child, ignoring ghostEl\n */\n\n\nfunction lastChild(el, selector) {\n var last = el.lastElementChild;\n\n while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {\n last = last.previousElementSibling;\n }\n\n return last || null;\n}\n/**\n * Returns the index of an element within its parent for a selected set of\n * elements\n * @param {HTMLElement} el\n * @param {selector} selector\n * @return {number}\n */\n\n\nfunction index(el, selector) {\n var index = 0;\n\n if (!el || !el.parentNode) {\n return -1;\n }\n /* jshint boss:true */\n\n\n while (el = el.previousElementSibling) {\n if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {\n index++;\n }\n }\n\n return index;\n}\n/**\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\n * The value is returned in real pixels.\n * @param {HTMLElement} el\n * @return {Array} Offsets in the format of [left, top]\n */\n\n\nfunction getRelativeScrollOffset(el) {\n var offsetLeft = 0,\n offsetTop = 0,\n winScroller = getWindowScrollingElement();\n\n if (el) {\n do {\n var elMatrix = matrix(el),\n scaleX = elMatrix.a,\n scaleY = elMatrix.d;\n offsetLeft += el.scrollLeft * scaleX;\n offsetTop += el.scrollTop * scaleY;\n } while (el !== winScroller && (el = el.parentNode));\n }\n\n return [offsetLeft, offsetTop];\n}\n/**\n * Returns the index of the object within the given array\n * @param {Array} arr Array that may or may not hold the object\n * @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\n * @return {Number} The index of the object in the array, or -1\n */\n\n\nfunction indexOfObject(arr, obj) {\n for (var i in arr) {\n if (!arr.hasOwnProperty(i)) continue;\n\n for (var key in obj) {\n if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n }\n }\n\n return -1;\n}\n\nfunction getParentAutoScrollElement(el, includeSelf) {\n // skip to window\n if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n var elem = el;\n var gotSelf = false;\n\n do {\n // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n var elemCSS = css(elem);\n\n if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {\n if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();\n if (gotSelf || includeSelf) return elem;\n gotSelf = true;\n }\n }\n /* jshint boss:true */\n\n } while (elem = elem.parentNode);\n\n return getWindowScrollingElement();\n}\n\nfunction extend(dst, src) {\n if (dst && src) {\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n dst[key] = src[key];\n }\n }\n }\n\n return dst;\n}\n\nfunction isRectEqual(rect1, rect2) {\n return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);\n}\n\nvar _throttleTimeout;\n\nfunction throttle(callback, ms) {\n return function () {\n if (!_throttleTimeout) {\n var args = arguments,\n _this = this;\n\n if (args.length === 1) {\n callback.call(_this, args[0]);\n } else {\n callback.apply(_this, args);\n }\n\n _throttleTimeout = setTimeout(function () {\n _throttleTimeout = void 0;\n }, ms);\n }\n };\n}\n\nfunction cancelThrottle() {\n clearTimeout(_throttleTimeout);\n _throttleTimeout = void 0;\n}\n\nfunction scrollBy(el, x, y) {\n el.scrollLeft += x;\n el.scrollTop += y;\n}\n\nfunction clone(el) {\n var Polymer = window.Polymer;\n var $ = window.jQuery || window.Zepto;\n\n if (Polymer && Polymer.dom) {\n return Polymer.dom(el).cloneNode(true);\n } else if ($) {\n return $(el).clone(true)[0];\n } else {\n return el.cloneNode(true);\n }\n}\n\nfunction setRect(el, rect) {\n css(el, 'position', 'absolute');\n css(el, 'top', rect.top);\n css(el, 'left', rect.left);\n css(el, 'width', rect.width);\n css(el, 'height', rect.height);\n}\n\nfunction unsetRect(el) {\n css(el, 'position', '');\n css(el, 'top', '');\n css(el, 'left', '');\n css(el, 'width', '');\n css(el, 'height', '');\n}\n\nvar expando = 'Sortable' + new Date().getTime();\n\nfunction AnimationStateManager() {\n var animationStates = [],\n animationCallbackId;\n return {\n captureAnimationState: function captureAnimationState() {\n animationStates = [];\n if (!this.options.animation) return;\n var children = [].slice.call(this.el.children);\n children.forEach(function (child) {\n if (css(child, 'display') === 'none' || child === Sortable.ghost) return;\n animationStates.push({\n target: child,\n rect: getRect(child)\n });\n\n var fromRect = _objectSpread({}, animationStates[animationStates.length - 1].rect); // If animating: compensate for current animation\n\n\n if (child.thisAnimationDuration) {\n var childMatrix = matrix(child, true);\n\n if (childMatrix) {\n fromRect.top -= childMatrix.f;\n fromRect.left -= childMatrix.e;\n }\n }\n\n child.fromRect = fromRect;\n });\n },\n addAnimationState: function addAnimationState(state) {\n animationStates.push(state);\n },\n removeAnimationState: function removeAnimationState(target) {\n animationStates.splice(indexOfObject(animationStates, {\n target: target\n }), 1);\n },\n animateAll: function animateAll(callback) {\n var _this = this;\n\n if (!this.options.animation) {\n clearTimeout(animationCallbackId);\n if (typeof callback === 'function') callback();\n return;\n }\n\n var animating = false,\n animationTime = 0;\n animationStates.forEach(function (state) {\n var time = 0,\n target = state.target,\n fromRect = target.fromRect,\n toRect = getRect(target),\n prevFromRect = target.prevFromRect,\n prevToRect = target.prevToRect,\n animatingRect = state.rect,\n targetMatrix = matrix(target, true);\n\n if (targetMatrix) {\n // Compensate for current animation\n toRect.top -= targetMatrix.f;\n toRect.left -= targetMatrix.e;\n }\n\n target.toRect = toRect;\n\n if (target.thisAnimationDuration) {\n // Could also check if animatingRect is between fromRect and toRect\n if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) && // Make sure animatingRect is on line between toRect & fromRect\n (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {\n // If returning to same place as started from animation and on same axis\n time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);\n }\n } // if fromRect != toRect: animate\n\n\n if (!isRectEqual(toRect, fromRect)) {\n target.prevFromRect = fromRect;\n target.prevToRect = toRect;\n\n if (!time) {\n time = _this.options.animation;\n }\n\n _this.animate(target, animatingRect, toRect, time);\n }\n\n if (time) {\n animating = true;\n animationTime = Math.max(animationTime, time);\n clearTimeout(target.animationResetTimer);\n target.animationResetTimer = setTimeout(function () {\n target.animationTime = 0;\n target.prevFromRect = null;\n target.fromRect = null;\n target.prevToRect = null;\n target.thisAnimationDuration = null;\n }, time);\n target.thisAnimationDuration = time;\n }\n });\n clearTimeout(animationCallbackId);\n\n if (!animating) {\n if (typeof callback === 'function') callback();\n } else {\n animationCallbackId = setTimeout(function () {\n if (typeof callback === 'function') callback();\n }, animationTime);\n }\n\n animationStates = [];\n },\n animate: function animate(target, currentRect, toRect, duration) {\n if (duration) {\n css(target, 'transition', '');\n css(target, 'transform', '');\n var elMatrix = matrix(this.el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d,\n translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n target.animatingX = !!translateX;\n target.animatingY = !!translateY;\n css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');\n this.forRepaintDummy = repaint(target); // repaint\n\n css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n css(target, 'transform', 'translate3d(0,0,0)');\n typeof target.animated === 'number' && clearTimeout(target.animated);\n target.animated = setTimeout(function () {\n css(target, 'transition', '');\n css(target, 'transform', '');\n target.animated = false;\n target.animatingX = false;\n target.animatingY = false;\n }, duration);\n }\n }\n };\n}\n\nfunction repaint(target) {\n return target.offsetWidth;\n}\n\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;\n}\n\nvar plugins = [];\nvar defaults = {\n initializeByDefault: true\n};\nvar PluginManager = {\n mount: function mount(plugin) {\n // Set default static properties\n for (var option in defaults) {\n if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n plugin[option] = defaults[option];\n }\n }\n\n plugins.forEach(function (p) {\n if (p.pluginName === plugin.pluginName) {\n throw \"Sortable: Cannot mount plugin \".concat(plugin.pluginName, \" more than once\");\n }\n });\n plugins.push(plugin);\n },\n pluginEvent: function pluginEvent(eventName, sortable, evt) {\n var _this = this;\n\n this.eventCanceled = false;\n\n evt.cancel = function () {\n _this.eventCanceled = true;\n };\n\n var eventNameGlobal = eventName + 'Global';\n plugins.forEach(function (plugin) {\n if (!sortable[plugin.pluginName]) return; // Fire global events if it exists in this sortable\n\n if (sortable[plugin.pluginName][eventNameGlobal]) {\n sortable[plugin.pluginName][eventNameGlobal](_objectSpread({\n sortable: sortable\n }, evt));\n } // Only fire plugin event if plugin is enabled in this sortable,\n // and plugin has event defined\n\n\n if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {\n sortable[plugin.pluginName][eventName](_objectSpread({\n sortable: sortable\n }, evt));\n }\n });\n },\n initializePlugins: function initializePlugins(sortable, el, defaults, options) {\n plugins.forEach(function (plugin) {\n var pluginName = plugin.pluginName;\n if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n var initialized = new plugin(sortable, el, sortable.options);\n initialized.sortable = sortable;\n initialized.options = sortable.options;\n sortable[pluginName] = initialized; // Add default options from plugin\n\n _extends(defaults, initialized.defaults);\n });\n\n for (var option in sortable.options) {\n if (!sortable.options.hasOwnProperty(option)) continue;\n var modified = this.modifyOption(sortable, option, sortable.options[option]);\n\n if (typeof modified !== 'undefined') {\n sortable.options[option] = modified;\n }\n }\n },\n getEventProperties: function getEventProperties(name, sortable) {\n var eventProperties = {};\n plugins.forEach(function (plugin) {\n if (typeof plugin.eventProperties !== 'function') return;\n\n _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));\n });\n return eventProperties;\n },\n modifyOption: function modifyOption(sortable, name, value) {\n var modifiedValue;\n plugins.forEach(function (plugin) {\n // Plugin must exist on the Sortable\n if (!sortable[plugin.pluginName]) return; // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n\n if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {\n modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);\n }\n });\n return modifiedValue;\n }\n};\n\nfunction dispatchEvent(_ref) {\n var sortable = _ref.sortable,\n rootEl = _ref.rootEl,\n name = _ref.name,\n targetEl = _ref.targetEl,\n cloneEl = _ref.cloneEl,\n toEl = _ref.toEl,\n fromEl = _ref.fromEl,\n oldIndex = _ref.oldIndex,\n newIndex = _ref.newIndex,\n oldDraggableIndex = _ref.oldDraggableIndex,\n newDraggableIndex = _ref.newDraggableIndex,\n originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n extraEventProperties = _ref.extraEventProperties;\n sortable = sortable || rootEl && rootEl[expando];\n if (!sortable) return;\n var evt,\n options = sortable.options,\n onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1); // Support for new CustomEvent feature\n\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent(name, {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent(name, true, true);\n }\n\n evt.to = toEl || rootEl;\n evt.from = fromEl || rootEl;\n evt.item = targetEl || rootEl;\n evt.clone = cloneEl;\n evt.oldIndex = oldIndex;\n evt.newIndex = newIndex;\n evt.oldDraggableIndex = oldDraggableIndex;\n evt.newDraggableIndex = newDraggableIndex;\n evt.originalEvent = originalEvent;\n evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n\n var allEventProperties = _objectSpread({}, extraEventProperties, PluginManager.getEventProperties(name, sortable));\n\n for (var option in allEventProperties) {\n evt[option] = allEventProperties[option];\n }\n\n if (rootEl) {\n rootEl.dispatchEvent(evt);\n }\n\n if (options[onName]) {\n options[onName].call(sortable, evt);\n }\n}\n\nvar pluginEvent = function pluginEvent(eventName, sortable) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n originalEvent = _ref.evt,\n data = _objectWithoutProperties(_ref, [\"evt\"]);\n\n PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread({\n dragEl: dragEl,\n parentEl: parentEl,\n ghostEl: ghostEl,\n rootEl: rootEl,\n nextEl: nextEl,\n lastDownEl: lastDownEl,\n cloneEl: cloneEl,\n cloneHidden: cloneHidden,\n dragStarted: moved,\n putSortable: putSortable,\n activeSortable: Sortable.active,\n originalEvent: originalEvent,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n hideGhostForTarget: _hideGhostForTarget,\n unhideGhostForTarget: _unhideGhostForTarget,\n cloneNowHidden: function cloneNowHidden() {\n cloneHidden = true;\n },\n cloneNowShown: function cloneNowShown() {\n cloneHidden = false;\n },\n dispatchSortableEvent: function dispatchSortableEvent(name) {\n _dispatchEvent({\n sortable: sortable,\n name: name,\n originalEvent: originalEvent\n });\n }\n }, data));\n};\n\nfunction _dispatchEvent(info) {\n dispatchEvent(_objectSpread({\n putSortable: putSortable,\n cloneEl: cloneEl,\n targetEl: dragEl,\n rootEl: rootEl,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex\n }, info));\n}\n\nvar dragEl,\n parentEl,\n ghostEl,\n rootEl,\n nextEl,\n lastDownEl,\n cloneEl,\n cloneHidden,\n oldIndex,\n newIndex,\n oldDraggableIndex,\n newDraggableIndex,\n activeGroup,\n putSortable,\n awaitingDragStarted = false,\n ignoreNextClick = false,\n sortables = [],\n tapEvt,\n touchEvt,\n lastDx,\n lastDy,\n tapDistanceLeft,\n tapDistanceTop,\n moved,\n lastTarget,\n lastDirection,\n pastFirstInvertThresh = false,\n isCircumstantialInvert = false,\n targetMoveDistance,\n // For positioning ghost absolutely\nghostRelativeParent,\n ghostRelativeParentInitialScroll = [],\n // (left, top)\n_silent = false,\n savedInputChecked = [];\n/** @const */\n\nvar documentExists = typeof document !== 'undefined',\n PositionGhostAbsolutely = IOS,\n CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n // This will not pass for IE9, because IE9 DnD only works on anchors\nsupportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),\n supportCssPointerEvents = function () {\n if (!documentExists) return; // false when <= IE11\n\n if (IE11OrLess) {\n return false;\n }\n\n var el = document.createElement('x');\n el.style.cssText = 'pointer-events:auto';\n return el.style.pointerEvents === 'auto';\n}(),\n _detectDirection = function _detectDirection(el, options) {\n var elCSS = css(el),\n elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),\n child1 = getChild(el, 0, options),\n child2 = getChild(el, 1, options),\n firstChildCSS = child1 && css(child1),\n secondChildCSS = child2 && css(child2),\n firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,\n secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;\n\n if (elCSS.display === 'flex') {\n return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n }\n\n if (elCSS.display === 'grid') {\n return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n }\n\n if (child1 && firstChildCSS[\"float\"] && firstChildCSS[\"float\"] !== 'none') {\n var touchingSideChild2 = firstChildCSS[\"float\"] === 'left' ? 'left' : 'right';\n return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';\n }\n\n return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';\n},\n _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {\n var dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n dragElOppLength = vertical ? dragRect.width : dragRect.height,\n targetS1Opp = vertical ? targetRect.left : targetRect.top,\n targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n targetOppLength = vertical ? targetRect.width : targetRect.height;\n return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;\n},\n\n/**\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\n * @param {Number} x X position\n * @param {Number} y Y position\n * @return {HTMLElement} Element of the first found nearest Sortable\n */\n_detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {\n var ret;\n sortables.some(function (sortable) {\n if (lastChild(sortable)) return;\n var rect = getRect(sortable),\n threshold = sortable[expando].options.emptyInsertThreshold,\n insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n\n if (threshold && insideHorizontally && insideVertically) {\n return ret = sortable;\n }\n });\n return ret;\n},\n _prepareGroup = function _prepareGroup(options) {\n function toFn(value, pull) {\n return function (to, from, dragEl, evt) {\n var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;\n\n if (value == null && (pull || sameGroup)) {\n // Default pull value\n // Default pull and put value if same group\n return true;\n } else if (value == null || value === false) {\n return false;\n } else if (pull && value === 'clone') {\n return value;\n } else if (typeof value === 'function') {\n return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n } else {\n var otherGroup = (pull ? to : from).options.group.name;\n return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;\n }\n };\n }\n\n var group = {};\n var originalGroup = options.group;\n\n if (!originalGroup || _typeof(originalGroup) != 'object') {\n originalGroup = {\n name: originalGroup\n };\n }\n\n group.name = originalGroup.name;\n group.checkPull = toFn(originalGroup.pull, true);\n group.checkPut = toFn(originalGroup.put);\n group.revertClone = originalGroup.revertClone;\n options.group = group;\n},\n _hideGhostForTarget = function _hideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', 'none');\n }\n},\n _unhideGhostForTarget = function _unhideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', '');\n }\n}; // #1184 fix - Prevent click event on fallback if dragged but item not changed position\n\n\nif (documentExists) {\n document.addEventListener('click', function (evt) {\n if (ignoreNextClick) {\n evt.preventDefault();\n evt.stopPropagation && evt.stopPropagation();\n evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n ignoreNextClick = false;\n return false;\n }\n }, true);\n}\n\nvar nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n if (dragEl) {\n evt = evt.touches ? evt.touches[0] : evt;\n\n var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n\n if (nearest) {\n // Create imitation event\n var event = {};\n\n for (var i in evt) {\n if (evt.hasOwnProperty(i)) {\n event[i] = evt[i];\n }\n }\n\n event.target = event.rootEl = nearest;\n event.preventDefault = void 0;\n event.stopPropagation = void 0;\n\n nearest[expando]._onDragOver(event);\n }\n }\n};\n\nvar _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {\n if (dragEl) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n }\n};\n/**\n * @class Sortable\n * @param {HTMLElement} el\n * @param {Object} [options]\n */\n\n\nfunction Sortable(el, options) {\n if (!(el && el.nodeType && el.nodeType === 1)) {\n throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(el));\n }\n\n this.el = el; // root element\n\n this.options = options = _extends({}, options); // Export instance\n\n el[expando] = this;\n var defaults = {\n group: null,\n sort: true,\n disabled: false,\n store: null,\n handle: null,\n draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',\n swapThreshold: 1,\n // percentage; 0 <= x <= 1\n invertSwap: false,\n // invert always\n invertedSwapThreshold: null,\n // will be set to same as swapThreshold if default\n removeCloneOnHide: true,\n direction: function direction() {\n return _detectDirection(el, this.options);\n },\n ghostClass: 'sortable-ghost',\n chosenClass: 'sortable-chosen',\n dragClass: 'sortable-drag',\n ignore: 'a, img',\n filter: null,\n preventOnFilter: true,\n animation: 0,\n easing: null,\n setData: function setData(dataTransfer, dragEl) {\n dataTransfer.setData('Text', dragEl.textContent);\n },\n dropBubble: false,\n dragoverBubble: false,\n dataIdAttr: 'data-id',\n delay: 0,\n delayOnTouchOnly: false,\n touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n forceFallback: false,\n fallbackClass: 'sortable-fallback',\n fallbackOnBody: false,\n fallbackTolerance: 0,\n fallbackOffset: {\n x: 0,\n y: 0\n },\n supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window && !Safari,\n emptyInsertThreshold: 5\n };\n PluginManager.initializePlugins(this, el, defaults); // Set default options\n\n for (var name in defaults) {\n !(name in options) && (options[name] = defaults[name]);\n }\n\n _prepareGroup(options); // Bind all private methods\n\n\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n } // Setup drag mode\n\n\n this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n\n if (this.nativeDraggable) {\n // Touch start threshold cannot be greater than the native dragstart threshold\n this.options.touchStartThreshold = 1;\n } // Bind events\n\n\n if (options.supportPointer) {\n on(el, 'pointerdown', this._onTapStart);\n } else {\n on(el, 'mousedown', this._onTapStart);\n on(el, 'touchstart', this._onTapStart);\n }\n\n if (this.nativeDraggable) {\n on(el, 'dragover', this);\n on(el, 'dragenter', this);\n }\n\n sortables.push(this.el); // Restore sorting\n\n options.store && options.store.get && this.sort(options.store.get(this) || []); // Add animation state manager\n\n _extends(this, AnimationStateManager());\n}\n\nSortable.prototype =\n/** @lends Sortable.prototype */\n{\n constructor: Sortable,\n _isOutsideThisEl: function _isOutsideThisEl(target) {\n if (!this.el.contains(target) && target !== this.el) {\n lastTarget = null;\n }\n },\n _getDirection: function _getDirection(evt, target) {\n return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n },\n _onTapStart: function _onTapStart(\n /** Event|TouchEvent */\n evt) {\n if (!evt.cancelable) return;\n\n var _this = this,\n el = this.el,\n options = this.options,\n preventOnFilter = options.preventOnFilter,\n type = evt.type,\n touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,\n target = (touch || evt).target,\n originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,\n filter = options.filter;\n\n _saveInputCheckedState(el); // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n\n\n if (dragEl) {\n return;\n }\n\n if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n return; // only left button and enabled\n } // cancel dnd if original target is content editable\n\n\n if (originalTarget.isContentEditable) {\n return;\n } // Safari ignores further event handling after mousedown\n\n\n if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === 'SELECT') {\n return;\n }\n\n target = closest(target, options.draggable, el, false);\n\n if (target && target.animated) {\n return;\n }\n\n if (lastDownEl === target) {\n // Ignoring duplicate `down`\n return;\n } // Get the index of the dragged element within its parent\n\n\n oldIndex = index(target);\n oldDraggableIndex = index(target, options.draggable); // Check filter\n\n if (typeof filter === 'function') {\n if (filter.call(this, evt, target, this)) {\n _dispatchEvent({\n sortable: _this,\n rootEl: originalTarget,\n name: 'filter',\n targetEl: target,\n toEl: el,\n fromEl: el\n });\n\n pluginEvent('filter', _this, {\n evt: evt\n });\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n } else if (filter) {\n filter = filter.split(',').some(function (criteria) {\n criteria = closest(originalTarget, criteria.trim(), el, false);\n\n if (criteria) {\n _dispatchEvent({\n sortable: _this,\n rootEl: criteria,\n name: 'filter',\n targetEl: target,\n fromEl: el,\n toEl: el\n });\n\n pluginEvent('filter', _this, {\n evt: evt\n });\n return true;\n }\n });\n\n if (filter) {\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n }\n\n if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n return;\n } // Prepare `dragstart`\n\n\n this._prepareDragStart(evt, touch, target);\n },\n _prepareDragStart: function _prepareDragStart(\n /** Event */\n evt,\n /** Touch */\n touch,\n /** HTMLElement */\n target) {\n var _this = this,\n el = _this.el,\n options = _this.options,\n ownerDocument = el.ownerDocument,\n dragStartFn;\n\n if (target && !dragEl && target.parentNode === el) {\n var dragRect = getRect(target);\n rootEl = el;\n dragEl = target;\n parentEl = dragEl.parentNode;\n nextEl = dragEl.nextSibling;\n lastDownEl = target;\n activeGroup = options.group;\n Sortable.dragged = dragEl;\n tapEvt = {\n target: dragEl,\n clientX: (touch || evt).clientX,\n clientY: (touch || evt).clientY\n };\n tapDistanceLeft = tapEvt.clientX - dragRect.left;\n tapDistanceTop = tapEvt.clientY - dragRect.top;\n this._lastX = (touch || evt).clientX;\n this._lastY = (touch || evt).clientY;\n dragEl.style['will-change'] = 'all';\n\n dragStartFn = function dragStartFn() {\n pluginEvent('delayEnded', _this, {\n evt: evt\n });\n\n if (Sortable.eventCanceled) {\n _this._onDrop();\n\n return;\n } // Delayed drag has been triggered\n // we can re-enable the events: touchmove/mousemove\n\n\n _this._disableDelayedDragEvents();\n\n if (!FireFox && _this.nativeDraggable) {\n dragEl.draggable = true;\n } // Bind the events: dragstart/dragend\n\n\n _this._triggerDragStart(evt, touch); // Drag start event\n\n\n _dispatchEvent({\n sortable: _this,\n name: 'choose',\n originalEvent: evt\n }); // Chosen item\n\n\n toggleClass(dragEl, options.chosenClass, true);\n }; // Disable \"draggable\"\n\n\n options.ignore.split(',').forEach(function (criteria) {\n find(dragEl, criteria.trim(), _disableDraggable);\n });\n on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mouseup', _this._onDrop);\n on(ownerDocument, 'touchend', _this._onDrop);\n on(ownerDocument, 'touchcancel', _this._onDrop); // Make dragEl draggable (must be before delay for FireFox)\n\n if (FireFox && this.nativeDraggable) {\n this.options.touchStartThreshold = 4;\n dragEl.draggable = true;\n }\n\n pluginEvent('delayStart', this, {\n evt: evt\n }); // Delay is impossible for native DnD in Edge or IE\n\n if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n if (Sortable.eventCanceled) {\n this._onDrop();\n\n return;\n } // If the user moves the pointer or let go the click or touch\n // before the delay has been reached:\n // disable the delayed drag\n\n\n on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n } else {\n dragStartFn();\n }\n }\n },\n _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler(\n /** TouchEvent|PointerEvent **/\n e) {\n var touch = e.touches ? e.touches[0] : e;\n\n if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {\n this._disableDelayedDrag();\n }\n },\n _disableDelayedDrag: function _disableDelayedDrag() {\n dragEl && _disableDraggable(dragEl);\n clearTimeout(this._dragStartTimer);\n\n this._disableDelayedDragEvents();\n },\n _disableDelayedDragEvents: function _disableDelayedDragEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n off(ownerDocument, 'touchend', this._disableDelayedDrag);\n off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n },\n _triggerDragStart: function _triggerDragStart(\n /** Event */\n evt,\n /** Touch */\n touch) {\n touch = touch || evt.pointerType == 'touch' && evt;\n\n if (!this.nativeDraggable || touch) {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._onTouchMove);\n } else if (touch) {\n on(document, 'touchmove', this._onTouchMove);\n } else {\n on(document, 'mousemove', this._onTouchMove);\n }\n } else {\n on(dragEl, 'dragend', this);\n on(rootEl, 'dragstart', this._onDragStart);\n }\n\n try {\n if (document.selection) {\n // Timeout neccessary for IE9\n _nextTick(function () {\n document.selection.empty();\n });\n } else {\n window.getSelection().removeAllRanges();\n }\n } catch (err) {}\n },\n _dragStarted: function _dragStarted(fallback, evt) {\n\n awaitingDragStarted = false;\n\n if (rootEl && dragEl) {\n pluginEvent('dragStarted', this, {\n evt: evt\n });\n\n if (this.nativeDraggable) {\n on(document, 'dragover', _checkOutsideTargetEl);\n }\n\n var options = this.options; // Apply effect\n\n !fallback && toggleClass(dragEl, options.dragClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n Sortable.active = this;\n fallback && this._appendGhost(); // Drag start event\n\n _dispatchEvent({\n sortable: this,\n name: 'start',\n originalEvent: evt\n });\n } else {\n this._nulling();\n }\n },\n _emulateDragOver: function _emulateDragOver() {\n if (touchEvt) {\n this._lastX = touchEvt.clientX;\n this._lastY = touchEvt.clientY;\n\n _hideGhostForTarget();\n\n var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n var parent = target;\n\n while (target && target.shadowRoot) {\n target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n if (target === parent) break;\n parent = target;\n }\n\n dragEl.parentNode[expando]._isOutsideThisEl(target);\n\n if (parent) {\n do {\n if (parent[expando]) {\n var inserted = void 0;\n inserted = parent[expando]._onDragOver({\n clientX: touchEvt.clientX,\n clientY: touchEvt.clientY,\n target: target,\n rootEl: parent\n });\n\n if (inserted && !this.options.dragoverBubble) {\n break;\n }\n }\n\n target = parent; // store last element\n }\n /* jshint boss:true */\n while (parent = parent.parentNode);\n }\n\n _unhideGhostForTarget();\n }\n },\n _onTouchMove: function _onTouchMove(\n /**TouchEvent*/\n evt) {\n if (tapEvt) {\n var options = this.options,\n fallbackTolerance = options.fallbackTolerance,\n fallbackOffset = options.fallbackOffset,\n touch = evt.touches ? evt.touches[0] : evt,\n ghostMatrix = ghostEl && matrix(ghostEl, true),\n scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),\n dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),\n dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1); // only set the status to dragging, when we are actually dragging\n\n if (!Sortable.active && !awaitingDragStarted) {\n if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {\n return;\n }\n\n this._onDragStart(evt, true);\n }\n\n if (ghostEl) {\n if (ghostMatrix) {\n ghostMatrix.e += dx - (lastDx || 0);\n ghostMatrix.f += dy - (lastDy || 0);\n } else {\n ghostMatrix = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: dx,\n f: dy\n };\n }\n\n var cssMatrix = \"matrix(\".concat(ghostMatrix.a, \",\").concat(ghostMatrix.b, \",\").concat(ghostMatrix.c, \",\").concat(ghostMatrix.d, \",\").concat(ghostMatrix.e, \",\").concat(ghostMatrix.f, \")\");\n css(ghostEl, 'webkitTransform', cssMatrix);\n css(ghostEl, 'mozTransform', cssMatrix);\n css(ghostEl, 'msTransform', cssMatrix);\n css(ghostEl, 'transform', cssMatrix);\n lastDx = dx;\n lastDy = dy;\n touchEvt = touch;\n }\n\n evt.cancelable && evt.preventDefault();\n }\n },\n _appendGhost: function _appendGhost() {\n // Bug if using scale(): https://stackoverflow.com/questions/2637058\n // Not being adjusted for\n if (!ghostEl) {\n var container = this.options.fallbackOnBody ? document.body : rootEl,\n rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n options = this.options; // Position absolutely\n\n if (PositionGhostAbsolutely) {\n // Get relatively positioned parent\n ghostRelativeParent = container;\n\n while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n ghostRelativeParent = ghostRelativeParent.parentNode;\n }\n\n if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();\n rect.top += ghostRelativeParent.scrollTop;\n rect.left += ghostRelativeParent.scrollLeft;\n } else {\n ghostRelativeParent = getWindowScrollingElement();\n }\n\n ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);\n }\n\n ghostEl = dragEl.cloneNode(true);\n toggleClass(ghostEl, options.ghostClass, false);\n toggleClass(ghostEl, options.fallbackClass, true);\n toggleClass(ghostEl, options.dragClass, true);\n css(ghostEl, 'transition', '');\n css(ghostEl, 'transform', '');\n css(ghostEl, 'box-sizing', 'border-box');\n css(ghostEl, 'margin', 0);\n css(ghostEl, 'top', rect.top);\n css(ghostEl, 'left', rect.left);\n css(ghostEl, 'width', rect.width);\n css(ghostEl, 'height', rect.height);\n css(ghostEl, 'opacity', '0.8');\n css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');\n css(ghostEl, 'zIndex', '100000');\n css(ghostEl, 'pointerEvents', 'none');\n Sortable.ghost = ghostEl;\n container.appendChild(ghostEl); // Set transform-origin\n\n css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n }\n },\n _onDragStart: function _onDragStart(\n /**Event*/\n evt,\n /**boolean*/\n fallback) {\n var _this = this;\n\n var dataTransfer = evt.dataTransfer;\n var options = _this.options;\n pluginEvent('dragStart', this, {\n evt: evt\n });\n\n if (Sortable.eventCanceled) {\n this._onDrop();\n\n return;\n }\n\n pluginEvent('setupClone', this);\n\n if (!Sortable.eventCanceled) {\n cloneEl = clone(dragEl);\n cloneEl.draggable = false;\n cloneEl.style['will-change'] = '';\n\n this._hideClone();\n\n toggleClass(cloneEl, this.options.chosenClass, false);\n Sortable.clone = cloneEl;\n } // #1143: IFrame support workaround\n\n\n _this.cloneId = _nextTick(function () {\n pluginEvent('clone', _this);\n if (Sortable.eventCanceled) return;\n\n if (!_this.options.removeCloneOnHide) {\n rootEl.insertBefore(cloneEl, dragEl);\n }\n\n _this._hideClone();\n\n _dispatchEvent({\n sortable: _this,\n name: 'clone'\n });\n });\n !fallback && toggleClass(dragEl, options.dragClass, true); // Set proper drop events\n\n if (fallback) {\n ignoreNextClick = true;\n _this._loopId = setInterval(_this._emulateDragOver, 50);\n } else {\n // Undo what was set in _prepareDragStart before drag started\n off(document, 'mouseup', _this._onDrop);\n off(document, 'touchend', _this._onDrop);\n off(document, 'touchcancel', _this._onDrop);\n\n if (dataTransfer) {\n dataTransfer.effectAllowed = 'move';\n options.setData && options.setData.call(_this, dataTransfer, dragEl);\n }\n\n on(document, 'drop', _this); // #1276 fix:\n\n css(dragEl, 'transform', 'translateZ(0)');\n }\n\n awaitingDragStarted = true;\n _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n on(document, 'selectstart', _this);\n moved = true;\n\n if (Safari) {\n css(document.body, 'user-select', 'none');\n }\n },\n // Returns true - if no further action is needed (either inserted or another condition)\n _onDragOver: function _onDragOver(\n /**Event*/\n evt) {\n var el = this.el,\n target = evt.target,\n dragRect,\n targetRect,\n revert,\n options = this.options,\n group = options.group,\n activeSortable = Sortable.active,\n isOwner = activeGroup === group,\n canSort = options.sort,\n fromSortable = putSortable || activeSortable,\n vertical,\n _this = this,\n completedFired = false;\n\n if (_silent) return;\n\n function dragOverEvent(name, extra) {\n pluginEvent(name, _this, _objectSpread({\n evt: evt,\n isOwner: isOwner,\n axis: vertical ? 'vertical' : 'horizontal',\n revert: revert,\n dragRect: dragRect,\n targetRect: targetRect,\n canSort: canSort,\n fromSortable: fromSortable,\n target: target,\n completed: completed,\n onMove: function onMove(target, after) {\n return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);\n },\n changed: changed\n }, extra));\n } // Capture animation state\n\n\n function capture() {\n dragOverEvent('dragOverAnimationCapture');\n\n _this.captureAnimationState();\n\n if (_this !== fromSortable) {\n fromSortable.captureAnimationState();\n }\n } // Return invocation when dragEl is inserted (or completed)\n\n\n function completed(insertion) {\n dragOverEvent('dragOverCompleted', {\n insertion: insertion\n });\n\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n } else {\n activeSortable._showClone(_this);\n }\n\n if (_this !== fromSortable) {\n // Set ghost class to new sortable's ghost class\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n }\n\n if (putSortable !== _this && _this !== Sortable.active) {\n putSortable = _this;\n } else if (_this === Sortable.active && putSortable) {\n putSortable = null;\n } // Animation\n\n\n if (fromSortable === _this) {\n _this._ignoreWhileAnimating = target;\n }\n\n _this.animateAll(function () {\n dragOverEvent('dragOverAnimationComplete');\n _this._ignoreWhileAnimating = null;\n });\n\n if (_this !== fromSortable) {\n fromSortable.animateAll();\n fromSortable._ignoreWhileAnimating = null;\n }\n } // Null lastTarget if it is not inside a previously swapped element\n\n\n if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n lastTarget = null;\n } // no bubbling and not fallback\n\n\n if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target); // Do not detect for empty insert if already inserted\n\n\n !insertion && nearestEmptyInsertDetectEvent(evt);\n }\n\n !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n return completedFired = true;\n } // Call when dragEl has been inserted\n\n\n function changed() {\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n\n _dispatchEvent({\n sortable: _this,\n name: 'change',\n toEl: el,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n originalEvent: evt\n });\n }\n\n if (evt.preventDefault !== void 0) {\n evt.cancelable && evt.preventDefault();\n }\n\n target = closest(target, options.draggable, el, true);\n dragOverEvent('dragOver');\n if (Sortable.eventCanceled) return completedFired;\n\n if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {\n return completed(false);\n }\n\n ignoreNextClick = false;\n\n if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = !rootEl.contains(dragEl)) // Reverting item into the original list\n : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {\n vertical = this._getDirection(evt, target) === 'vertical';\n dragRect = getRect(dragEl);\n dragOverEvent('dragOverValid');\n if (Sortable.eventCanceled) return completedFired;\n\n if (revert) {\n parentEl = rootEl; // actualization\n\n capture();\n\n this._hideClone();\n\n dragOverEvent('revert');\n\n if (!Sortable.eventCanceled) {\n if (nextEl) {\n rootEl.insertBefore(dragEl, nextEl);\n } else {\n rootEl.appendChild(dragEl);\n }\n }\n\n return completed(true);\n }\n\n var elLastChild = lastChild(el, options.draggable);\n\n if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {\n // If already at end of list: Do not insert\n if (elLastChild === dragEl) {\n return completed(false);\n } // assign target only if condition is true\n\n\n if (elLastChild && el === evt.target) {\n target = elLastChild;\n }\n\n if (target) {\n targetRect = getRect(target);\n }\n\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n capture();\n el.appendChild(dragEl);\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (target.parentNode === el) {\n targetRect = getRect(target);\n var direction = 0,\n targetBeforeFirstSwap,\n differentLevel = dragEl.parentNode !== el,\n differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),\n side1 = vertical ? 'top' : 'left',\n scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),\n scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n\n if (lastTarget !== target) {\n targetBeforeFirstSwap = targetRect[side1];\n pastFirstInvertThresh = false;\n isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;\n }\n\n direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);\n var sibling;\n\n if (direction !== 0) {\n // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n var dragIndex = index(dragEl);\n\n do {\n dragIndex -= direction;\n sibling = parentEl.children[dragIndex];\n } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));\n } // If dragEl is already beside target: Do not insert\n\n\n if (direction === 0 || sibling === target) {\n return completed(false);\n }\n\n lastTarget = target;\n lastDirection = direction;\n var nextSibling = target.nextElementSibling,\n after = false;\n after = direction === 1;\n\n var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n\n if (moveVector !== false) {\n if (moveVector === 1 || moveVector === -1) {\n after = moveVector === 1;\n }\n\n _silent = true;\n setTimeout(_unsilent, 30);\n capture();\n\n if (after && !nextSibling) {\n el.appendChild(dragEl);\n } else {\n target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n } // Undo chrome's scroll adjustment (has no effect on other browsers)\n\n\n if (scrolledPastTop) {\n scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n }\n\n parentEl = dragEl.parentNode; // actualization\n // must be done before animation\n\n if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);\n }\n\n changed();\n return completed(true);\n }\n }\n\n if (el.contains(dragEl)) {\n return completed(false);\n }\n }\n\n return false;\n },\n _ignoreWhileAnimating: null,\n _offMoveEvents: function _offMoveEvents() {\n off(document, 'mousemove', this._onTouchMove);\n off(document, 'touchmove', this._onTouchMove);\n off(document, 'pointermove', this._onTouchMove);\n off(document, 'dragover', nearestEmptyInsertDetectEvent);\n off(document, 'mousemove', nearestEmptyInsertDetectEvent);\n off(document, 'touchmove', nearestEmptyInsertDetectEvent);\n },\n _offUpEvents: function _offUpEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._onDrop);\n off(ownerDocument, 'touchend', this._onDrop);\n off(ownerDocument, 'pointerup', this._onDrop);\n off(ownerDocument, 'touchcancel', this._onDrop);\n off(document, 'selectstart', this);\n },\n _onDrop: function _onDrop(\n /**Event*/\n evt) {\n var el = this.el,\n options = this.options; // Get the index of the dragged element within its parent\n\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n pluginEvent('drop', this, {\n evt: evt\n });\n parentEl = dragEl && dragEl.parentNode; // Get again after plugin event\n\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n\n if (Sortable.eventCanceled) {\n this._nulling();\n\n return;\n }\n\n awaitingDragStarted = false;\n isCircumstantialInvert = false;\n pastFirstInvertThresh = false;\n clearInterval(this._loopId);\n clearTimeout(this._dragStartTimer);\n\n _cancelNextTick(this.cloneId);\n\n _cancelNextTick(this._dragStartId); // Unbind events\n\n\n if (this.nativeDraggable) {\n off(document, 'drop', this);\n off(el, 'dragstart', this._onDragStart);\n }\n\n this._offMoveEvents();\n\n this._offUpEvents();\n\n if (Safari) {\n css(document.body, 'user-select', '');\n }\n\n css(dragEl, 'transform', '');\n\n if (evt) {\n if (moved) {\n evt.cancelable && evt.preventDefault();\n !options.dropBubble && evt.stopPropagation();\n }\n\n ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n // Remove clone(s)\n cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n }\n\n if (dragEl) {\n if (this.nativeDraggable) {\n off(dragEl, 'dragend', this);\n }\n\n _disableDraggable(dragEl);\n\n dragEl.style['will-change'] = ''; // Remove classes\n // ghostClass is added in dragStarted\n\n if (moved && !awaitingDragStarted) {\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n }\n\n toggleClass(dragEl, this.options.chosenClass, false); // Drag stop event\n\n _dispatchEvent({\n sortable: this,\n name: 'unchoose',\n toEl: parentEl,\n newIndex: null,\n newDraggableIndex: null,\n originalEvent: evt\n });\n\n if (rootEl !== parentEl) {\n if (newIndex >= 0) {\n // Add event\n _dispatchEvent({\n rootEl: parentEl,\n name: 'add',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n }); // Remove event\n\n\n _dispatchEvent({\n sortable: this,\n name: 'remove',\n toEl: parentEl,\n originalEvent: evt\n }); // drag from one list and drop into another\n\n\n _dispatchEvent({\n rootEl: parentEl,\n name: 'sort',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n\n putSortable && putSortable.save();\n } else {\n if (newIndex !== oldIndex) {\n if (newIndex >= 0) {\n // drag & drop within the same list\n _dispatchEvent({\n sortable: this,\n name: 'update',\n toEl: parentEl,\n originalEvent: evt\n });\n\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n }\n }\n\n if (Sortable.active) {\n /* jshint eqnull:true */\n if (newIndex == null || newIndex === -1) {\n newIndex = oldIndex;\n newDraggableIndex = oldDraggableIndex;\n }\n\n _dispatchEvent({\n sortable: this,\n name: 'end',\n toEl: parentEl,\n originalEvent: evt\n }); // Save sorting\n\n\n this.save();\n }\n }\n }\n\n this._nulling();\n },\n _nulling: function _nulling() {\n pluginEvent('nulling', this);\n rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n savedInputChecked.forEach(function (el) {\n el.checked = true;\n });\n savedInputChecked.length = lastDx = lastDy = 0;\n },\n handleEvent: function handleEvent(\n /**Event*/\n evt) {\n switch (evt.type) {\n case 'drop':\n case 'dragend':\n this._onDrop(evt);\n\n break;\n\n case 'dragenter':\n case 'dragover':\n if (dragEl) {\n this._onDragOver(evt);\n\n _globalDragOver(evt);\n }\n\n break;\n\n case 'selectstart':\n evt.preventDefault();\n break;\n }\n },\n\n /**\n * Serializes the item into an array of string.\n * @returns {String[]}\n */\n toArray: function toArray() {\n var order = [],\n el,\n children = this.el.children,\n i = 0,\n n = children.length,\n options = this.options;\n\n for (; i < n; i++) {\n el = children[i];\n\n if (closest(el, options.draggable, this.el, false)) {\n order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n }\n }\n\n return order;\n },\n\n /**\n * Sorts the elements according to the array.\n * @param {String[]} order order of the items\n */\n sort: function sort(order, useAnimation) {\n var items = {},\n rootEl = this.el;\n this.toArray().forEach(function (id, i) {\n var el = rootEl.children[i];\n\n if (closest(el, this.options.draggable, rootEl, false)) {\n items[id] = el;\n }\n }, this);\n useAnimation && this.captureAnimationState();\n order.forEach(function (id) {\n if (items[id]) {\n rootEl.removeChild(items[id]);\n rootEl.appendChild(items[id]);\n }\n });\n useAnimation && this.animateAll();\n },\n\n /**\n * Save the current sorting\n */\n save: function save() {\n var store = this.options.store;\n store && store.set && store.set(this);\n },\n\n /**\n * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\n * @param {HTMLElement} el\n * @param {String} [selector] default: `options.draggable`\n * @returns {HTMLElement|null}\n */\n closest: function closest$1(el, selector) {\n return closest(el, selector || this.options.draggable, this.el, false);\n },\n\n /**\n * Set/get option\n * @param {string} name\n * @param {*} [value]\n * @returns {*}\n */\n option: function option(name, value) {\n var options = this.options;\n\n if (value === void 0) {\n return options[name];\n } else {\n var modifiedValue = PluginManager.modifyOption(this, name, value);\n\n if (typeof modifiedValue !== 'undefined') {\n options[name] = modifiedValue;\n } else {\n options[name] = value;\n }\n\n if (name === 'group') {\n _prepareGroup(options);\n }\n }\n },\n\n /**\n * Destroy\n */\n destroy: function destroy() {\n pluginEvent('destroy', this);\n var el = this.el;\n el[expando] = null;\n off(el, 'mousedown', this._onTapStart);\n off(el, 'touchstart', this._onTapStart);\n off(el, 'pointerdown', this._onTapStart);\n\n if (this.nativeDraggable) {\n off(el, 'dragover', this);\n off(el, 'dragenter', this);\n } // Remove draggable attributes\n\n\n Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n el.removeAttribute('draggable');\n });\n\n this._onDrop();\n\n this._disableDelayedDragEvents();\n\n sortables.splice(sortables.indexOf(this.el), 1);\n this.el = el = null;\n },\n _hideClone: function _hideClone() {\n if (!cloneHidden) {\n pluginEvent('hideClone', this);\n if (Sortable.eventCanceled) return;\n css(cloneEl, 'display', 'none');\n\n if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n cloneEl.parentNode.removeChild(cloneEl);\n }\n\n cloneHidden = true;\n }\n },\n _showClone: function _showClone(putSortable) {\n if (putSortable.lastPutMode !== 'clone') {\n this._hideClone();\n\n return;\n }\n\n if (cloneHidden) {\n pluginEvent('showClone', this);\n if (Sortable.eventCanceled) return; // show clone at dragEl or original position\n\n if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {\n rootEl.insertBefore(cloneEl, dragEl);\n } else if (nextEl) {\n rootEl.insertBefore(cloneEl, nextEl);\n } else {\n rootEl.appendChild(cloneEl);\n }\n\n if (this.options.group.revertClone) {\n this.animate(dragEl, cloneEl);\n }\n\n css(cloneEl, 'display', '');\n cloneHidden = false;\n }\n }\n};\n\nfunction _globalDragOver(\n/**Event*/\nevt) {\n if (evt.dataTransfer) {\n evt.dataTransfer.dropEffect = 'move';\n }\n\n evt.cancelable && evt.preventDefault();\n}\n\nfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {\n var evt,\n sortable = fromEl[expando],\n onMoveFn = sortable.options.onMove,\n retVal; // Support for new CustomEvent feature\n\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent('move', {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent('move', true, true);\n }\n\n evt.to = toEl;\n evt.from = fromEl;\n evt.dragged = dragEl;\n evt.draggedRect = dragRect;\n evt.related = targetEl || toEl;\n evt.relatedRect = targetRect || getRect(toEl);\n evt.willInsertAfter = willInsertAfter;\n evt.originalEvent = originalEvent;\n fromEl.dispatchEvent(evt);\n\n if (onMoveFn) {\n retVal = onMoveFn.call(sortable, evt, originalEvent);\n }\n\n return retVal;\n}\n\nfunction _disableDraggable(el) {\n el.draggable = false;\n}\n\nfunction _unsilent() {\n _silent = false;\n}\n\nfunction _ghostIsLast(evt, vertical, sortable) {\n var rect = getRect(lastChild(sortable.el, sortable.options.draggable));\n var spacer = 10;\n return vertical ? evt.clientX > rect.right + spacer || evt.clientX <= rect.right && evt.clientY > rect.bottom && evt.clientX >= rect.left : evt.clientX > rect.right && evt.clientY > rect.top || evt.clientX <= rect.right && evt.clientY > rect.bottom + spacer;\n}\n\nfunction _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n var mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n targetLength = vertical ? targetRect.height : targetRect.width,\n targetS1 = vertical ? targetRect.top : targetRect.left,\n targetS2 = vertical ? targetRect.bottom : targetRect.right,\n invert = false;\n\n if (!invertSwap) {\n // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n // check if past first invert threshold on side opposite of lastDirection\n if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {\n // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n pastFirstInvertThresh = true;\n }\n\n if (!pastFirstInvertThresh) {\n // dragEl shadow (target move distance shadow)\n if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n : mouseOnAxis > targetS2 - targetMoveDistance) {\n return -lastDirection;\n }\n } else {\n invert = true;\n }\n } else {\n // Regular\n if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {\n return _getInsertDirection(target);\n }\n }\n }\n\n invert = invert || invertSwap;\n\n if (invert) {\n // Invert of regular\n if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {\n return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n }\n }\n\n return 0;\n}\n/**\n * Gets the direction dragEl must be swapped relative to target in order to make it\n * seem that dragEl has been \"inserted\" into that element's position\n * @param {HTMLElement} target The target whose position dragEl is being inserted at\n * @return {Number} Direction dragEl must be swapped\n */\n\n\nfunction _getInsertDirection(target) {\n if (index(dragEl) < index(target)) {\n return 1;\n } else {\n return -1;\n }\n}\n/**\n * Generate id\n * @param {HTMLElement} el\n * @returns {String}\n * @private\n */\n\n\nfunction _generateId(el) {\n var str = el.tagName + el.className + el.src + el.href + el.textContent,\n i = str.length,\n sum = 0;\n\n while (i--) {\n sum += str.charCodeAt(i);\n }\n\n return sum.toString(36);\n}\n\nfunction _saveInputCheckedState(root) {\n savedInputChecked.length = 0;\n var inputs = root.getElementsByTagName('input');\n var idx = inputs.length;\n\n while (idx--) {\n var el = inputs[idx];\n el.checked && savedInputChecked.push(el);\n }\n}\n\nfunction _nextTick(fn) {\n return setTimeout(fn, 0);\n}\n\nfunction _cancelNextTick(id) {\n return clearTimeout(id);\n} // Fixed #973:\n\n\nif (documentExists) {\n on(document, 'touchmove', function (evt) {\n if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n evt.preventDefault();\n }\n });\n} // Export utils\n\n\nSortable.utils = {\n on: on,\n off: off,\n css: css,\n find: find,\n is: function is(el, selector) {\n return !!closest(el, selector, el, false);\n },\n extend: extend,\n throttle: throttle,\n closest: closest,\n toggleClass: toggleClass,\n clone: clone,\n index: index,\n nextTick: _nextTick,\n cancelNextTick: _cancelNextTick,\n detectDirection: _detectDirection,\n getChild: getChild\n};\n/**\n * Get the Sortable instance of an element\n * @param {HTMLElement} element The element\n * @return {Sortable|undefined} The instance of Sortable\n */\n\nSortable.get = function (element) {\n return element[expando];\n};\n/**\n * Mount a plugin to Sortable\n * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted\n */\n\n\nSortable.mount = function () {\n for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n plugins[_key] = arguments[_key];\n }\n\n if (plugins[0].constructor === Array) plugins = plugins[0];\n plugins.forEach(function (plugin) {\n if (!plugin.prototype || !plugin.prototype.constructor) {\n throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(plugin));\n }\n\n if (plugin.utils) Sortable.utils = _objectSpread({}, Sortable.utils, plugin.utils);\n PluginManager.mount(plugin);\n });\n};\n/**\n * Create sortable instance\n * @param {HTMLElement} el\n * @param {Object} [options]\n */\n\n\nSortable.create = function (el, options) {\n return new Sortable(el, options);\n}; // Export\n\n\nSortable.version = version;\n\nvar autoScrolls = [],\n scrollEl,\n scrollRootEl,\n scrolling = false,\n lastAutoScrollX,\n lastAutoScrollY,\n touchEvt$1,\n pointerElemChangedInterval;\n\nfunction AutoScrollPlugin() {\n function AutoScroll() {\n this.defaults = {\n scroll: true,\n scrollSensitivity: 30,\n scrollSpeed: 10,\n bubbleScroll: true\n }; // Bind all private methods\n\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n }\n\n AutoScroll.prototype = {\n dragStarted: function dragStarted(_ref) {\n var originalEvent = _ref.originalEvent;\n\n if (this.sortable.nativeDraggable) {\n on(document, 'dragover', this._handleAutoScroll);\n } else {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._handleFallbackAutoScroll);\n } else if (originalEvent.touches) {\n on(document, 'touchmove', this._handleFallbackAutoScroll);\n } else {\n on(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref2) {\n var originalEvent = _ref2.originalEvent;\n\n // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n this._handleAutoScroll(originalEvent);\n }\n },\n drop: function drop() {\n if (this.sortable.nativeDraggable) {\n off(document, 'dragover', this._handleAutoScroll);\n } else {\n off(document, 'pointermove', this._handleFallbackAutoScroll);\n off(document, 'touchmove', this._handleFallbackAutoScroll);\n off(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n\n clearPointerElemChangedInterval();\n clearAutoScrolls();\n cancelThrottle();\n },\n nulling: function nulling() {\n touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n autoScrolls.length = 0;\n },\n _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {\n this._handleAutoScroll(evt, true);\n },\n _handleAutoScroll: function _handleAutoScroll(evt, fallback) {\n var _this = this;\n\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n elem = document.elementFromPoint(x, y);\n touchEvt$1 = evt; // IE does not seem to have native autoscroll,\n // Edge's autoscroll seems too conditional,\n // MACOS Safari does not have autoscroll,\n // Firefox and Chrome are good\n\n if (fallback || Edge || IE11OrLess || Safari) {\n autoScroll(evt, this.options, elem, fallback); // Listener for pointer element change\n\n var ogElemScroller = getParentAutoScrollElement(elem, true);\n\n if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n pointerElemChangedInterval && clearPointerElemChangedInterval(); // Detect for pointer elem change, emulating native DnD behaviour\n\n pointerElemChangedInterval = setInterval(function () {\n var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n\n if (newElem !== ogElemScroller) {\n ogElemScroller = newElem;\n clearAutoScrolls();\n }\n\n autoScroll(evt, _this.options, newElem, fallback);\n }, 10);\n lastAutoScrollX = x;\n lastAutoScrollY = y;\n }\n } else {\n // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {\n clearAutoScrolls();\n return;\n }\n\n autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);\n }\n }\n };\n return _extends(AutoScroll, {\n pluginName: 'scroll',\n initializeByDefault: true\n });\n}\n\nfunction clearAutoScrolls() {\n autoScrolls.forEach(function (autoScroll) {\n clearInterval(autoScroll.pid);\n });\n autoScrolls = [];\n}\n\nfunction clearPointerElemChangedInterval() {\n clearInterval(pointerElemChangedInterval);\n}\n\nvar autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n if (!options.scroll) return;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n sens = options.scrollSensitivity,\n speed = options.scrollSpeed,\n winScroller = getWindowScrollingElement();\n var scrollThisInstance = false,\n scrollCustomFn; // New scroll root, set scrollEl\n\n if (scrollRootEl !== rootEl) {\n scrollRootEl = rootEl;\n clearAutoScrolls();\n scrollEl = options.scroll;\n scrollCustomFn = options.scrollFn;\n\n if (scrollEl === true) {\n scrollEl = getParentAutoScrollElement(rootEl, true);\n }\n }\n\n var layersOut = 0;\n var currentParent = scrollEl;\n\n do {\n var el = currentParent,\n rect = getRect(el),\n top = rect.top,\n bottom = rect.bottom,\n left = rect.left,\n right = rect.right,\n width = rect.width,\n height = rect.height,\n canScrollX = void 0,\n canScrollY = void 0,\n scrollWidth = el.scrollWidth,\n scrollHeight = el.scrollHeight,\n elCSS = css(el),\n scrollPosX = el.scrollLeft,\n scrollPosY = el.scrollTop;\n\n if (el === winScroller) {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');\n } else {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');\n }\n\n var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);\n var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);\n\n if (!autoScrolls[layersOut]) {\n for (var i = 0; i <= layersOut; i++) {\n if (!autoScrolls[i]) {\n autoScrolls[i] = {};\n }\n }\n }\n\n if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n autoScrolls[layersOut].el = el;\n autoScrolls[layersOut].vx = vx;\n autoScrolls[layersOut].vy = vy;\n clearInterval(autoScrolls[layersOut].pid);\n\n if (vx != 0 || vy != 0) {\n scrollThisInstance = true;\n /* jshint loopfunc:true */\n\n autoScrolls[layersOut].pid = setInterval(function () {\n // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n if (isFallback && this.layer === 0) {\n Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely\n\n }\n\n var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n\n if (typeof scrollCustomFn === 'function') {\n if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {\n return;\n }\n }\n\n scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n }.bind({\n layer: layersOut\n }), 24);\n }\n }\n\n layersOut++;\n } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n\n scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\n\nvar drop = function drop(_ref) {\n var originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n dragEl = _ref.dragEl,\n activeSortable = _ref.activeSortable,\n dispatchSortableEvent = _ref.dispatchSortableEvent,\n hideGhostForTarget = _ref.hideGhostForTarget,\n unhideGhostForTarget = _ref.unhideGhostForTarget;\n if (!originalEvent) return;\n var toSortable = putSortable || activeSortable;\n hideGhostForTarget();\n var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;\n var target = document.elementFromPoint(touch.clientX, touch.clientY);\n unhideGhostForTarget();\n\n if (toSortable && !toSortable.el.contains(target)) {\n dispatchSortableEvent('spill');\n this.onSpill({\n dragEl: dragEl,\n putSortable: putSortable\n });\n }\n};\n\nfunction Revert() {}\n\nRevert.prototype = {\n startIndex: null,\n dragStart: function dragStart(_ref2) {\n var oldDraggableIndex = _ref2.oldDraggableIndex;\n this.startIndex = oldDraggableIndex;\n },\n onSpill: function onSpill(_ref3) {\n var dragEl = _ref3.dragEl,\n putSortable = _ref3.putSortable;\n this.sortable.captureAnimationState();\n\n if (putSortable) {\n putSortable.captureAnimationState();\n }\n\n var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n\n if (nextSibling) {\n this.sortable.el.insertBefore(dragEl, nextSibling);\n } else {\n this.sortable.el.appendChild(dragEl);\n }\n\n this.sortable.animateAll();\n\n if (putSortable) {\n putSortable.animateAll();\n }\n },\n drop: drop\n};\n\n_extends(Revert, {\n pluginName: 'revertOnSpill'\n});\n\nfunction Remove() {}\n\nRemove.prototype = {\n onSpill: function onSpill(_ref4) {\n var dragEl = _ref4.dragEl,\n putSortable = _ref4.putSortable;\n var parentSortable = putSortable || this.sortable;\n parentSortable.captureAnimationState();\n dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n parentSortable.animateAll();\n },\n drop: drop\n};\n\n_extends(Remove, {\n pluginName: 'removeOnSpill'\n});\n\nvar lastSwapEl;\n\nfunction SwapPlugin() {\n function Swap() {\n this.defaults = {\n swapClass: 'sortable-swap-highlight'\n };\n }\n\n Swap.prototype = {\n dragStart: function dragStart(_ref) {\n var dragEl = _ref.dragEl;\n lastSwapEl = dragEl;\n },\n dragOverValid: function dragOverValid(_ref2) {\n var completed = _ref2.completed,\n target = _ref2.target,\n onMove = _ref2.onMove,\n activeSortable = _ref2.activeSortable,\n changed = _ref2.changed,\n cancel = _ref2.cancel;\n if (!activeSortable.options.swap) return;\n var el = this.sortable.el,\n options = this.options;\n\n if (target && target !== el) {\n var prevSwapEl = lastSwapEl;\n\n if (onMove(target) !== false) {\n toggleClass(target, options.swapClass, true);\n lastSwapEl = target;\n } else {\n lastSwapEl = null;\n }\n\n if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n toggleClass(prevSwapEl, options.swapClass, false);\n }\n }\n\n changed();\n completed(true);\n cancel();\n },\n drop: function drop(_ref3) {\n var activeSortable = _ref3.activeSortable,\n putSortable = _ref3.putSortable,\n dragEl = _ref3.dragEl;\n var toSortable = putSortable || this.sortable;\n var options = this.options;\n lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n\n if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {\n if (dragEl !== lastSwapEl) {\n toSortable.captureAnimationState();\n if (toSortable !== activeSortable) activeSortable.captureAnimationState();\n swapNodes(dragEl, lastSwapEl);\n toSortable.animateAll();\n if (toSortable !== activeSortable) activeSortable.animateAll();\n }\n }\n },\n nulling: function nulling() {\n lastSwapEl = null;\n }\n };\n return _extends(Swap, {\n pluginName: 'swap',\n eventProperties: function eventProperties() {\n return {\n swapItem: lastSwapEl\n };\n }\n });\n}\n\nfunction swapNodes(n1, n2) {\n var p1 = n1.parentNode,\n p2 = n2.parentNode,\n i1,\n i2;\n if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n i1 = index(n1);\n i2 = index(n2);\n\n if (p1.isEqualNode(p2) && i1 < i2) {\n i2++;\n }\n\n p1.insertBefore(n2, p1.children[i1]);\n p2.insertBefore(n1, p2.children[i2]);\n}\n\nvar multiDragElements = [],\n multiDragClones = [],\n lastMultiDragSelect,\n // for selection with modifier key down (SHIFT)\nmultiDragSortable,\n initialFolding = false,\n // Initial multi-drag fold when drag started\nfolding = false,\n // Folding any other time\ndragStarted = false,\n dragEl$1,\n clonesFromRect,\n clonesHidden;\n\nfunction MultiDragPlugin() {\n function MultiDrag(sortable) {\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n\n if (sortable.options.supportPointer) {\n on(document, 'pointerup', this._deselectMultiDrag);\n } else {\n on(document, 'mouseup', this._deselectMultiDrag);\n on(document, 'touchend', this._deselectMultiDrag);\n }\n\n on(document, 'keydown', this._checkKeyDown);\n on(document, 'keyup', this._checkKeyUp);\n this.defaults = {\n selectedClass: 'sortable-selected',\n multiDragKey: null,\n setData: function setData(dataTransfer, dragEl) {\n var data = '';\n\n if (multiDragElements.length && multiDragSortable === sortable) {\n multiDragElements.forEach(function (multiDragElement, i) {\n data += (!i ? '' : ', ') + multiDragElement.textContent;\n });\n } else {\n data = dragEl.textContent;\n }\n\n dataTransfer.setData('Text', data);\n }\n };\n }\n\n MultiDrag.prototype = {\n multiDragKeyDown: false,\n isMultiDrag: false,\n delayStartGlobal: function delayStartGlobal(_ref) {\n var dragged = _ref.dragEl;\n dragEl$1 = dragged;\n },\n delayEnded: function delayEnded() {\n this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);\n },\n setupClone: function setupClone(_ref2) {\n var sortable = _ref2.sortable,\n cancel = _ref2.cancel;\n if (!this.isMultiDrag) return;\n\n for (var i = 0; i < multiDragElements.length; i++) {\n multiDragClones.push(clone(multiDragElements[i]));\n multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n multiDragClones[i].draggable = false;\n multiDragClones[i].style['will-change'] = '';\n toggleClass(multiDragClones[i], this.options.selectedClass, false);\n multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);\n }\n\n sortable._hideClone();\n\n cancel();\n },\n clone: function clone(_ref3) {\n var sortable = _ref3.sortable,\n rootEl = _ref3.rootEl,\n dispatchSortableEvent = _ref3.dispatchSortableEvent,\n cancel = _ref3.cancel;\n if (!this.isMultiDrag) return;\n\n if (!this.options.removeCloneOnHide) {\n if (multiDragElements.length && multiDragSortable === sortable) {\n insertMultiDragClones(true, rootEl);\n dispatchSortableEvent('clone');\n cancel();\n }\n }\n },\n showClone: function showClone(_ref4) {\n var cloneNowShown = _ref4.cloneNowShown,\n rootEl = _ref4.rootEl,\n cancel = _ref4.cancel;\n if (!this.isMultiDrag) return;\n insertMultiDragClones(false, rootEl);\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', '');\n });\n cloneNowShown();\n clonesHidden = false;\n cancel();\n },\n hideClone: function hideClone(_ref5) {\n var _this = this;\n\n var sortable = _ref5.sortable,\n cloneNowHidden = _ref5.cloneNowHidden,\n cancel = _ref5.cancel;\n if (!this.isMultiDrag) return;\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', 'none');\n\n if (_this.options.removeCloneOnHide && clone.parentNode) {\n clone.parentNode.removeChild(clone);\n }\n });\n cloneNowHidden();\n clonesHidden = true;\n cancel();\n },\n dragStartGlobal: function dragStartGlobal(_ref6) {\n var sortable = _ref6.sortable;\n\n if (!this.isMultiDrag && multiDragSortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n }\n\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.sortableIndex = index(multiDragElement);\n }); // Sort multi-drag elements\n\n multiDragElements = multiDragElements.sort(function (a, b) {\n return a.sortableIndex - b.sortableIndex;\n });\n dragStarted = true;\n },\n dragStarted: function dragStarted(_ref7) {\n var _this2 = this;\n\n var sortable = _ref7.sortable;\n if (!this.isMultiDrag) return;\n\n if (this.options.sort) {\n // Capture rects,\n // hide multi drag elements (by positioning them absolute),\n // set multi drag elements rects to dragRect,\n // show multi drag elements,\n // animate to rects,\n // unset rects & remove from DOM\n sortable.captureAnimationState();\n\n if (this.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n css(multiDragElement, 'position', 'absolute');\n });\n var dragRect = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRect);\n });\n folding = true;\n initialFolding = true;\n }\n }\n\n sortable.animateAll(function () {\n folding = false;\n initialFolding = false;\n\n if (_this2.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n } // Remove all auxiliary multidrag items from el, if sorting enabled\n\n\n if (_this2.options.sort) {\n removeMultiDragElements();\n }\n });\n },\n dragOver: function dragOver(_ref8) {\n var target = _ref8.target,\n completed = _ref8.completed,\n cancel = _ref8.cancel;\n\n if (folding && ~multiDragElements.indexOf(target)) {\n completed(false);\n cancel();\n }\n },\n revert: function revert(_ref9) {\n var fromSortable = _ref9.fromSortable,\n rootEl = _ref9.rootEl,\n sortable = _ref9.sortable,\n dragRect = _ref9.dragRect;\n\n if (multiDragElements.length > 1) {\n // Setup unfold animation\n multiDragElements.forEach(function (multiDragElement) {\n sortable.addAnimationState({\n target: multiDragElement,\n rect: folding ? getRect(multiDragElement) : dragRect\n });\n unsetRect(multiDragElement);\n multiDragElement.fromRect = dragRect;\n fromSortable.removeAnimationState(multiDragElement);\n });\n folding = false;\n insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref10) {\n var sortable = _ref10.sortable,\n isOwner = _ref10.isOwner,\n insertion = _ref10.insertion,\n activeSortable = _ref10.activeSortable,\n parentEl = _ref10.parentEl,\n putSortable = _ref10.putSortable;\n var options = this.options;\n\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n }\n\n initialFolding = false; // If leaving sort:false root, or already folding - Fold to new location\n\n if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {\n // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n var dragRectAbsolute = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRectAbsolute); // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n\n parentEl.appendChild(multiDragElement);\n });\n folding = true;\n } // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n\n\n if (!isOwner) {\n // Only remove if not folding (folding will remove them anyways)\n if (!folding) {\n removeMultiDragElements();\n }\n\n if (multiDragElements.length > 1) {\n var clonesHiddenBefore = clonesHidden;\n\n activeSortable._showClone(sortable); // Unfold animation for clones if showing from hidden\n\n\n if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {\n multiDragClones.forEach(function (clone) {\n activeSortable.addAnimationState({\n target: clone,\n rect: clonesFromRect\n });\n clone.fromRect = clonesFromRect;\n clone.thisAnimationDuration = null;\n });\n }\n } else {\n activeSortable._showClone(sortable);\n }\n }\n }\n },\n dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {\n var dragRect = _ref11.dragRect,\n isOwner = _ref11.isOwner,\n activeSortable = _ref11.activeSortable;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n });\n\n if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {\n clonesFromRect = _extends({}, dragRect);\n var dragMatrix = matrix(dragEl$1, true);\n clonesFromRect.top -= dragMatrix.f;\n clonesFromRect.left -= dragMatrix.e;\n }\n },\n dragOverAnimationComplete: function dragOverAnimationComplete() {\n if (folding) {\n folding = false;\n removeMultiDragElements();\n }\n },\n drop: function drop(_ref12) {\n var evt = _ref12.originalEvent,\n rootEl = _ref12.rootEl,\n parentEl = _ref12.parentEl,\n sortable = _ref12.sortable,\n dispatchSortableEvent = _ref12.dispatchSortableEvent,\n oldIndex = _ref12.oldIndex,\n putSortable = _ref12.putSortable;\n var toSortable = putSortable || this.sortable;\n if (!evt) return;\n var options = this.options,\n children = parentEl.children; // Multi-drag selection\n\n if (!dragStarted) {\n if (options.multiDragKey && !this.multiDragKeyDown) {\n this._deselectMultiDrag();\n }\n\n toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));\n\n if (!~multiDragElements.indexOf(dragEl$1)) {\n multiDragElements.push(dragEl$1);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: dragEl$1,\n originalEvt: evt\n }); // Modifier activated, select from last to dragEl\n\n if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {\n var lastIndex = index(lastMultiDragSelect),\n currentIndex = index(dragEl$1);\n\n if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n // (but previous selection existed)\n var n, i;\n\n if (currentIndex > lastIndex) {\n i = lastIndex;\n n = currentIndex;\n } else {\n i = currentIndex;\n n = lastIndex + 1;\n }\n\n for (; i < n; i++) {\n if (~multiDragElements.indexOf(children[i])) continue;\n toggleClass(children[i], options.selectedClass, true);\n multiDragElements.push(children[i]);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: children[i],\n originalEvt: evt\n });\n }\n }\n } else {\n lastMultiDragSelect = dragEl$1;\n }\n\n multiDragSortable = toSortable;\n } else {\n multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);\n lastMultiDragSelect = null;\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'deselect',\n targetEl: dragEl$1,\n originalEvt: evt\n });\n }\n } // Multi-drag drop\n\n\n if (dragStarted && this.isMultiDrag) {\n // Do not \"unfold\" after around dragEl if reverted\n if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {\n var dragRect = getRect(dragEl$1),\n multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');\n if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;\n toSortable.captureAnimationState();\n\n if (!initialFolding) {\n if (options.animation) {\n dragEl$1.fromRect = dragRect;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n\n if (multiDragElement !== dragEl$1) {\n var rect = folding ? getRect(multiDragElement) : dragRect;\n multiDragElement.fromRect = rect; // Prepare unfold animation\n\n toSortable.addAnimationState({\n target: multiDragElement,\n rect: rect\n });\n }\n });\n } // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n // properly they must all be removed\n\n\n removeMultiDragElements();\n multiDragElements.forEach(function (multiDragElement) {\n if (children[multiDragIndex]) {\n parentEl.insertBefore(multiDragElement, children[multiDragIndex]);\n } else {\n parentEl.appendChild(multiDragElement);\n }\n\n multiDragIndex++;\n }); // If initial folding is done, the elements may have changed position because they are now\n // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n // must be fired here as Sortable will not.\n\n if (oldIndex === index(dragEl$1)) {\n var update = false;\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement.sortableIndex !== index(multiDragElement)) {\n update = true;\n return;\n }\n });\n\n if (update) {\n dispatchSortableEvent('update');\n }\n }\n } // Must be done after capturing individual rects (scroll bar)\n\n\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n toSortable.animateAll();\n }\n\n multiDragSortable = toSortable;\n } // Remove clones if necessary\n\n\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n multiDragClones.forEach(function (clone) {\n clone.parentNode && clone.parentNode.removeChild(clone);\n });\n }\n },\n nullingGlobal: function nullingGlobal() {\n this.isMultiDrag = dragStarted = false;\n multiDragClones.length = 0;\n },\n destroyGlobal: function destroyGlobal() {\n this._deselectMultiDrag();\n\n off(document, 'pointerup', this._deselectMultiDrag);\n off(document, 'mouseup', this._deselectMultiDrag);\n off(document, 'touchend', this._deselectMultiDrag);\n off(document, 'keydown', this._checkKeyDown);\n off(document, 'keyup', this._checkKeyUp);\n },\n _deselectMultiDrag: function _deselectMultiDrag(evt) {\n if (typeof dragStarted !== \"undefined\" && dragStarted) return; // Only deselect if selection is in this sortable\n\n if (multiDragSortable !== this.sortable) return; // Only deselect if target is not item in this sortable\n\n if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return; // Only deselect if left click\n\n if (evt && evt.button !== 0) return;\n\n while (multiDragElements.length) {\n var el = multiDragElements[0];\n toggleClass(el, this.options.selectedClass, false);\n multiDragElements.shift();\n dispatchEvent({\n sortable: this.sortable,\n rootEl: this.sortable.el,\n name: 'deselect',\n targetEl: el,\n originalEvt: evt\n });\n }\n },\n _checkKeyDown: function _checkKeyDown(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = true;\n }\n },\n _checkKeyUp: function _checkKeyUp(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = false;\n }\n }\n };\n return _extends(MultiDrag, {\n // Static methods & properties\n pluginName: 'multiDrag',\n utils: {\n /**\r\n * Selects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be selected\r\n */\n select: function select(el) {\n var sortable = el.parentNode[expando];\n if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;\n\n if (multiDragSortable && multiDragSortable !== sortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n\n multiDragSortable = sortable;\n }\n\n toggleClass(el, sortable.options.selectedClass, true);\n multiDragElements.push(el);\n },\n\n /**\r\n * Deselects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be deselected\r\n */\n deselect: function deselect(el) {\n var sortable = el.parentNode[expando],\n index = multiDragElements.indexOf(el);\n if (!sortable || !sortable.options.multiDrag || !~index) return;\n toggleClass(el, sortable.options.selectedClass, false);\n multiDragElements.splice(index, 1);\n }\n },\n eventProperties: function eventProperties() {\n var _this3 = this;\n\n var oldIndicies = [],\n newIndicies = [];\n multiDragElements.forEach(function (multiDragElement) {\n oldIndicies.push({\n multiDragElement: multiDragElement,\n index: multiDragElement.sortableIndex\n }); // multiDragElements will already be sorted if folding\n\n var newIndex;\n\n if (folding && multiDragElement !== dragEl$1) {\n newIndex = -1;\n } else if (folding) {\n newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');\n } else {\n newIndex = index(multiDragElement);\n }\n\n newIndicies.push({\n multiDragElement: multiDragElement,\n index: newIndex\n });\n });\n return {\n items: _toConsumableArray(multiDragElements),\n clones: [].concat(multiDragClones),\n oldIndicies: oldIndicies,\n newIndicies: newIndicies\n };\n },\n optionListeners: {\n multiDragKey: function multiDragKey(key) {\n key = key.toLowerCase();\n\n if (key === 'ctrl') {\n key = 'Control';\n } else if (key.length > 1) {\n key = key.charAt(0).toUpperCase() + key.substr(1);\n }\n\n return key;\n }\n }\n });\n}\n\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n multiDragElements.forEach(function (multiDragElement, i) {\n var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];\n\n if (target) {\n rootEl.insertBefore(multiDragElement, target);\n } else {\n rootEl.appendChild(multiDragElement);\n }\n });\n}\n/**\r\n * Insert multi-drag clones\r\n * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted\r\n * @param {HTMLElement} rootEl\r\n */\n\n\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n multiDragClones.forEach(function (clone, i) {\n var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n\n if (target) {\n rootEl.insertBefore(clone, target);\n } else {\n rootEl.appendChild(clone);\n }\n });\n}\n\nfunction removeMultiDragElements() {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);\n });\n}\n\nSortable.mount(new AutoScrollPlugin());\nSortable.mount(Remove, Revert);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Sortable);\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/boolean-checkbox.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/boolean-checkbox.vue?vue&type=script&lang=ts& ***!\n \\**************************************************************************************************************************************************/\n/*! exports provided: BooleanCheckbox, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"BooleanCheckbox\", function() { return BooleanCheckbox; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _boolean__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./boolean */ \"./src/vue/boolean.ts\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! survey-core */ \"./src/entries/core.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\n\nvar BooleanCheckbox = /** @class */ (function (_super) {\n __extends(BooleanCheckbox, _super);\n function BooleanCheckbox() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n BooleanCheckbox = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], BooleanCheckbox);\n return BooleanCheckbox;\n}(_boolean__WEBPACK_IMPORTED_MODULE_2__[\"Boolean\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-boolean-checkbox\", BooleanCheckbox);\nsurvey_core__WEBPACK_IMPORTED_MODULE_3__[\"RendererFactory\"].Instance.registerRenderer(\"boolean\", \"checkbox\", \"sv-boolean-checkbox\");\n/* harmony default export */ __webpack_exports__[\"default\"] = (BooleanCheckbox);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/boolean-switch.vue?vue&type=script&lang=ts&\":\n/*!************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/boolean-switch.vue?vue&type=script&lang=ts& ***!\n \\************************************************************************************************************************************************/\n/*! exports provided: BooleanSwitch, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"BooleanSwitch\", function() { return BooleanSwitch; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _boolean__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./boolean */ \"./src/vue/boolean.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\nvar BooleanSwitch = /** @class */ (function (_super) {\n __extends(BooleanSwitch, _super);\n function BooleanSwitch() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n BooleanSwitch = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], BooleanSwitch);\n return BooleanSwitch;\n}(_boolean__WEBPACK_IMPORTED_MODULE_2__[\"Boolean\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-boolean\", BooleanSwitch);\n/* harmony default export */ __webpack_exports__[\"default\"] = (BooleanSwitch);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/buttongroup.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/buttongroup.vue?vue&type=script&lang=ts& ***!\n \\*********************************************************************************************************************************************/\n/*! exports provided: ButtonGroup, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroup\", function() { return ButtonGroup; });\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\nvar ButtonGroup = /** @class */ (function (_super) {\n __extends(ButtonGroup, _super);\n function ButtonGroup() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ButtonGroup.prototype.getModel = function () {\n return this.question;\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Prop\"])()\n ], ButtonGroup.prototype, \"question\", void 0);\n ButtonGroup = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]\n ], ButtonGroup);\n return ButtonGroup;\n}(_question__WEBPACK_IMPORTED_MODULE_1__[\"QuestionVue\"]));\n\n// Vue.component(\"survey-buttongroup\", ButtonGroup);\n/* harmony default export */ __webpack_exports__[\"default\"] = (ButtonGroup);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/buttongroupitem.vue?vue&type=script&lang=ts&\":\n/*!*************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/buttongroupitem.vue?vue&type=script&lang=ts& ***!\n \\*************************************************************************************************************************************************/\n/*! exports provided: ButtonGroupItem, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroupItem\", function() { return ButtonGroupItem; });\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! survey-core */ \"./src/entries/core.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\n\nvar ButtonGroupItem = /** @class */ (function (_super) {\n __extends(ButtonGroupItem, _super);\n function ButtonGroupItem(props) {\n var _this = _super.call(this, props) || this;\n _this.model = new survey_core__WEBPACK_IMPORTED_MODULE_2__[\"ButtonGroupItemModel\"](_this.question, _this.item, _this.index);\n return _this;\n }\n ButtonGroupItem.prototype.getModel = function () {\n return this.item;\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Prop\"])()\n ], ButtonGroupItem.prototype, \"item\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Prop\"])()\n ], ButtonGroupItem.prototype, \"question\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Prop\"])()\n ], ButtonGroupItem.prototype, \"index\", void 0);\n ButtonGroupItem = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]\n ], ButtonGroupItem);\n return ButtonGroupItem;\n}(_base__WEBPACK_IMPORTED_MODULE_3__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_1___default.a.component(\"sv-button-group-item\", ButtonGroupItem);\n/* harmony default export */ __webpack_exports__[\"default\"] = (ButtonGroupItem);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/checkbox.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/checkbox.vue?vue&type=script&lang=ts& ***!\n \\******************************************************************************************************************************************/\n/*! exports provided: Checkbox, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Checkbox\", function() { return Checkbox; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\nvar Checkbox = /** @class */ (function (_super) {\n __extends(Checkbox, _super);\n function Checkbox() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Checkbox.prototype.getItemClass = function (item) {\n return this.question.getItemClass(item);\n };\n Checkbox = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Checkbox);\n return Checkbox;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-checkbox\", Checkbox);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Checkbox);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/checkboxitem.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/checkboxitem.vue?vue&type=script&lang=ts& ***!\n \\**********************************************************************************************************************************************/\n/*! exports provided: CheckboxItem, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CheckboxItem\", function() { return CheckboxItem; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\nvar CheckboxItem = /** @class */ (function (_super) {\n __extends(CheckboxItem, _super);\n function CheckboxItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n CheckboxItem.prototype.getModel = function () {\n return this.item;\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: false,\n configurable: true\n });\n CheckboxItem.prototype.getLabelClass = function (item) {\n return this.question.getLabelClass(item);\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], CheckboxItem.prototype, \"question\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], CheckboxItem.prototype, \"item\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], CheckboxItem.prototype, \"index\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], CheckboxItem.prototype, \"hideLabel\", void 0);\n CheckboxItem = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], CheckboxItem);\n return CheckboxItem;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-checkbox-item\", CheckboxItem);\n/* harmony default export */ __webpack_exports__[\"default\"] = (CheckboxItem);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/comment.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/comment.vue?vue&type=script&lang=ts& ***!\n \\*****************************************************************************************************************************************/\n/*! exports provided: Comment, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Comment\", function() { return Comment; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\nvar Comment = /** @class */ (function (_super) {\n __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 = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Comment);\n return Comment;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-comment\", Comment);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Comment);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=script&lang=ts&\":\n/*!********************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=script&lang=ts& ***!\n \\********************************************************************************************************************************************************************************/\n/*! exports provided: ActionBarItemDropdownViewModel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ActionBarItemDropdownViewModel\", function() { return ActionBarItemDropdownViewModel; });\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _action_bar_item_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./action-bar-item.vue */ \"./src/vue/components/action-bar/action-bar-item.vue\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\nvar ActionBarItemDropdownViewModel = /** @class */ (function (_super) {\n __extends(ActionBarItemDropdownViewModel, _super);\n function ActionBarItemDropdownViewModel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ActionBarItemDropdownViewModel = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]\n ], ActionBarItemDropdownViewModel);\n return ActionBarItemDropdownViewModel;\n}(_action_bar_item_vue__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_1___default.a.component(\"sv-action-bar-item-dropdown\", ActionBarItemDropdownViewModel);\n/* harmony default export */ __webpack_exports__[\"default\"] = (ActionBarItemDropdownViewModel);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-item.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/action-bar/action-bar-item.vue?vue&type=script&lang=ts& ***!\n \\***********************************************************************************************************************************************************************/\n/*! exports provided: ActionBarItemViewModel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ActionBarItemViewModel\", function() { return ActionBarItemViewModel; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\nvar ActionBarItemViewModel = /** @class */ (function (_super) {\n __extends(ActionBarItemViewModel, _super);\n function ActionBarItemViewModel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ActionBarItemViewModel.prototype.getModel = function () {\n return this.item;\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], ActionBarItemViewModel.prototype, \"item\", void 0);\n ActionBarItemViewModel = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], ActionBarItemViewModel);\n return ActionBarItemViewModel;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-action-bar-item\", ActionBarItemViewModel);\n/* harmony default export */ __webpack_exports__[\"default\"] = (ActionBarItemViewModel);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-separator.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/action-bar/action-bar-separator.vue?vue&type=script&lang=ts& ***!\n \\****************************************************************************************************************************************************************************/\n/*! exports provided: ActionBarSeparatorViewModel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ActionBarSeparatorViewModel\", function() { return ActionBarSeparatorViewModel; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\nvar ActionBarSeparatorViewModel = /** @class */ (function (_super) {\n __extends(ActionBarSeparatorViewModel, _super);\n function ActionBarSeparatorViewModel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(ActionBarSeparatorViewModel.prototype, \"innerCss\", {\n get: function () {\n return this.item && this.item.innerCss;\n },\n enumerable: false,\n configurable: true\n });\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], ActionBarSeparatorViewModel.prototype, \"item\", void 0);\n ActionBarSeparatorViewModel = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], ActionBarSeparatorViewModel);\n return ActionBarSeparatorViewModel;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-action-bar-separator\", ActionBarSeparatorViewModel);\n/* harmony default export */ __webpack_exports__[\"default\"] = (ActionBarSeparatorViewModel);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/action-bar/action-bar.vue?vue&type=script&lang=ts& ***!\n \\******************************************************************************************************************************************************************/\n/*! exports provided: ActionViewModel, ActionBarItemViewModel, ActionBarItemDropdownViewModel, ActionBarSeparatorViewModel, ActionBarViewModel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ActionBarViewModel\", function() { return ActionBarViewModel; });\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../base */ \"./src/vue/base.ts\");\n/* harmony import */ var _action_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./action.vue */ \"./src/vue/components/action-bar/action.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionViewModel\", function() { return _action_vue__WEBPACK_IMPORTED_MODULE_3__[\"ActionViewModel\"]; });\n\n/* harmony import */ var _action_bar_item_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./action-bar-item.vue */ \"./src/vue/components/action-bar/action-bar-item.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarItemViewModel\", function() { return _action_bar_item_vue__WEBPACK_IMPORTED_MODULE_4__[\"ActionBarItemViewModel\"]; });\n\n/* harmony import */ var _action_bar_item_dropdown_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./action-bar-item-dropdown.vue */ \"./src/vue/components/action-bar/action-bar-item-dropdown.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarItemDropdownViewModel\", function() { return _action_bar_item_dropdown_vue__WEBPACK_IMPORTED_MODULE_5__[\"ActionBarItemDropdownViewModel\"]; });\n\n/* harmony import */ var _action_bar_separator_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./action-bar-separator.vue */ \"./src/vue/components/action-bar/action-bar-separator.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarSeparatorViewModel\", function() { return _action_bar_separator_vue__WEBPACK_IMPORTED_MODULE_6__[\"ActionBarSeparatorViewModel\"]; });\n\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\n\n\n\n\nvar ActionBarViewModel = /** @class */ (function (_super) {\n __extends(ActionBarViewModel, _super);\n function ActionBarViewModel(props) {\n return _super.call(this, props) || this;\n }\n ActionBarViewModel.prototype.getModel = function () {\n return this.model;\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Prop\"])()\n ], ActionBarViewModel.prototype, \"model\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Prop\"])()\n ], ActionBarViewModel.prototype, \"handleClick\", void 0);\n ActionBarViewModel = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]\n ], ActionBarViewModel);\n return ActionBarViewModel;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_1___default.a.component(\"sv-action-bar\", ActionBarViewModel);\n/* harmony default export */ __webpack_exports__[\"default\"] = (ActionBarViewModel);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/action-bar/action.vue?vue&type=script&lang=ts& ***!\n \\**************************************************************************************************************************************************************/\n/*! exports provided: ActionViewModel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ActionViewModel\", function() { return ActionViewModel; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\nvar ActionViewModel = /** @class */ (function (_super) {\n __extends(ActionViewModel, _super);\n function ActionViewModel(props) {\n return _super.call(this, props) || this;\n }\n ActionViewModel.prototype.getModel = function () {\n return this.item;\n };\n ActionViewModel.prototype.getComponentName = function () {\n return this.item.component || \"sv-action-bar-item\";\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], ActionViewModel.prototype, \"item\", void 0);\n ActionViewModel = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], ActionViewModel);\n return ActionViewModel;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-action\", ActionViewModel);\n/* harmony default export */ __webpack_exports__[\"default\"] = (ActionViewModel);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/default-title/default-title.vue?vue&type=script&lang=ts&\":\n/*!************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/default-title/default-title.vue?vue&type=script&lang=ts& ***!\n \\************************************************************************************************************************************************************************/\n/*! exports provided: DefaultTitle, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DefaultTitle\", function() { return DefaultTitle; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\nvar DefaultTitle = /** @class */ (function (_super) {\n __extends(DefaultTitle, _super);\n function DefaultTitle() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.isCollapsed = false;\n return _this;\n }\n Object.defineProperty(DefaultTitle.prototype, \"showIcon\", {\n get: function () {\n return this.element.isExpanded || this.element.isCollapsed;\n },\n enumerable: false,\n configurable: true\n });\n DefaultTitle.prototype.changeExpanded = function () {\n this.element.toggleState();\n };\n DefaultTitle.prototype.getIconCss = function (isCollapsed) {\n var result = this.css.question.icon;\n if (!isCollapsed)\n result += \" \" + this.css.question.iconExpanded;\n return result;\n };\n DefaultTitle.prototype.mounted = function () {\n var _this = this;\n this.isCollapsed = this.element.isCollapsed;\n this.element.stateChangedCallback = function () {\n _this.isCollapsed = _this.element.isCollapsed;\n };\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_2__[\"Prop\"])()\n ], DefaultTitle.prototype, \"element\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_2__[\"Prop\"])()\n ], DefaultTitle.prototype, \"css\", void 0);\n DefaultTitle = __decorate([\n vue_class_component__WEBPACK_IMPORTED_MODULE_1__[\"default\"]\n ], DefaultTitle);\n return DefaultTitle;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-default-title\", DefaultTitle);\n/* harmony default export */ __webpack_exports__[\"default\"] = (DefaultTitle);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/list/list.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/list/list.vue?vue&type=script&lang=ts& ***!\n \\******************************************************************************************************************************************************/\n/*! exports provided: List, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"List\", function() { return List; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\nvar List = /** @class */ (function (_super) {\n __extends(List, _super);\n function List() {\n return _super.call(this) || this;\n }\n List.prototype.getModel = function () {\n return this.model;\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], List.prototype, \"model\", void 0);\n List = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], List);\n return List;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-list\", List);\n/* harmony default export */ __webpack_exports__[\"default\"] = (List);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=script&lang=ts& ***!\n \\***************************************************************************************************************************************************************************************/\n/*! exports provided: SurveyQuestionMatrixDetailButton, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyQuestionMatrixDetailButton\", function() { return SurveyQuestionMatrixDetailButton; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\nvar SurveyQuestionMatrixDetailButton = /** @class */ (function (_super) {\n __extends(SurveyQuestionMatrixDetailButton, _super);\n function SurveyQuestionMatrixDetailButton() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(SurveyQuestionMatrixDetailButton.prototype, \"question\", {\n get: function () {\n return this.item.data.question;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyQuestionMatrixDetailButton.prototype, \"row\", {\n get: function () {\n return this.item.data.row;\n },\n enumerable: false,\n configurable: true\n });\n SurveyQuestionMatrixDetailButton.prototype.getModel = function () {\n return this.item;\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], SurveyQuestionMatrixDetailButton.prototype, \"item\", void 0);\n SurveyQuestionMatrixDetailButton = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], SurveyQuestionMatrixDetailButton);\n return SurveyQuestionMatrixDetailButton;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-matrix-detail-button\", SurveyQuestionMatrixDetailButton);\n/* harmony default export */ __webpack_exports__[\"default\"] = (SurveyQuestionMatrixDetailButton);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=script&lang=ts& ***!\n \\*****************************************************************************************************************************************************************************************/\n/*! exports provided: SurveyQuestionMatrixDynamicDragDropIcon, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyQuestionMatrixDynamicDragDropIcon\", function() { return SurveyQuestionMatrixDynamicDragDropIcon; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\nvar SurveyQuestionMatrixDynamicDragDropIcon = /** @class */ (function (_super) {\n __extends(SurveyQuestionMatrixDynamicDragDropIcon, _super);\n function SurveyQuestionMatrixDynamicDragDropIcon() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(SurveyQuestionMatrixDynamicDragDropIcon.prototype, \"question\", {\n get: function () {\n return this.item.data.question;\n },\n enumerable: false,\n configurable: true\n });\n SurveyQuestionMatrixDynamicDragDropIcon.prototype.getModel = function () {\n return this.item;\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], SurveyQuestionMatrixDynamicDragDropIcon.prototype, \"item\", void 0);\n SurveyQuestionMatrixDynamicDragDropIcon = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], SurveyQuestionMatrixDynamicDragDropIcon);\n return SurveyQuestionMatrixDynamicDragDropIcon;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-matrix-drag-drop-icon\", SurveyQuestionMatrixDynamicDragDropIcon);\n/* harmony default export */ __webpack_exports__[\"default\"] = (SurveyQuestionMatrixDynamicDragDropIcon);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=script&lang=ts& ***!\n \\***************************************************************************************************************************************************************************************/\n/*! exports provided: SurveyQuestionMatrixDynamicRemoveButton, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyQuestionMatrixDynamicRemoveButton\", function() { return SurveyQuestionMatrixDynamicRemoveButton; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\nvar SurveyQuestionMatrixDynamicRemoveButton = /** @class */ (function (_super) {\n __extends(SurveyQuestionMatrixDynamicRemoveButton, _super);\n function SurveyQuestionMatrixDynamicRemoveButton() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(SurveyQuestionMatrixDynamicRemoveButton.prototype, \"question\", {\n get: function () {\n return this.item.data.question;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyQuestionMatrixDynamicRemoveButton.prototype, \"row\", {\n get: function () {\n return this.item.data.row;\n },\n enumerable: false,\n configurable: true\n });\n SurveyQuestionMatrixDynamicRemoveButton.prototype.getModel = function () {\n return this.item;\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], SurveyQuestionMatrixDynamicRemoveButton.prototype, \"item\", void 0);\n SurveyQuestionMatrixDynamicRemoveButton = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], SurveyQuestionMatrixDynamicRemoveButton);\n return SurveyQuestionMatrixDynamicRemoveButton;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-matrix-remove-button\", SurveyQuestionMatrixDynamicRemoveButton);\n/* harmony default export */ __webpack_exports__[\"default\"] = (SurveyQuestionMatrixDynamicRemoveButton);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/popup/popup-container.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/popup/popup-container.vue?vue&type=script&lang=ts& ***!\n \\******************************************************************************************************************************************************************/\n/*! exports provided: PopupContainer, showModal, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PopupContainer\", function() { return PopupContainer; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"showModal\", function() { return showModal; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! survey-core */ \"./src/entries/core.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\n\nvar PopupContainer = /** @class */ (function (_super) {\n __extends(PopupContainer, _super);\n function PopupContainer() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n PopupContainer.prototype.getModel = function () {\n return this.model;\n };\n PopupContainer.prototype.clickInside = function (event) {\n event.stopPropagation();\n };\n PopupContainer.prototype.onUpdated = function () {\n if (!this.prevIsVisible && this.model.isVisible) {\n this.model.updateOnShowing();\n }\n this.prevIsVisible = this.model.isVisible;\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], PopupContainer.prototype, \"model\", void 0);\n PopupContainer = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], PopupContainer);\n return PopupContainer;\n}(_base__WEBPACK_IMPORTED_MODULE_3__[\"BaseVue\"]));\n\nfunction showModal(componentName, data, onApply, onCancel) {\n var popupModel = new survey_core__WEBPACK_IMPORTED_MODULE_2__[\"PopupModel\"](componentName, data, \"top\", \"left\", false, true, onCancel, onApply);\n var popupViewModel = new survey_core__WEBPACK_IMPORTED_MODULE_2__[\"PopupBaseViewModel\"](popupModel, undefined);\n popupViewModel.initializePopupContainer();\n var popup = new PopupContainer({\n el: popupViewModel.container.appendChild(document.createElement(\"div\")),\n propsData: { model: popupViewModel },\n });\n popupModel.onHide = function () {\n popup.$destroy();\n popupViewModel.destroyPopupContainer();\n };\n popupViewModel.model.isVisible = true;\n}\nsurvey_core__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].showModal = showModal;\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-popup-container\", PopupContainer);\n/* harmony default export */ __webpack_exports__[\"default\"] = (PopupContainer);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/popup/popup.vue?vue&type=script&lang=ts&\":\n/*!********************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/popup/popup.vue?vue&type=script&lang=ts& ***!\n \\********************************************************************************************************************************************************/\n/*! exports provided: Popup, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Popup\", function() { return Popup; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! survey-core */ \"./src/entries/core.ts\");\n/* harmony import */ var _popup_container_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./popup-container.vue */ \"./src/vue/components/popup/popup-container.vue\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\n\n\nvar Popup = /** @class */ (function (_super) {\n __extends(Popup, _super);\n function Popup() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Popup.prototype.getModel = function () {\n return this.model;\n };\n Popup.prototype.onMounted = function () {\n this.popupViewModel = new survey_core__WEBPACK_IMPORTED_MODULE_2__[\"PopupBaseViewModel\"](this.model, this.$el.parentElement);\n this.popupViewModel.initializePopupContainer();\n this.popupContainer = new _popup_container_vue__WEBPACK_IMPORTED_MODULE_3__[\"PopupContainer\"]({\n el: this.popupViewModel.container.appendChild(document.createElement(\"div\")),\n propsData: { model: this.popupViewModel },\n });\n };\n Popup.prototype.destroyed = function () {\n this.popupContainer.$destroy();\n this.popupViewModel.destroyPopupContainer();\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Popup.prototype, \"model\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Popup.prototype, \"targetElement\", void 0);\n Popup = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Popup);\n return Popup;\n}(_base__WEBPACK_IMPORTED_MODULE_4__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-popup\", Popup);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Popup);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/svg-icon/svg-icon.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/svg-icon/svg-icon.vue?vue&type=script&lang=ts& ***!\n \\**************************************************************************************************************************************************************/\n/*! exports provided: SvgIcon, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SvgIcon\", function() { return SvgIcon; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! survey-core */ \"./src/entries/core.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\n\nvar SvgIcon = /** @class */ (function (_super) {\n __extends(SvgIcon, _super);\n function SvgIcon() {\n return _super.call(this) || this;\n }\n SvgIcon.prototype.onSizePropertyChanged = function () {\n this.onUpdated();\n };\n SvgIcon.prototype.onWidthPropertyChanged = function () {\n this.onUpdated();\n };\n SvgIcon.prototype.onHeightPropertyChanged = function () {\n this.onUpdated();\n };\n SvgIcon.prototype.onIconNamePropertyChanged = function () {\n this.onUpdated();\n };\n SvgIcon.prototype.onUpdated = function () {\n Object(survey_core__WEBPACK_IMPORTED_MODULE_2__[\"createSvg\"])(this.size, this.width, this.height, this.iconName, this.svgIconElement);\n };\n SvgIcon.prototype.onMounted = function () {\n this.svgIconElement = this.$refs[\"svgIcon\"];\n this.onUpdated();\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], SvgIcon.prototype, \"size\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], SvgIcon.prototype, \"width\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], SvgIcon.prototype, \"height\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], SvgIcon.prototype, \"iconName\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Watch\"])(\"size\")\n ], SvgIcon.prototype, \"onSizePropertyChanged\", null);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Watch\"])(\"width\")\n ], SvgIcon.prototype, \"onWidthPropertyChanged\", null);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Watch\"])(\"height\")\n ], SvgIcon.prototype, \"onHeightPropertyChanged\", null);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Watch\"])(\"iconName\")\n ], SvgIcon.prototype, \"onIconNamePropertyChanged\", null);\n SvgIcon = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], SvgIcon);\n return SvgIcon;\n}(_base__WEBPACK_IMPORTED_MODULE_3__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-svg-icon\", SvgIcon);\n/* harmony default export */ __webpack_exports__[\"default\"] = (SvgIcon);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/title-actions/title-actions.vue?vue&type=script&lang=ts&\":\n/*!************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/title-actions/title-actions.vue?vue&type=script&lang=ts& ***!\n \\************************************************************************************************************************************************************************/\n/*! exports provided: TitleActions, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TitleActions\", function() { return TitleActions; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! survey-core */ \"./src/entries/core.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\nvar TitleActions = /** @class */ (function (_super) {\n __extends(TitleActions, _super);\n function TitleActions() {\n return _super.call(this) || this;\n }\n Object.defineProperty(TitleActions.prototype, \"toolbar\", {\n get: function () {\n return this.element.getTitleToolbar();\n },\n enumerable: false,\n configurable: true\n });\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], TitleActions.prototype, \"element\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], TitleActions.prototype, \"css\", void 0);\n TitleActions = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], TitleActions);\n return TitleActions;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nsurvey_core__WEBPACK_IMPORTED_MODULE_2__[\"RendererFactory\"].Instance.registerRenderer(\"element\", \"title-actions\", \"sv-title-actions\");\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-title-actions\", TitleActions);\n/* harmony default export */ __webpack_exports__[\"default\"] = (TitleActions);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/composite.vue?vue&type=script&lang=ts&\":\n/*!*******************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/composite.vue?vue&type=script&lang=ts& ***!\n \\*******************************************************************************************************************************************/\n/*! exports provided: Composite, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Composite\", function() { return Composite; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\nvar Composite = /** @class */ (function (_super) {\n __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: false,\n configurable: true\n });\n Composite = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Composite);\n return Composite;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-composite\", Composite);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Composite);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/custom.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/custom.vue?vue&type=script&lang=ts& ***!\n \\****************************************************************************************************************************************/\n/*! exports provided: Custom, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Custom\", function() { return Custom; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\nvar Custom = /** @class */ (function (_super) {\n __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: false,\n configurable: true\n });\n Custom.prototype.getComponentName = function (element) {\n if (element.customWidget) {\n return \"survey-customwidget\";\n }\n return \"survey-\" + element.getTemplate();\n };\n Custom = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Custom);\n return Custom;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-custom\", Custom);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Custom);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/customwidget.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/customwidget.vue?vue&type=script&lang=ts& ***!\n \\**********************************************************************************************************************************************/\n/*! exports provided: CustomWidget, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CustomWidget\", function() { return CustomWidget; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\nvar CustomWidget = /** @class */ (function (_super) {\n __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: false,\n configurable: true\n });\n Object.defineProperty(CustomWidget.prototype, \"hasHtml\", {\n get: function () {\n return this.question.customWidget.htmlTemplate ? true : false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(CustomWidget.prototype, \"customHtml\", {\n get: function () {\n return this.question.customWidget.htmlTemplate;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(CustomWidget.prototype, \"hasVueComponent\", {\n get: function () {\n var options = vue__WEBPACK_IMPORTED_MODULE_0___default.a[\"options\"];\n if (!options)\n return false;\n return (options.components && options.components[this.question.customWidget.name]);\n },\n enumerable: false,\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: false,\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 __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], CustomWidget.prototype, \"css\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], CustomWidget.prototype, \"question\", void 0);\n CustomWidget = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], CustomWidget);\n return CustomWidget;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-customwidget\", CustomWidget);\n/* harmony default export */ __webpack_exports__[\"default\"] = (CustomWidget);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/dropdown.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/dropdown.vue?vue&type=script&lang=ts& ***!\n \\******************************************************************************************************************************************/\n/*! exports provided: Dropdown, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Dropdown\", function() { return Dropdown; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\nvar Dropdown = /** @class */ (function (_super) {\n __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: false,\n configurable: true\n });\n Dropdown = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Dropdown);\n return Dropdown;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-dropdown\", Dropdown);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Dropdown);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/element.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/element.vue?vue&type=script&lang=ts& ***!\n \\*****************************************************************************************************************************************/\n/*! exports provided: SurveyElementVue, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyElementVue\", function() { return SurveyElementVue; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\nvar SurveyElementVue = /** @class */ (function (_super) {\n __extends(SurveyElementVue, _super);\n function SurveyElementVue() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n SurveyElementVue.prototype.getComponentName = function (element) {\n if (element.customWidget)\n return \"survey-customwidget\";\n if (element.getType() === \"panel\" || element.isDefaultRendering()) {\n return \"survey-\" + element.getTemplate();\n }\n return element.getComponentName();\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: false,\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: false,\n configurable: true\n });\n SurveyElementVue.prototype.mounted = function () {\n if (!this.element.isPanel) {\n this.element.afterRender(this.$el);\n }\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], SurveyElementVue.prototype, \"css\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], SurveyElementVue.prototype, \"survey\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], SurveyElementVue.prototype, \"element\", void 0);\n SurveyElementVue = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], SurveyElementVue);\n return SurveyElementVue;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-element\", SurveyElementVue);\n/* harmony default export */ __webpack_exports__[\"default\"] = (SurveyElementVue);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/elementheader.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/elementheader.vue?vue&type=script&lang=ts& ***!\n \\***********************************************************************************************************************************************/\n/*! exports provided: ElementHeader, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ElementHeader\", function() { return ElementHeader; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! survey-core */ \"./src/entries/core.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\nvar ElementHeader = /** @class */ (function (_super) {\n __extends(ElementHeader, _super);\n function ElementHeader() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ElementHeader.prototype.beforeDestroy = function () {\n this.element.stateChangedCallback = null;\n };\n ElementHeader.prototype.getTitleClass = function (element) {\n return element.cssTitle;\n };\n ElementHeader.prototype.getHeaderClass = function (element) {\n return element.cssHeader;\n };\n ElementHeader.prototype.keyup = function (evt) {\n Object(survey_core__WEBPACK_IMPORTED_MODULE_2__[\"doKey2Click\"])(evt);\n };\n ElementHeader.prototype.clickTitleFunction = function () {\n if (typeof this.element.clickTitleFunction === \"function\") {\n this.element.clickTitleFunction();\n }\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], ElementHeader.prototype, \"element\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], ElementHeader.prototype, \"css\", void 0);\n ElementHeader = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], ElementHeader);\n return ElementHeader;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-element-header\", ElementHeader);\n/* harmony default export */ __webpack_exports__[\"default\"] = (ElementHeader);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/empty.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/empty.vue?vue&type=script&lang=ts& ***!\n \\***************************************************************************************************************************************/\n/*! exports provided: Empty, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Empty\", function() { return Empty; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\nvar Empty = /** @class */ (function (_super) {\n __extends(Empty, _super);\n function Empty() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Empty = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Empty);\n return Empty;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-empty\", Empty);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Empty);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/errors.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/errors.vue?vue&type=script&lang=ts& ***!\n \\****************************************************************************************************************************************/\n/*! exports provided: Errors, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Errors\", function() { return Errors; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\nvar Errors = /** @class */ (function (_super) {\n __extends(Errors, _super);\n function Errors() {\n return _super !== null && _super.apply(this, arguments) || this;\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: false,\n configurable: true\n });\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Errors.prototype, \"question\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Errors.prototype, \"location\", void 0);\n Errors = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Errors);\n return Errors;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-errors\", Errors);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Errors);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/expression.vue?vue&type=script&lang=ts&\":\n/*!********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/expression.vue?vue&type=script&lang=ts& ***!\n \\********************************************************************************************************************************************/\n/*! exports provided: Expression, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Expression\", function() { return Expression; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\nvar Expression = /** @class */ (function (_super) {\n __extends(Expression, _super);\n function Expression() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Expression = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Expression);\n return Expression;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-expression\", Expression);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Expression);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/file.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/file.vue?vue&type=script&lang=ts& ***!\n \\**************************************************************************************************************************************/\n/*! exports provided: File, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"File\", function() { return File; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! survey-core */ \"./src/entries/core.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\n\nvar File = /** @class */ (function (_super) {\n __extends(File, _super);\n function File() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.onDragOver = function (event) {\n if (_this.question.isReadOnly) {\n event.returnValue = false;\n return false;\n }\n event.dataTransfer.dropEffect = \"copy\";\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 = Object(survey_core__WEBPACK_IMPORTED_MODULE_3__[\"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 = Object(survey_core__WEBPACK_IMPORTED_MODULE_3__[\"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 (Object(survey_core__WEBPACK_IMPORTED_MODULE_3__[\"detectIEOrEdge\"])()) {\n event.preventDefault();\n Object(survey_core__WEBPACK_IMPORTED_MODULE_3__[\"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 = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], File);\n return File;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-file\", File);\n/* harmony default export */ __webpack_exports__[\"default\"] = (File);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/flowpanel.vue?vue&type=script&lang=ts&\":\n/*!*******************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/flowpanel.vue?vue&type=script&lang=ts& ***!\n \\*******************************************************************************************************************************************/\n/*! exports provided: FlowPanel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FlowPanel\", function() { return FlowPanel; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\nvar FlowPanel = /** @class */ (function (_super) {\n __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: false,\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: false,\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: false,\n configurable: true\n });\n Object.defineProperty(FlowPanel.prototype, \"rows\", {\n get: function () {\n return this.question.rows;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FlowPanel.prototype, \"hasTitle\", {\n get: function () {\n return this.question.title.length > 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FlowPanel.prototype, \"survey\", {\n get: function () {\n return this.question.survey;\n },\n enumerable: false,\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: false,\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: false,\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 __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], FlowPanel.prototype, \"question\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], FlowPanel.prototype, \"isEditMode\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], FlowPanel.prototype, \"css\", void 0);\n FlowPanel = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], FlowPanel);\n return FlowPanel;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-flowpanel\", FlowPanel);\n/* harmony default export */ __webpack_exports__[\"default\"] = (FlowPanel);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/flowpanelelement.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/flowpanelelement.vue?vue&type=script&lang=ts& ***!\n \\**************************************************************************************************************************************************/\n/*! exports provided: FlowPanelElement, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FlowPanelElement\", function() { return FlowPanelElement; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\nvar FlowPanelElement = /** @class */ (function (_super) {\n __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: false,\n configurable: true\n });\n Object.defineProperty(FlowPanelElement.prototype, \"survey\", {\n get: function () {\n return this.panel.survey;\n },\n enumerable: false,\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.getComponentName = 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 __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], FlowPanelElement.prototype, \"node\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], FlowPanelElement.prototype, \"panel\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], FlowPanelElement.prototype, \"css\", void 0);\n FlowPanelElement = FlowPanelElement_1 = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], FlowPanelElement);\n return FlowPanelElement;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-flowpanelelement\", FlowPanelElement);\n/* harmony default export */ __webpack_exports__[\"default\"] = (FlowPanelElement);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/header.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/header.vue?vue&type=script&lang=ts& ***!\n \\****************************************************************************************************************************************/\n/*! exports provided: SurveyHeader, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyHeader\", function() { return SurveyHeader; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\nvar SurveyHeader = /** @class */ (function (_super) {\n __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 __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], SurveyHeader.prototype, \"survey\", void 0);\n SurveyHeader = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], SurveyHeader);\n return SurveyHeader;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-header\", SurveyHeader);\n/* harmony default export */ __webpack_exports__[\"default\"] = (SurveyHeader);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/html.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/html.vue?vue&type=script&lang=ts& ***!\n \\**************************************************************************************************************************************/\n/*! exports provided: Html, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Html\", function() { return Html; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\nvar Html = /** @class */ (function (_super) {\n __extends(Html, _super);\n function Html() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Html.prototype, \"question\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Html.prototype, \"css\", void 0);\n Html = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Html);\n return Html;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-html\", Html);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Html);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/image.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/image.vue?vue&type=script&lang=ts& ***!\n \\***************************************************************************************************************************************/\n/*! exports provided: QuestionImage, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionImage\", function() { return QuestionImage; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\nvar QuestionImage = /** @class */ (function (_super) {\n __extends(QuestionImage, _super);\n function QuestionImage() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], QuestionImage.prototype, \"question\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], QuestionImage.prototype, \"css\", void 0);\n QuestionImage = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], QuestionImage);\n return QuestionImage;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-image\", QuestionImage);\n/* harmony default export */ __webpack_exports__[\"default\"] = (QuestionImage);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/imagepicker.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/imagepicker.vue?vue&type=script&lang=ts& ***!\n \\*********************************************************************************************************************************************/\n/*! exports provided: ImagePicker, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ImagePicker\", function() { return ImagePicker; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\nvar ImagePicker = /** @class */ (function (_super) {\n __extends(ImagePicker, _super);\n function ImagePicker() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ImagePicker.prototype.getItemClass = function (item) {\n return this.question.getItemClass(item);\n };\n ImagePicker = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], ImagePicker);\n return ImagePicker;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-imagepicker\", ImagePicker);\n/* harmony default export */ __webpack_exports__[\"default\"] = (ImagePicker);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrix.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/matrix.vue?vue&type=script&lang=ts& ***!\n \\****************************************************************************************************************************************/\n/*! exports provided: Matrix, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Matrix\", function() { return Matrix; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\nvar Matrix = /** @class */ (function (_super) {\n __extends(Matrix, _super);\n function Matrix() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Matrix.prototype.cellClick = function (row, column) {\n if (this.question.isInputReadOnly)\n return;\n row.value = column.value;\n };\n Matrix = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Matrix);\n return Matrix;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-matrix\", Matrix);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Matrix);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixcell.vue?vue&type=script&lang=ts&\":\n/*!********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/matrixcell.vue?vue&type=script&lang=ts& ***!\n \\********************************************************************************************************************************************/\n/*! exports provided: MatrixCell, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MatrixCell\", function() { return MatrixCell; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\nvar MatrixCell = /** @class */ (function (_super) {\n __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.getComponentName = 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: false,\n configurable: true\n });\n Object.defineProperty(MatrixCell.prototype, \"hasErrorsOnBottom\", {\n get: function () {\n return this.cell.showErrorOnBottom;\n },\n enumerable: false,\n configurable: true\n });\n MatrixCell.prototype.getHeaders = function () {\n return this.cell.headers;\n };\n MatrixCell.prototype.getCellStyle = function () {\n if (!!this.cell.width || !!this.cell.minWidth)\n return { width: this.cell.width, minWidth: this.cell.minWidth };\n return null;\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.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 __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], MatrixCell.prototype, \"question\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], MatrixCell.prototype, \"cell\", void 0);\n MatrixCell = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], MatrixCell);\n return MatrixCell;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-matrixcell\", MatrixCell);\n/* harmony default export */ __webpack_exports__[\"default\"] = (MatrixCell);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixdropdown.vue?vue&type=script&lang=ts&\":\n/*!************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/matrixdropdown.vue?vue&type=script&lang=ts& ***!\n \\************************************************************************************************************************************************/\n/*! exports provided: MatrixDropdown, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdown\", function() { return MatrixDropdown; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\nvar MatrixDropdown = /** @class */ (function (_super) {\n __extends(MatrixDropdown, _super);\n function MatrixDropdown() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n MatrixDropdown = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], MatrixDropdown);\n return MatrixDropdown;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-matrixdropdown\", MatrixDropdown);\n/* harmony default export */ __webpack_exports__[\"default\"] = (MatrixDropdown);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixdynamic.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/matrixdynamic.vue?vue&type=script&lang=ts& ***!\n \\***********************************************************************************************************************************************/\n/*! exports provided: MatrixDynamic, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MatrixDynamic\", function() { return MatrixDynamic; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\nvar MatrixDynamic = /** @class */ (function (_super) {\n __extends(MatrixDynamic, _super);\n function MatrixDynamic() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n MatrixDynamic.prototype.addRowClick = function () {\n this.question.addRowUI();\n };\n MatrixDynamic = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], MatrixDynamic);\n return MatrixDynamic;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-matrixdynamic\", MatrixDynamic);\n/* harmony default export */ __webpack_exports__[\"default\"] = (MatrixDynamic);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixtable.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/matrixtable.vue?vue&type=script&lang=ts& ***!\n \\*********************************************************************************************************************************************/\n/*! exports provided: MatrixTable, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MatrixTable\", function() { return MatrixTable; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\nvar MatrixTable = /** @class */ (function (_super) {\n __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: false,\n configurable: true\n });\n MatrixTable.prototype.getModel = function () {\n return this.question.renderedTable;\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], MatrixTable.prototype, \"question\", void 0);\n MatrixTable = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], MatrixTable);\n return MatrixTable;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-matrixtable\", MatrixTable);\n/* harmony default export */ __webpack_exports__[\"default\"] = (MatrixTable);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/multipletext.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/multipletext.vue?vue&type=script&lang=ts& ***!\n \\**********************************************************************************************************************************************/\n/*! exports provided: MultipleText, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MultipleText\", function() { return MultipleText; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\nvar MultipleText = /** @class */ (function (_super) {\n __extends(MultipleText, _super);\n function MultipleText() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n MultipleText.prototype.getComponentName = 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: false,\n configurable: true\n });\n Object.defineProperty(MultipleText.prototype, \"hasErrorsOnBottom\", {\n get: function () {\n return this.question.survey.questionErrorLocation === \"bottom\";\n },\n enumerable: false,\n configurable: true\n });\n MultipleText = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], MultipleText);\n return MultipleText;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-multipletext\", MultipleText);\n/* harmony default export */ __webpack_exports__[\"default\"] = (MultipleText);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/navigation.vue?vue&type=script&lang=ts&\":\n/*!********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/navigation.vue?vue&type=script&lang=ts& ***!\n \\********************************************************************************************************************************************/\n/*! exports provided: Navigation, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Navigation\", function() { return Navigation; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\nvar Navigation = /** @class */ (function (_super) {\n __extends(Navigation, _super);\n function Navigation() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.showPrevBtn = true;\n _this.showNextBtn = true;\n _this.showCompleteBtn = true;\n return _this;\n }\n Navigation.prototype.getModel = function () {\n return this.survey;\n };\n Navigation.prototype.onPropertyChanged = function (value, oldValue) {\n this.onCreated();\n this.updateShowButtons();\n };\n Navigation.prototype.onMounted = function () {\n var _this = this;\n this.survey.onCurrentPageChanged.add(function (sender, options) {\n _this.updateShowButtons();\n });\n this.updateShowButtons();\n };\n Navigation.prototype.updateShowButtons = function () {\n this.showPrevBtn = !this.survey.isFirstPage && this.survey.isShowPrevButton;\n this.showNextBtn = !this.survey.isLastPage;\n this.showCompleteBtn = this.survey.isLastPage;\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 __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Navigation.prototype, \"survey\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Navigation.prototype, \"css\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Watch\"])(\"survey\")\n ], Navigation.prototype, \"onPropertyChanged\", null);\n Navigation = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Navigation);\n return Navigation;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-navigation\", Navigation);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Navigation);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/otherChoice.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/otherChoice.vue?vue&type=script&lang=ts& ***!\n \\*********************************************************************************************************************************************/\n/*! exports provided: OtherChoice, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"OtherChoice\", function() { return OtherChoice; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\nvar OtherChoice = /** @class */ (function (_super) {\n __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 __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], OtherChoice.prototype, \"question\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], OtherChoice.prototype, \"commentClass\", void 0);\n OtherChoice = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], OtherChoice);\n return OtherChoice;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-other-choice\", OtherChoice);\n/* harmony default export */ __webpack_exports__[\"default\"] = (OtherChoice);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/page.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/page.vue?vue&type=script&lang=ts& ***!\n \\**************************************************************************************************************************************/\n/*! exports provided: Page, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Page\", function() { return Page; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\nvar Page = /** @class */ (function (_super) {\n __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.onPagePropertyChanged = function (value, oldValue) {\n this.isCurrentPageChanged = true;\n };\n Page.prototype.getModel = function () {\n return this.page;\n };\n Page.prototype.onMounted = function () {\n if (this.survey) {\n this.survey.afterRenderPage(this.$el);\n }\n };\n Page.prototype.onUpdated = 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: false,\n configurable: true\n });\n Object.defineProperty(Page.prototype, \"showDescription\", {\n get: function () {\n return this.page._showDescription;\n },\n enumerable: false,\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: false,\n configurable: true\n });\n Object.defineProperty(Page.prototype, \"rows\", {\n get: function () {\n return this.page.rows;\n },\n enumerable: false,\n configurable: true\n });\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Page.prototype, \"survey\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Page.prototype, \"page\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Page.prototype, \"css\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Watch\"])(\"page\")\n ], Page.prototype, \"onPagePropertyChanged\", null);\n Page = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Page);\n return Page;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-page\", Page);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Page);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/panel.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/panel.vue?vue&type=script&lang=ts& ***!\n \\***************************************************************************************************************************************/\n/*! exports provided: Panel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Panel\", function() { return Panel; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! survey-core */ \"./src/entries/core.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\n\nvar Panel = /** @class */ (function (_super) {\n __extends(Panel, _super);\n function Panel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.isCollapsed = false;\n return _this;\n }\n Panel.prototype.getModel = function () {\n return this.question;\n };\n Panel.prototype.onMounted = function () {\n var _this = this;\n if (this.question.survey) {\n this.question.survey.afterRenderPanel(this.question, this.$el);\n }\n this.isCollapsed = this.question.isCollapsed;\n this.question.stateChangedCallback = function () {\n _this.isCollapsed = _this.question.isCollapsed;\n };\n };\n Panel.prototype.beforeDestroy = function () {\n this.question.stateChangedCallback = null;\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: false,\n configurable: true\n });\n Object.defineProperty(Panel.prototype, \"showIcon\", {\n get: function () {\n return this.question.isExpanded || this.question.isCollapsed;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Panel.prototype, \"rows\", {\n get: function () {\n return this.question.rows;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Panel.prototype, \"hasTitle\", {\n get: function () {\n return this.question.title.length > 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Panel.prototype, \"survey\", {\n get: function () {\n return this.question.survey;\n },\n enumerable: false,\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: false,\n configurable: true\n });\n Panel.prototype.keyup = function (evt) {\n Object(survey_core__WEBPACK_IMPORTED_MODULE_2__[\"doKey2Click\"])(evt);\n };\n Panel.prototype.cancelPreview = function () {\n this.question.cancelPreview();\n };\n Object.defineProperty(Panel.prototype, \"requiredTextCss\", {\n get: function () {\n return (this.question.cssClasses.requiredText ||\n this.question.cssClasses.panel.requiredText);\n },\n enumerable: false,\n configurable: true\n });\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Panel.prototype, \"question\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Panel.prototype, \"isEditMode\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Panel.prototype, \"css\", void 0);\n Panel = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Panel);\n return Panel;\n}(_base__WEBPACK_IMPORTED_MODULE_3__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-panel\", Panel);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Panel);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamic.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/paneldynamic.vue?vue&type=script&lang=ts& ***!\n \\**********************************************************************************************************************************************/\n/*! exports provided: PanelDynamic, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamic\", function() { return PanelDynamic; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\nvar PanelDynamic = /** @class */ (function (_super) {\n __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: false,\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 = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], PanelDynamic);\n return PanelDynamic;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-paneldynamic\", PanelDynamic);\n/* harmony default export */ __webpack_exports__[\"default\"] = (PanelDynamic);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamicprogress.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/paneldynamicprogress.vue?vue&type=script&lang=ts& ***!\n \\******************************************************************************************************************************************************/\n/*! exports provided: PanelDynamicProgress, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamicProgress\", function() { return PanelDynamicProgress; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\nvar PanelDynamicProgress = /** @class */ (function (_super) {\n __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\n : this.question.cssClasses.progressBottom;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelDynamicProgress.prototype, \"rangeMax\", {\n get: function () {\n return this.question.panelCount - 1;\n },\n enumerable: false,\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: false,\n configurable: true\n });\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], PanelDynamicProgress.prototype, \"question\", void 0);\n PanelDynamicProgress = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], PanelDynamicProgress);\n return PanelDynamicProgress;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-paneldynamicprogress\", PanelDynamicProgress);\n/* harmony default export */ __webpack_exports__[\"default\"] = (PanelDynamicProgress);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamicremove.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/paneldynamicremove.vue?vue&type=script&lang=ts& ***!\n \\****************************************************************************************************************************************************/\n/*! exports provided: PanelDynamicRemove, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamicRemove\", function() { return PanelDynamicRemove; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\nvar PanelDynamicRemove = /** @class */ (function (_super) {\n __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 if (!this.question.isInputReadOnly) {\n this.question.removePanelUI(panel);\n }\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: false,\n configurable: true\n });\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], PanelDynamicRemove.prototype, \"question\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], PanelDynamicRemove.prototype, \"panel\", void 0);\n PanelDynamicRemove = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], PanelDynamicRemove);\n return PanelDynamicRemove;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-paneldynamicremove\", PanelDynamicRemove);\n/* harmony default export */ __webpack_exports__[\"default\"] = (PanelDynamicRemove);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/progress.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/progress.vue?vue&type=script&lang=ts& ***!\n \\******************************************************************************************************************************************/\n/*! exports provided: Progress, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Progress\", function() { return Progress; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\nvar Progress = /** @class */ (function (_super) {\n __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.progressValue + \"%\";\n },\n enumerable: false,\n configurable: true\n });\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Progress.prototype, \"survey\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Progress.prototype, \"css\", void 0);\n Progress = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Progress);\n return Progress;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-progress-pages\", Progress);\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-progress-questions\", Progress);\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-progress-correctQuestions\", Progress);\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-progress-requiredQuestions\", Progress);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Progress);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/progressButtons.vue?vue&type=script&lang=ts&\":\n/*!*************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/progressButtons.vue?vue&type=script&lang=ts& ***!\n \\*************************************************************************************************************************************************/\n/*! exports provided: ProgressButtons, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ProgressButtons\", function() { return ProgressButtons; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! survey-core */ \"./src/entries/core.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\nvar ProgressButtons = /** @class */ (function (_super) {\n __extends(ProgressButtons, _super);\n function ProgressButtons() {\n var _this = _super.call(this) || this;\n _this.hasScroller = false;\n _this.updateScroller = undefined;\n _this.progressButtonsModel = new survey_core__WEBPACK_IMPORTED_MODULE_2__[\"SurveyProgressButtonsModel\"](_this.survey);\n return _this;\n }\n ProgressButtons.prototype.mounted = function () {\n var _this = this;\n var listContainerElement = this.$refs[\"progressButtonsListContainer\"];\n this.updateScroller = setInterval(function () {\n _this.hasScroller =\n listContainerElement.scrollWidth > listContainerElement.offsetWidth;\n }, 100);\n };\n ProgressButtons.prototype.isListElementClickable = function (index) {\n return this.progressButtonsModel.isListElementClickable(index);\n };\n ProgressButtons.prototype.getListElementCss = function (index) {\n return this.progressButtonsModel.getListElementCss(index);\n };\n ProgressButtons.prototype.clickListElement = function (index) {\n this.progressButtonsModel.clickListElement(index);\n };\n ProgressButtons.prototype.getScrollButtonCss = function (hasScroller, isLeftScroll) {\n var scrollCss = isLeftScroll\n ? this.css.progressButtonsImageButtonLeft\n : this.css.progressButtonsImageButtonRight;\n if (!hasScroller)\n scrollCss += \" \" + this.css.progressButtonsImageButtonHidden;\n return scrollCss;\n };\n ProgressButtons.prototype.clickScrollButton = function (isLeftScroll) {\n var listContainerElement = this.$refs[\"progressButtonsListContainer\"];\n listContainerElement.scrollLeft += (isLeftScroll ? -1 : 1) * 70;\n };\n ProgressButtons.prototype.beforeDestroy = function () {\n if (typeof this.updateScroller !== \"undefined\") {\n clearInterval(this.updateScroller);\n this.updateScroller = undefined;\n }\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], ProgressButtons.prototype, \"survey\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], ProgressButtons.prototype, \"css\", void 0);\n ProgressButtons = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], ProgressButtons);\n return ProgressButtons;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-progress-buttons\", ProgressButtons);\n/* harmony default export */ __webpack_exports__[\"default\"] = (ProgressButtons);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/radiogroup.vue?vue&type=script&lang=ts&\":\n/*!********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/radiogroup.vue?vue&type=script&lang=ts& ***!\n \\********************************************************************************************************************************************/\n/*! exports provided: Radiogroup, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Radiogroup\", function() { return Radiogroup; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\nvar Radiogroup = /** @class */ (function (_super) {\n __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: false,\n configurable: true\n });\n Radiogroup.prototype.getItemClass = function (item) {\n return this.question.getItemClass(item);\n };\n Radiogroup = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Radiogroup);\n return Radiogroup;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-radiogroup\", Radiogroup);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Radiogroup);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/radiogroupitem.vue?vue&type=script&lang=ts&\":\n/*!************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/radiogroupitem.vue?vue&type=script&lang=ts& ***!\n \\************************************************************************************************************************************************/\n/*! exports provided: RadiogroupItem, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RadiogroupItem\", function() { return RadiogroupItem; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\nvar RadiogroupItem = /** @class */ (function (_super) {\n __extends(RadiogroupItem, _super);\n function RadiogroupItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n RadiogroupItem.prototype.getModel = function () {\n return this.item;\n };\n RadiogroupItem.prototype.getLabelClass = function (item) {\n return this.question.getLabelClass(item);\n };\n RadiogroupItem.prototype.getControlLabelClass = function (item) {\n return this.question.getControlLabelClass(item);\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], RadiogroupItem.prototype, \"question\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], RadiogroupItem.prototype, \"item\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], RadiogroupItem.prototype, \"index\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], RadiogroupItem.prototype, \"hideLabel\", void 0);\n RadiogroupItem = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], RadiogroupItem);\n return RadiogroupItem;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-radiogroup-item\", RadiogroupItem);\n/* harmony default export */ __webpack_exports__[\"default\"] = (RadiogroupItem);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/ranking/ranking-item.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/ranking/ranking-item.vue?vue&type=script&lang=ts& ***!\n \\******************************************************************************************************************************************************/\n/*! exports provided: RankingItem, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RankingItem\", function() { return RankingItem; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\nvar RankingItem = /** @class */ (function (_super) {\n __extends(RankingItem, _super);\n function RankingItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], RankingItem.prototype, \"index\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], RankingItem.prototype, \"text\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], RankingItem.prototype, \"handleKeydown\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], RankingItem.prototype, \"cssClasses\", void 0);\n RankingItem = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], RankingItem);\n return RankingItem;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-ranking-item\", RankingItem);\n/* harmony default export */ __webpack_exports__[\"default\"] = (RankingItem);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/ranking/ranking.vue?vue&type=script&lang=ts&\":\n/*!*************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/ranking/ranking.vue?vue&type=script&lang=ts& ***!\n \\*************************************************************************************************************************************************/\n/*! exports provided: Ranking, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Ranking\", function() { return Ranking; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\nvar Ranking = /** @class */ (function (_super) {\n __extends(Ranking, _super);\n function Ranking() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Ranking = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Ranking);\n return Ranking;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-ranking\", Ranking);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Ranking);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/rating.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/rating.vue?vue&type=script&lang=ts& ***!\n \\****************************************************************************************************************************************/\n/*! exports provided: Rating, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Rating\", function() { return Rating; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\nvar Rating = /** @class */ (function (_super) {\n __extends(Rating, _super);\n function Rating() {\n return _super !== null && _super.apply(this, arguments) || this;\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 = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Rating);\n return Rating;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-rating\", Rating);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Rating);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/row.vue?vue&type=script&lang=ts&\":\n/*!*************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/row.vue?vue&type=script&lang=ts& ***!\n \\*************************************************************************************************************************************/\n/*! exports provided: Row, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Row\", function() { return Row; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\nvar Row = /** @class */ (function (_super) {\n __extends(Row, _super);\n function Row() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Row.prototype.getModel = function () {\n return this.row;\n };\n Row.prototype.onMounted = function () {\n var _this = this;\n if (!!this.row) {\n if (!this.row.isNeedRender) {\n var rowContainerDiv = this.$el;\n setTimeout(function () {\n _this.row.startLazyRendering(rowContainerDiv);\n }, 10);\n }\n }\n };\n Row.prototype.beforeDestroy = function () {\n if (!!this.row) {\n this.row.isNeedRender = !this.row.isLazyRendering;\n }\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Row.prototype, \"row\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Row.prototype, \"css\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Row.prototype, \"survey\", void 0);\n Row = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Row);\n return Row;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-row\", Row);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Row);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/signaturepad.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/signaturepad.vue?vue&type=script&lang=ts& ***!\n \\**********************************************************************************************************************************************/\n/*! exports provided: SignaturePad, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SignaturePad\", function() { return SignaturePad; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\nvar SignaturePad = /** @class */ (function (_super) {\n __extends(SignaturePad, _super);\n function SignaturePad() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n SignaturePad = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], SignaturePad);\n return SignaturePad;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-signaturepad\", SignaturePad);\n/* harmony default export */ __webpack_exports__[\"default\"] = (SignaturePad);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string-editor.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/string-editor.vue?vue&type=script&lang=ts& ***!\n \\***********************************************************************************************************************************************/\n/*! exports provided: SurveyStringEditor, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyStringEditor\", function() { return SurveyStringEditor; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! survey-core */ \"./src/entries/core.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\nvar SurveyStringEditor = /** @class */ (function (_super) {\n __extends(SurveyStringEditor, _super);\n function SurveyStringEditor() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.onInput = function (event) {\n _this.locString.text = event.target.innerText;\n };\n _this.onClick = function (event) {\n event.preventDefault();\n event.stopPropagation();\n };\n return _this;\n }\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], SurveyStringEditor.prototype, \"locString\", void 0);\n SurveyStringEditor = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], SurveyStringEditor);\n return SurveyStringEditor;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(survey_core__WEBPACK_IMPORTED_MODULE_2__[\"LocalizableString\"].editableRenderer, SurveyStringEditor);\n/* harmony default export */ __webpack_exports__[\"default\"] = (SurveyStringEditor);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string-viewer.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/string-viewer.vue?vue&type=script&lang=ts& ***!\n \\***********************************************************************************************************************************************/\n/*! exports provided: SurveyStringViewer, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyStringViewer\", function() { return SurveyStringViewer; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! survey-core */ \"./src/entries/core.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\nvar SurveyStringViewer = /** @class */ (function (_super) {\n __extends(SurveyStringViewer, _super);\n function SurveyStringViewer() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], SurveyStringViewer.prototype, \"locString\", void 0);\n SurveyStringViewer = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], SurveyStringViewer);\n return SurveyStringViewer;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(survey_core__WEBPACK_IMPORTED_MODULE_2__[\"LocalizableString\"].defaultRenderer, SurveyStringViewer);\n/* harmony default export */ __webpack_exports__[\"default\"] = (SurveyStringViewer);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/string.vue?vue&type=script&lang=ts& ***!\n \\****************************************************************************************************************************************/\n/*! exports provided: SurveyString, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyString\", function() { return SurveyString; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\nvar SurveyString = /** @class */ (function (_super) {\n __extends(SurveyString, _super);\n function SurveyString() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], SurveyString.prototype, \"locString\", void 0);\n SurveyString = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], SurveyString);\n return SurveyString;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-string\", SurveyString);\n/* harmony default export */ __webpack_exports__[\"default\"] = (SurveyString);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/survey.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/survey.vue?vue&type=script&lang=ts& ***!\n \\****************************************************************************************************************************************/\n/*! exports provided: Survey, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Survey\", function() { return Survey; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! survey-core */ \"./src/entries/core.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\n\n\nvar Survey = /** @class */ (function (_super) {\n __extends(Survey, _super);\n function Survey() {\n var _this = _super.call(this) || this;\n _this.currentPageId = 1;\n return _this;\n }\n Object.defineProperty(Survey.prototype, \"pageId\", {\n get: function () {\n return \"page\" + this.currentPageId.toString();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Survey.prototype, \"navId\", {\n get: function () {\n return \"nav\" + this.currentPageId.toString();\n },\n enumerable: false,\n configurable: true\n });\n Survey.prototype.forceUpdate = function () {\n this.$forceUpdate();\n this.currentPageId++;\n };\n Survey.prototype.getModel = function () {\n return this.survey;\n };\n Survey.prototype.onPropertyChanged = function (value, oldValue) {\n this.onCreated();\n this.surveyOnMounted();\n };\n Survey.prototype.onMounted = function () {\n this.surveyOnMounted();\n };\n Survey.prototype.surveyOnMounted = function () {\n var _this = this;\n if (!this.survey)\n return;\n vue__WEBPACK_IMPORTED_MODULE_0___default.a.set(this.survey, \"currentPage\", this.survey.currentPage);\n this.survey.onCurrentPageChanged.add(function (sender, options) {\n _this.currentPageId++;\n });\n this.survey.onPageVisibleChanged.add(function (sender, options) {\n _this.currentPageId++;\n });\n var el = this.$el;\n if (el)\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: false,\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: false,\n configurable: true\n });\n Object.defineProperty(Survey.prototype, \"css\", {\n get: function () {\n return this.survey.css;\n },\n enumerable: false,\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 __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Survey.prototype, \"survey\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Watch\"])(\"survey\")\n ], Survey.prototype, \"onPropertyChanged\", null);\n Survey = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Survey);\n return Survey;\n}(_base__WEBPACK_IMPORTED_MODULE_3__[\"BaseVue\"]));\n\n// TODO: make this functionality available via surveyCss in all examples\nObject.defineProperty(Survey, \"cssType\", {\n get: function () {\n return survey_core__WEBPACK_IMPORTED_MODULE_2__[\"surveyCss\"].currentType;\n },\n set: function (newType) {\n survey_core__WEBPACK_IMPORTED_MODULE_2__[\"StylesManager\"].applyTheme(newType);\n },\n enumerable: true,\n configurable: false,\n});\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey\", Survey);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Survey);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/text.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/text.vue?vue&type=script&lang=ts& ***!\n \\**************************************************************************************************************************************/\n/*! exports provided: QuestionText, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionText\", function() { return QuestionText; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\nvar QuestionText = /** @class */ (function (_super) {\n __extends(QuestionText, _super);\n function QuestionText() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n QuestionText.prototype.change = function (event) {\n this.question.value = event.target.value;\n };\n QuestionText.prototype.keyup = function (event) {\n if (!this.question.isInputTextUpdate)\n return;\n this.question.value = event.target.value;\n };\n Object.defineProperty(QuestionText.prototype, \"inputStyle\", {\n get: function () {\n var style = {};\n if (!!this.question.inputWidth) {\n style.width = this.question.inputWidth;\n }\n return style;\n },\n enumerable: false,\n configurable: true\n });\n QuestionText = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], QuestionText);\n return QuestionText;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-text\", QuestionText);\n/* harmony default export */ __webpack_exports__[\"default\"] = (QuestionText);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/timerpanel.vue?vue&type=script&lang=ts&\":\n/*!********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/timerpanel.vue?vue&type=script&lang=ts& ***!\n \\********************************************************************************************************************************************/\n/*! exports provided: TimerPanel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TimerPanel\", function() { return TimerPanel; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\nvar TimerPanel = /** @class */ (function (_super) {\n __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: false,\n configurable: true\n });\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], TimerPanel.prototype, \"survey\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], TimerPanel.prototype, \"css\", void 0);\n TimerPanel = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], TimerPanel);\n return TimerPanel;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-timerpanel\", TimerPanel);\n/* harmony default export */ __webpack_exports__[\"default\"] = (TimerPanel);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/titlecontent.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/titlecontent.vue?vue&type=script&lang=ts& ***!\n \\**********************************************************************************************************************************************/\n/*! exports provided: TitleContent, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TitleContent\", function() { return TitleContent; });\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_1__);\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\nvar TitleContent = /** @class */ (function (_super) {\n __extends(TitleContent, _super);\n function TitleContent() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Prop\"])()\n ], TitleContent.prototype, \"element\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Prop\"])()\n ], TitleContent.prototype, \"css\", void 0);\n TitleContent = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]\n ], TitleContent);\n return TitleContent;\n}(vue__WEBPACK_IMPORTED_MODULE_1___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_1___default.a.component(\"survey-question-title-content\", TitleContent);\n/* harmony default export */ __webpack_exports__[\"default\"] = (TitleContent);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/window.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/window.vue?vue&type=script&lang=ts& ***!\n \\****************************************************************************************************************************************/\n/*! exports provided: Window, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Window\", function() { return Window; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _surveyModel__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./surveyModel */ \"./src/vue/surveyModel.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\nvar Window = /** @class */ (function (_super) {\n __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 _surveyModel__WEBPACK_IMPORTED_MODULE_2__[\"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: false,\n configurable: true\n });\n Object.defineProperty(Window.prototype, \"css\", {\n get: function () {\n return !!this.survey ? this.survey.getCss() : {};\n },\n enumerable: false,\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: false,\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: false,\n configurable: true\n });\n Window.prototype.doExpand = function () {\n this.surveyWindow.isExpanded = !this.surveyWindow.isExpanded;\n };\n Window.prototype.doHide = function () {\n vue__WEBPACK_IMPORTED_MODULE_0___default.a.set(this.surveyWindow, \"isShowing\", false);\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Window.prototype, \"window\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Window.prototype, \"survey\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Window.prototype, \"isExpanded\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Window.prototype, \"isexpanded\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Window.prototype, \"closeOnCompleteTimeout\", void 0);\n Window = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Window);\n return Window;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-window\", Window);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Window);\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\":\n/*!**************************************************************************!*\\\n !*** ./node_modules/vue-class-component/dist/vue-class-component.esm.js ***!\n \\**************************************************************************/\n/*! exports provided: default, createDecorator, mixins */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createDecorator\", function() { return createDecorator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mixins\", function() { return mixins; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/**\n * vue-class-component v7.2.6\n * (c) 2015-present Evan You\n * @license MIT\n */\n\n\nfunction _typeof(obj) {\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n}\n\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\n// The rational behind the verbose Reflect-feature check below is the fact that there are polyfills\n// which add an implementation for Reflect.defineMetadata but not for Reflect.getOwnMetadataKeys.\n// Without this check consumers will encounter hard to track down runtime errors.\nfunction reflectionIsSupported() {\n return typeof Reflect !== 'undefined' && Reflect.defineMetadata && Reflect.getOwnMetadataKeys;\n}\nfunction copyReflectionMetadata(to, from) {\n forwardMetadata(to, from);\n Object.getOwnPropertyNames(from.prototype).forEach(function (key) {\n forwardMetadata(to.prototype, from.prototype, key);\n });\n Object.getOwnPropertyNames(from).forEach(function (key) {\n forwardMetadata(to, from, key);\n });\n}\n\nfunction forwardMetadata(to, from, propertyKey) {\n var metaKeys = propertyKey ? Reflect.getOwnMetadataKeys(from, propertyKey) : Reflect.getOwnMetadataKeys(from);\n metaKeys.forEach(function (metaKey) {\n var metadata = propertyKey ? Reflect.getOwnMetadata(metaKey, from, propertyKey) : Reflect.getOwnMetadata(metaKey, from);\n\n if (propertyKey) {\n Reflect.defineMetadata(metaKey, metadata, to, propertyKey);\n } else {\n Reflect.defineMetadata(metaKey, metadata, to);\n }\n });\n}\n\nvar fakeArray = {\n __proto__: []\n};\nvar hasProto = fakeArray instanceof Array;\nfunction createDecorator(factory) {\n return function (target, key, index) {\n var Ctor = typeof target === 'function' ? target : target.constructor;\n\n if (!Ctor.__decorators__) {\n Ctor.__decorators__ = [];\n }\n\n if (typeof index !== 'number') {\n index = undefined;\n }\n\n Ctor.__decorators__.push(function (options) {\n return factory(options, key, index);\n });\n };\n}\nfunction mixins() {\n for (var _len = arguments.length, Ctors = new Array(_len), _key = 0; _key < _len; _key++) {\n Ctors[_key] = arguments[_key];\n }\n\n return vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({\n mixins: Ctors\n });\n}\nfunction isPrimitive(value) {\n var type = _typeof(value);\n\n return value == null || type !== 'object' && type !== 'function';\n}\nfunction warn(message) {\n if (typeof console !== 'undefined') {\n console.warn('[vue-class-component] ' + message);\n }\n}\n\nfunction collectDataFromConstructor(vm, Component) {\n // override _init to prevent to init as Vue instance\n var originalInit = Component.prototype._init;\n\n Component.prototype._init = function () {\n var _this = this;\n\n // proxy to actual vm\n var keys = Object.getOwnPropertyNames(vm); // 2.2.0 compat (props are no longer exposed as self properties)\n\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\n keys.forEach(function (key) {\n Object.defineProperty(_this, key, {\n get: function get() {\n return vm[key];\n },\n set: function set(value) {\n vm[key] = value;\n },\n configurable: true\n });\n });\n }; // should be acquired class property values\n\n\n var data = new Component(); // restore original _init to avoid memory leak (#209)\n\n Component.prototype._init = originalInit; // create plain data object\n\n var plainData = {};\n Object.keys(data).forEach(function (key) {\n if (data[key] !== undefined) {\n plainData[key] = data[key];\n }\n });\n\n if (true) {\n if (!(Component.prototype instanceof vue__WEBPACK_IMPORTED_MODULE_0___default.a) && Object.keys(plainData).length > 0) {\n warn('Component class must inherit Vue or its descendant class ' + 'when class property is used.');\n }\n }\n\n return plainData;\n}\n\nvar $internalHooks = ['data', 'beforeCreate', 'created', 'beforeMount', 'mounted', 'beforeDestroy', 'destroyed', 'beforeUpdate', 'updated', 'activated', 'deactivated', 'render', 'errorCaptured', 'serverPrefetch' // 2.6\n];\nfunction componentFactory(Component) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n options.name = options.name || Component._componentTag || Component.name; // prototype props.\n\n var proto = Component.prototype;\n Object.getOwnPropertyNames(proto).forEach(function (key) {\n if (key === 'constructor') {\n return;\n } // hooks\n\n\n if ($internalHooks.indexOf(key) > -1) {\n options[key] = proto[key];\n return;\n }\n\n var descriptor = Object.getOwnPropertyDescriptor(proto, key);\n\n if (descriptor.value !== void 0) {\n // methods\n if (typeof descriptor.value === 'function') {\n (options.methods || (options.methods = {}))[key] = descriptor.value;\n } else {\n // typescript decorated data\n (options.mixins || (options.mixins = [])).push({\n data: function data() {\n return _defineProperty({}, key, descriptor.value);\n }\n });\n }\n } else if (descriptor.get || descriptor.set) {\n // computed properties\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 data() {\n return collectDataFromConstructor(this, Component);\n }\n }); // decorate options\n\n var decorators = Component.__decorators__;\n\n if (decorators) {\n decorators.forEach(function (fn) {\n return fn(options);\n });\n delete Component.__decorators__;\n } // find super\n\n\n var superProto = Object.getPrototypeOf(Component.prototype);\n var Super = superProto instanceof vue__WEBPACK_IMPORTED_MODULE_0___default.a ? superProto.constructor : vue__WEBPACK_IMPORTED_MODULE_0___default.a;\n var Extended = Super.extend(options);\n forwardStaticMembers(Extended, Component, Super);\n\n if (reflectionIsSupported()) {\n copyReflectionMetadata(Extended, Component);\n }\n\n return Extended;\n}\nvar reservedPropertyNames = [// Unique id\n'cid', // Super Vue constructor\n'super', // Component options that will be used by the component\n'options', 'superOptions', 'extendOptions', 'sealedOptions', // Private assets\n'component', 'directive', 'filter'];\nvar shouldIgnore = {\n prototype: true,\n arguments: true,\n callee: true,\n caller: true\n};\n\nfunction forwardStaticMembers(Extended, Original, Super) {\n // We have to use getOwnPropertyNames since Babel registers methods as non-enumerable\n Object.getOwnPropertyNames(Original).forEach(function (key) {\n // Skip the properties that should not be overwritten\n if (shouldIgnore[key]) {\n return;\n } // Some browsers does not allow reconfigure built-in properties\n\n\n var extendedDescriptor = Object.getOwnPropertyDescriptor(Extended, key);\n\n if (extendedDescriptor && !extendedDescriptor.configurable) {\n return;\n }\n\n var descriptor = Object.getOwnPropertyDescriptor(Original, key); // If the user agent does not support `__proto__` or its family (IE <= 10),\n // the sub class properties may be inherited properties from the super class in TypeScript.\n // We need to exclude such properties to prevent to overwrite\n // the component options object which stored on the extended constructor (See #192).\n // If the value is a referenced value (object or function),\n // we can check equality of them and exclude it if they have the same reference.\n // If it is a primitive value, it will be forwarded for safety.\n\n if (!hasProto) {\n // Only `cid` is explicitly exluded from property forwarding\n // because we cannot detect whether it is a inherited property or not\n // on the no `__proto__` environment even though the property is reserved.\n if (key === 'cid') {\n return;\n }\n\n var superDescriptor = Object.getOwnPropertyDescriptor(Super, key);\n\n if (!isPrimitive(descriptor.value) && superDescriptor && superDescriptor.value === descriptor.value) {\n return;\n }\n } // Warn if the users manually declare reserved properties\n\n\n if ( true && reservedPropertyNames.indexOf(key) >= 0) {\n warn(\"Static property name '\".concat(key, \"' declared on class '\").concat(Original.name, \"' \") + 'conflicts with reserved property name of Vue internal. ' + 'It may cause unexpected behavior of the component. Consider renaming the property.');\n }\n\n Object.defineProperty(Extended, key, descriptor);\n });\n}\n\nfunction Component(options) {\n if (typeof options === 'function') {\n return componentFactory(options);\n }\n\n return function (Component) {\n return componentFactory(Component, options);\n };\n}\n\nComponent.registerHooks = function registerHooks(keys) {\n $internalHooks.push.apply($internalHooks, _toConsumableArray(keys));\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Component);\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/boolean-checkbox.vue?vue&type=template&id=5ccd340a&\":\n/*!***************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/boolean-checkbox.vue?vue&type=template&id=5ccd340a& ***!\n \\***************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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.isInputReadOnly,\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 change: 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 ($$el.checked) {\n $$i < 0 &&\n _vm.$set(_vm.question, \"checkedValue\", $$a.concat([$$v]))\n } else {\n $$i > -1 &&\n _vm.$set(\n _vm.question,\n \"checkedValue\",\n $$a.slice(0, $$i).concat($$a.slice($$i + 1))\n )\n }\n } else {\n _vm.$set(_vm.question, \"checkedValue\", $$c)\n }\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: \"0 0 24 24\" }\n },\n [\n _c(\"rect\", {\n class: _vm.question.cssClasses.uncheckedPath,\n attrs: { x: \"5\", y: \"10\", width: \"14\", height: \"4\" }\n }),\n _vm._v(\" \"),\n _c(\"polygon\", {\n class: _vm.question.cssClasses.checkedPath,\n attrs: {\n points:\n \"19,10 14,10 14,5 10,5 10,10 5,10 5,14 10,14 10,19 14,19 14,14 19,14 \"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n class: _vm.question.cssClasses.indeterminatePath,\n attrs: {\n d:\n \"M22,0H2C0.9,0,0,0.9,0,2v20c0,1.1,0.9,2,2,2h20c1.1,0,2-0.9,2-2V2C24,0.9,23.1,0,22,0z M21,18L6,3h15V18z M3,6l15,15H3V6z\"\n }\n })\n ]\n ),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"check\" })\n ]),\n _vm._v(\" \"),\n _vm.question.titleLocation === \"hidden\"\n ? _c(\n \"span\",\n { class: _vm.question.cssClasses.label },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.question.locDisplayLabel }\n })\n ],\n 1\n )\n : _vm._e()\n ])\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/boolean-switch.vue?vue&type=template&id=70e4aebb&\":\n/*!*************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/boolean-switch.vue?vue&type=template&id=70e4aebb& ***!\n \\*************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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.isInputReadOnly,\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 change: 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 ($$el.checked) {\n $$i < 0 &&\n _vm.$set(_vm.question, \"checkedValue\", $$a.concat([$$v]))\n } else {\n $$i > -1 &&\n _vm.$set(\n _vm.question,\n \"checkedValue\",\n $$a.slice(0, $$i).concat($$a.slice($$i + 1))\n )\n }\n } else {\n _vm.$set(_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 return _vm.onLabelClick($event, false)\n }\n }\n },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.question.locLabelFalse }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n class: _vm.question.cssClasses.switch,\n on: {\n click: function($event) {\n return _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 return _vm.onLabelClick($event, true)\n }\n }\n },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.question.locLabelTrue }\n })\n ],\n 1\n )\n ])\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/buttongroup.vue?vue&type=template&id=6bdc7abb&\":\n/*!**********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/buttongroup.vue?vue&type=template&id=6bdc7abb& ***!\n \\**********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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, attrs: { role: \"group\" } },\n [\n _vm._l(_vm.question.visibleChoices, function(item, index) {\n return [\n _c(\"sv-button-group-item\", {\n key: _vm.question.inputId + \"_\" + index,\n attrs: { item: item, question: _vm.question, index: index }\n })\n ]\n })\n ],\n 2\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/buttongroupitem.vue?vue&type=template&id=4bad6ace&\":\n/*!**************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/buttongroupitem.vue?vue&type=template&id=4bad6ace& ***!\n \\**************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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 \"label\",\n {\n class: _vm.model.css.label,\n attrs: { title: _vm.model.caption.renderedHtml }\n },\n [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.model.question.renderedValue,\n expression: \"model.question.renderedValue\"\n }\n ],\n class: _vm.model.css.control,\n attrs: {\n type: \"radio\",\n name: _vm.model.name,\n id: _vm.model.id,\n \"aria-required\": _vm.model.isRequired,\n \"aria-label\": _vm.model.caption.renderedHtml,\n role: \"radio\",\n \"aria-invalid\": _vm.model.hasErrors,\n \"aria-describedby\": _vm.model.describeBy,\n disabled: _vm.model.readOnly\n },\n domProps: {\n value: _vm.model.value,\n checked: _vm._q(_vm.model.question.renderedValue, _vm.model.value)\n },\n on: {\n change: function($event) {\n return _vm.$set(\n _vm.model.question,\n \"renderedValue\",\n _vm.model.value\n )\n }\n }\n }),\n _vm._v(\" \"),\n _c(\n \"div\",\n { class: _vm.model.css.decorator },\n [\n !!_vm.model.iconName\n ? _c(\"sv-svg-icon\", {\n class: _vm.model.css.icon,\n attrs: {\n iconName: _vm.model.iconName,\n size: _vm.model.iconSize\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.model.showCaption\n ? _c(\n \"span\",\n { class: _vm.model.css.caption },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.model.caption }\n })\n ],\n 1\n )\n : _vm._e()\n ],\n 1\n )\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/checkbox.vue?vue&type=template&id=cad276f6&\":\n/*!*******************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/checkbox.vue?vue&type=template&id=cad276f6& ***!\n \\*******************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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 1\n )\n : _vm._e()\n })\n ],\n 2\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/checkboxitem.vue?vue&type=template&id=c58c80d0&\":\n/*!***********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/checkboxitem.vue?vue&type=template&id=c58c80d0& ***!\n \\***********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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.isInputReadOnly || !_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.isAllSelected,\n checked: Array.isArray(_vm.isAllSelected)\n ? _vm._i(_vm.isAllSelected, _vm.isAllSelected) > -1\n : _vm.isAllSelected\n },\n on: {\n change: 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 ($$el.checked) {\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.isInputReadOnly || !_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 change: 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 ($$el.checked) {\n $$i < 0 &&\n _vm.$set(\n _vm.question,\n \"renderedValue\",\n $$a.concat([$$v])\n )\n } else {\n $$i > -1 &&\n _vm.$set(\n _vm.question,\n \"renderedValue\",\n $$a.slice(0, $$i).concat($$a.slice($$i + 1))\n )\n }\n } else {\n _vm.$set(_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.text }\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 \"\\n question.hasOther && question.renderedValue && question.isOtherSelected\\n \"\n }\n ],\n attrs: { question: _vm.question }\n })\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/comment.vue?vue&type=template&id=099c2c8d&\":\n/*!******************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/comment.vue?vue&type=template&id=099c2c8d& ***!\n \\******************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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.isInputReadOnly,\n disabled: _vm.question.isInputReadOnly,\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.renderedPlaceHolder,\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 _vm.question.isReadOnlyRenderDiv()\n ? _c(\"div\", [_vm._v(_vm._s(_vm.question.value))])\n : _vm._e()\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=template&id=4ca4f276&\":\n/*!*********************************************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=template&id=4ca4f276& ***!\n \\*********************************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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 \"button\",\n {\n staticClass: \"sv-action-bar-item\",\n class: [\n { \"sv-action-bar-item--active\": _vm.item.isActive },\n _vm.item.innerCss\n ],\n attrs: {\n disabled: _vm.item.enabled !== undefined && _vm.item.enabled,\n title: _vm.item.tooltip || _vm.item.title\n },\n on: {\n click: function() {\n _vm.item.action()\n }\n }\n },\n [\n _vm.item.iconName\n ? _c(\"sv-svg-icon\", {\n staticClass: \"sv-action-bar-item__icon\",\n attrs: { iconName: _vm.item.iconName, size: 24 }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.item.showTitle === undefined ||\n _vm.item.showTitle ||\n !_vm.item.iconName\n ? _c(\n \"span\",\n {\n staticClass: \"sv-action-bar-item__title\",\n class: {\n \"sv-action-bar-item__title--with-icon\": !!_vm.item.iconName\n }\n },\n [_vm._v(_vm._s(_vm.item.title))]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"sv-popup\", { attrs: { model: _vm.item.popupModel } })\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-item.vue?vue&type=template&id=40a056f8&\":\n/*!************************************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/action-bar/action-bar-item.vue?vue&type=template&id=40a056f8& ***!\n \\************************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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 \"button\",\n {\n staticClass: \"sv-action-bar-item\",\n class: [\n { \"sv-action-bar-item--active\": _vm.item.isActive },\n _vm.item.innerCss\n ],\n attrs: {\n type: \"button\",\n disabled: _vm.item.enabled !== undefined && !_vm.item.enabled,\n title: _vm.item.tooltip || _vm.item.title,\n tabindex: _vm.item.disableTabStop ? -1 : undefined\n },\n on: {\n click: function() {\n _vm.item.action()\n }\n }\n },\n [\n _vm.item.iconName\n ? _c(\"sv-svg-icon\", {\n staticClass: \"sv-action-bar-item__icon\",\n attrs: { iconName: _vm.item.iconName, size: 24 }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.item.showTitle === undefined ||\n _vm.item.showTitle ||\n !_vm.item.iconName\n ? _c(\n \"span\",\n {\n staticClass: \"sv-action-bar-item__title\",\n class: {\n \"sv-action-bar-item__title--with-icon\": !!_vm.item.iconName\n }\n },\n [_vm._v(_vm._s(_vm.item.title))]\n )\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-separator.vue?vue&type=template&id=1aab6850&\":\n/*!*****************************************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/action-bar/action-bar-separator.vue?vue&type=template&id=1aab6850& ***!\n \\*****************************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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 staticClass: \"sv-action-bar-separator\",\n class: _vm.innerCss\n })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar.vue?vue&type=template&id=313bf210&\":\n/*!*******************************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/action-bar/action-bar.vue?vue&type=template&id=313bf210& ***!\n \\*******************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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.model.hasItems\n ? _c(\n \"div\",\n {\n ref: \"container\",\n staticClass: \"sv-action-bar\",\n on: {\n click: function(event) {\n event.stopPropagation()\n }\n }\n },\n _vm._l(_vm.model.actions, function(item) {\n return _c(\"sv-action\", { key: item.id, attrs: { item: item } })\n }),\n 1\n )\n : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action.vue?vue&type=template&id=2fe54632&\":\n/*!***************************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/action-bar/action.vue?vue&type=template&id=2fe54632& ***!\n \\***************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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 {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.item.visible || _vm.item.visible === undefined,\n expression: \"item.visible || item.visible === undefined\"\n }\n ],\n staticClass: \"sv-action\",\n class: { \"sv-action--hidden\": !_vm.item.isVisible }\n },\n [\n _vm.item.needSeparator ? _c(\"sv-action-bar-separator\") : _vm._e(),\n _vm._v(\" \"),\n _c(_vm.getComponentName(), {\n tag: \"component\",\n attrs: { item: _vm.item }\n })\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/default-title/default-title.vue?vue&type=template&id=7f6117dc&\":\n/*!*************************************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/default-title/default-title.vue?vue&type=template&id=7f6117dc& ***!\n \\*************************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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(\"survey-question-title-content\", {\n attrs: { element: _vm.element, css: _vm.css }\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.getIconCss(_vm.isCollapsed),\n attrs: {\n tabindex: \"0\",\n \"aria-expanded\": _vm.isCollapsed ? \"false\" : \"true\",\n \"aria-controls\": !_vm.isCollapsed ? _vm.element.contentId : null\n },\n on: {\n keyup: function($event) {\n if (\n !$event.type.indexOf(\"key\") &&\n _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")\n ) {\n return null\n }\n return _vm.changeExpanded.apply(null, arguments)\n }\n }\n })\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/list/list.vue?vue&type=template&id=cc17a010&\":\n/*!*******************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/list/list.vue?vue&type=template&id=cc17a010& ***!\n \\*******************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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 \"ul\",\n {\n staticClass: \"sv-list\",\n on: {\n mousedown: function(data, e) {\n e.preventDefault()\n }\n }\n },\n _vm._l(_vm.model.items, function(item) {\n return _c(\n \"li\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: item.visible === undefined || item.visible,\n expression: \"item.visible === undefined || item.visible\"\n }\n ],\n key: item.id,\n staticClass: \"sv-list__item\",\n class: _vm.model.getItemClass(item),\n style: { paddingLeft: _vm.model.getItemIndent(item) },\n on: {\n click: function($event) {\n return _vm.model.selectItem(item)\n }\n }\n },\n [\n item.iconName\n ? _c(\"sv-svg-icon\", {\n staticClass: \"sv-list__item-icon\",\n attrs: { iconName: item.iconName, size: 24 }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"span\", [_vm._v(_vm._s(item.title))])\n ],\n 1\n )\n }),\n 0\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=template&id=5b4e69b6&\":\n/*!****************************************************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=template&id=5b4e69b6& ***!\n \\****************************************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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 \"button\",\n {\n class: _vm.question.getDetailPanelButtonCss(_vm.row),\n attrs: {\n type: \"button\",\n \"aria-expanded\": _vm.question.getIsDetailPanelShowing(_vm.row)\n ? \"true\"\n : \"false\",\n \"aria-controls\": _vm.question.getIsDetailPanelShowing(_vm.row)\n ? _vm.row.detailPanelId\n : null\n },\n on: {\n click: function() {\n return _vm.row.showHideDetailPanelClick()\n }\n }\n },\n [_c(\"span\", { class: _vm.question.getDetailPanelIconCss(_vm.row) })]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=template&id=4f55d298&\":\n/*!******************************************************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=template&id=4f55d298& ***!\n \\******************************************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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\", { class: _vm.question.cssClasses.iconDrag })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=template&id=c8a7aa60&\":\n/*!****************************************************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=template&id=c8a7aa60& ***!\n \\****************************************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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 \"button\",\n {\n class:\n _vm.question.cssClasses.button +\n \" \" +\n _vm.question.cssClasses.buttonRemove,\n attrs: { type: \"button\", disabled: _vm.question.isInputReadOnly },\n on: {\n click: function() {\n return _vm.question.removeRowUI(_vm.row)\n }\n }\n },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.question.locRemoveRowText }\n }),\n _vm._v(\" \"),\n _c(\"span\", { class: _vm.question.cssClasses.iconRemove })\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/popup/popup-container.vue?vue&type=template&id=c18dfd74&\":\n/*!*******************************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/popup/popup-container.vue?vue&type=template&id=c18dfd74& ***!\n \\*******************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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.model.isVisible,\n expression: \"model.isVisible\"\n }\n ],\n staticClass: \"sv-popup\",\n class: _vm.model.styleClass,\n attrs: { tabindex: \"-1\" },\n on: {\n keydown: function(event) {\n _vm.model.onKeyDown(event)\n },\n click: function() {\n _vm.model.clickOutside()\n }\n }\n },\n [\n _c(\n \"div\",\n {\n staticClass: \"sv-popup__container\",\n style: { left: _vm.model.left, top: _vm.model.top },\n on: { click: _vm.clickInside }\n },\n [\n _c(\"span\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.model.showPointer,\n expression: \"model.showPointer\"\n }\n ],\n staticClass: \"sv-popup__pointer\",\n style: {\n left: _vm.model.pointerTarget.left,\n top: _vm.model.pointerTarget.top\n }\n }),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"sv-popup__scrolling-content\" }, [\n _c(\"div\", { staticClass: \"sv-popup__header\" }),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"sv-popup__content\" },\n [\n _c(\n _vm.model.contentComponentName,\n _vm._b(\n { tag: \"component\" },\n \"component\",\n _vm.model.contentComponentData,\n false\n )\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.model.isModal\n ? _c(\"div\", { staticClass: \"sv-popup__footer\" }, [\n _c(\n \"button\",\n {\n staticClass:\n \"sv-popup__footer-item sv-popup__button sv-popup__button--cancel\",\n on: {\n click: function() {\n _vm.model.cancel()\n }\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.model.cancelButtonText) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"button\",\n {\n staticClass:\n \"sv-popup__footer-item sv-popup__button sv-popup__button--cancel\",\n on: {\n click: function() {\n _vm.model.apply()\n }\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.model.applyButtonText) +\n \"\\n \"\n )\n ]\n )\n ])\n : _vm._e()\n ])\n ]\n )\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/popup/popup.vue?vue&type=template&id=ef11265c&\":\n/*!*********************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/popup/popup.vue?vue&type=template&id=ef11265c& ***!\n \\*********************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/svg-icon/svg-icon.vue?vue&type=template&id=684776f8&\":\n/*!***************************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/svg-icon/svg-icon.vue?vue&type=template&id=684776f8& ***!\n \\***************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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 \"svg\",\n { ref: \"svgIcon\", staticClass: \"sv-svg-icon\", attrs: { role: \"img\" } },\n [_c(\"use\")]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/title-actions/title-actions.vue?vue&type=template&id=b72886ec&\":\n/*!*************************************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/title-actions/title-actions.vue?vue&type=template&id=b72886ec& ***!\n \\*************************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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-title-actions\" },\n [\n _c(\n \"span\",\n { staticClass: \"sv-title-actions__title\" },\n [\n _vm.element.isPage\n ? _c(\"survey-string\", {\n attrs: { locString: _vm.element.locTitle }\n })\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.element.isPage\n ? _c(\"survey-question-title-content\", {\n attrs: { element: _vm.element, css: _vm.css }\n })\n : _vm._e()\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"sv-action-bar\", {\n staticClass: \"sv-title-actions__bar\",\n attrs: { model: _vm.toolbar }\n })\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/composite.vue?vue&type=template&id=1a9e2196&\":\n/*!********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/composite.vue?vue&type=template&id=1a9e2196& ***!\n \\********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/custom.vue?vue&type=template&id=d4aae09a&\":\n/*!*****************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/custom.vue?vue&type=template&id=d4aae09a& ***!\n \\*****************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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.getComponentName(_vm.contentQuestion), {\n tag: \"component\",\n attrs: { question: _vm.contentQuestion, css: _vm.css }\n })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/customwidget.vue?vue&type=template&id=1e61a7b7&\":\n/*!***********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/customwidget.vue?vue&type=template&id=1e61a7b7& ***!\n \\***********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/dropdown.vue?vue&type=template&id=6b3215d3&\":\n/*!*******************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/dropdown.vue?vue&type=template&id=6b3215d3& ***!\n \\*******************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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.getControlClass(),\n attrs: {\n id: _vm.question.inputId,\n autocomplete: _vm.question.autoComplete,\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 \"aria-required\": _vm.question.isRequired,\n required: _vm.question.isRequired\n },\n on: {\n change: function($event) {\n var $$selectedVal = 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 })\n _vm.$set(\n _vm.question,\n \"renderedValue\",\n $event.target.multiple ? $$selectedVal : $$selectedVal[0]\n )\n }\n }\n },\n [\n _vm.question.showOptionsCaption\n ? _c(\"option\", { domProps: { value: undefined } }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.question.optionsCaption) +\n \"\\n \"\n )\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(\"\\n \" + _vm._s(item.text) + \"\\n \")]\n )\n })\n ],\n 2\n )\n ])\n : _c(\n \"div\",\n {\n class: _vm.question.getControlClass(),\n attrs: { disabled: \"\", id: _vm.question.inputId }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.isOtherSelected\n ? _vm.question.otherText\n : _vm.question.displayValue\n ) +\n \"\\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\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/element.vue?vue&type=template&id=973472ac&\":\n/*!******************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/element.vue?vue&type=template&id=973472ac& ***!\n \\******************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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.isPanel && _vm.element.hasTitleOnLeftTop\n ? _c(\"survey-element-header\", {\n attrs: { element: _vm.element, css: _vm.css }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.element.isPanel || !_vm.element.isCollapsed,\n expression: \"element.isPanel || !element.isCollapsed\"\n }\n ],\n class: _vm.getContentClass(_vm.element)\n },\n [\n !_vm.element.isPanel && _vm.hasErrorsOnTop\n ? _c(\"survey-errors\", {\n attrs: { question: _vm.element, location: \"top\" }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(_vm.getComponentName(_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.element.isPanel && _vm.hasErrorsOnBottom\n ? _c(\"survey-errors\", {\n attrs: { question: _vm.element, location: \"bottom\" }\n })\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.element.isPanel && _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.isPanel && _vm.element.hasTitleOnBottom\n ? _c(\"survey-element-header\", {\n attrs: { element: _vm.element, css: _vm.css }\n })\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/elementheader.vue?vue&type=template&id=27adc537&\":\n/*!************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/elementheader.vue?vue&type=template&id=27adc537& ***!\n \\************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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 class: _vm.getHeaderClass(_vm.element),\n on: { click: _vm.clickTitleFunction }\n },\n [\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 tabindex: _vm.element.titleTabIndex,\n \"aria-expanded\": _vm.element.titleAriaExpanded\n },\n on: {\n click: function() {\n return _vm.element.toggleState()\n },\n keyup: function($event) {\n _vm.keyup($event)\n }\n }\n },\n [\n _c(_vm.element.getTitleComponentName(), {\n tag: \"component\",\n attrs: { element: _vm.element, css: _vm.css }\n })\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 )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/empty.vue?vue&type=template&id=05052c0a&\":\n/*!****************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/empty.vue?vue&type=template&id=05052c0a& ***!\n \\****************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/errors.vue?vue&type=template&id=5682e6ad&\":\n/*!*****************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/errors.vue?vue&type=template&id=5682e6ad& ***!\n \\*****************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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.question.hasVisibleErrors,\n expression: \"question.hasVisibleErrors\"\n }\n ],\n class: _vm.classes,\n attrs: {\n role: \"alert\",\n \"aria-live\": \"polite\",\n id: _vm.question.id + \"_errors\"\n }\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 0\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/expression.vue?vue&type=template&id=1d20865a&\":\n/*!*********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/expression.vue?vue&type=template&id=1d20865a& ***!\n \\*********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/file.vue?vue&type=template&id=20f70284&\":\n/*!***************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/file.vue?vue&type=template&id=20f70284& ***!\n \\***************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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.controlDisabled\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(\"\\n \" + _vm._s(_vm.question.cleanButtonCaption) + \"\\n \")]\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 return _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 return _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 return _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 return _vm.doDownloadFile($event, val)\n }\n }\n },\n [_vm._v(_vm._s(val.name))]\n )\n ]\n )\n : _vm._e()\n ]\n )\n }),\n 0\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(\"\\n \" + _vm._s(_vm.question.cleanButtonCaption) + \"\\n \")]\n )\n : _vm._e()\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/flowpanel.vue?vue&type=template&id=96ae1a78&\":\n/*!********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/flowpanel.vue?vue&type=template&id=96ae1a78& ***!\n \\********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/flowpanelelement.vue?vue&type=template&id=9d992c30&\":\n/*!***************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/flowpanelelement.vue?vue&type=template&id=9d992c30& ***!\n \\***************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/header.vue?vue&type=template&id=69cff8cf&\":\n/*!*****************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/header.vue?vue&type=template&id=69cff8cf& ***!\n \\*****************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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.renderedHasHeader\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\n : undefined,\n height: _vm.survey.logoHeight\n ? _vm.survey.logoHeight\n : undefined,\n alt: _vm.survey.locTitle.renderedHtml\n }\n })\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.survey.renderedHasTitle\n ? _c(\n \"div\",\n {\n class: _vm.survey.css.headerText,\n style: { maxWidth: _vm.survey.titleMaxWidth }\n },\n [\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 )\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\n : undefined,\n height: _vm.survey.logoHeight\n ? _vm.survey.logoHeight\n : undefined,\n alt: _vm.survey.locTitle.renderedHtml\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\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/html.vue?vue&type=template&id=0742e16d&\":\n/*!***************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/html.vue?vue&type=template&id=0742e16d& ***!\n \\***************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/image.vue?vue&type=template&id=1dc8d709&\":\n/*!****************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/image.vue?vue&type=template&id=1dc8d709& ***!\n \\****************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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 alt: _vm.question.text || _vm.question.title,\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\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/imagepicker.vue?vue&type=template&id=153fe052&\":\n/*!**********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/imagepicker.vue?vue&type=template&id=153fe052& ***!\n \\**********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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.isInputReadOnly || !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 change: 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 ($$el.checked) {\n $$i < 0 &&\n _vm.$set(_vm.question, \"value\", $$a.concat([$$v]))\n } else {\n $$i > -1 &&\n _vm.$set(\n _vm.question,\n \"value\",\n $$a.slice(0, $$i).concat($$a.slice($$i + 1))\n )\n }\n } else {\n _vm.$set(_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.isInputReadOnly || !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 change: function($event) {\n return _vm.$set(_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\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrix.vue?vue&type=template&id=7fa2f403&\":\n/*!*****************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/matrix.vue?vue&type=template&id=7fa2f403& ***!\n \\*****************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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(\n column,\n columnIndex\n ) {\n return _c(\n \"th\",\n {\n key: columnIndex,\n class: _vm.question.cssClasses.headerCell\n },\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 {\n key: \"row-\" + row.name + \"-\" + rowIndex,\n class: row.rowClasses\n },\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 key: columnIndex,\n class: _vm.question.getItemClass(row, column),\n on: {\n click: function($event) {\n return _vm.cellClick(row, column)\n }\n }\n },\n [\n _c(\"survey-string\", {\n attrs: {\n locString: _vm.question.getCellDisplayLocText(\n row.name,\n column\n )\n }\n })\n ],\n 1\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 key: columnIndex,\n class: _vm.question.cssClasses.cell,\n attrs: { title: column.locText.renderedHtml },\n on: {\n click: function($event) {\n return _vm.cellClick(row, column)\n }\n }\n },\n [\n _c(\n \"label\",\n { class: _vm.question.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.isInputReadOnly,\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 change: function($event) {\n return _vm.$set(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 0\n )\n ])\n ])\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixcell.vue?vue&type=template&id=3ca54ee5&\":\n/*!*********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/matrixcell.vue?vue&type=template&id=3ca54ee5& ***!\n \\*********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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.cell.className,\n style: _vm.getCellStyle(),\n attrs: { title: _vm.getHeaders(), colspan: _vm.cell.colSpans }\n },\n [\n _vm.cell.isActionsCell\n ? _c(\"sv-action-bar\", {\n attrs: { model: _vm.cell.item.getData(), handleClick: false }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.cell.hasPanel\n ? _c(_vm.getComponentName(_vm.cell.panel), {\n tag: \"component\",\n attrs: { question: _vm.cell.panel, css: _vm.question.survey.css }\n })\n : _vm._e(),\n _vm._v(\" \"),\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 && _vm.cell.question.isDefaultRendering()\n ? _c(_vm.getComponentName(_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.question.isDefaultRendering()\n ? _c(_vm.cell.question.getComponentName(), {\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.hasTitle\n ? _c(\"survey-string\", { attrs: { locString: _vm.cell.locTitle } })\n : _vm._e(),\n _vm._v(\" \"),\n !!_vm.cell.requiredText\n ? _c(\"span\", [_vm._v(_vm._s(_vm.cell.requiredText))])\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixdropdown.vue?vue&type=template&id=0b4da6d8&\":\n/*!*************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/matrixdropdown.vue?vue&type=template&id=0b4da6d8& ***!\n \\*************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixdynamic.vue?vue&type=template&id=9a0b88e8&\":\n/*!************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/matrixdynamic.vue?vue&type=template&id=9a0b88e8& ***!\n \\************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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.renderedTable.showAddRowOnTop\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(\"survey-string\", {\n attrs: { locString: _vm.question.locAddRowText }\n }),\n _vm._v(\" \"),\n _c(\"span\", { class: _vm.question.cssClasses.iconAdd })\n ],\n 1\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.question.renderedTable.showTable\n ? _c(\"survey-matrixtable\", { attrs: { question: _vm.question } })\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.question.renderedTable.showTable\n ? _c(\"div\", { class: _vm.question.cssClasses.emptyRowsSection }, [\n _c(\n \"div\",\n { class: _vm.question.cssClasses.emptyRowsText },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.question.locEmptyRowsText }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"button\",\n {\n class:\n _vm.question.cssClasses.button +\n \" \" +\n _vm.question.cssClasses.buttonAdd +\n \" \" +\n _vm.question.cssClasses.emptyRowsButton,\n attrs: { type: \"button\" },\n on: { click: _vm.addRowClick }\n },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.question.locAddRowText }\n }),\n _vm._v(\" \"),\n _c(\"span\", { class: _vm.question.cssClasses.iconAdd })\n ],\n 1\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.question.renderedTable.showAddRowOnBottom\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(\"survey-string\", {\n attrs: { locString: _vm.question.locAddRowText }\n }),\n _vm._v(\" \"),\n _c(\"span\", { class: _vm.question.cssClasses.iconAdd })\n ],\n 1\n )\n ])\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixtable.vue?vue&type=template&id=fa197e4a&\":\n/*!**********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/matrixtable.vue?vue&type=template&id=fa197e4a& ***!\n \\**********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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(\"table\", { class: _vm.question.cssClasses.root }, [\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 cell.hasTitle\n ? _c(\"survey-string\", {\n attrs: { locString: cell.locTitle }\n })\n : _vm._e(),\n _vm._v(\" \"),\n !!cell.requiredText\n ? _c(\"span\", [_vm._v(_vm._s(cell.requiredText))])\n : _vm._e()\n ],\n 1\n )\n }),\n 0\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, class: row.className },\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 1\n )\n }),\n 0\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 1\n )\n ])\n : _vm._e()\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/multipletext.vue?vue&type=template&id=93fe4c02&\":\n/*!***********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/multipletext.vue?vue&type=template&id=93fe4c02& ***!\n \\***********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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.getComponentName(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 0\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/navigation.vue?vue&type=template&id=75eadfd6&\":\n/*!*********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/navigation.vue?vue&type=template&id=75eadfd6& ***!\n \\*********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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.showPrevBtn,\n expression: \"showPrevBtn\"\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.showNextBtn,\n expression: \"showNextBtn\"\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.showCompleteBtn,\n expression: \"showCompleteBtn\"\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\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/otherChoice.vue?vue&type=template&id=2ed776ff&\":\n/*!**********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/otherChoice.vue?vue&type=template&id=2ed776ff& ***!\n \\**********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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.isInputReadOnly,\n disabled: _vm.question.isInputReadOnly,\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\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/page.vue?vue&type=template&id=4e962a51&\":\n/*!***************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/page.vue?vue&type=template&id=4e962a51& ***!\n \\***************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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 [\n !_vm.page.hasTitleActions\n ? _c(\"survey-string\", {\n attrs: { locString: _vm.page.locTitle }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.page.hasTitleActions\n ? _c(\"sv-title-actions\", { attrs: { element: _vm.page } })\n : _vm._e()\n ],\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\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/panel.vue?vue&type=template&id=0c78899c&\":\n/*!****************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/panel.vue?vue&type=template&id=0c78899c& ***!\n \\****************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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.question.cssTitle,\n attrs: {\n tabindex: _vm.question.titleTabIndex,\n \"aria-expanded\": _vm.question.titleAriaExpanded\n },\n on: {\n click: function() {\n return _vm.question.toggleState()\n },\n keyup: function($event) {\n _vm.keyup($event)\n }\n }\n },\n [\n _c(_vm.question.getTitleComponentName(), {\n tag: \"component\",\n attrs: { element: _vm.question, css: _vm.css }\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 !_vm.isCollapsed\n ? _c(\n \"div\",\n {\n class: _vm.question.cssClasses.panel.content,\n style: { paddingLeft: _vm.question.innerPaddingLeft },\n attrs: { id: _vm.question.contentId }\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: {\n row: row,\n survey: _vm.survey,\n css: _vm.css\n }\n })\n ],\n 1\n )\n : _vm._e()\n }),\n _vm._v(\" \"),\n _vm.question.hasEditButton\n ? _c(\n \"div\",\n { class: _vm.question.cssClasses.panel.footer },\n [\n _c(\"input\", {\n class: _vm.survey.cssNavigationEdit,\n attrs: {\n type: \"button\",\n value: _vm.survey.editText\n },\n on: { click: _vm.cancelPreview }\n })\n ]\n )\n : _vm._e()\n ],\n 2\n )\n : _vm._e()\n ],\n 1\n )\n : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamic.vue?vue&type=template&id=9dda5d06&\":\n/*!***********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/paneldynamic.vue?vue&type=template&id=9dda5d06& ***!\n \\***********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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 [\n _c(\n \"div\",\n { key: panel.id, class: _vm.question.getPanelWrapperCss() },\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 ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"hr\", {\n key: \"separator\" + panel.id,\n class: _vm.question.cssClasses.separator\n })\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\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamicprogress.vue?vue&type=template&id=742bffac&\":\n/*!*******************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/paneldynamicprogress.vue?vue&type=template&id=742bffac& ***!\n \\*******************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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(\"\\n \" + _vm._s(_vm.question.progressText) + \"\\n \")\n ])\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamicremove.vue?vue&type=template&id=db6b2f7e&\":\n/*!*****************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/paneldynamicremove.vue?vue&type=template&id=db6b2f7e& ***!\n \\*****************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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.canRemovePanel && !_vm.question.isReadOnly\n ? _c(\"input\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: !_vm.isCollapsed,\n expression: \"!isCollapsed\"\n }\n ],\n class: _vm.question.getPanelRemoveButtonCss(),\n attrs: { type: \"button\", value: _vm.question.panelRemoveText },\n on: {\n click: function($event) {\n return _vm.removePanelClick(_vm.panel)\n }\n }\n })\n : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/progress.vue?vue&type=template&id=27e325ef&\":\n/*!*******************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/progress.vue?vue&type=template&id=27e325ef& ***!\n \\*******************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/progressButtons.vue?vue&type=template&id=2ae7de42&\":\n/*!**************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/progressButtons.vue?vue&type=template&id=2ae7de42& ***!\n \\**************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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.progressButtonsContainerCenter }, [\n _c(\"div\", { class: _vm.css.progressButtonsContainer }, [\n _c(\"div\", {\n class: _vm.getScrollButtonCss(_vm.hasScroller, true),\n attrs: { role: \"button\" },\n on: {\n click: function($event) {\n return _vm.clickScrollButton(true)\n }\n }\n }),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n ref: \"progressButtonsListContainer\",\n class: _vm.css.progressButtonsListContainer\n },\n [\n _c(\n \"ul\",\n { class: _vm.css.progressButtonsList },\n _vm._l(_vm.survey.visiblePages, function(page, index) {\n return _c(\n \"li\",\n {\n key: \"listelement\" + index,\n class: _vm.getListElementCss(index),\n on: {\n click: function($event) {\n _vm.isListElementClickable(index)\n ? _vm.clickListElement(index)\n : null\n }\n }\n },\n [\n _c(\n \"div\",\n {\n class: _vm.css.progressButtonsPageTitle,\n attrs: {\n title: page.locNavigationTitle.renderedHtml || page.name\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n page.locNavigationTitle.renderedHtml || page.name\n ) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n class: _vm.css.progressButtonsPageDescription,\n attrs: {\n title: page.locNavigationDescription.renderedHtml\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(page.locNavigationDescription.renderedHtml) +\n \"\\n \"\n )\n ]\n )\n ]\n )\n }),\n 0\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\"div\", {\n class: _vm.getScrollButtonCss(_vm.hasScroller, false),\n attrs: { role: \"button\" },\n on: {\n click: function($event) {\n return _vm.clickScrollButton(false)\n }\n }\n })\n ])\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/radiogroup.vue?vue&type=template&id=06c6d526&\":\n/*!*********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/radiogroup.vue?vue&type=template&id=06c6d526& ***!\n \\*********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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, attrs: { role: \"radiogroup\" } },\n [\n !_vm.question.hasTitle\n ? _c(\"legend\", {\n attrs: { \"aria-label\": _vm.question.locTitle.renderedHtml }\n })\n : _vm._e(),\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 1\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\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/radiogroupitem.vue?vue&type=template&id=5bbe97b9&\":\n/*!*************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/radiogroupitem.vue?vue&type=template&id=5bbe97b9& ***!\n \\*************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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 disabled: _vm.question.isInputReadOnly || !_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 change: function($event) {\n return _vm.$set(_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.text }\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 \"\\n question.hasOther && question.renderedValue && question.isOtherSelected\\n \"\n }\n ],\n attrs: { question: _vm.question }\n })\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/ranking/ranking-item.vue?vue&type=template&id=2faded76&\":\n/*!*******************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/ranking/ranking-item.vue?vue&type=template&id=2faded76& ***!\n \\*******************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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 { attrs: { tabindex: \"0\" }, on: { keydown: _vm.handleKeydown } },\n [\n _c(\n \"div\",\n { staticStyle: { outline: \"none\" }, attrs: { tabindex: \"-1\" } },\n [\n _c(\"div\", { class: _vm.cssClasses.itemGhostNode }),\n _vm._v(\" \"),\n _c(\"div\", { class: _vm.cssClasses.itemContent }, [\n _c(\"div\", { class: _vm.cssClasses.itemIconContainer }, [\n _c(\n \"svg\",\n {\n class:\n _vm.cssClasses.itemIcon +\n \" \" +\n _vm.cssClasses.itemIconHoverMod,\n attrs: {\n width: \"10\",\n height: \"16\",\n viewBox: \"0 0 10 16\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }\n },\n [\n _c(\"path\", {\n attrs: {\n d:\n \"M6 2C6 0.9 6.9 0 8 0C9.1 0 10 0.9 10 2C10 3.1 9.1 4 8 4C6.9 4 6 3.1 6 2ZM2 0C0.9 0 0 0.9 0 2C0 3.1 0.9 4 2 4C3.1 4 4 3.1 4 2C4 0.9 3.1 0 2 0ZM8 6C6.9 6 6 6.9 6 8C6 9.1 6.9 10 8 10C9.1 10 10 9.1 10 8C10 6.9 9.1 6 8 6ZM2 6C0.9 6 0 6.9 0 8C0 9.1 0.9 10 2 10C3.1 10 4 9.1 4 8C4 6.9 3.1 6 2 6ZM8 12C6.9 12 6 12.9 6 14C6 15.1 6.9 16 8 16C9.1 16 10 15.1 10 14C10 12.9 9.1 12 8 12ZM2 12C0.9 12 0 12.9 0 14C0 15.1 0.9 16 2 16C3.1 16 4 15.1 4 14C4 12.9 3.1 12 2 12Z\"\n }\n })\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"svg\",\n {\n class:\n _vm.cssClasses.itemIcon +\n \" \" +\n _vm.cssClasses.itemIconFocusMod,\n attrs: {\n width: \"10\",\n height: \"24\",\n viewBox: \"0 0 10 24\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }\n },\n [\n _c(\"path\", { attrs: { d: \"M10 5L5 0L0 5H4V9H6V5H10Z\" } }),\n _vm._v(\" \"),\n _c(\"path\", { attrs: { d: \"M6 19V15H4V19H0L5 24L10 19H6Z\" } })\n ]\n )\n ]),\n _vm._v(\" \"),\n _c(\"div\", { class: _vm.cssClasses.itemIndex }, [\n _vm._v(_vm._s(_vm.index))\n ]),\n _vm._v(\" \"),\n _c(\n \"div\",\n { class: _vm.cssClasses.controlLabel },\n [_c(\"survey-string\", { attrs: { locString: _vm.text } })],\n 1\n )\n ])\n ]\n )\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/ranking/ranking.vue?vue&type=template&id=19074eea&\":\n/*!**************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/ranking/ranking.vue?vue&type=template&id=19074eea& ***!\n \\**************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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.rootClass },\n _vm._l(_vm.question.rankingChoices, function(item, index) {\n return _c(\"survey-ranking-item\", {\n key: item.value + \"-\" + index + \"-item\",\n class: _vm.question.getItemClass(item),\n attrs: {\n text: item.locText,\n index: _vm.question.getNumberByIndex(index),\n handleKeydown: _vm.question.handleKeydown,\n cssClasses: _vm.question.cssClasses\n }\n })\n }),\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/rating.vue?vue&type=template&id=7092bfdf&\":\n/*!*****************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/rating.vue?vue&type=template&id=7092bfdf& ***!\n \\*****************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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(\"div\", { class: _vm.getRootClass(_vm.question) }, [\n _c(\n \"fieldset\",\n { attrs: { role: \"radiogroup\" } },\n [\n _c(\"legend\", {\n attrs: { \"aria-label\": _vm.question.locTitle.renderedHtml }\n }),\n _vm._v(\" \"),\n _vm._l(_vm.question.visibleRateValues, function(item, index) {\n return _c(\n \"label\",\n { key: item.value, class: _vm.question.getItemClass(item) },\n [\n _c(\"input\", {\n staticClass: \"sv-visuallyhidden\",\n attrs: {\n type: \"radio\",\n name: _vm.question.name,\n id: _vm.question.inputId + \"_\" + index,\n disabled: _vm.question.isInputReadOnly,\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: {\n click: function(e) {\n return _vm.question.setValueFromClick(e.target.value)\n }\n }\n }),\n _vm._v(\" \"),\n index === 0\n ? _c(\n \"span\",\n { class: _vm.question.cssClasses.minText },\n [\n _c(\"survey-string\", {\n attrs: {\n locString: _vm.question.locMinRateDescription\n }\n })\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"span\",\n { class: _vm.question.cssClasses.itemText },\n [\n _c(\"survey-string\", {\n attrs: { locString: item.locText }\n })\n ],\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: {\n locString: _vm.question.locMaxRateDescription\n }\n })\n ],\n 1\n )\n : _vm._e()\n ]\n )\n })\n ],\n 2\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\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/row.vue?vue&type=template&id=7cc0bd88&\":\n/*!**************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/row.vue?vue&type=template&id=7cc0bd88& ***!\n \\**************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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 _vm.row.isNeedRender && element.isVisible\n ? _c(\n \"div\",\n {\n key: element.idValue,\n style: {\n flexBasis: element.renderWidth,\n flexGrow: 1,\n flexShrink: 1,\n width: element.renderWidth,\n minWidth: element.minWidth,\n maxWidth: element.maxWidth\n }\n },\n [\n _c(\"survey-element\", {\n style: {\n paddingLeft: element.paddingLeft,\n paddingRight: element.paddingRight\n },\n attrs: {\n id: element.id,\n role: element.ariaRole,\n \"aria-labelledby\": element.hasTitle\n ? element.ariaTitleId\n : null,\n name: element.name,\n element: element,\n survey: _vm.survey,\n css: _vm.css\n }\n })\n ],\n 1\n )\n : _vm._e()\n }),\n 0\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/signaturepad.vue?vue&type=template&id=0462349d&\":\n/*!***********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/signaturepad.vue?vue&type=template&id=0462349d& ***!\n \\***********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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 class: _vm.question.cssClasses.root,\n style: {\n height: _vm.question.height + \"px\",\n width: _vm.question.width + \"px\"\n }\n },\n [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.question.needShowPlaceholder(),\n expression: \"question.needShowPlaceholder()\"\n }\n ],\n class: _vm.question.cssClasses.placeholder\n },\n [_vm._v(\"\\n \" + _vm._s(_vm.question.placeHolderText) + \"\\n \")]\n ),\n _vm._v(\" \"),\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 ])\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\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string-editor.vue?vue&type=template&id=9639f152&\":\n/*!************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/string-editor.vue?vue&type=template&id=9639f152& ***!\n \\************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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 staticClass: \"sv-string-editor\",\n staticStyle: { position: \"static\" },\n attrs: { contenteditable: \"true\" },\n domProps: { innerHTML: _vm._s(_vm.locString.renderedHtml) },\n on: { blur: _vm.onInput, click: _vm.onClick }\n })\n : _c(\n \"span\",\n {\n staticClass: \"sv-string-editor\",\n staticStyle: { position: \"static\" },\n attrs: { contenteditable: \"true\" },\n on: { blur: _vm.onInput, click: _vm.onClick }\n },\n [_vm._v(_vm._s(_vm.locString.renderedHtml))]\n )\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string-viewer.vue?vue&type=template&id=7d918508&\":\n/*!************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/string-viewer.vue?vue&type=template&id=7d918508& ***!\n \\************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string.vue?vue&type=template&id=d3a3d75a&\":\n/*!*****************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/string.vue?vue&type=template&id=d3a3d75a& ***!\n \\*****************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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.locString.renderAs, {\n tag: \"component\",\n attrs: { locString: _vm.locString }\n })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/survey.vue?vue&type=template&id=6874e1c8&\":\n/*!*****************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/survey.vue?vue&type=template&id=6874e1c8& ***!\n \\*****************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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.isNavigationButtonsShowingOnTop\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.isNavigationButtonsShowingOnBottom\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(\n \"sv-progress-\" +\n _vm.survey.progressBarType.toLowerCase(),\n {\n tag: \"component\",\n attrs: { survey: _vm.survey, css: _vm.css }\n }\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.isNavigationButtonsShowingOnTop\n ? _c(\"survey-navigation\", {\n key: _vm.navId,\n attrs: { survey: _vm.survey, css: _vm.css }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"survey-page\", {\n key: _vm.pageId,\n attrs: {\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(\n \"sv-progress-\" +\n _vm.survey.progressBarType.toLowerCase(),\n {\n tag: \"component\",\n attrs: { survey: _vm.survey, css: _vm.css }\n }\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.survey.isNavigationButtonsShowingOnBottom\n ? _c(\"survey-navigation\", {\n key: _vm.navId,\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(\n \"\\n \" + _vm._s(_vm.survey.emptySurveyText) + \"\\n \"\n )\n ])\n : _vm._e()\n ],\n 2\n )\n ])\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/text.vue?vue&type=template&id=40ece422&\":\n/*!***************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/text.vue?vue&type=template&id=40ece422& ***!\n \\***************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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 _c(\"input\", {\n class: _vm.question.getControlClass(),\n style: _vm.inputStyle,\n attrs: {\n disabled: _vm.question.isInputReadOnly,\n type: _vm.question.inputType,\n maxlength: _vm.question.getMaxLength(),\n min: _vm.question.renderedMin,\n max: _vm.question.renderedMax,\n step: _vm.question.renderedStep,\n size: _vm.question.inputSize,\n id: _vm.question.inputId,\n list: _vm.question.dataListId,\n placeholder: _vm.question.renderedPlaceHolder,\n autocomplete: _vm.question.autoComplete,\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 _vm._v(\" \"),\n _vm.question.dataListId\n ? _c(\n \"datalist\",\n { attrs: { id: _vm.question.dataListId } },\n _vm._l(_vm.question.dataList, function(item) {\n return _c(\"option\", { domProps: { value: item } })\n }),\n 0\n )\n : _vm._e()\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/timerpanel.vue?vue&type=template&id=0d2abe21&\":\n/*!*********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/timerpanel.vue?vue&type=template&id=0d2abe21& ***!\n \\*********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/titlecontent.vue?vue&type=template&id=cd49b83a&\":\n/*!***********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/titlecontent.vue?vue&type=template&id=cd49b83a& ***!\n \\***********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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.element.isRequireTextOnStart\n ? _c(\n \"span\",\n {\n class: _vm.element.cssClasses.requiredText,\n attrs: { \"aria-hidden\": true }\n },\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 attrs: { \"aria-hidden\": true }\n },\n [_vm._v(_vm._s(_vm.element.no))]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.element.isRequireTextBeforeTitle\n ? _c(\n \"span\",\n {\n class: _vm.element.cssClasses.requiredText,\n attrs: { \"aria-hidden\": true }\n },\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(\n \"span\",\n {\n class: _vm.element.cssClasses.requiredText,\n attrs: { \"aria-hidden\": true }\n },\n [_vm._v(_vm._s(_vm.element.requiredText))]\n )\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/window.vue?vue&type=template&id=62f588b2&\":\n/*!*****************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/window.vue?vue&type=template&id=62f588b2& ***!\n \\*****************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", 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\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\":\n/*!********************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/runtime/componentNormalizer.js ***!\n \\********************************************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return 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 // 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 = 'data-v-' + 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 () {\n injectStyles.call(\n this,\n (options.functional ? this.parent : this).$root.$options.shadowRoot\n )\n }\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 functional 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\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/Emit.js\":\n/*!********************************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/decorators/Emit.js ***!\n \\********************************************************************/\n/*! exports provided: Emit */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Emit\", function() { return Emit; });\nvar __spreadArrays = (undefined && undefined.__spreadArrays) || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) 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// Code copied from Vue/src/shared/util.js\nvar hyphenateRE = /\\B([A-Z])/g;\nvar hyphenate = function (str) { return str.replace(hyphenateRE, '-$1').toLowerCase(); };\n/**\n * decorator of an event-emitter function\n * @param event The name of the event\n * @return MethodDecorator\n */\nfunction Emit(event) {\n return function (_target, propertyKey, descriptor) {\n var key = hyphenate(propertyKey);\n var original = descriptor.value;\n descriptor.value = function emitter() {\n var _this = this;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var emit = function (returnValue) {\n var emitName = event || key;\n if (returnValue === undefined) {\n if (args.length === 0) {\n _this.$emit(emitName);\n }\n else if (args.length === 1) {\n _this.$emit(emitName, args[0]);\n }\n else {\n _this.$emit.apply(_this, __spreadArrays([emitName], args));\n }\n }\n else {\n args.unshift(returnValue);\n _this.$emit.apply(_this, __spreadArrays([emitName], args));\n }\n };\n var returnValue = original.apply(this, args);\n if (isPromise(returnValue)) {\n returnValue.then(emit);\n }\n else {\n emit(returnValue);\n }\n return returnValue;\n };\n };\n}\nfunction isPromise(obj) {\n return obj instanceof Promise || (obj && typeof obj.then === 'function');\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/Inject.js\":\n/*!**********************************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/decorators/Inject.js ***!\n \\**********************************************************************/\n/*! exports provided: Inject */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Inject\", function() { return Inject; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n\n/**\n * decorator of an inject\n * @param from key\n * @return PropertyDecorator\n */\nfunction Inject(options) {\n return Object(vue_class_component__WEBPACK_IMPORTED_MODULE_0__[\"createDecorator\"])(function (componentOptions, key) {\n if (typeof componentOptions.inject === 'undefined') {\n componentOptions.inject = {};\n }\n if (!Array.isArray(componentOptions.inject)) {\n componentOptions.inject[key] = options || key;\n }\n });\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/InjectReactive.js\":\n/*!******************************************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/decorators/InjectReactive.js ***!\n \\******************************************************************************/\n/*! exports provided: InjectReactive */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"InjectReactive\", function() { return InjectReactive; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n/* harmony import */ var _helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../helpers/provideInject */ \"./node_modules/vue-property-decorator/lib/helpers/provideInject.js\");\n\n\n/**\n * decorator of a reactive inject\n * @param from key\n * @return PropertyDecorator\n */\nfunction InjectReactive(options) {\n return Object(vue_class_component__WEBPACK_IMPORTED_MODULE_0__[\"createDecorator\"])(function (componentOptions, key) {\n if (typeof componentOptions.inject === 'undefined') {\n componentOptions.inject = {};\n }\n if (!Array.isArray(componentOptions.inject)) {\n var fromKey_1 = !!options ? options.from || options : key;\n var defaultVal_1 = (!!options && options.default) || undefined;\n if (!componentOptions.computed)\n componentOptions.computed = {};\n componentOptions.computed[key] = function () {\n var obj = this[_helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__[\"reactiveInjectKey\"]];\n return obj ? obj[fromKey_1] : defaultVal_1;\n };\n componentOptions.inject[_helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__[\"reactiveInjectKey\"]] = _helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__[\"reactiveInjectKey\"];\n }\n });\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/Model.js\":\n/*!*********************************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/decorators/Model.js ***!\n \\*********************************************************************/\n/*! exports provided: Model */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Model\", function() { return Model; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n/* harmony import */ var _helpers_metadata__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../helpers/metadata */ \"./node_modules/vue-property-decorator/lib/helpers/metadata.js\");\n\n\n/**\n * decorator of model\n * @param event event name\n * @param options options\n * @return PropertyDecorator\n */\nfunction Model(event, options) {\n if (options === void 0) { options = {}; }\n return function (target, key) {\n Object(_helpers_metadata__WEBPACK_IMPORTED_MODULE_1__[\"applyMetadata\"])(options, target, key);\n Object(vue_class_component__WEBPACK_IMPORTED_MODULE_0__[\"createDecorator\"])(function (componentOptions, k) {\n ;\n (componentOptions.props || (componentOptions.props = {}))[k] = options;\n componentOptions.model = { prop: k, event: event || k };\n })(target, key);\n };\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/ModelSync.js\":\n/*!*************************************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/decorators/ModelSync.js ***!\n \\*************************************************************************/\n/*! exports provided: ModelSync */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ModelSync\", function() { return ModelSync; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n/* harmony import */ var _helpers_metadata__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../helpers/metadata */ \"./node_modules/vue-property-decorator/lib/helpers/metadata.js\");\n\n\n/**\n * decorator of synced model and prop\n * @param propName the name to interface with from outside, must be different from decorated property\n * @param event event name\n * @param options options\n * @return PropertyDecorator\n */\nfunction ModelSync(propName, event, options) {\n if (options === void 0) { options = {}; }\n return function (target, key) {\n Object(_helpers_metadata__WEBPACK_IMPORTED_MODULE_1__[\"applyMetadata\"])(options, target, key);\n Object(vue_class_component__WEBPACK_IMPORTED_MODULE_0__[\"createDecorator\"])(function (componentOptions, k) {\n ;\n (componentOptions.props || (componentOptions.props = {}))[propName] = options;\n componentOptions.model = { prop: propName, event: event || k };\n (componentOptions.computed || (componentOptions.computed = {}))[k] = {\n get: function () {\n return this[propName];\n },\n set: function (value) {\n // @ts-ignore\n this.$emit(event, value);\n },\n };\n })(target, key);\n };\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/Prop.js\":\n/*!********************************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/decorators/Prop.js ***!\n \\********************************************************************/\n/*! exports provided: Prop */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Prop\", function() { return Prop; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n/* harmony import */ var _helpers_metadata__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../helpers/metadata */ \"./node_modules/vue-property-decorator/lib/helpers/metadata.js\");\n\n\n/**\n * decorator of a prop\n * @param options the options for the prop\n * @return PropertyDecorator | void\n */\nfunction Prop(options) {\n if (options === void 0) { options = {}; }\n return function (target, key) {\n Object(_helpers_metadata__WEBPACK_IMPORTED_MODULE_1__[\"applyMetadata\"])(options, target, key);\n Object(vue_class_component__WEBPACK_IMPORTED_MODULE_0__[\"createDecorator\"])(function (componentOptions, k) {\n ;\n (componentOptions.props || (componentOptions.props = {}))[k] = options;\n })(target, key);\n };\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/PropSync.js\":\n/*!************************************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/decorators/PropSync.js ***!\n \\************************************************************************/\n/*! exports provided: PropSync */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PropSync\", function() { return PropSync; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n/* harmony import */ var _helpers_metadata__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../helpers/metadata */ \"./node_modules/vue-property-decorator/lib/helpers/metadata.js\");\n\n\n/**\n * decorator of a synced prop\n * @param propName the name to interface with from outside, must be different from decorated property\n * @param options the options for the synced prop\n * @return PropertyDecorator | void\n */\nfunction PropSync(propName, options) {\n if (options === void 0) { options = {}; }\n return function (target, key) {\n Object(_helpers_metadata__WEBPACK_IMPORTED_MODULE_1__[\"applyMetadata\"])(options, target, key);\n Object(vue_class_component__WEBPACK_IMPORTED_MODULE_0__[\"createDecorator\"])(function (componentOptions, k) {\n ;\n (componentOptions.props || (componentOptions.props = {}))[propName] = options;\n (componentOptions.computed || (componentOptions.computed = {}))[k] = {\n get: function () {\n return this[propName];\n },\n set: function (value) {\n this.$emit(\"update:\" + propName, value);\n },\n };\n })(target, key);\n };\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/Provide.js\":\n/*!***********************************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/decorators/Provide.js ***!\n \\***********************************************************************/\n/*! exports provided: Provide */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Provide\", function() { return Provide; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n/* harmony import */ var _helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../helpers/provideInject */ \"./node_modules/vue-property-decorator/lib/helpers/provideInject.js\");\n\n\n/**\n * decorator of a provide\n * @param key key\n * @return PropertyDecorator | void\n */\nfunction Provide(key) {\n return Object(vue_class_component__WEBPACK_IMPORTED_MODULE_0__[\"createDecorator\"])(function (componentOptions, k) {\n var provide = componentOptions.provide;\n Object(_helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__[\"inheritInjected\"])(componentOptions);\n if (Object(_helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__[\"needToProduceProvide\"])(provide)) {\n provide = componentOptions.provide = Object(_helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__[\"produceProvide\"])(provide);\n }\n provide.managed[k] = key || k;\n });\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/ProvideReactive.js\":\n/*!*******************************************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/decorators/ProvideReactive.js ***!\n \\*******************************************************************************/\n/*! exports provided: ProvideReactive */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ProvideReactive\", function() { return ProvideReactive; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n/* harmony import */ var _helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../helpers/provideInject */ \"./node_modules/vue-property-decorator/lib/helpers/provideInject.js\");\n\n\n/**\n * decorator of a reactive provide\n * @param key key\n * @return PropertyDecorator | void\n */\nfunction ProvideReactive(key) {\n return Object(vue_class_component__WEBPACK_IMPORTED_MODULE_0__[\"createDecorator\"])(function (componentOptions, k) {\n var provide = componentOptions.provide;\n Object(_helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__[\"inheritInjected\"])(componentOptions);\n if (Object(_helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__[\"needToProduceProvide\"])(provide)) {\n provide = componentOptions.provide = Object(_helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__[\"produceProvide\"])(provide);\n }\n provide.managedReactive[k] = key || k;\n });\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/Ref.js\":\n/*!*******************************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/decorators/Ref.js ***!\n \\*******************************************************************/\n/*! exports provided: Ref */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Ref\", function() { return Ref; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n\n/**\n * decorator of a ref prop\n * @param refKey the ref key defined in template\n */\nfunction Ref(refKey) {\n return Object(vue_class_component__WEBPACK_IMPORTED_MODULE_0__[\"createDecorator\"])(function (options, key) {\n options.computed = options.computed || {};\n options.computed[key] = {\n cache: false,\n get: function () {\n return this.$refs[refKey || key];\n },\n };\n });\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/VModel.js\":\n/*!**********************************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/decorators/VModel.js ***!\n \\**********************************************************************/\n/*! exports provided: VModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"VModel\", function() { return VModel; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n\n/**\n * decorator for capturings v-model binding to component\n * @param options the options for the prop\n */\nfunction VModel(options) {\n if (options === void 0) { options = {}; }\n var valueKey = 'value';\n return Object(vue_class_component__WEBPACK_IMPORTED_MODULE_0__[\"createDecorator\"])(function (componentOptions, key) {\n ;\n (componentOptions.props || (componentOptions.props = {}))[valueKey] = options;\n (componentOptions.computed || (componentOptions.computed = {}))[key] = {\n get: function () {\n return this[valueKey];\n },\n set: function (value) {\n this.$emit('input', value);\n },\n };\n });\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/Watch.js\":\n/*!*********************************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/decorators/Watch.js ***!\n \\*********************************************************************/\n/*! exports provided: Watch */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Watch\", function() { return Watch; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\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 Object(vue_class_component__WEBPACK_IMPORTED_MODULE_0__[\"createDecorator\"])(function (componentOptions, handler) {\n if (typeof componentOptions.watch !== 'object') {\n componentOptions.watch = Object.create(null);\n }\n var watch = componentOptions.watch;\n if (typeof watch[path] === 'object' && !Array.isArray(watch[path])) {\n watch[path] = [watch[path]];\n }\n else if (typeof watch[path] === 'undefined') {\n watch[path] = [];\n }\n watch[path].push({ handler: handler, deep: deep, immediate: immediate });\n });\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/helpers/metadata.js\":\n/*!*********************************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/helpers/metadata.js ***!\n \\*********************************************************************/\n/*! exports provided: applyMetadata */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"applyMetadata\", function() { return applyMetadata; });\n/** @see {@link https://github.com/vuejs/vue-class-component/blob/master/src/reflect.ts} */\nvar reflectMetadataIsSupported = typeof Reflect !== 'undefined' && typeof Reflect.getMetadata !== 'undefined';\nfunction applyMetadata(options, target, key) {\n if (reflectMetadataIsSupported) {\n if (!Array.isArray(options) &&\n typeof options !== 'function' &&\n !options.hasOwnProperty('type') &&\n typeof options.type === 'undefined') {\n var type = Reflect.getMetadata('design:type', target, key);\n if (type !== Object) {\n options.type = type;\n }\n }\n }\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/helpers/provideInject.js\":\n/*!**************************************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/helpers/provideInject.js ***!\n \\**************************************************************************/\n/*! exports provided: needToProduceProvide, produceProvide, reactiveInjectKey, inheritInjected */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"needToProduceProvide\", function() { return needToProduceProvide; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"produceProvide\", function() { return produceProvide; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"reactiveInjectKey\", function() { return reactiveInjectKey; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"inheritInjected\", function() { return inheritInjected; });\nfunction needToProduceProvide(original) {\n return (typeof original !== 'function' ||\n (!original.managed && !original.managedReactive));\n}\nfunction produceProvide(original) {\n var provide = function () {\n var _this = this;\n var rv = typeof original === 'function' ? original.call(this) : original;\n rv = Object.create(rv || null);\n // set reactive services (propagates previous services if necessary)\n rv[reactiveInjectKey] = Object.create(this[reactiveInjectKey] || {});\n for (var i in provide.managed) {\n rv[provide.managed[i]] = this[i];\n }\n var _loop_1 = function (i) {\n rv[provide.managedReactive[i]] = this_1[i]; // Duplicates the behavior of `@Provide`\n Object.defineProperty(rv[reactiveInjectKey], provide.managedReactive[i], {\n enumerable: true,\n configurable: true,\n get: function () { return _this[i]; },\n });\n };\n var this_1 = this;\n for (var i in provide.managedReactive) {\n _loop_1(i);\n }\n return rv;\n };\n provide.managed = {};\n provide.managedReactive = {};\n return provide;\n}\n/** Used for keying reactive provide/inject properties */\nvar reactiveInjectKey = '__reactiveInject__';\nfunction inheritInjected(componentOptions) {\n // inject parent reactive services (if any)\n if (!Array.isArray(componentOptions.inject)) {\n componentOptions.inject = componentOptions.inject || {};\n componentOptions.inject[reactiveInjectKey] = {\n from: reactiveInjectKey,\n default: {},\n };\n }\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/index.js\":\n/*!**********************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/index.js ***!\n \\**********************************************************/\n/*! exports provided: Component, Vue, Mixins, Emit, Inject, InjectReactive, Model, ModelSync, Prop, PropSync, Provide, ProvideReactive, Ref, VModel, Watch */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony reexport (default from non-harmony) */ __webpack_require__.d(__webpack_exports__, \"Vue\", function() { return vue__WEBPACK_IMPORTED_MODULE_0___default.a; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Component\", function() { return vue_class_component__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Mixins\", function() { return vue_class_component__WEBPACK_IMPORTED_MODULE_1__[\"mixins\"]; });\n\n/* harmony import */ var _decorators_Emit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./decorators/Emit */ \"./node_modules/vue-property-decorator/lib/decorators/Emit.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Emit\", function() { return _decorators_Emit__WEBPACK_IMPORTED_MODULE_2__[\"Emit\"]; });\n\n/* harmony import */ var _decorators_Inject__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./decorators/Inject */ \"./node_modules/vue-property-decorator/lib/decorators/Inject.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Inject\", function() { return _decorators_Inject__WEBPACK_IMPORTED_MODULE_3__[\"Inject\"]; });\n\n/* harmony import */ var _decorators_InjectReactive__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./decorators/InjectReactive */ \"./node_modules/vue-property-decorator/lib/decorators/InjectReactive.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"InjectReactive\", function() { return _decorators_InjectReactive__WEBPACK_IMPORTED_MODULE_4__[\"InjectReactive\"]; });\n\n/* harmony import */ var _decorators_Model__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./decorators/Model */ \"./node_modules/vue-property-decorator/lib/decorators/Model.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Model\", function() { return _decorators_Model__WEBPACK_IMPORTED_MODULE_5__[\"Model\"]; });\n\n/* harmony import */ var _decorators_ModelSync__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./decorators/ModelSync */ \"./node_modules/vue-property-decorator/lib/decorators/ModelSync.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ModelSync\", function() { return _decorators_ModelSync__WEBPACK_IMPORTED_MODULE_6__[\"ModelSync\"]; });\n\n/* harmony import */ var _decorators_Prop__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./decorators/Prop */ \"./node_modules/vue-property-decorator/lib/decorators/Prop.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Prop\", function() { return _decorators_Prop__WEBPACK_IMPORTED_MODULE_7__[\"Prop\"]; });\n\n/* harmony import */ var _decorators_PropSync__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./decorators/PropSync */ \"./node_modules/vue-property-decorator/lib/decorators/PropSync.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PropSync\", function() { return _decorators_PropSync__WEBPACK_IMPORTED_MODULE_8__[\"PropSync\"]; });\n\n/* harmony import */ var _decorators_Provide__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./decorators/Provide */ \"./node_modules/vue-property-decorator/lib/decorators/Provide.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Provide\", function() { return _decorators_Provide__WEBPACK_IMPORTED_MODULE_9__[\"Provide\"]; });\n\n/* harmony import */ var _decorators_ProvideReactive__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./decorators/ProvideReactive */ \"./node_modules/vue-property-decorator/lib/decorators/ProvideReactive.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ProvideReactive\", function() { return _decorators_ProvideReactive__WEBPACK_IMPORTED_MODULE_10__[\"ProvideReactive\"]; });\n\n/* harmony import */ var _decorators_Ref__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./decorators/Ref */ \"./node_modules/vue-property-decorator/lib/decorators/Ref.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Ref\", function() { return _decorators_Ref__WEBPACK_IMPORTED_MODULE_11__[\"Ref\"]; });\n\n/* harmony import */ var _decorators_VModel__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./decorators/VModel */ \"./node_modules/vue-property-decorator/lib/decorators/VModel.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"VModel\", function() { return _decorators_VModel__WEBPACK_IMPORTED_MODULE_12__[\"VModel\"]; });\n\n/* harmony import */ var _decorators_Watch__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./decorators/Watch */ \"./node_modules/vue-property-decorator/lib/decorators/Watch.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Watch\", function() { return _decorators_Watch__WEBPACK_IMPORTED_MODULE_13__[\"Watch\"]; });\n\n/** vue-property-decorator verson 9.1.2 MIT LICENSE copyright 2020 kaorun343 */\n/// \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/***/ }),\n\n/***/ \"./src/actions/action.ts\":\n/*!*******************************!*\\\n !*** ./src/actions/action.ts ***!\n \\*******************************/\n/*! exports provided: Action */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Action\", function() { return Action; });\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../base */ \"./src/base.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../jsonobject */ \"./src/jsonobject.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\nvar Action = /** @class */ (function (_super) {\n __extends(Action, _super);\n function Action(item) {\n var _this = _super.call(this) || this;\n Object.assign(_this, item);\n return _this;\n }\n Object.defineProperty(Action.prototype, \"disabled\", {\n get: function () {\n return this.enabled !== undefined && !this.enabled;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Action.prototype, \"hasTitle\", {\n get: function () {\n return (((this.mode != \"small\" &&\n (this.showTitle || this.showTitle === undefined)) ||\n !this.iconName) &&\n !!this.title);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Action.prototype, \"isVisible\", {\n get: function () {\n return this.mode !== \"popup\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Action.prototype, \"canShrink\", {\n get: function () {\n return !!this.iconName;\n },\n enumerable: false,\n configurable: true\n });\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"id\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"iconName\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"visible\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"title\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"tooltip\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"enabled\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"showTitle\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"action\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"css\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"innerCss\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"data\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"popupModel\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"needSeparator\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"active\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"template\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"component\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"items\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"visibleIndex\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: \"large\" })\n ], Action.prototype, \"mode\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"disableTabStop\", void 0);\n return Action;\n}(_base__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/actions/adaptive-container.ts\":\n/*!*******************************************!*\\\n !*** ./src/actions/adaptive-container.ts ***!\n \\*******************************************/\n/*! exports provided: AdaptiveActionContainer */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AdaptiveActionContainer\", function() { return AdaptiveActionContainer; });\n/* harmony import */ var _list__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../list */ \"./src/list.ts\");\n/* harmony import */ var _popup__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../popup */ \"./src/popup.ts\");\n/* harmony import */ var _action__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./action */ \"./src/actions/action.ts\");\n/* harmony import */ var _container__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./container */ \"./src/actions/container.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\nvar AdaptiveActionContainer = /** @class */ (function (_super) {\n __extends(AdaptiveActionContainer, _super);\n function AdaptiveActionContainer() {\n var _this = _super.call(this) || this;\n _this.invisibleItemsListModel = new _list__WEBPACK_IMPORTED_MODULE_0__[\"ListModel\"]([], function (item) {\n _this.invisibleItemSelected(item);\n _this.dotsItemPopupModel.toggleVisibility();\n }, false);\n _this.dotsItemPopupModel = new _popup__WEBPACK_IMPORTED_MODULE_1__[\"PopupModel\"](\"sv-list\", {\n model: _this.invisibleItemsListModel\n });\n _this.dotsItem = new _action__WEBPACK_IMPORTED_MODULE_2__[\"Action\"]({\n id: \"dotsItem-id\",\n component: \"sv-action-bar-item-dropdown\",\n css: \"sv-dots\",\n innerCss: \"sv-dots__item\",\n iconName: \"icon-dots\",\n // showTitle: true,\n // title: \"...\",\n action: function (item) {\n _this.dotsItemPopupModel.toggleVisibility();\n },\n popupModel: _this.dotsItemPopupModel\n });\n return _this;\n }\n Object.defineProperty(AdaptiveActionContainer.prototype, \"visibleItems\", {\n get: function () {\n return this.actions.filter(function (item) { return item.mode !== \"popup\"; });\n },\n enumerable: false,\n configurable: true\n });\n AdaptiveActionContainer.prototype.setItems = function (items, sortByVisibleIndex) {\n if (sortByVisibleIndex === void 0) { sortByVisibleIndex = true; }\n var actions = items.map(function (item) { return (item instanceof _action__WEBPACK_IMPORTED_MODULE_2__[\"Action\"] ? item : new _action__WEBPACK_IMPORTED_MODULE_2__[\"Action\"](item)); });\n if (sortByVisibleIndex) {\n this.actions = this.sortItems(actions);\n }\n else {\n this.actions = actions;\n }\n };\n AdaptiveActionContainer.prototype.sortItems = function (items) {\n return []\n .concat(items.filter(function (item) { return item.visibleIndex >= 0 || item.visibleIndex === undefined; }))\n .sort(function (firstItem, secondItem) {\n return firstItem.visibleIndex - secondItem.visibleIndex;\n });\n };\n Object.defineProperty(AdaptiveActionContainer.prototype, \"hasItems\", {\n get: function () {\n return (this.actions || []).length > 0;\n },\n enumerable: false,\n configurable: true\n });\n AdaptiveActionContainer.prototype.invisibleItemSelected = function (item) {\n if (!!item && typeof item.action === \"function\") {\n item.action();\n }\n };\n AdaptiveActionContainer.prototype.showFirstN = function (visibleItemsCount) {\n var _this = this;\n var leftItemsToShow = visibleItemsCount;\n var invisibleItems = [];\n this.actions.forEach(function (item) {\n if (item === _this.dotsItem) {\n return;\n }\n if (leftItemsToShow <= 0) {\n item.mode = \"popup\";\n invisibleItems.push(item);\n }\n leftItemsToShow--;\n });\n this.invisibleItemsListModel.items = invisibleItems;\n this.addDotsButton(visibleItemsCount);\n };\n AdaptiveActionContainer.prototype.removeDotsButton = function () {\n var index = this.actions.indexOf(this.dotsItem);\n if (index !== -1) {\n this.actions.splice(index, 1);\n }\n };\n AdaptiveActionContainer.prototype.addDotsButton = function (newIndex) {\n if (newIndex < this.actions.length) {\n this.actions.splice(newIndex, 0, this.dotsItem);\n }\n };\n return AdaptiveActionContainer;\n}(_container__WEBPACK_IMPORTED_MODULE_3__[\"ActionContainer\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/actions/container.ts\":\n/*!**********************************!*\\\n !*** ./src/actions/container.ts ***!\n \\**********************************/\n/*! exports provided: ActionContainer */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ActionContainer\", function() { return ActionContainer; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../base */ \"./src/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\nvar ActionContainer = /** @class */ (function (_super) {\n __extends(ActionContainer, _super);\n function ActionContainer() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(ActionContainer.prototype, \"hasItems\", {\n get: function () {\n return (this.actions || []).length > 0;\n },\n enumerable: false,\n configurable: true\n });\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"propertyArray\"])()\n ], ActionContainer.prototype, \"actions\", void 0);\n return ActionContainer;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"Base\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/base.ts\":\n/*!*********************!*\\\n !*** ./src/base.ts ***!\n \\*********************/\n/*! exports provided: Bindings, Base, ArrayChanges, Event, EventBase */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Bindings\", function() { return Bindings; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Base\", function() { return Base; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ArrayChanges\", function() { return ArrayChanges; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Event\", function() { return Event; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"EventBase\", function() { return EventBase; });\n/* harmony import */ var _localizablestring__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./localizablestring */ \"./src/localizablestring.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __spreadArray = (undefined && undefined.__spreadArray) || function (to, from) {\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n to[j] = from[i];\n return to;\n};\n\n\n\n\nvar Bindings = /** @class */ (function () {\n function Bindings(obj) {\n this.obj = obj;\n this.properties = null;\n this.values = null;\n }\n Bindings.prototype.getType = function () {\n return \"bindings\";\n };\n Bindings.prototype.getNames = function () {\n var res = [];\n this.fillProperties();\n for (var i = 0; i < this.properties.length; i++) {\n if (this.properties[i].isVisible(\"\", this.obj)) {\n res.push(this.properties[i].name);\n }\n }\n return res;\n };\n Bindings.prototype.getProperties = function () {\n var res = [];\n this.fillProperties();\n for (var i = 0; i < this.properties.length; i++) {\n res.push(this.properties[i]);\n }\n return res;\n };\n Bindings.prototype.setBinding = function (propertyName, valueName) {\n if (!this.values)\n this.values = {};\n if (!!valueName) {\n this.values[propertyName] = valueName;\n }\n else {\n delete this.values[propertyName];\n if (Object.keys(this.values).length == 0) {\n this.values = null;\n }\n }\n };\n Bindings.prototype.clearBinding = function (propertyName) {\n this.setBinding(propertyName, \"\");\n };\n Bindings.prototype.isEmpty = function () {\n return !this.values;\n };\n Bindings.prototype.getValueNameByPropertyName = function (propertyName) {\n if (!this.values)\n return undefined;\n return this.values[propertyName];\n };\n Bindings.prototype.getPropertiesByValueName = function (valueName) {\n if (!this.values)\n return [];\n var res = [];\n for (var key in this.values) {\n if (this.values[key] == valueName) {\n res.push(key);\n }\n }\n return res;\n };\n Bindings.prototype.getJson = function () {\n if (this.isEmpty())\n return null;\n var res = {};\n for (var key in this.values) {\n res[key] = this.values[key];\n }\n return res;\n };\n Bindings.prototype.setJson = function (value) {\n this.values = null;\n if (!value)\n return;\n this.values = {};\n for (var key in value) {\n this.values[key] = value[key];\n }\n };\n Bindings.prototype.fillProperties = function () {\n if (this.properties !== null)\n return;\n this.properties = [];\n var objProperties = _jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].getPropertiesByObj(this.obj);\n for (var i = 0; i < objProperties.length; i++) {\n if (objProperties[i].isBindable) {\n this.properties.push(objProperties[i]);\n }\n }\n };\n return Bindings;\n}());\n\n/**\n * The base class for SurveyJS objects.\n */\nvar Base = /** @class */ (function () {\n function Base() {\n this.propertyHash = {};\n this.eventList = [];\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 = this.addEvent();\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 = this.addEvent();\n this.isCreating = true;\n this.bindingsValue = new Bindings(this);\n _jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"CustomPropertiesCollection\"].createProperties(this);\n this.onBaseCreating();\n this.isCreating = false;\n }\n Object.defineProperty(Base, \"commentPrefix\", {\n get: function () {\n return _settings__WEBPACK_IMPORTED_MODULE_3__[\"settings\"].commentPrefix;\n },\n set: function (val) {\n _settings__WEBPACK_IMPORTED_MODULE_3__[\"settings\"].commentPrefix = val;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Returns true if a value undefined, null, empty string or empty array.\n *\n * @param value\n * @param trimString a boolean parameter, default value true. If true then it trims the string and functions returns true for a string that contains white spaces only.\n */\n Base.prototype.isValueEmpty = function (value, trimString) {\n if (trimString === void 0) { trimString = true; }\n if (trimString) {\n value = this.trimValue(value);\n }\n return _helpers__WEBPACK_IMPORTED_MODULE_1__[\"Helpers\"].isValueEmpty(value);\n };\n Base.prototype.trimValue = function (value) {\n if (!!value && (typeof value === \"string\" || value instanceof String))\n return value.trim();\n return value;\n };\n Base.prototype.IsPropertyEmpty = function (value) {\n return value !== \"\" && this.isValueEmpty(value);\n };\n Base.prototype.dispose = function () {\n for (var i = 0; i < this.eventList.length; i++) {\n this.eventList[i].clear();\n }\n this.isDisposedValue = true;\n };\n Object.defineProperty(Base.prototype, \"isDisposed\", {\n get: function () {\n return this.isDisposedValue === true;\n },\n enumerable: false,\n configurable: true\n });\n Base.prototype.addEvent = function () {\n var res = new EventBase();\n this.eventList.push(res);\n return res;\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 Base.prototype.getSurvey = function (isLive) {\n if (isLive === void 0) { isLive = false; }\n return null;\n };\n Object.defineProperty(Base.prototype, \"inSurvey\", {\n /**\n * Returns true if the object is inluded into survey, otherwise returns false.\n */\n get: function () {\n return !!this.getSurvey(true);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Base.prototype, \"bindings\", {\n get: function () {\n return this.bindingsValue;\n },\n enumerable: false,\n configurable: true\n });\n Base.prototype.checkBindings = function (valueName, value) { };\n Base.prototype.updateBindings = function (propertyName, value) {\n var valueName = this.bindings.getValueNameByPropertyName(propertyName);\n if (!!valueName) {\n this.updateBindingValue(valueName, value);\n }\n };\n Base.prototype.updateBindingValue = function (valueName, value) { };\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: false,\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 _jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"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 _jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"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 = _jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].createClass(this.getType());\n clonedObj.fromJSON(this.toJSON());\n return clonedObj;\n };\n /**\n * Returns the serializable property that belongs to this instance by property name. It returns null if the property is not exists.\n * @param propName property name\n * @returns\n */\n Base.prototype.getPropertyByName = function (propName) {\n return _jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].findProperty(this.getType(), propName);\n };\n Base.prototype.isPropertyVisible = function (propName) {\n var prop = this.getPropertyByName(propName);\n return !!prop ? prop.isVisible(\"\", this) : false;\n };\n Base.createProgressInfo = function () {\n return {\n questionCount: 0,\n answeredQuestionCount: 0,\n requiredQuestionCount: 0,\n requiredAnsweredQuestionCount: 0,\n };\n };\n Base.prototype.getProgressInfo = function () {\n return Base.createProgressInfo();\n };\n Base.prototype.localeChanged = function () { };\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 = _jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].findProperty(this.getType(), name);\n if (!!prop && (!prop.isCustom || !this.isCreating)) {\n if (!this.IsPropertyEmpty(prop.defaultValue) &&\n !Array.isArray(prop.defaultValue))\n return prop.defaultValue;\n if (prop.type == \"boolean\" || prop.type == \"switch\")\n return false;\n if (prop.isCustom && !!prop.onGetValue)\n return prop.onGetValue(this);\n }\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 && !this.isDisposedValue)\n this.setPropertyValueCoreHandler(propertiesHash, name, val);\n else\n propertiesHash[name] = val;\n };\n Object.defineProperty(Base.prototype, \"isEditingSurveyElement\", {\n get: function () {\n var survey = this.getSurvey();\n return !!survey && survey.isEditingSurveyElement;\n },\n enumerable: false,\n configurable: true\n });\n Base.prototype.iteratePropertiesHash = function (func) {\n var _this = this;\n var keys = [];\n for (var key in this.propertyHash) {\n if (key === \"value\" &&\n this.isEditingSurveyElement &&\n Array.isArray(this.value))\n continue;\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 }\n else {\n this.setPropertyValueCore(this.propertyHash, name, val);\n if (!this.isDisposedValue && !this.isTwoValueEquals(oldValue, val)) {\n this.propertyValueChanged(name, oldValue, val);\n }\n }\n };\n Base.prototype.clearPropertyValue = function (name) {\n this.setPropertyValueCore(this.propertyHash, name, null);\n delete this.propertyHash[name];\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.updateBindings(name, newValue);\n this.onPropertyValueChanged(name, oldValue, newValue);\n this.onPropertyChanged.fire(this, {\n name: name,\n oldValue: oldValue,\n newValue: newValue,\n });\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 Object.defineProperty(Base.prototype, \"isInternal\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n Base.prototype.doPropertyValueChangedCallback = function (name, oldValue, newValue, arrayChanges, target) {\n if (this.isInternal)\n return;\n if (!target)\n target = this;\n var notifier = this.getSurvey();\n if (!notifier)\n notifier = this;\n if (!!notifier.doPropertyValueChangedCallback) {\n notifier.onPropertyValueChangedCallback(name, oldValue, newValue, target, arrayChanges);\n }\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 var _this = this;\n if (useMarkDown === void 0) { useMarkDown = false; }\n var locStr = new _localizablestring__WEBPACK_IMPORTED_MODULE_0__[\"LocalizableString\"](owner, useMarkDown, name);\n locStr.onStrChanged = function (oldValue, newValue) {\n _this.propertyValueChanged(name, oldValue, newValue);\n };\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 locStr.text = 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.searchText = function (text, founded) {\n var strs = [];\n this.getSearchableLocalizedStrings(strs);\n for (var i = 0; i < strs.length; i++) {\n if (strs[i].setFindText(text)) {\n founded.push({ element: this, str: strs[i] });\n }\n }\n };\n Base.prototype.getSearchableLocalizedStrings = function (arr) {\n if (!!this.localizableStrings) {\n var keys_1 = [];\n this.getSearchableLocKeys(keys_1);\n for (var i = 0; i < keys_1.length; i++) {\n var item = this.getLocalizableString(keys_1[i]);\n if (item)\n arr.push(item);\n }\n }\n if (!this.arraysInfo)\n return;\n var keys = [];\n this.getSearchableItemValueKeys(keys);\n for (var i = 0; i < keys.length; i++) {\n var items = this.getPropertyValue(keys[i]);\n if (!items)\n continue;\n for (var j = 0; j < items.length; j++) {\n arr.push(items[j].locText);\n }\n }\n };\n Base.prototype.getSearchableLocKeys = function (keys) { };\n Base.prototype.getSearchableItemValueKeys = function (keys) { };\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, arrayChanges) {\n !!ar.onArrayChanged && ar.onArrayChanged(arrayChanges);\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.ensureArray = function (name, onPush, onRemove) {\n if (onPush === void 0) { onPush = null; }\n if (onRemove === void 0) { onRemove = null; }\n if (this.arraysInfo && this.arraysInfo[name]) {\n return;\n }\n return this.createNewArray(name, onPush, onRemove);\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 (!self.isDisposedValue) {\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, arrayChanges);\n }\n return result;\n };\n newArray.unshift = function (value) {\n var result = Object.getPrototypeOf(newArray).unshift.call(newArray, value);\n if (!self.isDisposedValue) {\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, arrayChanges);\n }\n return result;\n };\n newArray.pop = function () {\n var result = Object.getPrototypeOf(newArray).pop.call(newArray);\n if (!self.isDisposedValue) {\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, arrayChanges);\n }\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, __spreadArray([newArray,\n start,\n deleteCount], items));\n if (!items)\n items = [];\n if (!self.isDisposedValue) {\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, arrayChanges);\n }\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, arrayChanges);\n };\n Base.prototype.isTwoValueEquals = function (x, y, caseInSensitive, trimString) {\n if (caseInSensitive === void 0) { caseInSensitive = false; }\n if (trimString === void 0) { trimString = false; }\n if (caseInSensitive) {\n x = this.getValueInLowCase(x);\n y = this.getValueInLowCase(y);\n }\n if (trimString) {\n x = this.trimValue(x);\n y = this.trimValue(y);\n }\n return _helpers__WEBPACK_IMPORTED_MODULE_1__[\"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 Base.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 Event = /** @class */ (function () {\n function Event() {\n }\n Object.defineProperty(Event.prototype, \"isEmpty\", {\n get: function () {\n return !this.callbacks || this.callbacks.length == 0;\n },\n enumerable: false,\n configurable: true\n });\n Event.prototype.fire = function (sender, options) {\n if (!this.callbacks)\n return;\n for (var i = 0; i < this.callbacks.length; i++) {\n this.callbacks[i](sender, options);\n if (!this.callbacks)\n return;\n }\n };\n Event.prototype.clear = function () {\n this.callbacks = undefined;\n };\n Event.prototype.add = function (func) {\n if (this.hasFunc(func))\n return;\n if (!this.callbacks) {\n this.callbacks = new Array();\n }\n this.callbacks.push(func);\n this.fireCallbackChanged();\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 this.fireCallbackChanged();\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 Event.prototype.fireCallbackChanged = function () {\n if (!!this.onCallbacksChanged) {\n this.onCallbacksChanged();\n }\n };\n return Event;\n}());\n\nvar EventBase = /** @class */ (function (_super) {\n __extends(EventBase, _super);\n function EventBase() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return EventBase;\n}(Event));\n\n\n\n/***/ }),\n\n/***/ \"./src/calculatedValue.ts\":\n/*!********************************!*\\\n !*** ./src/calculatedValue.ts ***!\n \\********************************/\n/*! exports provided: CalculatedValue */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CalculatedValue\", function() { return CalculatedValue; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./conditions */ \"./src/conditions.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\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 __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 CalculatedValue.prototype.getSurvey = function (live) {\n if (live === void 0) { live = false; }\n return !!this.data && !!this.data[\"getSurvey\"]\n ? this.data.getSurvey()\n : null;\n };\n Object.defineProperty(CalculatedValue.prototype, \"owner\", {\n get: function () {\n return this.data;\n },\n enumerable: false,\n configurable: true\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: false,\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: false,\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: false,\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: false,\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: false,\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 _conditions__WEBPACK_IMPORTED_MODULE_2__[\"ExpressionRunner\"](this.expression);\n this.expressionRunner.onRunComplete = function (newValue) {\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isTwoValueEquals(newValue, _this.value)) {\n _this.setValue(newValue);\n }\n _this.unlocCalculation();\n };\n };\n return CalculatedValue;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"Base\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_3__[\"Serializer\"].addClass(\"calculatedvalue\", [\n { name: \"!name\", isUnique: true },\n \"expression:expression\",\n \"includeIntoResult:boolean\",\n], function () {\n return new CalculatedValue();\n}, \"base\");\n\n\n/***/ }),\n\n/***/ \"./src/choicesRestful.ts\":\n/*!*******************************!*\\\n !*** ./src/choicesRestful.ts ***!\n \\*******************************/\n/*! exports provided: ChoicesRestful, ChoicesRestfull */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ChoicesRestful\", function() { return ChoicesRestful; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ChoicesRestfull\", function() { return ChoicesRestfull; });\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\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 restful service and results can be get on getResultCallback.\n */\nvar ChoicesRestful = /** @class */ (function (_super) {\n __extends(ChoicesRestful, _super);\n function ChoicesRestful() {\n var _this = _super.call(this) || this;\n _this.lastObjHash = \"\";\n _this.isRunningValue = false;\n _this.processedUrl = \"\";\n _this.processedPath = \"\";\n _this.isUsingCacheFromUrl = undefined;\n _this.error = null;\n _this.createItemValue = function (value) {\n return new _itemvalue__WEBPACK_IMPORTED_MODULE_1__[\"ItemValue\"](value);\n };\n return _this;\n }\n Object.defineProperty(ChoicesRestful, \"EncodeParameters\", {\n get: function () {\n return _settings__WEBPACK_IMPORTED_MODULE_4__[\"settings\"].webserviceEncodeParameters;\n },\n set: function (val) {\n _settings__WEBPACK_IMPORTED_MODULE_4__[\"settings\"].webserviceEncodeParameters = val;\n },\n enumerable: false,\n configurable: true\n });\n ChoicesRestful.clearCache = function () {\n ChoicesRestful.itemsResult = {};\n ChoicesRestful.sendingSameRequests = {};\n };\n ChoicesRestful.addSameRequest = function (obj) {\n if (!obj.isUsingCache)\n return false;\n var hash = obj.objHash;\n var res = ChoicesRestful.sendingSameRequests[hash];\n if (!res) {\n ChoicesRestful.sendingSameRequests[obj.objHash] = [];\n return false;\n }\n res.push(obj);\n obj.isRunningValue = true;\n return true;\n };\n ChoicesRestful.unregisterSameRequests = function (obj, items) {\n if (!obj.isUsingCache)\n return;\n var res = ChoicesRestful.sendingSameRequests[obj.objHash];\n delete ChoicesRestful.sendingSameRequests[obj.objHash];\n if (!res)\n return;\n for (var i = 0; i < res.length; i++) {\n res[i].isRunningValue = false;\n if (!!res[i].getResultCallback) {\n res[i].getResultCallback(items);\n }\n }\n };\n ChoicesRestful.getCachedItemsResult = function (obj) {\n var hash = obj.objHash;\n var res = ChoicesRestful.itemsResult[hash];\n if (!res)\n return false;\n if (obj.getResultCallback) {\n obj.getResultCallback(res);\n }\n return true;\n };\n ChoicesRestful.prototype.getSurvey = function (live) {\n if (live === void 0) { live = false; }\n return !!this.owner ? this.owner.survey : null;\n };\n ChoicesRestful.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 (ChoicesRestful.addSameRequest(this))\n return;\n this.sendRequest();\n };\n Object.defineProperty(ChoicesRestful.prototype, \"isUsingCache\", {\n get: function () {\n if (this.isUsingCacheFromUrl === true)\n return true;\n if (this.isUsingCacheFromUrl === false)\n return false;\n return _settings__WEBPACK_IMPORTED_MODULE_4__[\"settings\"].useCachingForChoicesRestful;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ChoicesRestful.prototype, \"isRunning\", {\n get: function () {\n return this.getIsRunning();\n },\n enumerable: false,\n configurable: true\n });\n ChoicesRestful.prototype.getIsRunning = function () {\n return this.isRunningValue;\n };\n Object.defineProperty(ChoicesRestful.prototype, \"isWaitingForParameters\", {\n get: function () {\n return this.url && !this.processedUrl;\n },\n enumerable: false,\n configurable: true\n });\n ChoicesRestful.prototype.useChangedItemsResults = function () {\n return ChoicesRestful.getCachedItemsResult(this);\n };\n ChoicesRestful.prototype.doEmptyResultCallback = function (serverResult) {\n var items = [];\n if (this.updateResultCallback) {\n items = this.updateResultCallback(items, serverResult);\n }\n this.getResultCallback(items);\n };\n ChoicesRestful.prototype.processedText = function (textProcessor) {\n var urlText = this.url;\n if (!!urlText) {\n urlText = urlText\n .replace(ChoicesRestful.cacheText, \"\")\n .replace(ChoicesRestful.noCacheText, \"\");\n }\n if (textProcessor) {\n var pUrl = textProcessor.processTextEx(urlText, false, _settings__WEBPACK_IMPORTED_MODULE_4__[\"settings\"].webserviceEncodeParameters);\n var pPath = textProcessor.processTextEx(this.path, false, _settings__WEBPACK_IMPORTED_MODULE_4__[\"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 = urlText;\n this.processedPath = this.path;\n }\n if (this.onProcessedUrlCallback) {\n this.onProcessedUrlCallback(this.processedUrl, this.processedPath);\n }\n };\n ChoicesRestful.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 ChoicesRestful.prototype.sendRequest = function () {\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.beforeLoadRequest();\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 (!!ChoicesRestful.onBeforeSendRequest) {\n ChoicesRestful.onBeforeSendRequest(this, options);\n }\n this.beforeSendRequest();\n options.request.send();\n };\n ChoicesRestful.prototype.getType = function () {\n return \"choicesByUrl\";\n };\n Object.defineProperty(ChoicesRestful.prototype, \"isEmpty\", {\n get: function () {\n return (!this.url &&\n !this.path &&\n !this.valueName &&\n !this.titleName &&\n !this.imageLinkName);\n },\n enumerable: false,\n configurable: true\n });\n ChoicesRestful.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 ChoicesRestful.prototype.getCustomPropertyName = function (propertyName) {\n return propertyName + \"Name\";\n };\n ChoicesRestful.prototype.getCustomProperties = function () {\n var properties = _jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"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 ChoicesRestful.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.imageLinkName)\n this.imageLinkName = json.imageLinkName;\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 ChoicesRestful.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.imageLinkName)\n res[\"imageLinkName\"] = this.imageLinkName;\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(ChoicesRestful.prototype, \"url\", {\n /**\n * Gets or sets a link to a web service. You can use text preprocessing here.\n * For example, the following url: _https://restcountries.eu/rest/v2/region/{region}_ is changed based on the _region_ question's value.\n * SurveyJS automatically gets data from the web service when the value of the _region_ question changes.\n * @see path\n * @see valueName\n * @see titleName\n * @see [Example: RESTful Dropdown](https://surveyjs.io/Examples/Library/?id=questiontype-dropdownrestfull)\n * @see [Docs: Fill Choices from a RESTful Service](https://surveyjs.io/Documentation/Library/?id=LibraryOverview#fill-the-choices-from-a-restful-service)\n */\n get: function () {\n return this.getPropertyValue(\"url\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"url\", val);\n this.isUsingCacheFromUrl = undefined;\n if (!val)\n return;\n if (val.indexOf(ChoicesRestful.cacheText) > -1) {\n this.isUsingCacheFromUrl = true;\n }\n else {\n if (val.indexOf(ChoicesRestful.noCacheText) > -1) {\n this.isUsingCacheFromUrl = false;\n }\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ChoicesRestful.prototype, \"path\", {\n /**\n * Use this property, if a web service returns a lot of information and you need only a part of it.\n * For example, a web service returns a list of countries and a list of capitals.\n * If you need a list of countries, set a correct path from which SurveyJS obtains the data, like: _DataList1\\DataList2_\n * @see url\n * @see valueName\n * @see titleName\n * @see [Example: RESTful Dropdown](https://surveyjs.io/Examples/Library/?id=questiontype-dropdownrestfull)\n * @see [Docs: Fill Choices from a RESTful Service](https://surveyjs.io/Documentation/Library/?id=LibraryOverview#fill-the-choices-from-a-restful-service)\n */\n get: function () {\n return this.getPropertyValue(\"path\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"path\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ChoicesRestful.prototype, \"valueName\", {\n /**\n * Gets or sets the name of a property (in the obtained data object) to which SurveyJS binds to provide values for choice items.\n * @see url\n * @see path\n * @see titleName\n * @see [Example: RESTful Dropdown](https://surveyjs.io/Examples/Library/?id=questiontype-dropdownrestfull)\n * @see [Docs: Fill Choices from a RESTful Service](https://surveyjs.io/Documentation/Library/?id=LibraryOverview#fill-the-choices-from-a-restful-service)\n */\n get: function () {\n return this.getPropertyValue(\"valueName\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"valueName\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ChoicesRestful.prototype, \"titleName\", {\n /**\n * Gets or sets the name of a property (in the obtained data object) to which SurveyJS binds to provide display texts for choice items.\n * @see url\n * @see path\n * @see valueeName\n * @see [Example: RESTful Dropdown](https://surveyjs.io/Examples/Library/?id=questiontype-dropdownrestfull)\n * @see [Docs: Fill Choices from a RESTful Service](https://surveyjs.io/Documentation/Library/?id=LibraryOverview#fill-the-choices-from-a-restful-service)\n */\n get: function () {\n return this.getPropertyValue(\"titleName\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"titleName\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ChoicesRestful.prototype, \"imageLinkName\", {\n get: function () {\n return this.getPropertyValue(\"imageLinkName\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"imageLinkName\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ChoicesRestful.prototype, \"allowEmptyResponse\", {\n get: function () {\n return this.getPropertyValue(\"allowEmptyResponse\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"allowEmptyResponse\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ChoicesRestful.prototype, \"attachOriginalItems\", {\n get: function () {\n return this.getPropertyValue(\"attachOriginalItems\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"attachOriginalItems\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ChoicesRestful.prototype, \"itemValueType\", {\n get: function () {\n if (!this.owner)\n return \"itemvalue\";\n var prop = _jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"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: false,\n configurable: true\n });\n ChoicesRestful.prototype.clear = function () {\n this.url = \"\";\n this.path = \"\";\n this.valueName = \"\";\n this.titleName = \"\";\n this.imageLinkName = \"\";\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 ChoicesRestful.prototype.beforeSendRequest = function () {\n this.isRunningValue = true;\n if (!!this.beforeSendRequestCallback) {\n this.beforeSendRequestCallback();\n }\n };\n ChoicesRestful.prototype.beforeLoadRequest = function () {\n this.isRunningValue = false;\n };\n ChoicesRestful.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 item = this.createItemValue(value);\n this.setTitle(item, itemValue);\n this.setCustomProperties(item, itemValue);\n if (this.attachOriginalItems) {\n item.originalItem = itemValue;\n }\n var imageLink = this.getImageLink(itemValue);\n if (!!imageLink) {\n item.imageLink = imageLink;\n }\n items.push(item);\n }\n }\n else {\n if (!this.allowEmptyResponse) {\n this.error = new _error__WEBPACK_IMPORTED_MODULE_3__[\"WebRequestEmptyError\"](null, this.owner);\n }\n }\n if (this.updateResultCallback) {\n items = this.updateResultCallback(items, result);\n }\n if (this.isUsingCache) {\n ChoicesRestful.itemsResult[loadingObjHash] = items;\n }\n this.callResultCallback(items, loadingObjHash);\n ChoicesRestful.unregisterSameRequests(this, items);\n };\n ChoicesRestful.prototype.callResultCallback = function (items, loadingObjHash) {\n if (loadingObjHash != this.objHash)\n return;\n this.getResultCallback(items);\n };\n ChoicesRestful.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 ChoicesRestful.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 ChoicesRestful.prototype.onError = function (status, response) {\n this.error = new _error__WEBPACK_IMPORTED_MODULE_3__[\"WebRequestError\"](status, response, this.owner);\n this.doEmptyResultCallback(response);\n ChoicesRestful.unregisterSameRequests(this, []);\n };\n ChoicesRestful.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 ChoicesRestful.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 ChoicesRestful.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 ChoicesRestful.prototype.setTitle = function (item, itemValue) {\n var title = this.titleName ? this.titleName : \"title\";\n var val = this.getValueCore(itemValue, title);\n if (!val)\n return;\n if (typeof val === \"string\") {\n item.text = val;\n }\n else {\n item.locText.setJson(val);\n }\n };\n ChoicesRestful.prototype.getImageLink = function (item) {\n var imageLink = this.imageLinkName ? this.imageLinkName : \"imageLink\";\n return this.getValueCore(item, imageLink);\n };\n ChoicesRestful.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(ChoicesRestful.prototype, \"objHash\", {\n get: function () {\n return (this.processedUrl +\n \";\" +\n this.processedPath +\n \";\" +\n this.valueName +\n \";\" +\n this.titleName +\n \";\" +\n this.imageLinkName);\n },\n enumerable: false,\n configurable: true\n });\n ChoicesRestful.cacheText = \"{CACHE}\";\n ChoicesRestful.noCacheText = \"{NOCACHE}\";\n ChoicesRestful.itemsResult = {};\n ChoicesRestful.sendingSameRequests = {};\n return ChoicesRestful;\n}(_base__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]));\n\n/**\n * Obsolete, please use ChoicesRestful\n */\nvar ChoicesRestfull = /** @class */ (function (_super) {\n __extends(ChoicesRestfull, _super);\n function ChoicesRestfull() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(ChoicesRestfull, \"EncodeParameters\", {\n get: function () {\n return ChoicesRestful.EncodeParameters;\n },\n set: function (val) {\n ChoicesRestful.EncodeParameters = val;\n },\n enumerable: false,\n configurable: true\n });\n ChoicesRestfull.clearCache = function () {\n ChoicesRestful.clearCache();\n };\n Object.defineProperty(ChoicesRestfull, \"onBeforeSendRequest\", {\n get: function () {\n return ChoicesRestful.onBeforeSendRequest;\n },\n set: function (val) {\n ChoicesRestful.onBeforeSendRequest = val;\n },\n enumerable: false,\n configurable: true\n });\n return ChoicesRestfull;\n}(ChoicesRestful));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"choicesByUrl\", [\n \"url\",\n \"path\",\n \"valueName\",\n \"titleName\",\n {\n name: \"imageLinkName\",\n visibleIf: function (obj) {\n return !!obj && !!obj.owner && obj.owner.getType() == \"imagepicker\";\n },\n },\n { name: \"allowEmptyResponse:boolean\", default: false },\n { name: \"attachOriginalItems:boolean\", default: false, visible: false },\n], function () {\n return new ChoicesRestful();\n});\n\n\n/***/ }),\n\n/***/ \"./src/conditionProcessValue.ts\":\n/*!**************************************!*\\\n !*** ./src/conditionProcessValue.ts ***!\n \\**************************************/\n/*! exports provided: ProcessValue */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ProcessValue\", function() { return ProcessValue; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\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.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.setValue = function (obj, text, value) {\n if (!text)\n return;\n var nonNestedObj = this.getNonNestedObject(obj, text, true);\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.getValueInfo = function (valueInfo) {\n if (!!valueInfo.path) {\n valueInfo.value = this.getValueFromPath(valueInfo.path, this.values);\n valueInfo.hasValue =\n valueInfo.value !== null && !_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(valueInfo.value);\n if (!valueInfo.hasValue &&\n valueInfo.path.length > 1 &&\n valueInfo.path[valueInfo.path.length - 1] == \"length\") {\n valueInfo.hasValue = true;\n valueInfo.value = 0;\n }\n return;\n }\n var res = this.getValueCore(valueInfo.name, this.values);\n valueInfo.value = res.value;\n valueInfo.hasValue = res.hasValue;\n valueInfo.path = res.hasValue ? res.path : null;\n };\n ProcessValue.prototype.getValueFromPath = function (path, values) {\n var index = 0;\n while (!!values && index < path.length) {\n var ind_name = path[index];\n if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isNumber(ind_name) &&\n Array.isArray(values) &&\n ind_name >= values.length)\n return null;\n values = values[ind_name];\n index++;\n }\n return values;\n };\n ProcessValue.prototype.getValueCore = function (text, values) {\n var res = { hasValue: false, value: null, path: 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, false);\n if (!nonNestedObj)\n return res;\n res.path = nonNestedObj.path;\n res.value = !!nonNestedObj.text\n ? this.getObjectValue(nonNestedObj.value, nonNestedObj.text)\n : nonNestedObj.value;\n res.hasValue = !_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(res.value);\n return res;\n };\n ProcessValue.prototype.getNonNestedObject = function (obj, text, createPath) {\n var curName = this.getFirstPropertyName(text, obj, createPath);\n var path = !!curName ? [curName] : null;\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, path: path };\n obj = this.getObjectValue(obj, curName);\n if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(obj) && !createPath)\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 path.push(objInArray.index);\n }\n if (!!text && text[0] == \".\") {\n text = text.substr(1);\n }\n curName = this.getFirstPropertyName(text, obj, createPath);\n if (!!curName) {\n path.push(curName);\n }\n }\n return { value: obj, text: text, path: path };\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, index: index };\n };\n ProcessValue.prototype.getFirstPropertyName = function (name, obj, createProp) {\n if (createProp === void 0) { createProp = false; }\n if (!name)\n return name;\n if (!obj)\n obj = {};\n if (obj.hasOwnProperty(name))\n return name;\n var nameInLow = name.toLowerCase();\n var A = nameInLow[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 == nameInLow)\n return key;\n if (nameInLow.length <= keyName.length)\n continue;\n var ch = nameInLow[keyName.length];\n if (ch != \".\" && ch != \"[\")\n continue;\n if (keyName == nameInLow.substr(0, keyName.length))\n return key;\n }\n }\n if (createProp && name[0] !== \"[\") {\n var ind = name.indexOf(\".\");\n if (ind > -1) {\n name = name.substr(0, ind);\n obj[name] = {};\n }\n return name;\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\n/***/ \"./src/conditions.ts\":\n/*!***************************!*\\\n !*** ./src/conditions.ts ***!\n \\***************************/\n/*! exports provided: ExpressionRunnerBase, ConditionRunner, ExpressionRunner */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ExpressionRunnerBase\", function() { return ExpressionRunnerBase; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ConditionRunner\", function() { return ConditionRunner; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ExpressionRunner\", function() { return ExpressionRunner; });\n/* harmony import */ var _conditionProcessValue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./conditionProcessValue */ \"./src/conditionProcessValue.ts\");\n/* harmony import */ var _conditionsParser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./conditionsParser */ \"./src/conditionsParser.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\nvar ExpressionRunnerBase = /** @class */ (function () {\n function ExpressionRunnerBase(expression) {\n this.processValue = new _conditionProcessValue__WEBPACK_IMPORTED_MODULE_0__[\"ProcessValue\"]();\n this.parser = new _conditionsParser__WEBPACK_IMPORTED_MODULE_1__[\"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: false,\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: false,\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 __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 __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\n/***/ \"./src/conditionsParser.ts\":\n/*!*********************************!*\\\n !*** ./src/conditionsParser.ts ***!\n \\*********************************/\n/*! exports provided: ConditionsParserError, ConditionsParser */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ConditionsParserError\", function() { return ConditionsParserError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ConditionsParser\", function() { return ConditionsParser; });\n/* harmony import */ var _expressions_expressionParser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./expressions/expressionParser */ \"./src/expressions/expressionParser.ts\");\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 = Object(_expressions_expressionParser__WEBPACK_IMPORTED_MODULE_0__[\"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 _expressions_expressionParser__WEBPACK_IMPORTED_MODULE_0__[\"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: false,\n configurable: true\n });\n ConditionsParser.parserCache = {};\n return ConditionsParser;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/defaultCss/cssbootstrap.ts\":\n/*!****************************************!*\\\n !*** ./src/defaultCss/cssbootstrap.ts ***!\n \\****************************************/\n/*! exports provided: defaultBootstrapCss */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"defaultBootstrapCss\", function() { return defaultBootstrapCss; });\n/* harmony import */ var _cssstandard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./cssstandard */ \"./src/defaultCss/cssstandard.ts\");\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 progressButtonsContainerCenter: \"sv_progress-buttons__container-center\",\n progressButtonsContainer: \"sv_progress-buttons__container\",\n progressButtonsImageButtonLeft: \"sv_progress-buttons__image-button-left\",\n progressButtonsImageButtonRight: \"sv_progress-buttons__image-button-right\",\n progressButtonsImageButtonHidden: \"sv_progress-buttons__image-button--hidden\",\n progressButtonsListContainer: \"sv_progress-buttons__list-container\",\n progressButtonsList: \"sv_progress-buttons__list\",\n progressButtonsListElementPassed: \"sv_progress-buttons__list-element--passed\",\n progressButtonsListElementCurrent: \"sv_progress-buttons__list-element--current\",\n progressButtonsListElementNonClickable: \"sv_progress-buttons__list-element--nonclickable\",\n progressButtonsPageTitle: \"sv_progress-buttons__page-title\",\n progressButtonsPageDescription: \"sv_progress-buttons__page-description\",\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 titleExpandable: \"sv_q_title_expandable\",\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 titleOnError: \"\",\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 number: \"sv_q_num\",\n requiredText: \"sv_q_required_text\",\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 sliderText: \"sv-hidden\",\n label: \"sv-boolean__label \",\n disabledLabel: \"sv-boolean__label--disabled\",\n materialDecorator: \"sv-item__decorator sv-boolean__decorator \",\n itemDecorator: \"sv-item__svg sv-boolean__svg\",\n checkedPath: \"sv-boolean__checked-path\",\n uncheckedPath: \"sv-boolean__unchecked-path\",\n indeterminatePath: \"sv-boolean__indeterminate-path\",\n },\n checkbox: {\n root: \"sv_qcbc sv_qcbx form-inline\",\n item: \"checkbox\",\n itemChecked: \"checked\",\n itemSelectAll: \"sv_q_checkbox_selectall\",\n itemNone: \"sv_q_checkbox_none\",\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 ranking: {\n root: \"sv-ranking\",\n rootMobileMod: \"sv-ranking--mobile\",\n rootDragMod: \"sv-ranking--drag\",\n item: \"sv-ranking-item\",\n itemContent: \"sv-ranking-item__content\",\n itemIndex: \"sv-ranking-item__index\",\n // itemText: \"sv-ranking-item__text\",\n controlLabel: \"sv-ranking-item__text\",\n itemGhostNode: \"sv-ranking-item__ghost\",\n itemIconContainer: \"sv-ranking-item__icon-container\",\n itemIcon: \"sv-ranking-item__icon\",\n itemIconHoverMod: \"sv-ranking-item__icon--hover\",\n itemIconFocusMod: \"sv-ranking-item__icon--focus\",\n itemGhostMod: \"sv-ranking-item--ghost\",\n itemDragMod: \"sv-ranking-item--drag\",\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: {\n root: \"table\",\n cell: \"sv_matrix_cell\",\n headerCell: \"sv_matrix_cell_header\",\n row: \"sv_matrix_row\",\n detailRow: \"sv_matrix_detail_row\",\n detailRowText: \"sv_matrix_cell_detail_rowtext\",\n detailCell: \"sv_matrix_cell_detail\",\n detailButton: \"sv_matrix_cell_detail_button\",\n detailButtonExpanded: \"sv_matrix_cell_detail_button_expanded\",\n detailIcon: \"sv_detail_panel_icon\",\n detailIconExpanded: \"sv_detail_expanded\",\n detailPanelCell: \"sv_matrix_cell_detail_panel\",\n actionsCell: \"sv_matrix_cell sv_matrix_cell_actions\",\n },\n matrixdynamic: {\n root: \"table\",\n button: \"button\",\n buttonAdd: \"\",\n buttonRemove: \"\",\n iconAdd: \"\",\n iconRemove: \"\",\n iconDrag: \"sv-matrixdynamic__drag-icon\",\n headerCell: \"sv_matrix_cell_header\",\n row: \"sv_matrix_row\",\n detailRow: \"sv_matrix_detail_row\",\n detailCell: \"sv_matrix_cell_detail\",\n detailButton: \"sv_matrix_cell_detail_button\",\n detailButtonExpanded: \"sv_matrix_cell_detail_button_expanded\",\n detailIcon: \"sv_detail_panel_icon\",\n detailIconExpanded: \"sv_detail_expanded\",\n detailPanelCell: \"sv_matrix_cell_detail_panel\",\n actionsCell: \"sv_matrix_cell sv_matrix_cell_actions\",\n emptyRowsSection: \"sv_matrix_empty_rows_section\",\n emptyRowsText: \"sv_matrix_empty_rows_text\",\n emptyRowsButton: \"\",\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: \"sv_p_remove_btn\",\n buttonRemoveRight: \"button sv-paneldynamic__remove-btn--right\",\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 panelWrapper: \"sv_p_wrapper\",\n panelWrapperInRow: \"sv_p_wrapper_in_row\",\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 buttongroup: {\n root: \"sv-button-group\",\n item: \"sv-button-group__item\",\n itemIcon: \"sv-button-group__item-icon\",\n itemDecorator: \"sv-button-group__item-decorator\",\n itemCaption: \"sv-button-group__item-caption\",\n itemHover: \"sv-button-group__item--hover\",\n itemSelected: \"sv-button-group__item--selected\",\n itemDisabled: \"sv-button-group__item--disabled\",\n itemControl: \"sv-visuallyhidden\",\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 placeholder: \"sjs_sp_placeholder\",\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_cssstandard__WEBPACK_IMPORTED_MODULE_0__[\"surveyCss\"][\"bootstrap\"] = defaultBootstrapCss;\n\n\n/***/ }),\n\n/***/ \"./src/defaultCss/cssbootstrapmaterial.ts\":\n/*!************************************************!*\\\n !*** ./src/defaultCss/cssbootstrapmaterial.ts ***!\n \\************************************************/\n/*! exports provided: defaultBootstrapMaterialCss */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"defaultBootstrapMaterialCss\", function() { return defaultBootstrapMaterialCss; });\n/* harmony import */ var _cssstandard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./cssstandard */ \"./src/defaultCss/cssstandard.ts\");\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 progressButtonsContainerCenter: \"sv_progress-buttons__container-center\",\n progressButtonsContainer: \"sv_progress-buttons__container\",\n progressButtonsImageButtonLeft: \"sv_progress-buttons__image-button-left\",\n progressButtonsImageButtonRight: \"sv_progress-buttons__image-button-right\",\n progressButtonsImageButtonHidden: \"sv_progress-buttons__image-button--hidden\",\n progressButtonsListContainer: \"sv_progress-buttons__list-container\",\n progressButtonsList: \"sv_progress-buttons__list\",\n progressButtonsListElementPassed: \"sv_progress-buttons__list-element--passed\",\n progressButtonsListElementCurrent: \"sv_progress-buttons__list-element--current\",\n progressButtonsListElementNonClickable: \"sv_progress-buttons__list-element--nonclickable\",\n progressButtonsPageTitle: \"sv_progress-buttons__page-title\",\n progressButtonsPageDescription: \"sv_progress-buttons__page-description\",\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 titleExpandable: \"sv_q_title_expandable\",\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 titleOnError: \"\",\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 number: \"sv_q_num\",\n requiredText: \"sv_q_required_text\",\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 sliderText: \"sv-hidden\",\n label: \"sv-boolean__label \",\n disabledLabel: \"sv-boolean__label--disabled\",\n materialDecorator: \"sv-item__decorator sv-boolean__decorator \",\n itemDecorator: \"sv-item__svg sv-boolean__svg\",\n checkedPath: \"sv-boolean__checked-path\",\n uncheckedPath: \"sv-boolean__unchecked-path\",\n indeterminatePath: \"sv-boolean__indeterminate-path\",\n },\n checkbox: {\n root: \"sv_qcbx\",\n item: \"checkbox\",\n itemChecked: \"checked\",\n itemSelectAll: \"sv_q_checkbox_selectall\",\n itemNone: \"sv_q_checkbox_none\",\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 ranking: {\n root: \"sv-ranking\",\n rootMobileMod: \"sv-ranking--mobile\",\n rootDragMod: \"sv-ranking--drag\",\n item: \"sv-ranking-item\",\n itemContent: \"sv-ranking-item__content\",\n itemIndex: \"sv-ranking-item__index\",\n // itemText: \"sv-ranking-item__text\",\n controlLabel: \"sv-ranking-item__text\",\n itemGhostNode: \"sv-ranking-item__ghost\",\n itemIconContainer: \"sv-ranking-item__icon-container\",\n itemIcon: \"sv-ranking-item__icon\",\n itemIconHoverMod: \"sv-ranking-item__icon--hover\",\n itemIconFocusMod: \"sv-ranking-item__icon--focus\",\n itemGhostMod: \"sv-ranking-item--ghost\",\n itemDragMod: \"sv-ranking-item--drag\",\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: {\n root: \"table\",\n itemValue: \"form-group bmd-form-group\",\n headerCell: \"sv_matrix_cell_header\",\n row: \"sv_matrix_row\",\n detailRow: \"sv_matrix_detail_row\",\n detailRowText: \"sv_matrix_cell_detail_rowtext\",\n detailCell: \"sv_matrix_cell_detail\",\n detailButton: \"sv_matrix_cell_detail_button\",\n detailButtonExpanded: \"sv_matrix_cell_detail_button_expanded\",\n detailIcon: \"sv_detail_panel_icon\",\n detailIconExpanded: \"sv_detail_expanded\",\n detailPanelCell: \"sv_matrix_cell_detail_panel\",\n actionsCell: \"sv_matrix_cell sv_matrix_cell_actions\",\n },\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 iconDrag: \"sv-matrixdynamic__drag-icon\",\n headerCell: \"sv_matrix_cell_header\",\n row: \"sv_matrix_row\",\n detailRow: \"sv_matrix_detail_row\",\n detailCell: \"sv_matrix_cell_detail\",\n detailButton: \"sv_matrix_cell_detail_button\",\n detailButtonExpanded: \"sv_matrix_cell_detail_button_expanded\",\n detailIcon: \"sv_detail_panel_icon\",\n detailIconExpanded: \"sv_detail_expanded\",\n detailPanelCell: \"sv_matrix_cell_detail_panel\",\n actionsCell: \"sv_matrix_cell sv_matrix_cell_actions\",\n emptyRowsSection: \"sv_matrix_empty_rows_section\",\n emptyRowsText: \"sv_matrix_empty_rows_text\",\n emptyRowsButton: \"\",\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 buttonRemoveRight: \"sv-paneldynamic__remove-btn--right\",\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 panelWrapper: \"sv_p_wrapper\",\n panelWrapperInRow: \"sv_p_wrapper_in_row\",\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 buttongroup: {\n root: \"sv-button-group\",\n item: \"sv-button-group__item\",\n itemIcon: \"sv-button-group__item-icon\",\n itemDecorator: \"sv-button-group__item-decorator\",\n itemCaption: \"sv-button-group__item-caption\",\n itemSelected: \"sv-button-group__item--selected\",\n itemHover: \"sv-button-group__item--hover\",\n itemDisabled: \"sv-button-group__item--disabled\",\n itemControl: \"sv-visuallyhidden\",\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 placeholder: \"sjs_sp_placeholder\",\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_cssstandard__WEBPACK_IMPORTED_MODULE_0__[\"surveyCss\"][\"bootstrapmaterial\"] = defaultBootstrapMaterialCss;\n\n\n/***/ }),\n\n/***/ \"./src/defaultCss/cssmodern.ts\":\n/*!*************************************!*\\\n !*** ./src/defaultCss/cssmodern.ts ***!\n \\*************************************/\n/*! exports provided: modernCss */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"modernCss\", function() { return modernCss; });\n/* harmony import */ var _cssstandard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./cssstandard */ \"./src/defaultCss/cssstandard.ts\");\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 titleOnError: \"sv-panel__title--error\",\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 requiredText: \"sv-panel__required-text\",\n number: \"sv-question__num\",\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 buttonRemoveRight: \"sv-paneldynamic__remove-btn--right\",\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 panelWrapper: \"sv-paneldynamic__panel-wrapper\",\n panelWrapperInRow: \"sv-paneldynamic__panel-wrapper--in-row\",\n },\n progress: \"sv-progress sv-body__progress\",\n progressBar: \"sv-progress__bar\",\n progressText: \"sv-progress__text\",\n progressTextInBar: \"sv-hidden\",\n progressButtonsContainerCenter: \"sv_progress-buttons__container-center\",\n progressButtonsContainer: \"sv_progress-buttons__container\",\n progressButtonsImageButtonLeft: \"sv_progress-buttons__image-button-left\",\n progressButtonsImageButtonRight: \"sv_progress-buttons__image-button-right\",\n progressButtonsImageButtonHidden: \"sv_progress-buttons__image-button--hidden\",\n progressButtonsListContainer: \"sv_progress-buttons__list-container\",\n progressButtonsList: \"sv_progress-buttons__list\",\n progressButtonsListElementPassed: \"sv_progress-buttons__list-element--passed\",\n progressButtonsListElementCurrent: \"sv_progress-buttons__list-element--current\",\n progressButtonsListElementNonClickable: \"sv_progress-buttons__list-element--nonclickable\",\n progressButtonsPageTitle: \"sv_progress-buttons__page-title\",\n progressButtonsPageDescription: \"sv_progress-buttons__page-description\",\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 titleExpandable: \"sv-question__title--expandable\",\n icon: \"sv-question__icon\",\n iconExpanded: \"sv-question__icon--expanded\",\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 itemSelectAll: \"sv-checkbox--selectall\",\n itemNone: \"sv-checkbox--none\",\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 ranking: {\n root: \"sv-ranking\",\n rootMobileMod: \"sv-ranking--mobile\",\n rootDragMod: \"sv-ranking--drag\",\n item: \"sv-ranking-item\",\n itemContent: \"sv-ranking-item__content\",\n itemIndex: \"sv-ranking-item__index\",\n // itemText: \"sv-ranking-item__text\",\n controlLabel: \"sv-ranking-item__text\",\n itemGhostNode: \"sv-ranking-item__ghost\",\n itemIconContainer: \"sv-ranking-item__icon-container\",\n itemIcon: \"sv-ranking-item__icon\",\n itemIconHoverMod: \"sv-ranking-item__icon--hover\",\n itemIconFocusMod: \"sv-ranking-item__icon--focus\",\n itemGhostMod: \"sv-ranking-item--ghost\",\n itemDragMod: \"sv-ranking-item--drag\",\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 buttongroup: {\n root: \"sv-button-group\",\n item: \"sv-button-group__item\",\n itemIcon: \"sv-button-group__item-icon\",\n itemDecorator: \"sv-button-group__item-decorator\",\n itemCaption: \"sv-button-group__item-caption\",\n itemSelected: \"sv-button-group__item--selected\",\n itemHover: \"sv-button-group__item--hover\",\n itemDisabled: \"sv-button-group__item--disabled\",\n itemControl: \"sv-visuallyhidden\",\n },\n boolean: {\n root: \"sv_qbln\",\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 sliderText: \"sv-hidden\",\n label: \"sv-boolean__label \",\n disabledLabel: \"sv-boolean__label--disabled\",\n materialDecorator: \"sv-item__decorator sv-boolean__decorator \",\n itemDecorator: \"sv-item__svg sv-boolean__svg\",\n checkedPath: \"sv-boolean__checked-path\",\n uncheckedPath: \"sv-boolean__unchecked-path\",\n indeterminatePath: \"sv-boolean__indeterminate-path\",\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 sv-matrix-root\",\n rowError: \"sv-matrix__row--error\",\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--checked\",\n cellTextDisabled: \"sv-matrix__text--disabled\",\n },\n matrixdropdown: {\n root: \"sv-table sv-matrixdropdown\",\n cell: \"sv-table__cell\",\n headerCell: \"sv-table__cell sv-table__cell--header\",\n row: \"sv-table__row\",\n detailRow: \"sv-table__row sv-table__row--detail\",\n detailRowText: \"sv-table__cell--detail-rowtext\",\n detailCell: \"sv-table__cell--detail\",\n choiceCell: \"sv-table__cell--choice\",\n detailButton: \"sv-table__cell--detail-button\",\n detailButtonExpanded: \"sv-table__cell--detail-button--expanded\",\n detailIcon: \"sv-detail-panel__icon\",\n detailIconExpanded: \"sv-detail-panel__icon--expanded\",\n detailPanelCell: \"sv-table__cell--detail-panel\",\n actionsCell: \"sv-table__cell sv-table__cell--actions\",\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 iconDrag: \"sv-matrixdynamic__drag-icon\",\n row: \"sv-table__row\",\n detailRow: \"sv-table__row sv-table__row--detail\",\n detailCell: \"sv-table__cell--detail\",\n choiceCell: \"sv-table__cell--choice\",\n detailButton: \"sv-table__cell--detail-button\",\n detailButtonExpanded: \"sv-table__cell--detail-button--expanded\",\n detailIcon: \"sv-detail-panel__icon\",\n detailIconExpanded: \"sv-detail-panel__icon--expanded\",\n detailPanelCell: \"sv-table__cell--detail-panel\",\n actionsCell: \"sv-table__cell sv-table__cell--actions\",\n emptyRowsSection: \"sv-table__empty--rows--section\",\n emptyRowsText: \"sv-table__empty--rows--text\",\n emptyRowsButton: \"\",\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 itemDisabled: \"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 controlDisabled: \"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 placeholder: \"sjs_sp_placeholder\",\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_cssstandard__WEBPACK_IMPORTED_MODULE_0__[\"surveyCss\"][\"modern\"] = modernCss;\n\n\n/***/ }),\n\n/***/ \"./src/defaultCss/cssstandard.ts\":\n/*!***************************************!*\\\n !*** ./src/defaultCss/cssstandard.ts ***!\n \\***************************************/\n/*! exports provided: surveyCss, defaultStandardCss */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"surveyCss\", function() { return surveyCss; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"defaultStandardCss\", 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 progressButtonsContainerCenter: \"sv_progress-buttons__container-center\",\n progressButtonsContainer: \"sv_progress-buttons__container\",\n progressButtonsImageButtonLeft: \"sv_progress-buttons__image-button-left\",\n progressButtonsImageButtonRight: \"sv_progress-buttons__image-button-right\",\n progressButtonsImageButtonHidden: \"sv_progress-buttons__image-button--hidden\",\n progressButtonsListContainer: \"sv_progress-buttons__list-container\",\n progressButtonsList: \"sv_progress-buttons__list\",\n progressButtonsListElementPassed: \"sv_progress-buttons__list-element--passed\",\n progressButtonsListElementCurrent: \"sv_progress-buttons__list-element--current\",\n progressButtonsListElementNonClickable: \"sv_progress-buttons__list-element--nonclickable\",\n progressButtonsPageTitle: \"sv_progress-buttons__page-title\",\n progressButtonsPageDescription: \"sv_progress-buttons__page-description\",\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 titleExpandable: \"sv_q_title_expandable\",\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 icon: \"sv_question_icon\",\n iconExpanded: \"sv_expanded\",\n disabled: \"sv_q--disabled\",\n },\n panel: {\n title: \"sv_p_title\",\n titleExpandable: \"sv_p_title_expandable\",\n titleOnError: \"\",\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 number: \"sv_q_num\",\n requiredText: \"sv_q_required_text\",\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 sliderText: \"sv-hidden\",\n label: \"sv-boolean__label \",\n disabledLabel: \"sv-boolean__label--disabled\",\n materialDecorator: \"sv-item__decorator sv-boolean__decorator \",\n itemDecorator: \"sv-item__svg sv-boolean__svg\",\n checkedPath: \"sv-boolean__checked-path\",\n uncheckedPath: \"sv-boolean__unchecked-path\",\n indeterminatePath: \"sv-boolean__indeterminate-path\",\n },\n checkbox: {\n root: \"sv_qcbc sv_qcbx\",\n item: \"sv_q_checkbox\",\n itemSelectAll: \"sv_q_checkbox_selectall\",\n itemNone: \"sv_q_checkbox_none\",\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 ranking: {\n root: \"sv-ranking\",\n rootMobileMod: \"sv-ranking--mobile\",\n rootDragMod: \"sv-ranking--drag\",\n item: \"sv-ranking-item\",\n itemContent: \"sv-ranking-item__content\",\n itemIndex: \"sv-ranking-item__index\",\n // itemText: \"sv-ranking-item__text\",\n controlLabel: \"sv-ranking-item__text\",\n itemGhostNode: \"sv-ranking-item__ghost\",\n itemIconContainer: \"sv-ranking-item__icon-container\",\n itemIcon: \"sv-ranking-item__icon\",\n itemIconHoverMod: \"sv-ranking-item__icon--hover\",\n itemIconFocusMod: \"sv-ranking-item__icon--focus\",\n itemGhostMod: \"sv-ranking-item--ghost\",\n itemDragMod: \"sv-ranking-item--drag\",\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 cell: \"sv_q_m_cell\",\n cellText: \"sv_q_m_cell_text\",\n cellTextSelected: \"sv_q_m_cell_selected\",\n cellLabel: \"sv_q_m_cell_label\",\n },\n matrixdropdown: {\n root: \"sv_q_matrix_dropdown\",\n cell: \"sv_matrix_cell\",\n headerCell: \"sv_matrix_cell_header\",\n row: \"sv_matrix_row\",\n detailRow: \"sv_matrix_detail_row\",\n detailRowText: \"sv_matrix_cell_detail_rowtext\",\n detailCell: \"sv_matrix_cell_detail\",\n choiceCell: \"sv-table__cell--choice\",\n detailButton: \"sv_matrix_cell_detail_button\",\n detailButtonExpanded: \"sv_matrix_cell_detail_button_expanded\",\n detailIcon: \"sv_detail_panel_icon\",\n detailIconExpanded: \"sv_detail_expanded\",\n detailPanelCell: \"sv_matrix_cell_detail_panel\",\n actionsCell: \"sv_matrix_cell sv_matrix_cell_actions\",\n },\n matrixdynamic: {\n root: \"sv_q_matrix_dynamic\",\n button: \"sv_matrix_dynamic_button\",\n buttonAdd: \"\",\n buttonRemove: \"\",\n iconAdd: \"\",\n iconRemove: \"\",\n iconDrag: \"sv-matrixdynamic__drag-icon\",\n cell: \"sv_matrix_cell\",\n headerCell: \"sv_matrix_cell_header\",\n row: \"sv_matrix_row\",\n detailRow: \"sv_matrix_detail_row\",\n detailCell: \"sv_matrix_cell_detail\",\n choiceCell: \"sv-table__cell--choice\",\n detailButton: \"sv_matrix_cell_detail_button\",\n detailButtonExpanded: \"sv_matrix_cell_detail_button_expanded\",\n detailIcon: \"sv_detail_panel_icon\",\n detailIconExpanded: \"sv_detail_expanded\",\n detailPanelCell: \"sv_matrix_cell_detail_panel\",\n actionsCell: \"sv_matrix_cell sv_matrix_cell_actions\",\n emptyRowsSection: \"sv_matrix_empty_rows_section\",\n emptyRowsText: \"sv_matrix_empty_rows_text\",\n emptyRowsButton: \"\",\n },\n paneldynamic: {\n root: \"sv_panel_dynamic\",\n title: \"sv_p_title\",\n button: \"\",\n buttonAdd: \"sv-paneldynamic__add-btn\",\n buttonRemove: \"sv_p_remove_btn\",\n buttonRemoveRight: \"sv_p_remove_btn_right\",\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 panelWrapper: \"sv_p_wrapper\",\n panelWrapperInRow: \"sv_p_wrapper_in_row\",\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 buttongroup: {\n root: \"sv-button-group\",\n item: \"sv-button-group__item\",\n itemIcon: \"sv-button-group__item-icon\",\n itemDecorator: \"sv-button-group__item-decorator\",\n itemCaption: \"sv-button-group__item-caption\",\n itemHover: \"sv-button-group__item--hover\",\n itemSelected: \"sv-button-group__item--selected\",\n itemDisabled: \"sv-button-group__item--disabled\",\n itemControl: \"sv-visuallyhidden\",\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 },\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 placeholder: \"sjs_sp_placeholder\",\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\n/***/ \"./src/dragdrophelper.ts\":\n/*!*******************************!*\\\n !*** ./src/dragdrophelper.ts ***!\n \\*******************************/\n/*! exports provided: DragDropHelper */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DragDropHelper\", function() { return DragDropHelper; });\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\nvar DragDropHelper = /** @class */ (function (_super) {\n __extends(DragDropHelper, _super);\n function DragDropHelper(surveyValue, creator) {\n var _this = _super.call(this) || this;\n _this.surveyValue = surveyValue;\n _this.creator = creator;\n _this.onBeforeDrop = new _base__WEBPACK_IMPORTED_MODULE_0__[\"EventBase\"]();\n _this.onAfterDrop = new _base__WEBPACK_IMPORTED_MODULE_0__[\"EventBase\"]();\n _this.draggedSurveyElement = null;\n _this.dropTargetSurveyElement = null;\n _this.draggedElementShortcut = null;\n _this.scrollIntervalId = null;\n _this.ghostSurveyElement = null;\n _this.isBottom = null;\n _this.isEdge = null;\n _this.pageOrPanel = null;\n _this.itemValueParentQuestion = null;\n _this.moveDraggedElement = function (event) {\n _this.moveShortcutElement(event);\n if (_this.isItemValueBeingDragged()) {\n _this.handleItemValueDragOver(event);\n }\n else {\n _this.handleSurveyElementDragOver(event);\n }\n };\n _this.handleEscapeButton = function (event) {\n if (event.keyCode == 27) {\n _this.clear();\n }\n };\n _this.banDropHere = function () {\n _this.dropTargetSurveyElement = null;\n _this.isBottom = null;\n _this.isEdge = null;\n _this.draggedElementShortcut.style.cursor = \"not-allowed\";\n };\n _this.banDropSurveyElement = function () {\n _this.removeGhostElementFromSurvey();\n _this.banDropHere();\n };\n _this.drop = function () {\n if (_this.isItemValueBeingDragged()) {\n _this.doDropItemValue();\n }\n else {\n _this.doDropSurveyElement();\n }\n _this.clear();\n };\n _this.doDropItemValue = function () {\n var isTop = !_this.isBottom;\n var choices = _this.itemValueParentQuestion.choices;\n var oldIndex = choices.indexOf(_this.draggedSurveyElement);\n var newIndex = choices.indexOf(_this.dropTargetSurveyElement);\n if (oldIndex < newIndex && isTop) {\n newIndex--;\n }\n else if (oldIndex > newIndex && _this.isBottom) {\n newIndex++;\n }\n _this.onBeforeDrop.fire(_this, null);\n choices.splice(oldIndex, 1);\n choices.splice(newIndex, 0, _this.draggedSurveyElement);\n _this.onAfterDrop.fire(_this, {\n draggedElement: _this.itemValueParentQuestion,\n });\n };\n _this.clear = function () {\n clearInterval(_this.scrollIntervalId);\n document.removeEventListener(\"pointermove\", _this.moveDraggedElement);\n document.removeEventListener(\"keydown\", _this.handleEscapeButton);\n _this.draggedElementShortcut.removeEventListener(\"pointerup\", _this.drop);\n document.body.removeChild(_this.draggedElementShortcut);\n _this.removeGhostElementFromSurvey();\n var prevEvent = DragDropHelper.prevEvent;\n prevEvent.element = null;\n prevEvent.x = -1;\n prevEvent.y = -1;\n _this.dropTargetSurveyElement = null;\n _this.draggedElementShortcut = null;\n _this.ghostSurveyElement = null;\n _this.draggedSurveyElement = null;\n _this.pageOrPanel = null;\n _this.itemValueParentQuestion = null;\n _this.isBottom = null;\n _this.isEdge = null;\n _this.scrollIntervalId = null;\n };\n return _this;\n }\n DragDropHelper.prototype.isItemValueBeingDragged = function () {\n return _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].isDescendantOf(this.draggedSurveyElement.getType(), \"itemvalue\");\n };\n Object.defineProperty(DragDropHelper.prototype, \"dropTargetDataAttributeName\", {\n get: function () {\n if (this.isItemValueBeingDragged()) {\n return \"[data-svc-drop-target-item-value]\";\n }\n return \"[data-svc-drop-target-element-name]\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(DragDropHelper.prototype, \"survey\", {\n get: function () {\n return this.surveyValue || this.creator.survey;\n },\n enumerable: false,\n configurable: true\n });\n DragDropHelper.prototype.startDragToolboxItem = function (event, draggedElementJson) {\n var draggedElement = this.createElementFromJson(draggedElementJson);\n this.startDragSurveyElement(event, draggedElement);\n };\n DragDropHelper.prototype.startDragSurveyElement = function (event, draggedElement) {\n this.startDrag(event, draggedElement);\n };\n DragDropHelper.prototype.startDragItemValue = function (event, question, item) {\n var draggedElement = item;\n this.itemValueParentQuestion = question;\n this.startDrag(event, draggedElement);\n };\n DragDropHelper.prototype.startDrag = function (event, draggedElement) {\n this.draggedSurveyElement = draggedElement;\n this.ghostSurveyElement = this.createGhostSurveyElement();\n this.draggedElementShortcut = this.createDraggedElementShortcut();\n document.body.append(this.draggedElementShortcut);\n this.moveShortcutElement(event);\n document.addEventListener(\"pointermove\", this.moveDraggedElement);\n document.addEventListener(\"keydown\", this.handleEscapeButton);\n this.draggedElementShortcut.addEventListener(\"pointerup\", this.drop);\n };\n DragDropHelper.prototype.getItemValueGhostPosition = function (item) {\n if (this.dropTargetSurveyElement !== item)\n return null;\n if (this.isBottom)\n return \"bottom\";\n return \"top\";\n };\n DragDropHelper.prototype.createGhostSurveyElement = function () {\n var startWithNewLine = this.draggedSurveyElement.startWithNewLine;\n var className = \"svc-drag-drop-ghost\";\n var json = {\n type: \"html\",\n name: DragDropHelper.ghostSurveyElementName,\n html: \"
\",\n };\n var element = this.createElementFromJson(json);\n element.startWithNewLine = startWithNewLine;\n return element;\n };\n DragDropHelper.prototype.createDraggedElementShortcut = function () {\n var draggedElementShortcut = document.createElement(\"div\");\n var draggedElement = this.draggedSurveyElement;\n draggedElementShortcut.innerText =\n draggedElement[\"title\"] ||\n draggedElement[\"text\"] ||\n draggedElement[\"name\"];\n draggedElementShortcut.className = \"svc-drag-shortcut\";\n return draggedElementShortcut;\n };\n DragDropHelper.prototype.moveShortcutElement = function (event) {\n this.doScroll(event.clientY, event.clientX);\n var shortcutHeight = this.draggedElementShortcut.offsetHeight;\n var shortcutWidth = this.draggedElementShortcut.offsetWidth;\n var shortcutXCenter = shortcutWidth / 2;\n var shortcutYCenter = shortcutHeight / 2;\n var documentClientHeight = document.documentElement.clientHeight;\n var documentClientWidth = document.documentElement.clientWidth;\n if (event.clientX + shortcutXCenter >= documentClientWidth) {\n this.draggedElementShortcut.style.left =\n event.pageX -\n event.clientX +\n documentClientWidth -\n shortcutWidth +\n \"px\";\n this.draggedElementShortcut.style.top =\n event.pageY - shortcutYCenter + \"px\";\n return;\n }\n if (event.clientX - shortcutXCenter <= 0) {\n this.draggedElementShortcut.style.left =\n event.pageX - event.clientX + \"px\";\n this.draggedElementShortcut.style.top =\n event.pageY - shortcutYCenter + \"px\";\n return;\n }\n if (event.clientY + shortcutYCenter >= documentClientHeight) {\n this.draggedElementShortcut.style.left =\n event.pageX - shortcutXCenter + \"px\";\n this.draggedElementShortcut.style.top =\n event.pageY -\n event.clientY +\n documentClientHeight -\n shortcutHeight +\n \"px\";\n return;\n }\n if (event.clientY - shortcutYCenter <= 0) {\n this.draggedElementShortcut.style.left =\n event.pageX - shortcutXCenter + \"px\";\n this.draggedElementShortcut.style.top =\n event.pageY - event.clientY + \"px\";\n return;\n }\n this.draggedElementShortcut.style.left =\n event.pageX - shortcutXCenter + \"px\";\n this.draggedElementShortcut.style.top =\n event.pageY - shortcutYCenter + \"px\";\n };\n DragDropHelper.prototype.doScroll = function (clientY, clientX) {\n clearInterval(this.scrollIntervalId);\n var startScrollBoundary = 50;\n // need to import getScrollableParent method\n // let scrollableParentElement = getScrollableParent(dropZoneElement)\n // .parentNode;\n var scrollableParentElement = document.querySelector(\".svc-tab-designer.sd-root-modern\");\n var top = scrollableParentElement.getBoundingClientRect().top;\n var bottom = scrollableParentElement.getBoundingClientRect().bottom;\n var left = scrollableParentElement.getBoundingClientRect().left;\n var right = scrollableParentElement.getBoundingClientRect().right;\n if (clientY - top <= startScrollBoundary) {\n this.scrollIntervalId = setInterval(function () {\n scrollableParentElement.scrollTop -= 5;\n }, 10);\n }\n else if (bottom - clientY <= startScrollBoundary) {\n this.scrollIntervalId = setInterval(function () {\n scrollableParentElement.scrollTop += 5;\n }, 10);\n }\n else if (right - clientX <= startScrollBoundary) {\n this.scrollIntervalId = setInterval(function () {\n scrollableParentElement.scrollLeft += 5;\n }, 10);\n }\n else if (clientX - left <= startScrollBoundary) {\n this.scrollIntervalId = setInterval(function () {\n scrollableParentElement.scrollLeft -= 5;\n }, 10);\n }\n };\n DragDropHelper.prototype.handleItemValueDragOver = function (event) {\n this.draggedElementShortcut.style.cursor = \"grabbing\";\n var dragInfo = this.getDragInfo(event);\n var dropTargetSurveyElement = dragInfo.dropTargetSurveyElement;\n var isEdge = dragInfo.isEdge;\n var isBottom = dragInfo.isBottom;\n var choices = this.itemValueParentQuestion.choices;\n // shouldn't allow to drop on \"adorners\" (selectall, none, other)\n if (choices.indexOf(dropTargetSurveyElement) === -1) {\n this.banDropHere();\n return;\n }\n //drag over next item\n if (choices.indexOf(dropTargetSurveyElement) -\n choices.indexOf(this.draggedSurveyElement) ===\n 1) {\n isBottom = true;\n }\n //drag over prev item\n if (choices.indexOf(this.draggedSurveyElement) -\n choices.indexOf(dropTargetSurveyElement) ===\n 1) {\n isBottom = false;\n }\n if (dropTargetSurveyElement === this.draggedSurveyElement) {\n this.banDropHere();\n return true;\n }\n if (dropTargetSurveyElement === this.dropTargetSurveyElement &&\n isEdge === this.isEdge &&\n isBottom === this.isBottom)\n return;\n this.dropTargetSurveyElement = dropTargetSurveyElement;\n this.isEdge = isEdge;\n this.isBottom = isBottom;\n };\n DragDropHelper.prototype.handleSurveyElementDragOver = function (event) {\n this.draggedElementShortcut.style.cursor = \"grabbing\";\n var dragInfo = this.getDragInfo(event);\n var dropTargetSurveyElement = dragInfo.dropTargetSurveyElement;\n var isEdge = dragInfo.isEdge;\n var isBottom = dragInfo.isBottom;\n if (!dropTargetSurveyElement) {\n this.banDropSurveyElement();\n return;\n }\n if (DragDropHelper.restrictDragQuestionBetweenPages &&\n dropTargetSurveyElement[\"page\"] !==\n this.draggedSurveyElement[\"page\"]) {\n this.banDropSurveyElement();\n return;\n }\n if (dropTargetSurveyElement === this.ghostSurveyElement) {\n return;\n }\n if (dropTargetSurveyElement === this.dropTargetSurveyElement &&\n isEdge === this.isEdge &&\n isBottom === this.isBottom)\n return;\n this.isEdge = isEdge;\n this.isBottom = isBottom;\n this.dropTargetSurveyElement = dropTargetSurveyElement;\n this.insertGhostElementIntoSurvey();\n };\n DragDropHelper.prototype.getDragInfo = function (event) {\n var dropTargetHTMLElement = this.findDropTargetHTMLElementFromPoint(event.clientX, event.clientY);\n if (!dropTargetHTMLElement) {\n return { dropTargetSurveyElement: null, isEdge: true, isBottom: true };\n }\n var dropTargetSurveyElement = this.getDropTargetSurveyElementFromHTMLElement(dropTargetHTMLElement);\n var isEdge = true;\n if (!this.isItemValueBeingDragged()) {\n if (dropTargetSurveyElement.isPanel) {\n var panelDragInfo = this.getPanelDragInfo(dropTargetHTMLElement, dropTargetSurveyElement, event);\n dropTargetSurveyElement = panelDragInfo.dropTargetSurveyElement;\n isEdge = panelDragInfo.isEdge;\n }\n }\n if (dropTargetSurveyElement === this.draggedSurveyElement) {\n dropTargetSurveyElement = null;\n }\n var isBottom = this.calculateIsBottom(dropTargetHTMLElement, event.clientY);\n if (\n // TODO we can't drop on not empty page directly for now\n dropTargetSurveyElement &&\n dropTargetSurveyElement.getType() === \"page\" &&\n dropTargetSurveyElement.elements.length !== 0) {\n var elements = dropTargetSurveyElement.elements;\n dropTargetSurveyElement = isBottom\n ? elements[elements.length - 1]\n : elements[0];\n }\n return { dropTargetSurveyElement: dropTargetSurveyElement, isEdge: isEdge, isBottom: isBottom };\n };\n DragDropHelper.prototype.getPanelDragInfo = function (HTMLElement, surveyElement, event) {\n var isEdge = this.calculateIsEdge(HTMLElement, event.clientY);\n var dropTargetSurveyElement = surveyElement;\n if (!isEdge) {\n HTMLElement = this.findDeepestDropTargetChild(HTMLElement);\n dropTargetSurveyElement = this.getDropTargetSurveyElementFromHTMLElement(HTMLElement);\n }\n return { dropTargetSurveyElement: dropTargetSurveyElement, isEdge: isEdge };\n };\n DragDropHelper.prototype.getDropTargetSurveyElementName = function (element) {\n var dropTargetSurveyElementName = element.dataset.svcDropTargetElementName;\n if (!dropTargetSurveyElementName) {\n dropTargetSurveyElementName = element.dataset.svcDropTargetItemValue;\n }\n return dropTargetSurveyElementName;\n };\n DragDropHelper.prototype.getDropTargetSurveyElementFromHTMLElement = function (element) {\n var result = undefined;\n var dropTargetName = this.getDropTargetSurveyElementName(element);\n var isDragOverInnerPanel = false;\n if (!dropTargetName) {\n var nearestDropTargetElement = element.parentElement.closest(this.dropTargetDataAttributeName);\n dropTargetName = this.getDropTargetSurveyElementName(nearestDropTargetElement);\n isDragOverInnerPanel =\n nearestDropTargetElement !== element && !!dropTargetName;\n }\n if (!dropTargetName) {\n throw new Error(\"Can't find drop target survey element name\");\n }\n if (dropTargetName === DragDropHelper.ghostSurveyElementName) {\n return this.ghostSurveyElement;\n }\n // drop to page\n if (dropTargetName === \"newGhostPage\") {\n result = DragDropHelper.newGhostPage;\n }\n else {\n result = this.survey.getPageByName(dropTargetName);\n }\n // drop to element (question or panel)\n if (!result) {\n var element_1;\n this.survey.pages.forEach(function (page) {\n element_1 = page.getElementByName(dropTargetName);\n if (element_1)\n result = element_1;\n });\n if (!!result &&\n result.getType() === \"paneldynamic\" &&\n isDragOverInnerPanel) {\n var page = result.page;\n result = result.template;\n result.page = page;\n }\n }\n // drop to item-value\n if (!result) {\n result = this.itemValueParentQuestion.choices.filter(function (choice) { return choice.value === dropTargetName; })[0];\n }\n return result;\n };\n DragDropHelper.prototype.calculateMiddleOfHTMLElement = function (HTMLElement) {\n var rect = HTMLElement.getBoundingClientRect();\n return rect.y + rect.height / 2;\n };\n DragDropHelper.prototype.calculateIsBottom = function (HTMLElement, clientY) {\n var middle = this.calculateMiddleOfHTMLElement(HTMLElement);\n return clientY >= middle;\n };\n DragDropHelper.prototype.calculateIsEdge = function (HTMLElement, clientY) {\n var middle = this.calculateMiddleOfHTMLElement(HTMLElement);\n return Math.abs(clientY - middle) >= DragDropHelper.edgeHeight;\n };\n DragDropHelper.prototype.findDropTargetHTMLElement = function (draggedOverNode) {\n if (!draggedOverNode)\n return null;\n var selector = this.dropTargetDataAttributeName;\n var dropTargetHTMLElement = draggedOverNode.querySelector(selector) ||\n draggedOverNode.closest(selector);\n return dropTargetHTMLElement;\n };\n DragDropHelper.prototype.findDropTargetHTMLElementFromPoint = function (clientX, clientY) {\n this.draggedElementShortcut.hidden = true;\n var draggedOverNode = document.elementFromPoint(clientX, clientY);\n this.draggedElementShortcut.hidden = false;\n return this.findDropTargetHTMLElement(draggedOverNode);\n };\n DragDropHelper.prototype.findDeepestDropTargetChild = function (parent) {\n var selector = \"[data-svc-drop-target-element-name]\";\n var result = parent;\n while (!!parent) {\n result = parent;\n parent = parent.querySelector(selector);\n }\n return result;\n };\n DragDropHelper.prototype.insertGhostElementIntoSurvey = function () {\n this.removeGhostElementFromSurvey();\n this.ghostSurveyElement.name = DragDropHelper.ghostSurveyElementName; //TODO why do we need setup it manually see createGhostSurveyElement method\n this.pageOrPanel = this.dropTargetSurveyElement.isPage\n ? this.dropTargetSurveyElement\n : this.dropTargetSurveyElement[\"page\"];\n this.pageOrPanel.dragDropStart(this.draggedSurveyElement, this.ghostSurveyElement, DragDropHelper.nestedPanelDepth);\n return this.pageOrPanel.dragDropMoveTo(this.dropTargetSurveyElement, this.isBottom, this.isEdge);\n };\n DragDropHelper.prototype.insertRealElementIntoSurvey = function () {\n this.removeGhostElementFromSurvey();\n // ghost new page\n if (this.dropTargetSurveyElement.isPage &&\n this.dropTargetSurveyElement[\"_isGhost\"]) {\n this.dropTargetSurveyElement[\"_addGhostPageViewMobel\"]();\n }\n // EO ghost new page\n // fake target element (need only for \"startWithNewLine:false\" feature)\n //TODO need for dragDrop helper in library\n var json = new _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObject\"]().toJsonObject(this.draggedSurveyElement);\n json[\"type\"] = this.draggedSurveyElement.getType();\n var fakeTargetElement = this.createFakeTargetElement(this.draggedSurveyElement.name, json);\n // EO fake target element\n this.pageOrPanel.dragDropStart(this.draggedSurveyElement, fakeTargetElement, DragDropHelper.nestedPanelDepth);\n this.pageOrPanel.dragDropMoveTo(this.dropTargetSurveyElement, this.isBottom, this.isEdge);\n this.onBeforeDrop.fire(this, null);\n var newElement = this.pageOrPanel.dragDropFinish();\n this.onAfterDrop.fire(this, { draggedElement: newElement });\n };\n DragDropHelper.prototype.removeGhostElementFromSurvey = function () {\n if (!!this.pageOrPanel)\n this.pageOrPanel.dragDropFinish(true);\n };\n DragDropHelper.prototype.createElementFromJson = function (json) {\n var element = this.createNewElement(json);\n if (element[\"setSurveyImpl\"]) {\n element[\"setSurveyImpl\"](this.survey);\n }\n else {\n element[\"setData\"](this.survey);\n }\n element.renderWidth = \"100%\";\n return element;\n };\n DragDropHelper.prototype.createNewElement = function (json) {\n var newElement = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].createClass(json[\"type\"]);\n new _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObject\"]().toObject(json, newElement);\n return newElement;\n };\n DragDropHelper.prototype.createFakeTargetElement = function (elementName, json) {\n if (!elementName || !json)\n return null;\n var targetElement = null;\n targetElement = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].createClass(json[\"type\"]);\n new _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObject\"]().toObject(json, targetElement);\n targetElement.name = elementName;\n if (targetElement[\"setSurveyImpl\"]) {\n targetElement[\"setSurveyImpl\"](this.survey);\n }\n else {\n targetElement[\"setData\"](this.survey);\n }\n targetElement.renderWidth = \"100%\";\n return targetElement;\n };\n DragDropHelper.prototype.doDropSurveyElement = function () {\n if (this.dropTargetSurveyElement) {\n this.insertRealElementIntoSurvey();\n }\n };\n DragDropHelper.restrictDragQuestionBetweenPages = false;\n DragDropHelper.edgeHeight = 30;\n DragDropHelper.nestedPanelDepth = -1;\n DragDropHelper.prevEvent = {\n element: null,\n x: -1,\n y: -1,\n };\n DragDropHelper.newGhostPage = null;\n DragDropHelper.ghostSurveyElementName = \"svc-drag-drop-ghost-survey-element-name\"; // before renaming use globa search (we have also css selectors)\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], DragDropHelper.prototype, \"dropTargetSurveyElement\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], DragDropHelper.prototype, \"isBottom\", void 0);\n return DragDropHelper;\n}(_base__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/dxSurveyService.ts\":\n/*!********************************!*\\\n !*** ./src/dxSurveyService.ts ***!\n \\********************************/\n/*! exports provided: dxSurveyService */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"dxSurveyService\", function() { return dxSurveyService; });\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\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 _settings__WEBPACK_IMPORTED_MODULE_0__[\"settings\"].surveyServiceUrl;\n },\n set: function (val) {\n _settings__WEBPACK_IMPORTED_MODULE_0__[\"settings\"].surveyServiceUrl = val;\n },\n enumerable: false,\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\n/***/ \"./src/entries/chunks/localization.ts\":\n/*!********************************************!*\\\n !*** ./src/entries/chunks/localization.ts ***!\n \\********************************************/\n/*! no exports provided */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _localization_arabic__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../localization/arabic */ \"./src/localization/arabic.ts\");\n/* harmony import */ var _localization_basque__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../localization/basque */ \"./src/localization/basque.ts\");\n/* harmony import */ var _localization_bulgarian__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../localization/bulgarian */ \"./src/localization/bulgarian.ts\");\n/* harmony import */ var _localization_catalan__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../localization/catalan */ \"./src/localization/catalan.ts\");\n/* harmony import */ var _localization_croatian__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../localization/croatian */ \"./src/localization/croatian.ts\");\n/* harmony import */ var _localization_czech__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../localization/czech */ \"./src/localization/czech.ts\");\n/* harmony import */ var _localization_danish__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../localization/danish */ \"./src/localization/danish.ts\");\n/* harmony import */ var _localization_dutch__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../localization/dutch */ \"./src/localization/dutch.ts\");\n/* harmony import */ var _localization_estonian__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../localization/estonian */ \"./src/localization/estonian.ts\");\n/* harmony import */ var _localization_finnish__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../localization/finnish */ \"./src/localization/finnish.ts\");\n/* harmony import */ var _localization_french__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../localization/french */ \"./src/localization/french.ts\");\n/* harmony import */ var _localization_georgian__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../localization/georgian */ \"./src/localization/georgian.ts\");\n/* harmony import */ var _localization_german__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../localization/german */ \"./src/localization/german.ts\");\n/* harmony import */ var _localization_greek__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../localization/greek */ \"./src/localization/greek.ts\");\n/* harmony import */ var _localization_hebrew__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../localization/hebrew */ \"./src/localization/hebrew.ts\");\n/* harmony import */ var _localization_hindi__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../localization/hindi */ \"./src/localization/hindi.ts\");\n/* harmony import */ var _localization_hungarian__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../localization/hungarian */ \"./src/localization/hungarian.ts\");\n/* harmony import */ var _localization_icelandic__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../localization/icelandic */ \"./src/localization/icelandic.ts\");\n/* harmony import */ var _localization_indonesian__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../localization/indonesian */ \"./src/localization/indonesian.ts\");\n/* harmony import */ var _localization_italian__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../localization/italian */ \"./src/localization/italian.ts\");\n/* harmony import */ var _localization_japanese__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../localization/japanese */ \"./src/localization/japanese.ts\");\n/* harmony import */ var _localization_kazakh__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../../localization/kazakh */ \"./src/localization/kazakh.ts\");\n/* harmony import */ var _localization_korean__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../../localization/korean */ \"./src/localization/korean.ts\");\n/* harmony import */ var _localization_latvian__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../../localization/latvian */ \"./src/localization/latvian.ts\");\n/* harmony import */ var _localization_lithuanian__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ../../localization/lithuanian */ \"./src/localization/lithuanian.ts\");\n/* harmony import */ var _localization_macedonian__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../../localization/macedonian */ \"./src/localization/macedonian.ts\");\n/* harmony import */ var _localization_norwegian__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ../../localization/norwegian */ \"./src/localization/norwegian.ts\");\n/* harmony import */ var _localization_persian__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ../../localization/persian */ \"./src/localization/persian.ts\");\n/* harmony import */ var _localization_polish__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ../../localization/polish */ \"./src/localization/polish.ts\");\n/* harmony import */ var _localization_portuguese__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ../../localization/portuguese */ \"./src/localization/portuguese.ts\");\n/* harmony import */ var _localization_portuguese_br__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ../../localization/portuguese-br */ \"./src/localization/portuguese-br.ts\");\n/* harmony import */ var _localization_romanian__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ../../localization/romanian */ \"./src/localization/romanian.ts\");\n/* harmony import */ var _localization_russian__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ../../localization/russian */ \"./src/localization/russian.ts\");\n/* harmony import */ var _localization_serbian__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ../../localization/serbian */ \"./src/localization/serbian.ts\");\n/* harmony import */ var _localization_simplified_chinese__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ../../localization/simplified-chinese */ \"./src/localization/simplified-chinese.ts\");\n/* harmony import */ var _localization_spanish__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ../../localization/spanish */ \"./src/localization/spanish.ts\");\n/* harmony import */ var _localization_swahili__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ../../localization/swahili */ \"./src/localization/swahili.ts\");\n/* harmony import */ var _localization_swedish__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ../../localization/swedish */ \"./src/localization/swedish.ts\");\n/* harmony import */ var _localization_tajik__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ../../localization/tajik */ \"./src/localization/tajik.ts\");\n/* harmony import */ var _localization_thai__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ../../localization/thai */ \"./src/localization/thai.ts\");\n/* harmony import */ var _localization_traditional_chinese__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ../../localization/traditional-chinese */ \"./src/localization/traditional-chinese.ts\");\n/* harmony import */ var _localization_turkish__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ../../localization/turkish */ \"./src/localization/turkish.ts\");\n/* harmony import */ var _localization_ukrainian__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ../../localization/ukrainian */ \"./src/localization/ukrainian.ts\");\n/* harmony import */ var _localization_vietnamese__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ../../localization/vietnamese */ \"./src/localization/vietnamese.ts\");\n/* harmony import */ var _localization_welsh__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ../../localization/welsh */ \"./src/localization/welsh.ts\");\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/***/ \"./src/entries/chunks/model.ts\":\n/*!*************************************!*\\\n !*** ./src/entries/chunks/model.ts ***!\n \\*************************************/\n/*! exports provided: Version, settings, Helpers, AnswerCountValidator, EmailValidator, NumericValidator, RegexValidator, SurveyValidator, TextValidator, ValidatorResult, ExpressionValidator, ValidatorRunner, ItemValue, Base, Event, ArrayChanges, SurveyError, SurveyElement, CalculatedValue, CustomError, AnswerRequiredError, OneAnswerRequiredError, RequreNumericError, ExceedSizeError, LocalizableString, LocalizableStrings, HtmlConditionItem, UrlConditionItem, ChoicesRestful, ChoicesRestfull, FunctionFactory, registerFunction, ConditionRunner, ExpressionRunner, Operand, Const, BinaryOperand, Variable, FunctionOperand, ArrayOperand, ConditionsParser, ProcessValue, JsonError, JsonIncorrectTypeError, JsonMetadata, JsonMetadataClass, JsonMissingTypeError, JsonMissingTypeErrorBase, JsonObject, JsonObjectProperty, JsonRequiredPropertyError, JsonUnknownPropertyError, Serializer, property, propertyArray, MatrixDropdownCell, MatrixDropdownColumn, matrixDropdownColumnTypes, MatrixDropdownRowModelBase, QuestionMatrixDropdownModelBase, QuestionMatrixDropdownRenderedCell, QuestionMatrixDropdownRenderedRow, QuestionMatrixDropdownRenderedTable, MatrixDropdownRowModel, QuestionMatrixDropdownModel, MatrixDynamicRowModel, QuestionMatrixDynamicModel, MatrixRowModel, MatrixCells, QuestionMatrixModel, MultipleTextItemModel, QuestionMultipleTextModel, PanelModel, PanelModelBase, QuestionRowModel, FlowPanelModel, PageModel, Question, QuestionNonValue, QuestionEmptyModel, QuestionCheckboxBase, QuestionSelectBase, QuestionCheckboxModel, QuestionRankingModel, QuestionCommentModel, QuestionDropdownModel, QuestionFactory, ElementFactory, QuestionFileModel, QuestionHtmlModel, QuestionRadiogroupModel, QuestionRatingModel, QuestionExpressionModel, QuestionTextModel, QuestionBooleanModel, QuestionImagePickerModel, ImageItemValue, QuestionImageModel, QuestionSignaturePadModel, QuestionPanelDynamicModel, QuestionPanelDynamicItem, SurveyTimer, SurveyProgressButtonsModel, SurveyModel, SurveyTrigger, SurveyTriggerComplete, SurveyTriggerSetValue, SurveyTriggerVisible, SurveyTriggerCopyValue, SurveyTriggerRunExpression, Trigger, SurveyWindowModel, TextPreProcessor, dxSurveyService, englishStrings, surveyLocalization, surveyStrings, QuestionCustomWidget, CustomWidgetCollection, QuestionCustomModel, QuestionCompositeModel, ComponentQuestionJSON, ComponentCollection, StylesManager, ListModel, PopupModel, PopupBaseViewModel, QuestionButtonGroupModel, ButtonGroupItemModel, ButtonGroupItemValue, IsMobile, confirmAction, detectIEOrEdge, doKey2Click, loadFileFromBase64, createSvg, surveyCss, DragDropHelper */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Version\", function() { return Version; });\n/* harmony import */ var _main_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../main.scss */ \"./src/main.scss\");\n/* harmony import */ var _main_scss__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_main_scss__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../settings */ \"./src/settings.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"settings\", function() { return _settings__WEBPACK_IMPORTED_MODULE_1__[\"settings\"]; });\n\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../helpers */ \"./src/helpers.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Helpers\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"]; });\n\n/* harmony import */ var _validator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../validator */ \"./src/validator.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AnswerCountValidator\", function() { return _validator__WEBPACK_IMPORTED_MODULE_3__[\"AnswerCountValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"EmailValidator\", function() { return _validator__WEBPACK_IMPORTED_MODULE_3__[\"EmailValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"NumericValidator\", function() { return _validator__WEBPACK_IMPORTED_MODULE_3__[\"NumericValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RegexValidator\", function() { return _validator__WEBPACK_IMPORTED_MODULE_3__[\"RegexValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyValidator\", function() { return _validator__WEBPACK_IMPORTED_MODULE_3__[\"SurveyValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TextValidator\", function() { return _validator__WEBPACK_IMPORTED_MODULE_3__[\"TextValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ValidatorResult\", function() { return _validator__WEBPACK_IMPORTED_MODULE_3__[\"ValidatorResult\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ExpressionValidator\", function() { return _validator__WEBPACK_IMPORTED_MODULE_3__[\"ExpressionValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ValidatorRunner\", function() { return _validator__WEBPACK_IMPORTED_MODULE_3__[\"ValidatorRunner\"]; });\n\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../itemvalue */ \"./src/itemvalue.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ItemValue\", function() { return _itemvalue__WEBPACK_IMPORTED_MODULE_4__[\"ItemValue\"]; });\n\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../base */ \"./src/base.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Base\", function() { return _base__WEBPACK_IMPORTED_MODULE_5__[\"Base\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Event\", function() { return _base__WEBPACK_IMPORTED_MODULE_5__[\"Event\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ArrayChanges\", function() { return _base__WEBPACK_IMPORTED_MODULE_5__[\"ArrayChanges\"]; });\n\n/* harmony import */ var _survey_error__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../survey-error */ \"./src/survey-error.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyError\", function() { return _survey_error__WEBPACK_IMPORTED_MODULE_6__[\"SurveyError\"]; });\n\n/* harmony import */ var _survey_element__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../survey-element */ \"./src/survey-element.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyElement\", function() { return _survey_element__WEBPACK_IMPORTED_MODULE_7__[\"SurveyElement\"]; });\n\n/* harmony import */ var _calculatedValue__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../calculatedValue */ \"./src/calculatedValue.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CalculatedValue\", function() { return _calculatedValue__WEBPACK_IMPORTED_MODULE_8__[\"CalculatedValue\"]; });\n\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../error */ \"./src/error.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CustomError\", function() { return _error__WEBPACK_IMPORTED_MODULE_9__[\"CustomError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AnswerRequiredError\", function() { return _error__WEBPACK_IMPORTED_MODULE_9__[\"AnswerRequiredError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"OneAnswerRequiredError\", function() { return _error__WEBPACK_IMPORTED_MODULE_9__[\"OneAnswerRequiredError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RequreNumericError\", function() { return _error__WEBPACK_IMPORTED_MODULE_9__[\"RequreNumericError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ExceedSizeError\", function() { return _error__WEBPACK_IMPORTED_MODULE_9__[\"ExceedSizeError\"]; });\n\n/* harmony import */ var _localizablestring__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../localizablestring */ \"./src/localizablestring.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"LocalizableString\", function() { return _localizablestring__WEBPACK_IMPORTED_MODULE_10__[\"LocalizableString\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"LocalizableStrings\", function() { return _localizablestring__WEBPACK_IMPORTED_MODULE_10__[\"LocalizableStrings\"]; });\n\n/* harmony import */ var _expressionItems__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../expressionItems */ \"./src/expressionItems.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"HtmlConditionItem\", function() { return _expressionItems__WEBPACK_IMPORTED_MODULE_11__[\"HtmlConditionItem\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"UrlConditionItem\", function() { return _expressionItems__WEBPACK_IMPORTED_MODULE_11__[\"UrlConditionItem\"]; });\n\n/* harmony import */ var _choicesRestful__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../choicesRestful */ \"./src/choicesRestful.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ChoicesRestful\", function() { return _choicesRestful__WEBPACK_IMPORTED_MODULE_12__[\"ChoicesRestful\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ChoicesRestfull\", function() { return _choicesRestful__WEBPACK_IMPORTED_MODULE_12__[\"ChoicesRestfull\"]; });\n\n/* harmony import */ var _functionsfactory__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../functionsfactory */ \"./src/functionsfactory.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FunctionFactory\", function() { return _functionsfactory__WEBPACK_IMPORTED_MODULE_13__[\"FunctionFactory\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"registerFunction\", function() { return _functionsfactory__WEBPACK_IMPORTED_MODULE_13__[\"registerFunction\"]; });\n\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../conditions */ \"./src/conditions.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ConditionRunner\", function() { return _conditions__WEBPACK_IMPORTED_MODULE_14__[\"ConditionRunner\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ExpressionRunner\", function() { return _conditions__WEBPACK_IMPORTED_MODULE_14__[\"ExpressionRunner\"]; });\n\n/* harmony import */ var _expressions_expressions__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../expressions/expressions */ \"./src/expressions/expressions.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Operand\", function() { return _expressions_expressions__WEBPACK_IMPORTED_MODULE_15__[\"Operand\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Const\", function() { return _expressions_expressions__WEBPACK_IMPORTED_MODULE_15__[\"Const\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BinaryOperand\", function() { return _expressions_expressions__WEBPACK_IMPORTED_MODULE_15__[\"BinaryOperand\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Variable\", function() { return _expressions_expressions__WEBPACK_IMPORTED_MODULE_15__[\"Variable\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FunctionOperand\", function() { return _expressions_expressions__WEBPACK_IMPORTED_MODULE_15__[\"FunctionOperand\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ArrayOperand\", function() { return _expressions_expressions__WEBPACK_IMPORTED_MODULE_15__[\"ArrayOperand\"]; });\n\n/* harmony import */ var _conditionsParser__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../conditionsParser */ \"./src/conditionsParser.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ConditionsParser\", function() { return _conditionsParser__WEBPACK_IMPORTED_MODULE_16__[\"ConditionsParser\"]; });\n\n/* harmony import */ var _conditionProcessValue__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../conditionProcessValue */ \"./src/conditionProcessValue.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ProcessValue\", function() { return _conditionProcessValue__WEBPACK_IMPORTED_MODULE_17__[\"ProcessValue\"]; });\n\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../jsonobject */ \"./src/jsonobject.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonError\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_18__[\"JsonError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonIncorrectTypeError\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_18__[\"JsonIncorrectTypeError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonMetadata\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_18__[\"JsonMetadata\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonMetadataClass\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_18__[\"JsonMetadataClass\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonMissingTypeError\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_18__[\"JsonMissingTypeError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonMissingTypeErrorBase\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_18__[\"JsonMissingTypeErrorBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonObject\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_18__[\"JsonObject\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonObjectProperty\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_18__[\"JsonObjectProperty\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonRequiredPropertyError\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_18__[\"JsonRequiredPropertyError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonUnknownPropertyError\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_18__[\"JsonUnknownPropertyError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Serializer\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_18__[\"Serializer\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"property\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_18__[\"property\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"propertyArray\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_18__[\"propertyArray\"]; });\n\n/* harmony import */ var _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../question_matrixdropdownbase */ \"./src/question_matrixdropdownbase.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownCell\", function() { return _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_19__[\"MatrixDropdownCell\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownColumn\", function() { return _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_19__[\"MatrixDropdownColumn\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"matrixDropdownColumnTypes\", function() { return _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_19__[\"matrixDropdownColumnTypes\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownRowModelBase\", function() { return _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_19__[\"MatrixDropdownRowModelBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownModelBase\", function() { return _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_19__[\"QuestionMatrixDropdownModelBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownRenderedCell\", function() { return _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_19__[\"QuestionMatrixDropdownRenderedCell\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownRenderedRow\", function() { return _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_19__[\"QuestionMatrixDropdownRenderedRow\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownRenderedTable\", function() { return _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_19__[\"QuestionMatrixDropdownRenderedTable\"]; });\n\n/* harmony import */ var _question_matrixdropdown__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../question_matrixdropdown */ \"./src/question_matrixdropdown.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownRowModel\", function() { return _question_matrixdropdown__WEBPACK_IMPORTED_MODULE_20__[\"MatrixDropdownRowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownModel\", function() { return _question_matrixdropdown__WEBPACK_IMPORTED_MODULE_20__[\"QuestionMatrixDropdownModel\"]; });\n\n/* harmony import */ var _question_matrixdynamic__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../../question_matrixdynamic */ \"./src/question_matrixdynamic.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDynamicRowModel\", function() { return _question_matrixdynamic__WEBPACK_IMPORTED_MODULE_21__[\"MatrixDynamicRowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDynamicModel\", function() { return _question_matrixdynamic__WEBPACK_IMPORTED_MODULE_21__[\"QuestionMatrixDynamicModel\"]; });\n\n/* harmony import */ var _question_matrix__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../../question_matrix */ \"./src/question_matrix.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixRowModel\", function() { return _question_matrix__WEBPACK_IMPORTED_MODULE_22__[\"MatrixRowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixCells\", function() { return _question_matrix__WEBPACK_IMPORTED_MODULE_22__[\"MatrixCells\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixModel\", function() { return _question_matrix__WEBPACK_IMPORTED_MODULE_22__[\"QuestionMatrixModel\"]; });\n\n/* harmony import */ var _question_multipletext__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../../question_multipletext */ \"./src/question_multipletext.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MultipleTextItemModel\", function() { return _question_multipletext__WEBPACK_IMPORTED_MODULE_23__[\"MultipleTextItemModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMultipleTextModel\", function() { return _question_multipletext__WEBPACK_IMPORTED_MODULE_23__[\"QuestionMultipleTextModel\"]; });\n\n/* harmony import */ var _panel__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ../../panel */ \"./src/panel.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelModel\", function() { return _panel__WEBPACK_IMPORTED_MODULE_24__[\"PanelModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelModelBase\", function() { return _panel__WEBPACK_IMPORTED_MODULE_24__[\"PanelModelBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionRowModel\", function() { return _panel__WEBPACK_IMPORTED_MODULE_24__[\"QuestionRowModel\"]; });\n\n/* harmony import */ var _flowpanel__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../../flowpanel */ \"./src/flowpanel.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FlowPanelModel\", function() { return _flowpanel__WEBPACK_IMPORTED_MODULE_25__[\"FlowPanelModel\"]; });\n\n/* harmony import */ var _page__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ../../page */ \"./src/page.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PageModel\", function() { return _page__WEBPACK_IMPORTED_MODULE_26__[\"PageModel\"]; });\n\n/* harmony import */ var _template_renderer__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ../../template-renderer */ \"./src/template-renderer.ts\");\n/* empty/unused harmony star reexport *//* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ../../question */ \"./src/question.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Question\", function() { return _question__WEBPACK_IMPORTED_MODULE_28__[\"Question\"]; });\n\n/* harmony import */ var _questionnonvalue__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ../../questionnonvalue */ \"./src/questionnonvalue.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionNonValue\", function() { return _questionnonvalue__WEBPACK_IMPORTED_MODULE_29__[\"QuestionNonValue\"]; });\n\n/* harmony import */ var _question_empty__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ../../question_empty */ \"./src/question_empty.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionEmptyModel\", function() { return _question_empty__WEBPACK_IMPORTED_MODULE_30__[\"QuestionEmptyModel\"]; });\n\n/* harmony import */ var _question_baseselect__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ../../question_baseselect */ \"./src/question_baseselect.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCheckboxBase\", function() { return _question_baseselect__WEBPACK_IMPORTED_MODULE_31__[\"QuestionCheckboxBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionSelectBase\", function() { return _question_baseselect__WEBPACK_IMPORTED_MODULE_31__[\"QuestionSelectBase\"]; });\n\n/* harmony import */ var _question_checkbox__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ../../question_checkbox */ \"./src/question_checkbox.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCheckboxModel\", function() { return _question_checkbox__WEBPACK_IMPORTED_MODULE_32__[\"QuestionCheckboxModel\"]; });\n\n/* harmony import */ var _question_ranking__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ../../question_ranking */ \"./src/question_ranking.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionRankingModel\", function() { return _question_ranking__WEBPACK_IMPORTED_MODULE_33__[\"QuestionRankingModel\"]; });\n\n/* harmony import */ var _question_comment__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ../../question_comment */ \"./src/question_comment.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCommentModel\", function() { return _question_comment__WEBPACK_IMPORTED_MODULE_34__[\"QuestionCommentModel\"]; });\n\n/* harmony import */ var _question_dropdown__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ../../question_dropdown */ \"./src/question_dropdown.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionDropdownModel\", function() { return _question_dropdown__WEBPACK_IMPORTED_MODULE_35__[\"QuestionDropdownModel\"]; });\n\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ../../questionfactory */ \"./src/questionfactory.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionFactory\", function() { return _questionfactory__WEBPACK_IMPORTED_MODULE_36__[\"QuestionFactory\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ElementFactory\", function() { return _questionfactory__WEBPACK_IMPORTED_MODULE_36__[\"ElementFactory\"]; });\n\n/* harmony import */ var _question_file__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ../../question_file */ \"./src/question_file.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionFileModel\", function() { return _question_file__WEBPACK_IMPORTED_MODULE_37__[\"QuestionFileModel\"]; });\n\n/* harmony import */ var _question_html__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ../../question_html */ \"./src/question_html.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionHtmlModel\", function() { return _question_html__WEBPACK_IMPORTED_MODULE_38__[\"QuestionHtmlModel\"]; });\n\n/* harmony import */ var _question_radiogroup__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ../../question_radiogroup */ \"./src/question_radiogroup.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionRadiogroupModel\", function() { return _question_radiogroup__WEBPACK_IMPORTED_MODULE_39__[\"QuestionRadiogroupModel\"]; });\n\n/* harmony import */ var _question_rating__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ../../question_rating */ \"./src/question_rating.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionRatingModel\", function() { return _question_rating__WEBPACK_IMPORTED_MODULE_40__[\"QuestionRatingModel\"]; });\n\n/* harmony import */ var _question_expression__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ../../question_expression */ \"./src/question_expression.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionExpressionModel\", function() { return _question_expression__WEBPACK_IMPORTED_MODULE_41__[\"QuestionExpressionModel\"]; });\n\n/* harmony import */ var _question_text__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ../../question_text */ \"./src/question_text.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionTextModel\", function() { return _question_text__WEBPACK_IMPORTED_MODULE_42__[\"QuestionTextModel\"]; });\n\n/* harmony import */ var _question_boolean__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ../../question_boolean */ \"./src/question_boolean.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionBooleanModel\", function() { return _question_boolean__WEBPACK_IMPORTED_MODULE_43__[\"QuestionBooleanModel\"]; });\n\n/* harmony import */ var _question_imagepicker__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ../../question_imagepicker */ \"./src/question_imagepicker.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionImagePickerModel\", function() { return _question_imagepicker__WEBPACK_IMPORTED_MODULE_44__[\"QuestionImagePickerModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ImageItemValue\", function() { return _question_imagepicker__WEBPACK_IMPORTED_MODULE_44__[\"ImageItemValue\"]; });\n\n/* harmony import */ var _question_image__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ../../question_image */ \"./src/question_image.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionImageModel\", function() { return _question_image__WEBPACK_IMPORTED_MODULE_45__[\"QuestionImageModel\"]; });\n\n/* harmony import */ var _question_signaturepad__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ../../question_signaturepad */ \"./src/question_signaturepad.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionSignaturePadModel\", function() { return _question_signaturepad__WEBPACK_IMPORTED_MODULE_46__[\"QuestionSignaturePadModel\"]; });\n\n/* harmony import */ var _question_paneldynamic__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ../../question_paneldynamic */ \"./src/question_paneldynamic.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionPanelDynamicModel\", function() { return _question_paneldynamic__WEBPACK_IMPORTED_MODULE_47__[\"QuestionPanelDynamicModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionPanelDynamicItem\", function() { return _question_paneldynamic__WEBPACK_IMPORTED_MODULE_47__[\"QuestionPanelDynamicItem\"]; });\n\n/* harmony import */ var _surveytimer__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ../../surveytimer */ \"./src/surveytimer.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTimer\", function() { return _surveytimer__WEBPACK_IMPORTED_MODULE_48__[\"SurveyTimer\"]; });\n\n/* harmony import */ var _surveyProgressButtons__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ../../surveyProgressButtons */ \"./src/surveyProgressButtons.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyProgressButtonsModel\", function() { return _surveyProgressButtons__WEBPACK_IMPORTED_MODULE_49__[\"SurveyProgressButtonsModel\"]; });\n\n/* harmony import */ var _survey__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ../../survey */ \"./src/survey.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyModel\", function() { return _survey__WEBPACK_IMPORTED_MODULE_50__[\"SurveyModel\"]; });\n\n/* harmony import */ var _trigger__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ../../trigger */ \"./src/trigger.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTrigger\", function() { return _trigger__WEBPACK_IMPORTED_MODULE_51__[\"SurveyTrigger\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerComplete\", function() { return _trigger__WEBPACK_IMPORTED_MODULE_51__[\"SurveyTriggerComplete\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerSetValue\", function() { return _trigger__WEBPACK_IMPORTED_MODULE_51__[\"SurveyTriggerSetValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerVisible\", function() { return _trigger__WEBPACK_IMPORTED_MODULE_51__[\"SurveyTriggerVisible\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerCopyValue\", function() { return _trigger__WEBPACK_IMPORTED_MODULE_51__[\"SurveyTriggerCopyValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerRunExpression\", function() { return _trigger__WEBPACK_IMPORTED_MODULE_51__[\"SurveyTriggerRunExpression\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Trigger\", function() { return _trigger__WEBPACK_IMPORTED_MODULE_51__[\"Trigger\"]; });\n\n/* harmony import */ var _surveyWindow__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ../../surveyWindow */ \"./src/surveyWindow.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyWindowModel\", function() { return _surveyWindow__WEBPACK_IMPORTED_MODULE_52__[\"SurveyWindowModel\"]; });\n\n/* harmony import */ var _textPreProcessor__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ../../textPreProcessor */ \"./src/textPreProcessor.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TextPreProcessor\", function() { return _textPreProcessor__WEBPACK_IMPORTED_MODULE_53__[\"TextPreProcessor\"]; });\n\n/* harmony import */ var _dxSurveyService__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ../../dxSurveyService */ \"./src/dxSurveyService.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"dxSurveyService\", function() { return _dxSurveyService__WEBPACK_IMPORTED_MODULE_54__[\"dxSurveyService\"]; });\n\n/* harmony import */ var _localization_english__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ../../localization/english */ \"./src/localization/english.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"englishStrings\", function() { return _localization_english__WEBPACK_IMPORTED_MODULE_55__[\"englishStrings\"]; });\n\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ../../surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"surveyLocalization\", function() { return _surveyStrings__WEBPACK_IMPORTED_MODULE_56__[\"surveyLocalization\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"surveyStrings\", function() { return _surveyStrings__WEBPACK_IMPORTED_MODULE_56__[\"surveyStrings\"]; });\n\n/* harmony import */ var _questionCustomWidgets__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ../../questionCustomWidgets */ \"./src/questionCustomWidgets.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCustomWidget\", function() { return _questionCustomWidgets__WEBPACK_IMPORTED_MODULE_57__[\"QuestionCustomWidget\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CustomWidgetCollection\", function() { return _questionCustomWidgets__WEBPACK_IMPORTED_MODULE_57__[\"CustomWidgetCollection\"]; });\n\n/* harmony import */ var _question_custom__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ../../question_custom */ \"./src/question_custom.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCustomModel\", function() { return _question_custom__WEBPACK_IMPORTED_MODULE_58__[\"QuestionCustomModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCompositeModel\", function() { return _question_custom__WEBPACK_IMPORTED_MODULE_58__[\"QuestionCompositeModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ComponentQuestionJSON\", function() { return _question_custom__WEBPACK_IMPORTED_MODULE_58__[\"ComponentQuestionJSON\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ComponentCollection\", function() { return _question_custom__WEBPACK_IMPORTED_MODULE_58__[\"ComponentCollection\"]; });\n\n/* harmony import */ var _stylesmanager__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! ../../stylesmanager */ \"./src/stylesmanager.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"StylesManager\", function() { return _stylesmanager__WEBPACK_IMPORTED_MODULE_59__[\"StylesManager\"]; });\n\n/* harmony import */ var _list__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! ../../list */ \"./src/list.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ListModel\", function() { return _list__WEBPACK_IMPORTED_MODULE_60__[\"ListModel\"]; });\n\n/* harmony import */ var _popup__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! ../../popup */ \"./src/popup.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PopupModel\", function() { return _popup__WEBPACK_IMPORTED_MODULE_61__[\"PopupModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PopupBaseViewModel\", function() { return _popup__WEBPACK_IMPORTED_MODULE_61__[\"PopupBaseViewModel\"]; });\n\n/* harmony import */ var _question_buttongroup__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(/*! ../../question_buttongroup */ \"./src/question_buttongroup.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionButtonGroupModel\", function() { return _question_buttongroup__WEBPACK_IMPORTED_MODULE_62__[\"QuestionButtonGroupModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroupItemModel\", function() { return _question_buttongroup__WEBPACK_IMPORTED_MODULE_62__[\"ButtonGroupItemModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroupItemValue\", function() { return _question_buttongroup__WEBPACK_IMPORTED_MODULE_62__[\"ButtonGroupItemValue\"]; });\n\n/* harmony import */ var _utils_is_mobile__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! ../../utils/is-mobile */ \"./src/utils/is-mobile.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"IsMobile\", function() { return _utils_is_mobile__WEBPACK_IMPORTED_MODULE_63__[\"IsMobile\"]; });\n\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(/*! ../../utils/utils */ \"./src/utils/utils.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"confirmAction\", function() { return _utils_utils__WEBPACK_IMPORTED_MODULE_64__[\"confirmAction\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"detectIEOrEdge\", function() { return _utils_utils__WEBPACK_IMPORTED_MODULE_64__[\"detectIEOrEdge\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"doKey2Click\", function() { return _utils_utils__WEBPACK_IMPORTED_MODULE_64__[\"doKey2Click\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"loadFileFromBase64\", function() { return _utils_utils__WEBPACK_IMPORTED_MODULE_64__[\"loadFileFromBase64\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"createSvg\", function() { return _utils_utils__WEBPACK_IMPORTED_MODULE_64__[\"createSvg\"]; });\n\n/* harmony import */ var _defaultCss_cssstandard__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(/*! ../../defaultCss/cssstandard */ \"./src/defaultCss/cssstandard.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"surveyCss\", function() { return _defaultCss_cssstandard__WEBPACK_IMPORTED_MODULE_65__[\"surveyCss\"]; });\n\n/* harmony import */ var _dragdrophelper__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(/*! ../../dragdrophelper */ \"./src/dragdrophelper.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DragDropHelper\", function() { return _dragdrophelper__WEBPACK_IMPORTED_MODULE_66__[\"DragDropHelper\"]; });\n\n// styles\n\n//import \"../../modern.scss\";\nvar Version;\nVersion = \"\" + \"1.8.58\";\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\n// export { cultureInfo } from \"../../cultureInfo\";\n\n\n\n\n\n\n\n\n\n//Uncomment to include the \"date\" question type.\n//export {default as QuestionDateModel} from \"../../plugins/question_date\";\n\n\n\n/***/ }),\n\n/***/ \"./src/entries/core.ts\":\n/*!*****************************!*\\\n !*** ./src/entries/core.ts ***!\n \\*****************************/\n/*! exports provided: Version, settings, Helpers, AnswerCountValidator, EmailValidator, NumericValidator, RegexValidator, SurveyValidator, TextValidator, ValidatorResult, ExpressionValidator, ValidatorRunner, ItemValue, Base, Event, ArrayChanges, SurveyError, SurveyElement, CalculatedValue, CustomError, AnswerRequiredError, OneAnswerRequiredError, RequreNumericError, ExceedSizeError, LocalizableString, LocalizableStrings, HtmlConditionItem, UrlConditionItem, ChoicesRestful, ChoicesRestfull, FunctionFactory, registerFunction, ConditionRunner, ExpressionRunner, Operand, Const, BinaryOperand, Variable, FunctionOperand, ArrayOperand, ConditionsParser, ProcessValue, JsonError, JsonIncorrectTypeError, JsonMetadata, JsonMetadataClass, JsonMissingTypeError, JsonMissingTypeErrorBase, JsonObject, JsonObjectProperty, JsonRequiredPropertyError, JsonUnknownPropertyError, Serializer, property, propertyArray, MatrixDropdownCell, MatrixDropdownColumn, matrixDropdownColumnTypes, MatrixDropdownRowModelBase, QuestionMatrixDropdownModelBase, QuestionMatrixDropdownRenderedCell, QuestionMatrixDropdownRenderedRow, QuestionMatrixDropdownRenderedTable, MatrixDropdownRowModel, QuestionMatrixDropdownModel, MatrixDynamicRowModel, QuestionMatrixDynamicModel, MatrixRowModel, MatrixCells, QuestionMatrixModel, MultipleTextItemModel, QuestionMultipleTextModel, PanelModel, PanelModelBase, QuestionRowModel, FlowPanelModel, PageModel, Question, QuestionNonValue, QuestionEmptyModel, QuestionCheckboxBase, QuestionSelectBase, QuestionCheckboxModel, QuestionRankingModel, QuestionCommentModel, QuestionDropdownModel, QuestionFactory, ElementFactory, QuestionFileModel, QuestionHtmlModel, QuestionRadiogroupModel, QuestionRatingModel, QuestionExpressionModel, QuestionTextModel, QuestionBooleanModel, QuestionImagePickerModel, ImageItemValue, QuestionImageModel, QuestionSignaturePadModel, QuestionPanelDynamicModel, QuestionPanelDynamicItem, SurveyTimer, SurveyProgressButtonsModel, SurveyModel, SurveyTrigger, SurveyTriggerComplete, SurveyTriggerSetValue, SurveyTriggerVisible, SurveyTriggerCopyValue, SurveyTriggerRunExpression, Trigger, SurveyWindowModel, TextPreProcessor, dxSurveyService, englishStrings, surveyLocalization, surveyStrings, QuestionCustomWidget, CustomWidgetCollection, QuestionCustomModel, QuestionCompositeModel, ComponentQuestionJSON, ComponentCollection, StylesManager, ListModel, PopupModel, PopupBaseViewModel, QuestionButtonGroupModel, ButtonGroupItemModel, ButtonGroupItemValue, IsMobile, confirmAction, detectIEOrEdge, doKey2Click, loadFileFromBase64, createSvg, surveyCss, DragDropHelper, defaultStandardCss, defaultBootstrapCss, defaultBootstrapMaterialCss, modernCss, RendererFactory, ResponsivityManager, VerticalResponsivityManager, unwrap, Action, AdaptiveActionContainer, ActionContainer */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _chunks_model__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunks/model */ \"./src/entries/chunks/model.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Version\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"Version\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"settings\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"settings\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Helpers\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AnswerCountValidator\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"AnswerCountValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"EmailValidator\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"EmailValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"NumericValidator\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"NumericValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RegexValidator\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"RegexValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyValidator\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TextValidator\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"TextValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ValidatorResult\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ValidatorResult\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ExpressionValidator\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ExpressionValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ValidatorRunner\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ValidatorRunner\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ItemValue\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ItemValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Base\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Event\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"Event\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ArrayChanges\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ArrayChanges\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyError\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyElement\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyElement\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CalculatedValue\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"CalculatedValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CustomError\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"CustomError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AnswerRequiredError\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"AnswerRequiredError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"OneAnswerRequiredError\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"OneAnswerRequiredError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RequreNumericError\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"RequreNumericError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ExceedSizeError\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ExceedSizeError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"LocalizableString\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"LocalizableString\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"LocalizableStrings\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"LocalizableStrings\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"HtmlConditionItem\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"HtmlConditionItem\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"UrlConditionItem\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"UrlConditionItem\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ChoicesRestful\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ChoicesRestful\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ChoicesRestfull\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ChoicesRestfull\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FunctionFactory\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"FunctionFactory\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"registerFunction\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"registerFunction\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ConditionRunner\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ConditionRunner\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ExpressionRunner\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ExpressionRunner\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Operand\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"Operand\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Const\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"Const\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BinaryOperand\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"BinaryOperand\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Variable\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"Variable\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FunctionOperand\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"FunctionOperand\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ArrayOperand\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ArrayOperand\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ConditionsParser\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ConditionsParser\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ProcessValue\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ProcessValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonError\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonIncorrectTypeError\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonIncorrectTypeError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonMetadata\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonMetadata\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonMetadataClass\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonMetadataClass\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonMissingTypeError\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonMissingTypeError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonMissingTypeErrorBase\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonMissingTypeErrorBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonObject\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonObject\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonObjectProperty\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonObjectProperty\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonRequiredPropertyError\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonRequiredPropertyError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonUnknownPropertyError\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonUnknownPropertyError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Serializer\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"property\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"property\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"propertyArray\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"propertyArray\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownCell\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdownCell\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownColumn\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdownColumn\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"matrixDropdownColumnTypes\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"matrixDropdownColumnTypes\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownRowModelBase\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdownRowModelBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownModelBase\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownModelBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownRenderedCell\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownRenderedCell\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownRenderedRow\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownRenderedRow\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownRenderedTable\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownRenderedTable\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownRowModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdownRowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDynamicRowModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDynamicRowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDynamicModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDynamicModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixRowModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"MatrixRowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixCells\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"MatrixCells\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MultipleTextItemModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"MultipleTextItemModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMultipleTextModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMultipleTextModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"PanelModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelModelBase\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"PanelModelBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionRowModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionRowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FlowPanelModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"FlowPanelModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PageModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"PageModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Question\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"Question\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionNonValue\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionNonValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionEmptyModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionEmptyModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCheckboxBase\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCheckboxBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionSelectBase\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionSelectBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCheckboxModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCheckboxModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionRankingModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionRankingModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCommentModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCommentModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionDropdownModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionDropdownModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionFactory\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionFactory\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ElementFactory\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ElementFactory\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionFileModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionFileModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionHtmlModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionHtmlModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionRadiogroupModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionRadiogroupModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionRatingModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionRatingModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionExpressionModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionExpressionModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionTextModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionTextModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionBooleanModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionBooleanModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionImagePickerModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionImagePickerModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ImageItemValue\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ImageItemValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionImageModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionImageModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionSignaturePadModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionSignaturePadModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionPanelDynamicModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionPanelDynamicModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionPanelDynamicItem\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionPanelDynamicItem\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTimer\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTimer\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyProgressButtonsModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyProgressButtonsModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTrigger\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTrigger\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerComplete\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerComplete\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerSetValue\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerSetValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerVisible\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerVisible\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerCopyValue\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerCopyValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerRunExpression\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerRunExpression\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Trigger\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"Trigger\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyWindowModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyWindowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TextPreProcessor\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"TextPreProcessor\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"dxSurveyService\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"dxSurveyService\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"englishStrings\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"englishStrings\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"surveyLocalization\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"surveyStrings\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"surveyStrings\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCustomWidget\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCustomWidget\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CustomWidgetCollection\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"CustomWidgetCollection\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCustomModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCustomModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCompositeModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCompositeModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ComponentQuestionJSON\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ComponentQuestionJSON\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ComponentCollection\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ComponentCollection\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"StylesManager\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"StylesManager\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ListModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ListModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PopupModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"PopupModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PopupBaseViewModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"PopupBaseViewModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionButtonGroupModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionButtonGroupModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroupItemModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ButtonGroupItemModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroupItemValue\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ButtonGroupItemValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"IsMobile\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"IsMobile\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"confirmAction\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"confirmAction\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"detectIEOrEdge\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"detectIEOrEdge\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"doKey2Click\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"doKey2Click\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"loadFileFromBase64\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"loadFileFromBase64\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"createSvg\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"createSvg\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"surveyCss\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"surveyCss\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DragDropHelper\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"DragDropHelper\"]; });\n\n/* harmony import */ var _chunks_localization__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chunks/localization */ \"./src/entries/chunks/localization.ts\");\n/* harmony import */ var _defaultCss_cssstandard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../defaultCss/cssstandard */ \"./src/defaultCss/cssstandard.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"defaultStandardCss\", function() { return _defaultCss_cssstandard__WEBPACK_IMPORTED_MODULE_2__[\"defaultStandardCss\"]; });\n\n/* harmony import */ var _defaultCss_cssbootstrap__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../defaultCss/cssbootstrap */ \"./src/defaultCss/cssbootstrap.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"defaultBootstrapCss\", function() { return _defaultCss_cssbootstrap__WEBPACK_IMPORTED_MODULE_3__[\"defaultBootstrapCss\"]; });\n\n/* harmony import */ var _defaultCss_cssbootstrapmaterial__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../defaultCss/cssbootstrapmaterial */ \"./src/defaultCss/cssbootstrapmaterial.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"defaultBootstrapMaterialCss\", function() { return _defaultCss_cssbootstrapmaterial__WEBPACK_IMPORTED_MODULE_4__[\"defaultBootstrapMaterialCss\"]; });\n\n/* harmony import */ var _defaultCss_cssmodern__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../defaultCss/cssmodern */ \"./src/defaultCss/cssmodern.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"modernCss\", function() { return _defaultCss_cssmodern__WEBPACK_IMPORTED_MODULE_5__[\"modernCss\"]; });\n\n/* harmony import */ var _rendererFactory__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../rendererFactory */ \"./src/rendererFactory.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RendererFactory\", function() { return _rendererFactory__WEBPACK_IMPORTED_MODULE_6__[\"RendererFactory\"]; });\n\n/* harmony import */ var _utils_responsivity_manager__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/responsivity-manager */ \"./src/utils/responsivity-manager.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ResponsivityManager\", function() { return _utils_responsivity_manager__WEBPACK_IMPORTED_MODULE_7__[\"ResponsivityManager\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"VerticalResponsivityManager\", function() { return _utils_responsivity_manager__WEBPACK_IMPORTED_MODULE_7__[\"VerticalResponsivityManager\"]; });\n\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/utils */ \"./src/utils/utils.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"unwrap\", function() { return _utils_utils__WEBPACK_IMPORTED_MODULE_8__[\"unwrap\"]; });\n\n/* harmony import */ var _actions_action__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../actions/action */ \"./src/actions/action.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Action\", function() { return _actions_action__WEBPACK_IMPORTED_MODULE_9__[\"Action\"]; });\n\n/* harmony import */ var _actions_adaptive_container__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../actions/adaptive-container */ \"./src/actions/adaptive-container.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AdaptiveActionContainer\", function() { return _actions_adaptive_container__WEBPACK_IMPORTED_MODULE_10__[\"AdaptiveActionContainer\"]; });\n\n/* harmony import */ var _actions_container__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../actions/container */ \"./src/actions/container.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionContainer\", function() { return _actions_container__WEBPACK_IMPORTED_MODULE_11__[\"ActionContainer\"]; });\n\n// model\n\n// localization\n\n// css standard classes\n\n// css bootstrap classes\n\n// css bootstrap + material classes\n\n// css modern classes\n\n// utils\n\n\n\n\n\n\n\n\n/***/ }),\n\n/***/ \"./src/entries/vue-ui.ts\":\n/*!*******************************!*\\\n !*** ./src/entries/vue-ui.ts ***!\n \\*******************************/\n/*! exports provided: Model, WindowModel, Survey, CustomWidget, SurveyString, SurveyStringViewer, SurveyStringEditor, SurveyElementVue, Window, Page, Radiogroup, RadiogroupItem, OtherChoice, Rating, Comment, Ranking, RankingItem, Checkbox, CheckboxItem, ButtonGroup, ButtonGroupItem, QuestionText, Boolean, BooleanSwitch, BooleanCheckbox, Empty, MultipleText, Matrix, Dropdown, File, MatrixCell, MatrixTable, MatrixDropdown, MatrixDynamic, Errors, Html, Expression, ImagePicker, PanelDynamic, PanelDynamicRemove, PanelDynamicProgress, Navigation, Progress, ProgressButtons, TimerPanel, Panel, FlowPanel, FlowPanelElement, Row, ElementHeader, QuestionImage, SignaturePad, SurveyHeader, Custom, Composite, TitleContent, TitleActions, DefaultTitle, ActionBarViewModel, SvgIcon, Popup, List, SurveyQuestionMatrixDynamicRemoveButton, SurveyQuestionMatrixDetailButton, SurveyQuestionMatrixDynamicDragDropIcon */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _vue_surveyModel__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../vue/surveyModel */ \"./src/vue/surveyModel.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Model\", function() { return _vue_surveyModel__WEBPACK_IMPORTED_MODULE_0__[\"VueSurveyModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"WindowModel\", function() { return _vue_surveyModel__WEBPACK_IMPORTED_MODULE_0__[\"VueSurveyWindowModel\"]; });\n\n/* harmony import */ var _vue_survey_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../vue/survey.vue */ \"./src/vue/survey.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Survey\", function() { return _vue_survey_vue__WEBPACK_IMPORTED_MODULE_1__[\"Survey\"]; });\n\n/* harmony import */ var _vue_customwidget_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue/customwidget.vue */ \"./src/vue/customwidget.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CustomWidget\", function() { return _vue_customwidget_vue__WEBPACK_IMPORTED_MODULE_2__[\"CustomWidget\"]; });\n\n/* harmony import */ var _vue_string_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../vue/string.vue */ \"./src/vue/string.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyString\", function() { return _vue_string_vue__WEBPACK_IMPORTED_MODULE_3__[\"SurveyString\"]; });\n\n/* harmony import */ var _vue_string_viewer_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../vue/string-viewer.vue */ \"./src/vue/string-viewer.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyStringViewer\", function() { return _vue_string_viewer_vue__WEBPACK_IMPORTED_MODULE_4__[\"SurveyStringViewer\"]; });\n\n/* harmony import */ var _vue_string_editor_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../vue/string-editor.vue */ \"./src/vue/string-editor.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyStringEditor\", function() { return _vue_string_editor_vue__WEBPACK_IMPORTED_MODULE_5__[\"SurveyStringEditor\"]; });\n\n/* harmony import */ var _vue_element_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../vue/element.vue */ \"./src/vue/element.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyElementVue\", function() { return _vue_element_vue__WEBPACK_IMPORTED_MODULE_6__[\"SurveyElementVue\"]; });\n\n/* harmony import */ var _vue_window_vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../vue/window.vue */ \"./src/vue/window.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Window\", function() { return _vue_window_vue__WEBPACK_IMPORTED_MODULE_7__[\"Window\"]; });\n\n/* harmony import */ var _vue_page_vue__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../vue/page.vue */ \"./src/vue/page.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Page\", function() { return _vue_page_vue__WEBPACK_IMPORTED_MODULE_8__[\"Page\"]; });\n\n/* harmony import */ var _vue_radiogroup_vue__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../vue/radiogroup.vue */ \"./src/vue/radiogroup.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Radiogroup\", function() { return _vue_radiogroup_vue__WEBPACK_IMPORTED_MODULE_9__[\"Radiogroup\"]; });\n\n/* harmony import */ var _vue_radiogroupitem_vue__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../vue/radiogroupitem.vue */ \"./src/vue/radiogroupitem.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RadiogroupItem\", function() { return _vue_radiogroupitem_vue__WEBPACK_IMPORTED_MODULE_10__[\"RadiogroupItem\"]; });\n\n/* harmony import */ var _vue_otherChoice_vue__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../vue/otherChoice.vue */ \"./src/vue/otherChoice.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"OtherChoice\", function() { return _vue_otherChoice_vue__WEBPACK_IMPORTED_MODULE_11__[\"OtherChoice\"]; });\n\n/* harmony import */ var _vue_rating_vue__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../vue/rating.vue */ \"./src/vue/rating.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Rating\", function() { return _vue_rating_vue__WEBPACK_IMPORTED_MODULE_12__[\"Rating\"]; });\n\n/* harmony import */ var _vue_comment_vue__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../vue/comment.vue */ \"./src/vue/comment.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Comment\", function() { return _vue_comment_vue__WEBPACK_IMPORTED_MODULE_13__[\"Comment\"]; });\n\n/* harmony import */ var _vue_ranking_ranking_vue__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../vue/ranking/ranking.vue */ \"./src/vue/ranking/ranking.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Ranking\", function() { return _vue_ranking_ranking_vue__WEBPACK_IMPORTED_MODULE_14__[\"Ranking\"]; });\n\n/* harmony import */ var _vue_ranking_ranking_item_vue__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../vue/ranking/ranking-item.vue */ \"./src/vue/ranking/ranking-item.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RankingItem\", function() { return _vue_ranking_ranking_item_vue__WEBPACK_IMPORTED_MODULE_15__[\"RankingItem\"]; });\n\n/* harmony import */ var _vue_checkbox_vue__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../vue/checkbox.vue */ \"./src/vue/checkbox.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Checkbox\", function() { return _vue_checkbox_vue__WEBPACK_IMPORTED_MODULE_16__[\"Checkbox\"]; });\n\n/* harmony import */ var _vue_checkboxitem_vue__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../vue/checkboxitem.vue */ \"./src/vue/checkboxitem.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CheckboxItem\", function() { return _vue_checkboxitem_vue__WEBPACK_IMPORTED_MODULE_17__[\"CheckboxItem\"]; });\n\n/* harmony import */ var _vue_buttongroup_vue__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../vue/buttongroup.vue */ \"./src/vue/buttongroup.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroup\", function() { return _vue_buttongroup_vue__WEBPACK_IMPORTED_MODULE_18__[\"ButtonGroup\"]; });\n\n/* harmony import */ var _vue_buttongroupitem_vue__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../vue/buttongroupitem.vue */ \"./src/vue/buttongroupitem.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroupItem\", function() { return _vue_buttongroupitem_vue__WEBPACK_IMPORTED_MODULE_19__[\"ButtonGroupItem\"]; });\n\n/* harmony import */ var _vue_text_vue__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../vue/text.vue */ \"./src/vue/text.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionText\", function() { return _vue_text_vue__WEBPACK_IMPORTED_MODULE_20__[\"QuestionText\"]; });\n\n/* harmony import */ var _vue_boolean__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../vue/boolean */ \"./src/vue/boolean.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Boolean\", function() { return _vue_boolean__WEBPACK_IMPORTED_MODULE_21__[\"Boolean\"]; });\n\n/* harmony import */ var _vue_boolean_switch_vue__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../vue/boolean-switch.vue */ \"./src/vue/boolean-switch.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BooleanSwitch\", function() { return _vue_boolean_switch_vue__WEBPACK_IMPORTED_MODULE_22__[\"BooleanSwitch\"]; });\n\n/* harmony import */ var _vue_boolean_checkbox_vue__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../vue/boolean-checkbox.vue */ \"./src/vue/boolean-checkbox.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BooleanCheckbox\", function() { return _vue_boolean_checkbox_vue__WEBPACK_IMPORTED_MODULE_23__[\"BooleanCheckbox\"]; });\n\n/* harmony import */ var _vue_empty_vue__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ../vue/empty.vue */ \"./src/vue/empty.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Empty\", function() { return _vue_empty_vue__WEBPACK_IMPORTED_MODULE_24__[\"Empty\"]; });\n\n/* harmony import */ var _vue_multipletext_vue__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../vue/multipletext.vue */ \"./src/vue/multipletext.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MultipleText\", function() { return _vue_multipletext_vue__WEBPACK_IMPORTED_MODULE_25__[\"MultipleText\"]; });\n\n/* harmony import */ var _vue_matrix_vue__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ../vue/matrix.vue */ \"./src/vue/matrix.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Matrix\", function() { return _vue_matrix_vue__WEBPACK_IMPORTED_MODULE_26__[\"Matrix\"]; });\n\n/* harmony import */ var _vue_dropdown_vue__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ../vue/dropdown.vue */ \"./src/vue/dropdown.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Dropdown\", function() { return _vue_dropdown_vue__WEBPACK_IMPORTED_MODULE_27__[\"Dropdown\"]; });\n\n/* harmony import */ var _vue_file_vue__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ../vue/file.vue */ \"./src/vue/file.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"File\", function() { return _vue_file_vue__WEBPACK_IMPORTED_MODULE_28__[\"File\"]; });\n\n/* harmony import */ var _vue_matrixcell_vue__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ../vue/matrixcell.vue */ \"./src/vue/matrixcell.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixCell\", function() { return _vue_matrixcell_vue__WEBPACK_IMPORTED_MODULE_29__[\"MatrixCell\"]; });\n\n/* harmony import */ var _vue_matrixtable_vue__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ../vue/matrixtable.vue */ \"./src/vue/matrixtable.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixTable\", function() { return _vue_matrixtable_vue__WEBPACK_IMPORTED_MODULE_30__[\"MatrixTable\"]; });\n\n/* harmony import */ var _vue_matrixdropdown_vue__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ../vue/matrixdropdown.vue */ \"./src/vue/matrixdropdown.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdown\", function() { return _vue_matrixdropdown_vue__WEBPACK_IMPORTED_MODULE_31__[\"MatrixDropdown\"]; });\n\n/* harmony import */ var _vue_matrixdynamic_vue__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ../vue/matrixdynamic.vue */ \"./src/vue/matrixdynamic.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDynamic\", function() { return _vue_matrixdynamic_vue__WEBPACK_IMPORTED_MODULE_32__[\"MatrixDynamic\"]; });\n\n/* harmony import */ var _vue_errors_vue__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ../vue/errors.vue */ \"./src/vue/errors.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Errors\", function() { return _vue_errors_vue__WEBPACK_IMPORTED_MODULE_33__[\"Errors\"]; });\n\n/* harmony import */ var _vue_html_vue__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ../vue/html.vue */ \"./src/vue/html.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Html\", function() { return _vue_html_vue__WEBPACK_IMPORTED_MODULE_34__[\"Html\"]; });\n\n/* harmony import */ var _vue_expression_vue__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ../vue/expression.vue */ \"./src/vue/expression.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Expression\", function() { return _vue_expression_vue__WEBPACK_IMPORTED_MODULE_35__[\"Expression\"]; });\n\n/* harmony import */ var _vue_imagepicker_vue__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ../vue/imagepicker.vue */ \"./src/vue/imagepicker.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ImagePicker\", function() { return _vue_imagepicker_vue__WEBPACK_IMPORTED_MODULE_36__[\"ImagePicker\"]; });\n\n/* harmony import */ var _vue_paneldynamic_vue__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ../vue/paneldynamic.vue */ \"./src/vue/paneldynamic.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamic\", function() { return _vue_paneldynamic_vue__WEBPACK_IMPORTED_MODULE_37__[\"PanelDynamic\"]; });\n\n/* harmony import */ var _vue_paneldynamicremove_vue__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ../vue/paneldynamicremove.vue */ \"./src/vue/paneldynamicremove.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamicRemove\", function() { return _vue_paneldynamicremove_vue__WEBPACK_IMPORTED_MODULE_38__[\"PanelDynamicRemove\"]; });\n\n/* harmony import */ var _vue_paneldynamicprogress_vue__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ../vue/paneldynamicprogress.vue */ \"./src/vue/paneldynamicprogress.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamicProgress\", function() { return _vue_paneldynamicprogress_vue__WEBPACK_IMPORTED_MODULE_39__[\"PanelDynamicProgress\"]; });\n\n/* harmony import */ var _vue_navigation_vue__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ../vue/navigation.vue */ \"./src/vue/navigation.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Navigation\", function() { return _vue_navigation_vue__WEBPACK_IMPORTED_MODULE_40__[\"Navigation\"]; });\n\n/* harmony import */ var _vue_progress_vue__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ../vue/progress.vue */ \"./src/vue/progress.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Progress\", function() { return _vue_progress_vue__WEBPACK_IMPORTED_MODULE_41__[\"Progress\"]; });\n\n/* harmony import */ var _vue_progressButtons_vue__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ../vue/progressButtons.vue */ \"./src/vue/progressButtons.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ProgressButtons\", function() { return _vue_progressButtons_vue__WEBPACK_IMPORTED_MODULE_42__[\"ProgressButtons\"]; });\n\n/* harmony import */ var _vue_timerpanel_vue__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ../vue/timerpanel.vue */ \"./src/vue/timerpanel.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TimerPanel\", function() { return _vue_timerpanel_vue__WEBPACK_IMPORTED_MODULE_43__[\"TimerPanel\"]; });\n\n/* harmony import */ var _vue_panel_vue__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ../vue/panel.vue */ \"./src/vue/panel.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Panel\", function() { return _vue_panel_vue__WEBPACK_IMPORTED_MODULE_44__[\"Panel\"]; });\n\n/* harmony import */ var _vue_flowpanel_vue__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ../vue/flowpanel.vue */ \"./src/vue/flowpanel.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FlowPanel\", function() { return _vue_flowpanel_vue__WEBPACK_IMPORTED_MODULE_45__[\"FlowPanel\"]; });\n\n/* harmony import */ var _vue_flowpanelelement_vue__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ../vue/flowpanelelement.vue */ \"./src/vue/flowpanelelement.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FlowPanelElement\", function() { return _vue_flowpanelelement_vue__WEBPACK_IMPORTED_MODULE_46__[\"FlowPanelElement\"]; });\n\n/* harmony import */ var _vue_row_vue__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ../vue/row.vue */ \"./src/vue/row.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Row\", function() { return _vue_row_vue__WEBPACK_IMPORTED_MODULE_47__[\"Row\"]; });\n\n/* harmony import */ var _vue_elementheader_vue__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ../vue/elementheader.vue */ \"./src/vue/elementheader.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ElementHeader\", function() { return _vue_elementheader_vue__WEBPACK_IMPORTED_MODULE_48__[\"ElementHeader\"]; });\n\n/* harmony import */ var _vue_image_vue__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ../vue/image.vue */ \"./src/vue/image.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionImage\", function() { return _vue_image_vue__WEBPACK_IMPORTED_MODULE_49__[\"QuestionImage\"]; });\n\n/* harmony import */ var _vue_signaturepad_vue__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ../vue/signaturepad.vue */ \"./src/vue/signaturepad.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SignaturePad\", function() { return _vue_signaturepad_vue__WEBPACK_IMPORTED_MODULE_50__[\"SignaturePad\"]; });\n\n/* harmony import */ var _vue_header_vue__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ../vue/header.vue */ \"./src/vue/header.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyHeader\", function() { return _vue_header_vue__WEBPACK_IMPORTED_MODULE_51__[\"SurveyHeader\"]; });\n\n/* harmony import */ var _vue_custom_vue__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ../vue/custom.vue */ \"./src/vue/custom.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Custom\", function() { return _vue_custom_vue__WEBPACK_IMPORTED_MODULE_52__[\"Custom\"]; });\n\n/* harmony import */ var _vue_composite_vue__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ../vue/composite.vue */ \"./src/vue/composite.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Composite\", function() { return _vue_composite_vue__WEBPACK_IMPORTED_MODULE_53__[\"Composite\"]; });\n\n/* harmony import */ var _vue_titlecontent_vue__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ../vue/titlecontent.vue */ \"./src/vue/titlecontent.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TitleContent\", function() { return _vue_titlecontent_vue__WEBPACK_IMPORTED_MODULE_54__[\"TitleContent\"]; });\n\n/* harmony import */ var _vue_components_title_actions_title_actions_vue__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ../vue/components/title-actions/title-actions.vue */ \"./src/vue/components/title-actions/title-actions.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TitleActions\", function() { return _vue_components_title_actions_title_actions_vue__WEBPACK_IMPORTED_MODULE_55__[\"TitleActions\"]; });\n\n/* harmony import */ var _vue_components_default_title_default_title_vue__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ../vue/components/default-title/default-title.vue */ \"./src/vue/components/default-title/default-title.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DefaultTitle\", function() { return _vue_components_default_title_default_title_vue__WEBPACK_IMPORTED_MODULE_56__[\"DefaultTitle\"]; });\n\n/* harmony import */ var _vue_components_action_bar_action_bar_vue__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ../vue/components/action-bar/action-bar.vue */ \"./src/vue/components/action-bar/action-bar.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarViewModel\", function() { return _vue_components_action_bar_action_bar_vue__WEBPACK_IMPORTED_MODULE_57__[\"ActionBarViewModel\"]; });\n\n/* harmony import */ var _vue_components_svg_icon_svg_icon_vue__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ../vue/components/svg-icon/svg-icon.vue */ \"./src/vue/components/svg-icon/svg-icon.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SvgIcon\", function() { return _vue_components_svg_icon_svg_icon_vue__WEBPACK_IMPORTED_MODULE_58__[\"SvgIcon\"]; });\n\n/* harmony import */ var _vue_components_popup_popup_vue__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! ../vue/components/popup/popup.vue */ \"./src/vue/components/popup/popup.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Popup\", function() { return _vue_components_popup_popup_vue__WEBPACK_IMPORTED_MODULE_59__[\"Popup\"]; });\n\n/* harmony import */ var _vue_components_list_list_vue__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! ../vue/components/list/list.vue */ \"./src/vue/components/list/list.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"List\", function() { return _vue_components_list_list_vue__WEBPACK_IMPORTED_MODULE_60__[\"List\"]; });\n\n/* harmony import */ var _vue_components_matrix_actions_remove_button_remove_button_vue__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! ../vue/components/matrix-actions/remove-button/remove-button.vue */ \"./src/vue/components/matrix-actions/remove-button/remove-button.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyQuestionMatrixDynamicRemoveButton\", function() { return _vue_components_matrix_actions_remove_button_remove_button_vue__WEBPACK_IMPORTED_MODULE_61__[\"SurveyQuestionMatrixDynamicRemoveButton\"]; });\n\n/* harmony import */ var _vue_components_matrix_actions_detail_button_detail_button_vue__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(/*! ../vue/components/matrix-actions/detail-button/detail-button.vue */ \"./src/vue/components/matrix-actions/detail-button/detail-button.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyQuestionMatrixDetailButton\", function() { return _vue_components_matrix_actions_detail_button_detail_button_vue__WEBPACK_IMPORTED_MODULE_62__[\"SurveyQuestionMatrixDetailButton\"]; });\n\n/* harmony import */ var _vue_components_matrix_actions_drag_drop_icon_drag_drop_icon_vue__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! ../vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue */ \"./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyQuestionMatrixDynamicDragDropIcon\", function() { return _vue_components_matrix_actions_drag_drop_icon_drag_drop_icon_vue__WEBPACK_IMPORTED_MODULE_63__[\"SurveyQuestionMatrixDynamicDragDropIcon\"]; });\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\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/***/ }),\n\n/***/ \"./src/entries/vue.ts\":\n/*!****************************!*\\\n !*** ./src/entries/vue.ts ***!\n \\****************************/\n/*! exports provided: Version, settings, Helpers, AnswerCountValidator, EmailValidator, NumericValidator, RegexValidator, SurveyValidator, TextValidator, ValidatorResult, ExpressionValidator, ValidatorRunner, ItemValue, Base, Event, ArrayChanges, SurveyError, SurveyElement, CalculatedValue, CustomError, AnswerRequiredError, OneAnswerRequiredError, RequreNumericError, ExceedSizeError, LocalizableString, LocalizableStrings, HtmlConditionItem, UrlConditionItem, ChoicesRestful, ChoicesRestfull, FunctionFactory, registerFunction, ConditionRunner, ExpressionRunner, Operand, Const, BinaryOperand, Variable, FunctionOperand, ArrayOperand, ConditionsParser, ProcessValue, JsonError, JsonIncorrectTypeError, JsonMetadata, JsonMetadataClass, JsonMissingTypeError, JsonMissingTypeErrorBase, JsonObject, JsonObjectProperty, JsonRequiredPropertyError, JsonUnknownPropertyError, Serializer, property, propertyArray, MatrixDropdownCell, MatrixDropdownColumn, matrixDropdownColumnTypes, MatrixDropdownRowModelBase, QuestionMatrixDropdownModelBase, QuestionMatrixDropdownRenderedCell, QuestionMatrixDropdownRenderedRow, QuestionMatrixDropdownRenderedTable, MatrixDropdownRowModel, QuestionMatrixDropdownModel, MatrixDynamicRowModel, QuestionMatrixDynamicModel, MatrixRowModel, MatrixCells, QuestionMatrixModel, MultipleTextItemModel, QuestionMultipleTextModel, PanelModel, PanelModelBase, QuestionRowModel, FlowPanelModel, PageModel, Question, QuestionNonValue, QuestionEmptyModel, QuestionCheckboxBase, QuestionSelectBase, QuestionCheckboxModel, QuestionRankingModel, QuestionCommentModel, QuestionDropdownModel, QuestionFactory, ElementFactory, QuestionFileModel, QuestionHtmlModel, QuestionRadiogroupModel, QuestionRatingModel, QuestionExpressionModel, QuestionTextModel, QuestionBooleanModel, QuestionImagePickerModel, ImageItemValue, QuestionImageModel, QuestionSignaturePadModel, QuestionPanelDynamicModel, QuestionPanelDynamicItem, SurveyTimer, SurveyProgressButtonsModel, SurveyModel, SurveyTrigger, SurveyTriggerComplete, SurveyTriggerSetValue, SurveyTriggerVisible, SurveyTriggerCopyValue, SurveyTriggerRunExpression, Trigger, SurveyWindowModel, TextPreProcessor, dxSurveyService, englishStrings, surveyLocalization, surveyStrings, QuestionCustomWidget, CustomWidgetCollection, QuestionCustomModel, QuestionCompositeModel, ComponentQuestionJSON, ComponentCollection, StylesManager, ListModel, PopupModel, PopupBaseViewModel, QuestionButtonGroupModel, ButtonGroupItemModel, ButtonGroupItemValue, IsMobile, confirmAction, detectIEOrEdge, doKey2Click, loadFileFromBase64, createSvg, surveyCss, DragDropHelper, defaultStandardCss, defaultBootstrapCss, defaultBootstrapMaterialCss, modernCss, RendererFactory, ResponsivityManager, VerticalResponsivityManager, unwrap, Action, AdaptiveActionContainer, ActionContainer, Model, WindowModel, Survey, CustomWidget, SurveyString, SurveyStringViewer, SurveyStringEditor, SurveyElementVue, Window, Page, Radiogroup, RadiogroupItem, OtherChoice, Rating, Comment, Ranking, RankingItem, Checkbox, CheckboxItem, ButtonGroup, ButtonGroupItem, QuestionText, Boolean, BooleanSwitch, BooleanCheckbox, Empty, MultipleText, Matrix, Dropdown, File, MatrixCell, MatrixTable, MatrixDropdown, MatrixDynamic, Errors, Html, Expression, ImagePicker, PanelDynamic, PanelDynamicRemove, PanelDynamicProgress, Navigation, Progress, ProgressButtons, TimerPanel, Panel, FlowPanel, FlowPanelElement, Row, ElementHeader, QuestionImage, SignaturePad, SurveyHeader, Custom, Composite, TitleContent, TitleActions, DefaultTitle, ActionBarViewModel, SvgIcon, Popup, List, SurveyQuestionMatrixDynamicRemoveButton, SurveyQuestionMatrixDetailButton, SurveyQuestionMatrixDynamicDragDropIcon */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./core */ \"./src/entries/core.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Version\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Version\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"settings\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"settings\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Helpers\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AnswerCountValidator\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"AnswerCountValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"EmailValidator\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"EmailValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"NumericValidator\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"NumericValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RegexValidator\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"RegexValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyValidator\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TextValidator\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"TextValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ValidatorResult\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ValidatorResult\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ExpressionValidator\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ExpressionValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ValidatorRunner\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ValidatorRunner\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ItemValue\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ItemValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Base\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Event\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Event\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ArrayChanges\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ArrayChanges\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyError\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyElement\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyElement\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CalculatedValue\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"CalculatedValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CustomError\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"CustomError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AnswerRequiredError\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"AnswerRequiredError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"OneAnswerRequiredError\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"OneAnswerRequiredError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RequreNumericError\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"RequreNumericError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ExceedSizeError\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ExceedSizeError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"LocalizableString\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"LocalizableString\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"LocalizableStrings\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"LocalizableStrings\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"HtmlConditionItem\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"HtmlConditionItem\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"UrlConditionItem\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"UrlConditionItem\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ChoicesRestful\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ChoicesRestful\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ChoicesRestfull\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ChoicesRestfull\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FunctionFactory\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"FunctionFactory\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"registerFunction\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"registerFunction\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ConditionRunner\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ConditionRunner\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ExpressionRunner\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ExpressionRunner\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Operand\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Operand\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Const\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Const\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BinaryOperand\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"BinaryOperand\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Variable\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Variable\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FunctionOperand\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"FunctionOperand\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ArrayOperand\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ArrayOperand\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ConditionsParser\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ConditionsParser\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ProcessValue\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ProcessValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonError\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"JsonError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonIncorrectTypeError\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"JsonIncorrectTypeError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonMetadata\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"JsonMetadata\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonMetadataClass\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"JsonMetadataClass\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonMissingTypeError\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"JsonMissingTypeError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonMissingTypeErrorBase\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"JsonMissingTypeErrorBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonObject\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"JsonObject\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonObjectProperty\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"JsonObjectProperty\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonRequiredPropertyError\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"JsonRequiredPropertyError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonUnknownPropertyError\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"JsonUnknownPropertyError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Serializer\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"property\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"property\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"propertyArray\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"propertyArray\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownCell\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdownCell\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownColumn\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdownColumn\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"matrixDropdownColumnTypes\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"matrixDropdownColumnTypes\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownRowModelBase\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdownRowModelBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownModelBase\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownModelBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownRenderedCell\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownRenderedCell\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownRenderedRow\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownRenderedRow\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownRenderedTable\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownRenderedTable\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownRowModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdownRowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDynamicRowModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDynamicRowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDynamicModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDynamicModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixRowModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"MatrixRowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixCells\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"MatrixCells\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MultipleTextItemModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"MultipleTextItemModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMultipleTextModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMultipleTextModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"PanelModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelModelBase\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"PanelModelBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionRowModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionRowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FlowPanelModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"FlowPanelModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PageModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"PageModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Question\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Question\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionNonValue\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionNonValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionEmptyModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionEmptyModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCheckboxBase\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCheckboxBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionSelectBase\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionSelectBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCheckboxModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCheckboxModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionRankingModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionRankingModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCommentModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCommentModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionDropdownModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionDropdownModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionFactory\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionFactory\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ElementFactory\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ElementFactory\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionFileModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionFileModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionHtmlModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionHtmlModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionRadiogroupModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionRadiogroupModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionRatingModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionRatingModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionExpressionModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionExpressionModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionTextModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionTextModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionBooleanModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionBooleanModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionImagePickerModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionImagePickerModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ImageItemValue\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ImageItemValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionImageModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionImageModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionSignaturePadModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionSignaturePadModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionPanelDynamicModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionPanelDynamicModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionPanelDynamicItem\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionPanelDynamicItem\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTimer\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTimer\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyProgressButtonsModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyProgressButtonsModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTrigger\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTrigger\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerComplete\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerComplete\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerSetValue\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerSetValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerVisible\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerVisible\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerCopyValue\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerCopyValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerRunExpression\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerRunExpression\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Trigger\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Trigger\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyWindowModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyWindowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TextPreProcessor\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"TextPreProcessor\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"dxSurveyService\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"dxSurveyService\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"englishStrings\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"englishStrings\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"surveyLocalization\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"surveyStrings\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"surveyStrings\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCustomWidget\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCustomWidget\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CustomWidgetCollection\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"CustomWidgetCollection\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCustomModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCustomModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCompositeModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCompositeModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ComponentQuestionJSON\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ComponentQuestionJSON\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ComponentCollection\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ComponentCollection\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"StylesManager\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"StylesManager\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ListModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ListModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PopupModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"PopupModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PopupBaseViewModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"PopupBaseViewModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionButtonGroupModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionButtonGroupModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroupItemModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ButtonGroupItemModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroupItemValue\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ButtonGroupItemValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"IsMobile\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"IsMobile\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"confirmAction\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"confirmAction\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"detectIEOrEdge\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"detectIEOrEdge\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"doKey2Click\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"doKey2Click\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"loadFileFromBase64\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"loadFileFromBase64\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"createSvg\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"createSvg\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"surveyCss\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"surveyCss\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DragDropHelper\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"DragDropHelper\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"defaultStandardCss\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"defaultStandardCss\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"defaultBootstrapCss\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"defaultBootstrapCss\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"defaultBootstrapMaterialCss\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"defaultBootstrapMaterialCss\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"modernCss\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"modernCss\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RendererFactory\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"RendererFactory\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ResponsivityManager\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ResponsivityManager\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"VerticalResponsivityManager\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"VerticalResponsivityManager\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"unwrap\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"unwrap\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Action\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Action\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AdaptiveActionContainer\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"AdaptiveActionContainer\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionContainer\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ActionContainer\"]; });\n\n/* harmony import */ var _vue_ui__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./vue-ui */ \"./src/entries/vue-ui.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Model\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Model\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"WindowModel\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"WindowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Survey\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Survey\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CustomWidget\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"CustomWidget\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyString\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"SurveyString\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyStringViewer\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"SurveyStringViewer\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyStringEditor\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"SurveyStringEditor\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyElementVue\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"SurveyElementVue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Window\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Window\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Page\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Page\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Radiogroup\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Radiogroup\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RadiogroupItem\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"RadiogroupItem\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"OtherChoice\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"OtherChoice\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Rating\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Rating\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Comment\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Comment\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Ranking\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Ranking\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RankingItem\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"RankingItem\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Checkbox\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Checkbox\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CheckboxItem\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"CheckboxItem\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroup\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"ButtonGroup\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroupItem\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"ButtonGroupItem\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionText\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"QuestionText\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Boolean\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Boolean\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BooleanSwitch\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"BooleanSwitch\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BooleanCheckbox\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"BooleanCheckbox\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Empty\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Empty\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MultipleText\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"MultipleText\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Matrix\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Matrix\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Dropdown\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Dropdown\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"File\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"File\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixCell\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"MatrixCell\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixTable\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"MatrixTable\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdown\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"MatrixDropdown\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDynamic\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"MatrixDynamic\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Errors\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Errors\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Html\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Html\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Expression\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Expression\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ImagePicker\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"ImagePicker\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamic\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"PanelDynamic\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamicRemove\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"PanelDynamicRemove\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamicProgress\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"PanelDynamicProgress\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Navigation\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Navigation\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Progress\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Progress\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ProgressButtons\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"ProgressButtons\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TimerPanel\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"TimerPanel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Panel\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Panel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FlowPanel\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"FlowPanel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FlowPanelElement\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"FlowPanelElement\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Row\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Row\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ElementHeader\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"ElementHeader\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionImage\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"QuestionImage\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SignaturePad\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"SignaturePad\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyHeader\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"SurveyHeader\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Custom\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Custom\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Composite\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Composite\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TitleContent\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"TitleContent\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TitleActions\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"TitleActions\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DefaultTitle\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"DefaultTitle\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarViewModel\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"ActionBarViewModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SvgIcon\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"SvgIcon\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Popup\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Popup\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"List\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"List\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyQuestionMatrixDynamicRemoveButton\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"SurveyQuestionMatrixDynamicRemoveButton\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyQuestionMatrixDetailButton\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"SurveyQuestionMatrixDetailButton\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyQuestionMatrixDynamicDragDropIcon\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"SurveyQuestionMatrixDynamicDragDropIcon\"]; });\n\n\n\n\n\n/***/ }),\n\n/***/ \"./src/error.ts\":\n/*!**********************!*\\\n !*** ./src/error.ts ***!\n \\**********************/\n/*! exports provided: AnswerRequiredError, OneAnswerRequiredError, RequreNumericError, ExceedSizeError, WebRequestError, WebRequestEmptyError, OtherEmptyError, UploadingFileError, RequiredInAllRowsError, MinRowCountError, KeyDuplicationError, CustomError */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AnswerRequiredError\", function() { return AnswerRequiredError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"OneAnswerRequiredError\", function() { return OneAnswerRequiredError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RequreNumericError\", function() { return RequreNumericError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ExceedSizeError\", function() { return ExceedSizeError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"WebRequestError\", function() { return WebRequestError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"WebRequestEmptyError\", function() { return WebRequestEmptyError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"OtherEmptyError\", function() { return OtherEmptyError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"UploadingFileError\", function() { return UploadingFileError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RequiredInAllRowsError\", function() { return RequiredInAllRowsError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MinRowCountError\", function() { return MinRowCountError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"KeyDuplicationError\", function() { return KeyDuplicationError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CustomError\", function() { return CustomError; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _survey_error__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./survey-error */ \"./src/survey-error.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\nvar AnswerRequiredError = /** @class */ (function (_super) {\n __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 _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"requiredError\");\n };\n return AnswerRequiredError;\n}(_survey_error__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\nvar OneAnswerRequiredError = /** @class */ (function (_super) {\n __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 _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"requiredErrorInPanel\");\n };\n return OneAnswerRequiredError;\n}(_survey_error__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\nvar RequreNumericError = /** @class */ (function (_super) {\n __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 _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"numericError\");\n };\n return RequreNumericError;\n}(_survey_error__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\nvar ExceedSizeError = /** @class */ (function (_super) {\n __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 _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"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}(_survey_error__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\nvar WebRequestError = /** @class */ (function (_super) {\n __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 _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"]\n .getString(\"urlRequestError\")[\"format\"](this.status, this.response);\n };\n return WebRequestError;\n}(_survey_error__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\nvar WebRequestEmptyError = /** @class */ (function (_super) {\n __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 _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"urlGetChoicesError\");\n };\n return WebRequestEmptyError;\n}(_survey_error__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\nvar OtherEmptyError = /** @class */ (function (_super) {\n __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 _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"otherRequiredError\");\n };\n return OtherEmptyError;\n}(_survey_error__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\nvar UploadingFileError = /** @class */ (function (_super) {\n __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 _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"uploadingFile\");\n };\n return UploadingFileError;\n}(_survey_error__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\nvar RequiredInAllRowsError = /** @class */ (function (_super) {\n __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 _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"requiredInAllRowsError\");\n };\n return RequiredInAllRowsError;\n}(_survey_error__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\nvar MinRowCountError = /** @class */ (function (_super) {\n __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 _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"]\n .getString(\"minRowCountError\")[\"format\"](this.minRowCount);\n };\n return MinRowCountError;\n}(_survey_error__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\nvar KeyDuplicationError = /** @class */ (function (_super) {\n __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 _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"keyDuplicationError\");\n };\n return KeyDuplicationError;\n}(_survey_error__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\nvar CustomError = /** @class */ (function (_super) {\n __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}(_survey_error__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/expressionItems.ts\":\n/*!********************************!*\\\n !*** ./src/expressionItems.ts ***!\n \\********************************/\n/*! exports provided: ExpressionItem, HtmlConditionItem, UrlConditionItem */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ExpressionItem\", function() { return ExpressionItem; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"HtmlConditionItem\", function() { return HtmlConditionItem; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"UrlConditionItem\", function() { return UrlConditionItem; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./conditions */ \"./src/conditions.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\nvar ExpressionItem = /** @class */ (function (_super) {\n __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 _conditions__WEBPACK_IMPORTED_MODULE_2__[\"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: false,\n configurable: true\n });\n Object.defineProperty(ExpressionItem.prototype, \"locHtml\", {\n get: function () {\n return this.getLocalizableString(\"html\");\n },\n enumerable: false,\n configurable: true\n });\n ExpressionItem.prototype.getLocale = function () {\n return !!this.locOwner ? this.locOwner.getLocale() : \"\";\n };\n ExpressionItem.prototype.getMarkdownHtml = function (text, name) {\n return !!this.locOwner ? this.locOwner.getMarkdownHtml(text, name) : null;\n };\n ExpressionItem.prototype.getRenderer = function (name) {\n return !!this.locOwner ? this.locOwner.getRenderer(name) : null;\n };\n ExpressionItem.prototype.getProcessedText = function (text) {\n return this.locOwner ? this.locOwner.getProcessedText(text) : text;\n };\n return ExpressionItem;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"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 __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: false,\n configurable: true\n });\n Object.defineProperty(HtmlConditionItem.prototype, \"locHtml\", {\n get: function () {\n return this.getLocalizableString(\"html\");\n },\n enumerable: false,\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 __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: false,\n configurable: true\n });\n Object.defineProperty(UrlConditionItem.prototype, \"locUrl\", {\n get: function () {\n return this.getLocalizableString(\"url\");\n },\n enumerable: false,\n configurable: true\n });\n return UrlConditionItem;\n}(ExpressionItem));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"expressionitem\", [\"expression:condition\"], function () {\n return new ExpressionItem();\n}, \"base\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"htmlconditionitem\", [{ name: \"html:html\", serializationProperty: \"locHtml\" }], function () {\n return new HtmlConditionItem();\n}, \"expressionitem\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"urlconditionitem\", [{ name: \"url:string\", serializationProperty: \"locUrl\" }], function () {\n return new UrlConditionItem();\n}, \"expressionitem\");\n\n\n/***/ }),\n\n/***/ \"./src/expressions/expressionParser.ts\":\n/*!*********************************************!*\\\n !*** ./src/expressions/expressionParser.ts ***!\n \\*********************************************/\n/*! exports provided: SyntaxError, parse */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SyntaxError\", function() { return SyntaxError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"parse\", function() { return parse; });\n/* harmony import */ var _expressions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./expressions */ \"./src/expressions/expressions.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n// Generated by PEG.js v. 0.10.0 (ts-pegjs plugin v. 0.3.1 )\n//\n// https://pegjs.org/ https://github.com/metadevpro/ts-pegjs\n\"use strict\";\nvar SyntaxError = /** @class */ (function (_super) {\n __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 _expressions__WEBPACK_IMPORTED_MODULE_0__[\"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 _expressions__WEBPACK_IMPORTED_MODULE_0__[\"UnaryOperand\"](expr, \"negate\"); };\n var peg$c91 = function (expr, op) { return new _expressions__WEBPACK_IMPORTED_MODULE_0__[\"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 _expressions__WEBPACK_IMPORTED_MODULE_0__[\"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 _expressions__WEBPACK_IMPORTED_MODULE_0__[\"Variable\"](value); };\n var peg$c109 = function (value) { return value; };\n var peg$c110 = \"''\";\n var peg$c111 = peg$literalExpectation(\"''\", false);\n var peg$c112 = function () { return \"\"; };\n var peg$c113 = \"\\\"\\\"\";\n var peg$c114 = peg$literalExpectation(\"\\\"\\\"\", false);\n var peg$c115 = \"'\";\n var peg$c116 = peg$literalExpectation(\"'\", false);\n var peg$c117 = function (value) { return \"'\" + value + \"'\"; };\n var peg$c118 = \"\\\"\";\n var peg$c119 = peg$literalExpectation(\"\\\"\", false);\n var peg$c120 = \"[\";\n var peg$c121 = peg$literalExpectation(\"[\", false);\n var peg$c122 = \"]\";\n var peg$c123 = peg$literalExpectation(\"]\", false);\n var peg$c124 = function (sequence) { return sequence; };\n var peg$c125 = \",\";\n var peg$c126 = peg$literalExpectation(\",\", false);\n var peg$c127 = function (expr, tail) {\n if (expr == null)\n return new _expressions__WEBPACK_IMPORTED_MODULE_0__[\"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 _expressions__WEBPACK_IMPORTED_MODULE_0__[\"ArrayOperand\"](array);\n };\n var peg$c128 = \"true\";\n var peg$c129 = peg$literalExpectation(\"true\", true);\n var peg$c130 = function () { return true; };\n var peg$c131 = \"false\";\n var peg$c132 = peg$literalExpectation(\"false\", true);\n var peg$c133 = function () { return false; };\n var peg$c134 = \"0x\";\n var peg$c135 = peg$literalExpectation(\"0x\", false);\n var peg$c136 = function () { return parseInt(text(), 16); };\n var peg$c137 = /^[\\-]/;\n var peg$c138 = peg$classExpectation([\"-\"], false, false);\n var peg$c139 = function (sign, num) { return sign == null ? num : -num; };\n var peg$c140 = \".\";\n var peg$c141 = peg$literalExpectation(\".\", false);\n var peg$c142 = function () { return parseFloat(text()); };\n var peg$c143 = function () { return parseInt(text(), 10); };\n var peg$c144 = \"0\";\n var peg$c145 = peg$literalExpectation(\"0\", false);\n var peg$c146 = function () { return 0; };\n var peg$c147 = function (chars) { return chars.join(\"\"); };\n var peg$c148 = \"\\\\'\";\n var peg$c149 = peg$literalExpectation(\"\\\\'\", false);\n var peg$c150 = function () { return \"'\"; };\n var peg$c151 = \"\\\\\\\"\";\n var peg$c152 = peg$literalExpectation(\"\\\\\\\"\", false);\n var peg$c153 = function () { return \"\\\"\"; };\n var peg$c154 = /^[^\"']/;\n var peg$c155 = peg$classExpectation([\"\\\"\", \"'\"], true, false);\n var peg$c156 = function () { return text(); };\n var peg$c157 = /^[^{}]/;\n var peg$c158 = peg$classExpectation([\"{\", \"}\"], true, false);\n var peg$c159 = /^[0-9]/;\n var peg$c160 = peg$classExpectation([[\"0\", \"9\"]], false, false);\n var peg$c161 = /^[1-9]/;\n var peg$c162 = peg$classExpectation([[\"1\", \"9\"]], false, false);\n var peg$c163 = /^[a-zA-Z]/;\n var peg$c164 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"]], false, false);\n var peg$c165 = peg$otherExpectation(\"whitespace\");\n var peg$c166 = /^[ \\t\\n\\r]/;\n var peg$c167 = 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$currPos;\n s1 = peg$parseLogicValue();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c109(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseArithmeticValue();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c109(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseLettersAndDigits();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c109(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c110) {\n s1 = peg$c110;\n peg$currPos += 2;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c111);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c112();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c113) {\n s1 = peg$c113;\n peg$currPos += 2;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c114);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c112();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 39) {\n s1 = peg$c115;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c116);\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$c115;\n peg$currPos++;\n }\n else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c116);\n }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c117(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$c118;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c119);\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$c118;\n peg$currPos++;\n }\n else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c119);\n }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c117(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 }\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$c120;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c121);\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$c122;\n peg$currPos++;\n }\n else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c123);\n }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c124(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$c125;\n peg$currPos++;\n }\n else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c126);\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$c125;\n peg$currPos++;\n }\n else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c126);\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$c127(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$c128) {\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$c129);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c130();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5).toLowerCase() === peg$c131) {\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$c132);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c133();\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$c134) {\n s1 = peg$c134;\n peg$currPos += 2;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c135);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseDigits();\n if (s2 !== 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 if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (peg$c137.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$c138);\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$c139(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$c140;\n peg$currPos++;\n }\n else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c141);\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseDigits();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c142();\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$c143();\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$c144;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c145);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c146();\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$c147(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$c147(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$c148) {\n s1 = peg$c148;\n peg$currPos += 2;\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 if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c151) {\n s1 = peg$c151;\n peg$currPos += 2;\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$c153();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (peg$c154.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$c155);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c156();\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$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 peg$savedPos = s0;\n s1 = peg$c156();\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$c156();\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$c159.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$c160);\n }\n }\n if (s1 !== peg$FAILED) {\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n if (peg$c159.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$c160);\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$c161.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$c162);\n }\n }\n if (s1 !== peg$FAILED) {\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n if (peg$c161.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$c162);\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$c163.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$c164);\n }\n }\n if (s1 !== peg$FAILED) {\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n if (peg$c163.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$c164);\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$c166.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$c167);\n }\n }\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n if (peg$c166.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$c167);\n }\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c165);\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 _expressions__WEBPACK_IMPORTED_MODULE_0__[\"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\n/***/ \"./src/expressions/expressions.ts\":\n/*!****************************************!*\\\n !*** ./src/expressions/expressions.ts ***!\n \\****************************************/\n/*! exports provided: Operand, BinaryOperand, UnaryOperand, ArrayOperand, Const, Variable, FunctionOperand, OperandMaker */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Operand\", function() { return Operand; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"BinaryOperand\", function() { return BinaryOperand; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"UnaryOperand\", function() { return UnaryOperand; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ArrayOperand\", function() { return ArrayOperand; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Const\", function() { return Const; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Variable\", function() { return Variable; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FunctionOperand\", function() { return FunctionOperand; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"OperandMaker\", function() { return OperandMaker; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _functionsfactory__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../functionsfactory */ \"./src/functionsfactory.ts\");\n/* harmony import */ var _conditionProcessValue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../conditionProcessValue */ \"./src/conditionProcessValue.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\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 __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: false,\n configurable: true\n });\n Object.defineProperty(BinaryOperand.prototype, \"isConjunction\", {\n get: function () {\n return this.operatorName == \"or\" || this.operatorName == \"and\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BinaryOperand.prototype, \"conjunction\", {\n get: function () {\n return this.isConjunction ? this.operatorName : \"\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BinaryOperand.prototype, \"operator\", {\n get: function () {\n return this.operatorName;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BinaryOperand.prototype, \"leftOperand\", {\n get: function () {\n return this.left;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BinaryOperand.prototype, \"rightOperand\", {\n get: function () {\n return this.right;\n },\n enumerable: false,\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 __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: false,\n configurable: true\n });\n Object.defineProperty(UnaryOperand.prototype, \"expression\", {\n get: function () {\n return this.expressionValue;\n },\n enumerable: false,\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 __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 __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: false,\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 (value.length > 1 &&\n this.isQuote(value[0]) &&\n this.isQuote(value[value.length - 1]))\n return value.substr(1, value.length - 2);\n if (OperandMaker.isNumeric(value)) {\n if (value.indexOf(\"0x\") == 0)\n return parseInt(value);\n if (value.length > 1 && value[0] == \"0\")\n return value;\n return parseFloat(value);\n }\n return value;\n };\n Const.prototype.isQuote = function (ch) {\n return ch == \"'\" || ch == '\"';\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 __extends(Variable, _super);\n function Variable(variableName) {\n var _this = _super.call(this, variableName) || this;\n _this.variableName = variableName;\n _this.valueInfo = {};\n _this.useValueAsItIs = false;\n if (!!_this.variableName &&\n _this.variableName.length > 1 &&\n _this.variableName[0] === Variable.DisableConversionChar) {\n _this.variableName = _this.variableName.substr(1);\n _this.useValueAsItIs = true;\n }\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 var prefix = this.useValueAsItIs ? Variable.DisableConversionChar : \"\";\n return \"{\" + prefix + this.variableName + \"}\";\n };\n Object.defineProperty(Variable.prototype, \"variable\", {\n get: function () {\n return this.variableName;\n },\n enumerable: false,\n configurable: true\n });\n Variable.prototype.evaluate = function (processValue) {\n this.valueInfo.name = this.variableName;\n processValue.getValueInfo(this.valueInfo);\n return this.valueInfo.hasValue\n ? this.getCorrectValue(this.valueInfo.value)\n : null;\n };\n Variable.prototype.setVariables = function (variables) {\n variables.push(this.variableName);\n };\n Variable.prototype.getCorrectValue = function (value) {\n if (this.useValueAsItIs)\n return value;\n return _super.prototype.getCorrectValue.call(this, value);\n };\n Variable.DisableConversionChar = \"#\";\n return Variable;\n}(Const));\n\nvar FunctionOperand = /** @class */ (function (_super) {\n __extends(FunctionOperand, _super);\n function FunctionOperand(originalValue, parameters) {\n var _this = _super.call(this) || this;\n _this.originalValue = originalValue;\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 _conditionProcessValue__WEBPACK_IMPORTED_MODULE_2__[\"ProcessValue\"]();\n asyncProcessValue.values = _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].createCopy(processValue.values);\n asyncProcessValue.properties = _helpers__WEBPACK_IMPORTED_MODULE_0__[\"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 _functionsfactory__WEBPACK_IMPORTED_MODULE_1__[\"FunctionFactory\"].Instance.run(this.originalValue, 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.originalValue + \"(\" + 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: false,\n configurable: true\n });\n FunctionOperand.prototype.hasFunction = function () {\n return true;\n };\n FunctionOperand.prototype.hasAsyncFunction = function () {\n return _functionsfactory__WEBPACK_IMPORTED_MODULE_1__[\"FunctionFactory\"].Instance.isAsyncFunction(this.originalValue);\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 _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isNumber(value);\n };\n OperandMaker.isBooleanValue = function (value) {\n return (!!value &&\n (value.toLowerCase() === \"true\" || value.toLowerCase() === \"false\"));\n };\n OperandMaker.isTwoValueEquals = function (x, y) {\n if (x === \"undefined\")\n x = undefined;\n if (y === \"undefined\")\n y = undefined;\n return _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isTwoValueEquals(x, y, true);\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 _helpers__WEBPACK_IMPORTED_MODULE_0__[\"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 (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(a) && !OperandMaker.isSpaceString(a)) {\n a = typeof b === \"string\" ? \"\" : 0;\n }\n if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"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 OperandMaker.isTwoValueEquals(left, right);\n },\n notequal: function (left, right) {\n return !OperandMaker.binaryFunctions.equal(left, right);\n },\n contains: function (left, right) {\n return OperandMaker.binaryFunctions.containsCore(left, right, true);\n },\n notcontains: function (left, right) {\n if (!left && !_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(right))\n return true;\n return OperandMaker.binaryFunctions.containsCore(left, right, false);\n },\n anyof: function (left, right) {\n if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(left) && _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(right))\n return true;\n if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(left) ||\n (!Array.isArray(left) && left.length === 0))\n return false;\n if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"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 && !_helpers__WEBPACK_IMPORTED_MODULE_0__[\"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 && left !== 0 && left !== false)\n return false;\n if (!left.length) {\n left = left.toString();\n if (typeof right === \"string\" || right instanceof String) {\n left = left.toUpperCase();\n right = right.toUpperCase();\n }\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 (OperandMaker.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\n/***/ \"./src/flowpanel.ts\":\n/*!**************************!*\\\n !*** ./src/flowpanel.ts ***!\n \\**************************/\n/*! exports provided: FlowPanelModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FlowPanelModel\", function() { return FlowPanelModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _panel__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./panel */ \"./src/panel.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n/**\n * The flow panel object. It is a container with flow layout where you can mix questions with markdown text.\n *\n */\nvar FlowPanelModel = /** @class */ (function (_super) {\n __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: false,\n configurable: true\n });\n Object.defineProperty(FlowPanelModel.prototype, \"locContent\", {\n get: function () {\n return this.getLocalizableString(\"content\");\n },\n enumerable: false,\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: false,\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 ||\n typeof document === \"undefined\" ||\n !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}(_panel__WEBPACK_IMPORTED_MODULE_1__[\"PanelModel\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"flowpanel\", [{ name: \"content:html\", serializationProperty: \"locContent\" }], function () {\n return new FlowPanelModel();\n}, \"panel\");\n\n\n/***/ }),\n\n/***/ \"./src/functionsfactory.ts\":\n/*!*********************************!*\\\n !*** ./src/functionsfactory.ts ***!\n \\*********************************/\n/*! exports provided: FunctionFactory, registerFunction */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FunctionFactory\", function() { return FunctionFactory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"registerFunction\", function() { return registerFunction; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n\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 if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isNumber(value)) {\n value = parseFloat(value);\n }\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 birthDate = new Date(params[0]);\n var today = new Date();\n var age = today.getFullYear() - birthDate.getFullYear();\n var m = today.getMonth() - birthDate.getMonth();\n if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {\n age -= age > 0 ? 1 : 0;\n }\n return age;\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);\nfunction today(params) {\n var res = new Date();\n if (Array.isArray(params) && params.length == 1) {\n res.setDate(res.getDate() + params[0]);\n }\n return res;\n}\nFunctionFactory.Instance.register(\"today\", today);\nfunction diffDays(params) {\n if (!Array.isArray(params) || params.length !== 2)\n return 0;\n if (!params[0] || !params[1])\n return 0;\n var date1 = new Date(params[0]);\n var date2 = new Date(params[1]);\n var diffTime = Math.abs(date2 - date1);\n return Math.ceil(diffTime / (1000 * 60 * 60 * 24));\n}\nFunctionFactory.Instance.register(\"diffDays\", diffDays);\n\n\n/***/ }),\n\n/***/ \"./src/helpers.ts\":\n/*!************************!*\\\n !*** ./src/helpers.ts ***!\n \\************************/\n/*! exports provided: Helpers */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Helpers\", function() { return Helpers; });\nvar Helpers = /** @class */ (function () {\n function Helpers() {\n }\n /**\n * A static methods that returns true if a value undefined, 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 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 === \"\")\n return true;\n if ((y === undefined || y === null) && 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 && !!x.getType && !!y.getType) {\n if (x.isDiposed || y.isDiposed)\n return false;\n if (x.getType() !== y.getType())\n return false;\n if (!!x.name && x.name !== y.name)\n return false;\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 strIndex = \"A\";\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 ind = str.length - 1;\n while (ind >= 0) {\n if (checkLetter())\n break;\n ind--;\n if (!hasDigit)\n break;\n }\n strIndex = str.substr(ind + 1);\n prefix = str.substr(0, ind + 1);\n if (parseInt(strIndex))\n startIndex = parseInt(strIndex);\n else if (strIndex.length == 1)\n isNumeric = false;\n if (!!newPostfix || !!prefix) {\n postfix = newPostfix;\n }\n }\n if (isNumeric)\n return prefix + (index + startIndex).toString() + postfix;\n return (prefix + String.fromCharCode(strIndex.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\n/***/ \"./src/itemvalue.ts\":\n/*!**************************!*\\\n !*** ./src/itemvalue.ts ***!\n \\**************************/\n/*! exports provided: ItemValue */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ItemValue\", function() { return ItemValue; });\n/* harmony import */ var _localizablestring__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./localizablestring */ \"./src/localizablestring.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./conditions */ \"./src/conditions.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __spreadArray = (undefined && undefined.__spreadArray) || function (to, from) {\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n to[j] = from[i];\n return to;\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 __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 _localizablestring__WEBPACK_IMPORTED_MODULE_0__[\"LocalizableString\"](null, true);\n _this.locTextValue.onStrChanged = function (oldValue, newValue) {\n if (newValue == _this.value) {\n newValue = undefined;\n }\n _this.propertyValueChanged(\"text\", oldValue, newValue);\n };\n _this.locTextValue.onGetTextCallback = function (txt) {\n return txt\n ? txt\n : !_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(_this.value)\n ? _this.value.toString()\n : 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 _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"CustomPropertiesCollection\"].createProperties(_this);\n }\n _this.onCreating();\n return _this;\n }\n Object.defineProperty(ItemValue, \"Separator\", {\n get: function () {\n return _settings__WEBPACK_IMPORTED_MODULE_5__[\"settings\"].itemValueSeparator;\n },\n set: function (val) {\n _settings__WEBPACK_IMPORTED_MODULE_5__[\"settings\"].itemValueSeparator = val;\n },\n enumerable: false,\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, __spreadArray([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 = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"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 if (!Array.isArray(items))\n return null;\n var valIsEmpty = _helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(val);\n for (var i = 0; i < items.length; i++) {\n if (valIsEmpty && _helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(items[i].value))\n return items[i];\n if (_helpers__WEBPACK_IMPORTED_MODULE_2__[\"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, onItemCallBack) {\n return ItemValue.runConditionsForItemsCore(items, null, runner, values, properties, false, true, onItemCallBack);\n };\n ItemValue.runConditionsForItemsCore = function (items, filteredItems, runner, values, properties, isVisible, useItemExpression, onItemCallBack) {\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 (newValue && !!onItemCallBack) {\n newValue = onItemCallBack(item);\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.getSurvey = function (live) {\n if (live === void 0) { live = false; }\n return !!this.locOwner && !!this.locOwner[\"getSurvey\"]\n ? this.locOwner.getSurvey()\n : null;\n };\n ItemValue.prototype.getLocale = function () {\n return (this.locText && this.locText.locale) || \"\";\n };\n Object.defineProperty(ItemValue.prototype, \"locText\", {\n get: function () {\n return this.locTextValue;\n },\n enumerable: false,\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: false,\n configurable: true\n });\n Object.defineProperty(ItemValue.prototype, \"value\", {\n get: function () {\n return this.getPropertyValue(\"value\");\n },\n set: function (newValue) {\n var text = undefined;\n if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(newValue)) {\n var str = newValue.toString();\n var index = str.indexOf(_settings__WEBPACK_IMPORTED_MODULE_5__[\"settings\"].itemValueSeparator);\n if (index > -1) {\n newValue = str.slice(0, index);\n text = str.slice(index + 1);\n }\n }\n this.setPropertyValue(\"value\", newValue);\n if (!!text) {\n this.text = text;\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ItemValue.prototype, \"hasText\", {\n get: function () {\n return this.locText.pureText ? true : false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ItemValue.prototype, \"pureText\", {\n get: function () {\n return this.locText.pureText;\n },\n set: function (val) {\n this.text = val;\n },\n enumerable: false,\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 this.locText.text = newText;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ItemValue.prototype, \"calculatedText\", {\n get: function () {\n return this.locText.calculatedText;\n },\n enumerable: false,\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 && !_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(json[\"value\"]))\n return this.value;\n return json;\n };\n ItemValue.prototype.toJSON = function () {\n var res = {};\n var properties = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].getProperties(this.getType());\n if (!properties || properties.length == 0) {\n properties = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].getProperties(\"itemvalue\");\n }\n var jsoObj = new _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"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 (_helpers__WEBPACK_IMPORTED_MODULE_2__[\"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 _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObject\"]().toObject(json, this);\n }\n else {\n this.value = value;\n }\n this.locText.strChanged();\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: false,\n configurable: true\n });\n Object.defineProperty(ItemValue.prototype, \"enableIf\", {\n get: function () {\n return this.getPropertyValue(\"enableIf\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"enableIf\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ItemValue.prototype, \"isVisible\", {\n get: function () {\n return this.isVisibleValue;\n },\n enumerable: false,\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: false,\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 if (name === \"value\" && !this.hasText) {\n this.locText.onChanged();\n }\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 _conditions__WEBPACK_IMPORTED_MODULE_3__[\"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 _conditions__WEBPACK_IMPORTED_MODULE_3__[\"ConditionRunner\"](this.enableIf);\n this.enableConditionRunner.expression = this.enableIf;\n return this.enableConditionRunner;\n };\n return ItemValue;\n}(_base__WEBPACK_IMPORTED_MODULE_4__[\"Base\"]));\n\n_base__WEBPACK_IMPORTED_MODULE_4__[\"Base\"].createItemValue = function (source, type) {\n var item = null;\n if (!!type) {\n item = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"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_base__WEBPACK_IMPORTED_MODULE_4__[\"Base\"].itemValueLocStrChanged = function (arr) {\n ItemValue.locStrsChanged(arr);\n};\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObjectProperty\"].getItemValuesDefaultValue = function (val) {\n var res = new Array();\n ItemValue.setData(res, val || []);\n return res;\n};\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"itemvalue\", [\n \"!value\",\n {\n name: \"text\",\n serializationProperty: \"locText\",\n },\n { name: \"visibleIf:condition\", showMode: \"form\" },\n {\n name: \"enableIf:condition\",\n showMode: \"form\",\n visibleIf: function (obj) {\n return !obj || obj.ownerPropertyName !== \"rateValues\";\n },\n },\n], function (value) { return new ItemValue(value); });\n\n\n/***/ }),\n\n/***/ \"./src/jsonobject.ts\":\n/*!***************************!*\\\n !*** ./src/jsonobject.ts ***!\n \\***************************/\n/*! exports provided: property, propertyArray, JsonObjectProperty, CustomPropertiesCollection, JsonMetadataClass, JsonMetadata, JsonError, JsonUnknownPropertyError, JsonMissingTypeErrorBase, JsonMissingTypeError, JsonIncorrectTypeError, JsonRequiredPropertyError, JsonObject, Serializer */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"property\", function() { return property; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"propertyArray\", function() { return propertyArray; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"JsonObjectProperty\", function() { return JsonObjectProperty; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CustomPropertiesCollection\", function() { return CustomPropertiesCollection; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"JsonMetadataClass\", function() { return JsonMetadataClass; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"JsonMetadata\", function() { return JsonMetadata; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"JsonError\", function() { return JsonError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"JsonUnknownPropertyError\", function() { return JsonUnknownPropertyError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"JsonMissingTypeErrorBase\", function() { return JsonMissingTypeErrorBase; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"JsonMissingTypeError\", function() { return JsonMissingTypeError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"JsonIncorrectTypeError\", function() { return JsonIncorrectTypeError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"JsonRequiredPropertyError\", function() { return JsonRequiredPropertyError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"JsonObject\", function() { return JsonObject; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Serializer\", function() { return Serializer; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __spreadArray = (undefined && undefined.__spreadArray) || function (to, from) {\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n to[j] = from[i];\n return to;\n};\n\nfunction ensureLocString(target, options, key) {\n var locString = target.getLocalizableString(key);\n if (!locString) {\n locString = target.createLocalizableString(key, target, true);\n if (typeof options.localizable === \"object\" &&\n typeof options.localizable.onGetTextCallback === \"function\") {\n locString.onGetTextCallback = options.localizable.onGetTextCallback;\n }\n }\n}\nfunction property(options) {\n return function (target, key) {\n if (!options || !options.localizable) {\n Object.defineProperty(target, key, {\n get: function () {\n var value = this.getPropertyValue(key);\n if (value !== undefined) {\n return value;\n }\n if (!!options) {\n if (options.defaultValue !== undefined) {\n return options.defaultValue;\n }\n if (options.defaultSource !== undefined) {\n return this[options.defaultSource];\n }\n }\n return undefined;\n },\n set: function (val) {\n this.setPropertyValue(key, val);\n if (!!options && options.onSet) {\n options.onSet(val, this);\n }\n },\n });\n }\n else {\n Object.defineProperty(target, key, {\n get: function () {\n ensureLocString(this, options, key);\n return (this.getLocalizableStringText(key) ||\n options.defaultValue ||\n this[options.defaultSource]);\n },\n set: function (val) {\n ensureLocString(this, options, key);\n this.setLocalizableStringText(key, val);\n if (!!options && options.onSet) {\n options.onSet(val, this);\n }\n },\n });\n Object.defineProperty(target, options.localizable === true\n ? \"loc\" + key.charAt(0).toUpperCase() + key.slice(1)\n : options.localizable.name, {\n get: function () {\n ensureLocString(this, options, key);\n return this.getLocalizableString(key);\n },\n });\n }\n };\n}\nfunction ensureArray(target, options, key) {\n target.ensureArray(key, !!options ? options.onPush : null, !!options ? options.onRemove : null);\n}\nfunction propertyArray(options) {\n return function (target, key) {\n Object.defineProperty(target, key, {\n get: function () {\n ensureArray(this, options, key);\n return this.getPropertyValue(key);\n },\n set: function (val) {\n ensureArray(this, options, key);\n var arr = this.getPropertyValue(key);\n if (val === arr) {\n return;\n }\n if (arr) {\n arr.splice.apply(arr, __spreadArray([0, arr.length], (val || [])));\n }\n else {\n this.setPropertyValue(key, val);\n }\n if (!!options && options.onSet) {\n options.onSet(val, this);\n }\n },\n });\n };\n}\n/**\n * Contains information about a property of a survey element (page, panel, questions, and etc).\n * @see addProperty\n * @see removeProperty\n * @see [Add Properties](https://surveyjs.io/Documentation/Survey-Creator#addproperties)\n * @see [Remove Properties](https://surveyjs.io/Documentation/Survey-Creator#removeproperties)\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.isUniqueValue = 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.isBindable = false;\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 this.idValue = JsonObjectProperty.Index++;\n }\n Object.defineProperty(JsonObjectProperty.prototype, \"id\", {\n get: function () {\n return this.idValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JsonObjectProperty.prototype, \"classInfo\", {\n get: function () {\n return this.classInfoValue;\n },\n enumerable: false,\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: false,\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: false,\n configurable: true\n });\n Object.defineProperty(JsonObjectProperty.prototype, \"isUnique\", {\n get: function () {\n return this.isUniqueValue;\n },\n set: function (val) {\n this.isUniqueValue = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JsonObjectProperty.prototype, \"hasToUseGetValue\", {\n get: function () {\n return this.onGetValue || this.serializationProperty;\n },\n enumerable: false,\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: false,\n configurable: true\n });\n JsonObjectProperty.prototype.isDefaultValue = function (value) {\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(this.defaultValue))\n return this.defaultValue == value;\n return ((value === false && (this.type == \"boolean\" || this.type == \"switch\")) ||\n value === \"\" ||\n _helpers__WEBPACK_IMPORTED_MODULE_0__[\"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: false,\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: false,\n configurable: true\n });\n Object.defineProperty(JsonObjectProperty.prototype, \"hasChoices\", {\n get: function () {\n return !!this.choicesValue || !!this.choicesfunc;\n },\n enumerable: false,\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: false,\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: false,\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: false,\n configurable: true\n });\n Object.defineProperty(JsonObjectProperty.prototype, \"dataList\", {\n get: function () {\n return Array.isArray(this.dataListValue) ? this.dataListValue : [];\n },\n set: function (val) {\n this.dataListValue = val;\n },\n enumerable: false,\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.schemaType = function () {\n if (!!this.className)\n return \"array\";\n if (!!this.baseClassName)\n return \"array\";\n if (this.type == \"boolean\" || this.type == \"number\")\n return this.type;\n return \"string\";\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.Index = 1;\n JsonObjectProperty.mergableValues = [\n \"typeValue\",\n \"choicesValue\",\n \"baseValue\",\n \"readOnlyValue\",\n \"visibleValue\",\n \"isSerializable\",\n \"isLightSerializable\",\n \"isCustom\",\n \"isBindable\",\n \"isUnique\",\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 \"dataListValue\",\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 var isArrayProp = false;\n if (typeof obj.createNewArray === \"function\") {\n if (JsonObject.metaData.isDescendantOf(prop.className, \"itemvalue\")) {\n obj.createNewArray(prop.name, function (item) {\n item.locOwner = obj;\n item.ownerPropertyName = prop.name;\n });\n isArrayProp = true;\n }\n //It is a simple array property\n if (prop.type === \"multiplevalues\") {\n obj.createNewArray(prop.name);\n isArrayProp = true;\n }\n if (isArrayProp) {\n if (Array.isArray(defaultValue)) {\n obj.setPropertyValue(prop.name, defaultValue);\n }\n defaultValue = null;\n }\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 (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.default)) {\n prop.defaultValue = propInfo.default;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.isSerializable)) {\n prop.isSerializable = propInfo.isSerializable;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.isLightSerializable)) {\n prop.isLightSerializable = propInfo.isLightSerializable;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.maxLength)) {\n prop.maxLength = propInfo.maxLength;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.displayName)) {\n prop.displayName = propInfo.displayName;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.category)) {\n prop.category = propInfo.category;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.categoryIndex)) {\n prop.categoryIndex = propInfo.categoryIndex;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.nextToProperty)) {\n prop.nextToProperty = propInfo.nextToProperty;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.visibleIndex)) {\n prop.visibleIndex = propInfo.visibleIndex;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.showMode)) {\n prop.showMode = propInfo.showMode;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.maxValue)) {\n prop.maxValue = propInfo.maxValue;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.minValue)) {\n prop.minValue = propInfo.minValue;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.dataList)) {\n prop.dataList = propInfo.dataList;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.isDynamicChoices)) {\n prop.isDynamicChoices = propInfo.isDynamicChoices;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.isBindable)) {\n prop.isBindable = propInfo.isBindable;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.isUnique)) {\n prop.isUnique = propInfo.isUnique;\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\n/**\n * The metadata object. It contains object properties' runtime information and allows you to modify it.\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.getObjPropertyValue = function (obj, name) {\n if (this.isObjWrapper(obj)) {\n var orignalObj = obj.getOriginalObj();\n var prop = Serializer.findProperty(orignalObj.getType(), name);\n if (!!prop)\n return this.getObjPropertyValueCore(orignalObj, prop);\n }\n var prop = Serializer.findProperty(obj.getType(), name);\n if (!prop)\n return obj[name];\n return this.getObjPropertyValueCore(obj, prop);\n };\n JsonMetadata.prototype.setObjPropertyValue = function (obj, name, val) {\n if (obj[name] === val)\n return;\n if (!!obj[name] && !!obj[name].setJson) {\n obj[name].setJson(val);\n }\n else {\n obj[name] = val;\n }\n };\n JsonMetadata.prototype.getObjPropertyValueCore = function (obj, prop) {\n if (!prop.isSerializable)\n return obj[prop.name];\n if (prop.isLocalizable) {\n if (prop.isArray)\n return obj[prop.name];\n if (!!prop.serializationProperty)\n return obj[prop.serializationProperty].text;\n }\n return obj.getPropertyValue(prop.name);\n };\n JsonMetadata.prototype.isObjWrapper = function (obj) {\n return !!obj.getOriginalObj && !!obj.getOriginalObj();\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.hasOriginalProperty = function (obj, propName) {\n return !!this.getOriginalProperty(obj, propName);\n };\n JsonMetadata.prototype.getOriginalProperty = function (obj, propName) {\n var res = this.findProperty(obj.getType(), propName);\n if (!!res)\n return res;\n if (this.isObjWrapper(obj))\n return this.findProperty(obj.getOriginalObj().getType(), propName);\n return null;\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.generateSchema = function (className) {\n if (className === void 0) { className = undefined; }\n if (!className)\n className = \"survey\";\n var classInfo = this.findClass(className);\n if (!classInfo)\n return null;\n var res = {\n $schema: \"http://json-schema.org/draft-07/schema#\",\n title: \"SurveyJS Library json schema\",\n type: \"object\",\n properties: {},\n definitions: {},\n };\n this.generateSchemaProperties(classInfo, res.properties, res.definitions);\n return res;\n };\n JsonMetadata.prototype.generateSchemaProperties = function (classInfo, schemaProperties, schemaDef) {\n if (!classInfo)\n return;\n for (var i = 0; i < classInfo.properties.length; i++) {\n var prop = classInfo.properties[i];\n schemaProperties[prop.name] = this.generateSchemaProperty(prop, schemaDef);\n }\n };\n JsonMetadata.prototype.generateSchemaProperty = function (prop, schemaDef) {\n var res = { type: prop.schemaType() };\n if (prop.hasChoices) {\n res.enum = prop.getChoices(null);\n }\n if (!!prop.className) {\n res.items = { $ref: \"#\" + prop.className };\n this.generateChemaClass(prop.className, schemaDef);\n }\n if (!!prop.baseClassName) {\n var usedClasses = this.getChildrenClasses(prop.baseClassName, true);\n if (prop.baseClassName == \"question\") {\n usedClasses.push(this.findClass(\"panel\"));\n }\n res.items = [];\n for (var i = 0; i < usedClasses.length; i++) {\n var className = usedClasses[i].name;\n res.items.push({ $ref: \"#\" + className });\n this.generateChemaClass(className, schemaDef);\n }\n }\n return res;\n };\n JsonMetadata.prototype.generateChemaClass = function (className, schemaDef) {\n if (!!schemaDef[className])\n return;\n var classInfo = this.findClass(className);\n if (!classInfo)\n return;\n var hasParent = !!classInfo.parentName && classInfo.parentName != \"base\";\n if (hasParent) {\n this.generateChemaClass(classInfo.parentName, schemaDef);\n }\n var res = { type: \"object\", $id: \"#\" + className };\n schemaDef[className] = res;\n var props = {};\n this.generateSchemaProperties(classInfo, props, schemaDef);\n if (hasParent) {\n res.allOff = [\n { $ref: \"#\" + classInfo.parentName },\n { properties: props },\n ];\n }\n else {\n res.properties = props;\n }\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 __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 __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 __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 __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 __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: false,\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 var error = this.getRequiredError(obj, jsonObj);\n if (!!error) {\n this.addNewError(error, jsonObj);\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(newObj, value);\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 (obj, jsonValue) {\n if (!obj.getType || typeof obj.getData === \"function\")\n return null;\n var className = obj.getType();\n var requiredProperties = JsonObject.metaData.getRequiredProperties(className);\n if (!requiredProperties)\n return null;\n for (var i = 0; i < requiredProperties.length; i++) {\n if (!jsonValue[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 var valueRes = obj[key] ? obj[key] : [];\n this.addValuesIntoArray(value, valueRes, property);\n if (!obj[key])\n obj[key] = valueRes;\n };\n JsonObject.prototype.addValuesIntoArray = function (value, result, property) {\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 result.push(newValue.newObj);\n this.toObjectCore(value[i], newValue.newObj);\n }\n else {\n if (!newValue.error) {\n result.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\n/**\n * An alias for the metadata object. It contains object properties' runtime information and allows you to modify it.\n * @see JsonMetadata\n */\nvar Serializer = JsonObject.metaData;\n\n\n/***/ }),\n\n/***/ \"./src/list.ts\":\n/*!*********************!*\\\n !*** ./src/list.ts ***!\n \\*********************/\n/*! exports provided: ListModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ListModel\", function() { return ListModel; });\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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 __spreadArray = (undefined && undefined.__spreadArray) || function (to, from) {\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n to[j] = from[i];\n return to;\n};\n\n\nvar ListModel = /** @class */ (function (_super) {\n __extends(ListModel, _super);\n function ListModel(items, onItemSelect, allowSelection, selectedItem) {\n var _this = _super.call(this) || this;\n _this.onItemSelect = onItemSelect;\n _this.allowSelection = allowSelection;\n _this.selectItem = function (itemValue) {\n _this.isExpanded = false;\n if (_this.allowSelection) {\n _this.selectedItem = itemValue;\n }\n if (!!_this.onItemSelect) {\n _this.onItemSelect(itemValue);\n }\n };\n _this.isItemDisabled = function (itemValue) {\n return itemValue.enabled !== undefined && !itemValue.enabled;\n };\n _this.isItemSelected = function (itemValue) {\n return _this.allowSelection && _this.selectedItem == itemValue;\n };\n _this.getItemClass = function (itemValue) {\n var className = \"sv-list__item\";\n if (_this.isItemDisabled(itemValue)) {\n className += \" sv-list__item--disabled\";\n }\n if (_this.isItemSelected(itemValue)) {\n className += \" sv-list__item--selected\";\n }\n return className;\n };\n _this.getItemIndent = function (itemValue) {\n var level = itemValue.level || 0;\n return (level + 1) * ListModel.INDENT + \"px\";\n };\n _this.createNewArray(\"items\");\n _this.items = items;\n _this.selectedItem = selectedItem;\n return _this;\n }\n Object.defineProperty(ListModel.prototype, \"items\", {\n get: function () {\n return this.getPropertyValue(\"items\");\n },\n set: function (value) {\n var _a;\n (_a = this.items).splice.apply(_a, __spreadArray([0, this.items.length], (value || [])));\n },\n enumerable: false,\n configurable: true\n });\n ListModel.INDENT = 16;\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: false })\n ], ListModel.prototype, \"isExpanded\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], ListModel.prototype, \"selectedItem\", void 0);\n return ListModel;\n}(_base__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/localizablestring.ts\":\n/*!**********************************!*\\\n !*** ./src/localizablestring.ts ***!\n \\**********************************/\n/*! exports provided: LocalizableString, LocalizableStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LocalizableString\", function() { return LocalizableString; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LocalizableStrings\", function() { return LocalizableStrings; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\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, name) {\n if (useMarkdown === void 0) { useMarkdown = false; }\n this.owner = owner;\n this.useMarkdown = useMarkdown;\n this.name = name;\n this.values = {};\n this.htmlValues = {};\n this.onCreating();\n }\n Object.defineProperty(LocalizableString, \"defaultLocale\", {\n get: function () {\n return _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName;\n },\n set: function (val) {\n _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName = val;\n },\n enumerable: false,\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: false,\n configurable: true\n });\n LocalizableString.prototype.strChanged = function () {\n this.searchableText = undefined;\n if (this.renderedText === undefined)\n return;\n this.calculatedTextValue = this.calText();\n if (this.renderedText !== this.calculatedTextValue) {\n this.renderedText = undefined;\n this.calculatedTextValue = undefined;\n }\n this.onChanged();\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: false,\n configurable: true\n });\n Object.defineProperty(LocalizableString.prototype, \"calculatedText\", {\n get: function () {\n this.renderedText =\n this.calculatedTextValue !== undefined\n ? this.calculatedTextValue\n : this.calText();\n this.calculatedTextValue = undefined;\n return this.renderedText;\n },\n enumerable: false,\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 = _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName;\n var res = this.getValue(loc);\n if (!res && loc == _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName) {\n res = this.getValue(_surveyStrings__WEBPACK_IMPORTED_MODULE_1__[\"surveyLocalization\"].defaultLocale);\n }\n if (!res && loc !== _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName) {\n res = this.getValue(_settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName);\n }\n if (!res)\n res = \"\";\n return res;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(LocalizableString.prototype, \"hasHtml\", {\n get: function () {\n return this.hasHtmlValue();\n },\n enumerable: false,\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: false,\n configurable: true\n });\n Object.defineProperty(LocalizableString.prototype, \"isEmpty\", {\n get: function () {\n return this.getValuesKeys().length == 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(LocalizableString.prototype, \"textOrHtml\", {\n get: function () {\n return this.hasHtml ? this.getHtmlValue() : this.calculatedText;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(LocalizableString.prototype, \"renderedHtml\", {\n get: function () {\n return this.textOrHtml;\n },\n enumerable: false,\n configurable: true\n });\n LocalizableString.prototype.getLocaleText = function (loc) {\n if (!loc)\n loc = _settings__WEBPACK_IMPORTED_MODULE_2__[\"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 != _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName &&\n !this.getValue(loc) &&\n value == this.getLocaleText(_settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName))\n return;\n var curLoc = this.locale;\n if (!loc)\n loc = _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName;\n if (!curLoc)\n curLoc = _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName;\n var hasOnStrChanged = this.onStrChanged && loc === curLoc;\n var oldValue = hasOnStrChanged ? this.pureText : undefined;\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 != _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName &&\n value == this.getLocaleText(_settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName)) {\n this.setLocaleText(loc, null);\n }\n else {\n this.setValue(loc, value);\n if (loc == _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName) {\n this.deleteValuesEqualsToDefault(value);\n }\n }\n }\n }\n this.strChanged();\n if (hasOnStrChanged) {\n this.onStrChanged(oldValue, value);\n }\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] != _settings__WEBPACK_IMPORTED_MODULE_2__[\"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] == _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName &&\n !_settings__WEBPACK_IMPORTED_MODULE_2__[\"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 Object.defineProperty(LocalizableString.prototype, \"renderAs\", {\n get: function () {\n if (!this.owner) {\n return LocalizableString.defaultRenderer;\n }\n if (typeof this.owner.getRenderer !== \"function\") {\n return LocalizableString.defaultRenderer;\n }\n return (this.owner.getRenderer(this.name) || LocalizableString.defaultRenderer);\n },\n enumerable: false,\n configurable: true\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 _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isTwoValueEquals(this.values, obj.values);\n };\n LocalizableString.prototype.setFindText = function (text) {\n if (this.searchText == text)\n return;\n this.searchText = text;\n if (!this.searchableText) {\n var textOrHtml = this.textOrHtml;\n this.searchableText = !!textOrHtml ? textOrHtml.toLowerCase() : \"\";\n }\n var str = this.searchableText;\n var index = !!str && !!text ? str.indexOf(text) : undefined;\n if (index < 0)\n index = undefined;\n if (index != undefined || this.searchIndex != index) {\n this.searchIndex = index;\n if (!!this.onSearchChanged) {\n this.onSearchChanged();\n }\n }\n return this.searchIndex != undefined;\n };\n LocalizableString.prototype.onChanged = function () { };\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 = _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName;\n this.htmlValues[loc] = this.owner.getMarkdownHtml(renderedText, this.name);\n return this.htmlValues[loc] ? true : false;\n };\n LocalizableString.prototype.getHtmlValue = function () {\n var loc = this.locale;\n if (!loc)\n loc = _settings__WEBPACK_IMPORTED_MODULE_2__[\"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] == _settings__WEBPACK_IMPORTED_MODULE_2__[\"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 LocalizableString.defaultRenderer = \"sv-string-viewer\";\n LocalizableString.editableRenderer = \"sv-string-editor\";\n return LocalizableString;\n}());\n\n/**\n * The class represents the list of strings that supports multi-languages.\n */\nvar LocalizableStrings = /** @class */ (function () {\n function LocalizableStrings(owner) {\n this.owner = owner;\n this.values = {};\n }\n Object.defineProperty(LocalizableStrings.prototype, \"locale\", {\n get: function () {\n return this.owner && this.owner.getLocale ? this.owner.getLocale() : \"\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(LocalizableStrings.prototype, \"value\", {\n get: function () {\n return this.getValue(\"\");\n },\n set: function (val) {\n this.setValue(\"\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(LocalizableStrings.prototype, \"text\", {\n get: function () {\n return Array.isArray(this.value) ? this.value.join(\"\\n\") : \"\";\n },\n set: function (val) {\n this.value = !!val ? val.split(\"\\n\") : [];\n },\n enumerable: false,\n configurable: true\n });\n LocalizableStrings.prototype.getLocaleText = function (loc) {\n var res = this.getValueCore(loc, !loc || loc === this.locale);\n if (!res || !Array.isArray(res) || res.length == 0)\n return \"\";\n return res.join(\"\\n\");\n };\n LocalizableStrings.prototype.setLocaleText = function (loc, newValue) {\n var val = !!newValue ? newValue.split(\"\\n\") : null;\n this.setValue(loc, val);\n };\n LocalizableStrings.prototype.getValue = function (loc) {\n return this.getValueCore(loc);\n };\n LocalizableStrings.prototype.getValueCore = function (loc, useDefault) {\n if (useDefault === void 0) { useDefault = true; }\n loc = this.getLocale(loc);\n if (this.values[loc])\n return this.values[loc];\n if (useDefault) {\n var defLoc = _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName;\n if (loc !== defLoc)\n return this.values[defLoc];\n }\n return [];\n };\n LocalizableStrings.prototype.setValue = function (loc, val) {\n loc = this.getLocale(loc);\n if (!val || val.length == 0) {\n delete this.values[loc];\n }\n else {\n this.values[loc] = val;\n }\n };\n Object.defineProperty(LocalizableStrings.prototype, \"isEmpty\", {\n get: function () {\n return this.getValuesKeys().length == 0;\n },\n enumerable: false,\n configurable: true\n });\n LocalizableStrings.prototype.getLocale = function (loc) {\n if (!!loc)\n return loc;\n loc = this.locale;\n return !!loc ? loc : _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName;\n };\n LocalizableStrings.prototype.getLocales = function () {\n var keys = this.getValuesKeys();\n if (keys.length == 0)\n return [];\n return keys;\n };\n LocalizableStrings.prototype.getJson = function () {\n var keys = this.getValuesKeys();\n if (keys.length == 0)\n return null;\n if (keys.length == 1 &&\n keys[0] == _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName &&\n !_settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].serializeLocalizableStringAsObject)\n return this.values[keys[0]];\n return this.values;\n };\n LocalizableStrings.prototype.setJson = function (value) {\n this.values = {};\n if (!value)\n return;\n if (Array.isArray(value)) {\n this.setValue(null, value);\n }\n else {\n for (var key in value) {\n this.setValue(key, value[key]);\n }\n }\n };\n LocalizableStrings.prototype.getValuesKeys = function () {\n return Object.keys(this.values);\n };\n return LocalizableStrings;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/localization/arabic.ts\":\n/*!************************************!*\\\n !*** ./src/localization/arabic.ts ***!\n \\************************************/\n/*! exports provided: arabicSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"arabicSurveyStrings\", function() { return arabicSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar arabicSurveyStrings = {\n pagePrevText: \"السابق\",\n pageNextText: \"التالي\",\n completeText: \"إرسال البيانات\",\n previewText: \"معاينة\",\n editText: \"تعديل\",\n startSurveyText: \"بداية\",\n otherItemText: \"نص آخر\",\n noneItemText: \"لا شيء\",\n selectAllItemText: \"اختر الكل\",\n progressText: \"{1} صفحة {0} من\",\n panelDynamicProgressText: \"سجل {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} 'صواب'.\",\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_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"ar\"] = arabicSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"ar\"] = \"العربية\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/basque.ts\":\n/*!************************************!*\\\n !*** ./src/localization/basque.ts ***!\n \\************************************/\n/*! exports provided: basqueSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"basqueSurveyStrings\", function() { return basqueSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar basqueSurveyStrings = {\n pagePrevText: \"Aurrekoa\",\n pageNextText: \"Hurrengoa\",\n completeText: \"Bukatu\",\n previewText: \"Aurrebista\",\n editText: \"Editatu\",\n startSurveyText: \"Hasi\",\n otherItemText: \"Beste bat (zehaztu)\",\n noneItemText: \"Bat ere ez\",\n selectAllItemText: \"Guztia hautatu\",\n progressText: \"{1}-(e)tik {0} orrialde\",\n panelDynamicProgressText: \"{0} errigistro {1}-(e)tik\",\n questionsProgressText: \"Erantzundako galderak {0}/{1}\",\n emptySurvey: \"Ez dago orrialde bistaragarririk edo ez dago galderarik.\",\n completingSurvey: \"Eskerrik asko galdetegia erantzuteagatik!\",\n completingSurveyBefore: \"Gure datuek diote dagoeneko galdetegia erantzun duzula.\",\n loadingSurvey: \"Galdetegia kargatzen...\",\n optionsCaption: \"Hautatu...\",\n value: \"balioa\",\n requiredError: \"Mesedez, galdera erantzun.\",\n requiredErrorInPanel: \"Mesedez, gutxienez galdera bat erantzun.\",\n requiredInAllRowsError: \"Mesedez, errenkadako galdera guztiak erantzun.\",\n numericError: \"Estimazioa zenbakizkoa izan behar du.\",\n minError: \"Balioa ez da {0} baino txikiagoa izan behar\",\n maxError: \"Balioa ez da {0} baino handiagoa izan behar\",\n textMinLength: \"Mesedez, gutxienez {0} karaktere erabili behar dira.\",\n textMaxLength: \"Mesedez, gehienez {0} karaktere erabili behar dira.\",\n textMinMaxLength: \"Mesedez, gehienez {0} eta gutxienez {1} karaktere erabili behar dira.\",\n minRowCountError: \"Mesedez, gutxienez {0} errenkada bete.\",\n minSelectError: \"Mesedez, gutxienez {0} aukera hautatu.\",\n maxSelectError: \"Mesedez, {0} aukera baino gehiago ez hautatu.\",\n numericMinMax: \"El '{0}' debe de ser igual o más de {1} y igual o menos de {2}\",\n numericMin: \"'{0}' {1} baino handiagoa edo berdin izan behar da\",\n numericMax: \"'{0}' {1} baino txikiago edo berdin izan behar da\",\n invalidEmail: \"Mesedez, baliozko emaila idatz ezazu.\",\n invalidExpression: \"{0} adierazpenak 'egiazkoa' itzuli beharko luke.\",\n urlRequestError: \"Eskaerak '{0}' errorea itzuli du. {1}\",\n urlGetChoicesError: \"La solicitud regresó vacío de data o la propiedad 'trayectoria' no es correcta\",\n exceedMaxSize: \"Fitxategiaren tamaina ez da {0} baino handiagoa izan behar.\",\n otherRequiredError: \"Mesedez, beste estimazioa gehitu.\",\n uploadingFile: \"Zure fitxategia igotzen ari da. Mesedez, segundo batzuk itxaron eta saiatu berriro.\",\n loadingFile: \"Kargatzen...\",\n chooseFile: \"Fitxategia(k) hautatu...\",\n noFileChosen: \"Ez da inolako fitxategirik hautatu\",\n confirmDelete: \"¿Erregistroa borratu nahi al duzu?\",\n keyDuplicationError: \"Balio hau bakarra izan behar du.\",\n addColumn: \"Zutabe bat gehitu\",\n addRow: \"Errenkada bat gehitu\",\n removeRow: \"Errenkada bat kendu\",\n emptyRowsText: \"Ez dago errenkadarik.\",\n addPanel: \"Berria gehitu\",\n removePanel: \"Kendu\",\n choices_Item: \"artikulua\",\n matrix_column: \"Zutabea\",\n matrix_row: \"Errenkada\",\n multipletext_itemname: \"testua\",\n savingData: \"Erantzunak zerbitzarian gordetzen ari dira...\",\n savingDataError: \"Erroreren bat gertatu eta erantzunak ez dira zerbitzarian gorde ahal izan.\",\n savingDataSuccess: \"Erantzunak egoki gorde dira!\",\n saveAgainButton: \"Berriro saiatu.\",\n timerMin: \"min\",\n timerSec: \"seg\",\n timerSpentAll: \"{0} erabili duzu orrialde honetan eta orotara {1}.\",\n timerSpentPage: \"Zuk {0} erabili duzu.\",\n timerSpentSurvey: \"Orotara gastatu duzu.\",\n timerLimitAll: \"{0} gastatu duzu {1}-(e)tik orrialde honetan eta orotara {2} {3}-(e)tik.\",\n timerLimitPage: \"{0} gastatu duzu orrialde honetan {1}-(e)tik.\",\n timerLimitSurvey: \"Zuk orotara {0} gastatu duzu {1}-(e)tik.\",\n cleanCaption: \"Garbitu\",\n clearCaption: \"Hustu\",\n signaturePlaceHolder: \"Sinatu hemen\",\n chooseFileCaption: \"Fitxategia hautatu\",\n removeFileCaption: \"Fitxategi hau ezabatu\",\n booleanCheckedLabel: \"Bai\",\n booleanUncheckedLabel: \"Ez\",\n confirmRemoveFile: \"Ziur zaude hurrengo fitxategia ezabatu nahi duzula: {0}?\",\n confirmRemoveAllFiles: \"Ziur al zaude fitxategi guztiak ezabatu nahi dituzula?\",\n questionTitlePatternText: \"Galderaren izenburua\",\n modalCancelButtonText: \"Ezeztatu\",\n modalApplyButtonText: \"Ezarri\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"eu\"] = basqueSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"eu\"] = \"Euskara\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/bulgarian.ts\":\n/*!***************************************!*\\\n !*** ./src/localization/bulgarian.ts ***!\n \\***************************************/\n/*! exports provided: bulgarianStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"bulgarianStrings\", function() { return bulgarianStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar bulgarianStrings = {\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: \"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 chooseFileCaption: \"Изберете файл\",\n removeFileCaption: \"Премахване на файла\",\n booleanCheckedLabel: \"Да\",\n booleanUncheckedLabel: \"Не\",\n confirmRemoveFile: \"Наистина ли искате да премахнете този файл: {0}?\",\n confirmRemoveAllFiles: \"Наистина ли искате да премахнете всички файлове?\",\n questionTitlePatternText: \"Заглавие на въпроса\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"bg\"] = bulgarianStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"bg\"] = \"български\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/catalan.ts\":\n/*!*************************************!*\\\n !*** ./src/localization/catalan.ts ***!\n \\*************************************/\n/*! exports provided: catalanSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"catalanSurveyStrings\", function() { return catalanSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\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_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"ca\"] = catalanSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"ca\"] = \"català\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/croatian.ts\":\n/*!**************************************!*\\\n !*** ./src/localization/croatian.ts ***!\n \\**************************************/\n/*! exports provided: croatianStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"croatianStrings\", function() { return croatianStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar croatianStrings = {\n pagePrevText: \"Prethodni\",\n pageNextText: \"Sljedeći\",\n completeText: \"Kompletan\",\n previewText: \"Pregled\",\n editText: \"Uređivanje\",\n startSurveyText: \"Početak\",\n otherItemText: \"Ostali (opis)\",\n noneItemText: \"Nitko\",\n selectAllItemText: \"Select All\",\n progressText: \"Stranica {0} od {1}\",\n panelDynamicProgressText: \"Zapisa {0} od {1}\",\n questionsProgressText: \"Odgovorio na {0}/{1} pitanja\",\n emptySurvey: \"U anketi nema vidljive stranice ili pitanja.\",\n completingSurvey: \"Hvala vam što ste završili anketu!\",\n completingSurveyBefore: \"Naši zapisi pokazuju da ste već završili ovu anketu.\",\n loadingSurvey: \"Anketa o učitavanje...\",\n optionsCaption: \"Odaberite...\",\n value: \"vrijednost\",\n requiredError: \"Molim vas odgovorite na pitanje.\",\n requiredErrorInPanel: \"Molim vas odgovorite na barem jedno pitanje.\",\n requiredInAllRowsError: \"Odgovorite na pitanja u svim redovima.\",\n numericError: \"Vrijednost bi trebala biti brojčana.\",\n textMinLength: \"Unesite najmanje {0} znak(ova).\",\n textMaxLength: \"Unesite manje od {0} znak(ova).\",\n textMinMaxLength: \"Unesite više od {0} i manje od {1} znakova.\",\n minRowCountError: \"Molimo ispunite najmanje {0} redaka.\",\n minSelectError: \"Odaberite barem {0} varijante.\",\n maxSelectError: \"Odaberite ne više od {0} varijanti.\",\n numericMinMax: \"'{0}'bi trebao biti jednak ili više od {1} i jednak ili manji od {2}.\",\n numericMin: \"'{0}' bi trebao biti jednak ili više od {1}.\",\n numericMax: \"'{0}' bi trebao biti jednak ili manji od {1}\",\n invalidEmail: \"Unesite valjanu e-mail adresu.\",\n invalidExpression: \"Izraz: {0} treba vratiti 'true'.\",\n urlRequestError: \"Zahtjev vratio pogrešku '{0}'. {1}\",\n urlGetChoicesError: \"Zahtjev je vratio prazne podatke ili je 'path' svojstvo netočna.\",\n exceedMaxSize: \"Veličina datoteke ne smije prelaziti {0}.\",\n otherRequiredError: \"Unesite drugu vrijednost.\",\n uploadingFile: \"Vaša datoteka se prenosi. Pričekajte nekoliko sekundi i pokušajte ponovno.\",\n loadingFile: \"Učitavanje...\",\n chooseFile: \"Odaberite datoteku...\",\n noFileChosen: \"Nije odabrana datoteka\",\n confirmDelete: \"Želite li izbrisati zapis?\",\n keyDuplicationError: \"Ta bi vrijednost trebala biti jedinstvena.\",\n addColumn: \"Dodavanje stupca\",\n addRow: \"Dodavanje redaka\",\n removeRow: \"Ukloniti\",\n addPanel: \"Dodavanje novih\",\n removePanel: \"Ukloniti\",\n choices_Item: \"stavku\",\n matrix_column: \"Stupca\",\n matrix_row: \"Redak\",\n savingData: \"Rezultati se spremaju na poslužitelju...\",\n savingDataError: \"Došlo je do pogreške i nismo mogli spremiti rezultate.\",\n savingDataSuccess: \"Rezultati su uspješno spremljeni!\",\n saveAgainButton: \"Pokušaj ponovo\",\n timerMin: \"min\",\n timerSec: \"sec\",\n timerSpentAll: \"Vi ste proveli {0} na ovoj stranici i {1} ukupno.\",\n timerSpentPage: \"Potrošili ste {0} na ovu stranicu.\",\n timerSpentSurvey: \"You have spent {0} in total. {0}.\",\n timerLimitAll: \"Vi ste proveli {0} od {1} na ovoj stranici i {2} od {3} ukupno.\",\n timerLimitPage: \"Potrošio si {0} od {1} na ovoj stranici.\",\n timerLimitSurvey: \"Ukupno ste potrošili {0} od {1}.\",\n cleanCaption: \"Očistiti\",\n clearCaption: \"Očistiti\",\n chooseFileCaption: \"Odaberite datoteku\",\n removeFileCaption: \"Uklonite ovu datoteku\",\n booleanCheckedLabel: \"Da\",\n booleanUncheckedLabel: \"Ne\",\n confirmRemoveFile: \"Jeste li sigurni da želite ukloniti ovu datoteku: {0}?\",\n confirmRemoveAllFiles: \"Jeste li sigurni da želite ukloniti sve datoteke?\",\n questionTitlePatternText: \"Naslov pitanja\",\n modalCancelButtonText: \"Otkazati\",\n modalApplyButtonText: \"Primijeniti\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"hr\"] = croatianStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"hr\"] = \"hrvatski\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/czech.ts\":\n/*!***********************************!*\\\n !*** ./src/localization/czech.ts ***!\n \\***********************************/\n/*! exports provided: czechSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"czechSurveyStrings\", function() { return czechSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar czechSurveyStrings = {\n pagePrevText: \"Předchozí\",\n pageNextText: \"Další\",\n completeText: \"Hotovo\",\n previewText: \"Náhled\",\n editText: \"Upravit\",\n startSurveyText: \"Start\",\n otherItemText: \"Jiná odpověď (napište)\",\n noneItemText: \"Žádný\",\n selectAllItemText: \"Vybrat vše\",\n progressText: \"Strana {0} z {1}\",\n panelDynamicProgressText: \"Záznam {0} z {1}\",\n questionsProgressText: \"Zodpovězené otázky: {0} / {1}\",\n emptySurvey: \"Průzkumu neobsahuje žádné otázky.\",\n completingSurvey: \"Děkujeme za vyplnění průzkumu!\",\n completingSurveyBefore: \"Naše záznamy ukazují, že jste tento průzkum již dokončili.\",\n loadingSurvey: \"Probíhá načítání průzkumu...\",\n optionsCaption: \"Vyber...\",\n value: \"hodnota\",\n requiredError: \"Odpovězte prosím na otázku.\",\n requiredErrorInPanel: \"Please answer at least one question.\",\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 invalidExpression: \"Výraz: {0} by měl vrátit hodnotu „true“.\",\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 loadingFile: \"Načítání...\",\n chooseFile: \"Vyberte soubory ...\",\n noFileChosen: \"Není zvolený žádný soubor\",\n confirmDelete: \"Chcete smazat záznam?\",\n keyDuplicationError: \"Tato hodnota by měla být jedinečná.\",\n addColumn: \"Přidat sloupec\",\n addRow: \"Přidat řádek\",\n removeRow: \"Odstranit\",\n addPanel: \"Přidat nový\",\n removePanel: \"Odstranit\",\n choices_Item: \"položka\",\n matrix_column: \"Sloupec\",\n matrix_row: \"Řádek\",\n savingData: \"Výsledky se ukládají na server ...\",\n savingDataError: \"Došlo k chybě a výsledky jsme nemohli uložit.\",\n savingDataSuccess: \"Výsledky byly úspěšně uloženy!\",\n saveAgainButton: \"Zkus to znovu\",\n timerMin: \"min\",\n timerSec: \"sek\",\n timerSpentAll: \"Na této stránce jste utratili celkem {0} a celkem {1}.\",\n timerSpentPage: \"Na této stránce jste utratili {0}.\",\n timerSpentSurvey: \"Celkem jste utratili {0}.\",\n timerLimitAll: \"Na této stránce jste utratili {0} z {1} a celkem {2} z {3}.\",\n timerLimitPage: \"Na této stránce jste strávili {0} z {1}.\",\n timerLimitSurvey: \"Celkově jste utratili {0} z {1}.\",\n cleanCaption: \"Čistý\",\n clearCaption: \"Průhledná\",\n chooseFileCaption: \"Vyberte soubor\",\n removeFileCaption: \"Odeberte tento soubor\",\n booleanCheckedLabel: \"Ano\",\n booleanUncheckedLabel: \"Ne\",\n confirmRemoveFile: \"Opravdu chcete odebrat tento soubor: {0}?\",\n confirmRemoveAllFiles: \"Opravdu chcete odstranit všechny soubory?\",\n questionTitlePatternText: \"Název otázky\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"cs\"] = czechSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"cs\"] = \"čeština\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/danish.ts\":\n/*!************************************!*\\\n !*** ./src/localization/danish.ts ***!\n \\************************************/\n/*! exports provided: danishSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"danishSurveyStrings\", function() { return danishSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar danishSurveyStrings = {\n pagePrevText: \"Tilbage\",\n pageNextText: \"Videre\",\n completeText: \"Færdig\",\n previewText: \"Forpremiere\",\n editText: \"Redigér\",\n startSurveyText: \"Start\",\n otherItemText: \"Valgfrit svar...\",\n noneItemText: \"Ingen\",\n selectAllItemText: \"Vælg alle\",\n progressText: \"Side {0} af {1}\",\n panelDynamicProgressText: \"Optag {0} af {1}\",\n questionsProgressText: \"Besvarede {0} / {1} spørgsmål\",\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 noFileChosen: \"Ingen fil er valgt\",\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 chooseFileCaption: \"Vælg fil\",\n removeFileCaption: \"Fjern denne fil\",\n booleanCheckedLabel: \"Ja\",\n booleanUncheckedLabel: \"Ingen\",\n confirmRemoveFile: \"Er du sikker på, at du vil fjerne denne fil: {0}?\",\n confirmRemoveAllFiles: \"Er du sikker på, at du vil fjerne alle filer?\",\n questionTitlePatternText: \"Spørgsmåls titel\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"da\"] = danishSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"da\"] = \"dansk\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/dutch.ts\":\n/*!***********************************!*\\\n !*** ./src/localization/dutch.ts ***!\n \\***********************************/\n/*! exports provided: dutchSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"dutchSurveyStrings\", function() { return dutchSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\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 previewText: \"Voorbeeld\",\n editText: \"Bewerk\",\n startSurveyText: \"Begin met\",\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 requiredInAllRowsError: \"Deze vraag vereist één antwoord per rij\",\n numericError: \"Het antwoord moet een getal zijn\",\n textMinLength: \"Vul minstens {0} karakters in\",\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 minSelectError: \"Selecteer minimum {0} antwoorden\",\n maxSelectError: \"Selecteer niet meer dan {0} antwoorden\",\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 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 questionTitlePatternText: \"Titel van de vraag\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"nl\"] = dutchSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"nl\"] = \"nederlands\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/english.ts\":\n/*!*************************************!*\\\n !*** ./src/localization/english.ts ***!\n \\*************************************/\n/*! exports provided: englishStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"englishStrings\", 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 minError: \"The value should not be less than {0}\",\n maxError: \"The value should not be greater than {0}\",\n textMinLength: \"Please enter at least {0} character(s).\",\n textMaxLength: \"Please enter no more than {0} character(s).\",\n textMinMaxLength: \"Please enter at least {0} and no more than {1} characters.\",\n minRowCountError: \"Please fill in at least {0} row(s).\",\n minSelectError: \"Please select at least {0} variant(s).\",\n maxSelectError: \"Please select no more than {0} variant(s).\",\n numericMinMax: \"The '{0}' should be at least {1} and at most {2}\",\n numericMin: \"The '{0}' should be at least {1}\",\n numericMax: \"The '{0}' should be at most {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 emptyRowsText: \"There are no rows.\",\n addPanel: \"Add new\",\n removePanel: \"Remove\",\n choices_Item: \"item\",\n matrix_column: \"Column\",\n matrix_row: \"Row\",\n multipletext_itemname: \"text\",\n savingData: \"The results are being saved 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 signaturePlaceHolder: \"Sign here\",\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 modalCancelButtonText: \"Cancel\",\n modalApplyButtonText: \"Apply\",\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\n/***/ \"./src/localization/estonian.ts\":\n/*!**************************************!*\\\n !*** ./src/localization/estonian.ts ***!\n \\**************************************/\n/*! exports provided: estonianSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"estonianSurveyStrings\", function() { return estonianSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar estonianSurveyStrings = {\n pagePrevText: \"Tagasi\",\n pageNextText: \"Edasi\",\n completeText: \"Lõpeta\",\n previewText: \"Eelvaade\",\n editText: \"Muuda\",\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 invalidExpression: \"Avaldis: {0} peaks tagastama tõese.\",\n urlRequestError: \"Taotlus tagastas vea „{0}”. {1}\",\n urlGetChoicesError: \"Taotlus tagastas tühjad andmed või atribuut 'path' on vale\",\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 choices_Item: \"üksus\",\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_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"et\"] = estonianSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"et\"] = \"eesti keel\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/finnish.ts\":\n/*!*************************************!*\\\n !*** ./src/localization/finnish.ts ***!\n \\*************************************/\n/*! exports provided: finnishSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"finnishSurveyStrings\", function() { return finnishSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar finnishSurveyStrings = {\n pagePrevText: \"Edellinen\",\n pageNextText: \"Seuraava\",\n completeText: \"Valmis\",\n previewText: \"Esikatselu\",\n editText: \"Muokkaa\",\n startSurveyText: \"Aloita\",\n otherItemText: \"Muu (tarkenna)\",\n noneItemText: \"Ei mitään\",\n selectAllItemText: \"Valitse kaikki\",\n progressText: \"Sivu {0} / {1}\",\n panelDynamicProgressText: \"Osio {0} / {1}\",\n questionsProgressText: \"Olet vastannut {0} / {1} kysymykseen.\",\n emptySurvey: \"Tässä kyselyssä ei ole yhtään näkyvillä olevaa sivua tai kysymystä.\",\n completingSurvey: \"Kiitos kyselyyn vastaamisesta!\",\n completingSurveyBefore: \"Tietojemme mukaan olet jo suorittanut tämän kyselyn.\",\n loadingSurvey: \"Kyselyä ladataan palvelimelta...\",\n optionsCaption: \"Valitse...\",\n value: \"arvo\",\n requiredError: \"Vastaa kysymykseen, kiitos.\",\n requiredErrorInPanel: \"Vastaa ainakin yhteen kysymykseen.\",\n requiredInAllRowsError: \"Vastaa kysymyksiin kaikilla riveillä.\",\n numericError: \"Arvon tulee olla numeerinen.\",\n textMinLength: \"Syötä vähintään {0} merkkiä.\",\n textMaxLength: \"Älä syötä yli {0} merkkiä.\",\n textMinMaxLength: \"Syötä vähintään {0} ja enintään {1} merkkiä.\",\n minRowCountError: \"Täytä vähintään {0} riviä.\",\n minSelectError: \"Valitse vähintään {0} vaihtoehtoa.\",\n maxSelectError: \"Valitse enintään {0} vaihtoehtoa.\",\n numericMinMax: \"Luvun '{0}' tulee olla vähintään {1} ja korkeintaan {2}.\",\n numericMin: \"Luvun '{0}' tulee olla vähintään {1}.\",\n numericMax: \"Luvun '{0}' tulee olla korkeintaan {1}.\",\n invalidEmail: \"Syötä validi sähköpostiosoite.\",\n invalidExpression: \"Lausekkeen: {0} pitäisi palauttaa 'true'.\",\n urlRequestError: \"Pyyntö palautti virheen {0}. {1}\",\n urlGetChoicesError: \"Pyyntö palautti tyhjän tiedoston tai 'path'-asetus on väärä\",\n exceedMaxSize: \"Tiedoston koko ei saa olla suurempi kuin {0}.\",\n otherRequiredError: \"Tarkenna vastaustasi tekstikenttään.\",\n uploadingFile: \"Tiedostoa lähetetään. Odota muutama sekunti ja yritä uudelleen.\",\n loadingFile: \"Ladataan...\",\n chooseFile: \"Valitse tiedosto(t)...\",\n noFileChosen: \"Ei tiedostoa valittuna\",\n confirmDelete: \"Haluatko poistaa osion?\",\n keyDuplicationError: \"Tämä arvo on jo käytössä. Syötä toinen arvo.\",\n addColumn: \"Lisää sarake\",\n addRow: \"Lisää rivi\",\n removeRow: \"Poista\",\n emptyRowsText: \"Ei rivejä\",\n addPanel: \"Lisää uusi\",\n removePanel: \"Poista\",\n choices_Item: \"kohde\",\n matrix_column: \"Sarake\",\n matrix_row: \"Rivi\",\n savingData: \"Tietoja tallennetaan palvelimelle...\",\n savingDataError: \"Tapahtui virhe, emmekä voineet tallentaa kyselyn tietoja.\",\n savingDataSuccess: \"Tiedot tallennettiin onnistuneesti!\",\n saveAgainButton: \"Yritä uudelleen\",\n timerMin: \"min\",\n timerSec: \"sek\",\n timerSpentAll: \"Olet käyttänyt {0} tällä sivulla ja yhteensä {1}.\",\n timerSpentPage: \"Olet käyttänyt {0} tällä sivulla.\",\n timerSpentSurvey: \"Olet käyttänyt yhteensä {0}.\",\n timerLimitAll: \"Olet käyttänyt tällä sivulla {0} / {1} ja yhteensä {2} / {3}.\",\n timerLimitPage: \"Olet käyttänyt {0} / {1} tällä sivulla.\",\n timerLimitSurvey: \"Olet käyttänyt yhteensä {0} / {1}.\",\n cleanCaption: \"Pyyhi\",\n clearCaption: \"Tyhjennä\",\n chooseFileCaption: \"Valitse tiedosto\",\n removeFileCaption: \"Poista tämä tiedosto\",\n booleanCheckedLabel: \"Kyllä\",\n booleanUncheckedLabel: \"Ei\",\n confirmRemoveFile: \"Haluatko varmasti poistaa tämän tiedoston: {0}?\",\n confirmRemoveAllFiles: \"Haluatko varmasti poistaa kaikki tiedostot?\",\n questionTitlePatternText: \"Kysymyksen otsikko\",\n modalCancelButtonText: \"Peruuta\",\n modalApplyButtonText: \"Käytä\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"fi\"] = finnishSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"fi\"] = \"suomi\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/french.ts\":\n/*!************************************!*\\\n !*** ./src/localization/french.ts ***!\n \\************************************/\n/*! exports provided: frenchSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"frenchSurveyStrings\", function() { return frenchSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar frenchSurveyStrings = {\n pagePrevText: \"Précédent\",\n pageNextText: \"Suivant\",\n completeText: \"Terminer\",\n previewText: \"Aperçu\",\n editText: \"Modifier\",\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_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"fr\"] = frenchSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"fr\"] = \"français\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/georgian.ts\":\n/*!**************************************!*\\\n !*** ./src/localization/georgian.ts ***!\n \\**************************************/\n/*! exports provided: georgianSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"georgianSurveyStrings\", function() { return georgianSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\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_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"ka\"] = georgianSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"ka\"] = \"ქართული\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/german.ts\":\n/*!************************************!*\\\n !*** ./src/localization/german.ts ***!\n \\************************************/\n/*! exports provided: germanSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"germanSurveyStrings\", function() { return germanSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar germanSurveyStrings = {\n pagePrevText: \"Zurück\",\n pageNextText: \"Weiter\",\n completeText: \"Abschließen\",\n previewText: \"Vorschau\",\n editText: \"Bearbeiten\",\n startSurveyText: \"Start\",\n otherItemText: \"Sonstiges (Bitte angeben)\",\n noneItemText: \"Nichts trifft zu\",\n selectAllItemText: \"Alles auswählen\",\n progressText: \"Seite {0} von {1}\",\n panelDynamicProgressText: \"Eintrag {0} von {1}\",\n questionsProgressText: \"{0}/{1} Fragen beantwortet\",\n emptySurvey: \"Es sind keine Fragen vorhanden.\",\n completingSurvey: \"Vielen Dank, dass Sie die Umfrage abgeschlossen haben!\",\n completingSurveyBefore: \"Wir haben festgestellt, dass Sie diese Umfrage bereits abgeschlossen haben.\",\n loadingSurvey: \"Umfrage 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} Antwort(en) aus.\",\n maxSelectError: \"Bitte wählen Sie nicht mehr als {0} Antwort(en) 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' zurückgeben.\",\n urlRequestError: \"Ein Netzwerkdienst hat folgenden Fehler zurückgegeben '{0}'. {1}\",\n urlGetChoicesError: \"Eine Netzwerkdienst hat ungültige Daten zurückgegeben\",\n exceedMaxSize: \"Die Datei darf nicht größer als {0} sein.\",\n otherRequiredError: \"Bitte geben Sie einen Wert an.\",\n uploadingFile: \"Bitte warten Sie bis der Upload Ihrer Dateien abgeschlossen ist.\",\n loadingFile: \"Wird hochgeladen...\",\n chooseFile: \"Datei(en) auswählen...\",\n noFileChosen: \"Keine Datei ausgewählt\",\n confirmDelete: \"Wollen Sie den Eintrag löschen?\",\n keyDuplicationError: \"Dieser Wert muss einmalig 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: \"Erneut absenden\",\n timerMin: \"Min.\",\n timerSec: \"Sek.\",\n timerSpentAll: \"Sie waren {0} auf dieser Seite und brauchten insgesamt {1}.\",\n timerSpentPage: \"Sie waren {0} auf dieser Seite.\",\n timerSpentSurvey: \"Sie haben insgesamt {0} gebraucht.\",\n timerLimitAll: \"Sie waren {0} von {1} auf dieser Seite und brauchten insgesamt {2} von {3}.\",\n timerLimitPage: \"Sie waren {0} von {1} auf dieser Seite.\",\n timerLimitSurvey: \"Sie haben insgesamt {0} von {1} gebraucht.\",\n cleanCaption: \"Alles löschen\",\n clearCaption: \"Auswahl entfernen\",\n chooseFileCaption: \"Datei auswählen\",\n removeFileCaption: \"Datei löschen\",\n booleanCheckedLabel: \"Ja\",\n booleanUncheckedLabel: \"Nein\",\n confirmRemoveFile: \"Sind Sie sicher, dass Sie diese Datei löschen möchten: {0}?\",\n confirmRemoveAllFiles: \"Sind Sie sicher, dass Sie alle Dateien löschen möchten?\",\n questionTitlePatternText: \"Fragentitel\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"de\"] = germanSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"de\"] = \"deutsch\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/greek.ts\":\n/*!***********************************!*\\\n !*** ./src/localization/greek.ts ***!\n \\***********************************/\n/*! exports provided: greekSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"greekSurveyStrings\", function() { return greekSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n//Created by https://github.com/agelospanagiotakis\n\nvar greekSurveyStrings = {\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 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: \"Παρακαλώ δώστε μια αποδεκτή διεύθυνση e-mail.\",\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 chooseFileCaption: \"Επιλέξτε το αρχείο\",\n removeFileCaption: \"Καταργήστε αυτό το αρχείο\",\n booleanCheckedLabel: \"Ναί\",\n booleanUncheckedLabel: \"Οχι\",\n confirmRemoveFile: \"Είστε βέβαιοι ότι θέλετε να καταργήσετε αυτό το αρχείο: {0};\",\n confirmRemoveAllFiles: \"Είστε βέβαιοι ότι θέλετε να καταργήσετε όλα τα αρχεία;\",\n questionTitlePatternText: \"Τίτλος ερώτησης\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"gr\"] = greekSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"gr\"] = \"ελληνικά\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/hebrew.ts\":\n/*!************************************!*\\\n !*** ./src/localization/hebrew.ts ***!\n \\************************************/\n/*! exports provided: hebrewSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"hebrewSurveyStrings\", function() { return hebrewSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar hebrewSurveyStrings = {\n pagePrevText: \"אחורה\",\n pageNextText: \"קדימה\",\n completeText: \"סיום\",\n previewText: \"תצוגה מקדימה\",\n editText: \"לַעֲרוֹך\",\n startSurveyText: \"הַתחָלָה\",\n otherItemText: \"אחר (נא לתאר)\",\n noneItemText: \"אף אחד\",\n selectAllItemText: \"בחר הכל\",\n progressText: \"דף {1} מתוך {0}\",\n panelDynamicProgressText: \"הקלטה {0} מתוך {1}\",\n questionsProgressText: \"ענה על שאלות\",\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 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_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"he\"] = hebrewSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"he\"] = \"עברית\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/hindi.ts\":\n/*!***********************************!*\\\n !*** ./src/localization/hindi.ts ***!\n \\***********************************/\n/*! exports provided: hindiStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"hindiStrings\", function() { return hindiStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar hindiStrings = {\n pagePrevText: \"पिछला\",\n pageNextText: \"अगला\",\n completeText: \"पूरा\",\n previewText: \"पूर्वसमीक्षा\",\n editText: \"संपादित\",\n startSurveyText: \"शुरू\",\n otherItemText: \"दूसरा (वर्णन करें)\",\n noneItemTex: \"कोई नहीं\",\n selectAllItemText: \"सभी का चयन करें\",\n progressText: \"पृष्ठ 1 में से 0\",\n panelDynamicProgressText: \" दस्तावेज {1} के {0}\",\n questionsProgressText: \"{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 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: \"आपने इस पृष्ठ पर {1} की {0} और कुल {3} की {2} खर्च की है।\",\n timerLimitPage: \"आपने इस पृष्ठ पर {1} का {0} खर्च किया है\",\n timerLimitSurvey: \"आपने कुल {1} की {0} खर्च की है\",\n cleanCaption: \"साफ\",\n clearCaption: \"स्पष्ट\",\n chooseFileCaption: \"फ़ाइल चुनें\",\n removeFileCaption: \"इस फाइल को निकालें\",\n booleanCheckedLabel: \"हाँ\",\n booleanUncheckedLabel: \"नहीं\",\n confirmRemoveFile: \"क्या आप सुनिश्चित हैं कि आप इस फ़ाइल को हटाना चाहते हैं: {0}\",\n confirmRemoveAllFiles: \"क्या आप सुनिश्चित हैं कि आप सभी फ़ाइलों को हटाना चाहते हैं\",\n questionTitlePatternText: \"प्रश्न का शीर्षक\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"hi\"] = hindiStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"hi\"] = \"hindi\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/hungarian.ts\":\n/*!***************************************!*\\\n !*** ./src/localization/hungarian.ts ***!\n \\***************************************/\n/*! exports provided: hungarianSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"hungarianSurveyStrings\", function() { return hungarianSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar hungarianSurveyStrings = {\n pagePrevText: \"Vissza\",\n pageNextText: \"Tovább\",\n completeText: \"Kész\",\n previewText: \"Előnézet\",\n editText: \"Szerkesztés\",\n startSurveyText: \"Rajt\",\n otherItemText: \"Egyéb (adja meg)\",\n noneItemText: \"Egyik sem\",\n selectAllItemText: \"Mindet kiválaszt\",\n progressText: \"{0}./{1} oldal\",\n panelDynamicProgressText: \"{0} / {1} rekord\",\n questionsProgressText: \"Válaszolt kérdések: {0} / {1}\",\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 requiredErrorInPanel: \"Kérjük, válaszoljon legalább egy kérdésre.\",\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 invalidExpression: \"A következő kifejezés: {0} vissza kell adnia az „igaz” értéket.\",\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 loadingFile: \"Betöltés...\",\n chooseFile: \"Fájlok kiválasztása ...\",\n noFileChosen: \"Nincs kiválasztva fájl\",\n confirmDelete: \"Törli ezt a rekordot?\",\n keyDuplicationError: \"Az értéknek egyedinek kell lennie.\",\n addColumn: \"Oszlop hozzáadása\",\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 timerMin: \"min\",\n timerSec: \"sec\",\n timerSpentAll: \"Ön {0} összeget költött ezen az oldalon, és összesen {1}.\",\n timerSpentPage: \"{0} összeget költött ezen az oldalon.\",\n timerSpentSurvey: \"Összesen {0} költött.\",\n timerLimitAll: \"Ön {0} / {1} összeget költött ezen az oldalon, és összesen {2} / {3}.\",\n timerLimitPage: \"Ön {0} / {1} összeget költött ezen az oldalon.\",\n timerLimitSurvey: \"Összesen {0} / {1} összeget költött el.\",\n cleanCaption: \"Tiszta\",\n clearCaption: \"Egyértelmű\",\n chooseFileCaption: \"Válassz fájlt\",\n removeFileCaption: \"Távolítsa el ezt a fájlt\",\n booleanCheckedLabel: \"Igen\",\n booleanUncheckedLabel: \"Nem\",\n confirmRemoveFile: \"Biztosan eltávolítja ezt a fájlt: {0}?\",\n confirmRemoveAllFiles: \"Biztosan el akarja távolítani az összes fájlt?\",\n questionTitlePatternText: \"Kérdés címe\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"hu\"] = hungarianSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"hu\"] = \"magyar\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/icelandic.ts\":\n/*!***************************************!*\\\n !*** ./src/localization/icelandic.ts ***!\n \\***************************************/\n/*! exports provided: icelandicSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"icelandicSurveyStrings\", function() { return icelandicSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar icelandicSurveyStrings = {\n pagePrevText: \"Tilbaka\",\n pageNextText: \"Áfram\",\n completeText: \"Lokið\",\n previewText: \"Forskoða\",\n editText: \"Breyta\",\n startSurveyText: \"Byrjaðu\",\n otherItemText: \"Hinn (skýring)\",\n noneItemText: \"Enginn\",\n selectAllItemText: \"Velja allt\",\n progressText: \"Síða {0} of {1}\",\n panelDynamicProgressText: \"Taka upp {0} af {1}\",\n questionsProgressText: \"Svarað {0} / {1} spurningum\",\n emptySurvey: \"Það er enginn síða eða spurningar í þessari könnun.\",\n completingSurvey: \"Takk fyrir að fyllja út þessa könnun!\",\n completingSurveyBefore: \"Skrár okkar sýna að þú hefur þegar lokið þessari könnun.\",\n loadingSurvey: \"Könnunin er að hlaða...\",\n optionsCaption: \"Veldu...\",\n value: \"gildi\",\n requiredError: \"Vinsamlegast svarið spurningunni.\",\n requiredErrorInPanel: \"Vinsamlegast svaraðu að minnsta kosti einni spurningu.\",\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 invalidExpression: \"Tjáningin: {0} ætti að skila 'satt'.\",\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 loadingFile: \"Hleður ...\",\n chooseFile: \"Veldu skrár ...\",\n noFileChosen: \"Engin skrá valin\",\n confirmDelete: \"Viltu eyða skránni?\",\n keyDuplicationError: \"Þetta gildi ætti að vera einstakt.\",\n addColumn: \"Bæta við dálki\",\n addRow: \"Bæta við röð\",\n removeRow: \"Fjarlægja\",\n addPanel: \"Bæta við nýju\",\n removePanel: \"Fjarlægðu\",\n choices_Item: \"hlutur\",\n matrix_column: \"Dálkur\",\n matrix_row: \"Röð\",\n savingData: \"Niðurstöðurnar eru að spara á netþjóninum ... \",\n savingDataError: \"Villa kom upp og við gátum ekki vistað niðurstöðurnar.\",\n savingDataSuccess: \"Árangurinn var vistaður með góðum árangri!\",\n saveAgainButton: \"Reyndu aftur\",\n timerMin: \"mín\",\n timerSec: \"sek\",\n timerSpentAll: \"Þú hefur eytt {0} á þessari síðu og {1} samtals.\",\n timerSpentPage: \"Þú hefur eytt {0} á þessari síðu.\",\n timerSpentSurvey: \"Þú hefur eytt {0} samtals.\",\n timerLimitAll: \"Þú hefur eytt {0} af {1} á þessari síðu og {2} af {3} samtals.\",\n timerLimitPage: \"Þú hefur eytt {0} af {1} á þessari síðu.\",\n timerLimitSurvey: \"Þú hefur eytt {0} af {1} samtals.\",\n cleanCaption: \"Hreint\",\n clearCaption: \"Hreinsa\",\n chooseFileCaption: \"Veldu skrá\",\n removeFileCaption: \"Fjarlægðu þessa skrá\",\n booleanCheckedLabel: \"Já\",\n booleanUncheckedLabel: \"Nei\",\n confirmRemoveFile: \"Ertu viss um að þú viljir fjarlægja þessa skrá: {0}?\",\n confirmRemoveAllFiles: \"Ertu viss um að þú viljir fjarlægja allar skrár?\",\n questionTitlePatternText: \"Spurningartitill\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"is\"] = icelandicSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"is\"] = \"íslenska\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/indonesian.ts\":\n/*!****************************************!*\\\n !*** ./src/localization/indonesian.ts ***!\n \\****************************************/\n/*! exports provided: indonesianStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"indonesianStrings\", function() { return indonesianStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar indonesianStrings = {\n pagePrevText: \"Sebelumnya\",\n pageNextText: \"Selanjutnya\",\n completeText: \"Selesai\",\n previewText: \"Pratinjau\",\n editText: \"Sunting\",\n startSurveyText: \"Mulai\",\n otherItemText: \"Lainnya (jelaskan)\",\n noneItemText: \"Tidak Ada\",\n selectAllItemText: \"Pilih Semua\",\n progressText: \"Halaman {0} dari {1}\",\n panelDynamicProgressText: \"Rekam {0} dari {1}\",\n questionsProgressText: \"Menjawab pertanyaan {0} / {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 noFileChosen: \"Tidak ada file yang dipilih\",\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 chooseFileCaption: \"Pilih File\",\n removeFileCaption: \"Hapus berkas ini\",\n booleanCheckedLabel: \"Iya\",\n booleanUncheckedLabel: \"Tidak\",\n confirmRemoveFile: \"Anda yakin ingin menghapus file ini: {0}?\",\n confirmRemoveAllFiles: \"Anda yakin ingin menghapus semua file?\",\n questionTitlePatternText: \"Judul pertanyaan\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"id\"] = indonesianStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"id\"] = \"bahasa Indonesia\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/italian.ts\":\n/*!*************************************!*\\\n !*** ./src/localization/italian.ts ***!\n \\*************************************/\n/*! exports provided: italianSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"italianSurveyStrings\", function() { return italianSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar italianSurveyStrings = {\n pagePrevText: \"Precedente\",\n pageNextText: \"Successivo\",\n completeText: \"Salva\",\n previewText: \"Anteprima\",\n editText: \"Modifica\",\n startSurveyText: \"Inizio\",\n otherItemText: \"Altro (descrivi)\",\n noneItemText: \"Nessuno\",\n selectAllItemText: \"Seleziona tutti\",\n progressText: \"Pagina {0} di {1}\",\n panelDynamicProgressText: \"Record di {0} di {1}\",\n questionsProgressText: \"Risposte a {0}/{1} domande\",\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 invalidExpression: \"L'espressione: {0} dovrebbe tornare 'vero'.\",\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 addColumn: \"Aggiungi colonna\",\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 clearCaption: \"Cancella\",\n chooseFileCaption: \"Scegliere il file\",\n removeFileCaption: \"Rimuovere questo file\",\n booleanCheckedLabel: \"Sì\",\n booleanUncheckedLabel: \"No\",\n confirmRemoveFile: \"Sei sicuro di voler elminare questo file: {0}?\",\n confirmRemoveAllFiles: \"Sei sicuro di voler elminare tutti i files?\",\n questionTitlePatternText: \"Titolo della domanda\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"it\"] = italianSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"it\"] = \"italiano\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/japanese.ts\":\n/*!**************************************!*\\\n !*** ./src/localization/japanese.ts ***!\n \\**************************************/\n/*! exports provided: japaneseSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"japaneseSurveyStrings\", function() { return japaneseSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar japaneseSurveyStrings = {\n pagePrevText: \"前へ\",\n pageNextText: \"次へ\",\n completeText: \"完了\",\n previewText: \"プレビュー\",\n editText: \"編集\",\n startSurveyText: \"スタート\",\n otherItemText: \"その他(説明)\",\n noneItemText: \"なし\",\n selectAllItemText: \"すべて選択\",\n progressText: \"{0}/{1}頁\",\n panelDynamicProgressText: \"{1}の{0}を記録する\",\n questionsProgressText: \"{0}/{1}の質問に回答しました。\",\n emptySurvey: \"この調査に表示できるページや質問はありません\",\n completingSurvey: \"調査を完了してくれてありがとうございました\",\n completingSurveyBefore: \"当社の記録によると、この調査はすでに完了しています。\",\n loadingSurvey: \"調査をダウンロード中\",\n optionsCaption: \"選択\",\n value: \"値打ち\",\n requiredError: \"質問にお答え下さい\",\n requiredErrorInPanel: \"最低でも1つの質問に答えてください。\",\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: \"このページに{1}のうち{0}を費やし、{3}のうち{2}を合計で費やしました。\",\n timerLimitPage: \"このページで{1}の{0}を使ったことがあります。\",\n timerLimitSurvey: \"合計で{1}の{0}を使ったことがあります。\",\n cleanCaption: \"削除\",\n clearCaption: \"空白\",\n chooseFileCaption: \"ファイルを選択\",\n removeFileCaption: \"このファイルを削除\",\n booleanCheckedLabel: \"噫\",\n booleanUncheckedLabel: \"否\",\n confirmRemoveFile: \"このファイルを削除してもよろしいですか?{0}?\",\n confirmRemoveAllFiles: \"すべてのファイルを削除してもよろしいですか?\",\n questionTitlePatternText: \"質問名\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"ja\"] = japaneseSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"ja\"] = \"日本語\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/kazakh.ts\":\n/*!************************************!*\\\n !*** ./src/localization/kazakh.ts ***!\n \\************************************/\n/*! exports provided: kazakhStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"kazakhStrings\", function() { return kazakhStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar kazakhStrings = {\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 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 chooseFileCaption: \"Файл таңдаңыз\",\n removeFileCaption: \"Файлды жойыңыз\",\n booleanCheckedLabel: \"Иә\",\n booleanUncheckedLabel: \"Жоқ\",\n confirmRemoveFile: \"Сіз бұл файлды жоятыныңызға сенімдісіз бе: {0}?\",\n confirmRemoveAllFiles: \"Сіз барлық файлдарды жоятыныңызға сенімдісіз бе?\",\n questionTitlePatternText: \"Сұрақтың атауы\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"kk\"] = kazakhStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"kk\"] = \"Kazakh\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/korean.ts\":\n/*!************************************!*\\\n !*** ./src/localization/korean.ts ***!\n \\************************************/\n/*! exports provided: koreanStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"koreanStrings\", function() { return koreanStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar koreanStrings = {\n pagePrevText: \"이전\",\n pageNextText: \"다음\",\n completeText: \"완료\",\n previewText: \"시사\",\n editText: \"편집하다\",\n startSurveyText: \"시작\",\n otherItemText: \"기타(설명)\",\n noneItemText: \"없음\",\n selectAllItemText: \"모두 선택\",\n progressText: \"페이지 {1} 중 {0}\",\n panelDynamicProgressText: \"{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}은 '참'이어야 합니다.\",\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_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"ko\"] = koreanStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"ko\"] = \"한국어\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/latvian.ts\":\n/*!*************************************!*\\\n !*** ./src/localization/latvian.ts ***!\n \\*************************************/\n/*! exports provided: latvianSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"latvianSurveyStrings\", function() { return latvianSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar latvianSurveyStrings = {\n pagePrevText: \"Atpakaļ\",\n pageNextText: \"Tālāk\",\n completeText: \"Pabeigt\",\n previewText: \"Priekšskatījums\",\n editText: \"Rediģēt\",\n startSurveyText: \"Sākt\",\n otherItemText: \"Cits (lūdzu, aprakstiet!)\",\n noneItemText: \"Nav\",\n selectAllItemText: \"Izvēlēties visus\",\n progressText: \"Lappuse {0} no {1}\",\n panelDynamicProgressText: \"Ierakstīt {0} no {1}\",\n questionsProgressText: \"Atbildēja uz jautājumiem {0} / {1}\",\n emptySurvey: \"Nav neviena jautājuma.\",\n completingSurvey: \"Pateicamies Jums par anketas aizpildīšanu!\",\n completingSurveyBefore: \"Mūsu ieraksti liecina, ka jūs jau esat aizpildījis šo aptauju.\",\n loadingSurvey: \"Ielāde no servera...\",\n optionsCaption: \"Izvēlēties...\",\n value: \"value\",\n requiredError: \"Lūdzu, atbildiet uz jautājumu!\",\n requiredErrorInPanel: \"Lūdzu, atbildiet uz vismaz vienu jautājumu.\",\n requiredInAllRowsError: \"Lūdzu, atbildiet uz jautājumiem visās rindās.\",\n numericError: \"Atbildei ir jābūt skaitlim.\",\n textMinLength: \"Lūdzu, ievadiet vismaz {0} simbolus.\",\n textMaxLength: \"Lūdzu, ievadiet mazāk nekā {0} rakstzīmes.\",\n textMinMaxLength: \"Lūdzu, ievadiet vairāk nekā {0} rakstzīmes un mazāk nekā {1} rakstzīmes.\",\n minRowCountError: \"Lūdzu, aizpildiet vismaz {0} rindas.\",\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 invalidExpression: \"Izteicienam: {0} jāatgriež “true”.\",\n urlRequestError: \"Pieprasījumā tika atgriezta kļūda “{0}”. {1}\",\n urlGetChoicesError: \"Pieprasījums atgrieza tukšus datus vai rekvizīts “path” ir nepareizs\",\n exceedMaxSize: \"Faila lielums nedrīkst pārsniegt {0}.\",\n otherRequiredError: \"Lūdzu, ievadiet datus laukā 'Cits'\",\n uploadingFile: \"Jūsu fails tiek augšupielādēts. Lūdzu, uzgaidiet vairākas sekundes un mēģiniet vēlreiz.\",\n loadingFile: \"Notiek ielāde ...\",\n chooseFile: \"Izvēlieties failus ...\",\n noFileChosen: \"Nav izvēlēts neviens fails\",\n confirmDelete: \"Vai vēlaties izdzēst ierakstu?\",\n keyDuplicationError: \"Šai vērtībai jābūt unikālai.\",\n addColumn: \"Pievienot kolonnu\",\n addRow: \"Pievienot rindu\",\n removeRow: \"Noņemt\",\n addPanel: \"Pievieno jaunu\",\n removePanel: \"Noņemt\",\n choices_Item: \"lieta\",\n matrix_column: \"Sleja\",\n matrix_row: \"Rinda\",\n savingData: \"Rezultāti tiek saglabāti serverī ...\",\n savingDataError: \"Radās kļūda, un mēs nevarējām saglabāt rezultātus.\",\n savingDataSuccess: \"Rezultāti tika veiksmīgi saglabāti!\",\n saveAgainButton: \"Mēģini vēlreiz\",\n timerMin: \"min\",\n timerSec: \"sek\",\n timerSpentAll: \"Šajā lapā esat iztērējis {0} un kopā {1}.\",\n timerSpentPage: \"Šajā lapā esat iztērējis {0}.\",\n timerSpentSurvey: \"Kopā esat iztērējis {0}.\",\n timerLimitAll: \"Šajā lapā esat iztērējis {0} no {1} un kopā {2} no {3}.\",\n timerLimitPage: \"Šajā lapā esat iztērējis {0} no {1}.\",\n timerLimitSurvey: \"Kopā esat iztērējis {0} no {1}.\",\n cleanCaption: \"Tīrs\",\n clearCaption: \"Skaidrs\",\n chooseFileCaption: \"Izvēlēties failu\",\n removeFileCaption: \"Noņemiet šo failu\",\n booleanCheckedLabel: \"Jā\",\n booleanUncheckedLabel: \"Nē\",\n confirmRemoveFile: \"Vai tiešām vēlaties noņemt šo failu: {0}?\",\n confirmRemoveAllFiles: \"Vai tiešām vēlaties noņemt visus failus?\",\n questionTitlePatternText: \"Jautājuma nosaukums\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"lv\"] = latvianSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"lv\"] = \"latviešu\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/lithuanian.ts\":\n/*!****************************************!*\\\n !*** ./src/localization/lithuanian.ts ***!\n \\****************************************/\n/*! exports provided: lithuaniaSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lithuaniaSurveyStrings\", function() { return lithuaniaSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar lithuaniaSurveyStrings = {\n pagePrevText: \"Atgal\",\n pageNextText: \"Toliau\",\n completeText: \"Baigti\",\n previewText: \"Peržiūra\",\n editText: \"Redaguoti\",\n startSurveyText: \"Pradėti\",\n otherItemText: \"Kita (įvesti)\",\n noneItemText: \"Nėra\",\n selectAllItemText: \"Pasirinkti visus\",\n progressText: \"Puslapis {0} iš {1}\",\n panelDynamicProgressText: \"Įrašyti {0} iš {1}\",\n questionsProgressText: \"Atsakė į {0} / {1} klausimus\",\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 noFileChosen: \"Nepasirinktas joks failas\",\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 chooseFileCaption: \"Pasirinkti failą\",\n removeFileCaption: \"Ištrinti šį failą\",\n booleanCheckedLabel: \"Taip\",\n booleanUncheckedLabel: \"Ne\",\n confirmRemoveFile: \"Ar tikrai norite pašalinti šį failą: {0}?\",\n confirmRemoveAllFiles: \"Ar tikrai norite pašalinti visus failus?\",\n questionTitlePatternText: \"Klausimo pavadinimas\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"lt\"] = lithuaniaSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"lt\"] = \"lietuvių\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/macedonian.ts\":\n/*!****************************************!*\\\n !*** ./src/localization/macedonian.ts ***!\n \\****************************************/\n/*! exports provided: macedonianSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"macedonianSurveyStrings\", function() { return macedonianSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar macedonianSurveyStrings = {\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 requiredErrorInPanel: \"Ве молам, одговорете барем на едно прашање.\",\n requiredInAllRowsError: \"Ве молиме, одговорете на прашања во сите редови.\",\n numericError: \"Вредноста треба да биде нумеричка.\",\n minError: \"Вредноста не треба да биде помала од {0}\",\n maxError: \"Вредноста не треба да биде поголема од {0}\",\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 emptyRowsText: \"Нема редови.\",\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 modalCancelButtonText: \"Откажи\",\n modalApplyButtonText: \"Аплицирај\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"mk\"] = macedonianSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"mk\"] = \"Македонски\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/norwegian.ts\":\n/*!***************************************!*\\\n !*** ./src/localization/norwegian.ts ***!\n \\***************************************/\n/*! exports provided: norwegianSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"norwegianSurveyStrings\", function() { return norwegianSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar norwegianSurveyStrings = {\n pagePrevText: \"Forrige\",\n pageNextText: \"Neste\",\n completeText: \"Fullfør\",\n previewText: \"Forhåndsvisning\",\n editText: \"Redigere\",\n startSurveyText: \"Start\",\n otherItemText: \"Annet (beskriv)\",\n noneItemText: \"Ingen\",\n selectAllItemText: \"Velg alle\",\n progressText: \"Side {0} av {1}\",\n panelDynamicProgressText: \"Ta opp {0} av {1}\",\n questionsProgressText: \"Besvarte {0} / {1} spørsmål\",\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 invalidExpression: \"Uttrykket: {0} skal returnere 'sant'.\",\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 loadingFile: \"Laster inn ...\",\n chooseFile: \"Velg fil (er) ...\",\n noFileChosen: \"Ingen fil valgt\",\n confirmDelete: \"Ønsker du å slette posten?\",\n keyDuplicationError: \"Denne verdien skal være unik.\",\n addColumn: \"Legg til kolonne\",\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 clearCaption: \"Klar\",\n chooseFileCaption: \"Velg Fil\",\n removeFileCaption: \"Fjern denne filen\",\n booleanCheckedLabel: \"Ja\",\n booleanUncheckedLabel: \"Nei\",\n confirmRemoveFile: \"Er du sikker på at du vil fjerne denne filen: {0}?\",\n confirmRemoveAllFiles: \"Er du sikker på at du vil fjerne alle filene?\",\n questionTitlePatternText: \"Spørsmålstittel\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"no\"] = norwegianSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"no\"] = \"norsk\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/persian.ts\":\n/*!*************************************!*\\\n !*** ./src/localization/persian.ts ***!\n \\*************************************/\n/*! exports provided: persianSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"persianSurveyStrings\", function() { return persianSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\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 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: \"درخواست مسیری خالی بازگشت داده یا مسیر درست تنظیم نشده\",\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_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"fa\"] = persianSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"fa\"] = \"فارْسِى\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/polish.ts\":\n/*!************************************!*\\\n !*** ./src/localization/polish.ts ***!\n \\************************************/\n/*! exports provided: polishSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"polishSurveyStrings\", function() { return polishSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar polishSurveyStrings = {\n pagePrevText: \"Wstecz\",\n pageNextText: \"Dalej\",\n completeText: \"Gotowe\",\n previewText: \"Premiera\",\n editText: \"Edycja\",\n startSurveyText: \"Start\",\n otherItemText: \"Inna odpowiedź (wpisz)\",\n noneItemText: \"Brak\",\n selectAllItemText: \"Wybierz wszystkie\",\n progressText: \"Strona {0} z {1}\",\n panelDynamicProgressText: \"Zapis {0} z {1}\",\n questionsProgressText: \"Odpowiedzi na {0}/{1} pytania\",\n emptySurvey: \"Nie ma widocznych pytań.\",\n completingSurvey: \"Dziękujemy za wypełnienie ankiety!\",\n completingSurveyBefore: \"Z naszych zapisów wynika, że wypełniłeś już tę ankietę.\",\n loadingSurvey: \"Trwa wczytywanie ankiety...\",\n optionsCaption: \"Wybierz...\",\n value: \"Wartość\",\n requiredError: \"Proszę odpowiedzieć na to pytanie.\",\n requiredErrorInPanel: \"Proszę odpowiedzieć na co najmniej jedno 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 invalidExpression: \"Wyrażenie: {0} powinno wracać 'prawdziwe'.\",\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 loadingFile: \"Ładowanie...\",\n chooseFile: \"Wybierz plik(i)...\",\n noFileChosen: \"Nie wybrano żadnego pliku\",\n confirmDelete: \"Chcesz skasować nagranie?\",\n keyDuplicationError: \"Ta wartość powinna być wyjątkowa.\",\n addColumn: \"Dodaj kolumnę\",\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 sumie {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 clearCaption: \"Jasne\",\n chooseFileCaption: \"Wybierz plik\",\n removeFileCaption: \"Usuń ten plik\",\n booleanCheckedLabel: \"Tak\",\n booleanUncheckedLabel: \"Nie\",\n confirmRemoveFile: \"Jesteś pewien, że chcesz usunąć ten plik: {0}?\",\n confirmRemoveAllFiles: \"Jesteś pewien, że chcesz usunąć wszystkie pliki?\",\n questionTitlePatternText: \"Tytuł pytania\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"pl\"] = polishSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"pl\"] = \"polski\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/portuguese-br.ts\":\n/*!*******************************************!*\\\n !*** ./src/localization/portuguese-br.ts ***!\n \\*******************************************/\n/*! exports provided: portugueseBrSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"portugueseBrSurveyStrings\", function() { return portugueseBrSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar portugueseBrSurveyStrings = {\n pagePrevText: \"Anterior\",\n pageNextText: \"Próximo\",\n completeText: \"Finalizar\",\n previewText: \"Pré-visualização\",\n editText: \"Editar\",\n startSurveyText: \"Começar\",\n otherItemText: \"Outros (descrever)\",\n noneItemText: \"Nenhum\",\n selectAllItemText: \"Selecionar Todos\",\n progressText: \"Página {0} de {1}\",\n panelDynamicProgressText: \"Registro {0} de {1}\",\n questionsProgressText: \"Respostas {0}/{1} perguntas\",\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 noFileChosen: \"Nenhum arquivo escolhido\",\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 chooseFileCaption: \"Escolher arquivo\",\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_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"pt-br\"] = portugueseBrSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"pt-br\"] = \"português brasileiro\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/portuguese.ts\":\n/*!****************************************!*\\\n !*** ./src/localization/portuguese.ts ***!\n \\****************************************/\n/*! exports provided: portugueseSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"portugueseSurveyStrings\", function() { return portugueseSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar portugueseSurveyStrings = {\n pagePrevText: \"Anterior\",\n pageNextText: \"Próximo\",\n completeText: \"Finalizar\",\n previewText: \"Pré-visualização\",\n editText: \"Editar\",\n startSurveyText: \"Começar\",\n otherItemText: \"Outros (descrever)\",\n noneItemText: \"Nenhum\",\n selectAllItemText: \"Selecionar Todos\",\n progressText: \"Página {0} de {1}\",\n panelDynamicProgressText: \"Registo {0} de {1}\",\n questionsProgressText: \"Respostas {0}/{1} perguntas\",\n emptySurvey: \"Não há página visível ou pergunta no questionário.\",\n completingSurvey: \"Obrigado por finalizar o questionário!\",\n completingSurveyBefore: \"Os nossos registos mostram que já finalizou o questionário.\",\n loadingSurvey: \"O questionário está a carregar...\",\n optionsCaption: \"Selecione...\",\n value: \"valor\",\n requiredError: \"Por favor, responda à pergunta.\",\n requiredErrorInPanel: \"Por favor, responda pelo menos a uma pergunta.\",\n requiredInAllRowsError: \"Por favor, responda às 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 no máximo {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, insira um e-mail válido.\",\n invalidExpression: \"A expressão: {0} deve retornar 'verdadeiro'.\",\n urlRequestError: \"O pedido retornou o erro '{0}'. {1}\",\n urlGetChoicesError: \"O pedido não retornou dados ou o 'caminho' do pedido não está correto\",\n exceedMaxSize: \"O tamanho do arquivo não deve exceder {0}.\",\n otherRequiredError: \"Por favor, insira o outro valor.\",\n uploadingFile: \"O seu ficheiro está a carregar. Por favor, aguarde alguns segundos e tente novamente.\",\n loadingFile: \"A carregar...\",\n chooseFile: \"Selecione o(s) arquivo(s)...\",\n noFileChosen: \"Nenhum ficheiro escolhido\",\n confirmDelete: \"Tem a certeza que deseja apagar?\",\n keyDuplicationError: \"Este 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 estão a ser guardados no servidor...\",\n savingDataError: \"Ocorreu um erro e não foi possível guardar os resultados.\",\n savingDataSuccess: \"Os resultados foram guardados 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 chooseFileCaption: \"Escolher ficheiro\",\n removeFileCaption: \"Remover este ficheiro\",\n booleanCheckedLabel: \"Sim\",\n booleanUncheckedLabel: \"Não\",\n confirmRemoveFile: \"Tem a certeza que deseja remover este ficheiro: {0}?\",\n confirmRemoveAllFiles: \"Tem a certeza que deseja remover todos os ficheiros?\",\n questionTitlePatternText: \"Título da questão\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"pt\"] = portugueseSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"pt\"] = \"português\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/romanian.ts\":\n/*!**************************************!*\\\n !*** ./src/localization/romanian.ts ***!\n \\**************************************/\n/*! exports provided: romanianSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"romanianSurveyStrings\", function() { return romanianSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar romanianSurveyStrings = {\n pagePrevText: \"Precedent\",\n pageNextText: \"Următor\",\n completeText: \"Finalizare\",\n previewText: \"previzualizare\",\n editText: \"Editați\",\n startSurveyText: \"start\",\n otherItemText: \"Altul(precizaţi)\",\n noneItemText: \"Nici unul\",\n selectAllItemText: \"Selectează tot\",\n progressText: \"Pagina {0} din {1}\",\n panelDynamicProgressText: \"Înregistrare {0} din {1}\",\n questionsProgressText: \"Răspunsuri la {0} / {1} întrebări\",\n emptySurvey: \"Nu sunt întrebări pentru acest chestionar\",\n completingSurvey: \"Vă mulţumim pentru timpul acordat!\",\n completingSurveyBefore: \"Din înregistrările noastre reiese că ați completat deja acest chestionar.\",\n loadingSurvey: \"Chestionarul se încarcă...\",\n optionsCaption: \"Alegeţi...\",\n value: \"valoare\",\n requiredError: \"Răspunsul la această întrebare este obligatoriu.\",\n requiredErrorInPanel: \"Vă rugăm să răspundeți la cel puțin o întrebare.\",\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 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 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 invalidExpression: \"Expresia: {0} ar trebui să returneze „adevărat”.\",\n urlRequestError: \"Request-ul a returnat eroarea '{0}'. {1}\",\n urlGetChoicesError: \"Request-ul nu a returnat date sau proprietatea 'path' este incorectă\",\n exceedMaxSize: \"Dimensiunea fişierului nu trebuie să depăşească {0}.\",\n otherRequiredError: \"Trebuie să completați câmpul 'Altul'.\",\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 loadingFile: \"Se încarcă...\",\n chooseFile: \"Alege fisierele...\",\n noFileChosen: \"Niciun fișier ales\",\n confirmDelete: \"Sunteți sigur că doriți să ștergeți înregistrarea?\",\n keyDuplicationError: \"Valoarea trebuie să fie unică.\",\n addColumn: \"Adăugați coloană\",\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 cleanCaption: \"Curat\",\n clearCaption: \"clar\",\n chooseFileCaption: \"Alege fișierul\",\n removeFileCaption: \"Eliminați acest fișier\",\n booleanCheckedLabel: \"da\",\n booleanUncheckedLabel: \"Nu\",\n confirmRemoveFile: \"Sigur doriți să eliminați acest fișier: {0}?\",\n confirmRemoveAllFiles: \"Sigur doriți să eliminați toate fișierele?\",\n questionTitlePatternText: \"Titlul intrebarii\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"ro\"] = romanianSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"ro\"] = \"română\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/russian.ts\":\n/*!*************************************!*\\\n !*** ./src/localization/russian.ts ***!\n \\*************************************/\n/*! exports provided: russianSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"russianSurveyStrings\", function() { return russianSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar russianSurveyStrings = {\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 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 chooseFileCaption: \"Выберите файл\",\n removeFileCaption: \"Удалить файл\",\n booleanCheckedLabel: \"Да\",\n booleanUncheckedLabel: \"Нет\",\n confirmRemoveFile: \"Вы уверены, что хотите удалить этот файл: {0}?\",\n confirmRemoveAllFiles: \"Вы уверены, что хотите удалить все файлы?\",\n questionTitlePatternText: \"Название вопроса\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"ru\"] = russianSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"ru\"] = \"русский\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/serbian.ts\":\n/*!*************************************!*\\\n !*** ./src/localization/serbian.ts ***!\n \\*************************************/\n/*! exports provided: serbianStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"serbianStrings\", function() { return serbianStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n//Uncomment this line on creating a translation file\n\nvar serbianStrings = {\n pagePrevText: \"Nazad\",\n pageNextText: \"Dalje\",\n completeText: \"Završi\",\n previewText: \"Pregledaj\",\n editText: \"Izmeni\",\n startSurveyText: \"Započni\",\n otherItemText: \"Drugo (upiši)\",\n noneItemText: \"Ništa\",\n selectAllItemText: \"Izaberi sve\",\n progressText: \"Stranica {0} od {1}\",\n panelDynamicProgressText: \"Upis {0} od {1}\",\n questionsProgressText: \"Odgovoreno na {0}/{1} pitanja\",\n emptySurvey: \"Nema vidljivih stranica ili pitanja u anketi.\",\n completingSurvey: \"Hvala na popunjavanju ankete!\",\n completingSurveyBefore: \"Prema našim podacima, već ste popunili ovu anketu.\",\n loadingSurvey: \"Učitavam anketu...\",\n optionsCaption: \"Izaberi...\",\n value: \"vrednost\",\n requiredError: \"Molimo odgovorite na ovo pitanje.\",\n requiredErrorInPanel: \"Molimo odgovorite na bar jedno pitanje.\",\n requiredInAllRowsError: \"Molimo odgovorite na pitanja u svim redovima.\",\n numericError: \"Vrednost bi trebalo da bude numerička.\",\n minError: \"Vrednost ne bi trebalo da bude manja od {0}\",\n maxError: \"Vrednost ne bi trebalo da bude veća od {0}\",\n textMinLength: \"Molimo unesite bar {0} znak(ov)a.\",\n textMaxLength: \"Molimo unesite najviše {0} znak(ov)a.\",\n textMinMaxLength: \"Molimo unesite najmanje {0} i ne više od {1} znak(ov)a.\",\n minRowCountError: \"Molimo popunite najmanje {0} red(ova).\",\n minSelectError: \"Molimo izaberite najmanje {0} opcija/e.\",\n maxSelectError: \"Molimo izaberite najviše {0} opcija/e.\",\n numericMinMax: \"'{0}' bi trebalo da bude najmanje {1} i najviše {2}\",\n numericMin: \"'{0}' bi trebalo da bude najmanje {1}\",\n numericMax: \"'{0}' bi trebalo da bude najviše {1}\",\n invalidEmail: \"Molimo unesite ispravnu e-mail adresu.\",\n // vratiti \"true\" ?\n invalidExpression: \"Izraz: {0} bi trebalo da bude tačan.\",\n urlRequestError: \"Zahtev je naišao na grešku '{0}'. {1}\",\n urlGetChoicesError: \"Zahtev nije pronašao podatke, ili je putanja netačna\",\n exceedMaxSize: \"Veličina fajla ne bi trebalo da prelazi {0}.\",\n otherRequiredError: \"Molimo unesite drugu vrednost.\",\n uploadingFile: \"Fajl se šalje. Molimo sačekajte neko vreme i pokušajte ponovo.\",\n loadingFile: \"Učitavanje...\",\n chooseFile: \"Izaberite fajlove...\",\n noFileChosen: \"Nije izabran nijedan fajl\",\n confirmDelete: \"Da li želite da izbrišete unos?\",\n keyDuplicationError: \"Ova vrednost treba da bude jedinstvena.\",\n addColumn: \"Dodaj kolonu\",\n addRow: \"Dodaj red\",\n removeRow: \"Ukloni\",\n emptyRowsText: \"Nema redova.\",\n addPanel: \"Dodaj novo\",\n removePanel: \"Ukloni\",\n choices_Item: \"stavka\",\n matrix_column: \"Kolona\",\n matrix_row: \"Red\",\n multipletext_itemname: \"tekst\",\n savingData: \"U toku je čuvanje podataka na serveru...\",\n savingDataError: \"Došlo je do greške i rezultati nisu sačuvani.\",\n savingDataSuccess: \"Rezultati su uspešno sačuvani!\",\n saveAgainButton: \"Pokušajte ponovo\",\n timerMin: \"min\",\n timerSec: \"sek\",\n timerSpentAll: \"Proveli ste {0} na ovoj stranici i {1} ukupno.\",\n timerSpentPage: \"Proveli ste {0} na ovoj stranici.\",\n timerSpentSurvey: \"Proveli ste {0} ukupno.\",\n timerLimitAll: \"Proveli ste {0} od {1} na ovoj stranici i {2} od {3} ukupno.\",\n timerLimitPage: \"Proveli ste {0} od {1} na ovoj stranici.\",\n timerLimitSurvey: \"Proveli ste {0} od {1} ukupno.\",\n cleanCaption: \"Očisti\",\n clearCaption: \"Poništi\",\n chooseFileCaption: \"Izaberi fajl\",\n removeFileCaption: \"Ukloni ovaj fajl\",\n booleanCheckedLabel: \"Da\",\n booleanUncheckedLabel: \"Ne\",\n confirmRemoveFile: \"Da li ste sigurni da želite da uklonite ovaj fajl: {0}?\",\n confirmRemoveAllFiles: \"Da li ste sigurni da želite da uklonite sve fajlove?\",\n questionTitlePatternText: \"Naslov pitanja\",\n modalCancelButtonText: \"Otkaži\",\n modalApplyButtonText: \"Primeni\",\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_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"rs\"] = serbianStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"rs\"] = \"Srpski\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/simplified-chinese.ts\":\n/*!************************************************!*\\\n !*** ./src/localization/simplified-chinese.ts ***!\n \\************************************************/\n/*! exports provided: simplifiedChineseSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"simplifiedChineseSurveyStrings\", function() { return simplifiedChineseSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar simplifiedChineseSurveyStrings = {\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} of {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 minError: \"该值不能小于 {0}\",\n maxError: \"该值不能大于 {0}\",\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 emptyRowsText: \"无内容\",\n addPanel: \"新添\",\n removePanel: \"删除\",\n choices_Item: \"选项\",\n matrix_column: \"列\",\n matrix_row: \"行\",\n multipletext_itemname: \"文本\",\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 modalCancelButtonText: \"取消\",\n modalApplyButtonText: \"确定\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"zh-cn\"] = simplifiedChineseSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"zh-cn\"] = \"简体中文\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/spanish.ts\":\n/*!*************************************!*\\\n !*** ./src/localization/spanish.ts ***!\n \\*************************************/\n/*! exports provided: spanishSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"spanishSurveyStrings\", function() { return spanishSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar spanishSurveyStrings = {\n pagePrevText: \"Anterior\",\n pageNextText: \"Siguiente\",\n completeText: \"Completar\",\n previewText: \"Vista previa\",\n editText: \"Edita\",\n startSurveyText: \"Comienza\",\n otherItemText: \"Otro (describa)\",\n noneItemText: \"Ninguno\",\n selectAllItemText: \"Seleccionar todo\",\n progressText: \"Página {0} de {1}\",\n panelDynamicProgressText: \"Registro {0} de {1}\",\n questionsProgressText: \"Respondió a {0}/{1} preguntas\",\n emptySurvey: \"No hay página visible o pregunta en la encuesta.\",\n completingSurvey: \"Gracias por completar la encuesta!\",\n completingSurveyBefore: \"Nuestros registros muestran que ya ha completado esta encuesta.\",\n loadingSurvey: \"La encuesta está cargando...\",\n optionsCaption: \"Seleccione...\",\n value: \"valor\",\n requiredError: \"Por favor conteste la pregunta.\",\n requiredErrorInPanel: \"Por favor, responda al menos una 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 invalidExpression: \"La expresión: {0} debería devolver 'verdadero'.\",\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 loadingFile: \"Cargando...\",\n chooseFile: \"Elija archivo(s)...\",\n noFileChosen: \"No se ha elegido ningún archivo\",\n confirmDelete: \"¿Quieres borrar el registro?\",\n keyDuplicationError: \"Este valor debe ser único.\",\n addColumn: \"Añadir columna\",\n addRow: \"Agregue una hilera\",\n removeRow: \"Eliminar una hilera\",\n addPanel: \"Añadir nuevo\",\n removePanel: \"Retire\",\n choices_Item: \"artículo\",\n matrix_column: \"Columna\",\n matrix_row: \"Hilera\",\n savingData: \"Los resultados se están guardando en el servidor...\",\n savingDataError: \"Los resultados se están guardando en el servidor...\",\n savingDataSuccess: \"¡Los resultados se guardaron con éxito!\",\n saveAgainButton: \"Inténtalo de nuevo.\",\n timerMin: \"min\",\n timerSec: \"sec\",\n timerSpentAll: \"Has gastado {0} en esta página y {1} en total.\",\n timerSpentPage: \"Usted ha pasado {0} en esta página.\",\n timerSpentSurvey: \"Has gastado en total.\",\n timerLimitAll: \"Has gastado {0} de {1} en esta página y {2} de {3} en total.\",\n timerLimitPage: \"Has gastado {0} de {1} en esta página.\",\n timerLimitSurvey: \"Usted ha gastado {0} de {1} en total.\",\n cleanCaption: \"Limpia\",\n clearCaption: \"Despejen\",\n chooseFileCaption: \"Elija el archivo\",\n removeFileCaption: \"Elimina este archivo\",\n booleanCheckedLabel: \"Sí\",\n booleanUncheckedLabel: \"No\",\n confirmRemoveFile: \"¿Estás seguro de que quieres eliminar este archivo: {0}?\",\n confirmRemoveAllFiles: \"¿Estás seguro de que quieres eliminar todos los archivos?\",\n questionTitlePatternText: \"Título de la pregunta\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"es\"] = spanishSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"es\"] = \"español\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/swahili.ts\":\n/*!*************************************!*\\\n !*** ./src/localization/swahili.ts ***!\n \\*************************************/\n/*! exports provided: swahiliStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"swahiliStrings\", function() { return swahiliStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\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_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"sw\"] = swahiliStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"sw\"] = \"swahili\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/swedish.ts\":\n/*!*************************************!*\\\n !*** ./src/localization/swedish.ts ***!\n \\*************************************/\n/*! exports provided: swedishSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"swedishSurveyStrings\", function() { return swedishSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n//Create by Mattias Asplund\n\nvar swedishSurveyStrings = {\n pagePrevText: \"Föregående\",\n pageNextText: \"Nästa\",\n completeText: \"Färdig\",\n previewText: \"Förhandsvisning\",\n editText: \"Redigera\",\n startSurveyText: \"Start\",\n otherItemText: \"Annat (beskriv)\",\n noneItemText: \"Ingen\",\n selectAllItemText: \"Välj alla\",\n progressText: \"Sida {0} av {1}\",\n panelDynamicProgressText: \"Spela in {0} av {1}\",\n questionsProgressText: \"Besvarade {0} / {1} frågor\",\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 completingSurveyBefore: \"Våra register visar att du redan har slutfört denna undersökning.\",\n loadingSurvey: \"Enkäten laddas...\",\n optionsCaption: \"Välj...\",\n value: \"värde\",\n requiredError: \"Var vänlig besvara frågan.\",\n requiredErrorInPanel: \"Vänligen svara på minst en fråga.\",\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 textMaxLength: \"Ange färre än {0} tecken.\",\n textMinMaxLength: \"Ange mer än {0} och färre än {1} 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 invalidExpression: \"Uttrycket: {0} ska returnera 'true'.\",\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 loadingFile: \"Läser in...\",\n chooseFile: \"Välj fil (er) ...\",\n noFileChosen: \"Ingen fil vald\",\n confirmDelete: \"Vill du radera posten?\",\n keyDuplicationError: \"Detta värde ska vara unikt.\",\n addColumn: \"Lägg till kolumn\",\n addRow: \"Lägg till rad\",\n removeRow: \"Ta bort\",\n addPanel: \"Lägg till ny\",\n removePanel: \"Ta bort\",\n choices_Item: \"Artikel\",\n matrix_column: \"Kolumn\",\n matrix_row: \"Rad\",\n savingData: \"Resultaten sparas på servern ...\",\n savingDataError: \"Ett fel inträffade och vi kunde inte spara resultaten.\",\n savingDataSuccess: \"Resultaten sparades framgångsrikt!\",\n saveAgainButton: \"Försök igen\",\n timerMin: \"min\",\n timerSec: \"sek\",\n timerSpentAll: \"Du har spenderat {0} på den här sidan och {1} totalt.\",\n timerSpentPage: \"Du har spenderat {0} på den här sidan.\",\n timerSpentSurvey: \"Du har spenderat {0} totalt.\",\n timerLimitAll: \"Du har spenderat {0} av {1} på den här sidan och {2} av {3} totalt.\",\n timerLimitPage: \"Du har spenderat {0} av {1} på den här sidan.\",\n timerLimitSurvey: \"Du har spenderat {0} av {1} totalt.\",\n cleanCaption: \"Rena\",\n clearCaption: \"Klar\",\n chooseFileCaption: \"Välj FIL\",\n removeFileCaption: \"Ta bort den här filen\",\n booleanCheckedLabel: \"Ja\",\n booleanUncheckedLabel: \"Nej\",\n confirmRemoveFile: \"Är du säker på att du vill ta bort den här filen: {0}?\",\n confirmRemoveAllFiles: \"Är du säker på att du vill ta bort alla filer?\",\n questionTitlePatternText: \"Frågetitel\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"sv\"] = swedishSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"sv\"] = \"svenska\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/tajik.ts\":\n/*!***********************************!*\\\n !*** ./src/localization/tajik.ts ***!\n \\***********************************/\n/*! exports provided: tajikSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"tajikSurveyStrings\", function() { return tajikSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\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_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"tg\"] = tajikSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"tg\"] = \"тоҷикӣ\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/thai.ts\":\n/*!**********************************!*\\\n !*** ./src/localization/thai.ts ***!\n \\**********************************/\n/*! exports provided: thaiStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"thaiStrings\", function() { return thaiStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n//Created by Padet Taweekunkan\n\nvar thaiStrings = {\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: \"ไม่มีหน้าเพจที่มองเห็น หรือ คำถามใน 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_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"th\"] = thaiStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"th\"] = \"ไทย\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/traditional-chinese.ts\":\n/*!*************************************************!*\\\n !*** ./src/localization/traditional-chinese.ts ***!\n \\*************************************************/\n/*! exports provided: traditionalChineseSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"traditionalChineseSurveyStrings\", function() { return traditionalChineseSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\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_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"zh-tw\"] = traditionalChineseSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"zh-tw\"] = \"繁體中文\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/turkish.ts\":\n/*!*************************************!*\\\n !*** ./src/localization/turkish.ts ***!\n \\*************************************/\n/*! exports provided: turkishSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"turkishSurveyStrings\", function() { return turkishSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar turkishSurveyStrings = {\n pagePrevText: \"Geri\",\n pageNextText: \"İleri\",\n completeText: \"Anketi Tamamla\",\n previewText: \"Ön izleme\",\n editText: \"Düzenle\",\n startSurveyText: \"Başlat\",\n otherItemText: \"Diğer (açıklayınız)\",\n noneItemText: \"Yok\",\n selectAllItemText: \"Hepsini seç\",\n progressText: \"Sayfa {0} / {1}\",\n panelDynamicProgressText: \"Kayıt {0} / {1}\",\n questionsProgressText: \"Soruları cevapladı {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 completingSurveyBefore: \"Kayıtlarımız, bu anketi zaten tamamladığınızı gösteriyor.\",\n loadingSurvey: \"Anket sunucudan yükleniyor ...\",\n optionsCaption: \"Seçiniz ...\",\n value: \"değer\",\n requiredError: \"Lütfen soruya cevap veriniz\",\n requiredErrorInPanel: \"Lütfen en az bir soruyu yanıtlayın.\",\n requiredInAllRowsError: \"Lütfen tüm satırlardaki soruları cevaplayınız.\",\n numericError: \"Girilen değer numerik olmalıdır\",\n textMinLength: \"En az {0} sembol giriniz.\",\n textMaxLength: \"Lütfen {0} karakterden az girin.\",\n textMinMaxLength: \"Lütfen {0} ’den fazla ve {1} ’den az karakter girin.\",\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 invalidExpression: \"İfade: {0} 'true' döndürmelidir.\",\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 loadingFile: \"Yükleniyor...\",\n chooseFile: \"Dosyaları seçin ...\",\n noFileChosen: \"Dosya seçili değil\",\n confirmDelete: \"Kaydı silmek istiyor musunuz?\",\n keyDuplicationError: \"Bu değer benzersiz olmalıdır.\",\n addColumn: \"Sütun ekleyin\",\n addRow: \"Satır Ekle\",\n removeRow: \"Kaldır\",\n addPanel: \"Yeni ekle\",\n removePanel: \"Kaldırmak\",\n choices_Item: \"eşya\",\n matrix_column: \"Sütun\",\n matrix_row: \"Kürek çekmek\",\n savingData: \"Sonuçlar sunucuya kaydediliyor ...\",\n savingDataError: \"Bir hata oluştu ve sonuçları kaydedemedik.\",\n savingDataSuccess: \"Sonuçlar başarıyla kaydedildi!\",\n saveAgainButton: \"Tekrar deneyin\",\n timerMin: \"min\",\n timerSec: \"saniye\",\n timerSpentAll: \"Bu sayfada {0} ve toplamda {1} harcadınız.\",\n timerSpentPage: \"Bu sayfaya {0} harcadınız.\",\n timerSpentSurvey: \"Toplamda {0} harcadınız.\",\n timerLimitAll: \"Bu sayfaya {0} / {1} ve toplamda {2} / {3} harcadınız.\",\n timerLimitPage: \"Bu sayfaya {0} / {1} harcadınız.\",\n timerLimitSurvey: \"Toplamda {0} / {1} harcadınız.\",\n cleanCaption: \"Temiz\",\n clearCaption: \"Açık\",\n chooseFileCaption: \"Dosya seçin\",\n removeFileCaption: \"Bu dosyayı kaldır\",\n booleanCheckedLabel: \"Evet\",\n booleanUncheckedLabel: \"Hayır\",\n confirmRemoveFile: \"Bu dosyayı kaldırmak istediğinizden emin misiniz: {0}?\",\n confirmRemoveAllFiles: \"Tüm dosyaları kaldırmak istediğinizden emin misiniz?\",\n questionTitlePatternText: \"Soru başlığı\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"tr\"] = turkishSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"tr\"] = \"türkçe\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/ukrainian.ts\":\n/*!***************************************!*\\\n !*** ./src/localization/ukrainian.ts ***!\n \\***************************************/\n/*! exports provided: ukrainianSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ukrainianSurveyStrings\", function() { return ukrainianSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar ukrainianSurveyStrings = {\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 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 chooseFileCaption: \"Виберіть файл\",\n removeFileCaption: \"Видалити файл\",\n booleanCheckedLabel: \"Так\",\n booleanUncheckedLabel: \"Ні\",\n confirmRemoveFile: \"Ви впевнені, що хочете видалити цей файл: {0}?\",\n confirmRemoveAllFiles: \"Ви впевнені, що хочете видалити всі файли?\",\n questionTitlePatternText: \"Назва запитання\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"ua\"] = ukrainianSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"ua\"] = \"українська\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/vietnamese.ts\":\n/*!****************************************!*\\\n !*** ./src/localization/vietnamese.ts ***!\n \\****************************************/\n/*! exports provided: vietnameseSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"vietnameseSurveyStrings\", function() { return vietnameseSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n//Uncomment this line on creating a translation file\n\nvar vietnameseSurveyStrings = {\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: \"Chọn...\",\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_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"vi\"] = vietnameseSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"vi\"] = \"vietnamese\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/welsh.ts\":\n/*!***********************************!*\\\n !*** ./src/localization/welsh.ts ***!\n \\***********************************/\n/*! exports provided: welshSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"welshSurveyStrings\", function() { return welshSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar welshSurveyStrings = {\n pagePrevText: \"Blaenorol\",\n pageNextText: \"Nesaf\",\n completeText: \"Cwblhau\",\n previewText: \"Rhagolwg\",\n editText: \"Golygu\",\n startSurveyText: \"Dechrau\",\n otherItemText: \"Arall (disgrifiwch)\",\n noneItemText: \"Dim\",\n selectAllItemText: \"Dewis y Cyfan \",\n progressText: \"Tudalen {0} o {1}\",\n panelDynamicProgressText: \"Cofnod {0} o {1}\",\n questionsProgressText: \"Wedi ateb {0}/{1} cwestiwn\",\n emptySurvey: \"Does dim modd gweld tudalen na chwestiwn yn yr arolwg.\",\n completingSurvey: \"Diolch am lenwi’r holiadur!\",\n completingSurveyBefore: \"Rydych chi wedi llenwi’r arolwg hwn yn barod yn ôl ein cofnodion.\",\n loadingSurvey: \"Wrthi’n Llwytho’r Arolwg...\",\n optionsCaption: \"Dewiswch...\",\n value: \"gwerth\",\n requiredError: \"Atebwch y cwestiwn.\",\n requiredErrorInPanel: \"Atebwch o leiaf un cwestiwn.\",\n requiredInAllRowsError: \"Atebwch y cwestiynau ym mhob rhes.\",\n numericError: \"Dylai’r gwerth fod yn rhif.\",\n textMinLength: \"Rhowch o leiaf {0} nod.\",\n textMaxLength: \"Rhowch lai na {0} nod.\",\n textMinMaxLength: \"Rhowch o leiaf {0} nod ond dim mwy na {1}.\",\n minRowCountError: \"Llenwch o leiaf {0} rhes.\",\n minSelectError: \"Dewiswch o leiaf {0} amrywiolyn.\",\n maxSelectError: \"Peidiwch â dewis mwy na {0} amrywiolyn.\",\n numericMinMax: \"Dylai’r '{0}' fod yr un fath â {1} neu’n fwy, a’r fath â {2} neu’n llai\",\n numericMin: \"Dylai’r '{0}' fod yr un fath â {1} neu’n fwy\",\n numericMax: \"Dylai’r '{0}' fod yr un fath â {1} neu’n llai\",\n invalidEmail: \"Rhowch gyfeiriad e-bost dilys.\",\n invalidExpression: \"Dylai’r mynegiad {0} arwain at 'true'.\",\n urlRequestError: \"Roedd y cais wedi arwain at y gwall '{0}'. {1}\",\n urlGetChoicesError: \"Roedd y cais wedi arwain at ddata gwag neu mae priodwedd y ‘path’ yn anghywir \",\n exceedMaxSize: \"Ddylai’r ffeil ddim bod yn fwy na {0}.\",\n otherRequiredError: \"Rhowch y gwerth arall.\",\n uploadingFile: \"Mae eich ffeil wrthi’n llwytho i fyny. Arhoswch ychydig o eiliadau a rhoi cynnig arall arni.\",\n loadingFile: \"Wrthi’n llwytho...\",\n chooseFile: \"Dewiswch ffeil(iau)...\",\n noFileChosen: \"Heb ddewis ffeil \",\n confirmDelete: \"Ydych chi am ddileu’r cofnod?\",\n keyDuplicationError: \"Dylai’r gwerth hwn fod yn unigryw.\",\n addColumn: \"Ychwanegu colofn \",\n addRow: \"Ychwanegu rhes\",\n removeRow: \"Tynnu\",\n addPanel: \"Ychwanegu o’r newydd\",\n removePanel: \"Tynnu\",\n choices_Item: \"eitem\",\n matrix_column: \"Colofn\",\n matrix_row: \"Rhes\",\n savingData: \"Mae’r canlyniadau’n cael eu cadw ar y gweinydd...\",\n savingDataError: \"Roedd gwall a doedd dim modd cadw’r canlyniadau.\",\n savingDataSuccess: \"Wedi llwyddo i gadw’r canlyniadau!\",\n saveAgainButton: \"Rhowch gynnig arall arni\",\n timerMin: \"mun\",\n timerSec: \"eil\",\n timerSpentAll: \"Rydych chi wedi treulio {0} ar y dudalen hon a {1} gyda’i gilydd.\",\n timerSpentPage: \"Rydych chi wedi treulio {0} ar y dudalen hon.\",\n timerSpentSurvey: \"Rydych chi wedi treulio {0} gyda’i gilydd.\",\n timerLimitAll: \"Rydych chi wedi treulio {0} o {1} ar y dudalen hon a {2} o {3} gyda’i gilydd.\",\n timerLimitPage: \"Rydych chi wedi treulio {0} o {1} ar y dudalen hon.\",\n timerLimitSurvey: \"Rydych chi wedi treulio {0} o {1} gyda’i gilydd.\",\n cleanCaption: \"Glanhau\",\n clearCaption: \"Clirio\",\n chooseFileCaption: \"Dewiswch ffeil \",\n removeFileCaption: \"Tynnu’r ffeil hon \",\n booleanCheckedLabel: \"Iawn\",\n booleanUncheckedLabel: \"Na\",\n confirmRemoveFile: \"Ydych chi’n siŵr eich bod am dynnu’r ffeil hon: {0}?\",\n confirmRemoveAllFiles: \"Ydych chi’n siŵr eich bod am dynnu pob ffeil?\",\n questionTitlePatternText: \"Teitl y Cwestiwn \",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"cy\"] = welshSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"cy\"] = \"cymraeg\";\n\n\n/***/ }),\n\n/***/ \"./src/main.scss\":\n/*!***********************!*\\\n !*** ./src/main.scss ***!\n \\***********************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n// extracted by mini-css-extract-plugin\n\n/***/ }),\n\n/***/ \"./src/martixBase.ts\":\n/*!***************************!*\\\n !*** ./src/martixBase.ts ***!\n \\***************************/\n/*! exports provided: QuestionMatrixBaseModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixBaseModel\", function() { return QuestionMatrixBaseModel; });\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./conditions */ \"./src/conditions.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n/**\n * A Model for a matrix base question.\n */\nvar QuestionMatrixBaseModel = /** @class */ (function (_super) {\n __extends(QuestionMatrixBaseModel, _super);\n function QuestionMatrixBaseModel(name) {\n var _this = _super.call(this, name) || this;\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: false,\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: false,\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: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixBaseModel.prototype, \"visibleColumns\", {\n get: function () {\n return !!this.filteredColumns ? this.filteredColumns : this.columns;\n },\n enumerable: false,\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: false,\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: false,\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: false,\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: false,\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 !this.survey || !this.survey.areInvisibleElementsShowing;\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 && !_helpers__WEBPACK_IMPORTED_MODULE_4__[\"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.survey &&\n this.survey.isClearValueOnHidden &&\n (!!this.filteredColumns || !!this.filteredRows)) {\n this.clearIncorrectValues();\n }\n if (!!oldVisibleRows) {\n this.restoreNewVisibleRowsValues(oldVisibleRows);\n }\n this.clearGeneratedRows();\n if (hasColumnsChanged) {\n this.onColumnsChanged();\n }\n this.onRowsChanged();\n }\n return hasChanges;\n };\n QuestionMatrixBaseModel.prototype.clearGeneratedRows = function () {\n this.generatedVisibleRows = null;\n };\n QuestionMatrixBaseModel.prototype.runConditionsForRows = function (values, properties) {\n var showInvisibile = !!this.survey && this.survey.areInvisibleElementsShowing;\n var runner = !showInvisibile && !!this.rowsVisibleIf\n ? new _conditions__WEBPACK_IMPORTED_MODULE_3__[\"ConditionRunner\"](this.rowsVisibleIf)\n : null;\n this.filteredRows = [];\n var hasChanged = _itemvalue__WEBPACK_IMPORTED_MODULE_0__[\"ItemValue\"].runConditionsForItems(this.rows, this.filteredRows, runner, values, properties, !showInvisibile);\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 useColumnsExpression = !!this.survey && !this.survey.areInvisibleElementsShowing;\n var runner = useColumnsExpression && !!this.columnsVisibleIf\n ? new _conditions__WEBPACK_IMPORTED_MODULE_3__[\"ConditionRunner\"](this.columnsVisibleIf)\n : null;\n this.filteredColumns = [];\n var hasChanged = _itemvalue__WEBPACK_IMPORTED_MODULE_0__[\"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 (_itemvalue__WEBPACK_IMPORTED_MODULE_0__[\"ItemValue\"].getItemByValue(rows, key) &&\n _itemvalue__WEBPACK_IMPORTED_MODULE_0__[\"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 = this.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 (_helpers__WEBPACK_IMPORTED_MODULE_4__[\"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 = this.getUnbindValue(this.value);\n var isChanged = false;\n for (var key in val) {\n if (_itemvalue__WEBPACK_IMPORTED_MODULE_0__[\"ItemValue\"].getItemByValue(rows, key) &&\n !_itemvalue__WEBPACK_IMPORTED_MODULE_0__[\"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}(_question__WEBPACK_IMPORTED_MODULE_1__[\"Question\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"matrixbase\", [\n \"columnsVisibleIf:condition\",\n \"rowsVisibleIf:condition\",\n { name: \"showHeader:boolean\", default: true },\n], undefined, \"question\");\n\n\n/***/ }),\n\n/***/ \"./src/page.ts\":\n/*!*********************!*\\\n !*** ./src/page.ts ***!\n \\*********************/\n/*! exports provided: PageModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PageModel\", function() { return PageModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _panel__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./panel */ \"./src/panel.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\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 __extends(PageModel, _super);\n function PageModel(name) {\n if (name === void 0) { name = \"\"; }\n var _this = _super.call(this, name) || this;\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 _this.createLocalizableString(\"navigationTitle\", _this, true);\n _this.createLocalizableString(\"navigationDescription\", _this, true);\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: false,\n configurable: true\n });\n Object.defineProperty(PageModel.prototype, \"navigationTitle\", {\n /**\n * Use this property to show title in navigation buttons. If the value is empty then page name is used.\n * @see survey.progressBarType\n */\n get: function () {\n return this.getLocalizableStringText(\"navigationTitle\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"navigationTitle\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PageModel.prototype, \"locNavigationTitle\", {\n get: function () {\n return this.getLocalizableString(\"navigationTitle\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PageModel.prototype, \"navigationDescription\", {\n get: function () {\n return this.getLocalizableStringText(\"navigationDescription\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"navigationDescription\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PageModel.prototype, \"locNavigationDescription\", {\n get: function () {\n return this.getLocalizableString(\"navigationDescription\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PageModel.prototype, \"passed\", {\n get: function () {\n return this.getPropertyValue(\"passed\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"passed\", val);\n },\n enumerable: false,\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: false,\n configurable: true\n });\n PageModel.prototype.canRenderFirstRows = function () {\n return !this.isDesignMode || this.visibleIndex == 0;\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: false,\n configurable: true\n });\n PageModel.prototype.calcCssClasses = 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 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: false,\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: false,\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: false,\n configurable: true\n });\n Object.defineProperty(PageModel.prototype, \"hasShown\", {\n get: function () {\n return this.wasShown;\n },\n enumerable: false,\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 = _helpers__WEBPACK_IMPORTED_MODULE_1__[\"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: false,\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: false,\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: false,\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 _panel__WEBPACK_IMPORTED_MODULE_2__[\"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 (typeof source.parent === \"undefined\" || 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 PageModel.prototype.ensureRowsVisibility = function () {\n _super.prototype.ensureRowsVisibility.call(this);\n this.getPanels().forEach(function (panel) { return panel.ensureRowsVisibility(); });\n };\n return PageModel;\n}(_panel__WEBPACK_IMPORTED_MODULE_2__[\"PanelModelBase\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"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 {\n name: \"navigationTitle\",\n visibleIf: function (obj) {\n return !!obj.survey && obj.survey.progressBarType === \"buttons\";\n },\n serializationProperty: \"locNavigationTitle\",\n },\n {\n name: \"navigationDescription\",\n visibleIf: function (obj) {\n return !!obj.survey && obj.survey.progressBarType === \"buttons\";\n },\n serializationProperty: \"locNavigationDescription\",\n },\n { name: \"title:text\", serializationProperty: \"locTitle\" },\n { name: \"description:text\", serializationProperty: \"locDescription\" },\n], function () {\n return new PageModel();\n}, \"panelbase\");\n\n\n/***/ }),\n\n/***/ \"./src/panel.ts\":\n/*!**********************!*\\\n !*** ./src/panel.ts ***!\n \\**********************/\n/*! exports provided: DragDropInfo, QuestionRowModel, PanelModelBase, PanelModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DragDropInfo\", function() { return DragDropInfo; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionRowModel\", function() { return QuestionRowModel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PanelModelBase\", function() { return PanelModelBase; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PanelModel\", function() { return PanelModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _survey_element__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./survey-element */ \"./src/survey-element.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./conditions */ \"./src/conditions.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./utils/utils */ \"./src/utils/utils.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\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 __extends(QuestionRowModel, _super);\n function QuestionRowModel(panel) {\n var _this = _super.call(this) || this;\n _this.panel = panel;\n _this._scrollableParent = undefined;\n _this._updateVisibility = undefined;\n _this.idValue = QuestionRowModel.getRowId();\n _this.visible = panel.areInvisibleElementsShowing;\n _this.createNewArray(\"elements\");\n _this.createNewArray(\"visibleElements\");\n return _this;\n }\n QuestionRowModel.getRowId = function () {\n return \"pr_\" + QuestionRowModel.rowCounter++;\n };\n QuestionRowModel.prototype.startLazyRendering = function (rowContainerDiv, findScrollableContainer) {\n var _this = this;\n if (findScrollableContainer === void 0) { findScrollableContainer = _utils_utils__WEBPACK_IMPORTED_MODULE_9__[\"findScrollableParent\"]; }\n this._scrollableParent = findScrollableContainer(rowContainerDiv);\n this.isNeedRender = !(this._scrollableParent.scrollHeight > this._scrollableParent.clientHeight);\n // if this._scrollableParent is html the scroll event isn't fired, so we should use window\n if (this._scrollableParent === document.documentElement) {\n this._scrollableParent = window;\n }\n if (!this.isNeedRender) {\n this._updateVisibility = function () {\n var isRowContainerDivVisible = Object(_utils_utils__WEBPACK_IMPORTED_MODULE_9__[\"isElementVisible\"])(rowContainerDiv, 50);\n if (!_this.isNeedRender && isRowContainerDivVisible) {\n _this.isNeedRender = true;\n _this.stopLazyRendering();\n }\n };\n setTimeout(function () {\n if (!!_this._scrollableParent &&\n !!_this._scrollableParent.addEventListener) {\n _this._scrollableParent.addEventListener(\"scroll\", _this._updateVisibility);\n }\n _this.ensureVisibility();\n }, 10);\n }\n };\n QuestionRowModel.prototype.ensureVisibility = function () {\n if (!!this._updateVisibility) {\n this._updateVisibility();\n }\n };\n QuestionRowModel.prototype.stopLazyRendering = function () {\n if (!!this._scrollableParent &&\n !!this._updateVisibility &&\n !!this._scrollableParent.removeEventListener) {\n this._scrollableParent.removeEventListener(\"scroll\", this._updateVisibility);\n }\n this._scrollableParent = undefined;\n this._updateVisibility = undefined;\n };\n QuestionRowModel.prototype.setIsLazyRendering = function (val) {\n this.isLazyRenderingValue = val;\n this.isNeedRender = !val;\n };\n QuestionRowModel.prototype.isLazyRendering = function () {\n return this.isLazyRenderingValue === true;\n };\n Object.defineProperty(QuestionRowModel.prototype, \"id\", {\n get: function () {\n return this.idValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionRowModel.prototype, \"elements\", {\n get: function () {\n return this.getPropertyValue(\"elements\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionRowModel.prototype, \"visibleElements\", {\n get: function () {\n return this.getPropertyValue(\"visibleElements\");\n },\n enumerable: false,\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: false,\n configurable: true\n });\n Object.defineProperty(QuestionRowModel.prototype, \"isNeedRender\", {\n get: function () {\n return this.getPropertyValue(\"isneedrender\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"isneedrender\", val);\n },\n enumerable: false,\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: false,\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 _helpers__WEBPACK_IMPORTED_MODULE_1__[\"Helpers\"].isNumber(width) ? width + \"px\" : width;\n };\n QuestionRowModel.prototype.calcVisible = function () {\n var visElements = [];\n for (var i = 0; i < this.elements.length; i++) {\n if (this.elements[i].isVisible) {\n visElements.push(this.elements[i]);\n }\n }\n if (this.needToUpdateVisibleElements(visElements)) {\n this.setPropertyValue(\"visibleElements\", visElements);\n }\n return visElements.length > 0;\n };\n QuestionRowModel.prototype.needToUpdateVisibleElements = function (visElements) {\n if (visElements.length !== this.visibleElements.length)\n return true;\n for (var i = 0; i < visElements.length; i++) {\n if (visElements[i] !== this.visibleElements[i])\n return true;\n }\n return false;\n };\n QuestionRowModel.prototype.dispose = function () {\n _super.prototype.dispose.call(this);\n this.stopLazyRendering();\n };\n QuestionRowModel.rowCounter = 100;\n return QuestionRowModel;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"Base\"]));\n\n/**\n * A base class for a Panel and Page objects.\n */\nvar PanelModelBase = /** @class */ (function (_super) {\n __extends(PanelModelBase, _super);\n function PanelModelBase(name) {\n if (name === void 0) { name = \"\"; }\n var _this = _super.call(this, name) || this;\n _this.isQuestionsReady = false;\n _this.questionsValue = new Array();\n _this.createNewArray(\"rows\");\n _this.elementsValue = _this.createNewArray(\"elements\", _this.onAddElement.bind(_this), _this.onRemoveElement.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 _this.registerFunctionOnPropertyValueChanged(\"questionTitleLocation\", function () {\n _this.onVisibleChanged.bind(_this);\n _this.updateElementCss(true);\n });\n _this.registerFunctionOnPropertiesValueChanged([\"questionStartIndex\", \"showQuestionNumbers\"], function () {\n _this.updateVisibleIndexes();\n });\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: false,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"locTitle\", {\n get: function () {\n return this.getLocalizableString(\"title\");\n },\n enumerable: false,\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 && _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].allowShowEmptyTitleInDesignMode));\n },\n enumerable: false,\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 &&\n _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].allowShowEmptyTitleInDesignMode &&\n _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].allowShowEmptyDescriptionInDesignMode));\n },\n enumerable: false,\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: false,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"locDescription\", {\n get: function () {\n return this.getLocalizableString(\"description\");\n },\n enumerable: false,\n configurable: true\n });\n PanelModelBase.prototype.localeChanged = function () {\n _super.prototype.localeChanged.call(this);\n for (var i = 0; i < this.elements.length; i++) {\n this.elements[i].localeChanged();\n }\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, \"requiredText\", {\n /**\n * Returns the char/string for a required panel.\n * @see SurveyModel.requiredText\n */\n get: function () {\n return this.survey != null && this.isRequired\n ? this.survey.requiredText\n : \"\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"titlePattern\", {\n get: function () {\n return !!this.survey ? this.survey.questionTitlePattern : \"numTitleRequire\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"isRequireTextOnStart\", {\n get: function () {\n return this.isRequired && this.titlePattern == \"requireNumTitle\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"isRequireTextBeforeTitle\", {\n get: function () {\n return this.isRequired && this.titlePattern == \"numRequireTitle\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"isRequireTextAfterTitle\", {\n get: function () {\n return this.isRequired && this.titlePattern == \"numTitleRequire\";\n },\n enumerable: false,\n configurable: true\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: false,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"locRequiredErrorText\", {\n get: function () {\n return this.getLocalizableString(\"requiredErrorText\");\n },\n enumerable: false,\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, name) {\n return this.survey\n ? this.survey.getSurveyMarkdownHtml(this, text, name)\n : null;\n };\n PanelModelBase.prototype.getRenderer = function (name) {\n return this.survey ? this.survey.getRendererForString(this, name) : 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: false,\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: false,\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: false,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"cssClasses\", {\n get: function () {\n if (!this.cssClassesValue) {\n this.cssClassesValue = this.calcCssClasses();\n }\n return this.cssClassesValue;\n },\n enumerable: false,\n configurable: true\n });\n PanelModelBase.prototype.calcCssClasses = 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 Object.defineProperty(PanelModelBase.prototype, \"css\", {\n get: function () {\n return !!this.survey ? this.survey.getCss() : {};\n },\n enumerable: false,\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: false,\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: false,\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: false,\n configurable: true\n });\n PanelModelBase.prototype.getValidName = function (name) {\n if (!!name)\n return name.trim();\n return name;\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 + _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].commentPrefix] = comment;\n }\n }\n }\n return data;\n };\n /**\n * Return questions values as a JSON object with 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 */\n PanelModelBase.prototype.getDisplayValue = function (keysAsText) {\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 = keysAsText ? q.title : q.getValueName();\n data[valueName] = q.getDisplayValue(keysAsText);\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: false,\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: false,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"requiredIf\", {\n /**\n * An expression that returns true or false. If it returns true the Panel/Page becomes required.\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 * @see isRequired\n */\n get: function () {\n return this.getPropertyValue(\"requiredIf\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"requiredIf\", val);\n },\n enumerable: false,\n configurable: true\n });\n PanelModelBase.prototype.searchText = function (text, founded) {\n _super.prototype.searchText.call(this, text, founded);\n for (var i = 0; i < this.elements.length; i++) {\n this.elements[i].searchText(text, founded);\n }\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 if (!!this.survey) {\n this.survey.beforeSettingPanelErrors(this, errors);\n }\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 _error__WEBPACK_IMPORTED_MODULE_7__[\"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: false,\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: false,\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 PanelModelBase.prototype.getProgressInfo = function () {\n return _survey_element__WEBPACK_IMPORTED_MODULE_3__[\"SurveyElement\"].getProgressInfoByElements(this.elements, this.isRequired);\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: false,\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.createRowAndSetLazy = function (index) {\n var row = this.createRow();\n row.setIsLazyRendering(this.isLazyRenderInRow(index));\n return row;\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: false,\n configurable: true\n });\n PanelModelBase.prototype.ensureRowsVisibility = function () {\n this.rows.forEach(function (row) {\n row.ensureVisibility();\n });\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.createRowAndSetLazy(result.length) : 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.isLazyRenderInRow = function (rowIndex) {\n if (!this.survey || !this.survey.isLazyRendering)\n return false;\n return (rowIndex >= _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].lazyRowsRenderingStartRow ||\n !this.canRenderFirstRows());\n };\n PanelModelBase.prototype.canRenderFirstRows = function () {\n return this.isPage;\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: false,\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: false,\n configurable: true\n });\n PanelModelBase.prototype.onVisibleChanged = function () {\n this.setPropertyValue(\"isVisible\", this.isVisible);\n if (!!this.survey &&\n this.survey.isClearValueOnHiddenContainer &&\n !this.isLoadingFromJson) {\n var questions = this.questions;\n for (var i = 0; i < questions.length; i++) {\n if (!this.isVisible) {\n questions[i].clearValue();\n }\n else {\n questions[i].updateValueWithDefaults();\n }\n }\n }\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: false,\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 this.resetVisibleIndexes();\n return 0;\n }\n this.lastVisibleIndex = index;\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.updateVisibleIndexes = function () {\n if (this.lastVisibleIndex === undefined)\n return;\n this.resetVisibleIndexes();\n this.setVisibleIndex(this.lastVisibleIndex);\n };\n PanelModelBase.prototype.resetVisibleIndexes = function () {\n for (var i = 0; i < this.elements.length; i++) {\n this.elements[i].setVisibleIndex(-1);\n }\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: false,\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 (reNew) {\n this.cssClassesValue = undefined;\n for (var i = 0; i < this.elements.length; i++) {\n var el = this.elements[i];\n el.updateElementCss(reNew);\n }\n _super.prototype.updateElementCss.call(this, reNew);\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: false,\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.insertElementAfter = function (element, after) {\n var index = this.elements.indexOf(after);\n if (index >= 0)\n this.addElement(element, index + 1);\n };\n PanelModelBase.prototype.insertElementBefore = function (element, before) {\n var index = this.elements.indexOf(before);\n if (index >= 0)\n this.addElement(element, index);\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 = _questionfactory__WEBPACK_IMPORTED_MODULE_6__[\"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 var res = _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].createClass(\"panel\");\n res.name = name;\n return res;\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 || this.isLoadingFromJson)\n return;\n var elements = this.elements.slice();\n for (var i = 0; i < elements.length; i++) {\n elements[i].runCondition(values, properties);\n }\n if (!this.areInvisibleElementsShowing) {\n this.runVisibleCondition(values, properties);\n }\n this.runEnableCondition(values, properties);\n this.runRequiredCondition(values, properties);\n };\n PanelModelBase.prototype.runVisibleCondition = function (values, properties) {\n var _this = this;\n if (!this.visibleIf)\n return;\n var conditionRunner = new _conditions__WEBPACK_IMPORTED_MODULE_5__[\"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 _conditions__WEBPACK_IMPORTED_MODULE_5__[\"ConditionRunner\"](this.enableIf);\n conditionRunner.onRunComplete = function (res) {\n _this.readOnly = !res;\n };\n conditionRunner.run(values, properties);\n };\n PanelModelBase.prototype.runRequiredCondition = function (values, properties) {\n var _this = this;\n if (!this.requiredIf)\n return;\n var conditionRunner = new _conditions__WEBPACK_IMPORTED_MODULE_5__[\"ConditionRunner\"](this.requiredIf);\n conditionRunner.onRunComplete = function (res) {\n _this.isRequired = res;\n };\n conditionRunner.run(values, properties);\n };\n PanelModelBase.prototype.onAnyValueChanged = function (name) {\n var els = this.elements;\n for (var i = 0; i < els.length; i++) {\n els[i].onAnyValueChanged(name);\n }\n };\n PanelModelBase.prototype.checkBindings = function (valueName, value) {\n var els = this.elements;\n for (var i = 0; i < els.length; i++) {\n els[i].checkBindings(valueName, value);\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.createRowAndSetLazy(destRow.panel.rows.length);\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 _super.prototype.dispose.call(this);\n if (this.rows) {\n for (var i = 0; i < this.rows.length; i++) {\n this.rows[i].dispose();\n }\n this.rows.splice(0, this.rows.length);\n }\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}(_survey_element__WEBPACK_IMPORTED_MODULE_3__[\"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 __extends(PanelModel, _super);\n function PanelModel(name) {\n if (name === void 0) { name = \"\"; }\n var _this = _super.call(this, name) || this;\n var self = _this;\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 Object.defineProperty(PanelModel.prototype, \"contentId\", {\n get: function () {\n return this.id + \"_content\";\n },\n enumerable: false,\n configurable: true\n });\n PanelModel.prototype.getSurvey = function (live) {\n if (live === void 0) { live = false; }\n if (live) {\n return !!this.parent ? this.parent.getSurvey(live) : null;\n }\n return _super.prototype.getSurvey.call(this, live);\n };\n PanelModel.prototype.onSurveyLoad = function () {\n _super.prototype.onSurveyLoad.call(this);\n this.onIndentChanged();\n };\n PanelModel.prototype.onSetData = function () {\n _super.prototype.onSetData.call(this);\n this.onIndentChanged();\n };\n Object.defineProperty(PanelModel.prototype, \"isPanel\", {\n get: function () {\n return true;\n },\n enumerable: false,\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: false,\n configurable: true\n });\n PanelModel.prototype.delete = function () {\n if (!!this.parent) {\n this.removeSelfFromList(this.parent.elements);\n }\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: false,\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: false,\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: false,\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: false,\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: false,\n configurable: true\n });\n PanelModel.prototype.setNo = function (visibleIndex) {\n this.setPropertyValue(\"no\", _helpers__WEBPACK_IMPORTED_MODULE_1__[\"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: false,\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: false,\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: false,\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: false,\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: false,\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: false,\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: false,\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: false,\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: false,\n configurable: true\n });\n PanelModel.prototype.onIndentChanged = function () {\n if (!this.getSurvey())\n return;\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 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 _question__WEBPACK_IMPORTED_MODULE_4__[\"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: false,\n configurable: true\n });\n PanelModel.prototype.cancelPreview = function () {\n if (!this.hasEditButton)\n return;\n this.survey.cancelPreviewByPage(this);\n };\n Object.defineProperty(PanelModel.prototype, \"cssTitle\", {\n get: function () {\n var result = this.cssClasses.panel.title;\n if (this.state !== \"default\") {\n result += \" \" + this.cssClasses.panel.titleExpandable;\n }\n if (this.containsErrors) {\n result += \" \" + this.cssClasses.panel.titleOnError;\n }\n return result;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModel.prototype, \"cssError\", {\n get: function () {\n var rootClass = this.cssClasses.error.root;\n return rootClass ? rootClass : \"panel-error-root\";\n },\n enumerable: false,\n configurable: true\n });\n PanelModel.prototype.onVisibleChanged = function () {\n _super.prototype.onVisibleChanged.call(this);\n this.notifySurveyOnVisibilityChanged();\n };\n return PanelModel;\n}(PanelModelBase));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"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 \"requiredIf:condition\",\n \"readOnly:boolean\",\n {\n name: \"questionTitleLocation\",\n default: \"default\",\n choices: [\"default\", \"top\", \"bottom\", \"left\", \"hidden\"],\n },\n { name: \"title:text\", serializationProperty: \"locTitle\" },\n { name: \"description:text\", serializationProperty: \"locDescription\" },\n], function () {\n return new PanelModelBase();\n});\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"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_questionfactory__WEBPACK_IMPORTED_MODULE_6__[\"ElementFactory\"].Instance.registerElement(\"panel\", function (name) {\n return new PanelModel(name);\n});\n\n\n/***/ }),\n\n/***/ \"./src/popup.ts\":\n/*!**********************!*\\\n !*** ./src/popup.ts ***!\n \\**********************/\n/*! exports provided: PopupModel, PopupBaseViewModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PopupModel\", function() { return PopupModel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PopupBaseViewModel\", function() { return PopupBaseViewModel; });\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _utils_popup__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils/popup */ \"./src/utils/popup.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\n\nvar PopupModel = /** @class */ (function (_super) {\n __extends(PopupModel, _super);\n function PopupModel(contentComponentName, contentComponentData, verticalPosition, horizontalPosition, showPointer, isModal, onCancel, onApply, onHide, onShow, cssClass) {\n if (verticalPosition === void 0) { verticalPosition = \"bottom\"; }\n if (horizontalPosition === void 0) { horizontalPosition = \"left\"; }\n if (showPointer === void 0) { showPointer = true; }\n if (isModal === void 0) { isModal = false; }\n if (onCancel === void 0) { onCancel = function () { }; }\n if (onApply === void 0) { onApply = function () { return true; }; }\n if (onHide === void 0) { onHide = function () { }; }\n if (onShow === void 0) { onShow = function () { }; }\n if (cssClass === void 0) { cssClass = \"\"; }\n var _this = _super.call(this) || this;\n _this.contentComponentName = contentComponentName;\n _this.contentComponentData = contentComponentData;\n _this.verticalPosition = verticalPosition;\n _this.horizontalPosition = horizontalPosition;\n _this.showPointer = showPointer;\n _this.isModal = isModal;\n _this.onCancel = onCancel;\n _this.onApply = onApply;\n _this.onHide = onHide;\n _this.onShow = onShow;\n _this.cssClass = cssClass;\n return _this;\n }\n Object.defineProperty(PopupModel.prototype, \"isVisible\", {\n get: function () {\n return this.getPropertyValue(\"isVisible\", false);\n },\n set: function (value) {\n if (this.isVisible === value) {\n return;\n }\n this.setPropertyValue(\"isVisible\", value);\n this.onVisibilityChanged && this.onVisibilityChanged(value);\n if (this.isVisible) {\n this.onShow();\n }\n else {\n this.onHide();\n }\n },\n enumerable: false,\n configurable: true\n });\n PopupModel.prototype.toggleVisibility = function () {\n this.isVisible = !this.isVisible;\n };\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], PopupModel.prototype, \"contentComponentName\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], PopupModel.prototype, \"contentComponentData\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: \"bottom\" })\n ], PopupModel.prototype, \"verticalPosition\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: \"left\" })\n ], PopupModel.prototype, \"horizontalPosition\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: false })\n ], PopupModel.prototype, \"showPointer\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: false })\n ], PopupModel.prototype, \"isModal\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: function () { } })\n ], PopupModel.prototype, \"onCancel\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: function () { return true; } })\n ], PopupModel.prototype, \"onApply\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: function () { } })\n ], PopupModel.prototype, \"onHide\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: function () { } })\n ], PopupModel.prototype, \"onShow\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: \"\" })\n ], PopupModel.prototype, \"cssClass\", void 0);\n return PopupModel;\n}(_base__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]));\n\nvar FOCUS_INPUT_SELECTOR = \"input:not(:disabled):not([readonly]):not([type=hidden]),select:not(:disabled):not([readonly]),textarea:not(:disabled):not([readonly]), button:not(:disabled):not([readonly])\";\nvar PopupBaseViewModel = /** @class */ (function (_super) {\n __extends(PopupBaseViewModel, _super);\n function PopupBaseViewModel(model, targetElement) {\n var _this = _super.call(this) || this;\n _this.model = model;\n _this.targetElement = targetElement;\n _this.model.registerFunctionOnPropertyValueChanged(\"isVisible\", function () {\n _this.isVisible = _this.model.isVisible;\n });\n return _this;\n }\n Object.defineProperty(PopupBaseViewModel.prototype, \"contentComponentName\", {\n get: function () {\n return this.model.contentComponentName;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PopupBaseViewModel.prototype, \"contentComponentData\", {\n get: function () {\n return this.model.contentComponentData;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PopupBaseViewModel.prototype, \"showPointer\", {\n get: function () {\n return this.model.showPointer;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PopupBaseViewModel.prototype, \"isModal\", {\n get: function () {\n return this.model.isModal;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PopupBaseViewModel.prototype, \"styleClass\", {\n get: function () {\n var css = this.model.cssClass;\n if (this.isModal) {\n css += \" sv-popup--modal\";\n }\n else if (this.showPointer) {\n css += \" sv-popup--show-pointer\";\n css += \" sv-popup--\" + this.popupDirection;\n }\n return css;\n },\n enumerable: false,\n configurable: true\n });\n PopupBaseViewModel.prototype.onKeyDown = function (event) {\n if (event.key === \"Tab\" || event.keyCode === 9) {\n this.trapFocus(event);\n }\n else if (event.key === \"Escape\" || event.keyCode === 27) {\n if (this.isModal) {\n this.model.onCancel();\n }\n this.model.isVisible = false;\n }\n };\n PopupBaseViewModel.prototype.trapFocus = function (event) {\n var focusableElements = this.container.querySelectorAll(FOCUS_INPUT_SELECTOR);\n var firstFocusableElement = focusableElements[0];\n var lastFocusableElement = focusableElements[focusableElements.length - 1];\n if (event.shiftKey) {\n if (document.activeElement === firstFocusableElement) {\n lastFocusableElement.focus();\n event.preventDefault();\n }\n }\n else {\n if (document.activeElement === lastFocusableElement) {\n firstFocusableElement.focus();\n event.preventDefault();\n }\n }\n };\n PopupBaseViewModel.prototype.updateOnShowing = function () {\n if (!this.isModal) {\n this.updatePosition();\n }\n this.focusFirstInput();\n };\n PopupBaseViewModel.prototype.updatePosition = function () {\n var rect = this.targetElement.getBoundingClientRect();\n var background = this.container.children[0];\n var popupContainer = background.children[0];\n var scrollContent = background.children[0].children[1];\n var height = popupContainer.offsetHeight -\n scrollContent.offsetHeight +\n scrollContent.scrollHeight;\n var width = popupContainer.offsetWidth;\n this.height = \"auto\";\n var verticalPosition = this.model.verticalPosition;\n if (!!window) {\n verticalPosition = _utils_popup__WEBPACK_IMPORTED_MODULE_3__[\"PopupUtils\"].updateVerticalPosition(rect, height, this.model.verticalPosition, this.model.showPointer, window.innerHeight);\n }\n this.popupDirection = _utils_popup__WEBPACK_IMPORTED_MODULE_3__[\"PopupUtils\"].calculatePopupDirection(verticalPosition, this.model.horizontalPosition);\n var pos = _utils_popup__WEBPACK_IMPORTED_MODULE_3__[\"PopupUtils\"].calculatePosition(rect, height, width, verticalPosition, this.model.horizontalPosition, this.showPointer);\n if (!!window) {\n var newVerticalDimensions = _utils_popup__WEBPACK_IMPORTED_MODULE_3__[\"PopupUtils\"].updateVerticalDimensions(pos.top, height, window.innerHeight);\n if (!!newVerticalDimensions) {\n this.height = newVerticalDimensions.height + \"px\";\n pos.top = newVerticalDimensions.top;\n }\n }\n this.left = pos.left + \"px\";\n this.top = pos.top + \"px\";\n if (this.showPointer) {\n this.pointerTarget = _utils_popup__WEBPACK_IMPORTED_MODULE_3__[\"PopupUtils\"].calculatePointerTarget(rect, pos.top, pos.left, verticalPosition, this.model.horizontalPosition);\n }\n this.pointerTarget.top += \"px\";\n this.pointerTarget.left += \"px\";\n };\n PopupBaseViewModel.prototype.focusFirstInput = function () {\n var _this = this;\n setTimeout(function () {\n var el = _this.container.querySelector(FOCUS_INPUT_SELECTOR);\n if (!!el)\n el.focus();\n else\n _this.container.children[0].focus();\n }, 100);\n };\n PopupBaseViewModel.prototype.clickOutside = function () {\n if (this.isModal) {\n return;\n }\n this.model.isVisible = false;\n };\n PopupBaseViewModel.prototype.cancel = function () {\n this.model.onCancel();\n this.model.isVisible = false;\n };\n PopupBaseViewModel.prototype.apply = function () {\n if (!!this.model.onApply && !this.model.onApply())\n return;\n this.model.isVisible = false;\n };\n Object.defineProperty(PopupBaseViewModel.prototype, \"cancelButtonText\", {\n get: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"].getString(\"modalCancelButtonText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PopupBaseViewModel.prototype, \"applyButtonText\", {\n get: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"].getString(\"modalApplyButtonText\");\n },\n enumerable: false,\n configurable: true\n });\n PopupBaseViewModel.prototype.dispose = function () {\n _super.prototype.dispose.call(this);\n this.model.onVisibilityChanged = undefined;\n };\n PopupBaseViewModel.prototype.createPopupContainer = function () {\n var container = document.createElement(\"div\");\n this.container = container;\n };\n PopupBaseViewModel.prototype.mountPopupContainer = function () {\n document.body.appendChild(this.container);\n };\n PopupBaseViewModel.prototype.initializePopupContainer = function () {\n this.createPopupContainer();\n this.mountPopupContainer();\n };\n PopupBaseViewModel.prototype.destroyPopupContainer = function () {\n this.container.remove();\n this.container = undefined;\n };\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: \"0px\" })\n ], PopupBaseViewModel.prototype, \"top\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: \"0px\" })\n ], PopupBaseViewModel.prototype, \"left\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: \"auto\" })\n ], PopupBaseViewModel.prototype, \"height\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: false })\n ], PopupBaseViewModel.prototype, \"isVisible\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: \"left\" })\n ], PopupBaseViewModel.prototype, \"popupDirection\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: { left: \"0px\", top: \"0px\" } })\n ], PopupBaseViewModel.prototype, \"pointerTarget\", void 0);\n return PopupBaseViewModel;\n}(_base__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/question.ts\":\n/*!*************************!*\\\n !*** ./src/question.ts ***!\n \\*************************/\n/*! exports provided: Question */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Question\", function() { return Question; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _survey_element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./survey-element */ \"./src/survey-element.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _validator__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./validator */ \"./src/validator.ts\");\n/* harmony import */ var _localizablestring__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./localizablestring */ \"./src/localizablestring.ts\");\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./conditions */ \"./src/conditions.ts\");\n/* harmony import */ var _questionCustomWidgets__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./questionCustomWidgets */ \"./src/questionCustomWidgets.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _rendererFactory__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./rendererFactory */ \"./src/rendererFactory.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\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 __extends(Question, _super);\n function Question(name) {\n var _this = _super.call(this, name) || this;\n _this.conditionRunner = null;\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 = _this.addEvent();\n _this.parentQuestionValue = null;\n _this.isRunningValidatorsValue = false;\n _this.isValueChangedInSurvey = false;\n _this.allowNotifyValueChanged = true;\n //ILocalizableOwner\n _this.locOwner = null;\n _this.id = Question.getQuestionId();\n _this.onCreating();\n _this.createNewArray(\"validators\", function (validator) {\n validator.errorOwner = _this;\n });\n var locTitleValue = _this.createLocalizableString(\"title\", _this, true);\n locTitleValue.onGetTextCallback = function (text) {\n if (!text) {\n text = _this.name;\n }\n if (!_this.survey)\n return text;\n return _this.survey.getUpdatedQuestionTitle(_this, text);\n };\n _this.locProcessedTitle = new _localizablestring__WEBPACK_IMPORTED_MODULE_6__[\"LocalizableString\"](_this, true);\n _this.locProcessedTitle.sharedData = locTitleValue;\n var locCommentText = _this.createLocalizableString(\"commentText\", _this, true);\n locCommentText.onGetTextCallback = function (text) {\n return !!text ? text : _surveyStrings__WEBPACK_IMPORTED_MODULE_3__[\"surveyLocalization\"].getString(\"otherItemText\");\n };\n _this.createLocalizableString(\"requiredErrorText\", _this);\n _this.registerFunctionOnPropertyValueChanged(\"width\", function () {\n _this.updateQuestionCss();\n if (!!_this.parent) {\n _this.parent.elementWidthChanged(_this);\n }\n });\n _this.registerFunctionOnPropertyValueChanged(\"isRequired\", function () {\n _this.locTitle.onChanged();\n _this.cssClassesValue = undefined;\n });\n _this.registerFunctionOnPropertiesValueChanged([\"indent\", \"rightIndent\"], function () {\n _this.onIndentChanged();\n });\n _this.registerFunctionOnPropertiesValueChanged([\"hasComment\", \"hasOther\"], function () {\n _this.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 && _settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].readOnlyCommentRenderMode === \"div\";\n };\n Question.prototype.getSurvey = function (live) {\n if (live === void 0) { live = false; }\n if (live) {\n return !!this.parent ? this.parent.getSurvey(live) : null;\n }\n if (!!this.onGetSurvey)\n return this.onGetSurvey();\n return _super.prototype.getSurvey.call(this);\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: false,\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 this.locTitle.onChanged();\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: false,\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: false,\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: false,\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: false,\n configurable: true\n });\n Question.prototype.onVisibleChanged = function () {\n this.setPropertyValue(\"isVisible\", this.isVisible);\n if (this.isVisible && this.survey && this.survey.isClearValueOnHidden) {\n this.updateValueWithDefaults();\n }\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: false,\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: false,\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: false,\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: false,\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\");\n },\n set: function (val) {\n this.setPropertyValue(\"hideNumber\", val);\n this.notifySurveyVisibilityChanged();\n },\n enumerable: false,\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: false,\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 Object.defineProperty(Question.prototype, \"isQuestion\", {\n get: function () {\n return true;\n },\n enumerable: false,\n configurable: true\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.getProgressInfo = function () {\n if (!this.hasInput)\n return _super.prototype.getProgressInfo.call(this);\n return {\n questionCount: 1,\n answeredQuestionCount: !this.isEmpty() ? 1 : 0,\n requiredQuestionCount: this.isRequired ? 1 : 0,\n requiredAnsweredQuestionCount: !this.isEmpty() && this.isRequired ? 1 : 0,\n };\n };\n Question.prototype.runConditions = function () {\n if (this.data && !this.isLoadingFromJson) {\n if (!this.isDesignMode) {\n this.runCondition(this.getDataFilteredValues(), this.getDataFilteredProperties());\n }\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 var props = !!this.data ? this.data.getFilteredProperties() : {};\n props.question = this;\n return props;\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 if (this.parent === val)\n return;\n this.delete();\n this.setPropertyValue(\"parent\", val);\n this.updateQuestionCss();\n this.onParentChanged();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"parentQuestion\", {\n /**\n * A parent question. It can be a dynamic panel or dynamic/dropdown matrices. If the value is a matrix, it means that question is a cell question.\n * This property is null for a stand alone question.\n */\n get: function () {\n return this.parentQuestionValue;\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.setParentQuestion = function (val) {\n this.parentQuestionValue = val;\n this.onParentQuestionChanged();\n };\n Question.prototype.onParentQuestionChanged = function () { };\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: false,\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 this.updateQuestionCss();\n if (isVisibilityChanged) {\n this.notifySurveyVisibilityChanged();\n }\n },\n enumerable: false,\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 if (this.survey.isClearValueOnHidden && !this.visible) {\n this.clearValue();\n }\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: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"hasTitleOnTop\", {\n get: function () {\n return this.hasTitle && this.getTitleLocation() === \"top\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"hasTitleOnBottom\", {\n get: function () {\n return this.hasTitle && this.getTitleLocation() === \"bottom\";\n },\n enumerable: false,\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: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"errorLocation\", {\n get: function () {\n return this.survey ? this.survey.questionErrorLocation : \"top\";\n },\n enumerable: false,\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: false,\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: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"inputId\", {\n get: function () {\n return this.id + \"i\";\n },\n enumerable: false,\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: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"locTitle\", {\n get: function () {\n return this.getLocalizableString(\"title\");\n },\n enumerable: false,\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: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"hasDescriptionUnderTitle\", {\n get: function () {\n return this.getDescriptionLocation() == \"underTitle\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"hasDescriptionUnderInput\", {\n get: function () {\n return this.getDescriptionLocation() == \"underInput\";\n },\n enumerable: false,\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, \"clickTitleFunction\", {\n get: function () {\n if (this.hasInput) {\n var self = this;\n return function () {\n if (self.isCollapsed)\n return;\n setTimeout(function () {\n self.focus();\n }, 1);\n return true;\n };\n }\n return undefined;\n },\n enumerable: false,\n configurable: true\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: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"locRequiredErrorText\", {\n get: function () {\n return this.getLocalizableString(\"requiredErrorText\");\n },\n enumerable: false,\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\", _surveyStrings__WEBPACK_IMPORTED_MODULE_3__[\"surveyLocalization\"].getString(\"otherItemText\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"commentText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"locCommentText\", {\n get: function () {\n return this.getLocalizableString(\"commentText\");\n },\n enumerable: false,\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 Question.prototype.getErrorByType = function (errorType) {\n for (var i = 0; i < this.errors.length; i++) {\n if (this.errors[i].getErrorType() === errorType)\n return this.errors[i];\n }\n return null;\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: false,\n configurable: true\n });\n Question.prototype.updateCustomWidget = function () {\n this.customWidgetValue = _questionCustomWidgets__WEBPACK_IMPORTED_MODULE_8__[\"CustomWidgetCollection\"].Instance.getCustomWidget(this);\n };\n Object.defineProperty(Question.prototype, \"isCompositeQuestion\", {\n get: function () {\n return false;\n },\n enumerable: false,\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.beforeDestroyQuestionElement = 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: false,\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: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"titlePattern\", {\n get: function () {\n return !!this.survey ? this.survey.questionTitlePattern : \"numTitleRequire\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"isRequireTextOnStart\", {\n get: function () {\n return this.isRequired && this.titlePattern == \"requireNumTitle\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"isRequireTextBeforeTitle\", {\n get: function () {\n return this.isRequired && this.titlePattern == \"numRequireTitle\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"isRequireTextAfterTitle\", {\n get: function () {\n return this.isRequired && this.titlePattern == \"numTitleRequire\";\n },\n enumerable: false,\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: false,\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 if (!this.survey)\n return this.calcCssClasses();\n if (!this.cssClassesValue) {\n this.cssClassesValue = this.calcCssClasses();\n this.updateElementCssCore(this.cssClassesValue);\n }\n return this.cssClassesValue;\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.calcCssClasses = 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 return classes;\n };\n Object.defineProperty(Question.prototype, \"cssRoot\", {\n get: function () {\n this.ensureElementCss();\n return this.getPropertyValue(\"cssRoot\", \"\");\n },\n enumerable: false,\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 this.ensureElementCss();\n return this.getPropertyValue(\"cssHeader\", \"\");\n },\n enumerable: false,\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 this.ensureElementCss();\n return this.getPropertyValue(\"cssContent\", \"\");\n },\n enumerable: false,\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 this.ensureElementCss();\n return this.getPropertyValue(\"cssTitle\", \"\");\n },\n enumerable: false,\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.isCollapsed || this.isExpanded) {\n result += \" \" + cssClasses.titleExpandable;\n }\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 this.ensureElementCss();\n return this.getPropertyValue(\"cssError\", \"\");\n },\n enumerable: false,\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 (reNew) {\n this.cssClassesValue = undefined;\n if (reNew) {\n this.updateQuestionCss(true);\n }\n };\n Question.prototype.updateQuestionCss = function (reNew) {\n if (this.isLoadingFromJson ||\n !this.survey ||\n (reNew !== true && !this.cssClassesValue))\n return;\n if (!this.cssClassesValue) {\n this.cssClassesValue = this.calcCssClasses();\n }\n this.updateElementCssCore(this.cssClasses);\n };\n Question.prototype.ensureElementCss = function () {\n if (!this.cssClassesValue) {\n this.updateQuestionCss(true);\n }\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: false,\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: false,\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\", _settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].minWidth);\n },\n set: function (val) {\n this.setPropertyValue(\"minWidth\", val);\n },\n enumerable: false,\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\", _settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].maxWidth);\n },\n set: function (val) {\n this.setPropertyValue(\"maxWidth\", val);\n },\n enumerable: false,\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: false,\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: false,\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: false,\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: false,\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: false,\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 || !this.getSurvey() || !this.cssClasses)\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.isDesignMode)\n return;\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 (_survey_element__WEBPACK_IMPORTED_MODULE_2__[\"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 this.setPropertyValue(\"isRequired\", val);\n },\n enumerable: false,\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: false,\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: false,\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: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"ariaTitleId\", {\n get: function () {\n return this.id + \"_ariaTitle\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"ariaRole\", {\n get: function () {\n return null;\n },\n enumerable: false,\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: false,\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: false,\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: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"isInputReadOnly\", {\n get: function () {\n var isDesignModeV2 = _settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].supportCreatorV2 && this.isDesignMode;\n return this.isReadOnly || isDesignModeV2;\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.onReadOnlyChanged = function () {\n this.setPropertyValue(\"isInputReadOnly\", this.isInputReadOnly);\n _super.prototype.onReadOnlyChanged.call(this);\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: false,\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 _conditions__WEBPACK_IMPORTED_MODULE_7__[\"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 _conditions__WEBPACK_IMPORTED_MODULE_7__[\"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 _conditions__WEBPACK_IMPORTED_MODULE_7__[\"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 this.getPropertyValue(\"no\");\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.calcNo = function () {\n if (!this.hasTitle || this.hideNumber)\n return \"\";\n var no = _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].getNumberByIndex(this.visibleIndex, this.getStartIndex());\n if (!!this.survey) {\n no = this.survey.getUpdatedQuestionNo(this, no);\n }\n return no;\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 };\n Question.prototype.onSetData = function () {\n _super.prototype.onSetData.call(this);\n if (!this.survey)\n return;\n this.initDataFromSurvey();\n this.onSurveyValueChanged(this.value);\n this.updateValueWithDefaults();\n this.onIndentChanged();\n this.updateQuestionCss();\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 Question.prototype.runExpression = function (expression) {\n if (!this.survey || !expression)\n return undefined;\n return this.survey.runExpression(expression);\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: false,\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: false,\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: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"valueForSurvey\", {\n get: function () {\n if (!!this.valueToDataCallback) {\n return this.valueToDataCallback(this.value);\n }\n return this.value;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Clear the question value. It clears the question comment as well.\n */\n Question.prototype.clearValue = function () {\n if (this.value !== undefined) {\n this.value = undefined;\n }\n this.comment = undefined;\n };\n Question.prototype.unbindValue = function () {\n this.clearValue();\n };\n Question.prototype.createValueCopy = function () {\n return this.getUnbindValue(this.value);\n };\n Question.prototype.getUnbindValue = function (value) {\n if (this.isValueSurveyElement(value))\n return value;\n return _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].getUnbindValue(value);\n };\n Question.prototype.isValueSurveyElement = function (val) {\n if (!val)\n return false;\n if (Array.isArray(val))\n return val.length > 0 ? this.isValueSurveyElement(val[0]) : false;\n return !!val.getType && !!val.onPropertyChanged;\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: false,\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 if (this.isLoadingFromJson)\n return \"\";\n return this.getDisplayValue(true);\n },\n enumerable: false,\n configurable: 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 var res = this.calcDisplayValue(keysAsText, value);\n return !!this.displayValueCallback ? this.displayValueCallback(res) : res;\n };\n Question.prototype.calcDisplayValue = 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 (this.isValueEmpty(value))\n return this.getDisplayValueEmpty();\n return this.getDisplayValueCore(keysAsText, value);\n };\n Question.prototype.getDisplayValueCore = function (keyAsText, value) {\n return value;\n };\n Question.prototype.getDisplayValueEmpty = function () {\n return \"\";\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 if (this.isValueExpression(val)) {\n this.defaultValueExpression = val.substr(1);\n return;\n }\n this.setPropertyValue(\"defaultValue\", this.convertDefaultValue(val));\n this.updateValueWithDefaults();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"defaultValueExpression\", {\n get: function () {\n return this.getPropertyValue(\"defaultValueExpression\");\n },\n set: function (val) {\n this.setPropertyValue(\"defaultValueExpression\", val);\n this.updateValueWithDefaults();\n },\n enumerable: false,\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: _settings__WEBPACK_IMPORTED_MODULE_9__[\"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\", this.convertDefaultValue(val));\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.convertDefaultValue = function (val) {\n return val;\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 !this.isValueEmpty(this.correctAnswer))\n return this.getQuizQuestionCount();\n return 0;\n },\n enumerable: false,\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: false,\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, true)\n ? 1\n : 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 if (!!this.survey && this.survey.isClearValueOnHidden && !this.isVisible)\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.defaultValueExpression && this.isValueEmpty(this.defaultValue);\n };\n Question.prototype.setDefaultValue = function () {\n var _this = this;\n this.setValueAndRunExpression(this.defaultValueExpression, this.getUnbindValue(this.defaultValue), function (val) {\n _this.value = val;\n });\n };\n Question.prototype.isValueExpression = function (val) {\n return !!val && typeof val == \"string\" && val.length > 0 && val[0] == \"=\";\n };\n Question.prototype.setValueAndRunExpression = function (expression, defaultValue, setFunc, values, properties) {\n var _this = this;\n if (values === void 0) { values = null; }\n if (properties === void 0) { properties = null; }\n var func = function (val) {\n if (val instanceof Date) {\n val = val.toISOString().slice(0, 10);\n }\n setFunc(val);\n };\n if (!!expression && !!this.data) {\n if (!values)\n values = this.data.getFilteredValues();\n if (!properties)\n properties = this.data.getFilteredProperties();\n var runner = new _conditions__WEBPACK_IMPORTED_MODULE_7__[\"ExpressionRunner\"](expression);\n if (runner.canRun) {\n runner.onRunComplete = function (res) {\n if (res == undefined)\n res = _this.defaultValue;\n func(res);\n };\n runner.run(values, properties);\n }\n }\n else {\n func(defaultValue);\n }\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: false,\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: false,\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: false,\n configurable: true\n });\n Question.prototype.getValidators = function () {\n return this.validators;\n };\n Question.prototype.getSupportedValidators = function () {\n var res = [];\n var className = this.getType();\n while (!!className) {\n var classValidators = _settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].supportedValidators[className];\n if (!!classValidators) {\n for (var i = classValidators.length - 1; i >= 0; i--) {\n res.splice(0, 0, classValidators[i]);\n }\n }\n var classInfo = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].findClass(className);\n className = classInfo.parentName;\n }\n return res;\n };\n Question.prototype.addSupportedValidators = function (supportedValidators, classValidators) { };\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 _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"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.updateQuestionCss();\n }\n if (this.isCollapsed && rec && fireCallback && errors.length > 0) {\n this.expand();\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: false,\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: false,\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 _error__WEBPACK_IMPORTED_MODULE_4__[\"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 _error__WEBPACK_IMPORTED_MODULE_4__[\"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: false,\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 _validator__WEBPACK_IMPORTED_MODULE_5__[\"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.updateQuestionCss();\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: false,\n configurable: true\n });\n Question.prototype.getDataLocNotification = function () {\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: false,\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 && this.canSetValueToSurvey()) {\n newValue = this.valueForSurvey;\n this.data.setValue(this.getValueName(), newValue, this.getDataLocNotification(), this.allowNotifyValueChanged);\n }\n };\n Question.prototype.canSetValueToSurvey = function () {\n return true;\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 Question.prototype.getValidName = function (name) {\n if (!name)\n return name;\n return name.trim().replace(/[\\{\\}]+/g, \"\");\n };\n //IQuestion\n Question.prototype.updateValueFromSurvey = function (newValue) {\n newValue = this.getUnbindValue(newValue);\n if (!!this.valueFromDataCallback) {\n newValue = this.valueFromDataCallback(newValue);\n }\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 Question.prototype.setVisibleIndex = function (val) {\n if (!this.isVisible ||\n (!this.hasTitle && !_settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].setQuestionVisibleIndexForHiddenTitle) ||\n (this.hideNumber && !_settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].setQuestionVisibleIndexForHiddenNumber)) {\n val = -1;\n }\n this.setPropertyValue(\"visibleIndex\", val);\n this.setPropertyValue(\"no\", this.calcNo());\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 Question.prototype.checkBindings = function (valueName, value) {\n if (this.bindings.isEmpty() || !this.data)\n return;\n var props = this.bindings.getPropertiesByValueName(valueName);\n for (var i = 0; i < props.length; i++) {\n this[props[i]] = value;\n }\n };\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, name) {\n return this.survey\n ? this.survey.getSurveyMarkdownHtml(this, text, name)\n : this.locOwner\n ? this.locOwner.getMarkdownHtml(text, name)\n : null;\n };\n Question.prototype.getRenderer = function (name) {\n return this.survey && typeof this.survey.getRendererForString === \"function\"\n ? this.survey.getRendererForString(this, name)\n : this.locOwner && typeof this.locOwner.getRenderer === \"function\"\n ? this.locOwner.getRenderer(name)\n : null;\n };\n Question.prototype.getProcessedText = function (text) {\n if (this.isLoadingFromJson)\n return 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 Question.prototype.getComponentName = function () {\n return _rendererFactory__WEBPACK_IMPORTED_MODULE_10__[\"RendererFactory\"].Instance.getRendererByQuestion(this);\n };\n Question.prototype.isDefaultRendering = function () {\n return (!!this.customWidget ||\n this.renderAs === \"default\" ||\n this.getComponentName() === \"default\");\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: false,\n configurable: true\n });\n Question.prototype.getAllValues = function () {\n return !!this.data ? this.data.getAllValues() : null;\n };\n Question.TextPreprocessorValuesMap = {\n title: \"processedTitle\",\n require: \"requiredText\",\n };\n Question.questionCounter = 100;\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ localizable: true })\n ], Question.prototype, \"description\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Question.prototype, \"cssClassesValue\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: \"default\" })\n ], Question.prototype, \"renderAs\", void 0);\n return Question;\n}(_survey_element__WEBPACK_IMPORTED_MODULE_2__[\"SurveyElement\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"question\", [\n \"!name\",\n {\n name: \"state\",\n default: \"default\",\n choices: [\"default\", \"collapsed\", \"expanded\"],\n },\n { name: \"visible:switch\", default: true },\n { name: \"useDisplayValuesInTitle:boolean\", default: true, layout: \"row\" },\n \"visibleIf:condition\",\n { name: \"width\" },\n { name: \"minWidth\", default: _settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].minWidth },\n { name: \"maxWidth\", default: _settings__WEBPACK_IMPORTED_MODULE_9__[\"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 {\n name: \"defaultValueExpression:expression\",\n category: \"logic\",\n },\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 name: \"bindings:bindings\",\n serializationProperty: \"bindings\",\n visibleIf: function (obj) {\n return obj.bindings.getNames().length > 0;\n },\n },\n { name: \"renderAs\", default: \"default\", visible: false },\n]);\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addAlterNativeClassName(\"question\", \"questionbase\");\n\n\n/***/ }),\n\n/***/ \"./src/questionCustomWidgets.ts\":\n/*!**************************************!*\\\n !*** ./src/questionCustomWidgets.ts ***!\n \\**************************************/\n/*! exports provided: QuestionCustomWidget, CustomWidgetCollection */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionCustomWidget\", function() { return QuestionCustomWidget; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CustomWidgetCollection\", function() { return CustomWidgetCollection; });\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\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 Object.defineProperty(QuestionCustomWidget.prototype, \"canShowInToolbox\", {\n get: function () {\n if (this.widgetJson.showInToolbox === false)\n return false;\n if (CustomWidgetCollection.Instance.getActivatedBy(this.name) != \"customtype\")\n return false;\n return !this.widgetJson.widgetIsLoaded || this.widgetJson.widgetIsLoaded();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionCustomWidget.prototype, \"showInToolbox\", {\n get: function () {\n return this.widgetJson.showInToolbox !== false;\n },\n set: function (val) {\n this.widgetJson.showInToolbox = val;\n },\n enumerable: false,\n configurable: true\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: false,\n configurable: true\n });\n Object.defineProperty(QuestionCustomWidget.prototype, \"pdfQuestionType\", {\n get: function () {\n return this.widgetJson.pdfQuestionType;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionCustomWidget.prototype, \"pdfRender\", {\n get: function () {\n return this.widgetJson.pdfRender;\n },\n enumerable: false,\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 _base__WEBPACK_IMPORTED_MODULE_0__[\"Event\"]();\n }\n Object.defineProperty(CustomWidgetCollection.prototype, \"widgets\", {\n get: function () {\n return this.widgetsValues;\n },\n enumerable: false,\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 return customWidget;\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\n/***/ \"./src/question_baseselect.ts\":\n/*!************************************!*\\\n !*** ./src/question_baseselect.ts ***!\n \\************************************/\n/*! exports provided: QuestionSelectBase, QuestionCheckboxBase */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionSelectBase\", function() { return QuestionSelectBase; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionCheckboxBase\", function() { return QuestionCheckboxBase; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _survey__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./survey */ \"./src/survey.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _choicesRestful__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./choicesRestful */ \"./src/choicesRestful.ts\");\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./conditions */ \"./src/conditions.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\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 __extends(QuestionSelectBase, _super);\n function QuestionSelectBase(name) {\n var _this = _super.call(this, name) || this;\n _this.otherItemValue = new _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"](\"other\");\n _this.dependedQuestions = [];\n _this.noneItemValue = new _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"](\"none\");\n _this.isSettingDefaultValue = false;\n _this.isSettingComment = false;\n _this.isRunningChoices = false;\n _this.isFirstLoadChoicesFromUrl = true;\n _this.isUpdatingChoicesDependedQuestions = false;\n var noneItemText = _this.createLocalizableString(\"noneText\", _this, true);\n noneItemText.onGetTextCallback = function (text) {\n return !!text ? text : _surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"surveyLocalization\"].getString(\"noneItemText\");\n };\n _this.noneItemValue.locOwner = _this;\n _this.noneItemValue.setLocText(noneItemText);\n _this.createItemValues(\"choices\");\n _this.registerFunctionOnPropertyValueChanged(\"choices\", function () {\n if (!_this.filterItems()) {\n _this.onVisibleChoicesChanged();\n }\n });\n _this.registerFunctionOnPropertiesValueChanged([\"choicesFromQuestion\", \"choicesFromQuestionMode\", \"hasNone\"], function () {\n _this.onVisibleChoicesChanged();\n });\n _this.registerFunctionOnPropertyValueChanged(\"hideIfChoicesEmpty\", function () {\n _this.updateVisibilityBasedOnChoices();\n });\n _this.createNewArray(\"visibleChoices\");\n _this.setNewRestfulProperty();\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 : _surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"surveyLocalization\"].getString(\"otherItemText\");\n };\n _this.choicesByUrl.beforeSendRequestCallback = function () {\n _this.onBeforeSendRequest();\n };\n _this.choicesByUrl.getResultCallback = function (items) {\n _this.onLoadChoicesFromUrl(items);\n };\n _this.choicesByUrl.updateResultCallback = function (items, serverResult) {\n if (_this.survey) {\n return _this.survey.updateChoicesFromServer(_this, 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.dispose = function () {\n _super.prototype.dispose.call(this);\n for (var i = 0; i < this.dependedQuestions.length; i++) {\n this.dependedQuestions[i].choicesFromQuestion = \"\";\n }\n this.removeFromDependedQuestion(this.getQuestionWithChoices());\n };\n QuestionSelectBase.prototype.supportGoNextPageError = function () {\n return !this.isOtherSelected || !!this.comment;\n };\n QuestionSelectBase.prototype.isLayoutTypeSupported = function (layoutType) {\n return true;\n };\n QuestionSelectBase.prototype.localeChanged = function () {\n _super.prototype.localeChanged.call(this);\n if (this.choicesOrder !== \"none\") {\n this.updateVisibleChoices();\n }\n };\n QuestionSelectBase.prototype.locStrsChanged = function () {\n _super.prototype.locStrsChanged.call(this);\n if (!!this.choicesFromUrl) {\n _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].locStrsChanged(this.choicesFromUrl);\n _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].locStrsChanged(this.visibleChoices);\n }\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: false,\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: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.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: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.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: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"noneText\", {\n /**\n * Use this property to set the different text for none item.\n */\n get: function () {\n return this.getLocalizableStringText(\"noneText\", _surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"surveyLocalization\"].getString(\"noneItemText\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"noneText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"locNoneText\", {\n get: function () {\n return this.getLocalizableString(\"noneText\");\n },\n enumerable: false,\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: false,\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: false,\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.isTextValue = function () {\n return true; //for comments and others\n };\n QuestionSelectBase.prototype.setDefaultValue = function () {\n this.isSettingDefaultValue =\n !this.isValueEmpty(this.defaultValue) &&\n this.hasUnknownValue(this.defaultValue);\n this.prevCommentValue = undefined;\n _super.prototype.setDefaultValue.call(this);\n this.isSettingDefaultValue = false;\n };\n QuestionSelectBase.prototype.getIsMultipleValue = function () {\n return false;\n };\n QuestionSelectBase.prototype.convertDefaultValue = function (val) {\n if (val == null || val == undefined)\n return val;\n if (this.getIsMultipleValue()) {\n if (!Array.isArray(val))\n return [val];\n }\n else {\n if (Array.isArray(val) && val.length > 0)\n return val[0];\n }\n return val;\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 = undefined;\n }\n if (hasChanges) {\n this.onVisibleChoicesChanged();\n this.clearIncorrectValues();\n }\n return hasChanges;\n };\n QuestionSelectBase.prototype.runItemsEnableCondition = function (values, properties) {\n var _this = this;\n this.setConditionalEnableChoicesRunner();\n var hasChanged = _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].runEnabledConditionsForItems(this.activeChoices, this.conditionChoicesEnableIfRunner, values, properties, function (item) {\n return _this.onEnableItemCallBack(item);\n });\n if (hasChanged) {\n this.clearDisabledValues();\n }\n this.onAfterRunItemsEnableCondition();\n };\n QuestionSelectBase.prototype.onAfterRunItemsEnableCondition = function () { };\n QuestionSelectBase.prototype.onEnableItemCallBack = function (item) {\n return true;\n };\n QuestionSelectBase.prototype.setConditionalChoicesRunner = function () {\n if (this.choicesVisibleIf) {\n if (!this.conditionChoicesVisibleIfRunner) {\n this.conditionChoicesVisibleIfRunner = new _conditions__WEBPACK_IMPORTED_MODULE_7__[\"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 _conditions__WEBPACK_IMPORTED_MODULE_7__[\"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 _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].runConditionsForItems(this.activeChoices, this.getFilteredChoices(), this.areInvisibleElementsShowing\n ? null\n : this.conditionChoicesVisibleIfRunner, values, properties, !this.survey || !this.survey.areInvisibleElementsShowing);\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: false,\n configurable: true\n });\n QuestionSelectBase.prototype.createRestful = function () {\n return new _choicesRestful__WEBPACK_IMPORTED_MODULE_6__[\"ChoicesRestful\"]();\n };\n QuestionSelectBase.prototype.setNewRestfulProperty = function () {\n this.setPropertyValue(\"choicesByUrl\", this.createRestful());\n this.choicesByUrl.owner = this;\n this.choicesByUrl.loadingOwner = this;\n };\n QuestionSelectBase.prototype.getQuestionComment = function () {\n if (!!this.commentValue)\n return this.commentValue;\n if (this.hasComment || 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 QuestionSelectBase.prototype.clearValue = function () {\n _super.prototype.clearValue.call(this);\n this.prevCommentValue = undefined;\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: false,\n configurable: true\n });\n QuestionSelectBase.prototype.setQuestionValue = function (newValue, updateIsAnswered, updateComment) {\n if (updateIsAnswered === void 0) { updateIsAnswered = true; }\n if (updateComment === void 0) { updateComment = true; }\n if (this.isLoadingFromJson ||\n _helpers__WEBPACK_IMPORTED_MODULE_8__[\"Helpers\"].isTwoValueEquals(this.value, newValue))\n return;\n _super.prototype.setQuestionValue.call(this, newValue, updateIsAnswered);\n this.setPropertyValue(\"renderedValue\", this.rendredValueFromData(newValue));\n if (this.hasComment || !updateComment)\n return;\n var isOtherSel = this.isOtherSelected;\n if (isOtherSel && !!this.prevCommentValue) {\n var oldComment = this.prevCommentValue;\n this.prevCommentValue = undefined;\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 = _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"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, false))\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, isFilteredChoices, checkEmptyValue) {\n if (includeOther === void 0) { includeOther = false; }\n if (isFilteredChoices === void 0) { isFilteredChoices = true; }\n if (checkEmptyValue === void 0) { checkEmptyValue = false; }\n if (!checkEmptyValue && this.isValueEmpty(val))\n return false;\n if (includeOther && val == this.otherItem.value)\n return false;\n if (this.hasNone && val == this.noneItem.value)\n return false;\n var choices = isFilteredChoices\n ? this.getFilteredChoices()\n : this.activeChoices;\n return _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].getItemByValue(choices, val) == null;\n };\n QuestionSelectBase.prototype.isValueDisabled = function (val) {\n var itemValue = _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].getItemByValue(this.getFilteredChoices(), val);\n return !!itemValue && !itemValue.isEnabled;\n };\n Object.defineProperty(QuestionSelectBase.prototype, \"choicesByUrl\", {\n /**\n * Use this property to fill the choices from a RESTful service.\n * @see choices\n * @see ChoicesRestful\n * @see [Example: RESTful Dropdown](https://surveyjs.io/Examples/Library/?id=questiontype-dropdownrestfull)\n * @see [Docs: Fill Choices from a RESTful Service](https://surveyjs.io/Documentation/Library/?id=LibraryOverview#fill-the-choices-from-a-restful-service)\n */\n get: function () {\n return this.getPropertyValue(\"choicesByUrl\");\n },\n set: function (val) {\n if (!val)\n return;\n this.setNewRestfulProperty();\n this.choicesByUrl.fromJSON(val.toJSON());\n },\n enumerable: false,\n configurable: true\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 * @see choicesFromQuestion\n */\n get: function () {\n return this.getPropertyValue(\"choices\");\n },\n set: function (newValue) {\n this.setPropertyValue(\"choices\", newValue);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"choicesFromQuestion\", {\n /**\n * Set this property to get choices from the specified question instead of defining them in the current question. This avoids duplication of choices declaration in your survey definition.\n * By setting this property, the \"choices\", \"choicesVisibleIf\", \"choicesEnableIf\" and \"choicesOrder\" properties become invisible, because these question characteristics depend on actions in another (specified) question.\n * Use the `choicesFromQuestionMode` property to filter choices obtained from the specified question.\n * @see choices\n * @see choicesFromQuestionMode\n */\n get: function () {\n return this.getPropertyValue(\"choicesFromQuestion\");\n },\n set: function (val) {\n var question = this.getQuestionWithChoices();\n if (!!question) {\n question.removeFromDependedQuestion(this);\n }\n this.setPropertyValue(\"choicesFromQuestion\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionSelectBase.prototype.addIntoDependedQuestion = function (question) {\n if (!question || question.dependedQuestions.indexOf(this) > -1)\n return;\n question.dependedQuestions.push(this);\n };\n QuestionSelectBase.prototype.removeFromDependedQuestion = function (question) {\n if (!question)\n return;\n var index = question.dependedQuestions.indexOf(this);\n if (index > -1) {\n question.dependedQuestions.splice(index, 1);\n }\n };\n Object.defineProperty(QuestionSelectBase.prototype, \"choicesFromQuestionMode\", {\n /**\n * This property becomes visible when the `choicesFromQuestion` property is selected. The default value is \"all\" (all visible choices from another question are displayed as they are).\n * You can set this property to \"selected\" or \"unselected\" to display only selected or unselected choices from the specified question.\n * @see choicesFromQuestion\n */\n get: function () {\n return this.getPropertyValue(\"choicesFromQuestionMode\");\n },\n set: function (val) {\n this.setPropertyValue(\"choicesFromQuestionMode\", val);\n },\n enumerable: false,\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: false,\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: false,\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: false,\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: false,\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\", _surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"surveyLocalization\"].getString(\"otherItemText\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"otherText\", val);\n this.onVisibleChoicesChanged();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"locOtherText\", {\n get: function () {\n return this.getLocalizableString(\"otherText\");\n },\n enumerable: false,\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: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"locOtherPlaceHolder\", {\n get: function () {\n return this.getLocalizableString(\"otherPlaceHolder\");\n },\n enumerable: false,\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\", _surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"surveyLocalization\"].getString(\"otherRequiredError\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"otherErrorText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"locOtherErrorText\", {\n get: function () {\n return this.getLocalizableString(\"otherErrorText\");\n },\n enumerable: false,\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: false,\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: false,\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.getFilteredChoices();\n var res = this.sortVisibleChoices(this.getFilteredChoices().slice());\n this.addToVisibleChoices(res, this.isAddDefaultItems);\n return res;\n };\n QuestionSelectBase.prototype.canUseFilteredChoices = function () {\n return (!this.isAddDefaultItems &&\n !this.hasNone &&\n !this.hasOther &&\n this.choicesOrder == \"none\");\n };\n QuestionSelectBase.prototype.addToVisibleChoices = function (items, isAddAll) {\n if (isAddAll) {\n if (!this.newItemValue) {\n this.newItemValue = new _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"](\"newitem\"); //TODO\n }\n items.push(this.newItemValue);\n }\n if (this.supportOther() && (isAddAll || this.hasOther)) {\n items.push(this.otherItem);\n }\n if (this.supportNone() && (isAddAll || this.hasNone)) {\n items.push(this.noneItem);\n }\n };\n /**\n * For internal use in SurveyJS Creator V2.\n */\n QuestionSelectBase.prototype.isItemInList = function (item) {\n if (item === this.otherItem)\n return this.hasOther;\n if (item === this.noneItem)\n return this.hasNone;\n if (item === this.newItemValue)\n return false;\n return true;\n };\n Object.defineProperty(QuestionSelectBase.prototype, \"isAddDefaultItems\", {\n get: function () {\n return (_settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].supportCreatorV2 && this.isDesignMode && !this.parentQuestion);\n },\n enumerable: false,\n configurable: true\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 = _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"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.getDisplayValueEmpty = function () {\n return _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].getTextOrHtmlByValue(this.visibleChoices, undefined);\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 = _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].getTextOrHtmlByValue(items, val);\n return str == \"\" && val ? val : str;\n };\n QuestionSelectBase.prototype.getFilteredChoices = function () {\n return this.filteredChoicesValue\n ? this.filteredChoicesValue\n : this.activeChoices;\n };\n Object.defineProperty(QuestionSelectBase.prototype, \"activeChoices\", {\n get: function () {\n var question = this.getQuestionWithChoices();\n if (!!question) {\n this.addIntoDependedQuestion(question);\n return this.getChoicesFromQuestion(question);\n }\n return this.choicesFromUrl ? this.choicesFromUrl : this.getChoices();\n },\n enumerable: false,\n configurable: true\n });\n QuestionSelectBase.prototype.getQuestionWithChoices = function () {\n if (!this.choicesFromQuestion || !this.survey)\n return null;\n var res = this.survey.getQuestionByName(this.choicesFromQuestion);\n return !!res && !!res.visibleChoices && res !== this ? res : null;\n };\n QuestionSelectBase.prototype.getChoicesFromQuestion = function (question) {\n var res = [];\n var isSelected = this.choicesFromQuestionMode == \"selected\"\n ? true\n : this.choicesFromQuestionMode == \"unselected\"\n ? false\n : undefined;\n var choices = question.visibleChoices;\n for (var i = 0; i < choices.length; i++) {\n if (this.isBuiltInChoice(choices[i], question))\n continue;\n if (isSelected === undefined) {\n res.push(choices[i]);\n continue;\n }\n var itemsSelected = question.isItemSelected(choices[i]);\n if ((itemsSelected && isSelected) || (!itemsSelected && !isSelected)) {\n res.push(choices[i]);\n }\n }\n return res;\n };\n Object.defineProperty(QuestionSelectBase.prototype, \"hasActiveChoices\", {\n get: function () {\n var choices = this.visibleChoices;\n if (!choices || choices.length == 0) {\n this.onVisibleChoicesChanged();\n choices = this.visibleChoices;\n }\n for (var i = 0; i < choices.length; i++) {\n if (!this.isBuiltInChoice(choices[i], this))\n return true;\n }\n return false;\n },\n enumerable: false,\n configurable: true\n });\n QuestionSelectBase.prototype.isBuiltInChoice = function (item, question) {\n return (item === question.noneItem ||\n item === question.otherItem ||\n item === question.newItemValue);\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 this.isSupportProperty(\"hasOther\");\n };\n QuestionSelectBase.prototype.supportNone = function () {\n return this.isSupportProperty(\"hasNone\");\n };\n QuestionSelectBase.prototype.isSupportProperty = function (propName) {\n return (!this.isDesignMode ||\n _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].findProperty(this.getType(), propName).visible);\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 _error__WEBPACK_IMPORTED_MODULE_5__[\"OtherEmptyError\"](this.otherErrorText, this));\n };\n QuestionSelectBase.prototype.setSurveyImpl = function (value) {\n _super.prototype.setSurveyImpl.call(this, value);\n this.runChoicesByUrl();\n if (this.isAddDefaultItems) {\n this.updateVisibleChoices();\n }\n };\n QuestionSelectBase.prototype.setSurveyCore = function (value) {\n _super.prototype.setSurveyCore.call(this, value);\n if (!!value && !!this.choicesFromQuestion) {\n this.onVisibleChoicesChanged();\n }\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 this.runChoicesByUrl();\n this.onVisibleChoicesChanged();\n _super.prototype.onSurveyLoad.call(this);\n };\n QuestionSelectBase.prototype.onAnyValueChanged = function (name) {\n _super.prototype.onAnyValueChanged.call(this, name);\n if (name != this.getValueName()) {\n this.runChoicesByUrl();\n }\n if (!!name && name == this.choicesFromQuestion) {\n this.onVisibleChoicesChanged();\n }\n };\n QuestionSelectBase.prototype.updateValueFromSurvey = function (newValue) {\n var newComment = \"\";\n if (this.hasOther &&\n !this.isRunningChoices &&\n !this.choicesByUrl.isRunning &&\n this.getStoreOthersAsComment()) {\n if (this.hasUnknownValue(newValue) && !this.getHasOther(newValue)) {\n newComment = this.getCommentFromValue(newValue);\n newValue = this.setOtherValueIntoValue(newValue);\n }\n else {\n newComment = this.data.getComment(this.getValueName());\n }\n }\n _super.prototype.updateValueFromSurvey.call(this, newValue);\n if (!!newComment) {\n this.setNewComment(newComment);\n }\n };\n QuestionSelectBase.prototype.getCommentFromValue = function (newValue) {\n return newValue;\n };\n QuestionSelectBase.prototype.setOtherValueIntoValue = function (newValue) {\n return this.otherItem.value;\n };\n QuestionSelectBase.prototype.runChoicesByUrl = function () {\n if (!this.choicesByUrl || this.isLoadingFromJson || this.isRunningChoices)\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.isRunningChoices = true;\n this.choicesByUrl.run(processor);\n this.isRunningChoices = false;\n };\n QuestionSelectBase.prototype.onBeforeSendRequest = function () {\n if (_settings__WEBPACK_IMPORTED_MODULE_9__[\"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 || this.choicesByUrl.allowEmptyResponse)) {\n newChoices = new Array();\n _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].setData(newChoices, array);\n }\n if (!!newChoices) {\n for (var i = 0; i < newChoices.length; i++) {\n newChoices[i].locOwner = this;\n }\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 = !_helpers__WEBPACK_IMPORTED_MODULE_8__[\"Helpers\"].isTwoValueEquals(this.value, newValue.value);\n try {\n if (!this.isValueEmpty(newValue.value)) {\n this.allowNotifyValueChanged = false;\n this.setQuestionValue(undefined, true, false);\n }\n this.allowNotifyValueChanged = hasChanged;\n if (hasChanged) {\n this.value = newValue.value;\n }\n else {\n this.setQuestionValue(newValue.value);\n }\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 = _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"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 = _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].getItemByValue(newChoices, value);\n if (!!item) {\n value = item.value;\n }\n return { value: value };\n };\n QuestionSelectBase.prototype.updateChoicesDependedQuestions = function () {\n if (this.isUpdatingChoicesDependedQuestions)\n return;\n this.isUpdatingChoicesDependedQuestions = true;\n for (var i = 0; i < this.dependedQuestions.length; i++) {\n this.dependedQuestions[i].onVisibleChoicesChanged();\n this.dependedQuestions[i].updateChoicesDependedQuestions();\n }\n this.isUpdatingChoicesDependedQuestions = false;\n };\n QuestionSelectBase.prototype.onSurveyValueChanged = function (newValue) {\n _super.prototype.onSurveyValueChanged.call(this, newValue);\n if (this.isLoadingFromJson)\n return;\n this.updateChoicesDependedQuestions();\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 this.updateChoicesDependedQuestions();\n };\n QuestionSelectBase.prototype.updateVisibilityBasedOnChoices = function () {\n if (this.hideIfChoicesEmpty) {\n var filteredChoices = this.getFilteredChoices();\n this.visible = !filteredChoices || 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 _helpers__WEBPACK_IMPORTED_MODULE_8__[\"Helpers\"].randomizeArray(array);\n };\n QuestionSelectBase.prototype.clearIncorrectValues = function () {\n if (this.keepIncorrectValues || this.isEmpty())\n return;\n if (!!this.survey &&\n this.survey.questionCountByValueName(this.getValueName()) > 1)\n return;\n if (!!this.choicesByUrl &&\n !this.choicesByUrl.isEmpty &&\n (!this.choicesFromUrl || this.choicesFromUrl.length == 0))\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 /**\n * Returns true if item is selected\n * @param item checkbox or radio item value\n */\n QuestionSelectBase.prototype.isItemSelected = function (item) {\n return item.value === this.value;\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, true, 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.getItemIndex = function (item) {\n return this.visibleChoices.indexOf(item);\n };\n QuestionSelectBase.prototype.getItemClass = function (item) {\n var itemClass = this.cssClasses.item;\n var isDisabled = this.isReadOnly || !item.isEnabled;\n var isChecked = this.isItemSelected(item) ||\n (this.isOtherSelected && this.otherItem.value === item.value);\n var allowHover = !isDisabled && !isChecked && !(!!this.survey && this.survey.isDesignMode);\n var isNone = item === this.noneItem;\n if (!this.hasColumns) {\n itemClass +=\n this.colCount === 0\n ? \" \" + this.cssClasses.itemInline\n : \" sv-q-col-\" + this.colCount;\n }\n if (isDisabled && !!this.cssClasses.itemDisabled)\n itemClass += \" \" + this.cssClasses.itemDisabled;\n if (isChecked && !!this.cssClasses.itemChecked)\n itemClass += \" \" + this.cssClasses.itemChecked;\n if (allowHover && !!this.cssClasses.itemHover)\n itemClass += \" \" + this.cssClasses.itemHover;\n if (isNone && !!this.cssClasses.itemNone)\n itemClass += \" \" + this.cssClasses.itemNone;\n return itemClass;\n };\n QuestionSelectBase.prototype.getLabelClass = function (item) {\n var labelClass = this.cssClasses.label;\n if (this.isItemSelected(item)) {\n labelClass += \" \" + this.cssClasses.labelChecked;\n }\n return labelClass;\n };\n QuestionSelectBase.prototype.getControlLabelClass = function (item) {\n var controlLabelClass = this.cssClasses.controlLabel;\n if (this.isItemSelected(item)) {\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 if (_settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].showItemsInOrder == \"column\") {\n var prevIndex = 0;\n var leftElementsCount = this.visibleChoices.length % colCount;\n for (var i = 0; i < colCount; i++) {\n var column = [];\n for (var j = prevIndex; j < prevIndex + Math.floor(this.visibleChoices.length / colCount); j++) {\n column.push(this.visibleChoices[j]);\n }\n if (leftElementsCount > 0) {\n leftElementsCount--;\n column.push(this.visibleChoices[j]);\n j++;\n }\n prevIndex = j;\n columns.push(column);\n }\n }\n else {\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 }\n return columns;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"hasColumns\", {\n get: function () {\n return this.colCount > 1;\n },\n enumerable: false,\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 QuestionSelectBase.prototype.getItemValueWrapperComponentName = function (item) {\n var survey = this.survey;\n if (survey) {\n return survey.getItemValueWrapperComponentName(item, this);\n }\n return _survey__WEBPACK_IMPORTED_MODULE_1__[\"SurveyModel\"].TemplateRendererComponentName;\n };\n QuestionSelectBase.prototype.getItemValueWrapperComponentData = function (item) {\n var survey = this.survey;\n if (survey) {\n return survey.getItemValueWrapperComponentData(item, this);\n }\n return item;\n };\n return QuestionSelectBase;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"Question\"]));\n\n/**\n * A base class for checkbox and radiogroup questions. It introduced a colCount property.\n */\nvar QuestionCheckboxBase = /** @class */ (function (_super) {\n __extends(QuestionCheckboxBase, _super);\n function QuestionCheckboxBase(name) {\n return _super.call(this, name) || 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: false,\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 QuestionCheckboxBase.prototype.onParentQuestionChanged = function () {\n this.onVisibleChoicesChanged();\n };\n QuestionCheckboxBase.prototype.getSearchableItemValueKeys = function (keys) {\n keys.push(\"choices\");\n };\n return QuestionCheckboxBase;\n}(QuestionSelectBase));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"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 \"choicesFromQuestion:question_selectbase\",\n {\n name: \"choices:itemvalue[]\",\n baseValue: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"surveyLocalization\"].getString(\"choices_Item\");\n },\n dependsOn: \"choicesFromQuestion\",\n visibleIf: function (obj) {\n return !obj.choicesFromQuestion;\n },\n },\n {\n name: \"choicesFromQuestionMode\",\n default: \"all\",\n choices: [\"all\", \"selected\", \"unselected\"],\n dependsOn: \"choicesFromQuestion\",\n visibleIf: function (obj) {\n return !!obj.choicesFromQuestion;\n },\n },\n {\n name: \"choicesOrder\",\n default: \"none\",\n choices: [\"none\", \"asc\", \"desc\", \"random\"],\n dependsOn: \"choicesFromQuestion\",\n visibleIf: function (obj) {\n return !obj.choicesFromQuestion;\n },\n },\n {\n name: \"choicesByUrl:restfull\",\n className: \"ChoicesRestful\",\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 {\n name: \"choicesVisibleIf:condition\",\n dependsOn: \"choicesFromQuestion\",\n visibleIf: function (obj) {\n return !obj.choicesFromQuestion;\n },\n },\n {\n name: \"choicesEnableIf:condition\",\n dependsOn: \"choicesFromQuestion\",\n visibleIf: function (obj) {\n return !obj.choicesFromQuestion;\n },\n },\n \"hasOther:boolean\",\n \"hasNone:boolean\",\n {\n name: \"otherPlaceHolder\",\n serializationProperty: \"locOtherPlaceHolder\",\n dependsOn: \"hasOther\",\n visibleIf: function (obj) {\n return obj.hasOther;\n },\n },\n {\n name: \"noneText\",\n serializationProperty: \"locNoneText\",\n dependsOn: \"hasNone\",\n visibleIf: function (obj) {\n return obj.hasNone;\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_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"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\n/***/ \"./src/question_boolean.ts\":\n/*!*********************************!*\\\n !*** ./src/question_boolean.ts ***!\n \\*********************************/\n/*! exports provided: QuestionBooleanModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionBooleanModel\", function() { return QuestionBooleanModel; });\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\n\n/**\n * A Model for a boolean question.\n */\nvar QuestionBooleanModel = /** @class */ (function (_super) {\n __extends(QuestionBooleanModel, _super);\n function QuestionBooleanModel(name) {\n var _this = _super.call(this, name) || this;\n _this.createLocalizableString(\"labelFalse\", _this, true);\n _this.createLocalizableString(\"labelTrue\", _this, true);\n _this.locLabelFalse.onGetTextCallback = function (text) {\n return !!text\n ? text\n : _surveyStrings__WEBPACK_IMPORTED_MODULE_3__[\"surveyLocalization\"].getString(\"booleanUncheckedLabel\");\n };\n _this.locLabelTrue.onGetTextCallback = function (text) {\n return !!text\n ? text\n : _surveyStrings__WEBPACK_IMPORTED_MODULE_3__[\"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 QuestionBooleanModel.prototype.supportGoNextPageAutomatic = function () {\n return this.renderAs !== \"checkbox\";\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: false,\n configurable: true\n });\n Object.defineProperty(QuestionBooleanModel.prototype, \"hasTitle\", {\n get: function () {\n return true;\n },\n enumerable: false,\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 this.setCheckedValue(val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionBooleanModel.prototype.setCheckedValue = function (val) {\n if (this.isValueEmpty(val)) {\n this.value = null;\n }\n else {\n this.value = val == true ? this.getValueTrue() : this.getValueFalse();\n }\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: false,\n configurable: true\n });\n QuestionBooleanModel.prototype.getDefaultValue = function () {\n if (this.defaultValue == \"indeterminate\")\n return null;\n if (this.defaultValue === undefined)\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: false,\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: false,\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: false,\n configurable: true\n });\n Object.defineProperty(QuestionBooleanModel.prototype, \"locLabelTrue\", {\n get: function () {\n return this.getLocalizableString(\"labelTrue\");\n },\n enumerable: false,\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: false,\n configurable: true\n });\n Object.defineProperty(QuestionBooleanModel.prototype, \"locLabelFalse\", {\n get: function () {\n return this.getLocalizableString(\"labelFalse\");\n },\n enumerable: false,\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.setCheckedValue(true);\n if (this.defaultValue == \"false\")\n this.setCheckedValue(false);\n if (this.defaultValue == \"indeterminate\")\n this.setCheckedValue(null);\n };\n QuestionBooleanModel.prototype.getDisplayValueCore = function (keysAsText, value) {\n if (value == this.getValueTrue())\n return this.locLabelTrue.textOrHtml;\n return this.locLabelFalse.textOrHtml;\n };\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ localizable: true })\n ], QuestionBooleanModel.prototype, \"label\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], QuestionBooleanModel.prototype, \"showTitle\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], QuestionBooleanModel.prototype, \"valueTrue\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], QuestionBooleanModel.prototype, \"valueFalse\", void 0);\n return QuestionBooleanModel;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"Question\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"boolean\", [\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 { name: \"renderAs\", default: \"default\", visible: false },\n], function () {\n return new QuestionBooleanModel(\"\");\n}, \"question\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_0__[\"QuestionFactory\"].Instance.registerQuestion(\"boolean\", function (name) {\n return new QuestionBooleanModel(name);\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_buttongroup.ts\":\n/*!*************************************!*\\\n !*** ./src/question_buttongroup.ts ***!\n \\*************************************/\n/*! exports provided: ButtonGroupItemValue, QuestionButtonGroupModel, ButtonGroupItemModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroupItemValue\", function() { return ButtonGroupItemValue; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionButtonGroupModel\", function() { return QuestionButtonGroupModel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroupItemModel\", function() { return ButtonGroupItemModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\n/* harmony import */ var _question_baseselect__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question_baseselect */ \"./src/question_baseselect.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\nvar ButtonGroupItemValue = /** @class */ (function (_super) {\n __extends(ButtonGroupItemValue, _super);\n function ButtonGroupItemValue(value, text, typeName) {\n if (text === void 0) { text = null; }\n if (typeName === void 0) { typeName = \"buttongroupitemvalue\"; }\n var _this = _super.call(this, value, text, typeName) || this;\n _this.typeName = typeName;\n return _this;\n }\n ButtonGroupItemValue.prototype.getType = function () {\n return !!this.typeName ? this.typeName : \"buttongroupitemvalue\";\n };\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])()\n ], ButtonGroupItemValue.prototype, \"iconName\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])()\n ], ButtonGroupItemValue.prototype, \"iconSize\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])()\n ], ButtonGroupItemValue.prototype, \"showCaption\", void 0);\n return ButtonGroupItemValue;\n}(_itemvalue__WEBPACK_IMPORTED_MODULE_1__[\"ItemValue\"]));\n\n/**\n * A Model for a button group question.\n */\nvar QuestionButtonGroupModel = /** @class */ (function (_super) {\n __extends(QuestionButtonGroupModel, _super);\n function QuestionButtonGroupModel(name) {\n return _super.call(this, name) || this;\n }\n QuestionButtonGroupModel.prototype.getType = function () {\n return \"buttongroup\";\n };\n QuestionButtonGroupModel.prototype.getItemValueType = function () {\n return \"buttongroupitemvalue\";\n };\n QuestionButtonGroupModel.prototype.supportOther = function () {\n return false;\n };\n return QuestionButtonGroupModel;\n}(_question_baseselect__WEBPACK_IMPORTED_MODULE_2__[\"QuestionCheckboxBase\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"buttongroup\", [\n {\n name: \"choices:buttongroupitemvalue[]\",\n },\n], function () {\n return new QuestionButtonGroupModel(\"\");\n}, \"checkboxbase\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"buttongroupitemvalue\", [\n { name: \"showCaption:boolean\", default: true },\n { name: \"iconName:text\" },\n { name: \"iconSize:number\" },\n], function (value) { return new ButtonGroupItemValue(value); }, \"itemvalue\");\n// QuestionFactory.Instance.registerQuestion(\"buttongroup\", name => {\n// var q = new QuestionButtonGroupModel(name);\n// q.choices = QuestionFactory.DefaultChoices;\n// return q;\n// });\nvar ButtonGroupItemModel = /** @class */ (function () {\n function ButtonGroupItemModel(question, item, index) {\n this.question = question;\n this.item = item;\n this.index = index;\n }\n Object.defineProperty(ButtonGroupItemModel.prototype, \"value\", {\n get: function () {\n return this.item.value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ButtonGroupItemModel.prototype, \"iconName\", {\n get: function () {\n return this.item.iconName;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ButtonGroupItemModel.prototype, \"iconSize\", {\n get: function () {\n return this.item.iconSize || 24;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ButtonGroupItemModel.prototype, \"caption\", {\n get: function () {\n return this.item.locText;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ButtonGroupItemModel.prototype, \"showCaption\", {\n get: function () {\n return this.item.showCaption || this.item.showCaption === undefined;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ButtonGroupItemModel.prototype, \"isRequired\", {\n get: function () {\n return this.question.isRequired;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ButtonGroupItemModel.prototype, \"selected\", {\n get: function () {\n return this.question.isItemSelected(this.item);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ButtonGroupItemModel.prototype, \"readOnly\", {\n get: function () {\n return this.question.isInputReadOnly || !this.item.isEnabled;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ButtonGroupItemModel.prototype, \"name\", {\n get: function () {\n return this.question.name + \"_\" + this.question.id;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ButtonGroupItemModel.prototype, \"id\", {\n get: function () {\n return this.question.inputId + \"_\" + this.index;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ButtonGroupItemModel.prototype, \"hasErrors\", {\n get: function () {\n return this.question.errors.length > 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ButtonGroupItemModel.prototype, \"describedBy\", {\n get: function () {\n return this.question.errors.length > 0\n ? this.question.id + \"_errors\"\n : null;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ButtonGroupItemModel.prototype, \"labelClass\", {\n get: function () {\n var css = this.question.cssClasses.item;\n if (this.selected) {\n css += \" \" + this.question.cssClasses.itemSelected;\n }\n if (!this.readOnly && !this.selected) {\n css += \" \" + this.question.cssClasses.itemHover;\n }\n if (this.question.isReadOnly || !this.item.isEnabled) {\n css += \" \" + this.question.cssClasses.itemDisabled;\n }\n return css;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ButtonGroupItemModel.prototype, \"css\", {\n get: function () {\n return {\n label: this.labelClass,\n icon: this.question.cssClasses.itemIcon,\n control: this.question.cssClasses.itemControl,\n caption: this.question.cssClasses.itemCaption,\n decorator: this.question.cssClasses.itemDecorator,\n };\n },\n enumerable: false,\n configurable: true\n });\n ButtonGroupItemModel.prototype.onChange = function () {\n this.question.renderedValue = this.item.value;\n };\n return ButtonGroupItemModel;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/question_checkbox.ts\":\n/*!**********************************!*\\\n !*** ./src/question_checkbox.ts ***!\n \\**********************************/\n/*! exports provided: QuestionCheckboxModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionCheckboxModel\", function() { return QuestionCheckboxModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _question_baseselect__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question_baseselect */ \"./src/question_baseselect.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n\n/**\n * A Model for a checkbox question\n */\nvar QuestionCheckboxModel = /** @class */ (function (_super) {\n __extends(QuestionCheckboxModel, _super);\n function QuestionCheckboxModel(name) {\n var _this = _super.call(this, name) || this;\n _this.selectAllItemValue = new _itemvalue__WEBPACK_IMPORTED_MODULE_4__[\"ItemValue\"](\"selectall\");\n _this.invisibleOldValues = {};\n _this.isChangingValueOnClearIncorrect = false;\n var selectAllItemText = _this.createLocalizableString(\"selectAllText\", _this, true);\n selectAllItemText.onGetTextCallback = function (text) {\n return !!text ? text : _surveyStrings__WEBPACK_IMPORTED_MODULE_5__[\"surveyLocalization\"].getString(\"selectAllItemText\");\n };\n _this.selectAllItem.locOwner = _this;\n _this.selectAllItem.setLocText(selectAllItemText);\n _this.registerFunctionOnPropertiesValueChanged([\"hasSelectAll\", \"selectAllText\"], function () {\n _this.onVisibleChoicesChanged();\n });\n return _this;\n }\n Object.defineProperty(QuestionCheckboxModel.prototype, \"ariaRole\", {\n get: function () {\n return \"group\";\n },\n enumerable: false,\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: false,\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\", _surveyStrings__WEBPACK_IMPORTED_MODULE_5__[\"surveyLocalization\"].getString(\"selectAllItemText\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"selectAllText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionCheckboxModel.prototype, \"locSelectAllText\", {\n get: function () {\n return this.getLocalizableString(\"selectAllText\");\n },\n enumerable: false,\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: false,\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: false,\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 /**\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 (_helpers__WEBPACK_IMPORTED_MODULE_3__[\"Helpers\"].isTwoValueEquals(val[i], item.value))\n return true;\n }\n return false;\n };\n Object.defineProperty(QuestionCheckboxModel.prototype, \"maxSelectedChoices\", {\n /**\n * Set this property different to 0 to limit the number of selected choices in the checkbox.\n */\n get: function () {\n return this.getPropertyValue(\"maxSelectedChoices\", 0);\n },\n set: function (val) {\n if (val < 0)\n val = 0;\n this.setPropertyValue(\"maxSelectedChoices\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionCheckboxModel.prototype, \"selectedItems\", {\n /**\n * Return the selected items in the checkbox. Returns empty array if the value is empty\n */\n get: function () {\n if (this.isEmpty())\n return [];\n var val = this.value;\n var res = [];\n for (var i = 0; i < val.length; i++) {\n res.push(_itemvalue__WEBPACK_IMPORTED_MODULE_4__[\"ItemValue\"].getItemByValue(this.visibleChoices, val[i]));\n }\n return res;\n },\n enumerable: false,\n configurable: true\n });\n QuestionCheckboxModel.prototype.onEnableItemCallBack = function (item) {\n if (!this.shouldCheckMaxSelectedChoices())\n return true;\n return this.isItemSelected(item);\n };\n QuestionCheckboxModel.prototype.onAfterRunItemsEnableCondition = function () {\n if (this.maxSelectedChoices < 1)\n return;\n if (this.hasSelectAll) {\n this.selectAllItem.setIsEnabled(this.maxSelectedChoices >= this.activeChoices.length);\n }\n if (this.hasOther) {\n this.otherItem.setIsEnabled(!this.shouldCheckMaxSelectedChoices() || this.isOtherSelected);\n }\n };\n QuestionCheckboxModel.prototype.shouldCheckMaxSelectedChoices = function () {\n if (this.maxSelectedChoices < 1)\n return false;\n var val = this.value;\n var len = !Array.isArray(val) ? 0 : val.length;\n return len >= this.maxSelectedChoices;\n };\n QuestionCheckboxModel.prototype.getItemClass = function (item) {\n var val = this.value; //trigger dependencies from koValue for knockout\n var itemClass = _super.prototype.getItemClass.call(this, item);\n var isSelectAll = item === this.selectAllItem;\n if (isSelectAll && !!this.cssClasses.itemSelectAll)\n itemClass += \" \" + this.cssClasses.itemSelectAll;\n return itemClass;\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 (_helpers__WEBPACK_IMPORTED_MODULE_3__[\"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.getIsMultipleValue = function () {\n return true;\n };\n QuestionCheckboxModel.prototype.getCommentFromValue = function (newValue) {\n var ind = this.getFirstUnknownIndex(newValue);\n if (ind < 0)\n return \"\";\n return newValue[ind];\n };\n QuestionCheckboxModel.prototype.setOtherValueIntoValue = function (newValue) {\n var ind = this.getFirstUnknownIndex(newValue);\n if (ind < 0)\n return newValue;\n newValue.splice(ind, 1, this.otherItem.value);\n return newValue;\n };\n QuestionCheckboxModel.prototype.getFirstUnknownIndex = function (newValue) {\n if (!Array.isArray(newValue))\n return -1;\n for (var i = 0; i < newValue.length; i++) {\n if (this.hasUnknownValue(newValue[i]))\n return i;\n }\n return -1;\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.hasSelectAll && _super.prototype.canUseFilteredChoices.call(this);\n };\n QuestionCheckboxModel.prototype.supportSelectAll = function () {\n return this.isSupportProperty(\"hasSelectAll\");\n };\n QuestionCheckboxModel.prototype.addToVisibleChoices = function (items, isAddAll) {\n if (this.supportSelectAll() && (isAddAll || this.hasSelectAll)) {\n items.unshift(this.selectAllItem);\n }\n _super.prototype.addToVisibleChoices.call(this, items, isAddAll);\n };\n QuestionCheckboxModel.prototype.isBuiltInChoice = function (item, question) {\n return (item === question.selectAllItem ||\n _super.prototype.isBuiltInChoice.call(this, item, question));\n };\n /**\n * For internal use in SurveyJS Creator V2.\n */\n QuestionCheckboxModel.prototype.isItemInList = function (item) {\n if (item == this.selectAllItem)\n return this.hasSelectAll;\n return _super.prototype.isItemInList.call(this, item);\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 _helpers__WEBPACK_IMPORTED_MODULE_3__[\"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 = _itemvalue__WEBPACK_IMPORTED_MODULE_4__[\"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 if (!this.hasActiveChoices)\n return 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], true, false)) {\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 return QuestionCheckboxModel;\n}(_question_baseselect__WEBPACK_IMPORTED_MODULE_2__[\"QuestionCheckboxBase\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"checkbox\", [\n \"hasSelectAll:boolean\",\n { name: \"maxSelectedChoices:number\", default: 0 },\n { name: \"selectAllText\", serializationProperty: \"locSelectAllText\" },\n], function () {\n return new QuestionCheckboxModel(\"\");\n}, \"checkboxbase\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_1__[\"QuestionFactory\"].Instance.registerQuestion(\"checkbox\", function (name) {\n var q = new QuestionCheckboxModel(name);\n q.choices = _questionfactory__WEBPACK_IMPORTED_MODULE_1__[\"QuestionFactory\"].DefaultChoices;\n return q;\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_comment.ts\":\n/*!*********************************!*\\\n !*** ./src/question_comment.ts ***!\n \\*********************************/\n/*! exports provided: QuestionCommentModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionCommentModel\", function() { return QuestionCommentModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _question_textbase__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question_textbase */ \"./src/question_textbase.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n/**\n * A Model for a comment question\n */\nvar QuestionCommentModel = /** @class */ (function (_super) {\n __extends(QuestionCommentModel, _super);\n function QuestionCommentModel() {\n return _super !== null && _super.apply(this, arguments) || this;\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: false,\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: false,\n configurable: true\n });\n QuestionCommentModel.prototype.getType = function () {\n return \"comment\";\n };\n return QuestionCommentModel;\n}(_question_textbase__WEBPACK_IMPORTED_MODULE_2__[\"QuestionTextBase\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"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 {\n name: \"textUpdateMode\",\n default: \"default\",\n choices: [\"default\", \"onBlur\", \"onTyping\"],\n },\n], function () {\n return new QuestionCommentModel(\"\");\n}, \"textbase\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_1__[\"QuestionFactory\"].Instance.registerQuestion(\"comment\", function (name) {\n return new QuestionCommentModel(name);\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_custom.ts\":\n/*!********************************!*\\\n !*** ./src/question_custom.ts ***!\n \\********************************/\n/*! exports provided: ComponentQuestionJSON, ComponentCollection, QuestionCustomModelBase, QuestionCustomModel, QuestionCompositeModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ComponentQuestionJSON\", function() { return ComponentQuestionJSON; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ComponentCollection\", function() { return ComponentCollection; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionCustomModelBase\", function() { return QuestionCustomModelBase; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionCustomModel\", function() { return QuestionCustomModel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionCompositeModel\", function() { return QuestionCompositeModel; });\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _survey_element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./survey-element */ \"./src/survey-element.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _textPreProcessor__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./textPreProcessor */ \"./src/textPreProcessor.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\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 _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"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.onValueChanged = function (question, name, newValue) {\n if (!this.json.onValueChanged)\n return;\n this.json.onValueChanged(question, name, 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: false,\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 '\" +\n name +\n \"'\";\n }\n if (!!_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"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: false,\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 _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"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 __extends(QuestionCustomModelBase, _super);\n function QuestionCustomModelBase(name, customQuestion) {\n var _this = _super.call(this, name) || this;\n _this.customQuestion = customQuestion;\n _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"CustomPropertiesCollection\"].createProperties(_this);\n _survey_element__WEBPACK_IMPORTED_MODULE_2__[\"SurveyElement\"].CreateDisabledDesignElements = true;\n _this.createWrapper();\n _survey_element__WEBPACK_IMPORTED_MODULE_2__[\"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.locStrsChanged = function () {\n _super.prototype.locStrsChanged.call(this);\n if (!!this.getElement()) {\n this.getElement().locStrsChanged();\n }\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.getSurveyData = function () {\n return this;\n };\n // getSurvey(): ISurvey {\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 if (!!this.customQuestion) {\n this.customQuestion.onValueChanged(this, name, newValue);\n }\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: false,\n configurable: true\n });\n QuestionCustomModelBase.prototype.indexOf = function (el) {\n return -1;\n };\n QuestionCustomModelBase.prototype.ensureRowsVisibility = function () {\n // do nothing\n };\n return QuestionCustomModelBase;\n}(_question__WEBPACK_IMPORTED_MODULE_0__[\"Question\"]));\n\nvar QuestionCustomModel = /** @class */ (function (_super) {\n __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.onAnyValueChanged = function (name) {\n _super.prototype.onAnyValueChanged.call(this, name);\n if (!!this.contentQuestion) {\n this.contentQuestion.onAnyValueChanged(name);\n }\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: false,\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 || !_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].findClass(qType))\n throw \"type attribute in questionJSON is empty or incorrect\";\n res = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"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 !_helpers__WEBPACK_IMPORTED_MODULE_3__[\"Helpers\"].isTwoValueEquals(this.contentQuestion.value, newValue)) {\n this.contentQuestion.value = this.getUnbindValue(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.getValueCore = function () {\n if (!!this.contentQuestion)\n return this.contentQuestion.value;\n return _super.prototype.getValueCore.call(this);\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 QuestionCustomModel.prototype.getDisplayValueCore = function (keyAsText, value) {\n return !!this.contentQuestion\n ? this.contentQuestion.getDisplayValue(keyAsText, value)\n : _super.prototype.getDisplayValueCore.call(this, keyAsText, value);\n };\n return QuestionCustomModel;\n}(QuestionCustomModelBase));\n\nvar QuestionCompositeTextProcessor = /** @class */ (function (_super) {\n __extends(QuestionCompositeTextProcessor, _super);\n function QuestionCompositeTextProcessor(composite, variableName) {\n var _this = _super.call(this, variableName) || this;\n _this.composite = composite;\n _this.variableName = variableName;\n return _this;\n }\n Object.defineProperty(QuestionCompositeTextProcessor.prototype, \"survey\", {\n get: function () {\n return this.composite.survey;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionCompositeTextProcessor.prototype, \"panel\", {\n get: function () {\n return this.composite.contentPanel;\n },\n enumerable: false,\n configurable: true\n });\n return QuestionCompositeTextProcessor;\n}(_textPreProcessor__WEBPACK_IMPORTED_MODULE_4__[\"QuestionTextProcessor\"]));\nvar QuestionCompositeModel = /** @class */ (function (_super) {\n __extends(QuestionCompositeModel, _super);\n function QuestionCompositeModel(name, customQuestion) {\n var _this = _super.call(this, name, customQuestion) || this;\n _this.customQuestion = customQuestion;\n _this.settingNewValue = false;\n _this.textProcessing = new QuestionCompositeTextProcessor(_this, QuestionCompositeModel.ItemVariableName);\n return _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: false,\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 (reNew) {\n _super.prototype.updateElementCss.call(this, reNew);\n if (this.contentPanel) {\n this.contentPanel.updateElementCss(reNew);\n }\n };\n QuestionCompositeModel.prototype.getTextProcessor = function () {\n return this.textProcessing;\n };\n QuestionCompositeModel.prototype.clearValueIfInvisible = function () {\n _super.prototype.clearValueIfInvisible.call(this);\n var questions = this.contentPanel.questions;\n for (var i = 0; i < questions.length; i++) {\n questions[i].clearValueIfInvisible();\n }\n };\n QuestionCompositeModel.prototype.onAnyValueChanged = function (name) {\n _super.prototype.onAnyValueChanged.call(this, name);\n var questions = this.contentPanel.questions;\n for (var i = 0; i < questions.length; i++) {\n questions[i].onAnyValueChanged(name);\n }\n };\n QuestionCompositeModel.prototype.createPanel = function () {\n var res = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].createClass(\"panel\");\n res.showQuestionNumbers = \"off\";\n res.renderWidth = \"100%\";\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, this);\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[QuestionCompositeModel.ItemVariableName];\n values[QuestionCompositeModel.ItemVariableName] = this.contentPanel.getValue();\n this.contentPanel.runCondition(values, properties);\n delete values[QuestionCompositeModel.ItemVariableName];\n if (!!oldComposite) {\n values[QuestionCompositeModel.ItemVariableName] = 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.setValue = function (name, newValue, locNotification, allowNotifyValueChanged) {\n if (this.settingNewValue)\n return;\n _super.prototype.setValue.call(this, name, newValue, locNotification, allowNotifyValueChanged);\n if (!this.contentPanel)\n return;\n var q = this.contentPanel.getQuestionByName(name);\n if (!!q && !_helpers__WEBPACK_IMPORTED_MODULE_3__[\"Helpers\"].isTwoValueEquals(newValue, q.value)) {\n this.settingNewValue = true;\n q.value = newValue;\n this.settingNewValue = false;\n }\n };\n QuestionCompositeModel.prototype.addConditionObjectsByContext = function (objects, context) {\n if (!this.contentPanel)\n return;\n var questions = this.contentPanel.questions;\n var prefixName = this.name;\n var prefixText = this.title;\n for (var i = 0; i < questions.length; i++) {\n objects.push({\n name: prefixName + \".\" + questions[i].name,\n text: prefixText + \".\" + questions[i].title,\n question: questions[i],\n });\n }\n };\n QuestionCompositeModel.prototype.convertDataValue = function (name, newValue) {\n var val = this.value;\n if (!val)\n val = {};\n if (this.isValueEmpty(newValue) && !this.isEditingSurveyElement) {\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 this.settingNewValue = true;\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 this.settingNewValue = false;\n };\n QuestionCompositeModel.prototype.getDisplayValueCore = function (keyAsText, value) {\n return !!this.contentPanel\n ? this.contentPanel.getDisplayValue(keyAsText)\n : _super.prototype.getDisplayValueCore.call(this, keyAsText, value);\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 QuestionCompositeModel.ItemVariableName = \"composite\";\n return QuestionCompositeModel;\n}(QuestionCustomModelBase));\n\n\n\n/***/ }),\n\n/***/ \"./src/question_dropdown.ts\":\n/*!**********************************!*\\\n !*** ./src/question_dropdown.ts ***!\n \\**********************************/\n/*! exports provided: QuestionDropdownModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionDropdownModel\", function() { return QuestionDropdownModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _question_baseselect__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question_baseselect */ \"./src/question_baseselect.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n/**\n * A Model for a dropdown question\n */\nvar QuestionDropdownModel = /** @class */ (function (_super) {\n __extends(QuestionDropdownModel, _super);\n function QuestionDropdownModel(name) {\n var _this = _super.call(this, name) || this;\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: false,\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\", _surveyStrings__WEBPACK_IMPORTED_MODULE_3__[\"surveyLocalization\"].getString(\"optionsCaption\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"optionsCaption\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionDropdownModel.prototype, \"locOptionsCaption\", {\n get: function () {\n return this.getLocalizableString(\"optionsCaption\");\n },\n enumerable: false,\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 _itemvalue__WEBPACK_IMPORTED_MODULE_4__[\"ItemValue\"].getItemByValue(this.visibleChoices, this.value);\n },\n enumerable: false,\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 _itemvalue__WEBPACK_IMPORTED_MODULE_4__[\"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: false,\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: false,\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: false,\n configurable: true\n });\n Object.defineProperty(QuestionDropdownModel.prototype, \"autoComplete\", {\n /**\n * Dropdown auto complete\n */\n get: function () {\n return this.getPropertyValue(\"autoComplete\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"autoComplete\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionDropdownModel.prototype.getControlClass = function () {\n var cssClasses = this.cssClasses;\n var result = cssClasses.control +\n (this.errors.length > 0 ? \" \" + cssClasses.onError : \"\");\n if (this.isReadOnly) {\n result += \" \" + cssClasses.controlDisabled;\n }\n return result;\n };\n return QuestionDropdownModel;\n}(_question_baseselect__WEBPACK_IMPORTED_MODULE_2__[\"QuestionSelectBase\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"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 {\n name: \"autoComplete\",\n dataList: [\n \"name\",\n \"honorific-prefix\",\n \"given-name\",\n \"additional-name\",\n \"family-name\",\n \"honorific-suffix\",\n \"nickname\",\n \"organization-title\",\n \"username\",\n \"new-password\",\n \"current-password\",\n \"organization\",\n \"street-address\",\n \"address-line1\",\n \"address-line2\",\n \"address-line3\",\n \"address-level4\",\n \"address-level3\",\n \"address-level2\",\n \"address-level1\",\n \"country\",\n \"country-name\",\n \"postal-code\",\n \"cc-name\",\n \"cc-given-name\",\n \"cc-additional-name\",\n \"cc-family-name\",\n \"cc-number\",\n \"cc-exp\",\n \"cc-exp-month\",\n \"cc-exp-year\",\n \"cc-csc\",\n \"cc-type\",\n \"transaction-currency\",\n \"transaction-amount\",\n \"language\",\n \"bday\",\n \"bday-day\",\n \"bday-month\",\n \"bday-year\",\n \"sex\",\n \"url\",\n \"photo\",\n \"tel\",\n \"tel-country-code\",\n \"tel-national\",\n \"tel-area-code\",\n \"tel-local\",\n \"tel-local-prefix\",\n \"tel-local-suffix\",\n \"tel-extension\",\n \"email\",\n \"impp\",\n ],\n },\n], function () {\n return new QuestionDropdownModel(\"\");\n}, \"selectbase\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_1__[\"QuestionFactory\"].Instance.registerQuestion(\"dropdown\", function (name) {\n var q = new QuestionDropdownModel(name);\n q.choices = _questionfactory__WEBPACK_IMPORTED_MODULE_1__[\"QuestionFactory\"].DefaultChoices;\n return q;\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_empty.ts\":\n/*!*******************************!*\\\n !*** ./src/question_empty.ts ***!\n \\*******************************/\n/*! exports provided: QuestionEmptyModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionEmptyModel\", function() { return QuestionEmptyModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\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 __extends(QuestionEmptyModel, _super);\n function QuestionEmptyModel(name) {\n return _super.call(this, name) || this;\n }\n QuestionEmptyModel.prototype.getType = function () {\n return \"empty\";\n };\n return QuestionEmptyModel;\n}(_question__WEBPACK_IMPORTED_MODULE_1__[\"Question\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"empty\", [], function () {\n return new QuestionEmptyModel(\"\");\n}, \"question\");\n\n\n/***/ }),\n\n/***/ \"./src/question_expression.ts\":\n/*!************************************!*\\\n !*** ./src/question_expression.ts ***!\n \\************************************/\n/*! exports provided: QuestionExpressionModel, getCurrecyCodes */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionExpressionModel\", function() { return QuestionExpressionModel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getCurrecyCodes\", function() { return getCurrecyCodes; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./conditions */ \"./src/conditions.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\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 __extends(QuestionExpressionModel, _super);\n function QuestionExpressionModel(name) {\n var _this = _super.call(this, name) || this;\n _this.createLocalizableString(\"format\", _this);\n var self = _this;\n _this.registerFunctionOnPropertyValueChanged(\"expression\", function () {\n if (self.expressionRunner) {\n self.expressionRunner = new _conditions__WEBPACK_IMPORTED_MODULE_4__[\"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: false,\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: false,\n configurable: true\n });\n Object.defineProperty(QuestionExpressionModel.prototype, \"locFormat\", {\n get: function () {\n return this.getLocalizableString(\"format\");\n },\n enumerable: false,\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: false,\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 ||\n this.expressionIsRunning ||\n (!this.runIfReadOnly && this.isReadOnly))\n return;\n this.locCalculation();\n if (!this.expressionRunner) {\n this.expressionRunner = new _conditions__WEBPACK_IMPORTED_MODULE_4__[\"ExpressionRunner\"](this.expression);\n }\n this.expressionRunner.onRunComplete = function (newValue) {\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isTwoValueEquals(newValue, _this.value)) {\n _this.value = newValue;\n }\n _this.unlocCalculation();\n };\n this.expressionRunner.run(values, properties);\n };\n QuestionExpressionModel.prototype.hasErrors = function (fireCallback, rec) {\n if (fireCallback === void 0) { fireCallback = true; }\n if (rec === void 0) { rec = null; }\n return false;\n };\n QuestionExpressionModel.prototype.getAllErrors = function () {\n return [];\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: false,\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: false,\n configurable: true\n });\n Object.defineProperty(QuestionExpressionModel.prototype, \"runIfReadOnly\", {\n get: function () {\n return this.runIfReadOnlyValue === true;\n },\n set: function (val) {\n this.runIfReadOnlyValue = val;\n },\n enumerable: false,\n configurable: true\n });\n QuestionExpressionModel.prototype.getDisplayValueCore = function (keysAsText, value) {\n var val = this.isValueEmpty(value) ? this.defaultValue : value;\n var res = \"\";\n if (!this.isValueEmpty(val)) {\n var str = this.getValueAsStr(val);\n res = !this.format ? str : this.format[\"format\"](str);\n }\n if (!!this.survey) {\n res = this.survey.getExpressionDisplayValue(this, val, res);\n }\n return res;\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: false,\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: false,\n configurable: true\n });\n Object.defineProperty(QuestionExpressionModel.prototype, \"useGrouping\", {\n /**\n * \tDetermines whether to display grouping separators. The default value is true.\n */\n get: function () {\n return this.getPropertyValue(\"useGrouping\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"useGrouping\", val);\n },\n enumerable: false,\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\" && _helpers__WEBPACK_IMPORTED_MODULE_0__[\"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}(_question__WEBPACK_IMPORTED_MODULE_1__[\"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_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"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: \"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_questionfactory__WEBPACK_IMPORTED_MODULE_3__[\"QuestionFactory\"].Instance.registerQuestion(\"expression\", function (name) {\n return new QuestionExpressionModel(name);\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_file.ts\":\n/*!******************************!*\\\n !*** ./src/question_file.ts ***!\n \\******************************/\n/*! exports provided: QuestionFileModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionFileModel\", function() { return QuestionFileModel; });\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n/**\n * A Model for a file question\n */\nvar QuestionFileModel = /** @class */ (function (_super) {\n __extends(QuestionFileModel, _super);\n function QuestionFileModel(name) {\n var _this = _super.call(this, name) || this;\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 = _this.addEvent();\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 if (!this.survey)\n return;\n this.survey.clearFiles(this, 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: false,\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: false,\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: false,\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: false,\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: false,\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: false,\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: false,\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: false,\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: false,\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: false,\n configurable: true\n });\n /**\n * The remove file confirmation message.\n */\n QuestionFileModel.prototype.getConfirmRemoveMessage = function (fileName) {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"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 _surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"surveyLocalization\"].getString(\"confirmRemoveAllFiles\");\n },\n enumerable: false,\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 _surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"surveyLocalization\"].getString(\"noFileChosen\");\n },\n enumerable: false,\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 _surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"surveyLocalization\"].getString(\"chooseFileCaption\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionFileModel.prototype, \"cleanButtonCaption\", {\n /**\n * The clean files button caption.\n */\n get: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"surveyLocalization\"].getString(\"cleanCaption\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionFileModel.prototype, \"removeFileCaption\", {\n /**\n * The remove file button caption.\n */\n get: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"surveyLocalization\"].getString(\"removeFileCaption\");\n },\n enumerable: false,\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 _surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"surveyLocalization\"].getString(\"loadingFile\");\n if (this.isEmpty())\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"surveyLocalization\"].getString(\"chooseFile\");\n return \" \";\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Clear value programmatically.\n */\n QuestionFileModel.prototype.clear = function (doneCallback) {\n var _this = this;\n if (!this.survey)\n return;\n this.survey.clearFiles(this, 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 if (!this.survey)\n return;\n this.survey.clearFiles(this, 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 if (_this.survey) {\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 };\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, updateIsAnswered) {\n var _this = this;\n if (updateIsAnswered === void 0) { updateIsAnswered = true; }\n _super.prototype.setQuestionValue.call(this, newValue, updateIsAnswered);\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 if (_this.survey) {\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 };\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 _error__WEBPACK_IMPORTED_MODULE_3__[\"UploadingFileError\"](_surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"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 if (state === \"error\") {\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 _error__WEBPACK_IMPORTED_MODULE_3__[\"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}(_question__WEBPACK_IMPORTED_MODULE_0__[\"Question\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"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_questionfactory__WEBPACK_IMPORTED_MODULE_2__[\"QuestionFactory\"].Instance.registerQuestion(\"file\", function (name) {\n return new QuestionFileModel(name);\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_html.ts\":\n/*!******************************!*\\\n !*** ./src/question_html.ts ***!\n \\******************************/\n/*! exports provided: QuestionHtmlModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionHtmlModel\", function() { return QuestionHtmlModel; });\n/* harmony import */ var _questionnonvalue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./questionnonvalue */ \"./src/questionnonvalue.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\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 __extends(QuestionHtmlModel, _super);\n function QuestionHtmlModel(name) {\n var _this = _super.call(this, name) || this;\n var locHtml = _this.createLocalizableString(\"html\", _this);\n locHtml.onGetTextCallback = function (str) {\n return !!_this.survey && !_this.ignoreHtmlProgressing\n ? _this.survey.processHtml(str)\n : 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: false,\n configurable: true\n });\n QuestionHtmlModel.prototype.getProcessedText = function (text) {\n if (this.ignoreHtmlProgressing)\n return text;\n return _super.prototype.getProcessedText.call(this, text);\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: false,\n configurable: true\n });\n Object.defineProperty(QuestionHtmlModel.prototype, \"locHtml\", {\n get: function () {\n return this.getLocalizableString(\"html\");\n },\n enumerable: false,\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: false,\n configurable: true\n });\n return QuestionHtmlModel;\n}(_questionnonvalue__WEBPACK_IMPORTED_MODULE_0__[\"QuestionNonValue\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"html\", [{ name: \"html:html\", serializationProperty: \"locHtml\" }], function () {\n return new QuestionHtmlModel(\"\");\n}, \"nonvalue\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_2__[\"QuestionFactory\"].Instance.registerQuestion(\"html\", function (name) {\n return new QuestionHtmlModel(name);\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_image.ts\":\n/*!*******************************!*\\\n !*** ./src/question_image.ts ***!\n \\*******************************/\n/*! exports provided: QuestionImageModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionImageModel\", function() { return QuestionImageModel; });\n/* harmony import */ var _questionnonvalue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./questionnonvalue */ \"./src/questionnonvalue.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\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 __extends(QuestionImageModel, _super);\n function QuestionImageModel(name) {\n var _this = _super.call(this, name) || this;\n _this.createLocalizableString(\"imageLink\", _this, false);\n _this.createLocalizableString(\"text\", _this, false);\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: false,\n configurable: true\n });\n Object.defineProperty(QuestionImageModel.prototype, \"imageLink\", {\n /**\n * The image URL.\n */\n get: function () {\n return this.getLocalizableStringText(\"imageLink\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"imageLink\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionImageModel.prototype, \"locImageLink\", {\n get: function () {\n return this.getLocalizableString(\"imageLink\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionImageModel.prototype, \"text\", {\n /**\n * The image alt text.\n */\n get: function () {\n return this.getLocalizableStringText(\"text\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"text\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionImageModel.prototype, \"locText\", {\n get: function () {\n return this.getLocalizableString(\"text\");\n },\n enumerable: false,\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: false,\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: false,\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: false,\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: false,\n configurable: true\n });\n return QuestionImageModel;\n}(_questionnonvalue__WEBPACK_IMPORTED_MODULE_0__[\"QuestionNonValue\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"image\", [\n { name: \"imageLink\", serializationProperty: \"locImageLink\" },\n { name: \"text\", serializationProperty: \"locText\" },\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_questionfactory__WEBPACK_IMPORTED_MODULE_2__[\"QuestionFactory\"].Instance.registerQuestion(\"image\", function (name) {\n return new QuestionImageModel(name);\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_imagepicker.ts\":\n/*!*************************************!*\\\n !*** ./src/question_imagepicker.ts ***!\n \\*************************************/\n/*! exports provided: ImageItemValue, QuestionImagePickerModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ImageItemValue\", function() { return ImageItemValue; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionImagePickerModel\", function() { return QuestionImagePickerModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _question_baseselect__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question_baseselect */ \"./src/question_baseselect.ts\");\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\nvar ImageItemValue = /** @class */ (function (_super) {\n __extends(ImageItemValue, _super);\n function ImageItemValue(value, text, typeName) {\n if (text === void 0) { text = null; }\n if (typeName === void 0) { typeName = \"imageitemvalue\"; }\n var _this = _super.call(this, value, text, typeName) || this;\n _this.typeName = typeName;\n _this.createLocalizableString(\"imageLink\", _this, false);\n return _this;\n }\n ImageItemValue.prototype.getType = function () {\n return !!this.typeName ? this.typeName : \"itemvalue\";\n };\n Object.defineProperty(ImageItemValue.prototype, \"imageLink\", {\n /**\n * The image or video link property.\n */\n get: function () {\n return this.getLocalizableStringText(\"imageLink\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"imageLink\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ImageItemValue.prototype, \"locImageLink\", {\n get: function () {\n return this.getLocalizableString(\"imageLink\");\n },\n enumerable: false,\n configurable: true\n });\n ImageItemValue.prototype.getLocale = function () {\n return !!this.locOwner ? this.locOwner.getLocale() : \"\";\n };\n ImageItemValue.prototype.getMarkdownHtml = function (text, name) {\n return !!this.locOwner ? this.locOwner.getMarkdownHtml(text, name) : text;\n };\n ImageItemValue.prototype.getRenderer = function (name) {\n return !!this.locOwner ? this.locOwner.getRenderer(name) : null;\n };\n ImageItemValue.prototype.getProcessedText = function (text) {\n return !!this.locOwner ? this.locOwner.getProcessedText(text) : text;\n };\n return ImageItemValue;\n}(_itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"]));\n\n/**\n * A Model for a select image question.\n */\nvar QuestionImagePickerModel = /** @class */ (function (_super) {\n __extends(QuestionImagePickerModel, _super);\n function QuestionImagePickerModel(name) {\n var _this = _super.call(this, name) || this;\n _this.colCount = 0;\n _this.choicesByUrl.createItemValue = function (value) {\n return new ImageItemValue(value);\n };\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: false,\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: false,\n configurable: true\n });\n QuestionImagePickerModel.prototype.supportOther = function () {\n return false;\n };\n QuestionImagePickerModel.prototype.supportNone = function () {\n return false;\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: false,\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 (this.isValueEmpty(val))\n return false;\n if (!this.multiSelect)\n return _helpers__WEBPACK_IMPORTED_MODULE_4__[\"Helpers\"].isTwoValueEquals(val, item.value);\n if (!Array.isArray(val))\n return false;\n for (var i = 0; i < val.length; i++) {\n if (_helpers__WEBPACK_IMPORTED_MODULE_4__[\"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: false,\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 (this.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: false,\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: false,\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: false,\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: false,\n configurable: true\n });\n QuestionImagePickerModel.prototype.convertDefaultValue = function (val) {\n return val;\n };\n Object.defineProperty(QuestionImagePickerModel.prototype, \"hasColumns\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n return QuestionImagePickerModel;\n}(_question_baseselect__WEBPACK_IMPORTED_MODULE_2__[\"QuestionCheckboxBase\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"imageitemvalue\", [], function (value) { return new ImageItemValue(value); }, \"itemvalue\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addProperty(\"imageitemvalue\", {\n name: \"imageLink\",\n serializationProperty: \"locImageLink\",\n});\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"imagepicker\", [\n { name: \"hasOther\", visible: false },\n { name: \"otherText\", visible: false },\n { name: \"hasNone\", visible: false },\n { name: \"noneText\", 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_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addProperty(\"imagepicker\", {\n name: \"showLabel:boolean\",\n default: false,\n});\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addProperty(\"imagepicker\", {\n name: \"colCount:number\",\n default: 0,\n choices: [0, 1, 2, 3, 4, 5],\n});\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addProperty(\"imagepicker\", {\n name: \"multiSelect:boolean\",\n default: false,\n});\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addProperty(\"imagepicker\", {\n name: \"choices:imageitemvalue[]\",\n});\n_questionfactory__WEBPACK_IMPORTED_MODULE_1__[\"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\n/***/ \"./src/question_matrix.ts\":\n/*!********************************!*\\\n !*** ./src/question_matrix.ts ***!\n \\********************************/\n/*! exports provided: MatrixRowModel, MatrixCells, QuestionMatrixModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MatrixRowModel\", function() { return MatrixRowModel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MatrixCells\", function() { return MatrixCells; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixModel\", function() { return QuestionMatrixModel; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\n/* harmony import */ var _martixBase__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./martixBase */ \"./src/martixBase.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _localizablestring__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./localizablestring */ \"./src/localizablestring.ts\");\n/* harmony import */ var _question_dropdown__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./question_dropdown */ \"./src/question_dropdown.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n\n\n\n\n\n\nvar MatrixRowModel = /** @class */ (function (_super) {\n __extends(MatrixRowModel, _super);\n function MatrixRowModel(item, fullName, data, value) {\n var _this = _super.call(this) || this;\n _this.fullName = fullName;\n _this.item = item;\n _this.data = data;\n _this.value = value;\n _this.cellClick = function (column) {\n _this.value = column.value;\n };\n _this.registerFunctionOnPropertyValueChanged(\"value\", function () {\n if (_this.data)\n _this.data.onMatrixRowChanged(_this);\n });\n return _this;\n }\n Object.defineProperty(MatrixRowModel.prototype, \"name\", {\n get: function () {\n return this.item.value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixRowModel.prototype, \"text\", {\n get: function () {\n return this.item.text;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixRowModel.prototype, \"locText\", {\n get: function () {\n return this.item.locText;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixRowModel.prototype, \"value\", {\n get: function () {\n return this.getPropertyValue(\"value\");\n },\n set: function (newValue) {\n newValue = this.data.getCorrectedRowValue(newValue);\n this.setPropertyValue(\"value\", newValue);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixRowModel.prototype, \"rowClasses\", {\n get: function () {\n var cssClasses = this.data.cssClasses;\n var rowClass = !!cssClasses.row ? cssClasses.row : \"\";\n var rowErrorClass = !!cssClasses.rowError ? cssClasses.rowError : \"\";\n var hasError = !!this.data.getErrorByType(\"requiredinallrowserror\");\n var classes = rowClass;\n if (!!rowErrorClass && hasError && this.isValueEmpty(this.value)) {\n if (!!classes)\n classes += \" \";\n classes += rowErrorClass;\n }\n return classes;\n },\n enumerable: false,\n configurable: true\n });\n return MatrixRowModel;\n}(_base__WEBPACK_IMPORTED_MODULE_4__[\"Base\"]));\n\nvar MatrixCells = /** @class */ (function () {\n function MatrixCells(cellsOwner) {\n this.cellsOwner = cellsOwner;\n this.values = {};\n }\n Object.defineProperty(MatrixCells.prototype, \"isEmpty\", {\n get: function () {\n return Object.keys(this.values).length == 0;\n },\n enumerable: false,\n configurable: true\n });\n MatrixCells.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 MatrixCells.prototype.setDefaultCellText = function (column, val) {\n this.setCellText(_settings__WEBPACK_IMPORTED_MODULE_10__[\"settings\"].matrixDefaultRowName, column, val);\n };\n MatrixCells.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 MatrixCells.prototype.getDefaultCellLocText = function (column, val) {\n return this.getCellLocText(_settings__WEBPACK_IMPORTED_MODULE_10__[\"settings\"].matrixDefaultRowName, column);\n };\n MatrixCells.prototype.getCellDisplayLocText = function (row, column) {\n var cellText = this.getCellLocText(row, column);\n if (cellText && !cellText.isEmpty)\n return cellText;\n cellText = this.getCellLocText(_settings__WEBPACK_IMPORTED_MODULE_10__[\"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 MatrixCells.prototype.getCellText = function (row, column) {\n var loc = this.getCellLocText(row, column);\n return loc ? loc.calculatedText : null;\n };\n MatrixCells.prototype.getDefaultCellText = function (column) {\n var loc = this.getCellLocText(_settings__WEBPACK_IMPORTED_MODULE_10__[\"settings\"].matrixDefaultRowName, column);\n return loc ? loc.calculatedText : null;\n };\n MatrixCells.prototype.getCellDisplayText = function (row, column) {\n var loc = this.getCellDisplayLocText(row, column);\n return loc ? loc.calculatedText : null;\n };\n Object.defineProperty(MatrixCells.prototype, \"rows\", {\n get: function () {\n return this.cellsOwner ? this.cellsOwner.getRows() : [];\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixCells.prototype, \"columns\", {\n get: function () {\n return this.cellsOwner ? this.cellsOwner.getColumns() : [];\n },\n enumerable: false,\n configurable: true\n });\n MatrixCells.prototype.getCellRowColumnValue = function (val, values) {\n if (val === null || val === undefined)\n return null;\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 MatrixCells.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 MatrixCells.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 MatrixCells.prototype.createString = function () {\n return new _localizablestring__WEBPACK_IMPORTED_MODULE_8__[\"LocalizableString\"](this.cellsOwner, true);\n };\n return MatrixCells;\n}());\n\n/**\n * A Model for a simple matrix question.\n */\nvar QuestionMatrixModel = /** @class */ (function (_super) {\n __extends(QuestionMatrixModel, _super);\n function QuestionMatrixModel(name) {\n var _this = _super.call(this, name) || this;\n _this.isRowChanging = false;\n _this.emptyLocalizableString = new _localizablestring__WEBPACK_IMPORTED_MODULE_8__[\"LocalizableString\"](_this);\n _this.cellsValue = new MatrixCells(_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: false,\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: false,\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: false,\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: false,\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: false,\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.addColumn = function (value, text) {\n var col = new _itemvalue__WEBPACK_IMPORTED_MODULE_1__[\"ItemValue\"](value, text);\n this.columns.push(col);\n return col;\n };\n QuestionMatrixModel.prototype.getItemClass = function (row, column) {\n var isChecked = row.value == column.value;\n var isDisabled = this.isReadOnly;\n var allowHover = !isChecked && !isDisabled;\n var cellDisabledClass = this.hasCellText\n ? this.cssClasses.cellTextDisabled\n : this.cssClasses.itemDisabled;\n var cellSelectedClass = this.hasCellText\n ? this.cssClasses.cellTextSelected\n : this.cssClasses.itemChecked;\n var itemHoverClass = !this.hasCellText ? this.cssClasses.itemHover : \"\";\n var cellClass = this.hasCellText\n ? this.cssClasses.cellText\n : this.cssClasses.label;\n var itemClass = this.hasCellText && !!this.cssClasses.cell\n ? this.cssClasses.cell + \" \"\n : \"\";\n itemClass +=\n cellClass +\n (isChecked ? \" \" + cellSelectedClass : \"\") +\n (isDisabled ? \" \" + cellDisabledClass : \"\") +\n (allowHover ? \" \" + itemHoverClass : \"\");\n return itemClass;\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 (!this.isValueEmpty(value[row]) &&\n _helpers__WEBPACK_IMPORTED_MODULE_0__[\"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 _itemvalue__WEBPACK_IMPORTED_MODULE_1__[\"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 _helpers__WEBPACK_IMPORTED_MODULE_0__[\"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: false,\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: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixModel.prototype, \"hasCellText\", {\n get: function () {\n return !this.cells.isEmpty;\n },\n enumerable: false,\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 _error__WEBPACK_IMPORTED_MODULE_6__[\"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 if (this.isValueEmpty(rows[i].value))\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 var row = new MatrixRowModel(item, fullName, this, value);\n this.onMatrixRowCreated(row);\n return row;\n };\n QuestionMatrixModel.prototype.onMatrixRowCreated = function (row) { };\n QuestionMatrixModel.prototype.setQuestionValue = function (newValue, updateIsAnswered) {\n if (updateIsAnswered === void 0) { updateIsAnswered = true; }\n _super.prototype.setQuestionValue.call(this, newValue, this.isRowChanging || updateIsAnswered);\n if (!this.generatedVisibleRows || 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];\n if (this.isValueEmpty(rowVal))\n rowVal = 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 ? _itemvalue__WEBPACK_IMPORTED_MODULE_1__[\"ItemValue\"].getTextOrHtmlByValue(this.rows, key)\n : key;\n if (!newKey)\n newKey = key;\n var newValue = _itemvalue__WEBPACK_IMPORTED_MODULE_1__[\"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: _itemvalue__WEBPACK_IMPORTED_MODULE_1__[\"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 = _itemvalue__WEBPACK_IMPORTED_MODULE_1__[\"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 _question_dropdown__WEBPACK_IMPORTED_MODULE_9__[\"QuestionDropdownModel\"](path);\n question.choices = this.columns;\n var json = new _jsonobject__WEBPACK_IMPORTED_MODULE_3__[\"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 QuestionMatrixModel.prototype.getCorrectedRowValue = function (value) {\n for (var i = 0; i < this.columns.length; i++) {\n if (value === this.columns[i].value)\n return value;\n }\n for (var i = 0; i < this.columns.length; i++) {\n if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isTwoValueEquals(value, this.columns[i].value))\n return this.columns[i].value;\n }\n return value;\n };\n QuestionMatrixModel.prototype.getSearchableItemValueKeys = function (keys) {\n keys.push(\"columns\");\n keys.push(\"rows\");\n };\n Object.defineProperty(QuestionMatrixModel.prototype, \"SurveyModel\", {\n get: function () {\n return this.survey;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixModel.prototype.getColumnHeaderWrapperComponentName = function (cell) {\n return this.SurveyModel.getElementWrapperComponentName({ column: cell }, \"column-header\");\n };\n QuestionMatrixModel.prototype.getColumnHeaderWrapperComponentData = function (cell) {\n return this.SurveyModel.getElementWrapperComponentData({ column: cell }, \"column-header\");\n };\n QuestionMatrixModel.prototype.getRowHeaderWrapperComponentName = function (cell) {\n return this.SurveyModel.getElementWrapperComponentName({ row: cell }, \"row-header\");\n };\n QuestionMatrixModel.prototype.getRowHeaderWrapperComponentData = function (cell) {\n return this.SurveyModel.getElementWrapperComponentData({ row: cell }, \"row-header\");\n };\n return QuestionMatrixModel;\n}(_martixBase__WEBPACK_IMPORTED_MODULE_2__[\"QuestionMatrixBaseModel\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_3__[\"Serializer\"].addClass(\"matrix\", [\n {\n name: \"columns:itemvalue[]\",\n baseValue: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_5__[\"surveyLocalization\"].getString(\"matrix_column\");\n },\n },\n {\n name: \"rows:itemvalue[]\",\n baseValue: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_5__[\"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_questionfactory__WEBPACK_IMPORTED_MODULE_7__[\"QuestionFactory\"].Instance.registerQuestion(\"matrix\", function (name) {\n var q = new QuestionMatrixModel(name);\n q.rows = _questionfactory__WEBPACK_IMPORTED_MODULE_7__[\"QuestionFactory\"].DefaultRows;\n q.columns = _questionfactory__WEBPACK_IMPORTED_MODULE_7__[\"QuestionFactory\"].DefaultColums;\n return q;\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_matrixdropdown.ts\":\n/*!****************************************!*\\\n !*** ./src/question_matrixdropdown.ts ***!\n \\****************************************/\n/*! exports provided: MatrixDropdownRowModel, QuestionMatrixDropdownModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownRowModel\", function() { return MatrixDropdownRowModel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownModel\", function() { return QuestionMatrixDropdownModel; });\n/* harmony import */ var _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./question_matrixdropdownbase */ \"./src/question_matrixdropdownbase.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\nvar MatrixDropdownRowModel = /** @class */ (function (_super) {\n __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: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownRowModel.prototype, \"text\", {\n get: function () {\n return this.item.text;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownRowModel.prototype, \"locText\", {\n get: function () {\n return this.item.locText;\n },\n enumerable: false,\n configurable: true\n });\n return MatrixDropdownRowModel;\n}(_question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_0__[\"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 __extends(QuestionMatrixDropdownModel, _super);\n function QuestionMatrixDropdownModel(name) {\n var _this = _super.call(this, name) || this;\n _this.createLocalizableString(\"totalText\", _this, true);\n var self = _this;\n _this.registerFunctionOnPropertyValueChanged(\"rows\", function () {\n self.clearGeneratedRows();\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: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModel.prototype, \"locTotalText\", {\n get: function () {\n return this.getLocalizableString(\"totalText\");\n },\n enumerable: false,\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: false,\n configurable: true\n });\n QuestionMatrixDropdownModel.prototype.getRowTitleWidth = function () {\n return this.rowTitleWidth;\n };\n QuestionMatrixDropdownModel.prototype.getDisplayValueCore = function (keysAsText, value) {\n if (!value)\n return value;\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 = value[rowValue];\n if (!val)\n continue;\n if (keysAsText) {\n var displayRowValue = _itemvalue__WEBPACK_IMPORTED_MODULE_2__[\"ItemValue\"].getTextOrHtmlByValue(this.rows, rowValue);\n if (!!displayRowValue) {\n rowValue = displayRowValue;\n }\n }\n res[rowValue] = this.getRowDisplayValue(keysAsText, rows[i], val);\n }\n return res;\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 (_itemvalue__WEBPACK_IMPORTED_MODULE_2__[\"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 QuestionMatrixDropdownModel.prototype.getSearchableItemValueKeys = function (keys) {\n keys.push(\"rows\");\n };\n return QuestionMatrixDropdownModel;\n}(_question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownModelBase\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"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_questionfactory__WEBPACK_IMPORTED_MODULE_3__[\"QuestionFactory\"].Instance.registerQuestion(\"matrixdropdown\", function (name) {\n var q = new QuestionMatrixDropdownModel(name);\n q.choices = [1, 2, 3, 4, 5];\n q.rows = _questionfactory__WEBPACK_IMPORTED_MODULE_3__[\"QuestionFactory\"].DefaultRows;\n _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownModelBase\"].addDefaultColumns(q);\n return q;\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_matrixdropdownbase.ts\":\n/*!********************************************!*\\\n !*** ./src/question_matrixdropdownbase.ts ***!\n \\********************************************/\n/*! exports provided: matrixDropdownColumnTypes, MatrixDropdownColumn, MatrixDropdownCell, MatrixDropdownTotalCell, MatrixDropdownRowModelBase, MatrixDropdownTotalRowModel, QuestionMatrixDropdownRenderedCell, QuestionMatrixDropdownRenderedRow, QuestionMatrixDropdownRenderedTable, QuestionMatrixDropdownModelBase */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"matrixDropdownColumnTypes\", function() { return matrixDropdownColumnTypes; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownColumn\", function() { return MatrixDropdownColumn; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownCell\", function() { return MatrixDropdownCell; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownTotalCell\", function() { return MatrixDropdownTotalCell; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownRowModelBase\", function() { return MatrixDropdownRowModelBase; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownTotalRowModel\", function() { return MatrixDropdownTotalRowModel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownRenderedCell\", function() { return QuestionMatrixDropdownRenderedCell; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownRenderedRow\", function() { return QuestionMatrixDropdownRenderedRow; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownRenderedTable\", function() { return QuestionMatrixDropdownRenderedTable; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownModelBase\", function() { return QuestionMatrixDropdownModelBase; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _martixBase__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./martixBase */ \"./src/martixBase.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _survey_element__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./survey-element */ \"./src/survey-element.ts\");\n/* harmony import */ var _textPreProcessor__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./textPreProcessor */ \"./src/textPreProcessor.ts\");\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _question_expression__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./question_expression */ \"./src/question_expression.ts\");\n/* harmony import */ var _functionsfactory__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./functionsfactory */ \"./src/functionsfactory.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _actions_action__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./actions/action */ \"./src/actions/action.ts\");\n/* harmony import */ var _actions_adaptive_container__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./actions/adaptive-container */ \"./src/actions/adaptive-container.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction onUpdateSelectBaseCellQuestion(cellQuestion, column, question, data) {\n cellQuestion.storeOthersAsComment = !!question\n ? question.storeOthersAsComment\n : false;\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.getTextProcessor());\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 &&\n 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: [\"renderAs\", \"defaultValue\"],\n onCellQuestionUpdate: function (cellQuestion, column, question, data) {\n cellQuestion.showTitle = true;\n cellQuestion.renderAs = column.renderAs;\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 __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 }\n else {\n _this.templateQuestion.locTitle.strChanged();\n }\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.getOriginalObj = function () {\n return this.templateQuestion;\n };\n MatrixDropdownColumn.prototype.getClassNameProperty = function () {\n return \"cellType\";\n };\n MatrixDropdownColumn.prototype.getSurvey = function (live) {\n if (live === void 0) { live = false; }\n return !!this.colOwner ? this.colOwner.survey : null;\n };\n MatrixDropdownColumn.prototype.endLoadingFromJson = function () {\n var _this = this;\n _super.prototype.endLoadingFromJson.call(this);\n this.templateQuestion.endLoadingFromJson();\n this.templateQuestion.onGetSurvey = function () {\n return _this.getSurvey();\n };\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 if (!!value) {\n this.updateTemplateQuestion();\n }\n },\n enumerable: false,\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: false,\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: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"templateQuestion\", {\n get: function () {\n return this.templateQuestionValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"value\", {\n get: function () {\n return this.templateQuestion.name;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"isVisible\", {\n get: function () {\n return this._isVisible;\n },\n enumerable: false,\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: false,\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: false,\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: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"locTitle\", {\n get: function () {\n return this.templateQuestion.locTitle;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"fullTitle\", {\n get: function () {\n return this.locTitle.textOrHtml;\n },\n enumerable: false,\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: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"requiredText\", {\n get: function () {\n return this.templateQuestion.requiredText;\n },\n enumerable: false,\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: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"locRequiredErrorText\", {\n get: function () {\n return this.templateQuestion.locRequiredErrorText;\n },\n enumerable: false,\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: false,\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: false,\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: false,\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: false,\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: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"isUnique\", {\n get: function () {\n return this.getPropertyValue(\"isUnique\");\n },\n set: function (val) {\n this.setPropertyValue(\"isUnique\", val);\n },\n enumerable: false,\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: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"isSupportMultipleColumns\", {\n get: function () {\n return [\"checkbox\", \"radiogroup\"].indexOf(this.cellType) > -1;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"isShowInMultipleColumns\", {\n get: function () {\n return this.showInMultipleColumns && this.isSupportMultipleColumns;\n },\n enumerable: false,\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: false,\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: false,\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: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"hasTotal\", {\n get: function () {\n return this.totalType != \"none\" || !!this.totalExpression;\n },\n enumerable: false,\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: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"locTotalFormat\", {\n get: function () {\n return this.getLocalizableString(\"totalFormat\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"renderAs\", {\n get: function () {\n return this.getPropertyValue(\"renderAs\");\n },\n set: function (val) {\n this.setPropertyValue(\"renderAs\", val);\n },\n enumerable: false,\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: false,\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: false,\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: false,\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 (Object(_question_expression__WEBPACK_IMPORTED_MODULE_9__[\"getCurrecyCodes\"])().indexOf(val) < 0)\n return;\n this.setPropertyValue(\"totalCurrency\", val);\n },\n enumerable: false,\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: false,\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: false,\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: false,\n configurable: true\n });\n MatrixDropdownColumn.prototype.getLocale = function () {\n return this.colOwner ? this.colOwner.getLocale() : \"\";\n };\n MatrixDropdownColumn.prototype.getMarkdownHtml = function (text, name) {\n return this.colOwner ? this.colOwner.getMarkdownHtml(text, name) : null;\n };\n MatrixDropdownColumn.prototype.getRenderer = function (name) {\n return !!this.colOwner ? this.colOwner.getRenderer(name) : 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 _settings__WEBPACK_IMPORTED_MODULE_11__[\"settings\"].matrixDefaultCellType;\n };\n MatrixDropdownColumn.prototype.updateTemplateQuestion = function () {\n var _this = this;\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 this.templateQuestion.onPropertyChanged.add(function (sender, options) {\n _this.propertyValueChanged(options.name, options.oldValue, options.newValue);\n });\n this.templateQuestion.onItemValuePropertyChanged.add(function (sender, options) {\n _this.doItemValuePropertyChanged(options.propertyName, options.obj, options.name, options.newValue, options.oldValue);\n });\n this.templateQuestion.isContentElement = true;\n if (!this.isLoadingFromJson) {\n this.templateQuestion.onGetSurvey = function () {\n return _this.getSurvey();\n };\n }\n this.templateQuestion.locTitle.strChanged();\n };\n MatrixDropdownColumn.prototype.createNewQuestion = function (cellType) {\n var question = _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].createClass(cellType);\n if (!question) {\n question = _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].createClass(\"text\");\n }\n question.loadingOwner = this;\n question.isEditableTemplateElement = true;\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 _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"JsonObject\"]().toJsonObject(this.templateQuestion, true);\n if (onUpdateJson) {\n onUpdateJson(json);\n }\n json.type = question.getType();\n new _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"JsonObject\"]().toObject(json, question);\n }\n };\n MatrixDropdownColumn.prototype.propertyValueChanged = function (name, oldValue, newValue) {\n _super.prototype.propertyValueChanged.call(this, name, oldValue, newValue);\n if (!_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].hasOriginalProperty(this, name))\n return;\n if (this.colOwner != null && !this.isLoadingFromJson) {\n this.colOwner.onColumnPropertyChanged(this, name, newValue);\n }\n };\n MatrixDropdownColumn.prototype.doItemValuePropertyChanged = function (propertyName, obj, name, newValue, oldValue) {\n if (!_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].hasOriginalProperty(obj, name))\n return;\n if (this.colOwner != null && !this.isLoadingFromJson) {\n this.colOwner.onColumnItemValuePropertyChanged(this, propertyName, obj, name, newValue, oldValue);\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 _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"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}(_base__WEBPACK_IMPORTED_MODULE_3__[\"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 _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"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: false,\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: false,\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 __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 = _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"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 this.question.runIfReadOnly = true;\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 (!_functionsfactory__WEBPACK_IMPORTED_MODULE_10__[\"FunctionFactory\"].Instance.hasFunction(funName))\n return \"\";\n return funName + \"({self}, '\" + this.column.name + \"')\";\n };\n return MatrixDropdownTotalCell;\n}(MatrixDropdownCell));\n\nvar MatrixDropdownRowTextProcessor = /** @class */ (function (_super) {\n __extends(MatrixDropdownRowTextProcessor, _super);\n function MatrixDropdownRowTextProcessor(row, variableName) {\n var _this = _super.call(this, variableName) || this;\n _this.row = row;\n _this.variableName = variableName;\n return _this;\n }\n Object.defineProperty(MatrixDropdownRowTextProcessor.prototype, \"survey\", {\n get: function () {\n return this.row.getSurvey();\n },\n enumerable: false,\n configurable: true\n });\n MatrixDropdownRowTextProcessor.prototype.getValues = function () {\n return this.row.value;\n };\n MatrixDropdownRowTextProcessor.prototype.getQuestionByName = function (name) {\n return this.row.getQuestionByName(name);\n };\n MatrixDropdownRowTextProcessor.prototype.onCustomProcessText = function (textValue) {\n if (textValue.name == MatrixDropdownRowModelBase.IndexVariableName) {\n textValue.isExists = true;\n textValue.value = this.row.rowIndex;\n return true;\n }\n if (textValue.name == MatrixDropdownRowModelBase.RowValueVariableName) {\n textValue.isExists = true;\n textValue.value = this.row.rowName;\n return true;\n }\n return false;\n };\n return MatrixDropdownRowTextProcessor;\n}(_textPreProcessor__WEBPACK_IMPORTED_MODULE_5__[\"QuestionTextProcessor\"]));\nvar MatrixDropdownRowModelBase = /** @class */ (function () {\n function MatrixDropdownRowModelBase(data, value) {\n var _this = this;\n this.isSettingValue = false;\n this.detailPanelValue = null;\n this.cells = [];\n this.isCreatingDetailPanel = false;\n this.data = data;\n this.subscribeToChanges(value);\n this.textPreProcessor = new MatrixDropdownRowTextProcessor(this, MatrixDropdownRowModelBase.RowVariableName);\n this.showHideDetailPanelClick = function () {\n _this.showHideDetailPanel();\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: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"rowName\", {\n get: function () {\n return null;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"text\", {\n get: function () {\n return this.rowName;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"value\", {\n get: function () {\n var result = {};\n var questions = this.questions;\n for (var i = 0; i < questions.length; i++) {\n var question = questions[i];\n if (!question.isEmpty()) {\n result[question.getValueName()] = question.value;\n }\n if (!!question.comment &&\n !!this.getSurvey() &&\n this.getSurvey().storeOthersAsComment) {\n result[question.getValueName() + _settings__WEBPACK_IMPORTED_MODULE_11__[\"settings\"].commentPrefix] =\n question.comment;\n }\n }\n return result;\n },\n set: function (value) {\n this.isSettingValue = true;\n this.subscribeToChanges(value);\n var questions = this.questions;\n for (var i = 0; i < questions.length; i++) {\n var question = questions[i];\n var val = this.getCellValue(value, question.getValueName());\n var oldComment = question.comment;\n var comment = !!value\n ? value[question.getValueName() + _settings__WEBPACK_IMPORTED_MODULE_11__[\"settings\"].commentPrefix]\n : \"\";\n if (comment == undefined)\n comment = \"\";\n question.updateValueFromSurvey(val);\n if (!!comment || _helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isTwoValueEquals(oldComment, question.comment)) {\n question.updateCommentFromSurvey(comment);\n }\n question.onSurveyValueChanged(val);\n }\n this.isSettingValue = false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"locText\", {\n get: function () {\n return null;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"hasPanel\", {\n get: function () {\n if (!this.data)\n return false;\n return this.data.hasDetailPanel(this);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"detailPanel\", {\n get: function () {\n return this.detailPanelValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"detailPanelId\", {\n get: function () {\n return !!this.detailPanel ? this.detailPanel.id : \"\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"isDetailPanelShowing\", {\n get: function () {\n return !!this.data ? this.data.getIsDetailPanelShowing(this) : false;\n },\n enumerable: false,\n configurable: true\n });\n MatrixDropdownRowModelBase.prototype.setIsDetailPanelShowing = function (val) {\n if (!!this.data) {\n this.data.setIsDetailPanelShowing(this, val);\n }\n if (!!this.onDetailPanelShowingChanged) {\n this.onDetailPanelShowingChanged();\n }\n };\n MatrixDropdownRowModelBase.prototype.showHideDetailPanel = function () {\n if (this.isDetailPanelShowing) {\n this.hideDetailPanel();\n }\n else {\n this.showDetailPanel();\n }\n };\n MatrixDropdownRowModelBase.prototype.showDetailPanel = function () {\n this.ensureDetailPanel();\n if (!this.detailPanelValue)\n return;\n this.setIsDetailPanelShowing(true);\n };\n MatrixDropdownRowModelBase.prototype.hideDetailPanel = function (destroyPanel) {\n if (destroyPanel === void 0) { destroyPanel = false; }\n this.setIsDetailPanelShowing(false);\n if (destroyPanel) {\n this.detailPanelValue = null;\n }\n };\n MatrixDropdownRowModelBase.prototype.ensureDetailPanel = function () {\n if (this.isCreatingDetailPanel)\n return;\n if (!!this.detailPanelValue || !this.hasPanel || !this.data)\n return;\n this.isCreatingDetailPanel = true;\n this.detailPanelValue = this.data.createRowDetailPanel(this);\n var questions = this.detailPanelValue.questions;\n var value = this.data.getRowValue(this.data.getRowIndex(this));\n if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(value)) {\n for (var i = 0; i < questions.length; i++) {\n var key = questions[i].getValueName();\n if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(value[key])) {\n questions[i].value = value[key];\n }\n }\n }\n this.detailPanelValue.setSurveyImpl(this);\n this.isCreatingDetailPanel = false;\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 values[MatrixDropdownRowModelBase.RowValueVariableName] = this.rowName;\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 if (!!this.detailPanel) {\n this.detailPanel.runCondition(values, properties);\n }\n };\n MatrixDropdownRowModelBase.prototype.clearValue = function () {\n var questions = this.questions;\n for (var i = 0; i < questions.length; i++) {\n questions[i].clearValue();\n }\n };\n MatrixDropdownRowModelBase.prototype.onAnyValueChanged = function (name) {\n var questions = this.questions;\n for (var i = 0; i < questions.length; i++) {\n questions[i].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.getQuestionByName(name);\n return !!question ? question.value : null;\n };\n MatrixDropdownRowModelBase.prototype.setValue = function (name, newColumnValue) {\n this.setValueCore(name, newColumnValue, false);\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 question = this.getQuestionByName(name);\n return !!question ? question.comment : \"\";\n };\n MatrixDropdownRowModelBase.prototype.setComment = function (name, newValue, locNotification) {\n this.setValueCore(name, newValue, true);\n };\n MatrixDropdownRowModelBase.prototype.setValueCore = function (name, newColumnValue, isComment) {\n if (this.isSettingValue)\n return;\n this.updateQuestionsValue(name, newColumnValue, isComment);\n var newValue = this.value;\n var changedName = isComment ? name + _settings__WEBPACK_IMPORTED_MODULE_11__[\"settings\"].commentPrefix : name;\n var changedValue = isComment ? this.getComment(name) : this.getValue(name);\n var changedQuestion = this.getQuestionByName(name);\n var changingValue = this.data.onRowChanging(this, changedName, newValue);\n if (!!changedQuestion &&\n !_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isTwoValueEquals(changingValue, changedValue)) {\n if (isComment) {\n changedQuestion.comment = changingValue;\n }\n else {\n changedQuestion.value = changingValue;\n }\n }\n else {\n if (this.data.isValidateOnValueChanging &&\n this.hasQuestonError(changedQuestion))\n return;\n this.data.onRowChanged(this, changedName, newValue, newColumnValue == null && !changedQuestion);\n this.onAnyValueChanged(MatrixDropdownRowModelBase.RowVariableName);\n }\n };\n MatrixDropdownRowModelBase.prototype.updateQuestionsValue = function (name, newColumnValue, isComment) {\n if (!this.detailPanel)\n return;\n var colQuestion = this.getQuestionByColumnName(name);\n var detailQuestion = this.detailPanel.getQuestionByName(name);\n if (!colQuestion || !detailQuestion)\n return;\n var isColQuestion = _helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isTwoValueEquals(newColumnValue, isComment ? colQuestion.comment : colQuestion.value);\n var question = isColQuestion ? detailQuestion : colQuestion;\n this.isSettingValue = true;\n if (!isComment) {\n question.value = newColumnValue;\n }\n else {\n question.comment = newColumnValue;\n }\n this.isSettingValue = false;\n };\n MatrixDropdownRowModelBase.prototype.hasQuestonError = function (question) {\n if (!question)\n return false;\n if (question.hasErrors(true, {\n isOnValueChanged: !this.data.isValidateOnValueChanging,\n }))\n return true;\n if (question.isEmpty())\n return false;\n var cell = this.getCellByColumnName(question.name);\n if (!cell || !cell.column || !cell.column.isUnique)\n return false;\n return this.data.checkIfValueInRowDuplicated(this, question);\n };\n Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"isEmpty\", {\n get: function () {\n var val = this.value;\n if (_helpers__WEBPACK_IMPORTED_MODULE_2__[\"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: false,\n configurable: true\n });\n MatrixDropdownRowModelBase.prototype.getQuestionByColumn = function (column) {\n var cell = this.getCellByColumn(column);\n return !!cell ? cell.question : null;\n };\n MatrixDropdownRowModelBase.prototype.getCellByColumn = function (column) {\n for (var i = 0; i < this.cells.length; i++) {\n if (this.cells[i].column == column)\n return this.cells[i];\n }\n return null;\n };\n MatrixDropdownRowModelBase.prototype.getCellByColumnName = 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];\n }\n return null;\n };\n MatrixDropdownRowModelBase.prototype.getQuestionByColumnName = function (columnName) {\n var cell = this.getCellByColumnName(columnName);\n return !!cell ? cell.question : null;\n };\n Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"questions\", {\n get: function () {\n var res = [];\n for (var i = 0; i < this.cells.length; i++) {\n res.push(this.cells[i].question);\n }\n var detailQuestions = !!this.detailPanel ? this.detailPanel.questions : [];\n for (var i = 0; i < detailQuestions.length; i++) {\n res.push(detailQuestions[i]);\n }\n return res;\n },\n enumerable: false,\n configurable: true\n });\n MatrixDropdownRowModelBase.prototype.getQuestionByName = function (name) {\n var res = this.getQuestionByColumnName(name);\n if (!!res)\n return res;\n return !!this.detailPanel ? this.detailPanel.getQuestionByName(name) : null;\n };\n MatrixDropdownRowModelBase.prototype.getQuestionsByName = function (name) {\n var res = [];\n var q = this.getQuestionByColumnName(name);\n if (!!q)\n res.push(q);\n if (!!this.detailPanel) {\n q = this.detailPanel.getQuestionByName(name);\n if (!!q)\n res.push(q);\n }\n return res;\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.getQuestionByName(key);\n if (question) {\n var qVal = question.value;\n question.clearIncorrectValues();\n if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isTwoValueEquals(qVal, question.value)) {\n this.setValue(key, question.value);\n }\n }\n else {\n if (!this.getSharedQuestionByName(key) &&\n key.indexOf(_settings__WEBPACK_IMPORTED_MODULE_11__[\"settings\"].matrixTotalValuePostFix) < 0) {\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, name) {\n return this.data ? this.data.getMarkdownHtml(text, name) : null;\n };\n MatrixDropdownRowModelBase.prototype.getRenderer = function (name) {\n return this.data ? this.data.getRenderer(name) : 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 if (!!this.detailPanel) {\n this.detailPanel.locStrsChanged();\n }\n };\n MatrixDropdownRowModelBase.prototype.updateCellQuestionOnColumnChanged = function (column, name, newValue) {\n var cell = this.getCellByColumn(column);\n if (!cell)\n return;\n this.updateCellOnColumnChanged(cell, name, newValue);\n };\n MatrixDropdownRowModelBase.prototype.updateCellQuestionOnColumnItemValueChanged = function (column, propertyName, obj, name, newValue, oldValue) {\n var cell = this.getCellByColumn(column);\n if (!cell)\n return;\n this.updateCellOnColumnItemValueChanged(cell, propertyName, obj, name, newValue, oldValue);\n };\n MatrixDropdownRowModelBase.prototype.onQuestionReadOnlyChanged = function (parentIsReadOnly) {\n var questions = this.questions;\n for (var i = 0; i < questions.length; i++) {\n questions[i].readOnly = parentIsReadOnly;\n }\n };\n MatrixDropdownRowModelBase.prototype.hasErrors = function (fireCallback, rec, raiseOnCompletedAsyncValidators) {\n var res = false;\n var cells = this.cells;\n if (!cells)\n return res;\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 raiseOnCompletedAsyncValidators();\n };\n if (!!rec && rec.isOnValueChanged === true && question.isEmpty())\n continue;\n res = question.hasErrors(fireCallback, rec) || res;\n }\n if (this.hasPanel) {\n this.ensureDetailPanel();\n var panelHasError = this.detailPanel.hasErrors(fireCallback, false, rec);\n if (!rec.hideErroredPanel && panelHasError && fireCallback) {\n if (rec.isSingleDetailPanel) {\n rec.hideErroredPanel = true;\n }\n this.showDetailPanel();\n }\n res = panelHasError || res;\n }\n return res;\n };\n MatrixDropdownRowModelBase.prototype.updateCellOnColumnChanged = function (cell, name, newValue) {\n cell.question[name] = newValue;\n };\n MatrixDropdownRowModelBase.prototype.updateCellOnColumnItemValueChanged = function (cell, propertyName, obj, name, newValue, oldValue) {\n var items = cell.question[propertyName];\n if (!Array.isArray(items))\n return;\n var val = name === \"value\" ? oldValue : obj[\"value\"];\n var item = _itemvalue__WEBPACK_IMPORTED_MODULE_6__[\"ItemValue\"].getItemByValue(items, val);\n if (!item)\n return;\n item[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 var cellValue = this.getCellValue(value, column.name);\n if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(cellValue)) {\n cell.question.value = cellValue;\n var commentKey = column.name + _settings__WEBPACK_IMPORTED_MODULE_11__[\"settings\"].commentPrefix;\n if (!!value && !_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(value[commentKey])) {\n cell.question.comment = value[commentKey];\n }\n }\n }\n this.isSettingValue = false;\n };\n MatrixDropdownRowModelBase.prototype.getCellValue = function (value, name) {\n if (!!this.editingObj)\n return _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].getObjPropertyValue(this.editingObj, name);\n return !!value ? value[name] : undefined;\n };\n MatrixDropdownRowModelBase.prototype.createCell = function (column) {\n return new MatrixDropdownCell(column, this, this.data);\n };\n MatrixDropdownRowModelBase.prototype.getSurveyData = function () {\n return this;\n };\n MatrixDropdownRowModelBase.prototype.getSurvey = function () {\n return this.data ? this.data.getSurvey() : null;\n };\n MatrixDropdownRowModelBase.prototype.getTextProcessor = function () {\n return this.textPreProcessor;\n };\n Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"rowIndex\", {\n get: function () {\n return !!this.data ? this.data.getRowIndex(this) + 1 : -1;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"editingObj\", {\n get: function () {\n return this.editingObjValue;\n },\n enumerable: false,\n configurable: true\n });\n MatrixDropdownRowModelBase.prototype.dispose = function () {\n if (!!this.editingObj) {\n this.editingObj.onPropertyChanged.remove(this.onEditingObjPropertyChanged);\n this.editingObjValue = null;\n }\n };\n MatrixDropdownRowModelBase.prototype.subscribeToChanges = function (value) {\n var _this = this;\n if (!value || !value.getType || !value.onPropertyChanged)\n return;\n if (value === this.editingObj)\n return;\n this.editingObjValue = value;\n this.onEditingObjPropertyChanged = function (sender, options) {\n _this.updateOnSetValue(options.name, options.newValue);\n };\n this.editingObj.onPropertyChanged.add(this.onEditingObjPropertyChanged);\n };\n MatrixDropdownRowModelBase.prototype.updateOnSetValue = function (name, newValue) {\n this.isSettingValue = true;\n var questions = this.getQuestionsByName(name);\n for (var i = 0; i < questions.length; i++) {\n questions[i].value = newValue;\n }\n this.isSettingValue = false;\n };\n MatrixDropdownRowModelBase.RowVariableName = \"row\";\n MatrixDropdownRowModelBase.OwnerVariableName = \"self\";\n MatrixDropdownRowModelBase.IndexVariableName = \"rowIndex\";\n MatrixDropdownRowModelBase.RowValueVariableName = \"rowValue\";\n MatrixDropdownRowModelBase.idCounter = 1;\n return MatrixDropdownRowModelBase;\n}());\n\nvar MatrixDropdownTotalRowModel = /** @class */ (function (_super) {\n __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 = _helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].getUnbindValue(this.value);\n _super.prototype.runCondition.call(this, values, properties);\n counter++;\n } while (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"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.colSpans = 1;\n this.isActionsCell = false;\n this.className = \"\";\n this.idValue = QuestionMatrixDropdownRenderedCell.counter++;\n }\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"hasQuestion\", {\n get: function () {\n return !!this.question;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"hasTitle\", {\n get: function () {\n return !!this.locTitle;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"hasPanel\", {\n get: function () {\n return !!this.panel;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"id\", {\n get: function () {\n return this.idValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"showErrorOnTop\", {\n get: function () {\n return this.showErrorOnCore(\"top\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"showErrorOnBottom\", {\n get: function () {\n return this.showErrorOnCore(\"bottom\");\n },\n enumerable: false,\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: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"isChoice\", {\n get: function () {\n return !!this.item;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"choiceValue\", {\n get: function () {\n return this.isChoice ? this.item.value : null;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"isCheckbox\", {\n get: function () {\n return this.isChoice && this.question.getType() == \"checkbox\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"isFirstChoice\", {\n get: function () {\n return this.choiceIndex === 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"css\", {\n get: function () {\n return (this.className +\n (this.question.errors.length > 0 ? \" \" + this.question.cssError : \"\"));\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"headers\", {\n get: function () {\n if (this.cell &&\n this.cell.column &&\n this.cell.column.isShowInMultipleColumns) {\n return this.item.locText.renderedHtml;\n }\n if (this.question && this.question.isVisible) {\n return this.question.locTitle.renderedHtml;\n }\n if (this.hasTitle) {\n return this.locTitle.renderedHtml || \"\";\n }\n return \"\";\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownRenderedCell.prototype.calculateFinalClassName = function (matrixCssClasses) {\n var questionCss = this.cell.question.cssClasses;\n var className = \"\";\n if (!!questionCss) {\n className = \"\";\n if (!!questionCss.itemValue) {\n className += \" \" + questionCss.itemValue;\n }\n if (!!questionCss.asCell) {\n if (!!className)\n className += \"\";\n className += questionCss.asCell;\n }\n }\n if (!className && !!matrixCssClasses) {\n className = matrixCssClasses.cell;\n }\n className +=\n this.question.errors.length > 0 ? \" \" + questionCss.hasError : \"\";\n if (this.isChoice) {\n className += \" \" + matrixCssClasses.choiceCell;\n }\n //'text-align': $data.isChoice ? 'center': ''\n return className;\n };\n QuestionMatrixDropdownRenderedCell.counter = 1;\n return QuestionMatrixDropdownRenderedCell;\n}());\n\nvar QuestionMatrixDropdownRenderedRow = /** @class */ (function () {\n function QuestionMatrixDropdownRenderedRow() {\n this.isDetailRow = false;\n this.cells = [];\n this.className = \"\";\n this.idValue = QuestionMatrixDropdownRenderedRow.counter++;\n }\n Object.defineProperty(QuestionMatrixDropdownRenderedRow.prototype, \"id\", {\n get: function () {\n return this.idValue;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownRenderedRow.counter = 1;\n return QuestionMatrixDropdownRenderedRow;\n}());\n\nvar QuestionMatrixDropdownRenderedTable = /** @class */ (function (_super) {\n __extends(QuestionMatrixDropdownRenderedTable, _super);\n function QuestionMatrixDropdownRenderedTable(matrix) {\n var _this = _super.call(this) || this;\n _this.matrix = matrix;\n _this.hasActionCellInRowsValues = {};\n _this.createNewArray(\"rows\");\n _this.build();\n return _this;\n }\n Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"showTable\", {\n get: function () {\n return this.getPropertyValue(\"showTable\", true);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"showHeader\", {\n get: function () {\n return this.getPropertyValue(\"showHeader\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"showAddRowOnTop\", {\n get: function () {\n return this.getPropertyValue(\"showAddRowOnTop\", false);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"showAddRowOnBottom\", {\n get: function () {\n return this.getPropertyValue(\"showAddRowOnBottom\", false);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"showFooter\", {\n get: function () {\n return this.matrix.hasFooter && this.matrix.isColumnLayoutHorizontal;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"hasFooter\", {\n get: function () {\n return !!this.footerRow;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"hasRemoveRows\", {\n get: function () {\n return this.hasRemoveRowsValue;\n },\n enumerable: false,\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: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"footerRow\", {\n get: function () {\n return this.footerRowValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"rows\", {\n get: function () {\n return this.getPropertyValue(\"rows\");\n },\n enumerable: false,\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.cssClasses = this.matrix.cssClasses;\n this.buildRowsActions();\n this.buildHeader();\n this.buildRows();\n this.buildFooter();\n this.updateShowTableAndAddRow();\n };\n QuestionMatrixDropdownRenderedTable.prototype.updateShowTableAndAddRow = function () {\n var showTable = this.rows.length > 0 ||\n this.matrix.isDesignMode ||\n !this.matrix.getShowColumnsIfEmpty();\n this.setPropertyValue(\"showTable\", showTable);\n var showAddRow = this.matrix.canAddRow && showTable;\n var showAddRowOnTop = showAddRow;\n var showAddRowOnBottom = showAddRow;\n if (showAddRowOnTop) {\n if (this.matrix.getAddRowLocation() === \"default\") {\n showAddRowOnTop = this.matrix.columnLayout === \"vertical\";\n }\n else {\n showAddRowOnTop = this.matrix.getAddRowLocation() !== \"bottom\";\n }\n }\n if (showAddRowOnBottom && this.matrix.getAddRowLocation() !== \"topBottom\") {\n showAddRowOnBottom = !showAddRowOnTop;\n }\n this.setPropertyValue(\"showAddRowOnTop\", showAddRowOnTop);\n this.setPropertyValue(\"showAddRowOnBottom\", showAddRowOnBottom);\n };\n QuestionMatrixDropdownRenderedTable.prototype.onAddedRow = function () {\n if (this.getRenderedDataRowCount() >= this.matrix.visibleRows.length)\n return;\n var row = this.matrix.visibleRows[this.matrix.visibleRows.length - 1];\n this.rowsActions.push(this.buildRowActions(row));\n this.addHorizontalRow(this.rows, row, this.matrix.visibleRows.length == 1 && !this.matrix.showHeader);\n this.updateShowTableAndAddRow();\n };\n QuestionMatrixDropdownRenderedTable.prototype.getRenderedDataRowCount = function () {\n var res = 0;\n for (var i = 0; i < this.rows.length; i++) {\n if (!this.rows[i].isDetailRow)\n res++;\n }\n return res;\n };\n QuestionMatrixDropdownRenderedTable.prototype.onRemovedRow = function (row) {\n var rowIndex = this.getRenderedRowIndex(row);\n if (rowIndex < 0)\n return;\n this.rowsActions.splice(rowIndex, 1);\n var removeCount = 1;\n if (rowIndex < this.rows.length - 1 &&\n this.rows[rowIndex + 1].isDetailRow) {\n removeCount++;\n }\n this.rows.splice(rowIndex, removeCount);\n this.updateShowTableAndAddRow();\n };\n QuestionMatrixDropdownRenderedTable.prototype.onDetailPanelChangeVisibility = function (row, isShowing) {\n var rowIndex = this.getRenderedRowIndex(row);\n if (rowIndex < 0)\n return;\n var panelRowIndex = rowIndex < this.rows.length - 1 && this.rows[rowIndex + 1].isDetailRow\n ? rowIndex + 1\n : -1;\n if ((isShowing && panelRowIndex > -1) || (!isShowing && panelRowIndex < 0))\n return;\n if (isShowing) {\n var detailRow = this.createDetailPanelRow(row, this.rows[rowIndex]);\n this.rows.splice(rowIndex + 1, 0, detailRow);\n }\n else {\n this.rows.splice(panelRowIndex, 1);\n }\n };\n QuestionMatrixDropdownRenderedTable.prototype.getRenderedRowIndex = function (row) {\n for (var i = 0; i < this.rows.length; i++) {\n if (this.rows[i].row == row)\n return i;\n }\n return -1;\n };\n QuestionMatrixDropdownRenderedTable.prototype.buildRowsActions = function () {\n this.rowsActions = [];\n var rows = this.matrix.visibleRows;\n for (var i = 0; i < rows.length; i++) {\n this.rowsActions.push(this.buildRowActions(rows[i]));\n }\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.hasActionCellInRows(\"start\")) {\n this.headerRow.cells.push(this.createHeaderCell(null));\n }\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.hasActionCellInRows(\"end\")) {\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.hasActionCellInRows(\"start\")) {\n this.footerRow.cells.push(this.createHeaderCell(null));\n }\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.hasActionCellInRows(\"end\")) {\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.hasActionCellInRows = function (location) {\n if (this.hasActionCellInRowsValues[location] === undefined) {\n var rows = this.matrix.visibleRows;\n this.hasActionCellInRowsValues[location] = false;\n for (var i = 0; i < rows.length; i++) {\n if (!this.isValueEmpty(this.getRowActions(i, location))) {\n this.hasActionCellInRowsValues[location] = true;\n break;\n }\n }\n }\n return this.hasActionCellInRowsValues[location];\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 this.addHorizontalRow(renderedRows, rows[i], i == 0 && !this.matrix.showHeader);\n }\n return renderedRows;\n };\n QuestionMatrixDropdownRenderedTable.prototype.addHorizontalRow = function (renderedRows, row, useAsHeader) {\n var renderedRow = this.createHorizontalRow(row, useAsHeader);\n renderedRow.row = row;\n renderedRows.push(renderedRow);\n if (row.isDetailPanelShowing) {\n renderedRows.push(this.createDetailPanelRow(row, renderedRow));\n }\n };\n QuestionMatrixDropdownRenderedTable.prototype.getRowActionsCell = function (rowIndex, location) {\n var rowActions = this.getRowActions(rowIndex, location);\n if (!this.isValueEmpty(rowActions)) {\n var cell = new QuestionMatrixDropdownRenderedCell();\n var actionContainer = new _actions_adaptive_container__WEBPACK_IMPORTED_MODULE_14__[\"AdaptiveActionContainer\"]();\n actionContainer.setItems(rowActions);\n var itemValue = new _itemvalue__WEBPACK_IMPORTED_MODULE_6__[\"ItemValue\"](actionContainer);\n cell.item = itemValue;\n cell.isActionsCell = true;\n cell.className = this.cssClasses.actionsCell;\n cell.row = this.matrix.visibleRows[rowIndex];\n return cell;\n }\n return null;\n };\n QuestionMatrixDropdownRenderedTable.prototype.getRowActions = function (rowIndex, location) {\n var actions = this.rowsActions[rowIndex];\n if (!Array.isArray(actions))\n return [];\n return actions.filter(function (action) {\n if (!action.location) {\n action.location = \"start\";\n }\n return action.location === location;\n });\n };\n QuestionMatrixDropdownRenderedTable.prototype.buildRowActions = function (row) {\n var actions = [];\n this.setDefaultRowActions(row, actions);\n if (!!this.matrix.survey) {\n actions = this.matrix.survey.getUpdatedMatrixRowActions(this.matrix, row, actions);\n }\n return actions;\n };\n QuestionMatrixDropdownRenderedTable.prototype.setDefaultRowActions = function (row, actions) {\n if (this.hasRemoveRows && this.canRemoveRow(row)) {\n actions.push(new _actions_action__WEBPACK_IMPORTED_MODULE_13__[\"Action\"]({\n id: \"remove-row\",\n location: \"end\",\n enabled: !this.matrix.isInputReadOnly,\n component: \"sv-matrix-remove-button\",\n data: { row: row, question: this.matrix },\n }));\n }\n if (row.hasPanel) {\n actions.push(new _actions_action__WEBPACK_IMPORTED_MODULE_13__[\"Action\"]({\n id: \"show-detail\",\n location: \"start\",\n component: \"sv-matrix-detail-button\",\n data: { row: row, question: this.matrix },\n }));\n }\n };\n QuestionMatrixDropdownRenderedTable.prototype.createHorizontalRow = function (row, useAsHeader) {\n var res = new QuestionMatrixDropdownRenderedRow();\n this.addRowActionsCell(row, res, \"start\");\n if (this.matrix.hasRowText) {\n var renderedCell = this.createTextCell(row.locText);\n renderedCell.row = row;\n res.cells.push(renderedCell);\n if (useAsHeader) {\n this.setHeaderCellWidth(null, renderedCell);\n }\n if (row.hasPanel && !!this.cssClasses.detailRowText) {\n if (!!renderedCell.className)\n renderedCell.className += \" \";\n renderedCell.className += this.cssClasses.detailRowText;\n }\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 var renderedCell = this.createEditCell(cell);\n res.cells.push(renderedCell);\n if (useAsHeader) {\n this.setHeaderCellWidth(cell.column, renderedCell);\n }\n }\n }\n this.addRowActionsCell(row, res, \"end\");\n return res;\n };\n QuestionMatrixDropdownRenderedTable.prototype.addRowActionsCell = function (row, renderedRow, location) {\n var rowIndex = this.matrix.visibleRows.indexOf(row);\n if (this.hasActionCellInRows(location)) {\n var actions = this.getRowActionsCell(rowIndex, location);\n if (!!actions) {\n renderedRow.cells.push(actions);\n }\n else {\n var cell = new QuestionMatrixDropdownRenderedCell();\n cell.isEmpty = true;\n renderedRow.cells.push(cell);\n }\n }\n };\n QuestionMatrixDropdownRenderedTable.prototype.createDetailPanelRow = function (row, renderedRow) {\n var res = new QuestionMatrixDropdownRenderedRow();\n res.row = row;\n res.className += this.cssClasses.detailRow;\n res.isDetailRow = true;\n var buttonCell = new QuestionMatrixDropdownRenderedCell();\n if (this.matrix.hasRowText) {\n buttonCell.colSpans = 2;\n }\n buttonCell.isEmpty = true;\n res.cells.push(buttonCell);\n var actionsCell = null;\n if (this.hasActionCellInRows(\"end\")) {\n actionsCell = new QuestionMatrixDropdownRenderedCell();\n actionsCell.isEmpty = true;\n }\n var cell = new QuestionMatrixDropdownRenderedCell();\n cell.panel = row.detailPanel;\n cell.colSpans =\n renderedRow.cells.length -\n buttonCell.colSpans -\n (!!actionsCell ? actionsCell.colSpans : 0);\n cell.className = this.cssClasses.detailPanelCell;\n res.cells.push(cell);\n if (!!actionsCell) {\n res.cells.push(actionsCell);\n }\n if (typeof this.matrix.onCreateDetailPanelRenderedRowCallback === \"function\") {\n this.matrix.onCreateDetailPanelRenderedRowCallback(res);\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.hasActionCellInRows(\"end\")) {\n renderedRows.push(this.createEndVerticalActionRow());\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 var hCell = this.createTextCell(lTitle);\n hCell.column = column;\n if (!choice) {\n this.setRequriedToHeaderCell(column, hCell);\n }\n res.cells.push(hCell);\n }\n var rows = this.matrix.visibleRows;\n for (var i = 0; i < rows.length; i++) {\n var rChoice = choice;\n var rChoiceIndex = choiceIndex >= 0 ? choiceIndex : i;\n var cell = rows[i].cells[index];\n var visChoices = !!choice ? cell.question.visibleChoices : undefined;\n if (!!visChoices && rChoiceIndex < visChoices.length) {\n rChoice = visChoices[rChoiceIndex];\n }\n var rCell = this.createEditCell(cell, rChoice);\n rCell.item = rChoice;\n rCell.choiceIndex = rChoiceIndex;\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.createEndVerticalActionRow = 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.getRowActionsCell(i, \"end\"));\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 = isFooter\n ? this.getMultipleColumnChoices(cell.column)\n : cell.question.visibleChoices;\n if (!choices)\n return;\n for (var i = 0; i < choices.length; i++) {\n var rCell = this.createEditCell(cell, !isFooter ? choices[i] : undefined);\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, choiceItem) {\n if (choiceItem === void 0) { choiceItem = undefined; }\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 res.item = choiceItem;\n res.className = res.calculateFinalClassName(this.cssClasses);\n //res.css = res.calcCss(this.cssClasses.cell);\n // var questionCss = cell.question.cssClasses;\n // var className = \"\";\n // if (!!questionCss) {\n // className = \"\";\n // if (!!questionCss.itemValue) {\n // className += \" \" + questionCss.itemValue;\n // }\n // if (!!questionCss.asCell) {\n // if (!!className) className += \"\";\n // className += questionCss.asCell;\n // }\n // }\n // if (!className && !!this.cssClasses.cell) {\n // className = this.cssClasses.cell;\n // }\n //res.className = className;\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 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 cell.column = column;\n this.setHeaderCell(column, cell);\n if (this.cssClasses.headerCell) {\n cell.className = this.cssClasses.headerCell;\n }\n return cell;\n };\n QuestionMatrixDropdownRenderedTable.prototype.setHeaderCell = function (column, cell) {\n this.setHeaderCellWidth(column, cell);\n this.setRequriedToHeaderCell(column, cell);\n };\n QuestionMatrixDropdownRenderedTable.prototype.setHeaderCellWidth = 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.setRequriedToHeaderCell = function (column, cell) {\n if (!!column && column.isRequired && this.matrix.survey) {\n cell.requiredText = this.matrix.survey.requiredText;\n }\n };\n QuestionMatrixDropdownRenderedTable.prototype.createRemoveRowCell = function (row) {\n var res = new QuestionMatrixDropdownRenderedCell();\n res.row = row;\n res.isRemoveRow = this.canRemoveRow(row);\n if (!!this.cssClasses.cell) {\n res.className = this.cssClasses.cell;\n }\n return res;\n };\n QuestionMatrixDropdownRenderedTable.prototype.createTextCell = function (locTitle) {\n var cell = new QuestionMatrixDropdownRenderedCell();\n cell.locTitle = locTitle;\n if (!!this.cssClasses.cell) {\n cell.className = this.cssClasses.cell;\n }\n return cell;\n };\n return QuestionMatrixDropdownRenderedTable;\n}(_base__WEBPACK_IMPORTED_MODULE_3__[\"Base\"]));\n\n/**\n * A base class for matrix dropdown and matrix dynamic questions.\n */\nvar QuestionMatrixDropdownModelBase = /** @class */ (function (_super) {\n __extends(QuestionMatrixDropdownModelBase, _super);\n function QuestionMatrixDropdownModelBase(name) {\n var _this = _super.call(this, name) || this;\n _this.isRowChanging = false;\n _this.lockResetRenderedTable = false;\n _this.isDoingonAnyValueChanged = false;\n _this.createItemValues(\"choices\");\n _this.createLocalizableString(\"optionsCaption\", _this);\n _this.createLocalizableString(\"keyDuplicationError\", _this);\n _this.detailPanelValue = _this.createNewDetailPanel();\n _this.detailPanel.selectedElementInDesign = _this;\n _this.detailPanel.renderWidth = \"100%\";\n _this.registerFunctionOnPropertyValueChanged(\"columns\", function (newColumns) {\n _this.updateColumnsIndexes(newColumns);\n _this.generatedTotalRow = null;\n _this.clearRowsAndResetRenderedTable();\n });\n _this.registerFunctionOnPropertyValueChanged(\"cellType\", function () {\n _this.updateColumnsCellType();\n _this.clearRowsAndResetRenderedTable();\n });\n _this.registerFunctionOnPropertiesValueChanged([\"optionsCaption\", \"columnColCount\", \"rowTitleWidth\", \"choices\"], function () {\n _this.clearRowsAndResetRenderedTable();\n });\n _this.registerFunctionOnPropertiesValueChanged([\n \"columnLayout\",\n \"addRowLocation\",\n \"hideColumnsIfEmpty\",\n \"showHeader\",\n \"minRowCount\",\n \"isReadOnly\",\n \"rowCount\",\n \"hasFooter\",\n \"detailPanelMode\",\n ], function () {\n _this.resetRenderedTable();\n });\n return _this;\n }\n Object.defineProperty(QuestionMatrixDropdownModelBase, \"defaultCellType\", {\n get: function () {\n return _settings__WEBPACK_IMPORTED_MODULE_11__[\"settings\"].matrixDefaultCellType;\n },\n set: function (val) {\n _settings__WEBPACK_IMPORTED_MODULE_11__[\"settings\"].matrixDefaultCellType = val;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.addDefaultColumns = function (matrix) {\n var colNames = _questionfactory__WEBPACK_IMPORTED_MODULE_8__[\"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 }, function (item) {\n item.colOwner = null;\n });\n };\n QuestionMatrixDropdownModelBase.prototype.getType = function () {\n return \"matrixdropdownbase\";\n };\n QuestionMatrixDropdownModelBase.prototype.dispose = function () {\n _super.prototype.dispose.call(this);\n this.clearGeneratedRows();\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"hasSingleInput\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"isRowsDynamic\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.itemValuePropertyChanged = function (item, name, oldValue, newValue) {\n _super.prototype.itemValuePropertyChanged.call(this, item, name, oldValue, newValue);\n if (item.ownerPropertyName === \"choices\") {\n this.clearRowsAndResetRenderedTable();\n }\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: false,\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: false,\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: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"detailPanelMode\", {\n /**\n * Set the value to \"underRow\" to show the detailPanel under the row.\n */\n get: function () {\n return this.getPropertyValue(\"detailPanelMode\", \"none\");\n },\n set: function (val) {\n this.setPropertyValue(\"detailPanelMode\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"detailPanel\", {\n /**\n * The detail template Panel. This panel is used as a template on creating detail panel for a row.\n * @see detailElements\n * @see detailPanelMode\n */\n get: function () {\n return this.detailPanelValue;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.getPanel = function () {\n return this.detailPanel;\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"detailElements\", {\n /**\n * The template Panel elements, questions and panels.\n * @see detailPanel\n * @see detailPanelMode\n */\n get: function () {\n return this.detailPanel.elements;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.createNewDetailPanel = function () {\n return _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].createClass(\"panel\");\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"hasRowText\", {\n get: function () {\n return true;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.getFooterText = function () {\n return null;\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"canAddRow\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"canRemoveRows\", {\n get: function () {\n return false;\n },\n enumerable: false,\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 (row) {\n this.lockResetRenderedTable = false;\n if (this.renderedTable.isRequireReset()) {\n this.resetRenderedTable();\n }\n else {\n if (!!row) {\n this.renderedTable.onRemovedRow(row);\n }\n }\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"renderedTableValue\", {\n get: function () {\n return this.getPropertyValue(\"renderedTable\", null);\n },\n set: function (val) {\n this.setPropertyValue(\"renderedTable\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.clearRowsAndResetRenderedTable = function () {\n this.clearGeneratedRows();\n this.resetRenderedTable();\n this.fireCallback(this.columnsChangedCallback);\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 QuestionMatrixDropdownModelBase.prototype.clearGeneratedRows = function () {\n if (!this.generatedVisibleRows)\n return;\n for (var i = 0; i < this.generatedVisibleRows.length; i++) {\n this.generatedVisibleRows[i].dispose();\n }\n _super.prototype.clearGeneratedRows.call(this);\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: false,\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\", _settings__WEBPACK_IMPORTED_MODULE_11__[\"settings\"].matrixDefaultCellType);\n },\n set: function (val) {\n val = val.toLowerCase();\n this.setPropertyValue(\"cellType\", val);\n },\n enumerable: false,\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 },\n enumerable: false,\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: false,\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: false,\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 (name == \"isRequired\") {\n this.resetRenderedTable();\n }\n if (column.isShowInMultipleColumns) {\n this.onShowInMultipleColumnsChanged(column);\n }\n };\n QuestionMatrixDropdownModelBase.prototype.onColumnItemValuePropertyChanged = function (column, propertyName, obj, name, newValue, oldValue) {\n if (!this.generatedVisibleRows)\n return;\n for (var i = 0; i < this.generatedVisibleRows.length; i++) {\n this.generatedVisibleRows[i].updateCellQuestionOnColumnItemValueChanged(column, propertyName, obj, name, newValue, oldValue);\n }\n };\n QuestionMatrixDropdownModelBase.prototype.onShowInMultipleColumnsChanged = function (column) {\n this.clearGeneratedRows();\n this.resetRenderedTable();\n };\n QuestionMatrixDropdownModelBase.prototype.onColumnCellTypeChanged = function (column) {\n this.clearGeneratedRows();\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: false,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.getAddRowLocation = function () {\n return \"default\";\n };\n QuestionMatrixDropdownModelBase.prototype.getShowColumnsIfEmpty = function () {\n return false;\n };\n QuestionMatrixDropdownModelBase.prototype.updateShowTableAndAddRow = function () {\n if (!!this.renderedTable) {\n this.renderedTable.updateShowTableAndAddRow();\n }\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: false,\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 = _helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].getUnbindValue(this.totalValue);\n this.runCellsCondition(values, properties);\n this.runTotalsCondition(values, properties);\n counter++;\n } while (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"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 = values;\n if (!newValues)\n newValues = {};\n /*\n var newValues: { [index: string]: any } = {};\n if (values && values instanceof Object) {\n newValues = JSON.parse(JSON.stringify(values));\n }\n */\n var totalRow = {};\n if (!this.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 columns = this.columns;\n for (var i = 0; i < columns.length; i++) {\n columns[i].locStrsChanged();\n }\n var rows = this.generatedVisibleRows;\n if (!rows)\n return;\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: false,\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\", _surveyStrings__WEBPACK_IMPORTED_MODULE_7__[\"surveyLocalization\"].getString(\"optionsCaption\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"optionsCaption\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"locOptionsCaption\", {\n get: function () {\n return this.getLocalizableString(\"optionsCaption\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"keyDuplicationError\", {\n /**\n * The duplication value error text. Set it to show the text different from the default.\n * @see MatrixDropdownColumn.isUnique\n */\n get: function () {\n return this.getLocalizableStringText(\"keyDuplicationError\", _surveyStrings__WEBPACK_IMPORTED_MODULE_7__[\"surveyLocalization\"].getString(\"keyDuplicationError\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"keyDuplicationError\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"locKeyDuplicationError\", {\n get: function () {\n return this.getLocalizableString(\"keyDuplicationError\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"storeOthersAsComment\", {\n get: function () {\n return !!this.survey ? this.survey.storeOthersAsComment : false;\n },\n enumerable: false,\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 this.updateIsAnswered();\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 if (!!row.editingObj)\n continue;\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: false,\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: false,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.onSurveyLoad = function () {\n _super.prototype.onSurveyLoad.call(this);\n this.updateColumnsIndexes(this.columns);\n this.clearGeneratedRows();\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 QuestionMatrixDropdownModelBase.prototype.checkIfValueInRowDuplicated = function (checkedRow, cellQuestion) {\n if (!this.generatedVisibleRows)\n return false;\n var res = false;\n for (var i = 0; i < this.generatedVisibleRows.length; i++) {\n var row = this.generatedVisibleRows[i];\n if (checkedRow === row)\n continue;\n if (row.getValue(cellQuestion.name) == cellQuestion.value) {\n res = true;\n break;\n }\n }\n if (res) {\n this.addDuplicationError(cellQuestion);\n }\n else {\n cellQuestion.clearErrors();\n }\n return res;\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.getRowObj = function (row) {\n var obj = this.getRowValueCore(row, this.value);\n return !!obj && !!obj.getType ? obj : null;\n };\n QuestionMatrixDropdownModelBase.prototype.getRowDisplayValue = function (keysAsText, row, rowValue) {\n if (!rowValue)\n return rowValue;\n if (!!row.editingObj)\n return rowValue;\n var keys = Object.keys(rowValue);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var question = row.getQuestionByName(key);\n if (!question) {\n question = this.getSharedQuestionByName(key, row);\n }\n if (!!question) {\n var displayvalue = question.getDisplayValue(keysAsText, rowValue[key]);\n if (keysAsText && !!question.title && question.title !== key) {\n rowValue[question.title] = displayvalue;\n delete rowValue[key];\n }\n else {\n rowValue[key] = displayvalue;\n }\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.text,\n value: row.value,\n displayValue: _this.getRowDisplayValue(false, 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.getProgressInfo = function () {\n return _survey_element__WEBPACK_IMPORTED_MODULE_4__[\"SurveyElement\"].getProgressInfoByElements(this.getCellQuestions(), this.isRequired);\n };\n QuestionMatrixDropdownModelBase.prototype.getCellQuestions = function () {\n var rows = this.visibleRows;\n if (!rows)\n return [];\n var questions = [];\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 questions.push(row.cells[j].question);\n }\n }\n return questions;\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 errosInRows = this.hasErrorInRows(fireCallback, rec);\n var isDuplicated = this.isValueDuplicated();\n return _super.prototype.hasErrors.call(this, fireCallback, rec) || errosInRows || isDuplicated;\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.hasErrorInRows = function (fireCallback, rec) {\n var _this = this;\n if (!this.generatedVisibleRows)\n return false;\n var res = false;\n if (!rec)\n rec = {};\n rec.isSingleDetailPanel = this.detailPanelMode === \"underRowSingle\";\n for (var i = 0; i < this.generatedVisibleRows.length; i++) {\n res =\n this.generatedVisibleRows[i].hasErrors(fireCallback, rec, function () {\n _this.raiseOnCompletedAsyncValidators();\n }) || res;\n }\n return res;\n };\n QuestionMatrixDropdownModelBase.prototype.isValueDuplicated = function () {\n if (!this.generatedVisibleRows)\n return false;\n var columns = this.getUniqueColumns();\n var res = false;\n for (var i = 0; i < columns.length; i++) {\n res = this.isValueInColumnDuplicated(columns[i]) || res;\n }\n return res;\n };\n QuestionMatrixDropdownModelBase.prototype.isValueInColumnDuplicated = function (column) {\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 QuestionMatrixDropdownModelBase.prototype.getUniqueColumns = function () {\n var res = new Array();\n for (var i = 0; i < this.columns.length; i++) {\n if (this.columns[i].isUnique) {\n res.push(this.columns[i]);\n }\n }\n return res;\n };\n QuestionMatrixDropdownModelBase.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 this.addDuplicationError(question);\n return true;\n }\n }\n keyValues.push(value);\n return false;\n };\n QuestionMatrixDropdownModelBase.prototype.addDuplicationError = function (question) {\n question.addError(new _error__WEBPACK_IMPORTED_MODULE_12__[\"KeyDuplicationError\"](this.keyDuplicationError, this));\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 question.setParentQuestion(this);\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 getQuestion = function (colName) {\n for (var i = 0; i < row.cells.length; i++) {\n var col = row.cells[i].column;\n if (!!col && col.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 options = this.getOnCellValueChangedOptions(row, columnName, rowValue);\n return this.survey.matrixCellValidate(this, options);\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"isValidateOnValueChanging\", {\n get: function () {\n return !!this.survey ? this.survey.isValidateOnValueChanging : false;\n },\n enumerable: false,\n configurable: true\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 rowObj = !!columnName ? this.getRowObj(row) : null;\n if (!!rowObj) {\n var columnValue = null;\n if (!!newRowValue && !isDeletingValue) {\n columnValue = newRowValue[columnName];\n }\n this.isRowChanging = true;\n rowObj[columnName] = columnValue;\n this.isRowChanging = false;\n this.onCellValueChanged(row, columnName, rowObj);\n }\n else {\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 };\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.getElementsInDesign = function (includeHidden) {\n if (includeHidden === void 0) { includeHidden = false; }\n if (this.detailPanelMode == \"none\")\n return _super.prototype.getElementsInDesign.call(this, includeHidden);\n return includeHidden ? [this.detailPanel] : this.detailElements;\n };\n QuestionMatrixDropdownModelBase.prototype.hasDetailPanel = function (row) {\n if (this.detailPanelMode == \"none\")\n return false;\n if (this.isDesignMode)\n return true;\n if (!!this.onHasDetailPanelCallback)\n return this.onHasDetailPanelCallback(row);\n return this.detailElements.length > 0;\n };\n QuestionMatrixDropdownModelBase.prototype.getIsDetailPanelShowing = function (row) {\n if (this.detailPanelMode == \"none\")\n return false;\n if (this.isDesignMode) {\n var res = this.visibleRows.indexOf(row) == 0;\n if (res) {\n if (!row.detailPanel) {\n row.showDetailPanel();\n }\n }\n return res;\n }\n return this.getPropertyValue(\"isRowShowing\" + row.id, false);\n };\n QuestionMatrixDropdownModelBase.prototype.setIsDetailPanelShowing = function (row, val) {\n if (val == this.getIsDetailPanelShowing(row))\n return;\n this.setPropertyValue(\"isRowShowing\" + row.id, val);\n this.updateDetailPanelButtonCss(row);\n if (!!this.renderedTable) {\n this.renderedTable.onDetailPanelChangeVisibility(row, val);\n }\n if (val && this.detailPanelMode === \"underRowSingle\") {\n var rows = this.visibleRows;\n for (var i = 0; i < rows.length; i++) {\n if (rows[i].id !== row.id && rows[i].isDetailPanelShowing) {\n rows[i].hideDetailPanel();\n }\n }\n }\n };\n QuestionMatrixDropdownModelBase.prototype.getDetailPanelButtonCss = function (row) {\n var res = this.getPropertyValue(\"detailButtonCss\" + row.id);\n if (!!res)\n return res;\n var res = this.cssClasses.detailButton;\n return !!res ? res : \"\";\n };\n QuestionMatrixDropdownModelBase.prototype.getDetailPanelIconCss = function (row) {\n var res = this.getPropertyValue(\"detailIconCss\" + row.id);\n if (!!res)\n return res;\n var res = this.cssClasses.detailIcon;\n return !!res ? res : \"\";\n };\n QuestionMatrixDropdownModelBase.prototype.updateDetailPanelButtonCss = function (row) {\n var classes = this.cssClasses;\n var icon = classes.detailIcon;\n if (!icon)\n icon = \"\";\n var button = classes.detailButton;\n if (!button)\n button = \"\";\n if (this.getIsDetailPanelShowing(row)) {\n if (!!classes.detailIconExpanded)\n icon += \" \" + classes.detailIconExpanded;\n if (!!classes.detailButtonExpanded)\n button += \" \" + classes.detailButtonExpanded;\n }\n this.setPropertyValue(\"detailIconCss\" + row.id, icon);\n this.setPropertyValue(\"detailButtonCss\" + row.id, button);\n };\n QuestionMatrixDropdownModelBase.prototype.createRowDetailPanel = function (row) {\n if (this.isDesignMode)\n return this.detailPanel;\n var panel = this.createNewDetailPanel();\n var json = this.detailPanel.toJSON();\n new _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"JsonObject\"]().toObject(json, panel);\n panel.renderWidth = \"100%\";\n panel.updateCustomWidgets();\n if (!!this.onCreateDetailPanelCallback) {\n this.onCreateDetailPanelCallback(row, panel);\n }\n return panel;\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.isReadOnly) {\n this.data.setValue(this.getValueName() + _settings__WEBPACK_IMPORTED_MODULE_11__[\"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].getQuestionByName(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 Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"SurveyModel\", {\n get: function () {\n return this.survey;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.getCellTemplateData = function (cell) {\n // return cell.cell.column.templateQuestion;\n return this.SurveyModel.getMatrixCellTemplateData(cell);\n };\n QuestionMatrixDropdownModelBase.prototype.getCellWrapperComponentName = function (cell) {\n return this.SurveyModel.getElementWrapperComponentName(cell, \"cell\");\n };\n QuestionMatrixDropdownModelBase.prototype.getCellWrapperComponentData = function (cell) {\n return this.SurveyModel.getElementWrapperComponentData(cell, \"cell\");\n };\n QuestionMatrixDropdownModelBase.prototype.getColumnHeaderWrapperComponentName = function (cell) {\n return this.SurveyModel.getElementWrapperComponentName(cell, \"column-header\");\n };\n QuestionMatrixDropdownModelBase.prototype.getColumnHeaderWrapperComponentData = function (cell) {\n return this.SurveyModel.getElementWrapperComponentData(cell, \"column-header\");\n };\n QuestionMatrixDropdownModelBase.prototype.getRowHeaderWrapperComponentName = function (cell) {\n return this.SurveyModel.getElementWrapperComponentName(cell, \"row-header\");\n };\n QuestionMatrixDropdownModelBase.prototype.getRowHeaderWrapperComponentData = function (cell) {\n return this.SurveyModel.getElementWrapperComponentData(cell, \"row-header\");\n };\n return QuestionMatrixDropdownModelBase;\n}(_martixBase__WEBPACK_IMPORTED_MODULE_1__[\"QuestionMatrixBaseModel\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"matrixdropdowncolumn\", [\n { name: \"!name\", isUnique: true },\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 \"isUnique: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 Object(_question_expression__WEBPACK_IMPORTED_MODULE_9__[\"getCurrecyCodes\"])();\n },\n default: \"USD\",\n },\n { name: \"totalMaximumFractionDigits:number\", default: -1 },\n { name: \"totalMinimumFractionDigits:number\", default: -1 },\n { name: \"renderAs\", default: \"default\", visible: false },\n], function () {\n return new MatrixDropdownColumn(\"\");\n});\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"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 {\n name: \"detailElements\",\n visible: false,\n isLightSerializable: false,\n },\n {\n name: \"detailPanelMode\",\n choices: [\"none\", \"underRow\", \"underRowSingle\"],\n default: \"none\",\n },\n \"horizontalScroll:boolean\",\n {\n name: \"choices:itemvalue[]\",\n },\n { name: \"optionsCaption\", serializationProperty: \"locOptionsCaption\" },\n {\n name: \"keyDuplicationError\",\n serializationProperty: \"locKeyDuplicationError\",\n },\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\n/***/ \"./src/question_matrixdynamic.ts\":\n/*!***************************************!*\\\n !*** ./src/question_matrixdynamic.ts ***!\n \\***************************************/\n/*! exports provided: MatrixDynamicRowModel, QuestionMatrixDynamicModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MatrixDynamicRowModel\", function() { return MatrixDynamicRowModel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDynamicModel\", function() { return QuestionMatrixDynamicModel; });\n/* harmony import */ var _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./question_matrixdropdownbase */ \"./src/question_matrixdropdownbase.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./utils/utils */ \"./src/utils/utils.ts\");\n/* harmony import */ var sortablejs__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! sortablejs */ \"./node_modules/sortablejs/modular/sortable.esm.js\");\n/* harmony import */ var _actions_action__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./actions/action */ \"./src/actions/action.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n\n\n\n\n\nvar Sortable = sortablejs__WEBPACK_IMPORTED_MODULE_8__[\"default\"];\nvar MatrixDynamicRowModel = /** @class */ (function (_super) {\n __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: false,\n configurable: true\n });\n return MatrixDynamicRowModel;\n}(_question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_0__[\"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 __extends(QuestionMatrixDynamicModel, _super);\n function QuestionMatrixDynamicModel(name) {\n var _this = _super.call(this, name) || this;\n _this.rowCounter = 0;\n _this.initialRowCount = 2;\n _this.setRowCountValueFromData = false;\n _this.moveRowByIndex = function (fromIndex, toIndex) {\n var value = _this.createNewValue();\n if (!value)\n return;\n var movableRow = value[fromIndex];\n if (!movableRow)\n return;\n value.splice(fromIndex, 1);\n value.splice(toIndex, 0, movableRow);\n _this.value = value;\n };\n void (_this.createLocalizableString(\"confirmDeleteText\", _this));\n var locAddRowText = _this.createLocalizableString(\"addRowText\", _this);\n locAddRowText.onGetTextCallback = function (text) {\n return !!text ? text : _this.defaultAddRowText;\n };\n var locRemoveRowText = _this.createLocalizableString(\"removeRowText\", _this);\n locRemoveRowText.onGetTextCallback = function (text) {\n return !!text ? text : _surveyStrings__WEBPACK_IMPORTED_MODULE_3__[\"surveyLocalization\"].getString(\"removeRow\");\n };\n var locEmptyRowsText = (_this.createLocalizableString(\"emptyRowsText\", _this));\n locEmptyRowsText.onGetTextCallback = function (text) {\n return !!text ? text : _surveyStrings__WEBPACK_IMPORTED_MODULE_3__[\"surveyLocalization\"].getString(\"emptyRowsText\");\n };\n _this.registerFunctionOnPropertiesValueChanged([\"hideColumnsIfEmpty\", \"allowAddRows\"], function () {\n _this.updateShowTableAndAddRow();\n });\n _this.registerFunctionOnPropertyValueChanged(\"allowRowsDragAndDrop\", function () {\n _this.clearRowsAndResetRenderedTable();\n });\n return _this;\n }\n QuestionMatrixDynamicModel.prototype.getType = function () {\n return \"matrixdynamic\";\n };\n //cross framework initialization\n QuestionMatrixDynamicModel.prototype.afterRenderQuestionElement = function (el) {\n if (!!el && this.allowRowsDragAndDrop) {\n this.initSortable(el.querySelector(\"tbody\"));\n }\n _super.prototype.afterRenderQuestionElement.call(this, el);\n };\n //cross framework destroy\n QuestionMatrixDynamicModel.prototype.beforeDestroyQuestionElement = function (el) {\n if (this.sortableInst)\n this.sortableInst.destroy();\n _super.prototype.beforeDestroyQuestionElement.call(this, el);\n };\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"isRowsDynamic\", {\n get: function () {\n return true;\n },\n enumerable: false,\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: false,\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: false,\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: false,\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: false,\n configurable: true\n });\n QuestionMatrixDynamicModel.prototype.isDefaultValueEmpty = function () {\n return (_super.prototype.isDefaultValueEmpty.call(this) && this.isValueEmpty(this.defaultRowValue));\n };\n QuestionMatrixDynamicModel.prototype.valueFromData = function (val) {\n if (this.minRowCount < 1)\n return _super.prototype.valueFromData.call(this, val);\n if (!Array.isArray(val))\n val = [];\n for (var i = val.length; i < this.minRowCount; i++)\n val.push({});\n return val;\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 > _settings__WEBPACK_IMPORTED_MODULE_6__[\"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 || prevValue == 0) {\n if (!this.generatedVisibleRows) {\n this.generatedVisibleRows = [];\n }\n this.generatedVisibleRows.splice(val);\n for (var i = prevValue; i < val; i++) {\n var newRow = this.createMatrixRow(this.getValueForNewRow());\n this.generatedVisibleRows.push(newRow);\n this.onMatrixRowCreated(newRow);\n }\n }\n this.onRowsChanged();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"allowRowsDragAndDrop\", {\n /**\n * Set this property to true, to allow rows drag and drop.\n */\n get: function () {\n return this.getPropertyValue(\"allowRowsDragAndDrop\");\n },\n set: function (val) {\n this.setPropertyValue(\"allowRowsDragAndDrop\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDynamicModel.prototype.initSortable = function (domNode) {\n if (!domNode)\n return;\n if (this.isReadOnly)\n return;\n var self = this;\n self.domNode = domNode;\n self.sortableInst = new Sortable(domNode, {\n animation: 100,\n forceFallback: true,\n delay: 200,\n delayOnTouchOnly: true,\n handle: \"tr\",\n onEnd: function (evt) {\n self.moveRowByIndex(evt.oldDraggableIndex, evt.newDraggableIndex);\n },\n });\n };\n QuestionMatrixDynamicModel.prototype.createRenderedTable = function () {\n return new QuestionMatrixDynamicRenderedTable(this);\n };\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"rowCountValue\", {\n get: function () {\n return this.getPropertyValue(\"rowCount\", 2);\n },\n set: function (val) {\n this.setPropertyValue(\"rowCount\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDynamicModel.prototype.getValueForNewRow = function () {\n var res = null;\n if (!!this.onGetValueForNewRowCallBack) {\n res = this.onGetValueForNewRowCallBack(this);\n }\n return res;\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: false,\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\", _settings__WEBPACK_IMPORTED_MODULE_6__[\"settings\"].matrixMaximumRowCount);\n },\n set: function (val) {\n if (val <= 0)\n return;\n if (val > _settings__WEBPACK_IMPORTED_MODULE_6__[\"settings\"].matrixMaximumRowCount)\n val = _settings__WEBPACK_IMPORTED_MODULE_6__[\"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: false,\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: false,\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: false,\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: false,\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 var res = this.allowRemoveRows &&\n !this.isReadOnly &&\n this.rowCount > this.minRowCount;\n return !!this.canRemoveRowsCallback ? this.canRemoveRowsCallback(res) : res;\n },\n enumerable: false,\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 and focus the cell in the first column.\n */\n QuestionMatrixDynamicModel.prototype.addRowUI = function () {\n var oldRowCount = this.rowCount;\n this.addRow();\n if (oldRowCount === this.rowCount)\n return;\n var q = this.getQuestionToFocusOnAddingRow();\n if (!!q) {\n q.focus();\n }\n };\n QuestionMatrixDynamicModel.prototype.getQuestionToFocusOnAddingRow = function () {\n var row = this.visibleRows[this.visibleRows.length - 1];\n for (var i = 0; i < row.cells.length; i++) {\n var q = row.cells[i].question;\n if (!!q && q.isVisible && !q.isReadOnly) {\n return q;\n }\n }\n return null;\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 if (this.detailPanelShowOnAdding && this.visibleRows.length > 0) {\n this.visibleRows[this.visibleRows.length - 1].showDetailPanel();\n }\n };\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"detailPanelShowOnAdding\", {\n /**\n * Set this property to true to show detail panel immediately on adding a new row.\n * @see detailPanelMode\n */\n get: function () {\n return this.getPropertyValue(\"detailPanelShowOnAdding\");\n },\n set: function (val) {\n this.setPropertyValue(\"detailPanelShowOnAdding\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDynamicModel.prototype.hasRowsAsItems = function () {\n return false;\n };\n QuestionMatrixDynamicModel.prototype.unbindValue = function () {\n this.clearGeneratedRows();\n this.clearPropertyValue(\"value\");\n this.rowCountValue = 0;\n _super.prototype.unbindValue.call(this);\n };\n QuestionMatrixDynamicModel.prototype.isValueSurveyElement = function (val) {\n return this.isEditingSurveyElement || _super.prototype.isValueSurveyElement.call(this, val);\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 (!this.isValueEmpty(row.value)) {\n if (!newValue) {\n newValue = this.createNewValue();\n }\n if (!this.isValueSurveyElement(newValue) &&\n !_helpers__WEBPACK_IMPORTED_MODULE_5__[\"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 Object(_utils_utils__WEBPACK_IMPORTED_MODULE_7__[\"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 (this.isValueEmpty(value) || !Array.isArray(value))\n return false;\n if (index >= value.length)\n return false;\n return !this.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 var row = !!this.visibleRows && index < this.visibleRows.length\n ? this.visibleRows[index]\n : null;\n if (!!row &&\n !!this.survey &&\n !this.survey.matrixRowRemoving(this, index, row))\n return;\n this.onStartRowAddingRemoving();\n this.removeRowCore(index);\n this.onEndRowRemoving(row);\n };\n QuestionMatrixDynamicModel.prototype.removeRowCore = function (index) {\n var row = this.generatedVisibleRows\n ? this.generatedVisibleRows[index]\n : null;\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 if (this.survey) {\n this.survey.matrixRowRemoved(this, index, row);\n }\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\", _surveyStrings__WEBPACK_IMPORTED_MODULE_3__[\"surveyLocalization\"].getString(\"confirmDelete\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"confirmDeleteText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"locConfirmDeleteText\", {\n get: function () {\n return this.getLocalizableString(\"confirmDeleteText\");\n },\n enumerable: false,\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 return this.getLocalizableStringText(\"addRowText\", this.defaultAddRowText);\n },\n set: function (val) {\n this.setLocalizableStringText(\"addRowText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"locAddRowText\", {\n get: function () {\n return this.getLocalizableString(\"addRowText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"defaultAddRowText\", {\n get: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_3__[\"surveyLocalization\"].getString(this.isColumnLayoutHorizontal ? \"addRow\" : \"addColumn\");\n },\n enumerable: false,\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: false,\n configurable: true\n });\n QuestionMatrixDynamicModel.prototype.getAddRowLocation = function () {\n return this.addRowLocation;\n };\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"hideColumnsIfEmpty\", {\n /**\n * Set this property to true to hide matrix columns when there is no any row.\n */\n get: function () {\n return this.getPropertyValue(\"hideColumnsIfEmpty\");\n },\n set: function (val) {\n this.setPropertyValue(\"hideColumnsIfEmpty\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDynamicModel.prototype.getShowColumnsIfEmpty = function () {\n return this.hideColumnsIfEmpty;\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\", _surveyStrings__WEBPACK_IMPORTED_MODULE_3__[\"surveyLocalization\"].getString(\"removeRow\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"removeRowText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"locRemoveRowText\", {\n get: function () {\n return this.getLocalizableString(\"removeRowText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"emptyRowsText\", {\n /**\n * Use this property to change the default value of remove row button text.\n */\n get: function () {\n return this.getLocalizableStringText(\"emptyRowsText\", _surveyStrings__WEBPACK_IMPORTED_MODULE_3__[\"surveyLocalization\"].getString(\"emptyRowsText\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"emptyRowsText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"locEmptyRowsText\", {\n get: function () {\n return this.getLocalizableString(\"emptyRowsText\");\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDynamicModel.prototype.getDisplayValueCore = function (keysAsText, value) {\n if (!value || !Array.isArray(value))\n return value;\n var values = this.getUnbindValue(value);\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(keysAsText, 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 this.addColumnIntoaddConditionObjectsByContext(objects, 0, column);\n if (hasContext && column != context) {\n this.addColumnIntoaddConditionObjectsByContext(objects, -1, column);\n }\n for (var j = 1; j < Math.min(_settings__WEBPACK_IMPORTED_MODULE_6__[\"settings\"].matrixMaxRowCountInCondition, this.rowCount); j++) {\n this.addColumnIntoaddConditionObjectsByContext(objects, j, column);\n }\n }\n };\n QuestionMatrixDynamicModel.prototype.addColumnIntoaddConditionObjectsByContext = function (objects, rowIndex, column) {\n var rowName = rowIndex > -1 ? \"[\" + rowIndex.toString() + \"].\" : \"row.\";\n objects.push({\n name: (rowIndex > -1 ? this.getValueName() + rowName : rowName) + column.name,\n text: (rowIndex > -1 ? this.processedTitle + rowName : rowName) +\n column.fullTitle,\n question: this,\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: false,\n configurable: true\n });\n QuestionMatrixDynamicModel.prototype.onCheckForErrors = function (errors, isOnValueChanged) {\n _super.prototype.onCheckForErrors.call(this, errors, isOnValueChanged);\n if (!isOnValueChanged && this.hasErrorInMinRows()) {\n errors.push(new _error__WEBPACK_IMPORTED_MODULE_4__[\"MinRowCountError\"](this.minRowCount, this));\n }\n };\n QuestionMatrixDynamicModel.prototype.hasErrorInMinRows = function () {\n if (this.minRowCount <= 0 || !this.isRequired || !this.generatedVisibleRows)\n return 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.getUniqueColumns = function () {\n var res = _super.prototype.getUniqueColumns.call(this);\n if (!!this.keyName) {\n var column = this.getColumnByName(this.keyName);\n if (!!column && res.indexOf(column) < 0) {\n res.push(column);\n }\n }\n return res;\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.clearGeneratedRows();\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(this.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 Array.isArray(questionValue) &&\n index >= 0 &&\n 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}(_question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownModelBase\"]));\n\nvar QuestionMatrixDynamicRenderedTable = /** @class */ (function (_super) {\n __extends(QuestionMatrixDynamicRenderedTable, _super);\n function QuestionMatrixDynamicRenderedTable() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n QuestionMatrixDynamicRenderedTable.prototype.setDefaultRowActions = function (row, actions) {\n _super.prototype.setDefaultRowActions.call(this, row, actions);\n if (this.matrix.allowRowsDragAndDrop) {\n actions.push(new _actions_action__WEBPACK_IMPORTED_MODULE_9__[\"Action\"]({\n id: \"drag-row\",\n location: \"start\",\n component: \"sv-matrix-drag-drop-icon\",\n data: { row: row, question: this.matrix },\n }));\n }\n };\n return QuestionMatrixDynamicRenderedTable;\n}(_question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownRenderedTable\"]));\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"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, isBindable: true },\n { name: \"minRowCount:number\", default: 0, minValue: 0 },\n {\n name: \"maxRowCount:number\",\n default: _settings__WEBPACK_IMPORTED_MODULE_6__[\"settings\"].matrixMaximumRowCount,\n },\n { name: \"keyName\" },\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 \"hideColumnsIfEmpty:boolean\",\n {\n name: \"emptyRowsText:text\",\n serializationProperty: \"locEmptyRowsText\",\n dependsOn: \"hideColumnsIfEmpty\",\n visibleIf: function (obj) {\n return !obj || obj.hideColumnsIfEmpty;\n },\n },\n {\n name: \"detailPanelShowOnAdding:boolean\",\n dependsOn: \"detailPanelMode\",\n visibleIf: function (obj) {\n return obj.detailPanelMode !== \"none\";\n },\n },\n {\n name: \"allowRowsDragAndDrop\",\n default: false,\n visible: true,\n isSerializable: false,\n },\n], function () {\n return new QuestionMatrixDynamicModel(\"\");\n}, \"matrixdropdownbase\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_2__[\"QuestionFactory\"].Instance.registerQuestion(\"matrixdynamic\", function (name) {\n var q = new QuestionMatrixDynamicModel(name);\n q.choices = [1, 2, 3, 4, 5];\n _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownModelBase\"].addDefaultColumns(q);\n return q;\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_multipletext.ts\":\n/*!**************************************!*\\\n !*** ./src/question_multipletext.ts ***!\n \\**************************************/\n/*! exports provided: MultipleTextItemModel, QuestionMultipleTextModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MultipleTextItemModel\", function() { return MultipleTextItemModel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionMultipleTextModel\", function() { return QuestionMultipleTextModel; });\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _survey_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./survey-element */ \"./src/survey-element.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _question_text__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./question_text */ \"./src/question_text.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n\n\nvar MultipleTextItemModel = /** @class */ (function (_super) {\n __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: false,\n configurable: true\n });\n MultipleTextItemModel.prototype.getOriginalObj = function () {\n return this.editor;\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: false,\n configurable: true\n });\n Object.defineProperty(MultipleTextItemModel.prototype, \"question\", {\n get: function () {\n return this.data;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MultipleTextItemModel.prototype, \"editor\", {\n get: function () {\n return this.editorValue;\n },\n enumerable: false,\n configurable: true\n });\n MultipleTextItemModel.prototype.createEditor = function (name) {\n return new _question_text__WEBPACK_IMPORTED_MODULE_3__[\"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: false,\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: false,\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: false,\n configurable: true\n });\n Object.defineProperty(MultipleTextItemModel.prototype, \"locTitle\", {\n get: function () {\n return this.editor.locTitle;\n },\n enumerable: false,\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: false,\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: false,\n configurable: true\n });\n MultipleTextItemModel.prototype.getMaxLength = function () {\n var survey = this.getSurvey();\n return _helpers__WEBPACK_IMPORTED_MODULE_6__[\"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: false,\n configurable: true\n });\n Object.defineProperty(MultipleTextItemModel.prototype, \"locPlaceHolder\", {\n get: function () {\n return this.editor.locPlaceHolder;\n },\n enumerable: false,\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: false,\n configurable: true\n });\n Object.defineProperty(MultipleTextItemModel.prototype, \"locRequiredErrorText\", {\n get: function () {\n return this.editor.locRequiredErrorText;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MultipleTextItemModel.prototype, \"size\", {\n /**\n * The input size.\n */\n get: function () {\n return this.editor.size;\n },\n set: function (val) {\n this.editor.size = val;\n },\n enumerable: false,\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: false,\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: false,\n configurable: true\n });\n MultipleTextItemModel.prototype.isEmpty = function () {\n return this.editor.isEmpty();\n };\n MultipleTextItemModel.prototype.onValueChanged = function (newValue) {\n if (this.valueChangedCallback)\n this.valueChangedCallback(newValue);\n };\n //ISurveyImpl\n MultipleTextItemModel.prototype.getSurveyData = 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: false,\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}(_base__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]));\n\n/**\n * A Model for a multiple text question.\n */\nvar QuestionMultipleTextModel = /** @class */ (function (_super) {\n __extends(QuestionMultipleTextModel, _super);\n function QuestionMultipleTextModel(name) {\n var _this = _super.call(this, name) || this;\n _this.isMultipleItemValueChanging = false;\n _this.createNewArray(\"items\", function (item) {\n item.setData(_this);\n });\n _this.registerFunctionOnPropertyValueChanged(\"items\", function () {\n _this.fireCallback(_this.colCountChangedCallback);\n });\n _this.registerFunctionOnPropertyValueChanged(\"colCount\", function () {\n _this.fireCallback(_this.colCountChangedCallback);\n });\n _this.registerFunctionOnPropertyValueChanged(\"itemSize\", function () {\n _this.updateItemsSize();\n });\n return _this;\n }\n QuestionMultipleTextModel.addDefaultItems = function (question) {\n var names = _questionfactory__WEBPACK_IMPORTED_MODULE_5__[\"QuestionFactory\"].DefaultMutlipleTextItems;\n for (var i = 0; i < names.length; i++)\n question.addItem(names[i]);\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: false,\n configurable: true\n });\n Object.defineProperty(QuestionMultipleTextModel.prototype, \"hasSingleInput\", {\n get: function () {\n return false;\n },\n enumerable: false,\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, updateIsAnswered) {\n if (updateIsAnswered === void 0) { updateIsAnswered = true; }\n _super.prototype.setQuestionValue.call(this, newValue, updateIsAnswered);\n this.performForEveryEditor(function (item) {\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 this.performForEveryEditor(function (item) {\n item.editor.onSurveyValueChanged(item.value);\n });\n };\n QuestionMultipleTextModel.prototype.updateItemsSize = function () {\n this.performForEveryEditor(function (item) {\n item.editor.updateInputSize();\n });\n };\n QuestionMultipleTextModel.prototype.editorsOnSurveyLoad = function () {\n this.performForEveryEditor(function (item) {\n item.editor.onSurveyLoad();\n });\n };\n QuestionMultipleTextModel.prototype.performForEveryEditor = function (func) {\n for (var i = 0; i < this.items.length; i++) {\n var item = this.items[i];\n if (item.editor) {\n func(item);\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: false,\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 _jsonobject__WEBPACK_IMPORTED_MODULE_4__[\"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: false,\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: false,\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 QuestionMultipleTextModel.prototype.getProgressInfo = function () {\n var elements = [];\n for (var i = 0; i < this.items.length; i++) {\n elements.push(this.items[i].editor);\n }\n return _survey_element__WEBPACK_IMPORTED_MODULE_1__[\"SurveyElement\"].getProgressInfoByElements(elements, this.isRequired);\n };\n QuestionMultipleTextModel.prototype.getDisplayValueCore = function (keysAsText, value) {\n if (!value)\n return value;\n var res = {};\n for (var i = 0; i < this.items.length; i++) {\n var item = this.items[i];\n var val = value[item.name];\n if (_helpers__WEBPACK_IMPORTED_MODULE_6__[\"Helpers\"].isValueEmpty(val))\n continue;\n var itemName = item.name;\n if (keysAsText && !!item.title) {\n itemName = item.title;\n }\n res[itemName] = item.editor.getDisplayValue(keysAsText, val);\n }\n return res;\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 if (this.isValueEmpty(value)) {\n value = undefined;\n }\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.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: false,\n configurable: true\n });\n QuestionMultipleTextModel.prototype.indexOf = function (el) {\n return -1;\n };\n QuestionMultipleTextModel.prototype.ensureRowsVisibility = function () {\n // do nothing\n };\n return QuestionMultipleTextModel;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"Question\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_4__[\"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 { name: \"size:number\", minValue: 0 },\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_jsonobject__WEBPACK_IMPORTED_MODULE_4__[\"Serializer\"].addClass(\"multipletext\", [\n { name: \"!items:textitems\", className: \"multipletextitem\" },\n { name: \"itemSize:number\", minValue: 0 },\n { name: \"colCount:number\", default: 1, choices: [1, 2, 3, 4, 5] },\n], function () {\n return new QuestionMultipleTextModel(\"\");\n}, \"question\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_5__[\"QuestionFactory\"].Instance.registerQuestion(\"multipletext\", function (name) {\n var q = new QuestionMultipleTextModel(name);\n QuestionMultipleTextModel.addDefaultItems(q);\n return q;\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_paneldynamic.ts\":\n/*!**************************************!*\\\n !*** ./src/question_paneldynamic.ts ***!\n \\**************************************/\n/*! exports provided: QuestionPanelDynamicItem, QuestionPanelDynamicTemplateSurveyImpl, QuestionPanelDynamicModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionPanelDynamicItem\", function() { return QuestionPanelDynamicItem; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionPanelDynamicTemplateSurveyImpl\", function() { return QuestionPanelDynamicTemplateSurveyImpl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionPanelDynamicModel\", function() { return QuestionPanelDynamicModel; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _survey_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./survey-element */ \"./src/survey-element.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _textPreProcessor__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./textPreProcessor */ \"./src/textPreProcessor.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./utils/utils */ \"./src/utils/utils.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __spreadArray = (undefined && undefined.__spreadArray) || function (to, from) {\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n to[j] = from[i];\n return to;\n};\n\n\n\n\n\n\n\n\n\n\nvar QuestionPanelDynamicItemTextProcessor = /** @class */ (function (_super) {\n __extends(QuestionPanelDynamicItemTextProcessor, _super);\n function QuestionPanelDynamicItemTextProcessor(data, panelItem, variableName) {\n var _this = _super.call(this, variableName) || this;\n _this.data = data;\n _this.panelItem = panelItem;\n _this.variableName = variableName;\n return _this;\n }\n Object.defineProperty(QuestionPanelDynamicItemTextProcessor.prototype, \"survey\", {\n get: function () {\n return this.panelItem.getSurvey();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicItemTextProcessor.prototype, \"panel\", {\n get: function () {\n return this.panelItem.panel;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicItemTextProcessor.prototype, \"panelIndex\", {\n get: function () {\n return !!this.data ? this.data.getItemIndex(this.panelItem) : -1;\n },\n enumerable: false,\n configurable: true\n });\n QuestionPanelDynamicItemTextProcessor.prototype.getValues = function () {\n return this.panelItem.getAllValues();\n };\n QuestionPanelDynamicItemTextProcessor.prototype.getQuestionByName = function (name) {\n var res = _super.prototype.getQuestionByName.call(this, name);\n if (!!res)\n return res;\n var index = this.panelIndex;\n return index > -1\n ? this.data.getSharedQuestionFromArray(name, index)\n : null;\n };\n QuestionPanelDynamicItemTextProcessor.prototype.onCustomProcessText = function (textValue) {\n if (textValue.name == QuestionPanelDynamicItem.IndexVariableName) {\n var index = this.panelIndex;\n if (index > -1) {\n textValue.isExists = true;\n textValue.value = index + 1;\n return true;\n }\n }\n if (textValue.name.indexOf(QuestionPanelDynamicItem.ParentItemVariableName + \".\") == 0) {\n var q = this.data;\n if (!!q && !!q.parentQuestion && !!q.parent) {\n var data = q.parent.data;\n var processor = new QuestionPanelDynamicItemTextProcessor(q.parentQuestion, data, QuestionPanelDynamicItem.ItemVariableName);\n var text = textValue.name.replace(QuestionPanelDynamicItem.ParentItemVariableName, QuestionPanelDynamicItem.ItemVariableName);\n var res = processor.processValue(text, textValue.returnDisplayValue);\n textValue.isExists = res.isExists;\n textValue.value = res.value;\n }\n return true;\n }\n return false;\n };\n return QuestionPanelDynamicItemTextProcessor;\n}(_textPreProcessor__WEBPACK_IMPORTED_MODULE_3__[\"QuestionTextProcessor\"]));\nvar QuestionPanelDynamicItem = /** @class */ (function () {\n function QuestionPanelDynamicItem(data, panel) {\n this.data = data;\n this.panelValue = panel;\n this.textPreProcessor = new QuestionPanelDynamicItemTextProcessor(data, this, QuestionPanelDynamicItem.ItemVariableName);\n this.setSurveyImpl();\n }\n Object.defineProperty(QuestionPanelDynamicItem.prototype, \"panel\", {\n get: function () {\n return this.panelValue;\n },\n enumerable: false,\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 + _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].commentPrefix);\n return result ? result : \"\";\n };\n QuestionPanelDynamicItem.prototype.setComment = function (name, newValue, locNotification) {\n this.setValue(name + _settings__WEBPACK_IMPORTED_MODULE_8__[\"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 if (!!this.data) {\n values[QuestionPanelDynamicItem.IndexVariableName.toLowerCase()] = this.data.getItemIndex(this);\n }\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.getSurveyData = 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.textPreProcessor;\n };\n QuestionPanelDynamicItem.ItemVariableName = \"panel\";\n QuestionPanelDynamicItem.ParentItemVariableName = \"parentPanel\";\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.getSurveyData = 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 __extends(QuestionPanelDynamicModel, _super);\n function QuestionPanelDynamicModel(name) {\n var _this = _super.call(this, name) || this;\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: false,\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 = _jsonobject__WEBPACK_IMPORTED_MODULE_5__[\"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: false,\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: false,\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: false,\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: false,\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: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"locTemplateTitle\", {\n get: function () {\n return this.template.locTitle;\n },\n enumerable: false,\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: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"locTemplateDescription\", {\n get: function () {\n return this.template.locDescription;\n },\n enumerable: false,\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: false,\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: false,\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: false,\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: false,\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: false,\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: false,\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\", _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"].getString(\"confirmDelete\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"confirmDeleteText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"locConfirmDeleteText\", {\n get: function () {\n return this.getLocalizableString(\"confirmDeleteText\");\n },\n enumerable: false,\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\", _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"].getString(\"keyDuplicationError\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"keyDuplicationError\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"locKeyDuplicationError\", {\n get: function () {\n return this.getLocalizableString(\"keyDuplicationError\");\n },\n enumerable: false,\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\", _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"].getString(\"pagePrevText\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"panelPrevText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"locPanelPrevText\", {\n get: function () {\n return this.getLocalizableString(\"panelPrevText\");\n },\n enumerable: false,\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\", _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"].getString(\"pageNextText\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"panelNextText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"locPanelNextText\", {\n get: function () {\n return this.getLocalizableString(\"panelNextText\");\n },\n enumerable: false,\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\", _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"].getString(\"addPanel\"));\n },\n set: function (value) {\n this.setLocalizableStringText(\"panelAddText\", value);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"locPanelAddText\", {\n get: function () {\n return this.getLocalizableString(\"panelAddText\");\n },\n enumerable: false,\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\", _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"].getString(\"removePanel\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"panelRemoveText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"locPanelRemoveText\", {\n get: function () {\n return this.getLocalizableString(\"panelRemoveText\");\n },\n enumerable: false,\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: false,\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: false,\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: false,\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: false,\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: false,\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.updateBindings(\"panelCount\", val);\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: false,\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: false,\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: false,\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\", _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].panelMaximumPanelCount);\n },\n set: function (val) {\n if (val <= 0)\n return;\n if (val > _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].panelMaximumPanelCount)\n val = _settings__WEBPACK_IMPORTED_MODULE_8__[\"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: false,\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: false,\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: false,\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: false,\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: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"panelRemoveButtonLocation\", {\n /**\n * Use this property to change the location of the remove button relative to the panel.\n * By default the value is \"bottom\". You may set it to \"right\" and remove button will appear to the right of the panel.\n */\n get: function () {\n return this.getPropertyValue(\"panelRemoveButtonLocation\");\n },\n set: function (val) {\n this.setPropertyValue(\"panelRemoveButtonLocation\", val);\n },\n enumerable: false,\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: false,\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: false,\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: false,\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: false,\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: false,\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, __spreadArray([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: false,\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: false,\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.getProgressInfo = function () {\n return _survey_element__WEBPACK_IMPORTED_MODULE_1__[\"SurveyElement\"].getProgressInfoByElements(this.panels, this.isRequired);\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 || Object(_utils_utils__WEBPACK_IMPORTED_MODULE_9__[\"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 this.updateBindings(\"panelCount\", this.panelCount);\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 (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"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 (this.getSharedQuestionFromArray(key, index))\n continue;\n var q = panel.getQuestionByName(key);\n if (!!q)\n continue;\n if (this.iscorrectValueWithPostPrefix(panel, key, _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].commentPrefix) ||\n this.iscorrectValueWithPostPrefix(panel, key, _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].matrixTotalValuePostFix))\n continue;\n delete values[key];\n isChanged = true;\n }\n if (isChanged) {\n val[index] = values;\n this.value = val;\n }\n };\n QuestionPanelDynamicModel.prototype.iscorrectValueWithPostPrefix = function (panel, key, postPrefix) {\n if (key.indexOf(postPrefix) !== key.length - postPrefix.length)\n return false;\n return !!panel.getQuestionByName(key.substr(0, key.indexOf(postPrefix)));\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 = _helpers__WEBPACK_IMPORTED_MODULE_0__[\"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.getUnbindValue(value);\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 var keys = Object.keys(val);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var question = panel.getQuestionByValueName(key);\n if (!question) {\n question = this.getSharedQuestionFromArray(key, panelIndex);\n }\n if (!!question) {\n var qValue = question.getDisplayValue(keysAsText, val[key]);\n val[key] = qValue;\n if (keysAsText && !!question.title && question.title !== key) {\n val[question.title] = qValue;\n delete val[key];\n }\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 _error__WEBPACK_IMPORTED_MODULE_7__[\"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 _jsonobject__WEBPACK_IMPORTED_MODULE_5__[\"JsonObject\"]().toObject(json, panel);\n panel.renderWidth = \"100%\";\n panel.updateCustomWidgets();\n new QuestionPanelDynamicItem(this, panel);\n panel.onFirstRendering();\n var questions = panel.questions;\n for (var i = 0; i < questions.length; i++) {\n questions[i].setParentQuestion(this);\n }\n return panel;\n };\n QuestionPanelDynamicModel.prototype.createAndSetupNewPanelObject = function () {\n var panel = this.createNewPanelObject();\n panel.isInteractiveDesignElement = false;\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 _jsonobject__WEBPACK_IMPORTED_MODULE_5__[\"Serializer\"].createClass(\"panel\");\n };\n QuestionPanelDynamicModel.prototype.setPanelCountBasedOnValue = function () {\n if (this.isValueChangingInternally || this.isDesignMode)\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() + _settings__WEBPACK_IMPORTED_MODULE_8__[\"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 var res = this.items.indexOf(item);\n return res > -1 ? res : this.items.length;\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 if (this.isSetPanelItemData && this.isSetPanelItemData.indexOf(name) > -1)\n return;\n if (!this.isSetPanelItemData)\n this.isSetPanelItemData = [];\n this.isSetPanelItemData.push(name);\n var items = this.items;\n var index = items.indexOf(item);\n if (index < 0)\n index = items.length;\n var qValue = this.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 var index = this.isSetPanelItemData.indexOf(name);\n if (index > -1) {\n this.isSetPanelItemData.splice(index, 1);\n }\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 (reNew) {\n _super.prototype.updateElementCss.call(this, reNew);\n for (var i = 0; i < this.panels.length; i++) {\n var el = this.panels[i];\n el.updateElementCss(reNew);\n }\n };\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"progressText\", {\n get: function () {\n var rangeMax = this.panelCount;\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"]\n .getString(\"panelDynamicProgressText\")[\"format\"](this.currentIndex + 1, rangeMax);\n },\n enumerable: false,\n configurable: true\n });\n QuestionPanelDynamicModel.prototype.getPanelWrapperCss = function () {\n var cssClasses = this.cssClasses.panelWrapper;\n if (this.panelRemoveButtonLocation === \"right\") {\n cssClasses += \" \" + this.cssClasses.panelWrapperInRow;\n }\n return cssClasses;\n };\n QuestionPanelDynamicModel.prototype.getPanelRemoveButtonCss = function () {\n var cssClasses = this.cssClasses.button + \" \" + this.cssClasses.buttonRemove;\n if (this.panelRemoveButtonLocation === \"right\") {\n cssClasses += \" \" + this.cssClasses.buttonRemoveRight;\n }\n return cssClasses;\n };\n return QuestionPanelDynamicModel;\n}(_question__WEBPACK_IMPORTED_MODULE_4__[\"Question\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_5__[\"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 isBindable: true,\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: _settings__WEBPACK_IMPORTED_MODULE_8__[\"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 {\n name: \"panelRemoveButtonLocation\",\n default: \"bottom\",\n choices: [\"bottom\", \"right\"],\n },\n], function () {\n return new QuestionPanelDynamicModel(\"\");\n}, \"question\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_6__[\"QuestionFactory\"].Instance.registerQuestion(\"paneldynamic\", function (name) {\n return new QuestionPanelDynamicModel(name);\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_radiogroup.ts\":\n/*!************************************!*\\\n !*** ./src/question_radiogroup.ts ***!\n \\************************************/\n/*! exports provided: QuestionRadiogroupModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionRadiogroupModel\", function() { return QuestionRadiogroupModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _question_baseselect__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question_baseselect */ \"./src/question_baseselect.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n/**\n * A Model for a radiogroup question.\n */\nvar QuestionRadiogroupModel = /** @class */ (function (_super) {\n __extends(QuestionRadiogroupModel, _super);\n function QuestionRadiogroupModel(name) {\n return _super.call(this, name) || this;\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 /**\n * Return the selected item in the radio group. Returns null if the value is empty\n */\n get: function () {\n if (this.isEmpty())\n return null;\n return _itemvalue__WEBPACK_IMPORTED_MODULE_4__[\"ItemValue\"].getItemByValue(this.visibleChoices, this.value);\n },\n enumerable: false,\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: false,\n configurable: true\n });\n Object.defineProperty(QuestionRadiogroupModel.prototype, \"canShowClearButton\", {\n get: function () {\n return this.showClearButton && !this.isReadOnly;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionRadiogroupModel.prototype, \"clearButtonCaption\", {\n get: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_3__[\"surveyLocalization\"].getString(\"clearCaption\");\n },\n enumerable: false,\n configurable: true\n });\n QuestionRadiogroupModel.prototype.supportGoNextPageAutomatic = function () {\n return true;\n };\n return QuestionRadiogroupModel;\n}(_question_baseselect__WEBPACK_IMPORTED_MODULE_2__[\"QuestionCheckboxBase\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"radiogroup\", [{ name: \"showClearButton:boolean\", default: false }], function () {\n return new QuestionRadiogroupModel(\"\");\n}, \"checkboxbase\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_1__[\"QuestionFactory\"].Instance.registerQuestion(\"radiogroup\", function (name) {\n var q = new QuestionRadiogroupModel(name);\n q.choices = _questionfactory__WEBPACK_IMPORTED_MODULE_1__[\"QuestionFactory\"].DefaultChoices;\n return q;\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_ranking.ts\":\n/*!*********************************!*\\\n !*** ./src/question_ranking.ts ***!\n \\*********************************/\n/*! exports provided: QuestionRankingModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionRankingModel\", function() { return QuestionRankingModel; });\n/* harmony import */ var sortablejs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sortablejs */ \"./node_modules/sortablejs/modular/sortable.esm.js\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _question_checkbox__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./question_checkbox */ \"./src/question_checkbox.ts\");\n/* harmony import */ var _utils_is_mobile__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils/is-mobile */ \"./src/utils/is-mobile.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\nvar Sortable = sortablejs__WEBPACK_IMPORTED_MODULE_0__[\"default\"];\n/**\n * A Model for a ranking question\n */\nvar QuestionRankingModel = /** @class */ (function (_super) {\n __extends(QuestionRankingModel, _super);\n function QuestionRankingModel(name) {\n var _this = _super.call(this, name) || this;\n _this.domNode = null;\n _this.sortableInst = null;\n _this.handleKeydown = function (event) {\n var key = event.key;\n var array = _this.domNode.querySelectorAll(\".\" + _this.cssClasses.item);\n var index = [].indexOf.call(array, event.target);\n if (key === \"ArrowUp\" && index) {\n _this.handleArrowUp(index);\n }\n if (key === \"ArrowDown\" && index !== array.length - 1) {\n _this.handleArrowDown(index);\n }\n };\n _this.handleArrowUp = function (index) {\n var array = _this.sortableInst.toArray();\n _this.moveArrayItemBack(array, index);\n _this.sortableInst.sort(array);\n _this.syncNumbers();\n _this.setValueFromUI();\n _this.focusItem(index - 1);\n };\n _this.handleArrowDown = function (index) {\n var array = _this.sortableInst.toArray();\n _this.moveArrayItemForward(array, index);\n _this.sortableInst.sort(array);\n _this.syncNumbers();\n _this.setValueFromUI();\n _this.focusItem(index + 1);\n };\n _this.moveArrayItemBack = function (array, index) {\n var _a;\n _a = [array[index - 1], array[index]], array[index] = _a[0], array[index - 1] = _a[1];\n };\n _this.moveArrayItemForward = function (array, index) {\n var _a;\n _a = [array[index + 1], array[index]], array[index] = _a[0], array[index + 1] = _a[1];\n };\n _this.focusItem = function (index) {\n var itemsNodes = _this.domNode.querySelectorAll(\".\" + _this.cssClasses.item);\n itemsNodes[index].focus();\n };\n _this.setValueFromUI = function () {\n var value = [];\n var textNodes = _this.domNode.querySelectorAll(\".\" + _this.cssClasses.controlLabel);\n textNodes.forEach(function (textNode, index) {\n var innerText = textNode.innerText;\n _this.visibleChoices.forEach(function (visibleChoice) {\n if (innerText === visibleChoice.text) {\n value.push(visibleChoice.value);\n }\n });\n });\n _this.value = value;\n };\n _this.syncNumbers = function () {\n if (!_this.domNode)\n return;\n var selector = \".\" +\n _this.cssClasses.item +\n \":not(.\" +\n _this.cssClasses.itemDragMod +\n \")\" +\n \" .\" +\n _this.cssClasses.itemIndex;\n var indexNodes = _this.domNode.querySelectorAll(selector);\n indexNodes.forEach(function (indexNode, index) {\n indexNode.innerText = _this.getNumberByIndex(index);\n });\n };\n _this.setGhostText = function (text) {\n var indexNodes = _this.domNode.querySelectorAll(\".\" + _this.cssClasses.itemIndex);\n var ghostNode = indexNodes[indexNodes.length - 1];\n ghostNode.innerText = text;\n };\n return _this;\n }\n QuestionRankingModel.prototype.getType = function () {\n return \"ranking\";\n };\n Object.defineProperty(QuestionRankingModel.prototype, \"isIndeterminate\", {\n get: function () {\n return !this.value || this.value.length === 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionRankingModel.prototype, \"rootClass\", {\n get: function () {\n var css = this.cssClasses;\n if (_utils_is_mobile__WEBPACK_IMPORTED_MODULE_4__[\"IsMobile\"])\n return css.root + \" \" + css.rootMobileMod;\n return css.root;\n },\n enumerable: false,\n configurable: true\n });\n QuestionRankingModel.prototype.getNumberByIndex = function (index) {\n return this.isIndeterminate ? \"\\u2013\" : index + 1 + \"\";\n };\n Object.defineProperty(QuestionRankingModel.prototype, \"rankingChoices\", {\n get: function () {\n var result = [];\n var value = this.value;\n var visibleChoices = this.removeOtherChoiceFromChoices(this.visibleChoices);\n if (this.isIndeterminate) {\n result = visibleChoices;\n }\n else {\n result = this.mergeValueAndVisibleChoices(value, visibleChoices);\n }\n // ranking question with only one choice doesn't make sense\n if (result.length === 1)\n result = [];\n return result;\n },\n enumerable: false,\n configurable: true\n });\n QuestionRankingModel.prototype.removeOtherChoiceFromChoices = function (choices) {\n var result = choices;\n choices.forEach(function (choice, index) {\n if (choice.value === \"other\") {\n result.splice(index, 1); // remove other choice\n }\n });\n return result;\n };\n //cross framework initialization\n QuestionRankingModel.prototype.afterRenderQuestionElement = function (el) {\n if (!!el) {\n this.initSortable(el);\n }\n _super.prototype.afterRenderQuestionElement.call(this, el);\n };\n //cross framework destroy\n QuestionRankingModel.prototype.beforeDestroyQuestionElement = function (el) {\n if (this.sortableInst)\n this.sortableInst.destroy();\n _super.prototype.beforeDestroyQuestionElement.call(this, el);\n };\n QuestionRankingModel.prototype.supportSelectAll = function () {\n return false;\n };\n QuestionRankingModel.prototype.supportOther = function () {\n return false;\n };\n QuestionRankingModel.prototype.supportNone = function () {\n return false;\n };\n // to make \"carry forward\" feature work properly with ranking\n QuestionRankingModel.prototype.onVisibleChoicesChanged = function () {\n _super.prototype.onVisibleChoicesChanged.call(this);\n if (this.isIndeterminate)\n return;\n this.value = this.rankingChoices.map(function (choice) { return choice.value; });\n };\n QuestionRankingModel.prototype.mergeValueAndVisibleChoices = function (value, visibleChoices) {\n var length = visibleChoices.length;\n var result = [];\n result.length = length;\n for (var i = 0; i < length; i++) {\n var choice = visibleChoices[i];\n var index = value.indexOf(choice.value);\n if (index !== -1) {\n result.splice(index, 1, choice);\n }\n else {\n result.splice(result.length - 1, 0, choice);\n }\n }\n result = result.filter(function (choice) { return !!choice; });\n return result;\n };\n QuestionRankingModel.prototype.initSortable = function (domNode) {\n if (!domNode)\n return;\n var self = this;\n self.domNode = domNode;\n if (this.isReadOnly)\n return;\n if (this.isDesignMode)\n return;\n self.sortableInst = new Sortable(domNode, {\n animation: 100,\n forceFallback: true,\n delay: 200,\n delayOnTouchOnly: true,\n handle: _utils_is_mobile__WEBPACK_IMPORTED_MODULE_4__[\"IsMobile\"]\n ? \".\" + self.cssClasses.itemIconContainer\n : \".\" + self.cssClasses.itemContent,\n ghostClass: self.cssClasses.itemGhostMod,\n dragClass: self.cssClasses.itemDragMod,\n onStart: function (evt) {\n Sortable.ghost.style.opacity = 1;\n domNode.className += \" \" + self.cssClasses.rootDragMod;\n if (self.isIndeterminate) {\n self.setGhostText(evt.oldIndex + 1);\n }\n },\n onEnd: function () {\n domNode.className = domNode.className.replace(\" \" + self.cssClasses.rootDragMod, \"\");\n self.setValueFromUI();\n },\n onChange: function (evt) {\n if (!self.isIndeterminate)\n self.syncNumbers();\n self.setGhostText(evt.newIndex + 1);\n },\n });\n };\n return QuestionRankingModel;\n}(_question_checkbox__WEBPACK_IMPORTED_MODULE_3__[\"QuestionCheckboxModel\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"ranking\", [\n { name: \"hasOther\", visible: false, isSerializable: false },\n { name: \"otherText\", visible: false, isSerializable: false },\n { name: \"otherErrorText\", visible: false, isSerializable: false },\n { name: \"storeOthersAsComment\", visible: false, isSerializable: false },\n { name: \"hasNone\", visible: false, isSerializable: false },\n { name: \"noneText\", visible: false, isSerializable: false },\n { name: \"hasSelectAll\", visible: false, isSerializable: false },\n { name: \"selectAllText\", visible: false, isSerializable: false },\n { name: \"colCount:number\", visible: false, isSerializable: false },\n { name: \"maxSelectedChoices\", visible: false, isSerializable: false },\n], function () {\n return new QuestionRankingModel(\"\");\n}, \"checkbox\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_2__[\"QuestionFactory\"].Instance.registerQuestion(\"ranking\", function (name) {\n var q = new QuestionRankingModel(name);\n q.choices = _questionfactory__WEBPACK_IMPORTED_MODULE_2__[\"QuestionFactory\"].DefaultChoices;\n return q;\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_rating.ts\":\n/*!********************************!*\\\n !*** ./src/question_rating.ts ***!\n \\********************************/\n/*! exports provided: QuestionRatingModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionRatingModel\", function() { return QuestionRatingModel; });\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n\n/**\n * A Model for a rating question.\n */\nvar QuestionRatingModel = /** @class */ (function (_super) {\n __extends(QuestionRatingModel, _super);\n function QuestionRatingModel(name) {\n var _this = _super.call(this, name) || this;\n _this.createItemValues(\"rateValues\");\n var self = _this;\n _this.registerFunctionOnPropertyValueChanged(\"rateValues\", 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(\"rateValues\");\n },\n set: function (val) {\n this.setPropertyValue(\"rateValues\", val);\n },\n enumerable: false,\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: false,\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: false,\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: false,\n configurable: true\n });\n QuestionRatingModel.prototype.getDisplayValueCore = function (keysAsText, value) {\n var res = _itemvalue__WEBPACK_IMPORTED_MODULE_0__[\"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 < _settings__WEBPACK_IMPORTED_MODULE_4__[\"settings\"].ratingMaximumRateValueCount) {\n res.push(new _itemvalue__WEBPACK_IMPORTED_MODULE_0__[\"ItemValue\"](value));\n value = this.correctValue(value + step, step);\n }\n return res;\n },\n enumerable: false,\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.getFirstInputElementId = function () {\n return this.inputId + \"_0\";\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: false,\n configurable: true\n });\n Object.defineProperty(QuestionRatingModel.prototype, \"locMinRateDescription\", {\n get: function () {\n return this.getLocalizableString(\"minRateDescription\");\n },\n enumerable: false,\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: false,\n configurable: true\n });\n Object.defineProperty(QuestionRatingModel.prototype, \"locMaxRateDescription\", {\n get: function () {\n return this.getLocalizableString(\"maxRateDescription\");\n },\n enumerable: false,\n configurable: true\n });\n QuestionRatingModel.prototype.valueToData = function (val) {\n if (this.rateValues.length > 0) {\n var item = _itemvalue__WEBPACK_IMPORTED_MODULE_0__[\"ItemValue\"].getItemByValue(this.rateValues, val);\n return !!item ? item.value : val;\n }\n return !isNaN(val) ? parseFloat(val) : val;\n };\n /**\n * Click value again to clear.\n */\n QuestionRatingModel.prototype.setValueFromClick = function (value) {\n if (this.value === parseFloat(value)) {\n this.clearValue();\n }\n else {\n this.value = value;\n }\n };\n QuestionRatingModel.prototype.getItemClass = function (item) {\n var itemCss = this.cssClasses.item;\n var selected = this.cssClasses.selected;\n var disabled = this.cssClasses.itemDisabled;\n var isSelected = this.value == item.value;\n var isDisabled = this.isReadOnly && !item.isEnabled;\n var allowHover = !isDisabled &&\n !isSelected &&\n !(!!this.survey && this.survey.isDesignMode);\n var result = itemCss;\n if (this.value == item.value) {\n result += \" \" + selected;\n }\n if (this.isReadOnly) {\n result += \" \" + disabled;\n }\n if (allowHover) {\n result += \" \" + this.cssClasses.itemHover;\n }\n return result;\n };\n return QuestionRatingModel;\n}(_question__WEBPACK_IMPORTED_MODULE_1__[\"Question\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"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 baseValue: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_5__[\"surveyLocalization\"].getString(\"choices_Item\");\n },\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_questionfactory__WEBPACK_IMPORTED_MODULE_3__[\"QuestionFactory\"].Instance.registerQuestion(\"rating\", function (name) {\n return new QuestionRatingModel(name);\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_signaturepad.ts\":\n/*!**************************************!*\\\n !*** ./src/question_signaturepad.ts ***!\n \\**************************************/\n/*! exports provided: QuestionSignaturePadModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionSignaturePadModel\", function() { return QuestionSignaturePadModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var signature_pad__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! signature_pad */ \"./node_modules/signature_pad/dist/signature_pad.mjs\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\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 __extends(QuestionSignaturePadModel, _super);\n function QuestionSignaturePadModel(name) {\n return _super.call(this, name) || 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.updateValue = function () {\n if (this.signaturePad) {\n var data = this.signaturePad.toDataURL(this.dataFormat);\n this.value = data;\n }\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.beforeDestroyQuestionElement = 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 signature_pad__WEBPACK_IMPORTED_MODULE_3__[\"default\"](canvas, { backgroundColor: \"#ffffff\" });\n if (this.isInputReadOnly) {\n signaturePad.off();\n }\n buttonEl.onclick = function () {\n _this.value = undefined;\n };\n this.readOnlyChangedCallback = function () {\n if (!_this.allowClear || _this.isInputReadOnly) {\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.backgroundColor = this.backgroundColor;\n signaturePad.onBegin = function () {\n _this.isDrawingValue = true;\n canvas.focus();\n };\n signaturePad.onEnd = function () {\n _this.isDrawingValue = false;\n _this.updateValue();\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 if (!data) {\n signaturePad.clear();\n }\n else {\n signaturePad.fromDataURL(data);\n }\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: false,\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: false,\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: false,\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: false,\n configurable: true\n });\n Object.defineProperty(QuestionSignaturePadModel.prototype, \"backgroundColor\", {\n /**\n * Use it to set background color for the signature pad.\n */\n get: function () {\n return this.getPropertyValue(\"backgroundColor\", \"#ffffff\");\n },\n set: function (val) {\n this.setPropertyValue(\"backgroundColor\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSignaturePadModel.prototype, \"clearButtonCaption\", {\n /**\n * The clear signature button caption.\n */\n get: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"].getString(\"clearCaption\");\n },\n enumerable: false,\n configurable: true\n });\n QuestionSignaturePadModel.prototype.needShowPlaceholder = function () {\n return !this.isDrawingValue && this.isEmpty();\n };\n Object.defineProperty(QuestionSignaturePadModel.prototype, \"placeHolderText\", {\n get: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"].getString(\"signaturePlaceHolder\");\n },\n enumerable: false,\n configurable: true\n });\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ defaultValue: false })\n ], QuestionSignaturePadModel.prototype, \"isDrawingValue\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ defaultValue: \"\" })\n ], QuestionSignaturePadModel.prototype, \"dataFormat\", void 0);\n return QuestionSignaturePadModel;\n}(_question__WEBPACK_IMPORTED_MODULE_1__[\"Question\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"signaturepad\", [\n {\n name: \"width:number\",\n category: \"general\",\n default: 300,\n },\n {\n name: \"height:number\",\n category: \"general\",\n default: 200,\n },\n {\n name: \"allowClear:boolean\",\n category: \"general\",\n default: true,\n },\n {\n name: \"penColor:color\",\n category: \"general\",\n default: \"#1ab394\",\n },\n {\n name: \"backgroundColor:color\",\n category: \"general\",\n default: \"#ffffff\",\n },\n {\n name: \"dataFormat\",\n category: \"general\",\n default: \"\",\n choices: [\n { value: \"\", text: \"PNG\" },\n { value: \"image/jpeg\", text: \"JPEG\" },\n { value: \"image/svg+xml\", text: \"SVG\" },\n ],\n },\n { name: \"defaultValue\", visible: false },\n { name: \"correctAnswer\", visible: false },\n], function () {\n return new QuestionSignaturePadModel(\"\");\n}, \"question\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_4__[\"QuestionFactory\"].Instance.registerQuestion(\"signaturepad\", function (name) {\n return new QuestionSignaturePadModel(name);\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_text.ts\":\n/*!******************************!*\\\n !*** ./src/question_text.ts ***!\n \\******************************/\n/*! exports provided: QuestionTextModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionTextModel\", function() { return QuestionTextModel; });\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _localizablestring__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./localizablestring */ \"./src/localizablestring.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _validator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./validator */ \"./src/validator.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _question_textbase__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./question_textbase */ \"./src/question_textbase.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n\n\n\n\n/**\n * A Model for an input text question.\n */\nvar QuestionTextModel = /** @class */ (function (_super) {\n __extends(QuestionTextModel, _super);\n function QuestionTextModel(name) {\n var _this = _super.call(this, name) || this;\n _this.createLocalizableString(\"minErrorText\", _this, true);\n _this.createLocalizableString(\"maxErrorText\", _this, true);\n _this.locDataListValue = new _localizablestring__WEBPACK_IMPORTED_MODULE_2__[\"LocalizableStrings\"](_this);\n _this.registerFunctionOnPropertiesValueChanged([\"min\", \"max\", \"inputType\", \"minValueExpression\", \"maxValueExpression\"], function () {\n _this.setRenderedMinMax();\n });\n _this.registerFunctionOnPropertiesValueChanged([\"inputType\", \"size\"], function () {\n _this.updateInputSize();\n _this.calcRenderedPlaceHolder();\n });\n return _this;\n }\n QuestionTextModel.prototype.isTextValue = function () {\n return [\"text\", \"number\", \"password\"].indexOf(this.inputType) > -1;\n };\n QuestionTextModel.prototype.getType = function () {\n return \"text\";\n };\n QuestionTextModel.prototype.onSurveyLoad = function () {\n _super.prototype.onSurveyLoad.call(this);\n this.setRenderedMinMax();\n this.updateInputSize();\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.setPropertyValue(\"inputType\", val.toLowerCase());\n if (!this.isLoadingFromJson) {\n this.min = undefined;\n this.max = undefined;\n this.step = undefined;\n }\n },\n enumerable: false,\n configurable: true\n });\n QuestionTextModel.prototype.runCondition = function (values, properties) {\n _super.prototype.runCondition.call(this, values, properties);\n if (!!this.minValueExpression || !!this.maxValueExpression) {\n this.setRenderedMinMax(values, properties);\n }\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 _validator__WEBPACK_IMPORTED_MODULE_4__[\"EmailValidator\"]());\n }\n return validators;\n };\n QuestionTextModel.prototype.isLayoutTypeSupported = function (layoutType) {\n return true;\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: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"isTextInput\", {\n get: function () {\n return ([\"text\", \"search\", \"tel\", \"url\", \"email\", \"password\"].indexOf(this.inputType) > -1);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"inputSize\", {\n get: function () {\n return this.getPropertyValue(\"inputSize\", 0);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"inputWidth\", {\n get: function () {\n return this.getPropertyValue(\"inputWidth\");\n },\n enumerable: false,\n configurable: true\n });\n QuestionTextModel.prototype.updateInputSize = function () {\n var size = this.isTextInput && this.size > 0 ? this.size : 0;\n if (this.isTextInput &&\n size < 1 &&\n this.parent &&\n !!this.parent[\"itemSize\"]) {\n size = this.parent[\"itemSize\"];\n }\n this.setPropertyValue(\"inputSize\", size);\n this.setPropertyValue(\"inputWidth\", size > 0 ? \"auto\" : \"\");\n };\n Object.defineProperty(QuestionTextModel.prototype, \"autoComplete\", {\n /**\n * Text auto complete\n */\n get: function () {\n return this.getPropertyValue(\"autoComplete\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"autoComplete\", val);\n },\n enumerable: false,\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 if (this.isValueExpression(val)) {\n this.minValueExpression = val.substr(1);\n return;\n }\n this.setPropertyValue(\"min\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"max\", {\n /**\n * The maximum value\n */\n get: function () {\n return this.getPropertyValue(\"max\");\n },\n set: function (val) {\n if (this.isValueExpression(val)) {\n this.maxValueExpression = val.substr(1);\n return;\n }\n this.setPropertyValue(\"max\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"minValueExpression\", {\n /**\n * The minimum value that you can setup as expression, for example today(-1) = yesterday;\n */\n get: function () {\n return this.getPropertyValue(\"minValueExpression\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"minValueExpression\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"maxValueExpression\", {\n /**\n * The maximum value that you can setup as expression, for example today(1) = tomorrow;\n */\n get: function () {\n return this.getPropertyValue(\"maxValueExpression\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"maxValueExpression\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"renderedMin\", {\n get: function () {\n return this.getPropertyValue(\"renderedMin\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"renderedMax\", {\n get: function () {\n return this.getPropertyValue(\"renderedMax\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"minErrorText\", {\n /**\n * The text that shows when value is less than min property.\n * @see min\n * @see maxErrorText\n */\n get: function () {\n return this.getLocalizableStringText(\"minErrorText\", _surveyStrings__WEBPACK_IMPORTED_MODULE_5__[\"surveyLocalization\"].getString(\"minError\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"minErrorText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"locMinErrorText\", {\n get: function () {\n return this.getLocalizableString(\"minErrorText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"maxErrorText\", {\n /**\n * The text that shows when value is greater than man property.\n * @see max\n * @see minErrorText\n */\n get: function () {\n return this.getLocalizableStringText(\"maxErrorText\", _surveyStrings__WEBPACK_IMPORTED_MODULE_5__[\"surveyLocalization\"].getString(\"maxError\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"maxErrorText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"locMaxErrorText\", {\n get: function () {\n return this.getLocalizableString(\"maxErrorText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"isMinMaxType\", {\n /**\n * Readonly property that returns true if the current inputType allows to set min and max properties\n * @see inputType\n * @see min\n * @see max\n */\n get: function () {\n return minMaxTypes.indexOf(this.inputType) > -1;\n },\n enumerable: false,\n configurable: true\n });\n QuestionTextModel.prototype.onCheckForErrors = function (errors, isOnValueChanged) {\n _super.prototype.onCheckForErrors.call(this, errors, isOnValueChanged);\n if (isOnValueChanged || this.canSetValueToSurvey())\n return;\n if (this.isValueLessMin) {\n errors.push(new _error__WEBPACK_IMPORTED_MODULE_6__[\"CustomError\"](this.getMinMaxErrorText(this.minErrorText, this.getCalculatedMinMax(this.renderedMin)), this));\n }\n if (this.isValueGreaterMax) {\n errors.push(new _error__WEBPACK_IMPORTED_MODULE_6__[\"CustomError\"](this.getMinMaxErrorText(this.maxErrorText, this.getCalculatedMinMax(this.renderedMax)), this));\n }\n };\n QuestionTextModel.prototype.canSetValueToSurvey = function () {\n if (!this.isMinMaxType)\n return true;\n if (this.isValueLessMin)\n return false;\n if (this.isValueGreaterMax)\n return false;\n return true;\n };\n QuestionTextModel.prototype.getMinMaxErrorText = function (errorText, value) {\n if (!value)\n return errorText;\n return errorText.replace(\"{0}\", value.toString());\n };\n Object.defineProperty(QuestionTextModel.prototype, \"isValueLessMin\", {\n get: function () {\n return (!this.isValueEmpty(this.renderedMin) &&\n this.getCalculatedMinMax(this.value) <\n this.getCalculatedMinMax(this.renderedMin));\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"isValueGreaterMax\", {\n get: function () {\n return (!this.isValueEmpty(this.renderedMax) &&\n this.getCalculatedMinMax(this.value) >\n this.getCalculatedMinMax(this.renderedMax));\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"isDateInputType\", {\n get: function () {\n return this.inputType === \"date\" || this.inputType === \"datetime-local\";\n },\n enumerable: false,\n configurable: true\n });\n QuestionTextModel.prototype.getCalculatedMinMax = function (minMax) {\n if (this.isValueEmpty(minMax))\n return minMax;\n return this.isDateInputType ? new Date(minMax) : minMax;\n };\n QuestionTextModel.prototype.setRenderedMinMax = function (values, properties) {\n var _this = this;\n if (values === void 0) { values = null; }\n if (properties === void 0) { properties = null; }\n this.setValueAndRunExpression(this.minValueExpression, this.min, function (val) {\n if (!val && _this.isDateInputType && !!_settings__WEBPACK_IMPORTED_MODULE_7__[\"settings\"].minDate) {\n val = _settings__WEBPACK_IMPORTED_MODULE_7__[\"settings\"].minDate;\n }\n _this.setPropertyValue(\"renderedMin\", val);\n }, values, properties);\n this.setValueAndRunExpression(this.maxValueExpression, this.max, function (val) {\n if (!val && _this.isDateInputType) {\n val = !!_settings__WEBPACK_IMPORTED_MODULE_7__[\"settings\"].maxDate ? _settings__WEBPACK_IMPORTED_MODULE_7__[\"settings\"].maxDate : \"2999-12-31\";\n }\n _this.setPropertyValue(\"renderedMax\", val);\n }, values, properties);\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: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"renderedStep\", {\n get: function () {\n return this.isValueEmpty(this.step) ? \"any\" : this.step;\n },\n enumerable: false,\n configurable: true\n });\n QuestionTextModel.prototype.supportGoNextPageAutomatic = function () {\n return [\"date\", \"datetime\", \"datetime-local\"].indexOf(this.inputType) < 0;\n };\n QuestionTextModel.prototype.supportGoNextPageError = function () {\n return [\"date\", \"datetime\", \"datetime-local\"].indexOf(this.inputType) < 0;\n };\n Object.defineProperty(QuestionTextModel.prototype, \"dataList\", {\n /**\n * The list of recommended options available to choose.\n */\n get: function () {\n return this.locDataList.value;\n },\n set: function (val) {\n this.locDataList.value = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"locDataList\", {\n get: function () {\n return this.locDataListValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"dataListId\", {\n get: function () {\n return !this.locDataList.isEmpty ? this.id + \"_datalist\" : \"\";\n },\n enumerable: false,\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 _helpers__WEBPACK_IMPORTED_MODULE_3__[\"Helpers\"].isNumber(newValue) ? parseFloat(newValue) : \"\";\n }\n return newValue;\n };\n QuestionTextModel.prototype.getControlClass = function () {\n var cssClasses = this.cssClasses;\n var result = cssClasses.root +\n (this.errors.length > 0 ? \" \" + cssClasses.onError : \"\");\n if (this.isReadOnly) {\n result += \" \" + cssClasses.controlDisabled;\n }\n return result;\n };\n QuestionTextModel.prototype.hasPlaceHolder = function () {\n return !this.isReadOnly && this.inputType !== \"range\";\n };\n return QuestionTextModel;\n}(_question_textbase__WEBPACK_IMPORTED_MODULE_8__[\"QuestionTextBase\"]));\n\nvar minMaxTypes = [\n \"number\",\n \"range\",\n \"date\",\n \"datetime-local\",\n \"month\",\n \"time\",\n \"week\",\n];\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"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 {\n name: \"size:number\",\n minValue: 0,\n dependsOn: \"inputType\",\n visibleIf: function (obj) {\n if (!obj)\n return false;\n return obj.isTextInput;\n },\n },\n {\n name: \"textUpdateMode\",\n default: \"default\",\n choices: [\"default\", \"onBlur\", \"onTyping\"],\n dependsOn: \"inputType\",\n visibleIf: function (obj) {\n if (!obj)\n return false;\n return obj.isTextInput;\n },\n },\n {\n name: \"autoComplete\",\n dataList: [\n \"name\",\n \"honorific-prefix\",\n \"given-name\",\n \"additional-name\",\n \"family-name\",\n \"honorific-suffix\",\n \"nickname\",\n \"organization-title\",\n \"username\",\n \"new-password\",\n \"current-password\",\n \"organization\",\n \"street-address\",\n \"address-line1\",\n \"address-line2\",\n \"address-line3\",\n \"address-level4\",\n \"address-level3\",\n \"address-level2\",\n \"address-level1\",\n \"country\",\n \"country-name\",\n \"postal-code\",\n \"cc-name\",\n \"cc-given-name\",\n \"cc-additional-name\",\n \"cc-family-name\",\n \"cc-number\",\n \"cc-exp\",\n \"cc-exp-month\",\n \"cc-exp-year\",\n \"cc-csc\",\n \"cc-type\",\n \"transaction-currency\",\n \"transaction-amount\",\n \"language\",\n \"bday\",\n \"bday-day\",\n \"bday-month\",\n \"bday-year\",\n \"sex\",\n \"url\",\n \"photo\",\n \"tel\",\n \"tel-country-code\",\n \"tel-national\",\n \"tel-area-code\",\n \"tel-local\",\n \"tel-local-prefix\",\n \"tel-local-suffix\",\n \"tel-extension\",\n \"email\",\n \"impp\",\n ],\n },\n {\n name: \"min\",\n dependsOn: \"inputType\",\n visibleIf: function (obj) {\n return !!obj && obj.isMinMaxType;\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 return !!obj && obj.isMinMaxType;\n },\n onPropertyEditorUpdate: function (obj, propertyEditor) {\n propertyEditor.inputType = obj.inputType;\n },\n },\n {\n name: \"minValueExpression:expression\",\n category: \"logic\",\n dependsOn: \"inputType\",\n visibleIf: function (obj) {\n return !!obj && obj.isMinMaxType;\n },\n },\n {\n name: \"maxValueExpression:expression\",\n category: \"logic\",\n dependsOn: \"inputType\",\n visibleIf: function (obj) {\n return !!obj && obj.isMinMaxType;\n },\n },\n {\n name: \"minErrorText\",\n serializationProperty: \"locMinErrorText\",\n dependsOn: \"inputType\",\n visibleIf: function (obj) {\n return !!obj && obj.isMinMaxType;\n },\n },\n {\n name: \"maxErrorText\",\n serializationProperty: \"locMaxErrorText\",\n dependsOn: \"inputType\",\n visibleIf: function (obj) {\n return !!obj && obj.isMinMaxType;\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 {\n name: \"maxLength:number\",\n default: -1,\n dependsOn: \"inputType\",\n visibleIf: function (obj) {\n if (!obj)\n return false;\n return obj.isTextInput;\n },\n },\n {\n name: \"placeHolder\",\n serializationProperty: \"locPlaceHolder\",\n dependsOn: \"inputType\",\n visibleIf: function (obj) {\n if (!obj)\n return false;\n return obj.isTextInput;\n },\n },\n {\n name: \"dataList:string[]\",\n serializationProperty: \"locDataList\",\n dependsOn: \"inputType\",\n visibleIf: function (obj) {\n if (!obj)\n return false;\n return obj.inputType === \"text\";\n },\n },\n], function () {\n return new QuestionTextModel(\"\");\n}, \"textbase\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_0__[\"QuestionFactory\"].Instance.registerQuestion(\"text\", function (name) {\n return new QuestionTextModel(name);\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_textbase.ts\":\n/*!**********************************!*\\\n !*** ./src/question_textbase.ts ***!\n \\**********************************/\n/*! exports provided: QuestionTextBase */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionTextBase\", function() { return QuestionTextBase; });\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n/**\n * A Base Model for a comment and text questions\n */\nvar QuestionTextBase = /** @class */ (function (_super) {\n __extends(QuestionTextBase, _super);\n function QuestionTextBase(name) {\n var _this = _super.call(this, name) || this;\n _this.createLocalizableString(\"placeHolder\", _this);\n return _this;\n }\n QuestionTextBase.prototype.isTextValue = function () {\n return true;\n };\n Object.defineProperty(QuestionTextBase.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: false,\n configurable: true\n });\n QuestionTextBase.prototype.getMaxLength = function () {\n return _helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].getMaxLength(this.maxLength, this.survey ? this.survey.maxTextLength : -1);\n };\n Object.defineProperty(QuestionTextBase.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 this.calcRenderedPlaceHolder();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextBase.prototype, \"locPlaceHolder\", {\n get: function () {\n return this.getLocalizableString(\"placeHolder\");\n },\n enumerable: false,\n configurable: true\n });\n QuestionTextBase.prototype.getType = function () {\n return \"textbase\";\n };\n QuestionTextBase.prototype.isEmpty = function () {\n return _super.prototype.isEmpty.call(this) || this.value === \"\";\n };\n Object.defineProperty(QuestionTextBase.prototype, \"textUpdateMode\", {\n /**\n * Gets or sets a value that specifies how the question updates it's value.\n *\n * The following options are available:\n * - `default` - get the value from survey.textUpdateMode\n * - `onBlur` - 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 * @see survey.textUpdateMode\n */\n get: function () {\n return this.getPropertyValue(\"textUpdateMode\");\n },\n set: function (val) {\n this.setPropertyValue(\"textUpdateMode\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextBase.prototype, \"isSurveyInputTextUpdate\", {\n get: function () {\n if (this.textUpdateMode == \"default\")\n return !!this.survey ? this.survey.isUpdateValueTextOnTyping : false;\n return this.textUpdateMode == \"onTyping\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextBase.prototype, \"renderedPlaceHolder\", {\n get: function () {\n return this.getPropertyValue(\"renderedPlaceHolder\");\n },\n enumerable: false,\n configurable: true\n });\n QuestionTextBase.prototype.setRenderedPlaceHolder = function (val) {\n this.setPropertyValue(\"renderedPlaceHolder\", val);\n };\n QuestionTextBase.prototype.onReadOnlyChanged = function () {\n _super.prototype.onReadOnlyChanged.call(this);\n this.calcRenderedPlaceHolder();\n };\n QuestionTextBase.prototype.endLoadingFromJson = function () {\n _super.prototype.endLoadingFromJson.call(this);\n this.calcRenderedPlaceHolder();\n };\n QuestionTextBase.prototype.calcRenderedPlaceHolder = function () {\n this.setRenderedPlaceHolder(this.hasPlaceHolder() ? this.placeHolder : undefined);\n };\n QuestionTextBase.prototype.hasPlaceHolder = function () {\n return !this.isReadOnly;\n };\n return QuestionTextBase;\n}(_question__WEBPACK_IMPORTED_MODULE_0__[\"Question\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"textbase\", [], function () {\n return new QuestionTextBase(\"\");\n}, \"question\");\n\n\n/***/ }),\n\n/***/ \"./src/questionfactory.ts\":\n/*!********************************!*\\\n !*** ./src/questionfactory.ts ***!\n \\********************************/\n/*! exports provided: QuestionFactory, ElementFactory */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionFactory\", function() { return QuestionFactory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ElementFactory\", function() { return ElementFactory; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\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 _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"choices_Item\") + \"1\",\n _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"choices_Item\") + \"2\",\n _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"choices_Item\") + \"3\",\n ];\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionFactory, \"DefaultColums\", {\n get: function () {\n var colName = _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"matrix_column\") + \" \";\n return [colName + \"1\", colName + \"2\", colName + \"3\"];\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionFactory, \"DefaultRows\", {\n get: function () {\n var rowName = _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"matrix_row\") + \" \";\n return [rowName + \"1\", rowName + \"2\"];\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionFactory, \"DefaultMutlipleTextItems\", {\n get: function () {\n var itemName = _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"multipletext_itemname\");\n return [itemName + \"1\", itemName + \"2\"];\n },\n enumerable: false,\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 _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"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\n/***/ \"./src/questionnonvalue.ts\":\n/*!*********************************!*\\\n !*** ./src/questionnonvalue.ts ***!\n \\*********************************/\n/*! exports provided: QuestionNonValue */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionNonValue\", function() { return QuestionNonValue; });\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\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 __extends(QuestionNonValue, _super);\n function QuestionNonValue(name) {\n return _super.call(this, name) || 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: false,\n configurable: true\n });\n Object.defineProperty(QuestionNonValue.prototype, \"hasTitle\", {\n get: function () {\n return false;\n },\n enumerable: false,\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: false,\n configurable: true\n });\n QuestionNonValue.prototype.hasErrors = function (fireCallback, rec) {\n if (fireCallback === void 0) { fireCallback = true; }\n if (rec === void 0) { rec = null; }\n return false;\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}(_question__WEBPACK_IMPORTED_MODULE_0__[\"Question\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"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\n/***/ \"./src/rendererFactory.ts\":\n/*!********************************!*\\\n !*** ./src/rendererFactory.ts ***!\n \\********************************/\n/*! exports provided: RendererFactory */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RendererFactory\", function() { return RendererFactory; });\nvar RendererFactory = /** @class */ (function () {\n function RendererFactory() {\n this.renderersHash = {};\n }\n RendererFactory.prototype.unregisterRenderer = function (questionType, rendererAs) {\n delete this.renderersHash[questionType][rendererAs];\n };\n RendererFactory.prototype.registerRenderer = function (questionType, renderAs, renderer) {\n if (!this.renderersHash[questionType]) {\n this.renderersHash[questionType] = {};\n }\n this.renderersHash[questionType][renderAs] = renderer;\n };\n RendererFactory.prototype.getRenderer = function (questionType, renderAs) {\n return ((this.renderersHash[questionType] &&\n this.renderersHash[questionType][renderAs]) ||\n \"default\");\n };\n RendererFactory.prototype.getRendererByQuestion = function (question) {\n return this.getRenderer(question.getType(), question.renderAs);\n };\n RendererFactory.prototype.clear = function () {\n this.renderersHash = {};\n };\n RendererFactory.Instance = new RendererFactory();\n return RendererFactory;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/settings.ts\":\n/*!*************************!*\\\n !*** ./src/settings.ts ***!\n \\*************************/\n/*! exports provided: settings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"settings\", 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 restful web API\n */\n webserviceEncodeParameters: true,\n /**\n * Cache the result for choices getting from web services. Set this property to false, to disable the caching.\n */\n useCachingForChoicesRestful: true,\n get useCachingForChoicesRestfull() {\n return settings.useCachingForChoicesRestful;\n },\n set useCachingForChoicesRestfull(val) {\n settings.useCachingForChoicesRestful = val;\n },\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 rowCount that returns in addConditionObjectsByContext function\n */\n matrixMaxRowCountInCondition: 1,\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 false to execute the skip trigger on next page instead of on value change.\n */\n executeSkipTriggerOnValueChanged: true,\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 * This property tells how many times survey re-run expressions on value changes during condition running. We need it to avoid recursions in the expressions\n */\n maximumConditionRunCountOnValueChanged: 10,\n /**\n * By default visibleIndex for question with titleLocation = \"hidden\" is -1, and survey doesn't count these questions when set questions numbers.\n * Set it true, and a question next to a question with hidden title will increase it's number.\n */\n setQuestionVisibleIndexForHiddenTitle: false,\n /**\n * By default visibleIndex for question with hideNumber = true is -1, and survey doesn't count these questions when set questions numbers.\n * Set it true, and a question next to a question with hidden title number will increase it's number.\n */\n setQuestionVisibleIndexForHiddenNumber: false,\n /**\n * By default all rows are rendered no matters whwther they are visible.\n * Set it true, and survey markup rows will be rendered only if they are visible in viewport.\n * This feature is experimantal and might do not support all the use cases.\n */\n lazyRowsRendering: false,\n lazyRowsRenderingStartRow: 3,\n /**\n * By default checkbox and radiogroup items are ordered in rows.\n * Set it \"column\", and items will be ordered in columns.\n */\n showItemsInOrder: \"default\",\n /**\n * Supported validators by question types. You can modify this variable to add validators for new question types or add/remove for existing question types.\n */\n supportedValidators: {\n question: [\"expression\"],\n comment: [\"text\", \"regex\"],\n text: [\"numeric\", \"text\", \"regex\", \"email\"],\n checkbox: [\"answercount\"],\n },\n /**\n * Set the value as string \"yyyy-mm-dd\". text questions with inputType \"date\" will not allow to set to survey date that less than this value\n */\n minDate: \"\",\n /**\n * Set the value as string \"yyyy-mm-dd\". text questions with inputType \"date\" will not allow to set to survey date that greater than this value\n */\n maxDate: \"\",\n showModal: undefined,\n supportCreatorV2: false,\n /**\n * Specifies a list of custom icons.\n * Use this property to replace SurveyJS default icons (displayed in UI elements of SurveyJS Library or Creator) with your custom icons.\n * For every default icon to replace, add a key/value object with the default icon's name as a key and the name of your custom icon as a value.\n * For example: Survey.settings.customIcons[\"icon-redo\"] = \"my-own-redo-icon\"\n */\n customIcons: {},\n};\n\n\n/***/ }),\n\n/***/ \"./src/stylesmanager.ts\":\n/*!******************************!*\\\n !*** ./src/stylesmanager.ts ***!\n \\******************************/\n/*! exports provided: StylesManager */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"StylesManager\", function() { return StylesManager; });\n/* harmony import */ var _defaultCss_cssstandard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultCss/cssstandard */ \"./src/defaultCss/cssstandard.ts\");\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 if (typeof document === \"undefined\")\n return null;\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 _defaultCss_cssstandard__WEBPACK_IMPORTED_MODULE_0__[\"surveyCss\"].currentType = themeName;\n }\n else {\n ThemeCss = StylesManager.ThemeCss;\n _defaultCss_cssstandard__WEBPACK_IMPORTED_MODULE_0__[\"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: vertical-align: top; overflow: auto; min-width:300px;\",\n \".sv_p_container\": \"display: vertical-align: top; min-width:300px;\",\n \".sv_q_title .sv_question_icon\": \"float: right; margin-right: 1em;\",\n \".sv_q_title .sv_question_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_q_title .sv_question_icon.sv_expanded::before\": \"transform: rotate(180deg);\",\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_q_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_matrix_cell_detail_button\": \"position: relative\",\n \".sv_detail_panel_icon\": \"display: block; position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); width: 14px; height: 14px;\",\n \".sv_detail_panel_icon::before\": \"content: ''; background-repeat: no-repeat; background-position: center; width: 14px; height: 14px; display: block; transform: rotate(270deg); background-image: url(\\\"data:image/svg+xml,%3C%3Fxml version='1.0' encoding='utf-8'%3F%3E%3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E%3Csvg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 15 15' style='enable-background:new 0 0 15 15;' xml:space='preserve'%3E%3Cstyle type='text/css'%3E .st0%7Bfill:%23FFFFFF;%7D%0A%3C/style%3E%3Cpolygon class='st0' points='14,5.5 12.6,4.1 7.5,9.1 2.4,4.1 1,5.5 7.5,12 '/%3E%3C/svg%3E%0A\\\");\",\n \".sv_detail_panel_icon.sv_detail_expanded::before\": \"transform: rotate(0deg)\",\n \".sv_matrix_empty_rows_section\": \"text-align: center; vertical-align: middle;\",\n \".sv_matrix_empty_rows_text\": \"padding:20px\",\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: calc(50% - 1em); 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: calc(33.33333% - 1em); 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: calc(25% - 1em); 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: calc(20% - 1em); 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 //progress buttons\n \".sv_progress-buttons__container-center\": \"text-align: center;\",\n \".sv_progress-buttons__container\": \"display: inline-block; font-size:0; width: 100%; max-width: 1100px; white-space: nowrap; overflow: hidden;\",\n \".sv_progress-buttons__image-button-left\": \"display: inline-block; vertical-align: top; margin-top: 22px; font-size: 14px; width: 16px; height: 16px; cursor: pointer; background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMi4wLjEsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHZpZXdCb3g9IjAgMCAxNiAxNiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMTYgMTY7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxwb2x5Z29uIHBvaW50cz0iMTEsMTIgOSwxNCAzLDggOSwyIDExLDQgNyw4ICIvPg0KPC9zdmc+DQo=);\",\n \".sv_progress-buttons__image-button-right\": \"display: inline-block; vertical-align: top; margin-top: 22px; font-size: 14px; width: 16px; height: 16px; cursor: pointer; background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMi4wLjEsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHZpZXdCb3g9IjAgMCAxNiAxNiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMTYgMTY7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxwb2x5Z29uIHBvaW50cz0iNSw0IDcsMiAxMyw4IDcsMTQgNSwxMiA5LDggIi8+DQo8L3N2Zz4NCg==);\",\n \".sv_progress-buttons__image-button--hidden\": \"visibility: hidden;\",\n \".sv_progress-buttons__list-container\": \"max-width: calc(100% - 36px); display: inline-block; overflow: hidden;\",\n \".sv_progress-buttons__list\": \"display: inline-block; width: max-content; padding-left: 28px; padding-right: 28px; margin-top: 14px; margin-bottom: 14px;\",\n \".sv_progress-buttons__list li\": \"width: 138px; font-size: 14px; font-family: 'Segoe UI', 'Helvetica Neue', Helvetica, Arial, sans-serif; position: relative; text-align: center; vertical-align: top; display: inline-block;\",\n \".sv_progress-buttons__list li:before\": \"width: 24px; height: 24px; content: ''; line-height: 30px; border: 3px solid #8dd9ca; display: block; margin: 0 auto 10px auto; border-radius: 50%; box-sizing: content-box; background-color: #8dd9ca; cursor: pointer;\",\n \".sv_progress-buttons__list li:after\": \"width: 73%; height: 3px; content: ''; position: absolute; background-color: #d4d4d4; top: 15px; left: -36.5%;\",\n \".sv_progress-buttons__list li:first-child:after\": \"content: none;\",\n \".sv_progress-buttons__list .sv_progress-buttons__page-title\": \"width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: $text-color; font-weight: bold;\",\n \".sv_progress-buttons__list .sv_progress-buttons__page-description\": \"width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: $text-color;\",\n \".sv_progress-buttons__list li.sv_progress-buttons__list-element--passed:before\": \"border-color: #1ab394; background-color: #1ab394;\",\n \".sv_progress-buttons__list li.sv_progress-buttons__list-element--passed + li:after\": \"background-color: #8dd9ca;\",\n \".sv_progress-buttons__list li.sv_progress-buttons__list-element--current:before\": \"border-color: #1ab394; background-color: white;\",\n \".sv_progress-buttons__list li.sv_progress-buttons__list-element--passed.sv_progress-buttons__list-element--current:before\": \"border-color: #1ab394; background-color: white;\",\n \".sv_progress-buttons__list li.sv_progress-buttons__list-element--nonclickable:before\": \"cursor: not-allowed;\",\n // ranking\n \".sv-ranking\": \"outline: none;\",\n \".sv-ranking-item\": \"cursor: pointer; margin-bottom: 5px;position: relative;\",\n \".sv-ranking-item:focus .sv-ranking-item__icon--hover\": \"visibility: hidden;\",\n \".sv-ranking-item:hover .sv-ranking-item__icon--hover\": \"visibility: visible;\",\n \".sv-question--disabled .sv-ranking-item:hover .sv-ranking-item__icon--hover\": \"visibility: hidden;\",\n \".sv-ranking-item:focus\": \"outline: none;\",\n \".sv-ranking-item:focus .sv-ranking-item__icon--focus\": \"visibility: visible; top: 15px;\",\n \".sv-ranking-item:focus .sv-ranking-item__index\": \"background: white; border: 2px solid #19b394;\",\n \".sv-ranking-item__content\": \"display: inline-block;background-color: white;padding-top: 5px;padding-bottom: 5px;padding-left: 35px;padding-right: 10px; border-radius: 100px;\",\n \".sv-ranking-item__icon-container\": \"position: absolute;left: 0;top: 0;bottom: 0;width: 35px;\",\n \".sv-ranking-item__icon\": \"visibility: hidden;left:10px;top:20px;fill:#19b394;position: absolute;\",\n \".sv-ranking-item__index\": \"display: inline-block;padding: 10px 16px;background: rgba(25, 179, 148, 0.1);border-radius: 100px;border: 2px solid transparent; margin-right: 10px;\",\n \".sv-ranking-item__text\": \"display: inline-block;\",\n \".sv-ranking-item__ghost\": \"display: none;background: #f3f3f3;border-radius: 100px;width: 200px;height: 55px;z-index: 1;position: absolute;left: 35px;\",\n \".sv-ranking-item--ghost .sv-ranking-item__ghost\": \"display: block;\",\n \".sv-ranking-item--ghost .sv-ranking-item__content\": \"visibility: hidden;\",\n \".sv-ranking-item--drag .sv-ranking-item__content\": \"box-shadow: 0px 8px 16px rgba(0, 0, 0, 0.1);border-radius: 100px;\",\n \".sv-ranking--drag .sv-ranking-item:hover .sv-ranking-item__icon\": \"visibility: hidden;\",\n \".sv-ranking-item--drag .sv-ranking-item__icon--hover\": \"visibility: visible;\",\n \".sv-ranking--mobile .sv-ranking-item__icon--hover\": \"visibility:visible; fill:#9f9f9f;\",\n \".sv-ranking--mobile.sv-ranking--drag .sv-ranking-item--ghost .sv-ranking-item__icon.sv-ranking-item__icon--hover\": \"visibility:hidden;\",\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; position: relative;\",\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; display: inline-block; width: calc(100% - 250px); margin-top: 20px;\",\n \".sv_main .sv-paneldynamic__add-btn\": \"float: right;\",\n \".sv_main .sv-paneldynamic__add-btn--list-mode\": \"float: none; margin-top: 0;\",\n \".sv_main .sv-paneldynamic__remove-btn\": \"margin-top: 1.25em;\",\n \".sv_main .sv-paneldynamic__remove-btn--right\": \"margin-top: 0; margin-left: 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; box-sizing: content-box;\",\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 \".sv_main .sjs_sp_placeholder\": \"display: flex; align-items: center; justify-content: center; position: absolute; z-index: 0; user-select: none; pointer-events: none; width: 100%; height: 100%;\",\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; max-width: 100%\",\n \".sv_main .sv-expand-action:before\": \"content: \\\"\\\"; display: inline-block; background-image: url(\\\"data:image/svg+xml,%3C%3Fxml version='1.0' encoding='utf-8'%3F%3E%3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E%3Csvg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 10 10' style='enable-background:new 0 0 10 10;' xml:space='preserve'%3E%3Cstyle type='text/css'%3E .st0%7Bfill:%23404040;%7D%0A%3C/style%3E%3Cpolygon class='st0' points='2,2 0,4 5,9 10,4 8,2 5,5 '/%3E%3C/svg%3E%0A\\\"); background-repeat: no-repeat; background-position: center center; height: 10px; width: 12px; margin: auto 8px;\",\n \".sv_main .sv-expand-action--expanded:before\": \"transform: rotate(180deg);\",\n \".sv_main .sv-action-bar\": \"display: flex; position: relative; align-items: center; margin-left: auto; padding: 0 0 0 16px; overflow: hidden; white-space: nowrap;\",\n \".sv_main .sv-action-bar-separator\": \"display: inline-block; width: 1px; height: 24px; vertical-align: middle; margin-right: 16px; background-color: #d6d6d6;\",\n \".sv_main .sv-action-bar-item\": \"-webkit-appearance: none; -moz-appearance: none; appearance: none; display: flex; height: 40px; padding: 8px; box-sizing: border-box; margin-right: 16px; border: none; border-radius: 2px; background-color: transparent; cursor: pointer; line-height: 24px; font-size: 16px; overflow-x: hidden; white-space: nowrap; min-width: auto; font-weight: normal\",\n \".sv_main .sv-action-bar-item__title\": \"vertical-align: middle; white-space: nowrap;\",\n \".sv_main .sv-action-bar-item__title--with-icon\": \"margin-left: 8px;\",\n \".sv_main .sv-action\": \"display: flex; align-items: center;\",\n \".sv_main .sv-action--hidden\": \"display: none;\",\n \".sv_main .sv-action-bar-item__icon svg\": \"display: block;\",\n \".sv_main .sv-action-bar-item:active\": \"opacity: 0.5;\",\n \".sv_main .sv-action-bar-item:focus\": \"outline: none;\",\n \".sv_main .sv-title-actions\": \"display: flex;align-items: center;\",\n \".sv_main .sv-title-actions__title\": \"flex-wrap: wrap; max-width: 90%; min-width: 50%;\",\n \".sv_main .sv-title-actions__bar\": \"min-width: 56px;\",\n \".sv_main .sv_matrix_cell_actions .sv-action-bar\": \"margin-left: 0; padding-left: 0;\",\n \".sv_main .sv_p_wrapper_in_row\": \"display: flex; flex-direction: row; align-items: center;\",\n \".sv_main .sv_p_remove_btn_right\": \"margin-left: 1em;\",\n //button-group\n \".sv_main .sv-button-group\": \"display: flex; align-items: center; flex-direction: row; font-size: 16px; height: 48px; overflow: auto;\",\n \".sv_main .sv-button-group__item\": \"display: flex; box-sizing: border-box; flex-direction: row; justify-content: center; align-items: center; width: 100%; padding: 11px 16px; line-height: 24px; border-width: 1px; border-style: solid; outline: none; font-size: 16px; font-weight: 400; cursor: pointer; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\",\n \".sv_main .sv-button-group__item:not(:first-of-type)\": \"margin-left: -1px;\",\n \".sv_main .sv-button-group__item-icon\": \"display: block; height: 24px;\",\n \".sv_main .sv-button-group__item--selected\": \"font-weight: 600;\",\n \".sv_main .sv-button-group__item-decorator\": \"display: flex; align-items: center;\",\n \".sv_main .sv-button-group__item-icon + .sv-button-group__item-caption\": \"margin-left: 8px;\",\n \".sv_main .sv-button-group__item--disabled\": \"color: cursor: default;\",\n //eo button-group\n //popup\n \"sv-popup\": \"display: block; position: absolute; z-index: -1;\",\n \".sv-popup\": \"position: fixed; left: 0; top: 0; z-index: 1000; width: 100vw; height: 100vh; outline: none;\",\n \".sv-popup--modal\": \"display: flex; align-items: center; justify-content: center;\",\n \".sv-popup--modal .sv-popup__container\": \"position: static; filter: none; padding: calc(4 * 8px);\",\n \".sv-popup__container\": \"position: absolute; filter: drop-shadow(0px calc(1 * 8px) calc(2 * 8px) rgba(0, 0, 0, 0.1)); padding: calc(1 * 8px) 0; background: white; border-radius: 4px;\",\n \".sv-popup__scrolling-content\": \"max-width: 90vw; max-height: 90vh; overflow: auto;\",\n \".sv-popup__scrolling-content::-webkit-scrollbar\": \"height: 6px; width: 6px; background-color: #f3f3f3;\",\n \".sv-popup__scrolling-content::-webkit-scrollbar-thumb\": \"background: rgba(25, 179, 148, 0.1);\",\n \".sv-popup__content\": \"min-width: 100%;\",\n \".sv-popup--show-pointer.sv-popup--top\": \"transform: translateY(calc(-1 * 8px));\",\n \".sv-popup--show-pointer.sv-popup--top .sv-popup__pointer\": \"transform: translate(calc(-1 * 8px)) rotate(180deg);\",\n \".sv-popup--show-pointer.sv-popup--bottom\": \"transform: translateY(calc(1 * 8px));\",\n \".sv-popup--show-pointer.sv-popup--bottom .sv-popup__pointer\": \"transform: translate(calc(-1 * 8px), calc(-1 * 8px));\",\n \".sv-popup--show-pointer.sv-popup--right\": \"transform: translate(calc(1 * 8px));\",\n \".sv-popup--show-pointer.sv-popup--right .sv-popup__pointer\": \"transform: translate(-12px, -4px) rotate(-90deg);\",\n \".sv-popup--show-pointer.sv-popup--left\": \"transform: translate(calc(-1 * 8px));\",\n \".sv-popup--show-pointer.sv-popup--left .sv-popup__pointer\": \"transform: translate(-4px, -4px) rotate(90deg);\",\n \".sv-popup__pointer\": \"display: block; position: absolute;\",\n \".sv-popup__pointer:after\": \"content: ' '; display: block; width: 0; height: 0; border-left: calc(1 * 8px) solid transparent; border-right: calc(1 * 8px) solid transparent; border-bottom: calc(1 * 8px) solid white; align-self: center;\",\n \".sv-popup__footer\": \"display: flex; margin-top: calc(4 * 8px);\",\n \".sv-popup__footer-item:first-child\": \"margin-left: auto;\",\n \".sv-popup__footer-item + .sv-popup__footer-item\": \"margin-left: calc(1 * 8px);\",\n \".sv-popup__button\": \"padding: calc(2 * 8px) calc(6 * 8px); background: #fff; box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.15); border-radius: 4px; cursor: pointer; margin: 2px; font-family: 'Segoe UI', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-style: normal; font-weight: 600; font-size: calc(2 * 8px); line-height: calc(3 * 8px); text-align: center; color: #19b394; border: none; outline: none;\",\n \".sv-popup__button:hover\": \"box-shadow: 0 0 0 2px #19b394;\",\n \".sv-popup__button:disabled\": \"color: rgba(22, 22, 22, 0.16); cursor: default;\",\n \".sv-popup__button:disabled:hover\": \"box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.15);\",\n \".sv-popup__button--apply\": \"background-color: #19b394; color: #fff;\",\n \".sv-popup__button--apply:disabled\": \"background-color: #f3f3f3;\",\n //eo popup\n //list\n \".sv-list\": \"display: flex; flex-direction: column; align-items: flex-start; padding: 0; margin: 0; background: #ffffff; font-family: 'Open Sans'; list-style-type: none;\",\n \".sv-list__item\": \"width: 100%; display: flex; align-items: center; box-sizing: border-box; padding: calc(1 * 8px) calc(2 * 8px); cursor: pointer;\",\n \".sv-list__item-icon\": \"float: left; width: calc(3 * 8px); height: calc(3 * 8px); margin-right: calc(2 * 8px);\",\n \".sv-list__item-icon svg\": \"display: block;\",\n \".sv-list__item-icon use\": \"fill: #909090;\",\n \".sv-list__item:not(.sv-list__item--selected):hover\": \"background-color: #f3f3f3;\",\n \".sv-list__item--selected\": \"background-color: #19b394; color: #fff;\",\n \".sv-list__item--selected .sv-list__item-icon use\": \"fill: #fff;\",\n \".sv-list__item--disabled\": \"color: rgba(22, 22, 22, 0.16); cursor: default; pointer-events: none;\",\n \".sv-list__item span\": \"white-space: nowrap;\",\n //eo list\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(title);\",\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(title); 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%; width: 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 \"$text-input-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 \"$foreground-light\": \"#909090\",\n \"$foreground-disabled\": \"#161616\",\n \"$background-dim\": \"#f3f3f3\",\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 \"$text-input-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 \"$foreground-light\": \"#909090\",\n \"$foreground-disabled\": \"#161616\",\n \"$background-dim\": \"#f3f3f3\",\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 \"$text-input-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 \"$foreground-light\": \"#909090\",\n \"$foreground-disabled\": \"#161616\",\n \"$background-dim\": \"#f3f3f3\",\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 \"$text-input-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 \"$foreground-light\": \"#909090\",\n \"$foreground-disabled\": \"#161616\",\n \"$background-dim\": \"#f3f3f3\",\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 \"$text-input-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 \"$foreground-light\": \"#909090\",\n \"$foreground-disabled\": \"#161616\",\n \"$background-dim\": \"#f3f3f3\",\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 \"$text-input-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 \"$foreground-light\": \"#909090\",\n \"$foreground-disabled\": \"#161616\",\n \"$background-dim\": \"#f3f3f3\",\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 \"$text-input-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 \"$foreground-light\": \"#909090\",\n \"$foreground-disabled\": \"#161616\",\n \"$background-dim\": \"#f3f3f3\",\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 \"$light-text-color\": \"#fff\",\n \"$button-text-color\": \"#fff\",\n \"$checkmark-color\": \"#fff\",\n \"$matrix-text-checked-color\": \"#fff\",\n \"$text-input-color\": \"#404040\",\n \"$inputs-background-color\": \"transparent\",\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 \"$foreground-light\": \"#909090\",\n \"$foreground-disabled\": \"#161616\",\n \"$background-dim\": \"#f3f3f3\",\n },\n bootstrap: {\n \"$main-color\": \"#18a689\",\n \"$text-color\": \"#404040;\",\n \"$text-input-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 \"$foreground-light\": \"#909090\",\n \"$foreground-disabled\": \"#161616\",\n \"$background-dim\": \"#f3f3f3\",\n },\n bootstrapmaterial: {\n \"$main-color\": \"#18a689\",\n \"$text-color\": \"#404040;\",\n \"$text-input-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 \"$foreground-light\": \"#909090\",\n \"$foreground-disabled\": \"#161616\",\n \"$background-dim\": \"#f3f3f3\",\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; -webkit-text-fill-color: $text-color; border-color: $border-color; background-color: $inputs-background-color;\",\n \".sv_default_css .sv_q_text_root\": \"color: $text-color; -webkit-text-fill-color: $text-color; border-color: $border-color; background-color: $inputs-background-color;\",\n \".sv_default_css .sv_q_dropdown_control\": \"color: $text-input-color; border-color: $border-color; background-color: $inputs-background-color;\",\n \".sv_default_css input[type='text']\": \"color: $text-color; -webkit-text-fill-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-input-color; -webkit-text-fill-color: $text-input-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-input-color; -webkit-text-fill-color: $text-input-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 //eo boolean\n //signature pad\n \".sv_main .sjs_sp_container\": \"border: 1px dashed $disable-color;\",\n \".sv_main .sjs_sp_placeholder\": \"color: $foreground-light;\",\n \".sv_main .sv_matrix_detail_row\": \"background-color: #ededed; border-top: 1px solid $header-background-color; border-bottom: 1px solid $header-background-color;\",\n //action-bar\n \".sv_main .sv-action-bar-item\": \"color: $text-color;\",\n \".sv_main .sv-action-bar-item__icon use\": \"fill: $foreground-light;\",\n \".sv_main .sv-action-bar-item:hover\": \"background-color: $background-dim;\",\n //eo action-bar\n //button-group\n \".sv_main .sv-button-group__item--hover:hover\": \"background-color: $background-dim;\",\n \".sv_main .sv-button-group__item-icon use\": \"fill: $foreground-light;\",\n \".sv_main .sv-button-group__item--selected\": \"color: $main-color;\",\n \".sv_main .sv-button-group__item--selected .sv-button-group__item-icon use\": \"fill: $main-color;\",\n \".sv_main .sv-button-group__item--disabled\": \"color: $foreground-disabled;\",\n \".sv_main .sv-button-group__item--disabled .sv-button-group__item-icon use\": \"fill: $foreground-disabled;\",\n \".sv_main .sv-button-group__item\": \"background: $body-background-color; border-color: $border-color;\",\n //eo button-group\n \".sv_main .sv_qstn textarea\": \"max-width: 100%\",\n \".sv_main .sv-matrixdynamic__drag-icon\": \"padding-top:14px\",\n \".sv_main .sv-matrixdynamic__drag-icon:after\": \"content: ' '; display: block; height: 4px; width: 16px; border: 1px solid $border-color; box-sizing: border-box; border-radius: 10px; cursor: move;\",\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: $button-text-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: $checkmark-color;\",\n \".sv-checkbox--checked .sv-checkbox__svg\": \"background-color: $main-color; fill: $checkmark-color;\",\n \".sv-checkbox--checked.sv-checkbox--disabled .sv-checkbox__svg\": \"background-color: $disable-color; fill: $checkmark-color;\",\n \".sv-checkbox--disabled .sv-checkbox__svg\": \"border-color: $disable-color;\",\n \".sv-comment\": \"border-color: $text-border-color; max-width: 100%;\",\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:not(.sv-file__choose-btn--disabled)\": \"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--checked\": \"color: $matrix-text-checked-color; background-color: $main-color;\",\n \".sv-matrix__text--disabled.sv-matrix__text--checked\": \"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-matrixdynamic__drag-icon\": \"padding-top:16px\",\n \".sv-matrixdynamic__drag-icon:after\": \"content: ' '; display: block; height: 4px; width: 16px; border: 1px solid $border-color; box-sizing: border-box; border-radius: 10px; cursor: move;\",\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-panel__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 \"input.sv-text, textarea.sv-comment, select.sv-dropdown\": \"color: $text-input-color; background-color: $inputs-background-color;\",\n \".sv-text::placeholder\": \"color: $text-input-color;\",\n \".sv-text::-ms-placeholder\": \"color: $text-input-color;\",\n \".sv-text:-ms-placeholder\": \"color: $text-input-color;\",\n \".sv-table__row--detail\": \"background-color: $header-background-color;\",\n //signature pad\n \".sjs_sp_container\": \"border: 1px dashed $disable-color;\",\n \".sjs_sp_placeholder\": \"color: $foreground-light;\",\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 \".sv_main .sv_row .sv_qstn:first-child:last-child\": \"flex: none !important;\",\n \".sv_main .sv_row .sv_p_container:first-child:last-child\": \"flex: none !important;\",\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 //eo boolean\n //signature pad\n \".sv_main .sjs_sp_container\": \"border: 1px dashed $disable-color;\",\n \".sv_main .sjs_sp_placeholder\": \"color: $foreground-light;\",\n \".sv_main .sv_matrix_detail_row\": \"background-color: #ededed; border-top: 1px solid $header-background-color; border-bottom: 1px solid $header-background-color;\",\n \".sv_main .sv-action-bar-item\": \"color: $text-color;\",\n \".sv_main .sv-action-bar-item__icon use\": \"fill: $foreground-light;\",\n \".sv_main .sv-action-bar-item:hover\": \"background-color: $background-dim;\",\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_row .sv_qstn:first-child:last-child\": \"flex: none !important;\",\n \".sv_main .sv_row .sv_p_container:first-child:last-child\": \"flex: none !important;\",\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 //eo boolean\n \".sv_main .sv_matrix_detail_row\": \"background-color: #ededed; border-top: 1px solid $header-background-color; border-bottom: 1px solid $header-background-color;\",\n //signature pad\n \".sv_main .sjs_sp_container\": \"border: 1px dashed $disable-color;\",\n \".sv_main .sjs_sp_placeholder\": \"color: $foreground-light;\",\n \".sv_main .sv-action-bar-item\": \"color: $text-color;\",\n \".sv_main .sv-action-bar-item__icon use\": \"fill: $foreground-light;\",\n \".sv_main .sv-action-bar-item:hover\": \"background-color: $background-dim;\",\n };\n StylesManager.Enabled = true;\n return StylesManager;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/survey-element.ts\":\n/*!*******************************!*\\\n !*** ./src/survey-element.ts ***!\n \\*******************************/\n/*! exports provided: SurveyElement */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyElement\", function() { return SurveyElement; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _rendererFactory__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./rendererFactory */ \"./src/rendererFactory.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _actions_action__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./actions/action */ \"./src/actions/action.ts\");\n/* harmony import */ var _actions_adaptive_container__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./actions/adaptive-container */ \"./src/actions/adaptive-container.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\n\n\n\n\n/**\n * Base class of SurveyJS Elements.\n */\nvar SurveyElement = /** @class */ (function (_super) {\n __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.isEditableTemplateElement = false;\n _this.isInteractiveDesignElement = true;\n _this.name = name;\n _this.createNewArray(\"errors\");\n _this.createNewArray(\"titleActions\");\n _this.registerFunctionOnPropertyValueChanged(\"isReadOnly\", function () {\n _this.onReadOnlyChanged();\n });\n _this.registerFunctionOnPropertyValueChanged(\"errors\", function () {\n _this.updateVisibleErrors();\n });\n return _this;\n }\n SurveyElement.getProgressInfoByElements = function (children, isRequired) {\n var info = _base__WEBPACK_IMPORTED_MODULE_3__[\"Base\"].createProgressInfo();\n for (var i = 0; i < children.length; i++) {\n if (!children[i].isVisible)\n continue;\n var childInfo = children[i].getProgressInfo();\n info.questionCount += childInfo.questionCount;\n info.answeredQuestionCount += childInfo.answeredQuestionCount;\n info.requiredQuestionCount += childInfo.requiredQuestionCount;\n info.requiredAnsweredQuestionCount +=\n childInfo.requiredAnsweredQuestionCount;\n }\n if (isRequired && info.questionCount > 0) {\n if (info.requiredQuestionCount == 0)\n info.requiredQuestionCount = 1;\n if (info.answeredQuestionCount > 0)\n info.requiredAnsweredQuestionCount = 1;\n }\n return info;\n };\n SurveyElement.ScrollElementToTop = function (elementId) {\n if (!elementId || typeof document === \"undefined\")\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 || typeof document === \"undefined\")\n return false;\n var res = SurveyElement.focusElementCore(elementId);\n if (!res) {\n setTimeout(function () {\n SurveyElement.focusElementCore(elementId);\n }, 10);\n }\n return res;\n };\n SurveyElement.focusElementCore = function (elementId) {\n var el = document.getElementById(elementId);\n if (el) {\n el.focus();\n return true;\n }\n return false;\n };\n SurveyElement.prototype.onPropertyValueChanged = function (name, oldValue, newValue) {\n _super.prototype.onPropertyValueChanged.call(this, name, oldValue, newValue);\n if (name === \"state\") {\n if (oldValue === \"default\" || newValue === \"default\") {\n this.updateTitleActions();\n }\n else {\n this.updateExpandAction();\n }\n if (this.stateChangedCallback)\n this.stateChangedCallback();\n }\n };\n Object.defineProperty(SurveyElement.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 this.notifyStateChanged();\n },\n enumerable: false,\n configurable: true\n });\n SurveyElement.prototype.notifyStateChanged = function () {\n if (this.survey) {\n this.survey.elementContentVisibilityChanged(this);\n }\n };\n Object.defineProperty(SurveyElement.prototype, \"isCollapsed\", {\n /**\n * Returns true if the Element is in the collapsed state\n * @see state\n * @see collapse\n * @see isExpanded\n */\n get: function () {\n if (this.isDesignMode)\n return;\n return this.state == \"collapsed\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyElement.prototype, \"isExpanded\", {\n /**\n * Returns true if the Element is in the expanded state\n * @see state\n * @see expand\n * @see isCollapsed\n */\n get: function () {\n return this.state == \"expanded\";\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Collapse the Element\n * @see state\n */\n SurveyElement.prototype.collapse = function () {\n if (this.isDesignMode)\n return;\n this.state = \"collapsed\";\n };\n /**\n * Expand the Element\n * @see state\n */\n SurveyElement.prototype.expand = function () {\n this.state = \"expanded\";\n };\n /**\n * Toggle element's state\n * @see state\n */\n SurveyElement.prototype.toggleState = function () {\n if (this.isCollapsed) {\n this.expand();\n return true;\n }\n if (this.isExpanded) {\n this.collapse();\n return false;\n }\n return true;\n };\n Object.defineProperty(SurveyElement.prototype, \"hasStateButton\", {\n get: function () {\n return this.isExpanded || this.isCollapsed;\n },\n enumerable: false,\n configurable: true\n });\n SurveyElement.prototype.getTitleToolbar = function () {\n if (!this.titleToolbarValue) {\n this.titleToolbarValue = new _actions_adaptive_container__WEBPACK_IMPORTED_MODULE_5__[\"AdaptiveActionContainer\"]();\n this.titleToolbarValue.setItems(this.getTitleActions());\n }\n return this.titleToolbarValue;\n };\n SurveyElement.prototype.updateExpandAction = function () {\n if (!!this.expandAction) {\n this.expandAction.visible = this.isExpanded || this.isCollapsed;\n this.expandAction.innerCss =\n \"sv-expand-action\" +\n (this.isExpanded ? \" sv-expand-action--expanded\" : \"\");\n }\n };\n Object.defineProperty(SurveyElement.prototype, \"titleActions\", {\n get: function () {\n return this.getPropertyValue(\"titleActions\");\n },\n enumerable: false,\n configurable: true\n });\n SurveyElement.prototype.getTitleActions = function () {\n if (!this.isTitleActionRequested) {\n this.updateTitleActions();\n this.isTitleActionRequested = true;\n }\n return this.titleActions;\n };\n SurveyElement.prototype.updateTitleActions = function () {\n var _this = this;\n var actions = [];\n if (this.hasStateButton && !this.expandAction) {\n this.expandAction = new _actions_action__WEBPACK_IMPORTED_MODULE_4__[\"Action\"]({\n id: \"expand-collapse-action\",\n title: \"\",\n disableTabStop: true,\n action: function () {\n _this.toggleState();\n },\n });\n }\n if (!!this.expandAction) {\n actions.push(this.expandAction);\n }\n if (!!this.survey) {\n actions = this.survey.getUpdatedElementTitleActions(this, actions);\n }\n this.updateExpandAction();\n this.setPropertyValue(\"titleActions\", actions);\n };\n Object.defineProperty(SurveyElement.prototype, \"hasTitleActions\", {\n get: function () {\n return this.getTitleActions().length > 0;\n },\n enumerable: false,\n configurable: true\n });\n SurveyElement.prototype.getTitleComponentName = function () {\n var componentName = _rendererFactory__WEBPACK_IMPORTED_MODULE_2__[\"RendererFactory\"].Instance.getRenderer(\"element\", \"title-actions\");\n if (componentName == \"default\") {\n return \"sv-default-title\";\n }\n return componentName;\n };\n Object.defineProperty(SurveyElement.prototype, \"titleTabIndex\", {\n get: function () {\n return this.state !== \"default\" ? 0 : undefined;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyElement.prototype, \"titleAriaExpanded\", {\n get: function () {\n if (this.state === \"default\")\n return undefined;\n return this.state === \"expanded\";\n },\n enumerable: false,\n configurable: true\n });\n SurveyElement.prototype.setSurveyImpl = function (value) {\n this.surveyImplValue = value;\n if (!this.surveyImplValue) {\n this.setSurveyCore(null);\n }\n else {\n this.surveyDataValue = this.surveyImplValue.getSurveyData();\n this.setSurveyCore(this.surveyImplValue.getSurvey());\n this.textProcessorValue = this.surveyImplValue.getTextProcessor();\n this.onSetData();\n }\n };\n Object.defineProperty(SurveyElement.prototype, \"surveyImpl\", {\n get: function () {\n return this.surveyImplValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyElement.prototype, \"data\", {\n get: function () {\n return this.surveyDataValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyElement.prototype, \"survey\", {\n /**\n * Returns the survey object.\n */\n get: function () {\n return this.getSurvey();\n },\n enumerable: false,\n configurable: true\n });\n SurveyElement.prototype.getSurvey = function (live) {\n if (live === void 0) { live = false; }\n if (!!this.surveyValue)\n return this.surveyValue;\n if (!!this.surveyImplValue) {\n this.setSurveyCore(this.surveyImplValue.getSurvey());\n }\n return this.surveyValue;\n };\n SurveyElement.prototype.setSurveyCore = function (value) {\n this.surveyValue = value;\n if (!!this.surveyChangedCallback) {\n this.surveyChangedCallback();\n }\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: false,\n configurable: true\n });\n Object.defineProperty(SurveyElement.prototype, \"isInternal\", {\n get: function () {\n return this.isContentElement;\n },\n enumerable: false,\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: false,\n configurable: true\n });\n Object.defineProperty(SurveyElement.prototype, \"isVisible\", {\n get: function () {\n return true;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyElement.prototype, \"isReadOnly\", {\n get: function () {\n return false;\n },\n enumerable: false,\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: false,\n configurable: true\n });\n SurveyElement.prototype.onReadOnlyChanged = function () {\n if (!!this.readOnlyChangedCallback) {\n this.readOnlyChangedCallback();\n }\n };\n SurveyElement.prototype.updateElementCss = function (reNew) { };\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\", this.getValidName(val));\n if (!this.isLoadingFromJson && !!oldValue) {\n this.onNameChanged(oldValue);\n }\n },\n enumerable: false,\n configurable: true\n });\n SurveyElement.prototype.getValidName = function (name) {\n return name;\n };\n SurveyElement.prototype.onNameChanged = function (oldValue) { };\n SurveyElement.prototype.updateBindingValue = function (valueName, value) {\n if (!!this.data &&\n !_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isTwoValueEquals(value, this.data.getValue(valueName))) {\n this.data.setValue(valueName, value, false);\n }\n };\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: false,\n configurable: true\n });\n SurveyElement.prototype.updateVisibleErrors = function () {\n var counter = 0;\n for (var i = 0; i < this.errors.length; i++) {\n if (this.errors[i].visible)\n counter++;\n }\n this.hasVisibleErrors = counter > 0;\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: false,\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: false,\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 /**\n * Returns true if it is a page.\n */\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyElement.prototype, \"isPanel\", {\n /**\n * Returns true if it is a panel.\n */\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyElement.prototype, \"isQuestion\", {\n /**\n * Returns true if it is a question.\n */\n get: function () {\n return false;\n },\n enumerable: false,\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: false,\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 Object.defineProperty(SurveyElement.prototype, \"parent\", {\n get: function () {\n return this.getPropertyValue(\"parent\", null);\n },\n set: function (val) {\n this.setPropertyValue(\"parent\", val);\n },\n enumerable: false,\n configurable: true\n });\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 (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"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.prototype.getSearchableLocKeys = function (keys) {\n keys.push(\"title\");\n keys.push(\"description\");\n };\n SurveyElement.CreateDisabledDesignElements = false;\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: false })\n ], SurveyElement.prototype, \"hasVisibleErrors\", void 0);\n return SurveyElement;\n}(_base__WEBPACK_IMPORTED_MODULE_3__[\"Base\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/survey-error.ts\":\n/*!*****************************!*\\\n !*** ./src/survey-error.ts ***!\n \\*****************************/\n/*! exports provided: SurveyError */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyError\", function() { return SurveyError; });\n/* harmony import */ var _localizablestring__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./localizablestring */ \"./src/localizablestring.ts\");\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 _localizablestring__WEBPACK_IMPORTED_MODULE_0__[\"LocalizableString\"](this.errorOwner, true);\n this.locTextValue.text = this.getText();\n }\n return this.locTextValue;\n },\n enumerable: false,\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\n\n\n/***/ }),\n\n/***/ \"./src/survey.ts\":\n/*!***********************!*\\\n !*** ./src/survey.ts ***!\n \\***********************/\n/*! exports provided: SurveyModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyModel\", function() { return SurveyModel; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _survey_element__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./survey-element */ \"./src/survey-element.ts\");\n/* harmony import */ var _defaultCss_cssstandard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./defaultCss/cssstandard */ \"./src/defaultCss/cssstandard.ts\");\n/* harmony import */ var _page__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./page */ \"./src/page.ts\");\n/* harmony import */ var _textPreProcessor__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./textPreProcessor */ \"./src/textPreProcessor.ts\");\n/* harmony import */ var _conditionProcessValue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./conditionProcessValue */ \"./src/conditionProcessValue.ts\");\n/* harmony import */ var _dxSurveyService__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./dxSurveyService */ \"./src/dxSurveyService.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _localizablestring__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./localizablestring */ \"./src/localizablestring.ts\");\n/* harmony import */ var _stylesmanager__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./stylesmanager */ \"./src/stylesmanager.ts\");\n/* harmony import */ var _surveytimer__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./surveytimer */ \"./src/surveytimer.ts\");\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./conditions */ \"./src/conditions.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./utils/utils */ \"./src/utils/utils.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\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 __extends(SurveyModel, _super);\n //#endregion\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 //#region Event declarations\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 = _this.addEvent();\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 = _this.addEvent();\n /**\n * The event is fired before the survey is going to preview mode, state equals to `preview`. It happens when a user click on \"Preview\" button. It shows when \"showPreviewBeforeComplete\" proeprty equals to \"showAllQuestions\" or \"showAnsweredQuestions\".\n * You can prevent showing it by setting allowShowPreview to `false`.\n *
`sender` - the survey object that fires the event.\n *
`options.allowShowPreview` - Specifies whether a user can see a preview. Set this property to `false` to prevent from showing the preview. The default value is `true`.\n * @see showPreviewBeforeComplete\n */\n _this.onShowingPreview = _this.addEvent();\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 = _this.addEvent();\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 = _this.addEvent();\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 = _this.addEvent();\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 = _this.addEvent();\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 = _this.addEvent();\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 = _this.addEvent();\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 = _this.addEvent();\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 = _this.addEvent();\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 = _this.addEvent();\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 = _this.addEvent();\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 = _this.addEvent();\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 = _this.addEvent();\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 = _this.addEvent();\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 = _this.addEvent();\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 = _this.addEvent();\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 = _this.addEvent();\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 = _this.addEvent();\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 = _this.addEvent();\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 = _this.addEvent();\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 = _this.addEvent();\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 = _this.addEvent();\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 = _this.addEvent();\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 = _this.addEvent();\n /**\n * Use this event to change the question title in code. If you want to remove question numbering then set showQuestionNumbers to \"off\".\n *
`sender` - the survey object that fires the event.\n *
`options.title` - a calculated question title, based on question `title`, `name`.\n *
`options.question` - a question object.\n * @see showQuestionNumbers\n * @see requiredText\n */\n _this.onGetQuestionTitle = _this.addEvent();\n /**\n * Use this event to change the question no in code. If you want to remove question numbering then set showQuestionNumbers to \"off\".\n *
`sender` - the survey object that fires the event.\n *
`options.no` - a calculated question no, based on question `visibleIndex`, survey `.questionStartIndex` properties. You can change it.\n *
`options.question` - a question object.\n * @see showQuestionNumbers\n * @see questionStartIndex\n */\n _this.onGetQuestionNo = _this.addEvent();\n /**\n * Use this event to change the progress text in code.\n *
`sender` - the survey object that fires the event.\n *
`options.text` - a progress text, that SurveyJS will render in progress bar.\n *
`options.questionCount` - a number of questions that have input(s). We do not count html or expression questions\n *
`options.answeredQuestionCount` - a number of questions that have input(s) and an user has answered.\n *
`options.requiredQuestionCount` - a number of required questions that have input(s). We do not count html or expression questions\n *
`options.requiredAnsweredQuestionCount` - a number of required questions that have input(s) and an user has answered.\n * @see progressBarType\n */\n _this.onProgressText = _this.addEvent();\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.name` - a property name 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 = _this.addEvent();\n /**\n * Use this event to specity render component name used for text rendering.\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.name` - a property name is going to be rendered.\n *
`options.renderAs` - a component name used for text rendering.\n */\n _this.onTextRenderAs = _this.addEvent();\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 = _this.addEvent();\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 = _this.addEvent();\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.question` - the file question instance.\n *
`options.name` - the question name.\n *
`options.files` - the Javascript File objects array to upload.\n *
`options.callback` - a callback function to get the file upload status and the updloaded file content.\n * @see uploadFiles\n * @see QuestionFileModel.storeDataAsText\n * @see onDownloadFile\n * @see onClearFiles\n * @see [View Examples](https://www.google.com/search?q=site%3Ahttps%3A%2F%2Fsurveyjs.io%2FExamples%2F+%22onUploadFiles%22)\n */\n _this.onUploadFiles = _this.addEvent();\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 callback function to get the file downloading status and the downloaded file content.\n * @see downloadFile\n * @see onClearFiles\n * @see onUploadFiles\n * @see [View Examples](https://www.google.com/search?q=site%3Ahttps%3A%2F%2Fsurveyjs.io%2FExamples%2F+%22onDownloadFile%22)\n */\n _this.onDownloadFile = _this.addEvent();\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 *
`question` - the question instance.\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 callback function to get the operation status.\n * @see clearFiles\n * @see onDownloadFile\n * @see onUploadFiles\n * @see [View Examples](https://www.google.com/search?q=site%3Ahttps%3A%2F%2Fsurveyjs.io%2FExamples%2F+%22onClearFiles%22)\n */\n _this.onClearFiles = _this.addEvent();\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 = _this.addEvent();\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 = _this.addEvent();\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 = _this.addEvent();\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 = _this.addEvent();\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 = _this.addEvent();\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 = _this.addEvent();\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 = _this.addEvent();\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 = _this.addEvent();\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 = _this.addEvent();\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 = _this.addEvent();\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 = _this.addEvent();\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 = _this.addEvent();\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 = _this.addEvent();\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 = _this.addEvent();\n /**\n * The event is fired before removing a row from Matrix Dynamic question. You can disable removing and clear the data instead.\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 * @see onMatrixRowRemoved\n * @see onMatrixAllowRemoveRow\n */\n _this.onMatrixRowRemoving = _this.addEvent();\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 * @see onMatrixRowRemoving\n * @see onMatrixAllowRemoveRow\n */\n _this.onMatrixRowRemoved = _this.addEvent();\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 * @see onMatrixRowRemoving\n * @see onMatrixRowRemoved\n */\n _this.onMatrixAllowRemoveRow = _this.addEvent();\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.columnName` - 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 = _this.addEvent();\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 = _this.addEvent();\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.columnName` - 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 = _this.addEvent();\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.columnName` - 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 = _this.addEvent();\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.error` - an error string. It is empty by default.\n *
`options.question` - the matrix question.\n *
`options.columnName` - 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 = _this.addEvent();\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 *
`options.panel` - an added panel.\n * @see QuestionPanelDynamicModel\n * @see QuestionPanelDynamicModel.panels\n */\n _this.onDynamicPanelAdded = _this.addEvent();\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 = _this.addEvent();\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 = _this.addEvent();\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 = _this.addEvent();\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 = _this.addEvent();\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 = _this.addEvent();\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 = _this.addEvent();\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 = _this.addEvent();\n _this.onLocaleChangedEvent = _this.addEvent();\n /**\n * Use this event to create/customize actions to be displayed in a question's title.\n *
`sender` - A [Survey](https://surveyjs.io/Documentation/Library?id=SurveyModel) object that fires the event.\n *
`options.question` - A [Question](https://surveyjs.io/Documentation/Library?id=Question) object for which the event is fired.\n *
`options.titleActions` - A list of actions ([IAction](https://surveyjs.io/Documentation/Library?id=IAction) objects) associated with the processed question.\n * @see IAction\n * @see Question\n */\n _this.onGetQuestionTitleActions = _this.addEvent();\n /**\n * Use this event to create/customize actions to be displayed in a panel's title.\n *
`sender` - A survey object that fires the event.\n *
`options.panel` - A panel ([PanelModel](https://surveyjs.io/Documentation/Library?id=panelmodel) object) for which the event is fired.\n *
`options.titleActions` - A list of actions ([IAction](https://surveyjs.io/Documentation/Library?id=IAction) objects) associated with the processed panel.\n * @see IAction\n * @see PanelModel\n */\n _this.onGetPanelTitleActions = _this.addEvent();\n /**\n * Use this event to create/customize actions to be displayed in a page's title.\n *
`sender` - A survey object that fires the event.\n *
`options.page` - A page ([PageModel](https://surveyjs.io/Documentation/Library?id=pagemodel) object) for which the event is fired.\n *
`options.titleActions` - A list of actions ([IAction](https://surveyjs.io/Documentation/Library?id=IAction) objects) associated with the processed page.\n * @see IAction\n * @see PageModel\n */\n _this.onGetPageTitleActions = _this.addEvent();\n /**\n * Use this event to create/customize actions to be displayed in a matrix question's row.\n *
`sender` - A survey object that fires the event.\n *
`options.question` - A matrix question ([QuestionMatrixBaseModel](https://surveyjs.io/Documentation/Library?id=questionmatrixbasemodel) object) for which the event is fired.\n *
`options.row` - A matrix row for which the event is fired.\n *
`options.actions` - A list of actions ([IAction](https://surveyjs.io/Documentation/Library?id=IAction) objects) associated with the processed matrix question and row.\n * @see IAction\n * @see QuestionMatrixDropdownModelBase\n */\n _this.onGetMatrixRowActions = _this.addEvent();\n /**\n * The event is fired after the survey element content was collapsed or expanded.\n *
`sender` - the survey object that fires the event.\n *
`options.element` - Specifies which survey element content was collapsed or expanded.\n * @see onElementContentVisibilityChanged\n */\n _this.onElementContentVisibilityChanged = _this.addEvent();\n /**\n * The event is fired before expression question convert it's value into display value for rendering.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - The expression question.\n *
`options.value` - The question value.\n *
`options.displayValue` - the display value that you can change before rendering.\n */\n _this.onGetExpressionDisplayValue = _this.addEvent();\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 //#endregion\n _this._isMobile = false;\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.isCalculatingProgressText = false;\n _this.isTriggerIsRunning = false;\n _this.triggerValues = null;\n _this.triggerKeys = null;\n _this.conditionValues = null;\n _this.isValueChangedOnRunningCondition = false;\n _this.conditionRunnerCounter = 0;\n _this.conditionUpdateVisibleIndexes = false;\n _this.conditionNotifyElementsOnAnyValueOrVariableChanged = 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 if (typeof document !== \"undefined\") {\n SurveyModel.stylesManager = new _stylesmanager__WEBPACK_IMPORTED_MODULE_12__[\"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 _textPreProcessor__WEBPACK_IMPORTED_MODULE_6__[\"TextPreProcessor\"]();\n _this.textPreProcessor.onProcess = function (textValue) {\n _this.getProcessedTextValue(textValue);\n };\n _this.createNewArray(\"pages\", function (value) {\n _this.doOnPageAdded(value);\n }, function (value) {\n _this.doOnPageRemoved(value);\n });\n _this.createNewArray(\"triggers\", function (value) {\n value.setOwner(_this);\n });\n _this.createNewArray(\"calculatedValues\", function (value) {\n value.setOwner(_this);\n });\n _this.createNewArray(\"completedHtmlOnCondition\", function (value) {\n value.locOwner = _this;\n });\n _this.createNewArray(\"navigateToUrlOnCondition\", function (value) {\n value.locOwner = _this;\n });\n _this.registerFunctionOnPropertyValueChanged(\"firstPageIsStarted\", function () {\n _this.onFirstPageIsStartedChanged();\n });\n _this.registerFunctionOnPropertyValueChanged(\"mode\", function () {\n _this.onModeChanged();\n });\n _this.registerFunctionOnPropertyValueChanged(\"progressBarType\", function () {\n _this.updateProgressText();\n });\n _this.registerFunctionOnPropertiesValueChanged([\"questionStartIndex\", \"requiredText\", \"questionTitlePattern\"], function () {\n _this.resetVisibleIndexes();\n });\n _this.onGetQuestionNo.onCallbacksChanged = function () {\n _this.resetVisibleIndexes();\n };\n _this.onProgressText.onCallbacksChanged = function () {\n _this.updateProgressText();\n };\n _this.onTextMarkdown.onCallbacksChanged = function () {\n _this.locStrsChanged();\n };\n _this.onGetQuestionTitle.onCallbacksChanged = function () {\n _this.locStrsChanged();\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: false,\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 _settings__WEBPACK_IMPORTED_MODULE_15__[\"settings\"].commentPrefix;\n },\n set: function (val) {\n _settings__WEBPACK_IMPORTED_MODULE_15__[\"settings\"].commentPrefix = val;\n },\n enumerable: false,\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: false,\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: false,\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, _defaultCss_cssstandard__WEBPACK_IMPORTED_MODULE_4__[\"surveyCss\"].getCss());\n }\n return this.cssValue;\n },\n set: function (value) {\n this.updateElementCss(false);\n this.mergeValues(value, this.css);\n },\n enumerable: false,\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: false,\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: false,\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: false,\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: false,\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: false,\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: false,\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: false,\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, \"lazyRendering\", {\n /**\n * By default all rows are rendered no matters if they are visible or not.\n * Set it true, and survey markup rows will be rendered only if they are visible in viewport.\n * This feature is experimantal and might do not support all the use cases.\n */\n get: function () {\n return this.lazyRenderingValue === true;\n },\n set: function (val) {\n this.lazyRenderingValue = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isLazyRendering\", {\n get: function () {\n return this.lazyRendering || _settings__WEBPACK_IMPORTED_MODULE_15__[\"settings\"].lazyRowsRendering;\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.updateLazyRenderingRowsOnRemovingElements = function () {\n if (!this.isLazyRendering)\n return;\n var page = this.currentPage;\n if (!!page) {\n Object(_utils_utils__WEBPACK_IMPORTED_MODULE_16__[\"scrollElementByChildId\"])(page.id);\n }\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: false,\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: false,\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: false,\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: false,\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: false,\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: false,\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: false,\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: false,\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: false,\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: false,\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: false,\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: false,\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: false,\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: false,\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: false,\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: false,\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: false,\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 || typeof window === \"undefined\" || !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: false,\n configurable: true\n });\n SurveyModel.prototype.beforeSettingQuestionErrors = function (question, errors) {\n this.maakeRequiredErrorsInvisibgle(errors);\n this.onSettingQuestionErrors.fire(this, {\n question: question,\n errors: errors,\n });\n };\n SurveyModel.prototype.beforeSettingPanelErrors = function (question, errors) {\n this.maakeRequiredErrorsInvisibgle(errors);\n };\n SurveyModel.prototype.maakeRequiredErrorsInvisibgle = function (errors) {\n if (!this.hideRequiredErrors)\n return;\n for (var i = 0; i < errors.length; i++) {\n var erType = errors[i].getErrorType();\n if (erType == \"required\" || erType == \"requireoneanswer\") {\n errors[i].visible = false;\n }\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: false,\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: false,\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: false,\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: false,\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: false,\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: false,\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 * - `onValueChanging` - check errors before setting value into survey. If there is an error, then survey data is not changed, but question value will be keeped.\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: false,\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: false,\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 * - `onHiddenContainer` - clear the question value when it or its parent (page or panel) 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: false,\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 * @param removeNonExisingRootKeys - set this parameter to true to remove keys from survey.data that doesn't have corresponded questions and calculated values\n * @see Question.clearIncorrectValues\n * @see Page.clearIncorrectValues\n * @see Panel.clearIncorrectValues\n */\n SurveyModel.prototype.clearIncorrectValues = function (removeNonExisingRootKeys) {\n if (removeNonExisingRootKeys === void 0) { removeNonExisingRootKeys = false; }\n for (var i = 0; i < this.pages.length; i++) {\n this.pages[i].clearIncorrectValues();\n }\n if (!removeNonExisingRootKeys)\n return;\n var data = this.data;\n var hasChanges = false;\n for (var key in data) {\n if (!!this.getQuestionByValueName(key))\n continue;\n if (this.iscorrectValueWithPostPrefix(key, _settings__WEBPACK_IMPORTED_MODULE_15__[\"settings\"].commentPrefix) ||\n this.iscorrectValueWithPostPrefix(key, _settings__WEBPACK_IMPORTED_MODULE_15__[\"settings\"].matrixTotalValuePostFix))\n continue;\n var calcValue = this.getCalculatedValueByName(key);\n if (!!calcValue && calcValue.includeIntoResult)\n continue;\n hasChanges = true;\n delete data[key];\n }\n if (hasChanges) {\n this.data = data;\n }\n };\n SurveyModel.prototype.iscorrectValueWithPostPrefix = function (key, postPrefix) {\n if (key.indexOf(postPrefix) !== key.length - postPrefix.length)\n return false;\n return !!this.getQuestionByValueName(key.substr(0, key.indexOf(postPrefix)));\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 _surveyStrings__WEBPACK_IMPORTED_MODULE_9__[\"surveyLocalization\"].currentLocale = value;\n this.localeValue = _surveyStrings__WEBPACK_IMPORTED_MODULE_9__[\"surveyLocalization\"].currentLocale;\n this.setPropertyValue(\"locale\", this.localeValue);\n if (this.isLoadingFromJson)\n return;\n this.locStrsChanged();\n this.localeChanged();\n this.onLocaleChangedEvent.fire(this, value);\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Returns an array of locales that are used in the survey's translation.\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 = _surveyStrings__WEBPACK_IMPORTED_MODULE_9__[\"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.localeChanged = function () {\n for (var i = 0; i < this.pages.length; i++) {\n this.pages[i].localeChanged();\n }\n };\n //ILocalizableOwner\n SurveyModel.prototype.getLocale = function () {\n return this.locale;\n };\n SurveyModel.prototype.locStrsChanged = function () {\n _super.prototype.locStrsChanged.call(this);\n //Do not set current page if it is not set yet.\n //At first we do not need this, at second it creates issues with Vue CLI projects\n //More information here: https://github.com/surveyjs/survey-library/issues/2599\n if (!this.currentPageValue)\n return;\n this.updateProgressText();\n var page = this.activePage;\n if (!!page) {\n page.locStrsChanged();\n }\n };\n SurveyModel.prototype.getMarkdownHtml = function (text, name) {\n return this.getSurveyMarkdownHtml(this, text, name);\n };\n SurveyModel.prototype.getRenderer = function (name) {\n return this.getRendererForString(this, name);\n };\n SurveyModel.prototype.getRendererForString = function (element, name) {\n var renderAs = this.getBuiltInRendererForString(element, name);\n var options = { element: element, name: name, renderAs: renderAs };\n this.onTextRenderAs.fire(this, options);\n return options.renderAs;\n };\n SurveyModel.prototype.getExpressionDisplayValue = function (question, value, displayValue) {\n var options = {\n question: question,\n value: value,\n displayValue: displayValue,\n };\n this.onGetExpressionDisplayValue.fire(this, options);\n return options.displayValue;\n };\n SurveyModel.prototype.getBuiltInRendererForString = function (element, name) {\n if (this.isDesignMode)\n return _localizablestring__WEBPACK_IMPORTED_MODULE_11__[\"LocalizableString\"].editableRenderer;\n return undefined;\n };\n SurveyModel.prototype.getProcessedText = function (text) {\n return this.processText(text, true);\n };\n SurveyModel.prototype.getLocString = function (str) {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_9__[\"surveyLocalization\"].getString(str);\n };\n //ISurveyErrorOwner\n SurveyModel.prototype.getErrorCustomText = function (text, error) {\n var options = {\n text: text,\n name: error.getErrorType(),\n error: error,\n };\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: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"title\", {\n //#region Title/Header options\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: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locTitle\", {\n get: function () {\n return this.getLocalizableString(\"title\");\n },\n enumerable: false,\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: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locDescription\", {\n get: function () {\n return this.getLocalizableString(\"description\");\n },\n enumerable: false,\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: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locLogo\", {\n get: function () {\n return this.getLocalizableString(\"logo\");\n },\n enumerable: false,\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 var width = this.getPropertyValue(\"logoWidth\");\n return Object(_utils_utils__WEBPACK_IMPORTED_MODULE_16__[\"getSize\"])(width);\n },\n set: function (value) {\n this.setPropertyValue(\"logoWidth\", value);\n },\n enumerable: false,\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 var height = this.getPropertyValue(\"logoHeight\");\n return Object(_utils_utils__WEBPACK_IMPORTED_MODULE_16__[\"getSize\"])(height);\n },\n set: function (value) {\n this.setPropertyValue(\"logoHeight\", value);\n },\n enumerable: false,\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\");\n },\n set: function (value) {\n this.setPropertyValue(\"logoPosition\", value);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"hasLogo\", {\n get: function () {\n return !!this.logo && this.logoPosition !== \"none\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isLogoBefore\", {\n get: function () {\n if (this.isDesignMode)\n return false;\n return (this.renderedHasLogo &&\n (this.logoPosition === \"left\" || this.logoPosition === \"top\"));\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isLogoAfter\", {\n get: function () {\n if (this.isDesignMode)\n return this.renderedHasLogo;\n return (this.renderedHasLogo &&\n (this.logoPosition === \"right\" || this.logoPosition === \"bottom\"));\n },\n enumerable: false,\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: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"renderedHasTitle\", {\n get: function () {\n if (this.isDesignMode)\n return this.isPropertyVisible(\"title\");\n return !this.locTitle.isEmpty && this.showTitle;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"renderedHasLogo\", {\n get: function () {\n if (this.isDesignMode)\n return this.isPropertyVisible(\"logo\");\n return this.hasLogo;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"renderedHasHeader\", {\n get: function () {\n return this.renderedHasTitle || this.renderedHasLogo;\n },\n enumerable: false,\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: false,\n configurable: true\n });\n SurveyModel.prototype.setIsMobile = function (newVal) {\n if (newVal === void 0) { newVal = true; }\n this._isMobile = newVal;\n };\n Object.defineProperty(SurveyModel.prototype, \"isMobile\", {\n get: function () {\n return Object(_utils_utils__WEBPACK_IMPORTED_MODULE_16__[\"isMobile\"])() || this._isMobile;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"titleMaxWidth\", {\n get: function () {\n if (!this.isMobile &&\n !this.isValueEmpty(this.logo) &&\n !_settings__WEBPACK_IMPORTED_MODULE_15__[\"settings\"].supportCreatorV2) {\n var logoWidth = this.logoWidth;\n if (this.logoPosition === \"left\" || this.logoPosition === \"right\") {\n return \"calc(100% - 5px - 2em - \" + logoWidth + \")\";\n }\n }\n return \"\";\n },\n enumerable: false,\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: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locCompletedHtml\", {\n get: function () {\n return this.getLocalizableString(\"completedHtml\");\n },\n enumerable: false,\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: false,\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 _conditions__WEBPACK_IMPORTED_MODULE_14__[\"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 _conditions__WEBPACK_IMPORTED_MODULE_14__[\"ConditionRunner\"](expression).run(values, properties);\n };\n /**\n * Run all triggers that performs on value changed and not on moving to the next page.\n */\n SurveyModel.prototype.runTriggers = function () {\n this.checkTriggers(this.getFilteredValues(), false);\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: false,\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: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locCompletedBeforeHtml\", {\n get: function () {\n return this.getLocalizableString(\"completedBeforeHtml\");\n },\n enumerable: false,\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: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locLoadingHtml\", {\n get: function () {\n return this.getLocalizableString(\"loadingHtml\");\n },\n enumerable: false,\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: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locStartSurveyText\", {\n get: function () {\n return this.getLocalizableString(\"startSurveyText\");\n },\n enumerable: false,\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: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locPagePrevText\", {\n get: function () {\n return this.getLocalizableString(\"pagePrevText\");\n },\n enumerable: false,\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: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locPageNextText\", {\n get: function () {\n return this.getLocalizableString(\"pageNextText\");\n },\n enumerable: false,\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: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locCompleteText\", {\n get: function () {\n return this.getLocalizableString(\"completeText\");\n },\n enumerable: false,\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: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locPreviewText\", {\n get: function () {\n return this.getLocalizableString(\"previewText\");\n },\n enumerable: false,\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: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locEditText\", {\n get: function () {\n return this.getLocalizableString(\"editText\");\n },\n enumerable: false,\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: false,\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: false,\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: false,\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 SurveyModel.prototype.getUpdatedQuestionNo = function (question, no) {\n if (this.onGetQuestionNo.isEmpty)\n return no;\n var options = { question: question, no: no };\n this.onGetQuestionNo.fire(this, options);\n return options.no;\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: false,\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: false,\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 * - `off` (default) - don't show progress bar\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: false,\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 * - `requiredQuestions`,\n * - `correctQuestions`,\n * - `buttons`\n */\n get: function () {\n return this.getPropertyValue(\"progressBarType\");\n },\n set: function (newValue) {\n if (newValue === \"correctquestion\")\n newValue = \"correctQuestion\";\n if (newValue === \"requiredquestion\")\n newValue = \"requiredQuestion\";\n this.setPropertyValue(\"progressBarType\", newValue);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isShowProgressBarOnTop\", {\n get: function () {\n if (!this.canShowProresBar())\n return false;\n return this.showProgressBar === \"top\" || this.showProgressBar === \"both\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isShowProgressBarOnBottom\", {\n get: function () {\n if (!this.canShowProresBar())\n return false;\n return this.showProgressBar === \"bottom\" || this.showProgressBar === \"both\";\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.canShowProresBar = function () {\n return (!this.isShowingPreview ||\n this.showPreviewBeforeComplete != \"showAllQuestions\");\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: false,\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(true);\n }\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.updateElementCss = function (reNew) {\n var pages = this.visiblePages;\n for (var i = 0; i < pages.length; i++) {\n pages[i].updateElementCss(reNew);\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: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"questionDescriptionLocation\", {\n /**\n * Gets or sets the question description position. The default value is `underTitle`.\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: false,\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: false,\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 var keys = this.getValuesKeys();\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\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: false,\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 Object.defineProperty(SurveyModel.prototype, \"editingObj\", {\n get: function () {\n return this.editingObjValue;\n },\n set: function (val) {\n var _this = this;\n if (this.editingObj == val)\n return;\n if (!!this.editingObj) {\n this.editingObj.onPropertyChanged.remove(this.onEditingObjPropertyChanged);\n }\n this.editingObjValue = val;\n if (this.isDisposed)\n return;\n if (!val) {\n var questions = this.getAllQuestions();\n for (var i = 0; i < questions.length; i++) {\n questions[i].unbindValue();\n }\n }\n if (!!this.editingObj) {\n this.setDataCore({});\n this.onEditingObjPropertyChanged = function (sender, options) {\n if (!_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].hasOriginalProperty(_this.editingObj, options.name))\n return;\n _this.updateOnSetValue(options.name, options.newValue, options.oldValue);\n };\n this.editingObj.onPropertyChanged.add(this.onEditingObjPropertyChanged);\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isEditingSurveyElement\", {\n get: function () {\n return !!this.editingObj;\n },\n enumerable: false,\n configurable: true\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 this.addCalculatedValuesIntoFilteredValues(values);\n var keys = this.getValuesKeys();\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n values[key] = this.getDataValueCore(this.valuesHash, key);\n }\n return values;\n };\n SurveyModel.prototype.addCalculatedValuesIntoFilteredValues = function (values) {\n var caclValues = this.calculatedValues;\n for (var i = 0; i < caclValues.length; i++)\n values[caclValues[i].name] = caclValues[i].value;\n };\n SurveyModel.prototype.getFilteredProperties = function () {\n return { survey: this };\n };\n SurveyModel.prototype.getValuesKeys = function () {\n if (!this.editingObj)\n return Object.keys(this.valuesHash);\n var props = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].getPropertiesByObj(this.editingObj);\n var res = [];\n for (var i = 0; i < props.length; i++) {\n res.push(props[i].name);\n }\n return res;\n };\n SurveyModel.prototype.getDataValueCore = function (valuesHash, key) {\n if (!!this.editingObj)\n return _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].getObjPropertyValue(this.editingObj, key);\n return valuesHash[key];\n };\n SurveyModel.prototype.setDataValueCore = function (valuesHash, key, value) {\n if (!!this.editingObj) {\n _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].setObjPropertyValue(this.editingObj, key, value);\n }\n else {\n valuesHash[key] = value;\n }\n };\n SurveyModel.prototype.deleteDataValueCore = function (valuesHash, key) {\n if (!!this.editingObj) {\n this.editingObj[key] = null;\n }\n else {\n delete valuesHash[key];\n }\n };\n Object.defineProperty(SurveyModel.prototype, \"comments\", {\n /**\n * Returns all comments from the data.\n * @see data\n */\n get: function () {\n var result = {};\n var keys = this.getValuesKeys();\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (key.indexOf(this.commentPrefix) > 0) {\n result[key] = this.getDataValueCore(this.valuesHash, key);\n }\n }\n return result;\n },\n enumerable: false,\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: false,\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: false,\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: false,\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: false,\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: false,\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 page.setWasShown(true);\n }\n return page;\n },\n enumerable: false,\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 if (this.isLoadingFromJson)\n return;\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 this.currentPageValue = newPage;\n if (!!newPage) {\n newPage.onFirstRendering();\n newPage.updateCustomWidgets();\n newPage.setWasShown(true);\n }\n this.locStrsChanged();\n this.currentPageChanged(newPage, oldValue);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"activePage\", {\n /**\n * Returns the currentPage, unless the started page is showing. In this case returns the started page.\n * @see currentPage\n * @see firstPageIsStarted\n * @see startedPage\n */\n get: function () {\n return this.isStartedState && this.startedPage\n ? this.startedPage\n : this.currentPage;\n },\n enumerable: false,\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: false,\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: false,\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 if (this.isFocusingQuestion)\n return;\n var page = this.activePage;\n if (page) {\n page.scrollToTop();\n page.focusFirstQuestion();\n }\n };\n SurveyModel.prototype.scrollToTopOnPageChange = function () {\n var page = this.activePage;\n if (!page)\n return;\n page.scrollToTop();\n if (this.focusFirstQuestionAutomatic && !this.isFocusingQuestion) {\n page.focusFirstQuestion();\n }\n };\n Object.defineProperty(SurveyModel.prototype, \"state\", {\n /**\n * Returns the current survey state:\n *\n * - `loading` - the survey is being loaded from JSON,\n * - `empty` - there is nothing to display in the current survey,\n * - `starting` - the survey's start page is displayed,\n * - `running` - a respondent is answering survey questions right now,\n * - `preview` - a respondent is previewing answered questions before submitting the survey (see [example](https://surveyjs.io/Examples/Library?id=survey-showpreview)),\n * - `completed` - a respondent has completed the survey and submitted the results.\n *\n * Details: [Preview State](https://surveyjs.io/Documentation/Library#states)\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: false,\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: false,\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: false,\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: false,\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: false,\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: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"completedState\", {\n get: function () {\n return this.completedStateValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"completedStateText\", {\n get: function () {\n return this.completedStateTextValue;\n },\n enumerable: false,\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 this.pages[i].passed = 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 if (typeof dest !== \"object\")\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 var isNextPage = this.isNextPage(newValue, oldValue);\n if (isNextPage) {\n oldValue.passed = true;\n }\n this.onCurrentPageChanged.fire(this, {\n oldCurrentPage: oldValue,\n newCurrentPage: newValue,\n isNextPage: isNextPage,\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 * It depends from progressBarType property\n * @see progressBarType\n * @see progressValue\n */\n SurveyModel.prototype.getProgress = function () {\n if (this.currentPage == null)\n return 0;\n if (this.progressBarType !== \"pages\") {\n var info = this.getProgressInfo();\n if (this.progressBarType === \"requiredQuestions\") {\n return info.requiredQuestionCount > 1\n ? Math.ceil((info.requiredAnsweredQuestionCount * 100) /\n info.requiredQuestionCount)\n : 100;\n }\n return info.questionCount > 1\n ? Math.ceil((info.answeredQuestionCount * 100) / info.questionCount)\n : 100;\n }\n var index = this.visiblePages.indexOf(this.currentPage) + 1;\n return Math.ceil((index * 100) / this.visiblePageCount);\n };\n Object.defineProperty(SurveyModel.prototype, \"progressValue\", {\n /**\n * Returns the progress that a user made while going through the survey.\n * It depends from progressBarType property\n * @see progressBarType\n */\n get: function () {\n return this.getPropertyValue(\"progressValue\", 0);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isNavigationButtonsShowing\", {\n /**\n * Returns the navigation buttons (i.e., 'Prev', 'Next', or 'Complete' and 'Preview') 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: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isNavigationButtonsShowingOnTop\", {\n /**\n * Returns true if the navigation buttons (i.e., 'Prev', 'Next', or 'Complete' and 'Preview') are shows on top.\n */\n get: function () {\n return this.getIsNavigationButtonsShowingOn(\"top\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isNavigationButtonsShowingOnBottom\", {\n /**\n * Returns true if the navigation buttons (i.e., 'Prev', 'Next', or 'Complete' and 'Preview') are shows on bottom.\n */\n get: function () {\n return this.getIsNavigationButtonsShowingOn(\"bottom\");\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.getIsNavigationButtonsShowingOn = function (buttonPosition) {\n var res = this.isNavigationButtonsShowing;\n return res == \"both\" || res == buttonPosition;\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: false,\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: false,\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: false,\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: false,\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: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isUpdateValueTextOnTyping\", {\n get: function () {\n return this.textUpdateMode == \"onTyping\";\n },\n enumerable: false,\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: false,\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: false,\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: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"areEmptyElementsHidden\", {\n get: function () {\n return (this.isShowingPreview &&\n this.showPreviewBeforeComplete == \"showAnsweredQuestions\");\n },\n enumerable: false,\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 || typeof document === \"undefined\")\n return false;\n var cookies = document.cookie;\n return cookies && cookies.indexOf(this.cookieName + \"=true\") > -1;\n },\n enumerable: false,\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 || typeof document === \"undefined\")\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 var _this = this;\n if (this.ignoreValidation || !this.isEditMode)\n return false;\n var func = function (hasErrors) {\n if (!hasErrors) {\n _this.doCurrentPageCompleteCore(doComplete);\n }\n };\n if (this.checkErrorsMode === \"onComplete\") {\n if (!this.isLastPage)\n return false;\n return this.hasErrors(true, true, func) !== false;\n }\n return this.hasCurrentPageErrors(func) !== false;\n };\n SurveyModel.prototype.checkForAsyncQuestionValidation = function (questions, func) {\n var _this = this;\n this.clearAsyncValidationQuesitons();\n for (var i = 0; i < questions.length; i++) {\n if (questions[i].isRunningValidators) {\n questions[i].onCompletedAsyncValidators = function (hasErrors) {\n _this.onCompletedAsyncQuestionValidators(func, 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 (func, hasErrors) {\n if (hasErrors) {\n this.clearAsyncValidationQuesitons();\n func(true);\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 func(false);\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: false,\n configurable: true\n });\n /**\n * Returns `true`, if the current page contains any error. If there is an async function in an expression, then the function will return `undefined` value.\n * In this case, you should use `onAsyncValidation` parameter, which is a callback function: (hasErrors: boolean) => void\n * @param onAsyncValidation use this parameter if you use async functions in your expressions. This callback function will be called with hasErrors value equals to `true` or `false`.\n * @see hasPageErrors\n * @see hasErrors\n * @see currentPage\n */\n SurveyModel.prototype.hasCurrentPageErrors = function (onAsyncValidation) {\n return this.hasPageErrors(undefined, onAsyncValidation);\n };\n /**\n * Returns `true`, if a page contains an error. If there is an async function in an expression, then the function will return `undefined` value.\n * In this case, you should use the second `onAsyncValidation` parameter, which is a callback function: (hasErrors: boolean) => void\n * @param page the page that you want to validate. If the parameter is undefined then the `activePage` is using\n * @param onAsyncValidation use this parameter if you use async functions in your expressions. This callback function will be called with hasErrors value equals to `true` or `false`.\n * @see hasCurrentPageErrors\n * @see hasErrors\n * @see activePage\n * @see currentPage\n */\n SurveyModel.prototype.hasPageErrors = function (page, onAsyncValidation) {\n if (!page) {\n page = this.activePage;\n }\n if (!page)\n return false;\n if (this.checkIsPageHasErrors(page))\n return true;\n if (!onAsyncValidation)\n return false;\n return this.checkForAsyncQuestionValidation(page.questions, function (hasErrors) { return onAsyncValidation(hasErrors); })\n ? undefined\n : false;\n };\n /**\n * Returns `true`, if any of the survey pages contains errors. If there is an async function in an expression, then the function will return `undefined` value.\n * In this case, you should use the third `onAsyncValidation` parameter, which is a callback function: (hasErrors: boolean) => void\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 * @param onAsyncValidation use this parameter if you use async functions in your expressions. This callback function will be called with hasErrors value equals to `true` or `false`.\n * @see hasCurrentPageErrors\n * @see hasPageErrors\n */\n SurveyModel.prototype.hasErrors = function (fireCallback, focusOnFirstError, onAsyncValidation) {\n if (fireCallback === void 0) { fireCallback = true; }\n if (focusOnFirstError === void 0) { focusOnFirstError = false; }\n if (!!onAsyncValidation) {\n fireCallback = true;\n }\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, false)) {\n if (!firstErrorPage)\n firstErrorPage = visPages[i];\n res = true;\n }\n }\n if (focusOnFirstError && !!firstErrorPage) {\n this.currentPage = firstErrorPage;\n var questions = firstErrorPage.questions;\n for (var i = 0; i < questions.length; i++) {\n if (questions[i].errors.length > 0) {\n questions[i].focus(true);\n break;\n }\n }\n }\n if (res || !onAsyncValidation)\n return res;\n return this.checkForAsyncQuestionValidation(this.getAllQuestions(), function (hasErrors) { return onAsyncValidation(hasErrors); })\n ? undefined\n : false;\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.activePage, 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 * Shows preview for the survey. Switches the survey to the \"preview\" state.\n *\n * Details: [Preview State](https://surveyjs.io/Documentation/Library#states-preview)\n * @see showPreviewBeforeComplete\n * @see cancelPreview\n * @see state\n * @see previewText\n * @see editText\n */\n SurveyModel.prototype.showPreview = function () {\n this.resetNavigationButton();\n if (this.hasErrorsOnNavigate(true))\n return false;\n if (this.doServerValidation(true, true))\n return false;\n var options = { allowShowPreview: true };\n this.onShowingPreview.fire(this, options);\n this.isShowingPreview = options.allowShowPreview;\n return true;\n };\n /**\n * Cancels preview and switches back to the \"running\" state.\n *\n * Details: [Preview State](https://surveyjs.io/Documentation/Library#states-preview)\n * @param curPage - A new current page. If the parameter is undefined then the last page becomes the 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 (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"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 this.cancelPreview(panel[\"originalPage\"]);\n };\n SurveyModel.prototype.doCurrentPageComplete = function (doComplete) {\n if (this.isValidatingOnServer)\n return false;\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(doComplete))\n return false;\n if (doComplete) {\n this.currentPage.passed = true;\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: false,\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: false,\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: false,\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 allow respondents to preview answers before submitting the survey results.\n *\n * Details: [Preview State](https://surveyjs.io/Documentation/Library#states-preview)\n * Example: [Show Preview Before Complete](https://surveyjs.io/Examples/Library?id=survey-showpreview)\n * @see showPreview\n * @see cancelPreview\n * @see state\n * @see previewText\n * @see editText\n */\n get: function () {\n return this.getPropertyValue(\"showPreviewBeforeComplete\", \"noPreview\");\n },\n set: function (val) {\n this.setPropertyValue(\"showPreviewBeforeComplete\", val);\n },\n enumerable: false,\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: false,\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 = undefined;\n }\n this.runConditions();\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 = undefined;\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.runConditions();\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 = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].createClass(\"panel\");\n panel.originalPage = page;\n single.addPanel(panel);\n var json = new _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObject\"]().toJsonObject(page);\n new _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"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 = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].createClass(originalElement.getType());\n if (!element)\n continue;\n var jsonObj = new _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObject\"]();\n //Deserialize page properties only, excluding elements\n jsonObj.lightSerializing = true;\n var pageJson = jsonObj.toJsonObject(originalPage);\n var page = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"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 _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObject\"]().toJsonObject(originalElement);\n new _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObject\"]().toObject(json, element);\n page.addElement(element);\n for (var k = 0; k < page.questions.length; k++) {\n this.questionHashesAdded(page.questions[k]);\n }\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: false,\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: false,\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: false,\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 if (!!this.currentPage) {\n this.currentPage.locStrsChanged();\n }\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: false,\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 (doComplete, isPreview) {\n if (isPreview === void 0) { isPreview = false; }\n if (!this.onServerValidateQuestions ||\n this.onServerValidateQuestions.isEmpty)\n return false;\n if (!doComplete && this.checkErrorsMode === \"onComplete\")\n return false;\n var self = this;\n var options = {\n data: {},\n errors: {},\n survey: this,\n complete: function () {\n self.completeServerValidation(options, isPreview);\n },\n };\n if (doComplete && this.checkErrorsMode === \"onComplete\") {\n options.data = this.data;\n }\n else {\n var questions = this.activePage.questions;\n for (var i = 0; i < questions.length; i++) {\n var question = 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 }\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, isPreview) {\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 var hasToFocus = this.focusOnFirstError;\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 _error__WEBPACK_IMPORTED_MODULE_10__[\"CustomError\"](options.errors[name], this));\n if (hasToFocus) {\n hasToFocus = false;\n if (!!question.page) {\n this.currentPage = question.page;\n }\n question.focus(true);\n }\n }\n }\n this.fireValidatedErrorsOnPage(this.currentPage);\n }\n if (!hasErrors) {\n if (isPreview) {\n this.isShowingPreview = true;\n }\n else {\n if (self.isLastPage)\n self.doComplete();\n else\n self.doNextPage();\n }\n }\n };\n SurveyModel.prototype.doNextPage = function () {\n var curPage = this.currentPage;\n this.checkOnPageTriggers();\n if (!this.isCompleted) {\n if (this.sendResultOnPageNext) {\n this.sendResult(this.surveyPostId, this.clientId, true);\n }\n if (curPage === this.currentPage) {\n var vPages = this.visiblePages;\n var index = vPages.indexOf(this.currentPage);\n this.currentPage = vPages[index + 1];\n }\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: false,\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: false,\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: false,\n configurable: true\n });\n SurveyModel.prototype.getProgressInfo = function () {\n var pages = this.isDesignMode ? this.pages : this.visiblePages;\n return _survey_element__WEBPACK_IMPORTED_MODULE_3__[\"SurveyElement\"].getProgressInfoByElements(pages, false);\n };\n Object.defineProperty(SurveyModel.prototype, \"progressText\", {\n /**\n * Returns the text for the current progress.\n */\n get: function () {\n var res = this.getPropertyValue(\"progressText\", \"\");\n if (!res) {\n this.updateProgressText();\n res = this.getPropertyValue(\"progressText\", \"\");\n }\n return res;\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.updateProgressText = function (onValueChanged) {\n if (onValueChanged === void 0) { onValueChanged = false; }\n if (this.isCalculatingProgressText)\n return;\n if (onValueChanged &&\n this.progressBarType == \"pages\" &&\n this.onProgressText.isEmpty)\n return;\n this.isCalculatingProgressText = true;\n this.setPropertyValue(\"progressText\", this.getProgressText());\n this.setPropertyValue(\"progressValue\", this.getProgress());\n this.isCalculatingProgressText = false;\n };\n SurveyModel.prototype.getProgressText = function () {\n if (!this.isDesignMode && this.currentPage == null)\n return \"\";\n var options = {\n questionCount: 0,\n answeredQuestionCount: 0,\n requiredQuestionCount: 0,\n requiredAnsweredQuestionCount: 0,\n text: \"\",\n };\n var type = this.progressBarType.toLowerCase();\n if (type === \"questions\" ||\n type === \"requiredquestions\" ||\n type === \"correctquestions\" ||\n !this.onProgressText.isEmpty) {\n var info = this.getProgressInfo();\n options.questionCount = info.questionCount;\n options.answeredQuestionCount = info.answeredQuestionCount;\n options.requiredQuestionCount = info.requiredQuestionCount;\n options.requiredAnsweredQuestionCount =\n info.requiredAnsweredQuestionCount;\n }\n options.text = this.getProgressTextCore(options);\n this.onProgressText.fire(this, options);\n return options.text;\n };\n SurveyModel.prototype.getProgressTextCore = function (info) {\n var type = this.progressBarType.toLowerCase();\n if (type === \"questions\") {\n return this.getLocString(\"questionsProgressText\")[\"format\"](info.answeredQuestionCount, info.questionCount);\n }\n if (type === \"requiredquestions\") {\n return this.getLocString(\"questionsProgressText\")[\"format\"](info.requiredAnsweredQuestionCount, info.requiredQuestionCount);\n }\n if (type === \"correctquestions\") {\n var correctAnswersCount = this.getCorrectedAnswerCount();\n return this.getLocString(\"questionsProgressText\")[\"format\"](correctAnswersCount, info.questionCount);\n }\n var vPages = this.isDesignMode ? this.pages : this.visiblePages;\n var index = this.isDesignMode ? 1 : vPages.indexOf(this.currentPage) + 1;\n return this.getLocString(\"progressText\")[\"format\"](index, vPages.length);\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.activePage,\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.getQuestionsByValueName(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.matrixRowRemoving = function (question, rowIndex, row) {\n var options = {\n question: question,\n rowIndex: rowIndex,\n row: row,\n allow: true,\n };\n this.onMatrixRowRemoving.fire(this, options);\n return options.allow;\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 Object.defineProperty(SurveyModel.prototype, \"isValidateOnValueChanging\", {\n get: function () {\n return this.checkErrorsMode === \"onValueChanging\";\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.matrixCellValidate = function (question, options) {\n options.question = question;\n this.onMatrixCellValidate.fire(this, options);\n return options.error ? new _error__WEBPACK_IMPORTED_MODULE_10__[\"CustomError\"](options.error, this) : null;\n };\n SurveyModel.prototype.dynamicPanelAdded = function (question) {\n if (this.onDynamicPanelAdded.isEmpty)\n return;\n var panels = question.panels;\n var panel = panels[panels.length - 1];\n this.onDynamicPanelAdded.fire(this, { question: question, panel: panel });\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.elementContentVisibilityChanged = function (element) {\n if (this.currentPageValue) {\n this.currentPageValue.ensureRowsVisibility();\n }\n this.onElementContentVisibilityChanged.fire(this, { element: element });\n };\n SurveyModel.prototype.getUpdatedElementTitleActions = function (element, titleActions) {\n if (element.isPage)\n return this.getUpdatedPageTitleActions(element, titleActions);\n if (element.isPanel)\n return this.getUpdatedPanelTitleActions(element, titleActions);\n return this.getUpdatedQuestionTitleActions(element, titleActions);\n };\n SurveyModel.prototype.getUpdatedQuestionTitleActions = function (question, titleActions) {\n var options = {\n question: question,\n titleActions: titleActions,\n };\n this.onGetQuestionTitleActions.fire(this, options);\n return options.titleActions;\n };\n SurveyModel.prototype.getUpdatedPanelTitleActions = function (panel, titleActions) {\n var options = {\n panel: panel,\n titleActions: titleActions,\n };\n this.onGetPanelTitleActions.fire(this, options);\n return options.titleActions;\n };\n SurveyModel.prototype.getUpdatedPageTitleActions = function (page, titleActions) {\n var options = {\n page: page,\n titleActions: titleActions,\n };\n this.onGetPageTitleActions.fire(this, options);\n return options.titleActions;\n };\n SurveyModel.prototype.getUpdatedMatrixRowActions = function (question, row, actions) {\n var options = {\n question: question,\n actions: actions,\n row: row,\n };\n this.onGetMatrixRowActions.fire(this, options);\n return options.actions;\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 _survey_element__WEBPACK_IMPORTED_MODULE_3__[\"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 files files to upload\n * @param uploadingCallback a call back function to get the status on uploading the files\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 question question\n * @param name question name\n * @param value file question value\n * @param callback call back function to get the status of the clearing operation\n */\n SurveyModel.prototype.clearFiles = function (question, name, value, fileName, callback) {\n if (this.onClearFiles.isEmpty) {\n !!callback && callback(\"success\", value);\n }\n this.onClearFiles.fire(this, {\n question: question,\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 _dxSurveyService__WEBPACK_IMPORTED_MODULE_8__[\"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\", {\n response: response,\n file: file,\n });\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 * @param index - a page index to where insert a page. It is -1 by default and the page will be added into the end.\n * @see addNewPage\n */\n SurveyModel.prototype.addPage = function (page, index) {\n if (index === void 0) { index = -1; }\n if (page == null)\n return;\n if (index < 0 || index >= this.pages.length) {\n this.pages.push(page);\n }\n else {\n this.pages.splice(index, 0, page);\n }\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 * @param index - a page index to where insert a new page. It is -1 by default and the page will be added into the end.\n * @see addPage\n */\n SurveyModel.prototype.addNewPage = function (name, index) {\n if (name === void 0) { name = null; }\n if (index === void 0) { index = -1; }\n var page = this.createNewPage(name);\n this.addPage(page, index);\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 };\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 getQuestionsByValueName\n * @see Question.valueName\n */\n SurveyModel.prototype.getQuestionByValueName = function (valueName, caseInsensitive) {\n if (caseInsensitive === void 0) { caseInsensitive = false; }\n var res = this.getQuestionsByValueName(valueName, caseInsensitive);\n return !!res ? res[0] : null;\n };\n /**\n * Returns all questions by their valueName. name property is used if valueName property is empty.\n * @param valueName a question name\n * @param caseInsensitive\n * @see getQuestionByName\n * @see getQuestionByValueName\n * @see Question.valueName\n */\n SurveyModel.prototype.getQuestionsByValueName = 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 SurveyModel.prototype.getCalculatedValueByName = function (name) {\n for (var i = 0; i < this.calculatedValues.length; i++) {\n if (name == this.calculatedValues[i].name)\n return this.calculatedValues[i];\n }\n return null;\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 /**\n * Creates and returns a new page, but do not add it into the survey.\n * You can use addPage(page) function to add it into survey later.\n * @see addPage\n * @see addNewPage\n */\n SurveyModel.prototype.createNewPage = function (name) {\n return new _page__WEBPACK_IMPORTED_MODULE_5__[\"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: this.getUnbindValue(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.getQuestionsByValueName(valueName);\n if (!!questions) {\n for (var i = 0; i < questions.length; i++) {\n var qValue = questions[i].value;\n if ((qValue === newValue && Array.isArray(qValue) && !!this.editingObj) ||\n !this.isTwoValueEquals(qValue, newValue)) {\n questions[i].updateValueFromSurvey(newValue);\n }\n }\n }\n };\n SurveyModel.prototype.checkQuestionErrorOnValueChanged = function (question) {\n if (!this.isNavigationButtonPressed &&\n (this.checkErrorsMode === \"onValueChanged\" ||\n question.getAllErrors().length > 0)) {\n this.checkQuestionErrorOnValueChangedCore(question);\n }\n };\n SurveyModel.prototype.checkQuestionErrorOnValueChangedCore = function (question) {\n var oldErrorCount = question.getAllErrors().length;\n var res = question.hasErrors(true, {\n isOnValueChanged: !this.isValidateOnValueChanging,\n });\n if (!!question.page &&\n (oldErrorCount > 0 || question.getAllErrors().length > 0)) {\n this.fireValidatedErrorsOnPage(question.page);\n }\n return res;\n };\n SurveyModel.prototype.checkErrorsOnValueChanging = function (valueName, newValue) {\n if (this.isLoadingFromJson)\n return false;\n var questions = this.getQuestionsByValueName(valueName);\n if (!questions)\n return false;\n var res = false;\n for (var i = 0; i < questions.length; i++) {\n var q = questions[i];\n if (!this.isTwoValueEquals(q.valueForSurvey, newValue)) {\n q.value = newValue;\n }\n if (this.checkQuestionErrorOnValueChangedCore(q))\n res = true;\n res = res || q.errors.length > 0;\n }\n return res;\n };\n SurveyModel.prototype.notifyQuestionOnValueChanged = function (valueName, newValue) {\n if (this.isLoadingFromJson)\n return;\n var questions = this.getQuestionsByValueName(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 if (this.isDisposed)\n return;\n for (var i = 0; i < this.pages.length; i++) {\n this.pages[i].checkBindings(valueName, newValue);\n }\n this.notifyElementsOnAnyValueOrVariableChanged(valueName);\n };\n SurveyModel.prototype.notifyElementsOnAnyValueOrVariableChanged = function (name) {\n if (this.isEndLoadingFromJson === \"processing\")\n return;\n if (this.isRunningConditions) {\n this.conditionNotifyElementsOnAnyValueOrVariableChanged = true;\n return;\n }\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.addCalculatedValuesIntoFilteredValues(values);\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 || this.triggers.length == 0)\n return;\n if (this.isTriggerIsRunning) {\n this.triggerValues = this.getFilteredValues();\n for (var k in key) {\n this.triggerKeys[k] = key[k];\n }\n return;\n }\n this.isTriggerIsRunning = true;\n this.triggerKeys = key;\n this.triggerValues = 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(this.triggerKeys, this.triggerValues, 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 Object.defineProperty(SurveyModel.prototype, \"isRunningConditions\", {\n get: function () {\n return !!this.conditionValues;\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.runConditions = function () {\n if (this.isCompleted ||\n this.isEndLoadingFromJson === \"processing\" ||\n this.isRunningConditions)\n return;\n this.conditionValues = this.getFilteredValues();\n var properties = this.getFilteredProperties();\n var oldCurrentPageIndex = this.pages.indexOf(this.currentPageValue);\n this.runConditionsCore(properties);\n this.checkIfNewPagesBecomeVisible(oldCurrentPageIndex);\n this.conditionValues = null;\n if (this.isValueChangedOnRunningCondition &&\n this.conditionRunnerCounter <\n _settings__WEBPACK_IMPORTED_MODULE_15__[\"settings\"].maximumConditionRunCountOnValueChanged) {\n this.isValueChangedOnRunningCondition = false;\n this.conditionRunnerCounter++;\n this.runConditions();\n }\n else {\n this.isValueChangedOnRunningCondition = false;\n this.conditionRunnerCounter = 0;\n if (this.conditionUpdateVisibleIndexes) {\n this.conditionUpdateVisibleIndexes = false;\n this.updateVisibleIndexes();\n }\n if (this.conditionNotifyElementsOnAnyValueOrVariableChanged) {\n this.conditionNotifyElementsOnAnyValueOrVariableChanged = false;\n this.notifyElementsOnAnyValueOrVariableChanged(\"\");\n }\n }\n };\n SurveyModel.prototype.runConditionOnValueChanged = function (name, value) {\n if (this.isRunningConditions) {\n this.conditionValues[name] = value;\n this.isValueChangedOnRunningCondition = true;\n }\n else {\n this.runConditions();\n }\n };\n SurveyModel.prototype.runConditionsCore = function (properties) {\n var pages = this.pages;\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, this.conditionValues, properties);\n }\n for (var i = 0; i < pages.length; i++) {\n pages[i].runCondition(this.conditionValues, properties);\n }\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\", response);\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.resetVisibleIndexes = function () {\n var questions = this.getAllQuestions(true);\n for (var i = 0; i < questions.length; i++) {\n questions[i].setVisibleIndex(-1);\n }\n this.updateVisibleIndexes();\n };\n SurveyModel.prototype.updateVisibleIndexes = function () {\n if (this.isLoadingFromJson || !!this.isEndLoadingFromJson)\n return;\n if (this.isRunningConditions &&\n this.onVisibleChanged.isEmpty &&\n this.onPageVisibleChanged.isEmpty) {\n //Run update visible index only one time on finishing running conditions\n this.conditionUpdateVisibleIndexes = true;\n return;\n }\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 this.updateProgressText(true);\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 _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"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 : _surveyStrings__WEBPACK_IMPORTED_MODULE_9__[\"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 variable = this.getVariable(name);\n if (variable !== undefined) {\n textValue.isExists = true;\n textValue.value = variable;\n return;\n }\n var question = this.getFirstName(name);\n if (question) {\n textValue.isExists = true;\n var firstName = question.getValueName().toLowerCase();\n name = firstName + 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 _conditionProcessValue__WEBPACK_IMPORTED_MODULE_7__[\"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.getFirstName = function (name) {\n name = name.toLowerCase();\n var question;\n do {\n question = this.getQuestionByValueName(name, true);\n name = this.reduceFirstName(name);\n } while (!question && !!name);\n return question;\n };\n SurveyModel.prototype.reduceFirstName = function (name) {\n var pos1 = name.lastIndexOf(\".\");\n var pos2 = name.lastIndexOf(\"[\");\n if (pos1 < 0 && pos2 < 0)\n return \"\";\n var pos = Math.max(pos1, pos2);\n return name.substr(0, pos);\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.getQuestionsByValueName(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.getQuestionsByValueName(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 (!this.isValueEmpty(res))\n return res;\n if (name.indexOf(\".\") > -1 || name.indexOf(\"[\") > -1) {\n if (new _conditionProcessValue__WEBPACK_IMPORTED_MODULE_7__[\"ProcessValue\"]().hasValue(name, this.variablesHash))\n return new _conditionProcessValue__WEBPACK_IMPORTED_MODULE_7__[\"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.runConditionOnValueChanged(name, newValue);\n };\n /**\n * Returns all variables in the survey. Use setVariable function to create a new variable.\n * @see getVariable\n * @see setVariable\n */\n SurveyModel.prototype.getVariableNames = function () {\n var res = [];\n for (var key in this.variablesHash) {\n res.push(key);\n }\n return res;\n };\n //ISurvey data\n SurveyModel.prototype.getUnbindValue = function (value) {\n if (!!this.editingObj)\n return value;\n return _helpers__WEBPACK_IMPORTED_MODULE_0__[\"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 }\n if (this.isValidateOnValueChanging &&\n this.checkErrorsOnValueChanging(name, newValue))\n return;\n if (!this.editingObj &&\n this.isValueEqual(name, newValue) &&\n this.isTwoValueEquals(newValue, newQuestionValue))\n return;\n var oldValue = this.getValue(name);\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.updateOnSetValue(name, newValue, oldValue, locNotification, allowNotifyValueChanged);\n };\n SurveyModel.prototype.updateOnSetValue = function (name, newValue, oldValue, locNotification, allowNotifyValueChanged) {\n if (locNotification === void 0) { locNotification = false; }\n if (allowNotifyValueChanged === void 0) { allowNotifyValueChanged = true; }\n this.updateQuestionValue(name, newValue);\n if (locNotification === true || this.isDisposed)\n return;\n var triggerKeys = {};\n triggerKeys[name] = { newValue: newValue, oldValue: oldValue };\n this.runConditionOnValueChanged(name, newValue);\n this.checkTriggers(triggerKeys, false);\n if (allowNotifyValueChanged)\n this.notifyQuestionOnValueChanged(name, newValue);\n if (locNotification !== \"text\") {\n this.tryGoNextPageAutomatic(name);\n }\n this.updateProgressText(true);\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 this.updateVisibleIndexes();\n if (this.isDesignMode) {\n this.updateProgressText();\n }\n var options = { page: page };\n this.onPageAdded.fire(this, options);\n };\n SurveyModel.prototype.doOnPageRemoved = function (page) {\n page.setSurveyImpl(null);\n this.updateVisibleIndexes();\n if (this.isDesignMode) {\n this.updateProgressText();\n }\n this.updateLazyRenderingRowsOnRemovingElements();\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 (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isTwoValueEquals(newValue, this.getComment(name)))\n return;\n var commentName = name + this.commentPrefix;\n if (this.isValueEmpty(newValue)) {\n this.deleteDataValueCore(this.valuesHash, commentName);\n }\n else {\n this.setDataValueCore(this.valuesHash, commentName, newValue);\n }\n var questions = this.getQuestionsByValueName(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: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isClearValueOnHidden\", {\n get: function () {\n return (this.clearInvisibleValues == \"onHidden\" ||\n this.isClearValueOnHiddenContainer);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isClearValueOnHiddenContainer\", {\n get: function () {\n return (this.clearInvisibleValues == \"onHiddenContainer\" &&\n !this.isShowingPreview &&\n !this.runningPages);\n },\n enumerable: false,\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 };\n SurveyModel.prototype.pageVisibilityChanged = function (page, newValue) {\n if (this.isLoadingFromJson)\n return;\n if (newValue && !this.currentPageValue) {\n this.currentPageValue = this.currentPage;\n }\n this.updateVisibleIndexes();\n this.onPageVisibleChanged.fire(this, {\n page: page,\n visible: newValue,\n });\n };\n SurveyModel.prototype.panelVisibilityChanged = function (panel, newValue) {\n this.updateVisibleIndexes();\n this.onPanelVisibleChanged.fire(this, {\n panel: panel,\n visible: newValue,\n });\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 this.updateVisibleIndexes();\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 this.updateLazyRenderingRowsOnRemovingElements();\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 this.updateLazyRenderingRowsOnRemovingElements();\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 _error__WEBPACK_IMPORTED_MODULE_10__[\"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 _error__WEBPACK_IMPORTED_MODULE_10__[\"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, name) {\n var options = {\n element: element,\n text: text,\n name: name,\n html: null,\n };\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: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isTimerPanelShowingOnTop\", {\n get: function () {\n return this.isTimerStarted && this.showTimerPanel == \"top\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isTimerPanelShowingOnBottom\", {\n get: function () {\n return this.isTimerStarted && this.showTimerPanel == \"bottom\";\n },\n enumerable: false,\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: false,\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 _localizablestring__WEBPACK_IMPORTED_MODULE_11__[\"LocalizableString\"](this, true);\n loc.text = options.text;\n return loc.textOrHtml;\n },\n enumerable: false,\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 _surveytimer__WEBPACK_IMPORTED_MODULE_13__[\"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 _surveytimer__WEBPACK_IMPORTED_MODULE_13__[\"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: false,\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: false,\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 Object.defineProperty(SurveyModel.prototype, \"inSurvey\", {\n get: function () {\n return true;\n },\n enumerable: false,\n configurable: true\n });\n //ISurveyImplementor\n SurveyModel.prototype.getSurveyData = 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 question = this.getQuestionByName(name);\n if (!!question) {\n question.value = value;\n }\n else {\n var processor = new _conditionProcessValue__WEBPACK_IMPORTED_MODULE_7__[\"ProcessValue\"]();\n var firstName = processor.getFirstName(name);\n if (firstName == name) {\n this.setValue(name, value);\n }\n else {\n if (!this.getQuestionByName(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 };\n SurveyModel.prototype.copyTriggerValue = function (name, fromName) {\n if (!name || !fromName)\n return;\n var processor = new _conditionProcessValue__WEBPACK_IMPORTED_MODULE_7__[\"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.isFocusingQuestion = true;\n this.currentPage = question.page;\n question.focus();\n this.isFocusingQuestion = false;\n return true;\n };\n SurveyModel.prototype.getElementWrapperComponentName = function (element, reason) {\n if (reason === \"logo-image\") {\n return \"sv-logo-image\";\n }\n return SurveyModel.TemplateRendererComponentName;\n };\n SurveyModel.prototype.getRowWrapperComponentName = function (row) {\n return SurveyModel.TemplateRendererComponentName;\n };\n SurveyModel.prototype.getElementWrapperComponentData = function (element, reason) {\n return element;\n };\n SurveyModel.prototype.getRowWrapperComponentData = function (row) {\n return row;\n };\n SurveyModel.prototype.getItemValueWrapperComponentName = function (item, question) {\n return SurveyModel.TemplateRendererComponentName;\n };\n SurveyModel.prototype.getItemValueWrapperComponentData = function (item, question) {\n return item;\n };\n SurveyModel.prototype.getMatrixCellTemplateData = function (cell) {\n return cell.question;\n };\n SurveyModel.prototype.searchText = function (text) {\n if (!!text)\n text = text.toLowerCase();\n var res = [];\n for (var i = 0; i < this.pages.length; i++) {\n this.pages[i].searchText(text, res);\n }\n return res;\n };\n /**\n * Use this method to dispose survey model properly.\n */\n SurveyModel.prototype.dispose = function () {\n _super.prototype.dispose.call(this);\n this.editingObj = null;\n if (!this.pages)\n return;\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 this.currentPage = null;\n };\n SurveyModel.TemplateRendererComponentName = \"sv-template-renderer\";\n SurveyModel.stylesManager = null;\n SurveyModel.platform = \"unknown\";\n return SurveyModel;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"Base\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"survey\", [\n {\n name: \"locale\",\n choices: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_9__[\"surveyLocalization\"].getLocales(true);\n },\n onGetValue: function (obj) {\n return obj.locale == _surveyStrings__WEBPACK_IMPORTED_MODULE_9__[\"surveyLocalization\"].defaultLocale ? null : obj.locale;\n },\n },\n { name: \"title\", serializationProperty: \"locTitle\", dependsOn: \"locale\" },\n {\n name: \"description:text\",\n serializationProperty: \"locDescription\",\n dependsOn: \"locale\",\n },\n { name: \"logo\", serializationProperty: \"locLogo\" },\n { name: \"logoWidth\", default: \"300px\", minValue: 0 },\n { name: \"logoHeight\", default: \"200px\", 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: [\n \"pages\",\n \"questions\",\n \"requiredQuestions\",\n \"correctQuestions\",\n \"buttons\",\n ],\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\", \"onHiddenContainer\"],\n },\n {\n name: \"checkErrorsMode\",\n default: \"onNextPage\",\n choices: [\"onNextPage\", \"onValueChanged\", \"onValueChanging\", \"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 dependsOn: [\"showQuestionNumbers\"],\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\n/***/ \"./src/surveyProgressButtons.ts\":\n/*!**************************************!*\\\n !*** ./src/surveyProgressButtons.ts ***!\n \\**************************************/\n/*! exports provided: SurveyProgressButtonsModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyProgressButtonsModel\", function() { return SurveyProgressButtonsModel; });\nvar SurveyProgressButtonsModel = /** @class */ (function () {\n function SurveyProgressButtonsModel(survey) {\n this.survey = survey;\n }\n SurveyProgressButtonsModel.prototype.isListElementClickable = function (index) {\n if (!this.survey.onServerValidateQuestions ||\n this.survey.onServerValidateQuestions.isEmpty ||\n this.survey.checkErrorsMode === \"onComplete\") {\n return true;\n }\n return index <= this.survey.currentPageNo + 1;\n };\n SurveyProgressButtonsModel.prototype.getListElementCss = function (index) {\n if (index >= this.survey.visiblePages.length)\n return;\n var elementCss = this.survey.visiblePages[index].passed ?\n this.survey.css.progressButtonsListElementPassed : \"\";\n if (this.survey.currentPageNo === index) {\n elementCss += elementCss !== \"\" ? \" \" : \"\";\n elementCss += this.survey.css.progressButtonsListElementCurrent;\n }\n if (!this.isListElementClickable(index)) {\n elementCss += elementCss !== \"\" ? \" \" : \"\";\n elementCss += this.survey.css.progressButtonsListElementNonClickable;\n }\n return elementCss;\n };\n SurveyProgressButtonsModel.prototype.clickListElement = function (index) {\n if (this.survey.isDesignMode)\n return;\n if (index < this.survey.currentPageNo) {\n this.survey.currentPageNo = index;\n }\n else if (index > this.survey.currentPageNo) {\n for (var i = this.survey.currentPageNo; i < index; i++) {\n if (!this.survey.nextPage())\n break;\n }\n }\n };\n return SurveyProgressButtonsModel;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/surveyStrings.ts\":\n/*!******************************!*\\\n !*** ./src/surveyStrings.ts ***!\n \\******************************/\n/*! exports provided: surveyLocalization, surveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"surveyLocalization\", function() { return surveyLocalization; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"surveyStrings\", function() { return surveyStrings; });\n/* harmony import */ var _localization_english__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./localization/english */ \"./src/localization/english.ts\");\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 (removeDefaultLoc) {\n if (removeDefaultLoc === void 0) { removeDefaultLoc = false; }\n var res = [];\n res.push(\"\");\n var locs = this.locales;\n if (this.supportedLocales && this.supportedLocales.length > 0) {\n locs = {};\n for (var i = 0; i < this.supportedLocales.length; i++) {\n locs[this.supportedLocales[i]] = true;\n }\n }\n for (var key in locs) {\n if (removeDefaultLoc && key == this.defaultLocale)\n continue;\n res.push(key);\n }\n var locName = function (loc) {\n if (!loc)\n return \"\";\n var res = surveyLocalization.localeNames[loc];\n if (!res)\n res = loc;\n return res.toLowerCase();\n };\n res.sort(function (a, b) {\n var str1 = locName(a);\n var str2 = locName(b);\n if (str1 === str2)\n return 0;\n return str1 < str2 ? -1 : 1;\n });\n return res;\n },\n};\nvar surveyStrings = _localization_english__WEBPACK_IMPORTED_MODULE_0__[\"englishStrings\"];\nsurveyLocalization.locales[\"en\"] = _localization_english__WEBPACK_IMPORTED_MODULE_0__[\"englishStrings\"];\nsurveyLocalization.localeNames[\"en\"] = \"english\";\n\n\n/***/ }),\n\n/***/ \"./src/surveyWindow.ts\":\n/*!*****************************!*\\\n !*** ./src/surveyWindow.ts ***!\n \\*****************************/\n/*! exports provided: SurveyWindowModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyWindowModel\", function() { return SurveyWindowModel; });\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _survey__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./survey */ \"./src/survey.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n/**\n * A Model for a survey running in the Window.\n */\nvar SurveyWindowModel = /** @class */ (function (_super) {\n __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: false,\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: false,\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: false,\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: false,\n configurable: true\n });\n Object.defineProperty(SurveyWindowModel.prototype, \"locTitle\", {\n get: function () {\n return this.survey.locTitle;\n },\n enumerable: false,\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 _survey__WEBPACK_IMPORTED_MODULE_1__[\"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 if (typeof window !== \"undefined\") {\n window.clearInterval(timerId);\n }\n };\n timerId =\n typeof window !== \"undefined\"\n ? window.setInterval(func, this.closeOnCompleteTimeout * 1000)\n : 0;\n }\n };\n SurveyWindowModel.prototype.closeWindowOnComplete = function () {\n if (!!this.closeWindowOnCompleteCallback) {\n this.closeWindowOnCompleteCallback();\n }\n };\n SurveyWindowModel.surveyElementName = \"windowSurveyJS\";\n return SurveyWindowModel;\n}(_base__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/surveytimer.ts\":\n/*!****************************!*\\\n !*** ./src/surveytimer.ts ***!\n \\****************************/\n/*! exports provided: surveyTimerFunctions, SurveyTimer */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"surveyTimerFunctions\", function() { return surveyTimerFunctions; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyTimer\", function() { return SurveyTimer; });\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n\nvar surveyTimerFunctions = {\n setTimeout: function (func) {\n if (typeof window === \"undefined\")\n return 0;\n return window.setTimeout(func, 1000);\n },\n clearTimeout: function (timerId) {\n if (typeof window === \"undefined\")\n return;\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 _base__WEBPACK_IMPORTED_MODULE_0__[\"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: false,\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\n/***/ \"./src/template-renderer.ts\":\n/*!**********************************!*\\\n !*** ./src/template-renderer.ts ***!\n \\**********************************/\n/*! no exports provided */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n\n\n\n/***/ }),\n\n/***/ \"./src/textPreProcessor.ts\":\n/*!*********************************!*\\\n !*** ./src/textPreProcessor.ts ***!\n \\*********************************/\n/*! exports provided: TextPreProcessorItem, TextPreProcessorValue, TextPreProcessor, QuestionTextProcessor */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TextPreProcessorItem\", function() { return TextPreProcessorItem; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TextPreProcessorValue\", function() { return TextPreProcessorValue; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TextPreProcessor\", function() { return TextPreProcessor; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionTextProcessor\", function() { return QuestionTextProcessor; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _conditionProcessValue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./conditionProcessValue */ \"./src/conditionProcessValue.ts\");\n\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 (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(textValue.value)) {\n this.hasAllValuesOnLastRunValue = false;\n }\n var replacedValue = !_helpers__WEBPACK_IMPORTED_MODULE_0__[\"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 TextPreProcessor.prototype.processValue = function (name, returnDisplayValue) {\n var textValue = new TextPreProcessorValue(name, returnDisplayValue);\n if (!!this.onProcess) {\n this.onProcess(textValue);\n }\n return textValue;\n };\n Object.defineProperty(TextPreProcessor.prototype, \"hasAllValuesOnLastRun\", {\n get: function () {\n return !!this.hasAllValuesOnLastRunValue;\n },\n enumerable: false,\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\nvar QuestionTextProcessor = /** @class */ (function () {\n function QuestionTextProcessor(variableName) {\n var _this = this;\n this.variableName = variableName;\n this.textPreProcessor = new TextPreProcessor();\n this.textPreProcessor.onProcess = function (textValue) {\n _this.getProcessedTextValue(textValue);\n };\n }\n QuestionTextProcessor.prototype.processValue = function (name, returnDisplayValue) {\n return this.textPreProcessor.processValue(name, returnDisplayValue);\n };\n Object.defineProperty(QuestionTextProcessor.prototype, \"survey\", {\n get: function () {\n return null;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextProcessor.prototype, \"panel\", {\n get: function () {\n return null;\n },\n enumerable: false,\n configurable: true\n });\n QuestionTextProcessor.prototype.getValues = function () {\n return !!this.panel ? this.panel.getValue() : null;\n };\n QuestionTextProcessor.prototype.getQuestionByName = function (name) {\n return !!this.panel\n ? this.panel.getQuestionByValueName(name)\n : null;\n };\n QuestionTextProcessor.prototype.onCustomProcessText = function (textValue) {\n return false;\n };\n //ITextProcessor\n QuestionTextProcessor.prototype.getProcessedTextValue = function (textValue) {\n if (!textValue)\n return;\n if (this.onCustomProcessText(textValue))\n return;\n var firstName = new _conditionProcessValue__WEBPACK_IMPORTED_MODULE_1__[\"ProcessValue\"]().getFirstName(textValue.name);\n textValue.isExists = firstName == this.variableName;\n textValue.canProcess = textValue.isExists;\n if (!textValue.canProcess)\n return;\n //name should start with the variable name\n textValue.name = textValue.name.replace(this.variableName + \".\", \"\");\n var firstName = new _conditionProcessValue__WEBPACK_IMPORTED_MODULE_1__[\"ProcessValue\"]().getFirstName(textValue.name);\n var question = this.getQuestionByName(firstName);\n var values = {};\n if (question) {\n values[firstName] = textValue.returnDisplayValue\n ? question.displayValue\n : question.value;\n }\n else {\n var allValues = !!this.panel ? this.getValues() : null;\n if (allValues) {\n values[firstName] = allValues[firstName];\n }\n }\n textValue.value = new _conditionProcessValue__WEBPACK_IMPORTED_MODULE_1__[\"ProcessValue\"]().getValue(textValue.name, values);\n };\n QuestionTextProcessor.prototype.processText = function (text, returnDisplayValue) {\n text = this.textPreProcessor.process(text, returnDisplayValue);\n var survey = this.survey;\n return survey ? survey.processText(text, returnDisplayValue) : text;\n };\n QuestionTextProcessor.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.survey) {\n res = this.survey.processTextEx(text, returnDisplayValue, false);\n }\n res.hasAllValuesOnLastRun =\n res.hasAllValuesOnLastRun && hasAllValuesOnLastRun;\n return res;\n };\n return QuestionTextProcessor;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/trigger.ts\":\n/*!************************!*\\\n !*** ./src/trigger.ts ***!\n \\************************/\n/*! exports provided: Trigger, SurveyTrigger, SurveyTriggerVisible, SurveyTriggerComplete, SurveyTriggerSetValue, SurveyTriggerSkip, SurveyTriggerRunExpression, SurveyTriggerCopyValue */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Trigger\", function() { return Trigger; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyTrigger\", function() { return SurveyTrigger; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerVisible\", function() { return SurveyTriggerVisible; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerComplete\", function() { return SurveyTriggerComplete; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerSetValue\", function() { return SurveyTriggerSetValue; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerSkip\", function() { return SurveyTriggerSkip; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerRunExpression\", function() { return SurveyTriggerRunExpression; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerCopyValue\", function() { return SurveyTriggerCopyValue; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./conditions */ \"./src/conditions.ts\");\n/* harmony import */ var _expressions_expressions__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./expressions/expressions */ \"./src/expressions/expressions.ts\");\n/* harmony import */ var _conditionProcessValue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./conditionProcessValue */ \"./src/conditionProcessValue.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\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 __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: false,\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: false,\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: false,\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: false,\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: false,\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 (this.isValueEmpty(this.value) && this.isRequireValue)\n return \"\";\n return (\"{\" +\n this.name +\n \"} \" +\n this.operator +\n \" \" +\n _expressions_expressions__WEBPACK_IMPORTED_MODULE_4__[\"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 var processValue = new _conditionProcessValue__WEBPACK_IMPORTED_MODULE_5__[\"ProcessValue\"]();\n for (var i = 0; i < this.usedNames.length; i++) {\n var name = this.usedNames[i];\n if (keys.hasOwnProperty(name))\n return true;\n var firstName = processValue.getFirstName(name);\n if (!keys.hasOwnProperty(firstName))\n continue;\n if (name == firstName)\n return true;\n var keyValue = keys[firstName];\n if (keyValue == undefined)\n continue;\n if (!keyValue.hasOwnProperty(\"oldValue\") ||\n !keyValue.hasOwnProperty(\"newValue\"))\n return true;\n var v = {};\n v[firstName] = keyValue[\"oldValue\"];\n var oldValue = processValue.getValue(name, v);\n v[firstName] = keyValue[\"newValue\"];\n var newValue = processValue.getValue(name, v);\n return !_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isTwoValueEquals(oldValue, newValue);\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 _conditions__WEBPACK_IMPORTED_MODULE_3__[\"ConditionRunner\"](expression);\n this.hasFunction = this.conditionRunner.hasFunction();\n this.usedNames = this.conditionRunner.getVariables();\n };\n Object.defineProperty(Trigger.prototype, \"isRequireValue\", {\n get: function () {\n return this.operator !== \"empty\" && this.operator != \"notempty\";\n },\n enumerable: false,\n configurable: true\n });\n Trigger.operatorsValue = null;\n return Trigger;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"Base\"]));\n\n/**\n * It extends the Trigger base class and add properties required for SurveyJS classes.\n */\nvar SurveyTrigger = /** @class */ (function (_super) {\n __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: false,\n configurable: true\n });\n SurveyTrigger.prototype.setOwner = function (owner) {\n this.ownerValue = owner;\n };\n SurveyTrigger.prototype.getSurvey = function (live) {\n if (live === void 0) { live = false; }\n return !!this.owner && !!this.owner[\"getSurvey\"]\n ? this.owner.getSurvey()\n : null;\n };\n Object.defineProperty(SurveyTrigger.prototype, \"isOnNextPage\", {\n get: function () {\n return false;\n },\n enumerable: false,\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 __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 __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 !_settings__WEBPACK_IMPORTED_MODULE_6__[\"settings\"].executeCompleteTriggerOnValueChanged;\n },\n enumerable: false,\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 __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: false,\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: false,\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: false,\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 __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: false,\n configurable: true\n });\n Object.defineProperty(SurveyTriggerSkip.prototype, \"isOnNextPage\", {\n get: function () {\n return !_settings__WEBPACK_IMPORTED_MODULE_6__[\"settings\"].executeSkipTriggerOnValueChanged;\n },\n enumerable: false,\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 __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: false,\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: false,\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 _conditions__WEBPACK_IMPORTED_MODULE_3__[\"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 __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: false,\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: false,\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_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"trigger\", [\n { name: \"operator\", default: \"equal\", visible: false },\n { name: \"value\", visible: false },\n \"expression:condition\",\n]);\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"surveytrigger\", [{ name: \"name\", visible: false }], null, \"trigger\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"visibletrigger\", [\"pages:pages\", \"questions:questions\"], function () {\n return new SurveyTriggerVisible();\n}, \"surveytrigger\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"completetrigger\", [], function () {\n return new SurveyTriggerComplete();\n}, \"surveytrigger\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"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_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"copyvaluetrigger\", [{ name: \"!setToName:questionvalue\" }, { name: \"!fromName:questionvalue\" }], function () {\n return new SurveyTriggerCopyValue();\n}, \"surveytrigger\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"skiptrigger\", [{ name: \"!gotoName:question\" }], function () {\n return new SurveyTriggerSkip();\n}, \"surveytrigger\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"runexpressiontrigger\", [{ name: \"setToName:questionvalue\" }, \"runExpression:expression\"], function () {\n return new SurveyTriggerRunExpression();\n}, \"surveytrigger\");\n\n\n/***/ }),\n\n/***/ \"./src/utils/is-mobile.ts\":\n/*!********************************!*\\\n !*** ./src/utils/is-mobile.ts ***!\n \\********************************/\n/*! exports provided: IsMobile */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"IsMobile\", function() { return IsMobile; });\nvar _isMobile = false;\nvar vendor = null;\nif (typeof navigator !== \"undefined\" &&\n typeof window !== \"undefined\" &&\n navigator &&\n window) {\n vendor = navigator.userAgent || navigator.vendor || window.opera;\n}\n(function (a) {\n if (!a)\n return;\n if (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) ||\n /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0, 4)))\n _isMobile = true;\n})(vendor);\nvar IsMobile = _isMobile;\n\n\n/***/ }),\n\n/***/ \"./src/utils/popup.ts\":\n/*!****************************!*\\\n !*** ./src/utils/popup.ts ***!\n \\****************************/\n/*! exports provided: PopupUtils */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PopupUtils\", function() { return PopupUtils; });\nvar PopupUtils = /** @class */ (function () {\n function PopupUtils() {\n }\n PopupUtils.calculatePosition = function (targetRect, height, width, verticalPosition, horizontalPosition, showPointer) {\n if (horizontalPosition == \"center\")\n var left = (targetRect.left + targetRect.right - width) / 2;\n else if (horizontalPosition == \"left\")\n left = targetRect.left - width;\n else\n left = targetRect.right;\n if (verticalPosition == \"middle\")\n var top = (targetRect.top + targetRect.bottom - height) / 2;\n else if (verticalPosition == \"top\")\n top = targetRect.top - height;\n else\n top = targetRect.bottom;\n if (showPointer) {\n if (horizontalPosition != \"center\" && verticalPosition != \"middle\") {\n if (verticalPosition == \"top\") {\n top = top + targetRect.height;\n }\n else {\n top = top - targetRect.height;\n }\n }\n }\n return { left: Math.round(left), top: Math.round(top) };\n };\n PopupUtils.updateVerticalDimensions = function (top, height, windowHeight) {\n var result;\n if (top < 0) {\n result = { height: height + top, top: 0 };\n }\n else if (height + top > windowHeight) {\n result = { height: windowHeight - top, top: top };\n }\n return result;\n };\n PopupUtils.updateVerticalPosition = function (targetRect, height, verticalPosition, showPointer, windowHeight) {\n var deltaTop = height - (targetRect.top + (showPointer ? targetRect.height : 0));\n var deltaBottom = height +\n targetRect.bottom -\n (showPointer ? targetRect.height : 0) -\n windowHeight;\n if (deltaTop > 0 && deltaBottom <= 0 && verticalPosition == \"top\") {\n verticalPosition = \"bottom\";\n }\n else if (deltaBottom > 0 &&\n deltaTop <= 0 &&\n verticalPosition == \"bottom\") {\n verticalPosition = \"top\";\n }\n else if (deltaBottom > 0 && deltaTop > 0) {\n verticalPosition = deltaTop < deltaBottom ? \"top\" : \"bottom\";\n }\n return verticalPosition;\n };\n PopupUtils.calculatePopupDirection = function (verticalPosition, horizontalPosition) {\n var popupDirection;\n if (horizontalPosition == \"center\" && verticalPosition != \"middle\") {\n popupDirection = verticalPosition;\n }\n else if (horizontalPosition != \"center\") {\n popupDirection = horizontalPosition;\n }\n return popupDirection;\n };\n //called when showPointer is true\n PopupUtils.calculatePointerTarget = function (targetRect, top, left, verticalPosition, horizontalPosition) {\n var targetPos = {};\n if (horizontalPosition != \"center\") {\n targetPos.top = targetRect.top + targetRect.height / 2;\n targetPos.left = targetRect[horizontalPosition];\n }\n else if (verticalPosition != \"middle\") {\n targetPos.top = targetRect[verticalPosition];\n targetPos.left = targetRect.left + targetRect.width / 2;\n }\n targetPos.left = Math.round(targetPos.left - left);\n targetPos.top = Math.round(targetPos.top - top);\n return targetPos;\n };\n return PopupUtils;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/utils/responsivity-manager.ts\":\n/*!*******************************************!*\\\n !*** ./src/utils/responsivity-manager.ts ***!\n \\*******************************************/\n/*! exports provided: ResponsivityManager, VerticalResponsivityManager */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ResponsivityManager\", function() { return ResponsivityManager; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"VerticalResponsivityManager\", function() { return VerticalResponsivityManager; });\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar ResponsivityManager = /** @class */ (function () {\n function ResponsivityManager(container, model, itemsSelector, dotsItemSize) {\n var _this = this;\n if (dotsItemSize === void 0) { dotsItemSize = 48; }\n this.container = container;\n this.model = model;\n this.itemsSelector = itemsSelector;\n this.dotsItemSize = dotsItemSize;\n this.resizeObserver = undefined;\n this.isInilized = false;\n this.minDimensionConst = 56;\n this.separatorSize = 17;\n this.getComputedStyle = window.getComputedStyle.bind(window);\n this.resizeObserver = new ResizeObserver(function (_) { return _this.process(); });\n this.resizeObserver.observe(this.container.parentElement);\n }\n Object.defineProperty(ResponsivityManager.prototype, \"items\", {\n get: function () {\n return this.model.actions.filter(function (item) { return item.visible !== false; });\n },\n enumerable: false,\n configurable: true\n });\n ResponsivityManager.prototype.getDimensions = function (element) {\n return {\n scroll: element.scrollWidth,\n offset: element.offsetWidth,\n };\n };\n ResponsivityManager.prototype.getAvailableSpace = function () {\n var style = this.getComputedStyle(this.container);\n var space = this.container.offsetWidth;\n if (style.boxSizing === \"border-box\") {\n space -= parseFloat(style.paddingLeft) + parseFloat(style.paddingRight);\n }\n return space;\n };\n ResponsivityManager.prototype.calcItemSize = function (item) {\n return item.offsetWidth;\n };\n ResponsivityManager.prototype.calcItemsSizes = function () {\n var _this = this;\n var actions = this.model.actions;\n this.container\n .querySelectorAll(this.itemsSelector)\n .forEach(function (item, index) {\n var currentAction = actions[index];\n currentAction.maxDimension = _this.calcItemSize(item);\n currentAction.minDimension = currentAction.canShrink\n ? _this.minDimensionConst +\n (currentAction.needSeparator ? _this.separatorSize : 0)\n : currentAction.maxDimension;\n });\n };\n ResponsivityManager.prototype.getVisibleItemsCount = function (size) {\n var itemsSizes = this.items.map(function (item) { return item.minDimension; });\n var currSize = 0;\n for (var i = 0; i < itemsSizes.length; i++) {\n currSize += itemsSizes[i];\n if (currSize > size)\n return i;\n }\n return i;\n };\n ResponsivityManager.prototype.updateItemMode = function (dimension, minSize, maxSize) {\n var items = this.items;\n for (var index = items.length - 1; index >= 0; index--) {\n if (minSize <= dimension && dimension < maxSize) {\n maxSize -= items[index].maxDimension - items[index].minDimension;\n items[index].mode = \"small\";\n }\n else {\n items[index].mode = \"large\";\n }\n }\n };\n ResponsivityManager.prototype.fit = function (dimension) {\n if (dimension <= 0)\n return;\n this.model.removeDotsButton();\n var minSize = 0;\n var maxSize = 0;\n var items = this.items;\n items.forEach(function (item) {\n minSize += item.minDimension;\n maxSize += item.maxDimension;\n });\n if (dimension >= maxSize) {\n items.forEach(function (item) { return (item.mode = \"large\"); });\n }\n else if (dimension < minSize) {\n items.forEach(function (item) { return (item.mode = \"small\"); });\n this.model.showFirstN(this.getVisibleItemsCount(dimension - this.dotsItemSize));\n }\n else {\n this.updateItemMode(dimension, minSize, maxSize);\n }\n };\n ResponsivityManager.prototype.process = function () {\n if (!this.isInilized) {\n this.calcItemsSizes();\n this.isInilized = true;\n }\n this.fit(this.getAvailableSpace());\n };\n ResponsivityManager.prototype.dispose = function () {\n this.resizeObserver.disconnect();\n };\n return ResponsivityManager;\n}());\n\nvar VerticalResponsivityManager = /** @class */ (function (_super) {\n __extends(VerticalResponsivityManager, _super);\n function VerticalResponsivityManager(container, model, itemsSelector, dotsItemSize) {\n var _this = _super.call(this, container, model, itemsSelector, dotsItemSize) || this;\n _this.minDimensionConst = 40;\n return _this;\n }\n VerticalResponsivityManager.prototype.getDimensions = function () {\n return {\n scroll: this.container.scrollHeight,\n offset: this.container.offsetHeight,\n };\n };\n VerticalResponsivityManager.prototype.getAvailableSpace = function () {\n var style = this.getComputedStyle(this.container);\n var space = this.container.offsetHeight;\n if (style.boxSizing === \"border-box\") {\n space -= parseFloat(style.paddingTop) + parseFloat(style.paddingBottom);\n }\n return space;\n };\n VerticalResponsivityManager.prototype.calcItemSize = function (item) {\n return item.offsetHeight;\n };\n return VerticalResponsivityManager;\n}(ResponsivityManager));\n\n\n\n/***/ }),\n\n/***/ \"./src/utils/utils.ts\":\n/*!****************************!*\\\n !*** ./src/utils/utils.ts ***!\n \\****************************/\n/*! exports provided: unwrap, getSize, compareVersions, confirmAction, detectIEOrEdge, detectIEBrowser, loadFileFromBase64, isMobile, isElementVisible, findScrollableParent, scrollElementByChildId, createSvg, doKey2Click, getIconNameFromProxy */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"unwrap\", function() { return unwrap; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getSize\", function() { return getSize; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"compareVersions\", function() { return compareVersions; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"confirmAction\", function() { return confirmAction; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"detectIEOrEdge\", function() { return detectIEOrEdge; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"detectIEBrowser\", function() { return detectIEBrowser; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"loadFileFromBase64\", function() { return loadFileFromBase64; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isMobile\", function() { return isMobile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isElementVisible\", function() { return isElementVisible; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"findScrollableParent\", function() { return findScrollableParent; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"scrollElementByChildId\", function() { return scrollElementByChildId; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createSvg\", function() { return createSvg; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doKey2Click\", function() { return doKey2Click; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getIconNameFromProxy\", function() { return getIconNameFromProxy; });\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../settings */ \"./src/settings.ts\");\n\nfunction compareVersions(a, b) {\n var regExStrip0 = /(\\.0+)+$/;\n var segmentsA = a.replace(regExStrip0, \"\").split(\".\");\n var segmentsB = b.replace(regExStrip0, \"\").split(\".\");\n var len = Math.min(segmentsA.length, segmentsB.length);\n for (var i = 0; i < len; i++) {\n var 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 (!!_settings__WEBPACK_IMPORTED_MODULE_0__[\"settings\"] && !!_settings__WEBPACK_IMPORTED_MODULE_0__[\"settings\"].confirmActionFunc)\n return _settings__WEBPACK_IMPORTED_MODULE_0__[\"settings\"].confirmActionFunc(message);\n return confirm(message);\n}\nfunction detectIEBrowser() {\n if (typeof window === \"undefined\")\n return false;\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 window === \"undefined\")\n return false;\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 try {\n var byteString = atob(b64Data.split(\",\")[1]);\n // separate out the mime component\n var mimeString = b64Data\n .split(\",\")[0]\n .split(\":\")[1]\n .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 (typeof window !== \"undefined\" &&\n window.navigator &&\n window.navigator.msSaveBlob) {\n window.navigator.msSaveOrOpenBlob(bb, fileName);\n }\n }\n catch (err) { }\n}\nfunction isMobile() {\n return (typeof window !== \"undefined\" && typeof window.orientation !== \"undefined\");\n}\nfunction isElementVisible(element, threshold) {\n if (threshold === void 0) { threshold = 0; }\n if (typeof document === \"undefined\") {\n return false;\n }\n var elementRect = element.getBoundingClientRect();\n var viewHeight = Math.max(document.documentElement.clientHeight, window.innerHeight);\n var topWin = -threshold;\n var bottomWin = viewHeight + threshold;\n var topEl = elementRect.top;\n var bottomEl = elementRect.bottom;\n var maxTop = Math.max(topWin, topEl);\n var minBottom = Math.min(bottomWin, bottomEl);\n return maxTop <= minBottom;\n}\nfunction findScrollableParent(element) {\n if (!element) {\n return document.documentElement;\n }\n if (element.scrollHeight > element.clientHeight &&\n (getComputedStyle(element).overflowY === \"scroll\" ||\n getComputedStyle(element).overflowY === \"auto\")) {\n return element;\n }\n else {\n return findScrollableParent(element.parentElement);\n }\n}\nfunction scrollElementByChildId(id) {\n if (!document)\n return;\n var el = document.getElementById(id);\n if (!el)\n return;\n var scrollableEl = findScrollableParent(el);\n if (!!scrollableEl) {\n scrollableEl.dispatchEvent(new CustomEvent(\"scroll\"));\n }\n}\nfunction getIconNameFromProxy(iconName) {\n if (!iconName)\n return iconName;\n var proxyName = _settings__WEBPACK_IMPORTED_MODULE_0__[\"settings\"].customIcons[iconName];\n return !!proxyName ? proxyName : iconName;\n}\nfunction createSvg(size, width, height, iconName, svgElem) {\n svgElem.style.width = (size || width || 16) + \"px\";\n svgElem.style.height = (size || height || 16) + \"px\";\n var node = svgElem.childNodes[0];\n var realIconName = getIconNameFromProxy(iconName);\n node.setAttributeNS(\"http://www.w3.org/1999/xlink\", \"xlink:href\", \"#\" + realIconName);\n}\nfunction unwrap(value) {\n if (typeof value !== \"function\") {\n return value;\n }\n else {\n return value();\n }\n}\nfunction getSize(value) {\n if (typeof value === \"number\") {\n return \"\" + value + \"px\";\n }\n if (!!value && typeof value === \"string\" && value.length > 0) {\n var lastSymbol = value[value.length - 1];\n if ((lastSymbol >= \"0\" && lastSymbol <= \"9\") || lastSymbol == \".\") {\n try {\n var num = parseFloat(value);\n return \"\" + num + \"px\";\n }\n catch (_a) { }\n }\n }\n return value;\n}\nfunction doKey2Click(ev) {\n var el = ev.target;\n if (!el)\n return;\n var char = ev.which || ev.keyCode;\n if (char === 13 || char === 32) {\n if (el.click)\n el.click();\n }\n else if (char === 27) {\n if (el.blur)\n el.blur();\n }\n}\n\n\n\n/***/ }),\n\n/***/ \"./src/validator.ts\":\n/*!**************************!*\\\n !*** ./src/validator.ts ***!\n \\**************************/\n/*! exports provided: ValidatorResult, SurveyValidator, ValidatorRunner, NumericValidator, TextValidator, AnswerCountValidator, RegexValidator, EmailValidator, ExpressionValidator */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ValidatorResult\", function() { return ValidatorResult; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyValidator\", function() { return SurveyValidator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ValidatorRunner\", function() { return ValidatorRunner; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NumericValidator\", function() { return NumericValidator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TextValidator\", function() { return TextValidator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AnswerCountValidator\", function() { return AnswerCountValidator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RegexValidator\", function() { return RegexValidator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"EmailValidator\", function() { return EmailValidator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ExpressionValidator\", function() { return ExpressionValidator; });\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./conditions */ \"./src/conditions.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\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 __extends(SurveyValidator, _super);\n function SurveyValidator() {\n var _this = _super.call(this) || this;\n _this.createLocalizableString(\"text\", _this, true);\n return _this;\n }\n SurveyValidator.prototype.getSurvey = function (live) {\n if (live === void 0) { live = false; }\n return !!this.errorOwner && !!this.errorOwner[\"getSurvey\"]\n ? this.errorOwner.getSurvey()\n : null;\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: false,\n configurable: true\n });\n Object.defineProperty(SurveyValidator.prototype, \"isValidateAllValues\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyValidator.prototype, \"locText\", {\n get: function () {\n return this.getLocalizableString(\"text\");\n },\n enumerable: false,\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: false,\n configurable: true\n });\n Object.defineProperty(SurveyValidator.prototype, \"isAsync\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n SurveyValidator.prototype.getLocale = function () {\n return !!this.errorOwner ? this.errorOwner.getLocale() : \"\";\n };\n SurveyValidator.prototype.getMarkdownHtml = function (text, name) {\n return !!this.errorOwner\n ? this.errorOwner.getMarkdownHtml(text, name)\n : null;\n };\n SurveyValidator.prototype.getRenderer = function (name) {\n return !!this.errorOwner ? this.errorOwner.getRenderer(name) : 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 _error__WEBPACK_IMPORTED_MODULE_1__[\"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}(_base__WEBPACK_IMPORTED_MODULE_0__[\"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 __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 (this.isValueEmpty(value))\n return null;\n if (!_helpers__WEBPACK_IMPORTED_MODULE_5__[\"Helpers\"].isNumber(value)) {\n return new ValidatorResult(null, new _error__WEBPACK_IMPORTED_MODULE_1__[\"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 : _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"].getString(\"value\");\n if (this.minValue !== null && this.maxValue !== null) {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"]\n .getString(\"numericMinMax\")[\"format\"](vName, this.minValue, this.maxValue);\n }\n else {\n if (this.minValue !== null) {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"]\n .getString(\"numericMin\")[\"format\"](vName, this.minValue);\n }\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"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: false,\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: false,\n configurable: true\n });\n return NumericValidator;\n}(SurveyValidator));\n\n/**\n * Validate text values.\n */\nvar TextValidator = /** @class */ (function (_super) {\n __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 (this.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 _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"]\n .getString(\"textMinMaxLength\")[\"format\"](this.minLength, this.maxLength);\n if (this.minLength > 0)\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"]\n .getString(\"textMinLength\")[\"format\"](this.minLength);\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"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: false,\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: false,\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: false,\n configurable: true\n });\n return TextValidator;\n}(SurveyValidator));\n\nvar AnswerCountValidator = /** @class */ (function (_super) {\n __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 (count == 0)\n return null;\n if (this.minCount && count < this.minCount) {\n return new ValidatorResult(null, this.createCustomError(_surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"]\n .getString(\"minSelectError\")[\"format\"](this.minCount)));\n }\n if (this.maxCount && count > this.maxCount) {\n return new ValidatorResult(null, this.createCustomError(_surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"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: false,\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: false,\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 __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 || this.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: false,\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 __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 _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"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 __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: false,\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: false,\n configurable: true\n });\n Object.defineProperty(ExpressionValidator.prototype, \"isRunning\", {\n get: function () {\n return this.isRunningValue;\n },\n enumerable: false,\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, name));\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, name);\n };\n ExpressionValidator.prototype.generateError = function (res, value, name) {\n if (!res) {\n return new ValidatorResult(value, this.createCustomError(name));\n }\n return null;\n };\n ExpressionValidator.prototype.getDefaultErrorText = function (name) {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"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 _conditions__WEBPACK_IMPORTED_MODULE_4__[\"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: false,\n configurable: true\n });\n return ExpressionValidator;\n}(SurveyValidator));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_3__[\"Serializer\"].addClass(\"surveyvalidator\", [\n { name: \"text\", serializationProperty: \"locText\" },\n]);\n_jsonobject__WEBPACK_IMPORTED_MODULE_3__[\"Serializer\"].addClass(\"numericvalidator\", [\"minValue:number\", \"maxValue:number\"], function () {\n return new NumericValidator();\n}, \"surveyvalidator\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_3__[\"Serializer\"].addClass(\"textvalidator\", [\"minLength:number\", \"maxLength:number\", \"allowDigits:boolean\"], function () {\n return new TextValidator();\n}, \"surveyvalidator\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_3__[\"Serializer\"].addClass(\"answercountvalidator\", [\"minCount:number\", \"maxCount:number\"], function () {\n return new AnswerCountValidator();\n}, \"surveyvalidator\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_3__[\"Serializer\"].addClass(\"regexvalidator\", [\"regex\"], function () {\n return new RegexValidator();\n}, \"surveyvalidator\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_3__[\"Serializer\"].addClass(\"emailvalidator\", [], function () {\n return new EmailValidator();\n}, \"surveyvalidator\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_3__[\"Serializer\"].addClass(\"expressionvalidator\", [\"expression:condition\"], function () {\n return new ExpressionValidator();\n}, \"surveyvalidator\");\n\n\n/***/ }),\n\n/***/ \"./src/vue/base.ts\":\n/*!*************************!*\\\n !*** ./src/vue/base.ts ***!\n \\*************************/\n/*! exports provided: BaseVue, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"BaseVue\", function() { return BaseVue; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\nvar BaseVue = /** @class */ (function (_super) {\n __extends(BaseVue, _super);\n function BaseVue() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n BaseVue.prototype.getModel = function () {\n return null;\n };\n BaseVue.prototype.setIsRendering = function (val) {\n var model = this.getModel();\n if (!!model) {\n model.isRendering = val;\n }\n };\n BaseVue.prototype.getIsRendering = function () {\n var model = this.getModel();\n return !!model && !!model.isRendering;\n };\n BaseVue.prototype.onMounted = function () { };\n BaseVue.prototype.onUpdated = function () { };\n BaseVue.prototype.onDestroyed = function () { };\n BaseVue.prototype.onCreated = function () {\n var _this = this;\n var model = this.getModel();\n if (!model)\n return;\n model.iteratePropertiesHash(function (hash, key) {\n vue__WEBPACK_IMPORTED_MODULE_0___default.a.set(hash, key, hash[key]);\n });\n model.setPropertyValueCoreHandler = function (propertiesHash, name, val) {\n if (!propertiesHash.hasOwnProperty(name) || !_this.getIsRendering())\n vue__WEBPACK_IMPORTED_MODULE_0___default.a.set(propertiesHash, name, val);\n else\n propertiesHash[name] = val;\n };\n };\n BaseVue.prototype.created = function () {\n this.onCreated();\n };\n BaseVue.prototype.beforeMount = function () {\n this.setIsRendering(true);\n };\n BaseVue.prototype.beforeUpdate = function () {\n this.setIsRendering(true);\n };\n BaseVue.prototype.mounted = function () {\n this.setIsRendering(false);\n this.onMounted();\n };\n BaseVue.prototype.updated = function () {\n this.setIsRendering(false);\n this.onUpdated();\n };\n BaseVue.prototype.destroyed = function () {\n this.onDestroyed();\n };\n BaseVue = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], BaseVue);\n return BaseVue;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (BaseVue);\n\n\n/***/ }),\n\n/***/ \"./src/vue/boolean-checkbox.vue\":\n/*!**************************************!*\\\n !*** ./src/vue/boolean-checkbox.vue ***!\n \\**************************************/\n/*! exports provided: BooleanCheckbox, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _boolean_checkbox_vue_vue_type_template_id_5ccd340a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boolean-checkbox.vue?vue&type=template&id=5ccd340a& */ \"./src/vue/boolean-checkbox.vue?vue&type=template&id=5ccd340a&\");\n/* harmony import */ var _boolean_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./boolean-checkbox.vue?vue&type=script&lang=ts& */ \"./src/vue/boolean-checkbox.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BooleanCheckbox\", function() { return _boolean_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"BooleanCheckbox\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _boolean_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _boolean_checkbox_vue_vue_type_template_id_5ccd340a___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _boolean_checkbox_vue_vue_type_template_id_5ccd340a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/boolean-checkbox.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/boolean-checkbox.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************!*\\\n !*** ./src/vue/boolean-checkbox.vue?vue&type=script&lang=ts& ***!\n \\***************************************************************/\n/*! exports provided: default, BooleanCheckbox */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./boolean-checkbox.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/boolean-checkbox.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BooleanCheckbox\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"BooleanCheckbox\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/boolean-checkbox.vue?vue&type=template&id=5ccd340a&\":\n/*!*********************************************************************!*\\\n !*** ./src/vue/boolean-checkbox.vue?vue&type=template&id=5ccd340a& ***!\n \\*********************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_checkbox_vue_vue_type_template_id_5ccd340a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./boolean-checkbox.vue?vue&type=template&id=5ccd340a& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/boolean-checkbox.vue?vue&type=template&id=5ccd340a&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_checkbox_vue_vue_type_template_id_5ccd340a___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_checkbox_vue_vue_type_template_id_5ccd340a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/boolean-switch.vue\":\n/*!************************************!*\\\n !*** ./src/vue/boolean-switch.vue ***!\n \\************************************/\n/*! exports provided: BooleanSwitch, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _boolean_switch_vue_vue_type_template_id_70e4aebb___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boolean-switch.vue?vue&type=template&id=70e4aebb& */ \"./src/vue/boolean-switch.vue?vue&type=template&id=70e4aebb&\");\n/* harmony import */ var _boolean_switch_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./boolean-switch.vue?vue&type=script&lang=ts& */ \"./src/vue/boolean-switch.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BooleanSwitch\", function() { return _boolean_switch_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"BooleanSwitch\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _boolean_switch_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _boolean_switch_vue_vue_type_template_id_70e4aebb___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _boolean_switch_vue_vue_type_template_id_70e4aebb___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/boolean-switch.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/boolean-switch.vue?vue&type=script&lang=ts&\":\n/*!*************************************************************!*\\\n !*** ./src/vue/boolean-switch.vue?vue&type=script&lang=ts& ***!\n \\*************************************************************/\n/*! exports provided: default, BooleanSwitch */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_switch_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./boolean-switch.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/boolean-switch.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BooleanSwitch\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_switch_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"BooleanSwitch\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_switch_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/boolean-switch.vue?vue&type=template&id=70e4aebb&\":\n/*!*******************************************************************!*\\\n !*** ./src/vue/boolean-switch.vue?vue&type=template&id=70e4aebb& ***!\n \\*******************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_switch_vue_vue_type_template_id_70e4aebb___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./boolean-switch.vue?vue&type=template&id=70e4aebb& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/boolean-switch.vue?vue&type=template&id=70e4aebb&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_switch_vue_vue_type_template_id_70e4aebb___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_switch_vue_vue_type_template_id_70e4aebb___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/boolean.ts\":\n/*!****************************!*\\\n !*** ./src/vue/boolean.ts ***!\n \\****************************/\n/*! exports provided: Boolean */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Boolean\", function() { return Boolean; });\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\nvar Boolean = /** @class */ (function (_super) {\n __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: false,\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 = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]\n ], Boolean);\n return Boolean;\n}(_question__WEBPACK_IMPORTED_MODULE_1__[\"default\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/buttongroup.vue\":\n/*!*********************************!*\\\n !*** ./src/vue/buttongroup.vue ***!\n \\*********************************/\n/*! exports provided: ButtonGroup, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _buttongroup_vue_vue_type_template_id_6bdc7abb___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./buttongroup.vue?vue&type=template&id=6bdc7abb& */ \"./src/vue/buttongroup.vue?vue&type=template&id=6bdc7abb&\");\n/* harmony import */ var _buttongroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./buttongroup.vue?vue&type=script&lang=ts& */ \"./src/vue/buttongroup.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroup\", function() { return _buttongroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ButtonGroup\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _buttongroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _buttongroup_vue_vue_type_template_id_6bdc7abb___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _buttongroup_vue_vue_type_template_id_6bdc7abb___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/buttongroup.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/buttongroup.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************!*\\\n !*** ./src/vue/buttongroup.vue?vue&type=script&lang=ts& ***!\n \\**********************************************************/\n/*! exports provided: default, ButtonGroup */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./buttongroup.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/buttongroup.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroup\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ButtonGroup\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/buttongroup.vue?vue&type=template&id=6bdc7abb&\":\n/*!****************************************************************!*\\\n !*** ./src/vue/buttongroup.vue?vue&type=template&id=6bdc7abb& ***!\n \\****************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroup_vue_vue_type_template_id_6bdc7abb___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./buttongroup.vue?vue&type=template&id=6bdc7abb& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/buttongroup.vue?vue&type=template&id=6bdc7abb&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroup_vue_vue_type_template_id_6bdc7abb___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroup_vue_vue_type_template_id_6bdc7abb___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/buttongroupitem.vue\":\n/*!*************************************!*\\\n !*** ./src/vue/buttongroupitem.vue ***!\n \\*************************************/\n/*! exports provided: ButtonGroupItem, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _buttongroupitem_vue_vue_type_template_id_4bad6ace___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./buttongroupitem.vue?vue&type=template&id=4bad6ace& */ \"./src/vue/buttongroupitem.vue?vue&type=template&id=4bad6ace&\");\n/* harmony import */ var _buttongroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./buttongroupitem.vue?vue&type=script&lang=ts& */ \"./src/vue/buttongroupitem.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroupItem\", function() { return _buttongroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ButtonGroupItem\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _buttongroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _buttongroupitem_vue_vue_type_template_id_4bad6ace___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _buttongroupitem_vue_vue_type_template_id_4bad6ace___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/buttongroupitem.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/buttongroupitem.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************!*\\\n !*** ./src/vue/buttongroupitem.vue?vue&type=script&lang=ts& ***!\n \\**************************************************************/\n/*! exports provided: default, ButtonGroupItem */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./buttongroupitem.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/buttongroupitem.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroupItem\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ButtonGroupItem\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/buttongroupitem.vue?vue&type=template&id=4bad6ace&\":\n/*!********************************************************************!*\\\n !*** ./src/vue/buttongroupitem.vue?vue&type=template&id=4bad6ace& ***!\n \\********************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroupitem_vue_vue_type_template_id_4bad6ace___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./buttongroupitem.vue?vue&type=template&id=4bad6ace& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/buttongroupitem.vue?vue&type=template&id=4bad6ace&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroupitem_vue_vue_type_template_id_4bad6ace___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroupitem_vue_vue_type_template_id_4bad6ace___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/checkbox.vue\":\n/*!******************************!*\\\n !*** ./src/vue/checkbox.vue ***!\n \\******************************/\n/*! exports provided: Checkbox, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _checkbox_vue_vue_type_template_id_cad276f6___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./checkbox.vue?vue&type=template&id=cad276f6& */ \"./src/vue/checkbox.vue?vue&type=template&id=cad276f6&\");\n/* harmony import */ var _checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./checkbox.vue?vue&type=script&lang=ts& */ \"./src/vue/checkbox.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Checkbox\", function() { return _checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Checkbox\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _checkbox_vue_vue_type_template_id_cad276f6___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _checkbox_vue_vue_type_template_id_cad276f6___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/checkbox.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/checkbox.vue?vue&type=script&lang=ts&\":\n/*!*******************************************************!*\\\n !*** ./src/vue/checkbox.vue?vue&type=script&lang=ts& ***!\n \\*******************************************************/\n/*! exports provided: default, Checkbox */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./checkbox.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/checkbox.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Checkbox\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Checkbox\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/checkbox.vue?vue&type=template&id=cad276f6&\":\n/*!*************************************************************!*\\\n !*** ./src/vue/checkbox.vue?vue&type=template&id=cad276f6& ***!\n \\*************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_checkbox_vue_vue_type_template_id_cad276f6___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./checkbox.vue?vue&type=template&id=cad276f6& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/checkbox.vue?vue&type=template&id=cad276f6&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_checkbox_vue_vue_type_template_id_cad276f6___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_checkbox_vue_vue_type_template_id_cad276f6___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/checkboxitem.vue\":\n/*!**********************************!*\\\n !*** ./src/vue/checkboxitem.vue ***!\n \\**********************************/\n/*! exports provided: CheckboxItem, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _checkboxitem_vue_vue_type_template_id_c58c80d0___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./checkboxitem.vue?vue&type=template&id=c58c80d0& */ \"./src/vue/checkboxitem.vue?vue&type=template&id=c58c80d0&\");\n/* harmony import */ var _checkboxitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./checkboxitem.vue?vue&type=script&lang=ts& */ \"./src/vue/checkboxitem.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CheckboxItem\", function() { return _checkboxitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"CheckboxItem\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _checkboxitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _checkboxitem_vue_vue_type_template_id_c58c80d0___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _checkboxitem_vue_vue_type_template_id_c58c80d0___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/checkboxitem.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/checkboxitem.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************!*\\\n !*** ./src/vue/checkboxitem.vue?vue&type=script&lang=ts& ***!\n \\***********************************************************/\n/*! exports provided: default, CheckboxItem */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_checkboxitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./checkboxitem.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/checkboxitem.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CheckboxItem\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_checkboxitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"CheckboxItem\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_checkboxitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/checkboxitem.vue?vue&type=template&id=c58c80d0&\":\n/*!*****************************************************************!*\\\n !*** ./src/vue/checkboxitem.vue?vue&type=template&id=c58c80d0& ***!\n \\*****************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_checkboxitem_vue_vue_type_template_id_c58c80d0___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./checkboxitem.vue?vue&type=template&id=c58c80d0& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/checkboxitem.vue?vue&type=template&id=c58c80d0&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_checkboxitem_vue_vue_type_template_id_c58c80d0___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_checkboxitem_vue_vue_type_template_id_c58c80d0___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/comment.vue\":\n/*!*****************************!*\\\n !*** ./src/vue/comment.vue ***!\n \\*****************************/\n/*! exports provided: Comment, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _comment_vue_vue_type_template_id_099c2c8d___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./comment.vue?vue&type=template&id=099c2c8d& */ \"./src/vue/comment.vue?vue&type=template&id=099c2c8d&\");\n/* harmony import */ var _comment_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./comment.vue?vue&type=script&lang=ts& */ \"./src/vue/comment.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Comment\", function() { return _comment_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Comment\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _comment_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _comment_vue_vue_type_template_id_099c2c8d___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _comment_vue_vue_type_template_id_099c2c8d___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/comment.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/comment.vue?vue&type=script&lang=ts&\":\n/*!******************************************************!*\\\n !*** ./src/vue/comment.vue?vue&type=script&lang=ts& ***!\n \\******************************************************/\n/*! exports provided: default, Comment */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_comment_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./comment.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/comment.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Comment\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_comment_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Comment\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_comment_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/comment.vue?vue&type=template&id=099c2c8d&\":\n/*!************************************************************!*\\\n !*** ./src/vue/comment.vue?vue&type=template&id=099c2c8d& ***!\n \\************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_comment_vue_vue_type_template_id_099c2c8d___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./comment.vue?vue&type=template&id=099c2c8d& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/comment.vue?vue&type=template&id=099c2c8d&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_comment_vue_vue_type_template_id_099c2c8d___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_comment_vue_vue_type_template_id_099c2c8d___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar-item-dropdown.vue\":\n/*!********************************************************************!*\\\n !*** ./src/vue/components/action-bar/action-bar-item-dropdown.vue ***!\n \\********************************************************************/\n/*! exports provided: ActionBarItemDropdownViewModel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _action_bar_item_dropdown_vue_vue_type_template_id_4ca4f276___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./action-bar-item-dropdown.vue?vue&type=template&id=4ca4f276& */ \"./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=template&id=4ca4f276&\");\n/* harmony import */ var _action_bar_item_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./action-bar-item-dropdown.vue?vue&type=script&lang=ts& */ \"./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarItemDropdownViewModel\", function() { return _action_bar_item_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ActionBarItemDropdownViewModel\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _action_bar_item_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _action_bar_item_dropdown_vue_vue_type_template_id_4ca4f276___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _action_bar_item_dropdown_vue_vue_type_template_id_4ca4f276___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/action-bar/action-bar-item-dropdown.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************************************************!*\\\n !*** ./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=script&lang=ts& ***!\n \\*********************************************************************************************/\n/*! exports provided: default, ActionBarItemDropdownViewModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./action-bar-item-dropdown.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarItemDropdownViewModel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ActionBarItemDropdownViewModel\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=template&id=4ca4f276&\":\n/*!***************************************************************************************************!*\\\n !*** ./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=template&id=4ca4f276& ***!\n \\***************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_dropdown_vue_vue_type_template_id_4ca4f276___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./action-bar-item-dropdown.vue?vue&type=template&id=4ca4f276& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=template&id=4ca4f276&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_dropdown_vue_vue_type_template_id_4ca4f276___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_dropdown_vue_vue_type_template_id_4ca4f276___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar-item.vue\":\n/*!***********************************************************!*\\\n !*** ./src/vue/components/action-bar/action-bar-item.vue ***!\n \\***********************************************************/\n/*! exports provided: ActionBarItemViewModel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _action_bar_item_vue_vue_type_template_id_40a056f8___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./action-bar-item.vue?vue&type=template&id=40a056f8& */ \"./src/vue/components/action-bar/action-bar-item.vue?vue&type=template&id=40a056f8&\");\n/* harmony import */ var _action_bar_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./action-bar-item.vue?vue&type=script&lang=ts& */ \"./src/vue/components/action-bar/action-bar-item.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarItemViewModel\", function() { return _action_bar_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ActionBarItemViewModel\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _action_bar_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _action_bar_item_vue_vue_type_template_id_40a056f8___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _action_bar_item_vue_vue_type_template_id_40a056f8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/action-bar/action-bar-item.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar-item.vue?vue&type=script&lang=ts&\":\n/*!************************************************************************************!*\\\n !*** ./src/vue/components/action-bar/action-bar-item.vue?vue&type=script&lang=ts& ***!\n \\************************************************************************************/\n/*! exports provided: default, ActionBarItemViewModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./action-bar-item.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-item.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarItemViewModel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ActionBarItemViewModel\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar-item.vue?vue&type=template&id=40a056f8&\":\n/*!******************************************************************************************!*\\\n !*** ./src/vue/components/action-bar/action-bar-item.vue?vue&type=template&id=40a056f8& ***!\n \\******************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_vue_vue_type_template_id_40a056f8___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./action-bar-item.vue?vue&type=template&id=40a056f8& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-item.vue?vue&type=template&id=40a056f8&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_vue_vue_type_template_id_40a056f8___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_vue_vue_type_template_id_40a056f8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar-separator.vue\":\n/*!****************************************************************!*\\\n !*** ./src/vue/components/action-bar/action-bar-separator.vue ***!\n \\****************************************************************/\n/*! exports provided: ActionBarSeparatorViewModel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _action_bar_separator_vue_vue_type_template_id_1aab6850___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./action-bar-separator.vue?vue&type=template&id=1aab6850& */ \"./src/vue/components/action-bar/action-bar-separator.vue?vue&type=template&id=1aab6850&\");\n/* harmony import */ var _action_bar_separator_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./action-bar-separator.vue?vue&type=script&lang=ts& */ \"./src/vue/components/action-bar/action-bar-separator.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarSeparatorViewModel\", function() { return _action_bar_separator_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ActionBarSeparatorViewModel\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _action_bar_separator_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _action_bar_separator_vue_vue_type_template_id_1aab6850___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _action_bar_separator_vue_vue_type_template_id_1aab6850___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/action-bar/action-bar-separator.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar-separator.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************************************************!*\\\n !*** ./src/vue/components/action-bar/action-bar-separator.vue?vue&type=script&lang=ts& ***!\n \\*****************************************************************************************/\n/*! exports provided: default, ActionBarSeparatorViewModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_separator_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./action-bar-separator.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-separator.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarSeparatorViewModel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_separator_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ActionBarSeparatorViewModel\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_separator_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar-separator.vue?vue&type=template&id=1aab6850&\":\n/*!***********************************************************************************************!*\\\n !*** ./src/vue/components/action-bar/action-bar-separator.vue?vue&type=template&id=1aab6850& ***!\n \\***********************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_separator_vue_vue_type_template_id_1aab6850___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./action-bar-separator.vue?vue&type=template&id=1aab6850& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-separator.vue?vue&type=template&id=1aab6850&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_separator_vue_vue_type_template_id_1aab6850___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_separator_vue_vue_type_template_id_1aab6850___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar.vue\":\n/*!******************************************************!*\\\n !*** ./src/vue/components/action-bar/action-bar.vue ***!\n \\******************************************************/\n/*! exports provided: ActionViewModel, ActionBarItemViewModel, ActionBarItemDropdownViewModel, ActionBarSeparatorViewModel, ActionBarViewModel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _action_bar_vue_vue_type_template_id_313bf210___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./action-bar.vue?vue&type=template&id=313bf210& */ \"./src/vue/components/action-bar/action-bar.vue?vue&type=template&id=313bf210&\");\n/* harmony import */ var _action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./action-bar.vue?vue&type=script&lang=ts& */ \"./src/vue/components/action-bar/action-bar.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionViewModel\", function() { return _action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ActionViewModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarItemViewModel\", function() { return _action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ActionBarItemViewModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarItemDropdownViewModel\", function() { return _action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ActionBarItemDropdownViewModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarSeparatorViewModel\", function() { return _action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ActionBarSeparatorViewModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarViewModel\", function() { return _action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ActionBarViewModel\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _action_bar_vue_vue_type_template_id_313bf210___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _action_bar_vue_vue_type_template_id_313bf210___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/action-bar/action-bar.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar.vue?vue&type=script&lang=ts&\":\n/*!*******************************************************************************!*\\\n !*** ./src/vue/components/action-bar/action-bar.vue?vue&type=script&lang=ts& ***!\n \\*******************************************************************************/\n/*! exports provided: default, ActionViewModel, ActionBarItemViewModel, ActionBarItemDropdownViewModel, ActionBarSeparatorViewModel, ActionBarViewModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./action-bar.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionViewModel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ActionViewModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarItemViewModel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ActionBarItemViewModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarItemDropdownViewModel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ActionBarItemDropdownViewModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarSeparatorViewModel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ActionBarSeparatorViewModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarViewModel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ActionBarViewModel\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar.vue?vue&type=template&id=313bf210&\":\n/*!*************************************************************************************!*\\\n !*** ./src/vue/components/action-bar/action-bar.vue?vue&type=template&id=313bf210& ***!\n \\*************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_template_id_313bf210___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./action-bar.vue?vue&type=template&id=313bf210& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar.vue?vue&type=template&id=313bf210&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_template_id_313bf210___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_template_id_313bf210___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action.vue\":\n/*!**************************************************!*\\\n !*** ./src/vue/components/action-bar/action.vue ***!\n \\**************************************************/\n/*! exports provided: ActionViewModel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _action_vue_vue_type_template_id_2fe54632___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./action.vue?vue&type=template&id=2fe54632& */ \"./src/vue/components/action-bar/action.vue?vue&type=template&id=2fe54632&\");\n/* harmony import */ var _action_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./action.vue?vue&type=script&lang=ts& */ \"./src/vue/components/action-bar/action.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionViewModel\", function() { return _action_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ActionViewModel\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _action_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _action_vue_vue_type_template_id_2fe54632___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _action_vue_vue_type_template_id_2fe54632___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/action-bar/action.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************************!*\\\n !*** ./src/vue/components/action-bar/action.vue?vue&type=script&lang=ts& ***!\n \\***************************************************************************/\n/*! exports provided: default, ActionViewModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./action.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionViewModel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ActionViewModel\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action.vue?vue&type=template&id=2fe54632&\":\n/*!*********************************************************************************!*\\\n !*** ./src/vue/components/action-bar/action.vue?vue&type=template&id=2fe54632& ***!\n \\*********************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_vue_vue_type_template_id_2fe54632___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./action.vue?vue&type=template&id=2fe54632& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action.vue?vue&type=template&id=2fe54632&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_vue_vue_type_template_id_2fe54632___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_vue_vue_type_template_id_2fe54632___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/default-title/default-title.vue\":\n/*!************************************************************!*\\\n !*** ./src/vue/components/default-title/default-title.vue ***!\n \\************************************************************/\n/*! exports provided: DefaultTitle, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _default_title_vue_vue_type_template_id_7f6117dc___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./default-title.vue?vue&type=template&id=7f6117dc& */ \"./src/vue/components/default-title/default-title.vue?vue&type=template&id=7f6117dc&\");\n/* harmony import */ var _default_title_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./default-title.vue?vue&type=script&lang=ts& */ \"./src/vue/components/default-title/default-title.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DefaultTitle\", function() { return _default_title_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"DefaultTitle\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _default_title_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _default_title_vue_vue_type_template_id_7f6117dc___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _default_title_vue_vue_type_template_id_7f6117dc___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/default-title/default-title.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/default-title/default-title.vue?vue&type=script&lang=ts&\":\n/*!*************************************************************************************!*\\\n !*** ./src/vue/components/default-title/default-title.vue?vue&type=script&lang=ts& ***!\n \\*************************************************************************************/\n/*! exports provided: default, DefaultTitle */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_default_title_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./default-title.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/default-title/default-title.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DefaultTitle\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_default_title_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"DefaultTitle\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_default_title_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/default-title/default-title.vue?vue&type=template&id=7f6117dc&\":\n/*!*******************************************************************************************!*\\\n !*** ./src/vue/components/default-title/default-title.vue?vue&type=template&id=7f6117dc& ***!\n \\*******************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_default_title_vue_vue_type_template_id_7f6117dc___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./default-title.vue?vue&type=template&id=7f6117dc& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/default-title/default-title.vue?vue&type=template&id=7f6117dc&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_default_title_vue_vue_type_template_id_7f6117dc___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_default_title_vue_vue_type_template_id_7f6117dc___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/list/list.vue\":\n/*!******************************************!*\\\n !*** ./src/vue/components/list/list.vue ***!\n \\******************************************/\n/*! exports provided: List, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _list_vue_vue_type_template_id_cc17a010___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./list.vue?vue&type=template&id=cc17a010& */ \"./src/vue/components/list/list.vue?vue&type=template&id=cc17a010&\");\n/* harmony import */ var _list_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./list.vue?vue&type=script&lang=ts& */ \"./src/vue/components/list/list.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"List\", function() { return _list_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"List\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _list_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _list_vue_vue_type_template_id_cc17a010___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _list_vue_vue_type_template_id_cc17a010___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/list/list.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/list/list.vue?vue&type=script&lang=ts&\":\n/*!*******************************************************************!*\\\n !*** ./src/vue/components/list/list.vue?vue&type=script&lang=ts& ***!\n \\*******************************************************************/\n/*! exports provided: default, List */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_list_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./list.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/list/list.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"List\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_list_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"List\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_list_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/list/list.vue?vue&type=template&id=cc17a010&\":\n/*!*************************************************************************!*\\\n !*** ./src/vue/components/list/list.vue?vue&type=template&id=cc17a010& ***!\n \\*************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_list_vue_vue_type_template_id_cc17a010___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./list.vue?vue&type=template&id=cc17a010& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/list/list.vue?vue&type=template&id=cc17a010&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_list_vue_vue_type_template_id_cc17a010___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_list_vue_vue_type_template_id_cc17a010___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/matrix-actions/detail-button/detail-button.vue\":\n/*!***************************************************************************!*\\\n !*** ./src/vue/components/matrix-actions/detail-button/detail-button.vue ***!\n \\***************************************************************************/\n/*! exports provided: SurveyQuestionMatrixDetailButton, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _detail_button_vue_vue_type_template_id_5b4e69b6___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./detail-button.vue?vue&type=template&id=5b4e69b6& */ \"./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=template&id=5b4e69b6&\");\n/* harmony import */ var _detail_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./detail-button.vue?vue&type=script&lang=ts& */ \"./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyQuestionMatrixDetailButton\", function() { return _detail_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"SurveyQuestionMatrixDetailButton\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _detail_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _detail_button_vue_vue_type_template_id_5b4e69b6___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _detail_button_vue_vue_type_template_id_5b4e69b6___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/matrix-actions/detail-button/detail-button.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************!*\\\n !*** ./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=script&lang=ts& ***!\n \\****************************************************************************************************/\n/*! exports provided: default, SurveyQuestionMatrixDetailButton */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_detail_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/ts-loader??ref--0!../../../../../node_modules/vue-loader/lib??vue-loader-options!./detail-button.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyQuestionMatrixDetailButton\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_detail_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"SurveyQuestionMatrixDetailButton\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_detail_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=template&id=5b4e69b6&\":\n/*!**********************************************************************************************************!*\\\n !*** ./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=template&id=5b4e69b6& ***!\n \\**********************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_detail_button_vue_vue_type_template_id_5b4e69b6___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../../node_modules/vue-loader/lib??vue-loader-options!./detail-button.vue?vue&type=template&id=5b4e69b6& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=template&id=5b4e69b6&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_detail_button_vue_vue_type_template_id_5b4e69b6___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_detail_button_vue_vue_type_template_id_5b4e69b6___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue\":\n/*!*****************************************************************************!*\\\n !*** ./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue ***!\n \\*****************************************************************************/\n/*! exports provided: SurveyQuestionMatrixDynamicDragDropIcon, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _drag_drop_icon_vue_vue_type_template_id_4f55d298___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./drag-drop-icon.vue?vue&type=template&id=4f55d298& */ \"./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=template&id=4f55d298&\");\n/* harmony import */ var _drag_drop_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./drag-drop-icon.vue?vue&type=script&lang=ts& */ \"./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyQuestionMatrixDynamicDragDropIcon\", function() { return _drag_drop_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"SurveyQuestionMatrixDynamicDragDropIcon\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _drag_drop_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _drag_drop_icon_vue_vue_type_template_id_4f55d298___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _drag_drop_icon_vue_vue_type_template_id_4f55d298___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************************************************!*\\\n !*** ./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=script&lang=ts& ***!\n \\******************************************************************************************************/\n/*! exports provided: default, SurveyQuestionMatrixDynamicDragDropIcon */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_drag_drop_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/ts-loader??ref--0!../../../../../node_modules/vue-loader/lib??vue-loader-options!./drag-drop-icon.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyQuestionMatrixDynamicDragDropIcon\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_drag_drop_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"SurveyQuestionMatrixDynamicDragDropIcon\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_drag_drop_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=template&id=4f55d298&\":\n/*!************************************************************************************************************!*\\\n !*** ./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=template&id=4f55d298& ***!\n \\************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_drag_drop_icon_vue_vue_type_template_id_4f55d298___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../../node_modules/vue-loader/lib??vue-loader-options!./drag-drop-icon.vue?vue&type=template&id=4f55d298& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=template&id=4f55d298&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_drag_drop_icon_vue_vue_type_template_id_4f55d298___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_drag_drop_icon_vue_vue_type_template_id_4f55d298___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/matrix-actions/remove-button/remove-button.vue\":\n/*!***************************************************************************!*\\\n !*** ./src/vue/components/matrix-actions/remove-button/remove-button.vue ***!\n \\***************************************************************************/\n/*! exports provided: SurveyQuestionMatrixDynamicRemoveButton, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _remove_button_vue_vue_type_template_id_c8a7aa60___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./remove-button.vue?vue&type=template&id=c8a7aa60& */ \"./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=template&id=c8a7aa60&\");\n/* harmony import */ var _remove_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./remove-button.vue?vue&type=script&lang=ts& */ \"./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyQuestionMatrixDynamicRemoveButton\", function() { return _remove_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"SurveyQuestionMatrixDynamicRemoveButton\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _remove_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _remove_button_vue_vue_type_template_id_c8a7aa60___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _remove_button_vue_vue_type_template_id_c8a7aa60___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/matrix-actions/remove-button/remove-button.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************!*\\\n !*** ./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=script&lang=ts& ***!\n \\****************************************************************************************************/\n/*! exports provided: default, SurveyQuestionMatrixDynamicRemoveButton */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_remove_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/ts-loader??ref--0!../../../../../node_modules/vue-loader/lib??vue-loader-options!./remove-button.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyQuestionMatrixDynamicRemoveButton\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_remove_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"SurveyQuestionMatrixDynamicRemoveButton\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_remove_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=template&id=c8a7aa60&\":\n/*!**********************************************************************************************************!*\\\n !*** ./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=template&id=c8a7aa60& ***!\n \\**********************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_remove_button_vue_vue_type_template_id_c8a7aa60___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../../node_modules/vue-loader/lib??vue-loader-options!./remove-button.vue?vue&type=template&id=c8a7aa60& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=template&id=c8a7aa60&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_remove_button_vue_vue_type_template_id_c8a7aa60___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_remove_button_vue_vue_type_template_id_c8a7aa60___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/popup/popup-container.vue\":\n/*!******************************************************!*\\\n !*** ./src/vue/components/popup/popup-container.vue ***!\n \\******************************************************/\n/*! exports provided: PopupContainer, showModal, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _popup_container_vue_vue_type_template_id_c18dfd74___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./popup-container.vue?vue&type=template&id=c18dfd74& */ \"./src/vue/components/popup/popup-container.vue?vue&type=template&id=c18dfd74&\");\n/* harmony import */ var _popup_container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./popup-container.vue?vue&type=script&lang=ts& */ \"./src/vue/components/popup/popup-container.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PopupContainer\", function() { return _popup_container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"PopupContainer\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"showModal\", function() { return _popup_container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"showModal\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _popup_container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _popup_container_vue_vue_type_template_id_c18dfd74___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _popup_container_vue_vue_type_template_id_c18dfd74___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/popup/popup-container.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/popup/popup-container.vue?vue&type=script&lang=ts&\":\n/*!*******************************************************************************!*\\\n !*** ./src/vue/components/popup/popup-container.vue?vue&type=script&lang=ts& ***!\n \\*******************************************************************************/\n/*! exports provided: default, PopupContainer, showModal */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./popup-container.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/popup/popup-container.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PopupContainer\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"PopupContainer\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"showModal\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"showModal\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/popup/popup-container.vue?vue&type=template&id=c18dfd74&\":\n/*!*************************************************************************************!*\\\n !*** ./src/vue/components/popup/popup-container.vue?vue&type=template&id=c18dfd74& ***!\n \\*************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_container_vue_vue_type_template_id_c18dfd74___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./popup-container.vue?vue&type=template&id=c18dfd74& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/popup/popup-container.vue?vue&type=template&id=c18dfd74&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_container_vue_vue_type_template_id_c18dfd74___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_container_vue_vue_type_template_id_c18dfd74___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/popup/popup.vue\":\n/*!********************************************!*\\\n !*** ./src/vue/components/popup/popup.vue ***!\n \\********************************************/\n/*! exports provided: Popup, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _popup_vue_vue_type_template_id_ef11265c___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./popup.vue?vue&type=template&id=ef11265c& */ \"./src/vue/components/popup/popup.vue?vue&type=template&id=ef11265c&\");\n/* harmony import */ var _popup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./popup.vue?vue&type=script&lang=ts& */ \"./src/vue/components/popup/popup.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Popup\", function() { return _popup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Popup\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _popup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _popup_vue_vue_type_template_id_ef11265c___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _popup_vue_vue_type_template_id_ef11265c___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/popup/popup.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/popup/popup.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************************!*\\\n !*** ./src/vue/components/popup/popup.vue?vue&type=script&lang=ts& ***!\n \\*********************************************************************/\n/*! exports provided: default, Popup */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./popup.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/popup/popup.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Popup\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Popup\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/popup/popup.vue?vue&type=template&id=ef11265c&\":\n/*!***************************************************************************!*\\\n !*** ./src/vue/components/popup/popup.vue?vue&type=template&id=ef11265c& ***!\n \\***************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_vue_vue_type_template_id_ef11265c___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./popup.vue?vue&type=template&id=ef11265c& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/popup/popup.vue?vue&type=template&id=ef11265c&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_vue_vue_type_template_id_ef11265c___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_vue_vue_type_template_id_ef11265c___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/svg-icon/svg-icon.vue\":\n/*!**************************************************!*\\\n !*** ./src/vue/components/svg-icon/svg-icon.vue ***!\n \\**************************************************/\n/*! exports provided: SvgIcon, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _svg_icon_vue_vue_type_template_id_684776f8___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./svg-icon.vue?vue&type=template&id=684776f8& */ \"./src/vue/components/svg-icon/svg-icon.vue?vue&type=template&id=684776f8&\");\n/* harmony import */ var _svg_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./svg-icon.vue?vue&type=script&lang=ts& */ \"./src/vue/components/svg-icon/svg-icon.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SvgIcon\", function() { return _svg_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"SvgIcon\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _svg_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _svg_icon_vue_vue_type_template_id_684776f8___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _svg_icon_vue_vue_type_template_id_684776f8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/svg-icon/svg-icon.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/svg-icon/svg-icon.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************************!*\\\n !*** ./src/vue/components/svg-icon/svg-icon.vue?vue&type=script&lang=ts& ***!\n \\***************************************************************************/\n/*! exports provided: default, SvgIcon */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_svg_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./svg-icon.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/svg-icon/svg-icon.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SvgIcon\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_svg_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"SvgIcon\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_svg_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/svg-icon/svg-icon.vue?vue&type=template&id=684776f8&\":\n/*!*********************************************************************************!*\\\n !*** ./src/vue/components/svg-icon/svg-icon.vue?vue&type=template&id=684776f8& ***!\n \\*********************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_svg_icon_vue_vue_type_template_id_684776f8___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./svg-icon.vue?vue&type=template&id=684776f8& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/svg-icon/svg-icon.vue?vue&type=template&id=684776f8&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_svg_icon_vue_vue_type_template_id_684776f8___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_svg_icon_vue_vue_type_template_id_684776f8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/title-actions/title-actions.vue\":\n/*!************************************************************!*\\\n !*** ./src/vue/components/title-actions/title-actions.vue ***!\n \\************************************************************/\n/*! exports provided: TitleActions, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _title_actions_vue_vue_type_template_id_b72886ec___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./title-actions.vue?vue&type=template&id=b72886ec& */ \"./src/vue/components/title-actions/title-actions.vue?vue&type=template&id=b72886ec&\");\n/* harmony import */ var _title_actions_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./title-actions.vue?vue&type=script&lang=ts& */ \"./src/vue/components/title-actions/title-actions.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TitleActions\", function() { return _title_actions_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"TitleActions\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _title_actions_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _title_actions_vue_vue_type_template_id_b72886ec___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _title_actions_vue_vue_type_template_id_b72886ec___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/title-actions/title-actions.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/title-actions/title-actions.vue?vue&type=script&lang=ts&\":\n/*!*************************************************************************************!*\\\n !*** ./src/vue/components/title-actions/title-actions.vue?vue&type=script&lang=ts& ***!\n \\*************************************************************************************/\n/*! exports provided: default, TitleActions */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_title_actions_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./title-actions.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/title-actions/title-actions.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TitleActions\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_title_actions_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"TitleActions\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_title_actions_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/title-actions/title-actions.vue?vue&type=template&id=b72886ec&\":\n/*!*******************************************************************************************!*\\\n !*** ./src/vue/components/title-actions/title-actions.vue?vue&type=template&id=b72886ec& ***!\n \\*******************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_title_actions_vue_vue_type_template_id_b72886ec___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./title-actions.vue?vue&type=template&id=b72886ec& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/title-actions/title-actions.vue?vue&type=template&id=b72886ec&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_title_actions_vue_vue_type_template_id_b72886ec___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_title_actions_vue_vue_type_template_id_b72886ec___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/composite.vue\":\n/*!*******************************!*\\\n !*** ./src/vue/composite.vue ***!\n \\*******************************/\n/*! exports provided: Composite, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _composite_vue_vue_type_template_id_1a9e2196___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./composite.vue?vue&type=template&id=1a9e2196& */ \"./src/vue/composite.vue?vue&type=template&id=1a9e2196&\");\n/* harmony import */ var _composite_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./composite.vue?vue&type=script&lang=ts& */ \"./src/vue/composite.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Composite\", function() { return _composite_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Composite\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _composite_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _composite_vue_vue_type_template_id_1a9e2196___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _composite_vue_vue_type_template_id_1a9e2196___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/composite.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/composite.vue?vue&type=script&lang=ts&\":\n/*!********************************************************!*\\\n !*** ./src/vue/composite.vue?vue&type=script&lang=ts& ***!\n \\********************************************************/\n/*! exports provided: default, Composite */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_composite_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./composite.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/composite.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Composite\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_composite_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Composite\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_composite_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/composite.vue?vue&type=template&id=1a9e2196&\":\n/*!**************************************************************!*\\\n !*** ./src/vue/composite.vue?vue&type=template&id=1a9e2196& ***!\n \\**************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_composite_vue_vue_type_template_id_1a9e2196___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./composite.vue?vue&type=template&id=1a9e2196& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/composite.vue?vue&type=template&id=1a9e2196&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_composite_vue_vue_type_template_id_1a9e2196___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_composite_vue_vue_type_template_id_1a9e2196___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/custom.vue\":\n/*!****************************!*\\\n !*** ./src/vue/custom.vue ***!\n \\****************************/\n/*! exports provided: Custom, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _custom_vue_vue_type_template_id_d4aae09a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./custom.vue?vue&type=template&id=d4aae09a& */ \"./src/vue/custom.vue?vue&type=template&id=d4aae09a&\");\n/* harmony import */ var _custom_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./custom.vue?vue&type=script&lang=ts& */ \"./src/vue/custom.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Custom\", function() { return _custom_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Custom\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _custom_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _custom_vue_vue_type_template_id_d4aae09a___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _custom_vue_vue_type_template_id_d4aae09a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/custom.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/custom.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************!*\\\n !*** ./src/vue/custom.vue?vue&type=script&lang=ts& ***!\n \\*****************************************************/\n/*! exports provided: default, Custom */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_custom_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./custom.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/custom.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Custom\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_custom_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Custom\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_custom_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/custom.vue?vue&type=template&id=d4aae09a&\":\n/*!***********************************************************!*\\\n !*** ./src/vue/custom.vue?vue&type=template&id=d4aae09a& ***!\n \\***********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_custom_vue_vue_type_template_id_d4aae09a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./custom.vue?vue&type=template&id=d4aae09a& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/custom.vue?vue&type=template&id=d4aae09a&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_custom_vue_vue_type_template_id_d4aae09a___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_custom_vue_vue_type_template_id_d4aae09a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/customwidget.vue\":\n/*!**********************************!*\\\n !*** ./src/vue/customwidget.vue ***!\n \\**********************************/\n/*! exports provided: CustomWidget, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _customwidget_vue_vue_type_template_id_1e61a7b7___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./customwidget.vue?vue&type=template&id=1e61a7b7& */ \"./src/vue/customwidget.vue?vue&type=template&id=1e61a7b7&\");\n/* harmony import */ var _customwidget_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./customwidget.vue?vue&type=script&lang=ts& */ \"./src/vue/customwidget.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CustomWidget\", function() { return _customwidget_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"CustomWidget\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _customwidget_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _customwidget_vue_vue_type_template_id_1e61a7b7___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _customwidget_vue_vue_type_template_id_1e61a7b7___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/customwidget.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/customwidget.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************!*\\\n !*** ./src/vue/customwidget.vue?vue&type=script&lang=ts& ***!\n \\***********************************************************/\n/*! exports provided: default, CustomWidget */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_customwidget_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./customwidget.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/customwidget.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CustomWidget\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_customwidget_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"CustomWidget\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_customwidget_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/customwidget.vue?vue&type=template&id=1e61a7b7&\":\n/*!*****************************************************************!*\\\n !*** ./src/vue/customwidget.vue?vue&type=template&id=1e61a7b7& ***!\n \\*****************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_customwidget_vue_vue_type_template_id_1e61a7b7___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./customwidget.vue?vue&type=template&id=1e61a7b7& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/customwidget.vue?vue&type=template&id=1e61a7b7&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_customwidget_vue_vue_type_template_id_1e61a7b7___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_customwidget_vue_vue_type_template_id_1e61a7b7___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/dropdown.vue\":\n/*!******************************!*\\\n !*** ./src/vue/dropdown.vue ***!\n \\******************************/\n/*! exports provided: Dropdown, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _dropdown_vue_vue_type_template_id_6b3215d3___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dropdown.vue?vue&type=template&id=6b3215d3& */ \"./src/vue/dropdown.vue?vue&type=template&id=6b3215d3&\");\n/* harmony import */ var _dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dropdown.vue?vue&type=script&lang=ts& */ \"./src/vue/dropdown.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Dropdown\", function() { return _dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Dropdown\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _dropdown_vue_vue_type_template_id_6b3215d3___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _dropdown_vue_vue_type_template_id_6b3215d3___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/dropdown.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/dropdown.vue?vue&type=script&lang=ts&\":\n/*!*******************************************************!*\\\n !*** ./src/vue/dropdown.vue?vue&type=script&lang=ts& ***!\n \\*******************************************************/\n/*! exports provided: default, Dropdown */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./dropdown.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/dropdown.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Dropdown\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Dropdown\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/dropdown.vue?vue&type=template&id=6b3215d3&\":\n/*!*************************************************************!*\\\n !*** ./src/vue/dropdown.vue?vue&type=template&id=6b3215d3& ***!\n \\*************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_template_id_6b3215d3___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./dropdown.vue?vue&type=template&id=6b3215d3& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/dropdown.vue?vue&type=template&id=6b3215d3&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_template_id_6b3215d3___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_template_id_6b3215d3___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/element.vue\":\n/*!*****************************!*\\\n !*** ./src/vue/element.vue ***!\n \\*****************************/\n/*! exports provided: SurveyElementVue, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _element_vue_vue_type_template_id_973472ac___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element.vue?vue&type=template&id=973472ac& */ \"./src/vue/element.vue?vue&type=template&id=973472ac&\");\n/* harmony import */ var _element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./element.vue?vue&type=script&lang=ts& */ \"./src/vue/element.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyElementVue\", function() { return _element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"SurveyElementVue\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _element_vue_vue_type_template_id_973472ac___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _element_vue_vue_type_template_id_973472ac___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/element.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/element.vue?vue&type=script&lang=ts&\":\n/*!******************************************************!*\\\n !*** ./src/vue/element.vue?vue&type=script&lang=ts& ***!\n \\******************************************************/\n/*! exports provided: default, SurveyElementVue */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./element.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/element.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyElementVue\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"SurveyElementVue\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/element.vue?vue&type=template&id=973472ac&\":\n/*!************************************************************!*\\\n !*** ./src/vue/element.vue?vue&type=template&id=973472ac& ***!\n \\************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_element_vue_vue_type_template_id_973472ac___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./element.vue?vue&type=template&id=973472ac& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/element.vue?vue&type=template&id=973472ac&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_element_vue_vue_type_template_id_973472ac___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_element_vue_vue_type_template_id_973472ac___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/elementheader.vue\":\n/*!***********************************!*\\\n !*** ./src/vue/elementheader.vue ***!\n \\***********************************/\n/*! exports provided: ElementHeader, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _elementheader_vue_vue_type_template_id_27adc537___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./elementheader.vue?vue&type=template&id=27adc537& */ \"./src/vue/elementheader.vue?vue&type=template&id=27adc537&\");\n/* harmony import */ var _elementheader_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./elementheader.vue?vue&type=script&lang=ts& */ \"./src/vue/elementheader.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ElementHeader\", function() { return _elementheader_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ElementHeader\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _elementheader_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _elementheader_vue_vue_type_template_id_27adc537___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _elementheader_vue_vue_type_template_id_27adc537___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/elementheader.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/elementheader.vue?vue&type=script&lang=ts&\":\n/*!************************************************************!*\\\n !*** ./src/vue/elementheader.vue?vue&type=script&lang=ts& ***!\n \\************************************************************/\n/*! exports provided: default, ElementHeader */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_elementheader_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./elementheader.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/elementheader.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ElementHeader\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_elementheader_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ElementHeader\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_elementheader_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/elementheader.vue?vue&type=template&id=27adc537&\":\n/*!******************************************************************!*\\\n !*** ./src/vue/elementheader.vue?vue&type=template&id=27adc537& ***!\n \\******************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_elementheader_vue_vue_type_template_id_27adc537___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./elementheader.vue?vue&type=template&id=27adc537& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/elementheader.vue?vue&type=template&id=27adc537&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_elementheader_vue_vue_type_template_id_27adc537___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_elementheader_vue_vue_type_template_id_27adc537___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/empty.vue\":\n/*!***************************!*\\\n !*** ./src/vue/empty.vue ***!\n \\***************************/\n/*! exports provided: Empty, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _empty_vue_vue_type_template_id_05052c0a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./empty.vue?vue&type=template&id=05052c0a& */ \"./src/vue/empty.vue?vue&type=template&id=05052c0a&\");\n/* harmony import */ var _empty_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./empty.vue?vue&type=script&lang=ts& */ \"./src/vue/empty.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Empty\", function() { return _empty_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Empty\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _empty_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _empty_vue_vue_type_template_id_05052c0a___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _empty_vue_vue_type_template_id_05052c0a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/empty.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/empty.vue?vue&type=script&lang=ts&\":\n/*!****************************************************!*\\\n !*** ./src/vue/empty.vue?vue&type=script&lang=ts& ***!\n \\****************************************************/\n/*! exports provided: default, Empty */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./empty.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/empty.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Empty\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Empty\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/empty.vue?vue&type=template&id=05052c0a&\":\n/*!**********************************************************!*\\\n !*** ./src/vue/empty.vue?vue&type=template&id=05052c0a& ***!\n \\**********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_vue_vue_type_template_id_05052c0a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./empty.vue?vue&type=template&id=05052c0a& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/empty.vue?vue&type=template&id=05052c0a&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_vue_vue_type_template_id_05052c0a___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_vue_vue_type_template_id_05052c0a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/errors.vue\":\n/*!****************************!*\\\n !*** ./src/vue/errors.vue ***!\n \\****************************/\n/*! exports provided: Errors, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _errors_vue_vue_type_template_id_5682e6ad___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./errors.vue?vue&type=template&id=5682e6ad& */ \"./src/vue/errors.vue?vue&type=template&id=5682e6ad&\");\n/* harmony import */ var _errors_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./errors.vue?vue&type=script&lang=ts& */ \"./src/vue/errors.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Errors\", function() { return _errors_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Errors\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _errors_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _errors_vue_vue_type_template_id_5682e6ad___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _errors_vue_vue_type_template_id_5682e6ad___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/errors.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/errors.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************!*\\\n !*** ./src/vue/errors.vue?vue&type=script&lang=ts& ***!\n \\*****************************************************/\n/*! exports provided: default, Errors */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_errors_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./errors.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/errors.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Errors\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_errors_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Errors\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_errors_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/errors.vue?vue&type=template&id=5682e6ad&\":\n/*!***********************************************************!*\\\n !*** ./src/vue/errors.vue?vue&type=template&id=5682e6ad& ***!\n \\***********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_errors_vue_vue_type_template_id_5682e6ad___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./errors.vue?vue&type=template&id=5682e6ad& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/errors.vue?vue&type=template&id=5682e6ad&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_errors_vue_vue_type_template_id_5682e6ad___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_errors_vue_vue_type_template_id_5682e6ad___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/expression.vue\":\n/*!********************************!*\\\n !*** ./src/vue/expression.vue ***!\n \\********************************/\n/*! exports provided: Expression, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _expression_vue_vue_type_template_id_1d20865a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./expression.vue?vue&type=template&id=1d20865a& */ \"./src/vue/expression.vue?vue&type=template&id=1d20865a&\");\n/* harmony import */ var _expression_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./expression.vue?vue&type=script&lang=ts& */ \"./src/vue/expression.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Expression\", function() { return _expression_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Expression\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _expression_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _expression_vue_vue_type_template_id_1d20865a___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _expression_vue_vue_type_template_id_1d20865a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/expression.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/expression.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************!*\\\n !*** ./src/vue/expression.vue?vue&type=script&lang=ts& ***!\n \\*********************************************************/\n/*! exports provided: default, Expression */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_expression_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./expression.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/expression.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Expression\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_expression_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Expression\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_expression_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/expression.vue?vue&type=template&id=1d20865a&\":\n/*!***************************************************************!*\\\n !*** ./src/vue/expression.vue?vue&type=template&id=1d20865a& ***!\n \\***************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_expression_vue_vue_type_template_id_1d20865a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./expression.vue?vue&type=template&id=1d20865a& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/expression.vue?vue&type=template&id=1d20865a&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_expression_vue_vue_type_template_id_1d20865a___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_expression_vue_vue_type_template_id_1d20865a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/file.vue\":\n/*!**************************!*\\\n !*** ./src/vue/file.vue ***!\n \\**************************/\n/*! exports provided: File, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _file_vue_vue_type_template_id_20f70284___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./file.vue?vue&type=template&id=20f70284& */ \"./src/vue/file.vue?vue&type=template&id=20f70284&\");\n/* harmony import */ var _file_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./file.vue?vue&type=script&lang=ts& */ \"./src/vue/file.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"File\", function() { return _file_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"File\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _file_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _file_vue_vue_type_template_id_20f70284___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _file_vue_vue_type_template_id_20f70284___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/file.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/file.vue?vue&type=script&lang=ts&\":\n/*!***************************************************!*\\\n !*** ./src/vue/file.vue?vue&type=script&lang=ts& ***!\n \\***************************************************/\n/*! exports provided: default, File */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_file_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./file.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/file.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"File\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_file_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"File\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_file_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/file.vue?vue&type=template&id=20f70284&\":\n/*!*********************************************************!*\\\n !*** ./src/vue/file.vue?vue&type=template&id=20f70284& ***!\n \\*********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_file_vue_vue_type_template_id_20f70284___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./file.vue?vue&type=template&id=20f70284& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/file.vue?vue&type=template&id=20f70284&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_file_vue_vue_type_template_id_20f70284___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_file_vue_vue_type_template_id_20f70284___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/flowpanel.vue\":\n/*!*******************************!*\\\n !*** ./src/vue/flowpanel.vue ***!\n \\*******************************/\n/*! exports provided: FlowPanel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _flowpanel_vue_vue_type_template_id_96ae1a78___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./flowpanel.vue?vue&type=template&id=96ae1a78& */ \"./src/vue/flowpanel.vue?vue&type=template&id=96ae1a78&\");\n/* harmony import */ var _flowpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./flowpanel.vue?vue&type=script&lang=ts& */ \"./src/vue/flowpanel.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FlowPanel\", function() { return _flowpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"FlowPanel\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _flowpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _flowpanel_vue_vue_type_template_id_96ae1a78___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _flowpanel_vue_vue_type_template_id_96ae1a78___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/flowpanel.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/flowpanel.vue?vue&type=script&lang=ts&\":\n/*!********************************************************!*\\\n !*** ./src/vue/flowpanel.vue?vue&type=script&lang=ts& ***!\n \\********************************************************/\n/*! exports provided: default, FlowPanel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./flowpanel.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/flowpanel.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FlowPanel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"FlowPanel\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/flowpanel.vue?vue&type=template&id=96ae1a78&\":\n/*!**************************************************************!*\\\n !*** ./src/vue/flowpanel.vue?vue&type=template&id=96ae1a78& ***!\n \\**************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanel_vue_vue_type_template_id_96ae1a78___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./flowpanel.vue?vue&type=template&id=96ae1a78& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/flowpanel.vue?vue&type=template&id=96ae1a78&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanel_vue_vue_type_template_id_96ae1a78___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanel_vue_vue_type_template_id_96ae1a78___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/flowpanelelement.vue\":\n/*!**************************************!*\\\n !*** ./src/vue/flowpanelelement.vue ***!\n \\**************************************/\n/*! exports provided: FlowPanelElement, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _flowpanelelement_vue_vue_type_template_id_9d992c30___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./flowpanelelement.vue?vue&type=template&id=9d992c30& */ \"./src/vue/flowpanelelement.vue?vue&type=template&id=9d992c30&\");\n/* harmony import */ var _flowpanelelement_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./flowpanelelement.vue?vue&type=script&lang=ts& */ \"./src/vue/flowpanelelement.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FlowPanelElement\", function() { return _flowpanelelement_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"FlowPanelElement\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _flowpanelelement_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _flowpanelelement_vue_vue_type_template_id_9d992c30___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _flowpanelelement_vue_vue_type_template_id_9d992c30___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/flowpanelelement.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/flowpanelelement.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************!*\\\n !*** ./src/vue/flowpanelelement.vue?vue&type=script&lang=ts& ***!\n \\***************************************************************/\n/*! exports provided: default, FlowPanelElement */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanelelement_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./flowpanelelement.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/flowpanelelement.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FlowPanelElement\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanelelement_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"FlowPanelElement\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanelelement_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/flowpanelelement.vue?vue&type=template&id=9d992c30&\":\n/*!*********************************************************************!*\\\n !*** ./src/vue/flowpanelelement.vue?vue&type=template&id=9d992c30& ***!\n \\*********************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanelelement_vue_vue_type_template_id_9d992c30___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./flowpanelelement.vue?vue&type=template&id=9d992c30& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/flowpanelelement.vue?vue&type=template&id=9d992c30&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanelelement_vue_vue_type_template_id_9d992c30___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanelelement_vue_vue_type_template_id_9d992c30___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/header.vue\":\n/*!****************************!*\\\n !*** ./src/vue/header.vue ***!\n \\****************************/\n/*! exports provided: SurveyHeader, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _header_vue_vue_type_template_id_69cff8cf___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./header.vue?vue&type=template&id=69cff8cf& */ \"./src/vue/header.vue?vue&type=template&id=69cff8cf&\");\n/* harmony import */ var _header_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./header.vue?vue&type=script&lang=ts& */ \"./src/vue/header.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyHeader\", function() { return _header_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"SurveyHeader\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _header_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _header_vue_vue_type_template_id_69cff8cf___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _header_vue_vue_type_template_id_69cff8cf___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/header.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/header.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************!*\\\n !*** ./src/vue/header.vue?vue&type=script&lang=ts& ***!\n \\*****************************************************/\n/*! exports provided: default, SurveyHeader */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./header.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/header.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyHeader\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"SurveyHeader\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/header.vue?vue&type=template&id=69cff8cf&\":\n/*!***********************************************************!*\\\n !*** ./src/vue/header.vue?vue&type=template&id=69cff8cf& ***!\n \\***********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_template_id_69cff8cf___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./header.vue?vue&type=template&id=69cff8cf& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/header.vue?vue&type=template&id=69cff8cf&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_template_id_69cff8cf___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_template_id_69cff8cf___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/html.vue\":\n/*!**************************!*\\\n !*** ./src/vue/html.vue ***!\n \\**************************/\n/*! exports provided: Html, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _html_vue_vue_type_template_id_0742e16d___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./html.vue?vue&type=template&id=0742e16d& */ \"./src/vue/html.vue?vue&type=template&id=0742e16d&\");\n/* harmony import */ var _html_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./html.vue?vue&type=script&lang=ts& */ \"./src/vue/html.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Html\", function() { return _html_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Html\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _html_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _html_vue_vue_type_template_id_0742e16d___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _html_vue_vue_type_template_id_0742e16d___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/html.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/html.vue?vue&type=script&lang=ts&\":\n/*!***************************************************!*\\\n !*** ./src/vue/html.vue?vue&type=script&lang=ts& ***!\n \\***************************************************/\n/*! exports provided: default, Html */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_html_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./html.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/html.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Html\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_html_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Html\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_html_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/html.vue?vue&type=template&id=0742e16d&\":\n/*!*********************************************************!*\\\n !*** ./src/vue/html.vue?vue&type=template&id=0742e16d& ***!\n \\*********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_html_vue_vue_type_template_id_0742e16d___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./html.vue?vue&type=template&id=0742e16d& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/html.vue?vue&type=template&id=0742e16d&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_html_vue_vue_type_template_id_0742e16d___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_html_vue_vue_type_template_id_0742e16d___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/image.vue\":\n/*!***************************!*\\\n !*** ./src/vue/image.vue ***!\n \\***************************/\n/*! exports provided: QuestionImage, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _image_vue_vue_type_template_id_1dc8d709___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image.vue?vue&type=template&id=1dc8d709& */ \"./src/vue/image.vue?vue&type=template&id=1dc8d709&\");\n/* harmony import */ var _image_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./image.vue?vue&type=script&lang=ts& */ \"./src/vue/image.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionImage\", function() { return _image_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"QuestionImage\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _image_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _image_vue_vue_type_template_id_1dc8d709___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _image_vue_vue_type_template_id_1dc8d709___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/image.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/image.vue?vue&type=script&lang=ts&\":\n/*!****************************************************!*\\\n !*** ./src/vue/image.vue?vue&type=script&lang=ts& ***!\n \\****************************************************/\n/*! exports provided: default, QuestionImage */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_image_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./image.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/image.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionImage\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_image_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"QuestionImage\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_image_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/image.vue?vue&type=template&id=1dc8d709&\":\n/*!**********************************************************!*\\\n !*** ./src/vue/image.vue?vue&type=template&id=1dc8d709& ***!\n \\**********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_image_vue_vue_type_template_id_1dc8d709___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./image.vue?vue&type=template&id=1dc8d709& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/image.vue?vue&type=template&id=1dc8d709&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_image_vue_vue_type_template_id_1dc8d709___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_image_vue_vue_type_template_id_1dc8d709___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/imagepicker.vue\":\n/*!*********************************!*\\\n !*** ./src/vue/imagepicker.vue ***!\n \\*********************************/\n/*! exports provided: ImagePicker, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _imagepicker_vue_vue_type_template_id_153fe052___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./imagepicker.vue?vue&type=template&id=153fe052& */ \"./src/vue/imagepicker.vue?vue&type=template&id=153fe052&\");\n/* harmony import */ var _imagepicker_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./imagepicker.vue?vue&type=script&lang=ts& */ \"./src/vue/imagepicker.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ImagePicker\", function() { return _imagepicker_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ImagePicker\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _imagepicker_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _imagepicker_vue_vue_type_template_id_153fe052___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _imagepicker_vue_vue_type_template_id_153fe052___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/imagepicker.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/imagepicker.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************!*\\\n !*** ./src/vue/imagepicker.vue?vue&type=script&lang=ts& ***!\n \\**********************************************************/\n/*! exports provided: default, ImagePicker */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_imagepicker_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./imagepicker.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/imagepicker.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ImagePicker\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_imagepicker_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ImagePicker\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_imagepicker_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/imagepicker.vue?vue&type=template&id=153fe052&\":\n/*!****************************************************************!*\\\n !*** ./src/vue/imagepicker.vue?vue&type=template&id=153fe052& ***!\n \\****************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_imagepicker_vue_vue_type_template_id_153fe052___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./imagepicker.vue?vue&type=template&id=153fe052& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/imagepicker.vue?vue&type=template&id=153fe052&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_imagepicker_vue_vue_type_template_id_153fe052___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_imagepicker_vue_vue_type_template_id_153fe052___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/matrix.vue\":\n/*!****************************!*\\\n !*** ./src/vue/matrix.vue ***!\n \\****************************/\n/*! exports provided: Matrix, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _matrix_vue_vue_type_template_id_7fa2f403___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./matrix.vue?vue&type=template&id=7fa2f403& */ \"./src/vue/matrix.vue?vue&type=template&id=7fa2f403&\");\n/* harmony import */ var _matrix_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./matrix.vue?vue&type=script&lang=ts& */ \"./src/vue/matrix.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Matrix\", function() { return _matrix_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Matrix\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _matrix_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _matrix_vue_vue_type_template_id_7fa2f403___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _matrix_vue_vue_type_template_id_7fa2f403___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/matrix.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/matrix.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************!*\\\n !*** ./src/vue/matrix.vue?vue&type=script&lang=ts& ***!\n \\*****************************************************/\n/*! exports provided: default, Matrix */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrix_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./matrix.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrix.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Matrix\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrix_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Matrix\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrix_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/matrix.vue?vue&type=template&id=7fa2f403&\":\n/*!***********************************************************!*\\\n !*** ./src/vue/matrix.vue?vue&type=template&id=7fa2f403& ***!\n \\***********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrix_vue_vue_type_template_id_7fa2f403___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./matrix.vue?vue&type=template&id=7fa2f403& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrix.vue?vue&type=template&id=7fa2f403&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrix_vue_vue_type_template_id_7fa2f403___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrix_vue_vue_type_template_id_7fa2f403___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/matrixcell.vue\":\n/*!********************************!*\\\n !*** ./src/vue/matrixcell.vue ***!\n \\********************************/\n/*! exports provided: MatrixCell, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _matrixcell_vue_vue_type_template_id_3ca54ee5___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./matrixcell.vue?vue&type=template&id=3ca54ee5& */ \"./src/vue/matrixcell.vue?vue&type=template&id=3ca54ee5&\");\n/* harmony import */ var _matrixcell_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./matrixcell.vue?vue&type=script&lang=ts& */ \"./src/vue/matrixcell.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixCell\", function() { return _matrixcell_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"MatrixCell\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _matrixcell_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _matrixcell_vue_vue_type_template_id_3ca54ee5___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _matrixcell_vue_vue_type_template_id_3ca54ee5___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/matrixcell.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/matrixcell.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************!*\\\n !*** ./src/vue/matrixcell.vue?vue&type=script&lang=ts& ***!\n \\*********************************************************/\n/*! exports provided: default, MatrixCell */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixcell_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./matrixcell.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixcell.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixCell\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixcell_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"MatrixCell\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixcell_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/matrixcell.vue?vue&type=template&id=3ca54ee5&\":\n/*!***************************************************************!*\\\n !*** ./src/vue/matrixcell.vue?vue&type=template&id=3ca54ee5& ***!\n \\***************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixcell_vue_vue_type_template_id_3ca54ee5___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./matrixcell.vue?vue&type=template&id=3ca54ee5& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixcell.vue?vue&type=template&id=3ca54ee5&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixcell_vue_vue_type_template_id_3ca54ee5___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixcell_vue_vue_type_template_id_3ca54ee5___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/matrixdropdown.vue\":\n/*!************************************!*\\\n !*** ./src/vue/matrixdropdown.vue ***!\n \\************************************/\n/*! exports provided: MatrixDropdown, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _matrixdropdown_vue_vue_type_template_id_0b4da6d8___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./matrixdropdown.vue?vue&type=template&id=0b4da6d8& */ \"./src/vue/matrixdropdown.vue?vue&type=template&id=0b4da6d8&\");\n/* harmony import */ var _matrixdropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./matrixdropdown.vue?vue&type=script&lang=ts& */ \"./src/vue/matrixdropdown.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdown\", function() { return _matrixdropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"MatrixDropdown\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _matrixdropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _matrixdropdown_vue_vue_type_template_id_0b4da6d8___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _matrixdropdown_vue_vue_type_template_id_0b4da6d8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/matrixdropdown.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/matrixdropdown.vue?vue&type=script&lang=ts&\":\n/*!*************************************************************!*\\\n !*** ./src/vue/matrixdropdown.vue?vue&type=script&lang=ts& ***!\n \\*************************************************************/\n/*! exports provided: default, MatrixDropdown */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./matrixdropdown.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixdropdown.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdown\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdown\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/matrixdropdown.vue?vue&type=template&id=0b4da6d8&\":\n/*!*******************************************************************!*\\\n !*** ./src/vue/matrixdropdown.vue?vue&type=template&id=0b4da6d8& ***!\n \\*******************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdropdown_vue_vue_type_template_id_0b4da6d8___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./matrixdropdown.vue?vue&type=template&id=0b4da6d8& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixdropdown.vue?vue&type=template&id=0b4da6d8&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdropdown_vue_vue_type_template_id_0b4da6d8___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdropdown_vue_vue_type_template_id_0b4da6d8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/matrixdynamic.vue\":\n/*!***********************************!*\\\n !*** ./src/vue/matrixdynamic.vue ***!\n \\***********************************/\n/*! exports provided: MatrixDynamic, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _matrixdynamic_vue_vue_type_template_id_9a0b88e8___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./matrixdynamic.vue?vue&type=template&id=9a0b88e8& */ \"./src/vue/matrixdynamic.vue?vue&type=template&id=9a0b88e8&\");\n/* harmony import */ var _matrixdynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./matrixdynamic.vue?vue&type=script&lang=ts& */ \"./src/vue/matrixdynamic.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDynamic\", function() { return _matrixdynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"MatrixDynamic\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _matrixdynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _matrixdynamic_vue_vue_type_template_id_9a0b88e8___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _matrixdynamic_vue_vue_type_template_id_9a0b88e8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/matrixdynamic.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/matrixdynamic.vue?vue&type=script&lang=ts&\":\n/*!************************************************************!*\\\n !*** ./src/vue/matrixdynamic.vue?vue&type=script&lang=ts& ***!\n \\************************************************************/\n/*! exports provided: default, MatrixDynamic */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./matrixdynamic.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixdynamic.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDynamic\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"MatrixDynamic\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/matrixdynamic.vue?vue&type=template&id=9a0b88e8&\":\n/*!******************************************************************!*\\\n !*** ./src/vue/matrixdynamic.vue?vue&type=template&id=9a0b88e8& ***!\n \\******************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdynamic_vue_vue_type_template_id_9a0b88e8___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./matrixdynamic.vue?vue&type=template&id=9a0b88e8& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixdynamic.vue?vue&type=template&id=9a0b88e8&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdynamic_vue_vue_type_template_id_9a0b88e8___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdynamic_vue_vue_type_template_id_9a0b88e8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/matrixtable.vue\":\n/*!*********************************!*\\\n !*** ./src/vue/matrixtable.vue ***!\n \\*********************************/\n/*! exports provided: MatrixTable, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _matrixtable_vue_vue_type_template_id_fa197e4a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./matrixtable.vue?vue&type=template&id=fa197e4a& */ \"./src/vue/matrixtable.vue?vue&type=template&id=fa197e4a&\");\n/* harmony import */ var _matrixtable_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./matrixtable.vue?vue&type=script&lang=ts& */ \"./src/vue/matrixtable.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixTable\", function() { return _matrixtable_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"MatrixTable\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _matrixtable_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _matrixtable_vue_vue_type_template_id_fa197e4a___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _matrixtable_vue_vue_type_template_id_fa197e4a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/matrixtable.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/matrixtable.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************!*\\\n !*** ./src/vue/matrixtable.vue?vue&type=script&lang=ts& ***!\n \\**********************************************************/\n/*! exports provided: default, MatrixTable */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixtable_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./matrixtable.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixtable.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixTable\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixtable_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"MatrixTable\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixtable_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/matrixtable.vue?vue&type=template&id=fa197e4a&\":\n/*!****************************************************************!*\\\n !*** ./src/vue/matrixtable.vue?vue&type=template&id=fa197e4a& ***!\n \\****************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixtable_vue_vue_type_template_id_fa197e4a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./matrixtable.vue?vue&type=template&id=fa197e4a& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixtable.vue?vue&type=template&id=fa197e4a&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixtable_vue_vue_type_template_id_fa197e4a___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixtable_vue_vue_type_template_id_fa197e4a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/multipletext.vue\":\n/*!**********************************!*\\\n !*** ./src/vue/multipletext.vue ***!\n \\**********************************/\n/*! exports provided: MultipleText, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _multipletext_vue_vue_type_template_id_93fe4c02___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./multipletext.vue?vue&type=template&id=93fe4c02& */ \"./src/vue/multipletext.vue?vue&type=template&id=93fe4c02&\");\n/* harmony import */ var _multipletext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./multipletext.vue?vue&type=script&lang=ts& */ \"./src/vue/multipletext.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MultipleText\", function() { return _multipletext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"MultipleText\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _multipletext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _multipletext_vue_vue_type_template_id_93fe4c02___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _multipletext_vue_vue_type_template_id_93fe4c02___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/multipletext.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/multipletext.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************!*\\\n !*** ./src/vue/multipletext.vue?vue&type=script&lang=ts& ***!\n \\***********************************************************/\n/*! exports provided: default, MultipleText */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_multipletext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./multipletext.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/multipletext.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MultipleText\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_multipletext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"MultipleText\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_multipletext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/multipletext.vue?vue&type=template&id=93fe4c02&\":\n/*!*****************************************************************!*\\\n !*** ./src/vue/multipletext.vue?vue&type=template&id=93fe4c02& ***!\n \\*****************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_multipletext_vue_vue_type_template_id_93fe4c02___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./multipletext.vue?vue&type=template&id=93fe4c02& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/multipletext.vue?vue&type=template&id=93fe4c02&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_multipletext_vue_vue_type_template_id_93fe4c02___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_multipletext_vue_vue_type_template_id_93fe4c02___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/navigation.vue\":\n/*!********************************!*\\\n !*** ./src/vue/navigation.vue ***!\n \\********************************/\n/*! exports provided: Navigation, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _navigation_vue_vue_type_template_id_75eadfd6___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./navigation.vue?vue&type=template&id=75eadfd6& */ \"./src/vue/navigation.vue?vue&type=template&id=75eadfd6&\");\n/* harmony import */ var _navigation_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./navigation.vue?vue&type=script&lang=ts& */ \"./src/vue/navigation.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Navigation\", function() { return _navigation_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Navigation\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _navigation_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _navigation_vue_vue_type_template_id_75eadfd6___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _navigation_vue_vue_type_template_id_75eadfd6___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/navigation.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/navigation.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************!*\\\n !*** ./src/vue/navigation.vue?vue&type=script&lang=ts& ***!\n \\*********************************************************/\n/*! exports provided: default, Navigation */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_navigation_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./navigation.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/navigation.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Navigation\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_navigation_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Navigation\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_navigation_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/navigation.vue?vue&type=template&id=75eadfd6&\":\n/*!***************************************************************!*\\\n !*** ./src/vue/navigation.vue?vue&type=template&id=75eadfd6& ***!\n \\***************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_navigation_vue_vue_type_template_id_75eadfd6___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./navigation.vue?vue&type=template&id=75eadfd6& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/navigation.vue?vue&type=template&id=75eadfd6&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_navigation_vue_vue_type_template_id_75eadfd6___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_navigation_vue_vue_type_template_id_75eadfd6___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/otherChoice.vue\":\n/*!*********************************!*\\\n !*** ./src/vue/otherChoice.vue ***!\n \\*********************************/\n/*! exports provided: OtherChoice, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _otherChoice_vue_vue_type_template_id_2ed776ff___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./otherChoice.vue?vue&type=template&id=2ed776ff& */ \"./src/vue/otherChoice.vue?vue&type=template&id=2ed776ff&\");\n/* harmony import */ var _otherChoice_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./otherChoice.vue?vue&type=script&lang=ts& */ \"./src/vue/otherChoice.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"OtherChoice\", function() { return _otherChoice_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"OtherChoice\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _otherChoice_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _otherChoice_vue_vue_type_template_id_2ed776ff___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _otherChoice_vue_vue_type_template_id_2ed776ff___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/otherChoice.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/otherChoice.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************!*\\\n !*** ./src/vue/otherChoice.vue?vue&type=script&lang=ts& ***!\n \\**********************************************************/\n/*! exports provided: default, OtherChoice */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_otherChoice_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./otherChoice.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/otherChoice.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"OtherChoice\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_otherChoice_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"OtherChoice\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_otherChoice_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/otherChoice.vue?vue&type=template&id=2ed776ff&\":\n/*!****************************************************************!*\\\n !*** ./src/vue/otherChoice.vue?vue&type=template&id=2ed776ff& ***!\n \\****************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_otherChoice_vue_vue_type_template_id_2ed776ff___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./otherChoice.vue?vue&type=template&id=2ed776ff& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/otherChoice.vue?vue&type=template&id=2ed776ff&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_otherChoice_vue_vue_type_template_id_2ed776ff___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_otherChoice_vue_vue_type_template_id_2ed776ff___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/page.vue\":\n/*!**************************!*\\\n !*** ./src/vue/page.vue ***!\n \\**************************/\n/*! exports provided: Page, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _page_vue_vue_type_template_id_4e962a51___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./page.vue?vue&type=template&id=4e962a51& */ \"./src/vue/page.vue?vue&type=template&id=4e962a51&\");\n/* harmony import */ var _page_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./page.vue?vue&type=script&lang=ts& */ \"./src/vue/page.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Page\", function() { return _page_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Page\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _page_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _page_vue_vue_type_template_id_4e962a51___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _page_vue_vue_type_template_id_4e962a51___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/page.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/page.vue?vue&type=script&lang=ts&\":\n/*!***************************************************!*\\\n !*** ./src/vue/page.vue?vue&type=script&lang=ts& ***!\n \\***************************************************/\n/*! exports provided: default, Page */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_page_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./page.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/page.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Page\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_page_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Page\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_page_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/page.vue?vue&type=template&id=4e962a51&\":\n/*!*********************************************************!*\\\n !*** ./src/vue/page.vue?vue&type=template&id=4e962a51& ***!\n \\*********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_page_vue_vue_type_template_id_4e962a51___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./page.vue?vue&type=template&id=4e962a51& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/page.vue?vue&type=template&id=4e962a51&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_page_vue_vue_type_template_id_4e962a51___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_page_vue_vue_type_template_id_4e962a51___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/panel.vue\":\n/*!***************************!*\\\n !*** ./src/vue/panel.vue ***!\n \\***************************/\n/*! exports provided: Panel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _panel_vue_vue_type_template_id_0c78899c___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./panel.vue?vue&type=template&id=0c78899c& */ \"./src/vue/panel.vue?vue&type=template&id=0c78899c&\");\n/* harmony import */ var _panel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./panel.vue?vue&type=script&lang=ts& */ \"./src/vue/panel.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Panel\", function() { return _panel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Panel\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _panel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _panel_vue_vue_type_template_id_0c78899c___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _panel_vue_vue_type_template_id_0c78899c___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/panel.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/panel.vue?vue&type=script&lang=ts&\":\n/*!****************************************************!*\\\n !*** ./src/vue/panel.vue?vue&type=script&lang=ts& ***!\n \\****************************************************/\n/*! exports provided: default, Panel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_panel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./panel.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/panel.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Panel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_panel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Panel\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_panel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/panel.vue?vue&type=template&id=0c78899c&\":\n/*!**********************************************************!*\\\n !*** ./src/vue/panel.vue?vue&type=template&id=0c78899c& ***!\n \\**********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_panel_vue_vue_type_template_id_0c78899c___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./panel.vue?vue&type=template&id=0c78899c& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/panel.vue?vue&type=template&id=0c78899c&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_panel_vue_vue_type_template_id_0c78899c___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_panel_vue_vue_type_template_id_0c78899c___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/paneldynamic.vue\":\n/*!**********************************!*\\\n !*** ./src/vue/paneldynamic.vue ***!\n \\**********************************/\n/*! exports provided: PanelDynamic, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _paneldynamic_vue_vue_type_template_id_9dda5d06___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./paneldynamic.vue?vue&type=template&id=9dda5d06& */ \"./src/vue/paneldynamic.vue?vue&type=template&id=9dda5d06&\");\n/* harmony import */ var _paneldynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./paneldynamic.vue?vue&type=script&lang=ts& */ \"./src/vue/paneldynamic.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamic\", function() { return _paneldynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"PanelDynamic\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _paneldynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _paneldynamic_vue_vue_type_template_id_9dda5d06___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _paneldynamic_vue_vue_type_template_id_9dda5d06___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/paneldynamic.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/paneldynamic.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************!*\\\n !*** ./src/vue/paneldynamic.vue?vue&type=script&lang=ts& ***!\n \\***********************************************************/\n/*! exports provided: default, PanelDynamic */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./paneldynamic.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamic.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamic\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"PanelDynamic\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/paneldynamic.vue?vue&type=template&id=9dda5d06&\":\n/*!*****************************************************************!*\\\n !*** ./src/vue/paneldynamic.vue?vue&type=template&id=9dda5d06& ***!\n \\*****************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_vue_vue_type_template_id_9dda5d06___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./paneldynamic.vue?vue&type=template&id=9dda5d06& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamic.vue?vue&type=template&id=9dda5d06&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_vue_vue_type_template_id_9dda5d06___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_vue_vue_type_template_id_9dda5d06___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/paneldynamicprogress.vue\":\n/*!******************************************!*\\\n !*** ./src/vue/paneldynamicprogress.vue ***!\n \\******************************************/\n/*! exports provided: PanelDynamicProgress, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _paneldynamicprogress_vue_vue_type_template_id_742bffac___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./paneldynamicprogress.vue?vue&type=template&id=742bffac& */ \"./src/vue/paneldynamicprogress.vue?vue&type=template&id=742bffac&\");\n/* harmony import */ var _paneldynamicprogress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./paneldynamicprogress.vue?vue&type=script&lang=ts& */ \"./src/vue/paneldynamicprogress.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamicProgress\", function() { return _paneldynamicprogress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"PanelDynamicProgress\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _paneldynamicprogress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _paneldynamicprogress_vue_vue_type_template_id_742bffac___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _paneldynamicprogress_vue_vue_type_template_id_742bffac___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/paneldynamicprogress.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/paneldynamicprogress.vue?vue&type=script&lang=ts&\":\n/*!*******************************************************************!*\\\n !*** ./src/vue/paneldynamicprogress.vue?vue&type=script&lang=ts& ***!\n \\*******************************************************************/\n/*! exports provided: default, PanelDynamicProgress */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicprogress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./paneldynamicprogress.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamicprogress.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamicProgress\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicprogress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"PanelDynamicProgress\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicprogress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/paneldynamicprogress.vue?vue&type=template&id=742bffac&\":\n/*!*************************************************************************!*\\\n !*** ./src/vue/paneldynamicprogress.vue?vue&type=template&id=742bffac& ***!\n \\*************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicprogress_vue_vue_type_template_id_742bffac___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./paneldynamicprogress.vue?vue&type=template&id=742bffac& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamicprogress.vue?vue&type=template&id=742bffac&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicprogress_vue_vue_type_template_id_742bffac___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicprogress_vue_vue_type_template_id_742bffac___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/paneldynamicremove.vue\":\n/*!****************************************!*\\\n !*** ./src/vue/paneldynamicremove.vue ***!\n \\****************************************/\n/*! exports provided: PanelDynamicRemove, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _paneldynamicremove_vue_vue_type_template_id_db6b2f7e___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./paneldynamicremove.vue?vue&type=template&id=db6b2f7e& */ \"./src/vue/paneldynamicremove.vue?vue&type=template&id=db6b2f7e&\");\n/* harmony import */ var _paneldynamicremove_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./paneldynamicremove.vue?vue&type=script&lang=ts& */ \"./src/vue/paneldynamicremove.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamicRemove\", function() { return _paneldynamicremove_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"PanelDynamicRemove\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _paneldynamicremove_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _paneldynamicremove_vue_vue_type_template_id_db6b2f7e___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _paneldynamicremove_vue_vue_type_template_id_db6b2f7e___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/paneldynamicremove.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/paneldynamicremove.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************************!*\\\n !*** ./src/vue/paneldynamicremove.vue?vue&type=script&lang=ts& ***!\n \\*****************************************************************/\n/*! exports provided: default, PanelDynamicRemove */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicremove_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./paneldynamicremove.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamicremove.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamicRemove\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicremove_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"PanelDynamicRemove\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicremove_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/paneldynamicremove.vue?vue&type=template&id=db6b2f7e&\":\n/*!***********************************************************************!*\\\n !*** ./src/vue/paneldynamicremove.vue?vue&type=template&id=db6b2f7e& ***!\n \\***********************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicremove_vue_vue_type_template_id_db6b2f7e___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./paneldynamicremove.vue?vue&type=template&id=db6b2f7e& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamicremove.vue?vue&type=template&id=db6b2f7e&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicremove_vue_vue_type_template_id_db6b2f7e___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicremove_vue_vue_type_template_id_db6b2f7e___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/progress.vue\":\n/*!******************************!*\\\n !*** ./src/vue/progress.vue ***!\n \\******************************/\n/*! exports provided: Progress, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _progress_vue_vue_type_template_id_27e325ef___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./progress.vue?vue&type=template&id=27e325ef& */ \"./src/vue/progress.vue?vue&type=template&id=27e325ef&\");\n/* harmony import */ var _progress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./progress.vue?vue&type=script&lang=ts& */ \"./src/vue/progress.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Progress\", function() { return _progress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Progress\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _progress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _progress_vue_vue_type_template_id_27e325ef___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _progress_vue_vue_type_template_id_27e325ef___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/progress.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/progress.vue?vue&type=script&lang=ts&\":\n/*!*******************************************************!*\\\n !*** ./src/vue/progress.vue?vue&type=script&lang=ts& ***!\n \\*******************************************************/\n/*! exports provided: default, Progress */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_progress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./progress.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/progress.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Progress\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_progress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Progress\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_progress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/progress.vue?vue&type=template&id=27e325ef&\":\n/*!*************************************************************!*\\\n !*** ./src/vue/progress.vue?vue&type=template&id=27e325ef& ***!\n \\*************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_progress_vue_vue_type_template_id_27e325ef___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./progress.vue?vue&type=template&id=27e325ef& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/progress.vue?vue&type=template&id=27e325ef&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_progress_vue_vue_type_template_id_27e325ef___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_progress_vue_vue_type_template_id_27e325ef___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/progressButtons.vue\":\n/*!*************************************!*\\\n !*** ./src/vue/progressButtons.vue ***!\n \\*************************************/\n/*! exports provided: ProgressButtons, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _progressButtons_vue_vue_type_template_id_2ae7de42___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./progressButtons.vue?vue&type=template&id=2ae7de42& */ \"./src/vue/progressButtons.vue?vue&type=template&id=2ae7de42&\");\n/* harmony import */ var _progressButtons_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./progressButtons.vue?vue&type=script&lang=ts& */ \"./src/vue/progressButtons.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ProgressButtons\", function() { return _progressButtons_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ProgressButtons\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _progressButtons_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _progressButtons_vue_vue_type_template_id_2ae7de42___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _progressButtons_vue_vue_type_template_id_2ae7de42___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/progressButtons.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/progressButtons.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************!*\\\n !*** ./src/vue/progressButtons.vue?vue&type=script&lang=ts& ***!\n \\**************************************************************/\n/*! exports provided: default, ProgressButtons */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_progressButtons_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./progressButtons.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/progressButtons.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ProgressButtons\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_progressButtons_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ProgressButtons\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_progressButtons_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/progressButtons.vue?vue&type=template&id=2ae7de42&\":\n/*!********************************************************************!*\\\n !*** ./src/vue/progressButtons.vue?vue&type=template&id=2ae7de42& ***!\n \\********************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_progressButtons_vue_vue_type_template_id_2ae7de42___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./progressButtons.vue?vue&type=template&id=2ae7de42& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/progressButtons.vue?vue&type=template&id=2ae7de42&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_progressButtons_vue_vue_type_template_id_2ae7de42___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_progressButtons_vue_vue_type_template_id_2ae7de42___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/question.ts\":\n/*!*****************************!*\\\n !*** ./src/vue/question.ts ***!\n \\*****************************/\n/*! exports provided: QuestionVue, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionVue\", function() { return QuestionVue; });\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) 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};\n\n\nvar QuestionVue = /** @class */ (function (_super) {\n __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.getModel = function () {\n return this.question;\n };\n QuestionVue.prototype.onMounted = 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.beforeDestroyQuestionElement(this.$el);\n }\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Prop\"])()\n ], QuestionVue.prototype, \"question\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Prop\"])()\n ], QuestionVue.prototype, \"css\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Watch\"])(\"question\")\n ], QuestionVue.prototype, \"changeQuestion\", null);\n QuestionVue = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]\n ], QuestionVue);\n return QuestionVue;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"BaseVue\"]));\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (QuestionVue);\n\n\n/***/ }),\n\n/***/ \"./src/vue/radiogroup.vue\":\n/*!********************************!*\\\n !*** ./src/vue/radiogroup.vue ***!\n \\********************************/\n/*! exports provided: Radiogroup, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _radiogroup_vue_vue_type_template_id_06c6d526___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./radiogroup.vue?vue&type=template&id=06c6d526& */ \"./src/vue/radiogroup.vue?vue&type=template&id=06c6d526&\");\n/* harmony import */ var _radiogroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./radiogroup.vue?vue&type=script&lang=ts& */ \"./src/vue/radiogroup.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Radiogroup\", function() { return _radiogroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Radiogroup\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _radiogroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _radiogroup_vue_vue_type_template_id_06c6d526___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _radiogroup_vue_vue_type_template_id_06c6d526___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/radiogroup.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/radiogroup.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************!*\\\n !*** ./src/vue/radiogroup.vue?vue&type=script&lang=ts& ***!\n \\*********************************************************/\n/*! exports provided: default, Radiogroup */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./radiogroup.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/radiogroup.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Radiogroup\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Radiogroup\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/radiogroup.vue?vue&type=template&id=06c6d526&\":\n/*!***************************************************************!*\\\n !*** ./src/vue/radiogroup.vue?vue&type=template&id=06c6d526& ***!\n \\***************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroup_vue_vue_type_template_id_06c6d526___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./radiogroup.vue?vue&type=template&id=06c6d526& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/radiogroup.vue?vue&type=template&id=06c6d526&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroup_vue_vue_type_template_id_06c6d526___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroup_vue_vue_type_template_id_06c6d526___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/radiogroupitem.vue\":\n/*!************************************!*\\\n !*** ./src/vue/radiogroupitem.vue ***!\n \\************************************/\n/*! exports provided: RadiogroupItem, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _radiogroupitem_vue_vue_type_template_id_5bbe97b9___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./radiogroupitem.vue?vue&type=template&id=5bbe97b9& */ \"./src/vue/radiogroupitem.vue?vue&type=template&id=5bbe97b9&\");\n/* harmony import */ var _radiogroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./radiogroupitem.vue?vue&type=script&lang=ts& */ \"./src/vue/radiogroupitem.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RadiogroupItem\", function() { return _radiogroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"RadiogroupItem\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _radiogroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _radiogroupitem_vue_vue_type_template_id_5bbe97b9___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _radiogroupitem_vue_vue_type_template_id_5bbe97b9___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/radiogroupitem.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/radiogroupitem.vue?vue&type=script&lang=ts&\":\n/*!*************************************************************!*\\\n !*** ./src/vue/radiogroupitem.vue?vue&type=script&lang=ts& ***!\n \\*************************************************************/\n/*! exports provided: default, RadiogroupItem */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./radiogroupitem.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/radiogroupitem.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RadiogroupItem\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"RadiogroupItem\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/radiogroupitem.vue?vue&type=template&id=5bbe97b9&\":\n/*!*******************************************************************!*\\\n !*** ./src/vue/radiogroupitem.vue?vue&type=template&id=5bbe97b9& ***!\n \\*******************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroupitem_vue_vue_type_template_id_5bbe97b9___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./radiogroupitem.vue?vue&type=template&id=5bbe97b9& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/radiogroupitem.vue?vue&type=template&id=5bbe97b9&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroupitem_vue_vue_type_template_id_5bbe97b9___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroupitem_vue_vue_type_template_id_5bbe97b9___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/ranking/ranking-item.vue\":\n/*!******************************************!*\\\n !*** ./src/vue/ranking/ranking-item.vue ***!\n \\******************************************/\n/*! exports provided: RankingItem, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ranking_item_vue_vue_type_template_id_2faded76___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ranking-item.vue?vue&type=template&id=2faded76& */ \"./src/vue/ranking/ranking-item.vue?vue&type=template&id=2faded76&\");\n/* harmony import */ var _ranking_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ranking-item.vue?vue&type=script&lang=ts& */ \"./src/vue/ranking/ranking-item.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RankingItem\", function() { return _ranking_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"RankingItem\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _ranking_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _ranking_item_vue_vue_type_template_id_2faded76___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _ranking_item_vue_vue_type_template_id_2faded76___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/ranking/ranking-item.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/ranking/ranking-item.vue?vue&type=script&lang=ts&\":\n/*!*******************************************************************!*\\\n !*** ./src/vue/ranking/ranking-item.vue?vue&type=script&lang=ts& ***!\n \\*******************************************************************/\n/*! exports provided: default, RankingItem */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/ts-loader??ref--0!../../../node_modules/vue-loader/lib??vue-loader-options!./ranking-item.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/ranking/ranking-item.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RankingItem\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"RankingItem\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/ranking/ranking-item.vue?vue&type=template&id=2faded76&\":\n/*!*************************************************************************!*\\\n !*** ./src/vue/ranking/ranking-item.vue?vue&type=template&id=2faded76& ***!\n \\*************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_item_vue_vue_type_template_id_2faded76___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./ranking-item.vue?vue&type=template&id=2faded76& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/ranking/ranking-item.vue?vue&type=template&id=2faded76&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_item_vue_vue_type_template_id_2faded76___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_item_vue_vue_type_template_id_2faded76___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/ranking/ranking.vue\":\n/*!*************************************!*\\\n !*** ./src/vue/ranking/ranking.vue ***!\n \\*************************************/\n/*! exports provided: Ranking, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ranking_vue_vue_type_template_id_19074eea___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ranking.vue?vue&type=template&id=19074eea& */ \"./src/vue/ranking/ranking.vue?vue&type=template&id=19074eea&\");\n/* harmony import */ var _ranking_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ranking.vue?vue&type=script&lang=ts& */ \"./src/vue/ranking/ranking.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Ranking\", function() { return _ranking_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Ranking\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _ranking_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _ranking_vue_vue_type_template_id_19074eea___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _ranking_vue_vue_type_template_id_19074eea___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/ranking/ranking.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/ranking/ranking.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************!*\\\n !*** ./src/vue/ranking/ranking.vue?vue&type=script&lang=ts& ***!\n \\**************************************************************/\n/*! exports provided: default, Ranking */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/ts-loader??ref--0!../../../node_modules/vue-loader/lib??vue-loader-options!./ranking.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/ranking/ranking.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Ranking\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Ranking\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/ranking/ranking.vue?vue&type=template&id=19074eea&\":\n/*!********************************************************************!*\\\n !*** ./src/vue/ranking/ranking.vue?vue&type=template&id=19074eea& ***!\n \\********************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_vue_vue_type_template_id_19074eea___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./ranking.vue?vue&type=template&id=19074eea& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/ranking/ranking.vue?vue&type=template&id=19074eea&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_vue_vue_type_template_id_19074eea___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_vue_vue_type_template_id_19074eea___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/rating.vue\":\n/*!****************************!*\\\n !*** ./src/vue/rating.vue ***!\n \\****************************/\n/*! exports provided: Rating, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _rating_vue_vue_type_template_id_7092bfdf___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./rating.vue?vue&type=template&id=7092bfdf& */ \"./src/vue/rating.vue?vue&type=template&id=7092bfdf&\");\n/* harmony import */ var _rating_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rating.vue?vue&type=script&lang=ts& */ \"./src/vue/rating.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Rating\", function() { return _rating_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Rating\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _rating_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _rating_vue_vue_type_template_id_7092bfdf___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _rating_vue_vue_type_template_id_7092bfdf___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/rating.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/rating.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************!*\\\n !*** ./src/vue/rating.vue?vue&type=script&lang=ts& ***!\n \\*****************************************************/\n/*! exports provided: default, Rating */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./rating.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/rating.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Rating\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Rating\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/rating.vue?vue&type=template&id=7092bfdf&\":\n/*!***********************************************************!*\\\n !*** ./src/vue/rating.vue?vue&type=template&id=7092bfdf& ***!\n \\***********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_vue_vue_type_template_id_7092bfdf___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./rating.vue?vue&type=template&id=7092bfdf& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/rating.vue?vue&type=template&id=7092bfdf&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_vue_vue_type_template_id_7092bfdf___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_vue_vue_type_template_id_7092bfdf___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/row.vue\":\n/*!*************************!*\\\n !*** ./src/vue/row.vue ***!\n \\*************************/\n/*! exports provided: Row, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _row_vue_vue_type_template_id_7cc0bd88___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./row.vue?vue&type=template&id=7cc0bd88& */ \"./src/vue/row.vue?vue&type=template&id=7cc0bd88&\");\n/* harmony import */ var _row_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./row.vue?vue&type=script&lang=ts& */ \"./src/vue/row.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Row\", function() { return _row_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Row\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _row_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _row_vue_vue_type_template_id_7cc0bd88___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _row_vue_vue_type_template_id_7cc0bd88___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/row.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/row.vue?vue&type=script&lang=ts&\":\n/*!**************************************************!*\\\n !*** ./src/vue/row.vue?vue&type=script&lang=ts& ***!\n \\**************************************************/\n/*! exports provided: default, Row */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_row_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./row.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/row.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Row\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_row_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Row\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_row_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/row.vue?vue&type=template&id=7cc0bd88&\":\n/*!********************************************************!*\\\n !*** ./src/vue/row.vue?vue&type=template&id=7cc0bd88& ***!\n \\********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_row_vue_vue_type_template_id_7cc0bd88___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./row.vue?vue&type=template&id=7cc0bd88& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/row.vue?vue&type=template&id=7cc0bd88&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_row_vue_vue_type_template_id_7cc0bd88___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_row_vue_vue_type_template_id_7cc0bd88___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/signaturepad.vue\":\n/*!**********************************!*\\\n !*** ./src/vue/signaturepad.vue ***!\n \\**********************************/\n/*! exports provided: SignaturePad, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _signaturepad_vue_vue_type_template_id_0462349d___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./signaturepad.vue?vue&type=template&id=0462349d& */ \"./src/vue/signaturepad.vue?vue&type=template&id=0462349d&\");\n/* harmony import */ var _signaturepad_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./signaturepad.vue?vue&type=script&lang=ts& */ \"./src/vue/signaturepad.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SignaturePad\", function() { return _signaturepad_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"SignaturePad\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _signaturepad_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _signaturepad_vue_vue_type_template_id_0462349d___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _signaturepad_vue_vue_type_template_id_0462349d___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/signaturepad.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/signaturepad.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************!*\\\n !*** ./src/vue/signaturepad.vue?vue&type=script&lang=ts& ***!\n \\***********************************************************/\n/*! exports provided: default, SignaturePad */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_signaturepad_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./signaturepad.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/signaturepad.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SignaturePad\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_signaturepad_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"SignaturePad\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_signaturepad_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/signaturepad.vue?vue&type=template&id=0462349d&\":\n/*!*****************************************************************!*\\\n !*** ./src/vue/signaturepad.vue?vue&type=template&id=0462349d& ***!\n \\*****************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_signaturepad_vue_vue_type_template_id_0462349d___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./signaturepad.vue?vue&type=template&id=0462349d& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/signaturepad.vue?vue&type=template&id=0462349d&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_signaturepad_vue_vue_type_template_id_0462349d___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_signaturepad_vue_vue_type_template_id_0462349d___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/string-editor.vue\":\n/*!***********************************!*\\\n !*** ./src/vue/string-editor.vue ***!\n \\***********************************/\n/*! exports provided: SurveyStringEditor, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _string_editor_vue_vue_type_template_id_9639f152___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./string-editor.vue?vue&type=template&id=9639f152& */ \"./src/vue/string-editor.vue?vue&type=template&id=9639f152&\");\n/* harmony import */ var _string_editor_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./string-editor.vue?vue&type=script&lang=ts& */ \"./src/vue/string-editor.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyStringEditor\", function() { return _string_editor_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"SurveyStringEditor\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _string_editor_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _string_editor_vue_vue_type_template_id_9639f152___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _string_editor_vue_vue_type_template_id_9639f152___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/string-editor.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/string-editor.vue?vue&type=script&lang=ts&\":\n/*!************************************************************!*\\\n !*** ./src/vue/string-editor.vue?vue&type=script&lang=ts& ***!\n \\************************************************************/\n/*! exports provided: default, SurveyStringEditor */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_editor_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./string-editor.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string-editor.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyStringEditor\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_editor_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"SurveyStringEditor\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_editor_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/string-editor.vue?vue&type=template&id=9639f152&\":\n/*!******************************************************************!*\\\n !*** ./src/vue/string-editor.vue?vue&type=template&id=9639f152& ***!\n \\******************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_editor_vue_vue_type_template_id_9639f152___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./string-editor.vue?vue&type=template&id=9639f152& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string-editor.vue?vue&type=template&id=9639f152&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_editor_vue_vue_type_template_id_9639f152___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_editor_vue_vue_type_template_id_9639f152___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/string-viewer.vue\":\n/*!***********************************!*\\\n !*** ./src/vue/string-viewer.vue ***!\n \\***********************************/\n/*! exports provided: SurveyStringViewer, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _string_viewer_vue_vue_type_template_id_7d918508___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./string-viewer.vue?vue&type=template&id=7d918508& */ \"./src/vue/string-viewer.vue?vue&type=template&id=7d918508&\");\n/* harmony import */ var _string_viewer_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./string-viewer.vue?vue&type=script&lang=ts& */ \"./src/vue/string-viewer.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyStringViewer\", function() { return _string_viewer_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"SurveyStringViewer\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _string_viewer_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _string_viewer_vue_vue_type_template_id_7d918508___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _string_viewer_vue_vue_type_template_id_7d918508___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/string-viewer.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/string-viewer.vue?vue&type=script&lang=ts&\":\n/*!************************************************************!*\\\n !*** ./src/vue/string-viewer.vue?vue&type=script&lang=ts& ***!\n \\************************************************************/\n/*! exports provided: default, SurveyStringViewer */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_viewer_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./string-viewer.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string-viewer.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyStringViewer\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_viewer_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"SurveyStringViewer\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_viewer_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/string-viewer.vue?vue&type=template&id=7d918508&\":\n/*!******************************************************************!*\\\n !*** ./src/vue/string-viewer.vue?vue&type=template&id=7d918508& ***!\n \\******************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_viewer_vue_vue_type_template_id_7d918508___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./string-viewer.vue?vue&type=template&id=7d918508& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string-viewer.vue?vue&type=template&id=7d918508&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_viewer_vue_vue_type_template_id_7d918508___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_viewer_vue_vue_type_template_id_7d918508___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/string.vue\":\n/*!****************************!*\\\n !*** ./src/vue/string.vue ***!\n \\****************************/\n/*! exports provided: SurveyString, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _string_vue_vue_type_template_id_d3a3d75a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./string.vue?vue&type=template&id=d3a3d75a& */ \"./src/vue/string.vue?vue&type=template&id=d3a3d75a&\");\n/* harmony import */ var _string_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./string.vue?vue&type=script&lang=ts& */ \"./src/vue/string.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyString\", function() { return _string_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"SurveyString\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _string_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _string_vue_vue_type_template_id_d3a3d75a___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _string_vue_vue_type_template_id_d3a3d75a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/string.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/string.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************!*\\\n !*** ./src/vue/string.vue?vue&type=script&lang=ts& ***!\n \\*****************************************************/\n/*! exports provided: default, SurveyString */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./string.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyString\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"SurveyString\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/string.vue?vue&type=template&id=d3a3d75a&\":\n/*!***********************************************************!*\\\n !*** ./src/vue/string.vue?vue&type=template&id=d3a3d75a& ***!\n \\***********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_vue_vue_type_template_id_d3a3d75a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./string.vue?vue&type=template&id=d3a3d75a& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string.vue?vue&type=template&id=d3a3d75a&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_vue_vue_type_template_id_d3a3d75a___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_vue_vue_type_template_id_d3a3d75a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/survey.vue\":\n/*!****************************!*\\\n !*** ./src/vue/survey.vue ***!\n \\****************************/\n/*! exports provided: Survey, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _survey_vue_vue_type_template_id_6874e1c8___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./survey.vue?vue&type=template&id=6874e1c8& */ \"./src/vue/survey.vue?vue&type=template&id=6874e1c8&\");\n/* harmony import */ var _survey_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./survey.vue?vue&type=script&lang=ts& */ \"./src/vue/survey.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Survey\", function() { return _survey_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Survey\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _survey_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _survey_vue_vue_type_template_id_6874e1c8___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _survey_vue_vue_type_template_id_6874e1c8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/survey.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/survey.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************!*\\\n !*** ./src/vue/survey.vue?vue&type=script&lang=ts& ***!\n \\*****************************************************/\n/*! exports provided: default, Survey */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_survey_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./survey.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/survey.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Survey\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_survey_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Survey\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_survey_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/survey.vue?vue&type=template&id=6874e1c8&\":\n/*!***********************************************************!*\\\n !*** ./src/vue/survey.vue?vue&type=template&id=6874e1c8& ***!\n \\***********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_survey_vue_vue_type_template_id_6874e1c8___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./survey.vue?vue&type=template&id=6874e1c8& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/survey.vue?vue&type=template&id=6874e1c8&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_survey_vue_vue_type_template_id_6874e1c8___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_survey_vue_vue_type_template_id_6874e1c8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/surveyModel.ts\":\n/*!********************************!*\\\n !*** ./src/vue/surveyModel.ts ***!\n \\********************************/\n/*! exports provided: VueSurveyModel, VueSurveyWindowModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"VueSurveyModel\", function() { return VueSurveyModel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"VueSurveyWindowModel\", function() { return VueSurveyWindowModel; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! survey-core */ \"./src/entries/core.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\nvar VueSurveyModel = /** @class */ (function (_super) {\n __extends(VueSurveyModel, _super);\n function VueSurveyModel() {\n return _super !== null && _super.apply(this, arguments) || this;\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 survey_core__WEBPACK_IMPORTED_MODULE_1__[\"surveyCss\"].getCss();\n },\n set: function (value) {\n this.mergeValues(value, this.css);\n },\n enumerable: false,\n configurable: true\n });\n VueSurveyModel.prototype.setDataValueCore = function (valuesHash, key, value) {\n vue__WEBPACK_IMPORTED_MODULE_0___default.a.set(valuesHash, key, value);\n };\n VueSurveyModel.prototype.deleteDataValueCore = function (valuesHash, key) {\n vue__WEBPACK_IMPORTED_MODULE_0___default.a.delete(valuesHash, key);\n };\n VueSurveyModel.prototype.doAfterRenderSurvey = function (el) {\n this.afterRenderSurvey(el);\n };\n VueSurveyModel.prototype.doAfterRenderHeader = function (el) {\n this.afterRenderHeader(el);\n };\n return VueSurveyModel;\n}(survey_core__WEBPACK_IMPORTED_MODULE_1__[\"SurveyModel\"]));\n\nvar VueSurveyWindowModel = /** @class */ (function (_super) {\n __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}(survey_core__WEBPACK_IMPORTED_MODULE_1__[\"SurveyWindowModel\"]));\n\nsurvey_core__WEBPACK_IMPORTED_MODULE_1__[\"SurveyModel\"].platform = \"vue\";\n\n\n/***/ }),\n\n/***/ \"./src/vue/text.vue\":\n/*!**************************!*\\\n !*** ./src/vue/text.vue ***!\n \\**************************/\n/*! exports provided: QuestionText, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _text_vue_vue_type_template_id_40ece422___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./text.vue?vue&type=template&id=40ece422& */ \"./src/vue/text.vue?vue&type=template&id=40ece422&\");\n/* harmony import */ var _text_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./text.vue?vue&type=script&lang=ts& */ \"./src/vue/text.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionText\", function() { return _text_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"QuestionText\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _text_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _text_vue_vue_type_template_id_40ece422___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _text_vue_vue_type_template_id_40ece422___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/text.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/text.vue?vue&type=script&lang=ts&\":\n/*!***************************************************!*\\\n !*** ./src/vue/text.vue?vue&type=script&lang=ts& ***!\n \\***************************************************/\n/*! exports provided: default, QuestionText */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_text_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./text.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/text.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionText\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_text_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"QuestionText\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_text_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/text.vue?vue&type=template&id=40ece422&\":\n/*!*********************************************************!*\\\n !*** ./src/vue/text.vue?vue&type=template&id=40ece422& ***!\n \\*********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_text_vue_vue_type_template_id_40ece422___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./text.vue?vue&type=template&id=40ece422& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/text.vue?vue&type=template&id=40ece422&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_text_vue_vue_type_template_id_40ece422___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_text_vue_vue_type_template_id_40ece422___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/timerpanel.vue\":\n/*!********************************!*\\\n !*** ./src/vue/timerpanel.vue ***!\n \\********************************/\n/*! exports provided: TimerPanel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _timerpanel_vue_vue_type_template_id_0d2abe21___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./timerpanel.vue?vue&type=template&id=0d2abe21& */ \"./src/vue/timerpanel.vue?vue&type=template&id=0d2abe21&\");\n/* harmony import */ var _timerpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./timerpanel.vue?vue&type=script&lang=ts& */ \"./src/vue/timerpanel.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TimerPanel\", function() { return _timerpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"TimerPanel\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _timerpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _timerpanel_vue_vue_type_template_id_0d2abe21___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _timerpanel_vue_vue_type_template_id_0d2abe21___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/timerpanel.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/timerpanel.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************!*\\\n !*** ./src/vue/timerpanel.vue?vue&type=script&lang=ts& ***!\n \\*********************************************************/\n/*! exports provided: default, TimerPanel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_timerpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./timerpanel.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/timerpanel.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TimerPanel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_timerpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"TimerPanel\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_timerpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/timerpanel.vue?vue&type=template&id=0d2abe21&\":\n/*!***************************************************************!*\\\n !*** ./src/vue/timerpanel.vue?vue&type=template&id=0d2abe21& ***!\n \\***************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_timerpanel_vue_vue_type_template_id_0d2abe21___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./timerpanel.vue?vue&type=template&id=0d2abe21& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/timerpanel.vue?vue&type=template&id=0d2abe21&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_timerpanel_vue_vue_type_template_id_0d2abe21___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_timerpanel_vue_vue_type_template_id_0d2abe21___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/titlecontent.vue\":\n/*!**********************************!*\\\n !*** ./src/vue/titlecontent.vue ***!\n \\**********************************/\n/*! exports provided: TitleContent, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _titlecontent_vue_vue_type_template_id_cd49b83a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./titlecontent.vue?vue&type=template&id=cd49b83a& */ \"./src/vue/titlecontent.vue?vue&type=template&id=cd49b83a&\");\n/* harmony import */ var _titlecontent_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./titlecontent.vue?vue&type=script&lang=ts& */ \"./src/vue/titlecontent.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TitleContent\", function() { return _titlecontent_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"TitleContent\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _titlecontent_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _titlecontent_vue_vue_type_template_id_cd49b83a___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _titlecontent_vue_vue_type_template_id_cd49b83a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/titlecontent.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/titlecontent.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************!*\\\n !*** ./src/vue/titlecontent.vue?vue&type=script&lang=ts& ***!\n \\***********************************************************/\n/*! exports provided: default, TitleContent */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_titlecontent_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./titlecontent.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/titlecontent.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TitleContent\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_titlecontent_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"TitleContent\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_titlecontent_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/titlecontent.vue?vue&type=template&id=cd49b83a&\":\n/*!*****************************************************************!*\\\n !*** ./src/vue/titlecontent.vue?vue&type=template&id=cd49b83a& ***!\n \\*****************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_titlecontent_vue_vue_type_template_id_cd49b83a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./titlecontent.vue?vue&type=template&id=cd49b83a& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/titlecontent.vue?vue&type=template&id=cd49b83a&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_titlecontent_vue_vue_type_template_id_cd49b83a___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_titlecontent_vue_vue_type_template_id_cd49b83a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/window.vue\":\n/*!****************************!*\\\n !*** ./src/vue/window.vue ***!\n \\****************************/\n/*! exports provided: Window, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _window_vue_vue_type_template_id_62f588b2___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./window.vue?vue&type=template&id=62f588b2& */ \"./src/vue/window.vue?vue&type=template&id=62f588b2&\");\n/* harmony import */ var _window_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./window.vue?vue&type=script&lang=ts& */ \"./src/vue/window.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Window\", function() { return _window_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Window\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _window_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _window_vue_vue_type_template_id_62f588b2___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _window_vue_vue_type_template_id_62f588b2___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/window.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/window.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************!*\\\n !*** ./src/vue/window.vue?vue&type=script&lang=ts& ***!\n \\*****************************************************/\n/*! exports provided: default, Window */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_window_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./window.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/window.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Window\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_window_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Window\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_window_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/window.vue?vue&type=template&id=62f588b2&\":\n/*!***********************************************************!*\\\n !*** ./src/vue/window.vue?vue&type=template&id=62f588b2& ***!\n \\***********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_window_vue_vue_type_template_id_62f588b2___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./window.vue?vue&type=template&id=62f588b2& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/window.vue?vue&type=template&id=62f588b2&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_window_vue_vue_type_template_id_62f588b2___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_window_vue_vue_type_template_id_62f588b2___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"vue\":\n/*!******************************************************************************!*\\\n !*** external {\"root\":\"Vue\",\"commonjs2\":\"vue\",\"commonjs\":\"vue\",\"amd\":\"vue\"} ***!\n \\******************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_vue__;\n\n/***/ })\n\n/******/ });\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9TdXJ2ZXkvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL1N1cnZleS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9ub2RlX21vZHVsZXMvc2lnbmF0dXJlX3BhZC9kaXN0L3NpZ25hdHVyZV9wYWQubWpzIiwid2VicGFjazovL1N1cnZleS8uL25vZGVfbW9kdWxlcy9zb3J0YWJsZWpzL21vZHVsYXIvc29ydGFibGUuZXNtLmpzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvYm9vbGVhbi1jaGVja2JveC52dWU/MGVjZiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Jvb2xlYW4tc3dpdGNoLnZ1ZT84YWRjIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvYnV0dG9uZ3JvdXAudnVlP2EzOTUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9idXR0b25ncm91cGl0ZW0udnVlP2I2NTkiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jaGVja2JveC52dWU/YmQxZiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NoZWNrYm94aXRlbS52dWU/M2RkMyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbW1lbnQudnVlP2UzNjIiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci1pdGVtLWRyb3Bkb3duLnZ1ZT85YmE4Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS52dWU/MDliNCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLXNlcGFyYXRvci52dWU/YmUxZCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLnZ1ZT9hNDFkIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi52dWU/NTgzYSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvZGVmYXVsdC10aXRsZS9kZWZhdWx0LXRpdGxlLnZ1ZT8wYTNkIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9saXN0L2xpc3QudnVlP2JlOTgiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL2RldGFpbC1idXR0b24vZGV0YWlsLWJ1dHRvbi52dWU/YmEzZiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZHJhZy1kcm9wLWljb24vZHJhZy1kcm9wLWljb24udnVlP2M2Y2IiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL3JlbW92ZS1idXR0b24vcmVtb3ZlLWJ1dHRvbi52dWU/MTQ3MSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAtY29udGFpbmVyLnZ1ZT9mZmRhIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9wb3B1cC9wb3B1cC52dWU/NzQxYiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvc3ZnLWljb24vc3ZnLWljb24udnVlPzE0OTkiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL3RpdGxlLWFjdGlvbnMvdGl0bGUtYWN0aW9ucy52dWU/ZDFhOCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvc2l0ZS52dWU/NGYwYiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2N1c3RvbS52dWU/MTNlYSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2N1c3RvbXdpZGdldC52dWU/Mjk0YiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Ryb3Bkb3duLnZ1ZT9kOThlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZWxlbWVudC52dWU/MDc1MCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2VsZW1lbnRoZWFkZXIudnVlPzhmZjgiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9lbXB0eS52dWU/OWUzNCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Vycm9ycy52dWU/MjRjOSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2V4cHJlc3Npb24udnVlPzhkNTUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9maWxlLnZ1ZT9hMTM2Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZmxvd3BhbmVsLnZ1ZT9lYjk4Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZmxvd3BhbmVsZWxlbWVudC52dWU/YjM1ZiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2hlYWRlci52dWU/Y2U2YiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2h0bWwudnVlP2IzNDciLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9pbWFnZS52dWU/NjI0YSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2ltYWdlcGlja2VyLnZ1ZT9kZGI1Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbWF0cml4LnZ1ZT8wOTg3Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbWF0cml4Y2VsbC52dWU/ZGViYyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL21hdHJpeGRyb3Bkb3duLnZ1ZT83YjY3Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbWF0cml4ZHluYW1pYy52dWU/YjI0ZCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL21hdHJpeHRhYmxlLnZ1ZT9mNzI2Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbXVsdGlwbGV0ZXh0LnZ1ZT9jNjAxIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbmF2aWdhdGlvbi52dWU/YmRkNCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL290aGVyQ2hvaWNlLnZ1ZT9mNDYyIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcGFnZS52dWU/NTcyZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3BhbmVsLnZ1ZT82ZjUxIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcGFuZWxkeW5hbWljLnZ1ZT9jNTJhIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcGFuZWxkeW5hbWljcHJvZ3Jlc3MudnVlPzVkZGQiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wYW5lbGR5bmFtaWNyZW1vdmUudnVlP2ZhMzUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wcm9ncmVzcy52dWU/NTU2MSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3Byb2dyZXNzQnV0dG9ucy52dWU/MGEwMyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3JhZGlvZ3JvdXAudnVlPzNlYWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9yYWRpb2dyb3VwaXRlbS52dWU/ZTdhOSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3JhbmtpbmcvcmFua2luZy1pdGVtLnZ1ZT8xMjNjIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcmFua2luZy9yYW5raW5nLnZ1ZT8xNDM0Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcmF0aW5nLnZ1ZT9kZDNkIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcm93LnZ1ZT8yYTNhIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvc2lnbmF0dXJlcGFkLnZ1ZT8yYmNkIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvc3RyaW5nLWVkaXRvci52dWU/YmRlZiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3N0cmluZy12aWV3ZXIudnVlP2NkNDgiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9zdHJpbmcudnVlPzhiNmEiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9zdXJ2ZXkudnVlPzQxOWMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS90ZXh0LnZ1ZT8zMWE5Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvdGltZXJwYW5lbC52dWU/MzA2NiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3RpdGxlY29udGVudC52dWU/N2QxNyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3dpbmRvdy52dWU/YjRlMyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9ub2RlX21vZHVsZXMvdnVlLWNsYXNzLWNvbXBvbmVudC9kaXN0L3Z1ZS1jbGFzcy1jb21wb25lbnQuZXNtLmpzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvYm9vbGVhbi1jaGVja2JveC52dWU/NmI0OCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Jvb2xlYW4tc3dpdGNoLnZ1ZT8zNDcwIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvYnV0dG9uZ3JvdXAudnVlP2E2NWYiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9idXR0b25ncm91cGl0ZW0udnVlPzY1ZGMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jaGVja2JveC52dWU/NWQ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NoZWNrYm94aXRlbS52dWU/N2MxNiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbW1lbnQudnVlP2E1NmIiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci1pdGVtLWRyb3Bkb3duLnZ1ZT85MTE4Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS52dWU/MGRlYyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLXNlcGFyYXRvci52dWU/ZjM3MSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLnZ1ZT9jYjYxIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi52dWU/N2Y0OSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvZGVmYXVsdC10aXRsZS9kZWZhdWx0LXRpdGxlLnZ1ZT85MDRiIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9saXN0L2xpc3QudnVlPzRhMjUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL2RldGFpbC1idXR0b24vZGV0YWlsLWJ1dHRvbi52dWU/MjM1YyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZHJhZy1kcm9wLWljb24vZHJhZy1kcm9wLWljb24udnVlPzM4ZjEiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL3JlbW92ZS1idXR0b24vcmVtb3ZlLWJ1dHRvbi52dWU/MDRmZiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAtY29udGFpbmVyLnZ1ZT80NGFmIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9wb3B1cC9wb3B1cC52dWU/YWJhOCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvc3ZnLWljb24vc3ZnLWljb24udnVlPzllNTUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL3RpdGxlLWFjdGlvbnMvdGl0bGUtYWN0aW9ucy52dWU/MTZmYSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvc2l0ZS52dWU/NGVhMCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2N1c3RvbS52dWU/ODIzYiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2N1c3RvbXdpZGdldC52dWU/MGE4NCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Ryb3Bkb3duLnZ1ZT8wMGE0Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZWxlbWVudC52dWU/MWQyZiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2VsZW1lbnRoZWFkZXIudnVlP2E1MDEiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9lbXB0eS52dWU/NjZiOSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Vycm9ycy52dWU/ZmYwZCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2V4cHJlc3Npb24udnVlP2FjZTkiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9maWxlLnZ1ZT9jNGJjIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZmxvd3BhbmVsLnZ1ZT9iZWMyIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZmxvd3BhbmVsZWxlbWVudC52dWU/ZTQwYSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2hlYWRlci52dWU/YjU4MyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2h0bWwudnVlPzJiOWEiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9pbWFnZS52dWU/YzA4NSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2ltYWdlcGlja2VyLnZ1ZT9jNmU0Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbWF0cml4LnZ1ZT83MDc4Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbWF0cml4Y2VsbC52dWU/MDdkOCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL21hdHJpeGRyb3Bkb3duLnZ1ZT85MGQxIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbWF0cml4ZHluYW1pYy52dWU/N2UwYyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL21hdHJpeHRhYmxlLnZ1ZT83MmQ1Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbXVsdGlwbGV0ZXh0LnZ1ZT9mYTQxIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbmF2aWdhdGlvbi52dWU/NTgxZiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL290aGVyQ2hvaWNlLnZ1ZT9mNGY5Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcGFnZS52dWU/MTk0MyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3BhbmVsLnZ1ZT83MjQwIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcGFuZWxkeW5hbWljLnZ1ZT83NWI1Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcGFuZWxkeW5hbWljcHJvZ3Jlc3MudnVlPzU5ZTIiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wYW5lbGR5bmFtaWNyZW1vdmUudnVlPzYyNzAiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wcm9ncmVzcy52dWU/YzNmNSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3Byb2dyZXNzQnV0dG9ucy52dWU/MDI1ZiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3JhZGlvZ3JvdXAudnVlPzczZGEiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9yYWRpb2dyb3VwaXRlbS52dWU/NGU1MiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3JhbmtpbmcvcmFua2luZy1pdGVtLnZ1ZT8yY2M0Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcmFua2luZy9yYW5raW5nLnZ1ZT81ZDRlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcmF0aW5nLnZ1ZT85ZDU0Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcm93LnZ1ZT8xOGZjIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvc2lnbmF0dXJlcGFkLnZ1ZT8zMDZmIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvc3RyaW5nLWVkaXRvci52dWU/ZDc2YiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3N0cmluZy12aWV3ZXIudnVlP2RjOWYiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9zdHJpbmcudnVlP2UxYzEiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9zdXJ2ZXkudnVlPzdhMGYiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS90ZXh0LnZ1ZT8zYTVhIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvdGltZXJwYW5lbC52dWU/Y2M0MyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3RpdGxlY29udGVudC52dWU/NzNkMCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3dpbmRvdy52dWU/N2IxMSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzIiwid2VicGFjazovL1N1cnZleS8uL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9kZWNvcmF0b3JzL0VtaXQuanMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2RlY29yYXRvcnMvSW5qZWN0LmpzIiwid2VicGFjazovL1N1cnZleS8uL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9kZWNvcmF0b3JzL0luamVjdFJlYWN0aXZlLmpzIiwid2VicGFjazovL1N1cnZleS8uL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9kZWNvcmF0b3JzL01vZGVsLmpzIiwid2VicGFjazovL1N1cnZleS8uL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9kZWNvcmF0b3JzL01vZGVsU3luYy5qcyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvZGVjb3JhdG9ycy9Qcm9wLmpzIiwid2VicGFjazovL1N1cnZleS8uL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9kZWNvcmF0b3JzL1Byb3BTeW5jLmpzIiwid2VicGFjazovL1N1cnZleS8uL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9kZWNvcmF0b3JzL1Byb3ZpZGUuanMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2RlY29yYXRvcnMvUHJvdmlkZVJlYWN0aXZlLmpzIiwid2VicGFjazovL1N1cnZleS8uL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9kZWNvcmF0b3JzL1JlZi5qcyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvZGVjb3JhdG9ycy9WTW9kZWwuanMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2RlY29yYXRvcnMvV2F0Y2guanMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2hlbHBlcnMvbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2hlbHBlcnMvcHJvdmlkZUluamVjdC5qcyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2FjdGlvbnMvYWN0aW9uLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9hY3Rpb25zL2FkYXB0aXZlLWNvbnRhaW5lci50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvYWN0aW9ucy9jb250YWluZXIudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2Jhc2UudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2NhbGN1bGF0ZWRWYWx1ZS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvY2hvaWNlc1Jlc3RmdWwudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2NvbmRpdGlvblByb2Nlc3NWYWx1ZS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvY29uZGl0aW9ucy50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvY29uZGl0aW9uc1BhcnNlci50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvZGVmYXVsdENzcy9jc3Nib290c3RyYXAudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2RlZmF1bHRDc3MvY3NzYm9vdHN0cmFwbWF0ZXJpYWwudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2RlZmF1bHRDc3MvY3NzbW9kZXJuLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9kZWZhdWx0Q3NzL2Nzc3N0YW5kYXJkLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9kcmFnZHJvcGhlbHBlci50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvZHhTdXJ2ZXlTZXJ2aWNlLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9lbnRyaWVzL2NodW5rcy9sb2NhbGl6YXRpb24udHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2VudHJpZXMvY2h1bmtzL21vZGVsLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9lbnRyaWVzL2NvcmUudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2VudHJpZXMvdnVlLXVpLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9lbnRyaWVzL3Z1ZS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvZXJyb3IudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2V4cHJlc3Npb25JdGVtcy50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvZXhwcmVzc2lvbnMvZXhwcmVzc2lvblBhcnNlci50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvZXhwcmVzc2lvbnMvZXhwcmVzc2lvbnMudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2Zsb3dwYW5lbC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvZnVuY3Rpb25zZmFjdG9yeS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvaGVscGVycy50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvaXRlbXZhbHVlLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9qc29ub2JqZWN0LnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9saXN0LnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YWJsZXN0cmluZy50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL2FyYWJpYy50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL2Jhc3F1ZS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL2J1bGdhcmlhbi50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL2NhdGFsYW4udHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9jcm9hdGlhbi50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL2N6ZWNoLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vZGFuaXNoLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vZHV0Y2gudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9lbmdsaXNoLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vZXN0b25pYW4udHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9maW5uaXNoLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vZnJlbmNoLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vZ2VvcmdpYW4udHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9nZXJtYW4udHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9ncmVlay50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL2hlYnJldy50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL2hpbmRpLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vaHVuZ2FyaWFuLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vaWNlbGFuZGljLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vaW5kb25lc2lhbi50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL2l0YWxpYW4udHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9qYXBhbmVzZS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL2themFraC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL2tvcmVhbi50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL2xhdHZpYW4udHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9saXRodWFuaWFuLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vbWFjZWRvbmlhbi50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL25vcndlZ2lhbi50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL3BlcnNpYW4udHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9wb2xpc2gudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9wb3J0dWd1ZXNlLWJyLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vcG9ydHVndWVzZS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL3JvbWFuaWFuLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vcnVzc2lhbi50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL3NlcmJpYW4udHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9zaW1wbGlmaWVkLWNoaW5lc2UudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9zcGFuaXNoLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vc3dhaGlsaS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL3N3ZWRpc2gudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi90YWppay50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL3RoYWkudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi90cmFkaXRpb25hbC1jaGluZXNlLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vdHVya2lzaC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL3VrcmFpbmlhbi50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL3ZpZXRuYW1lc2UudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi93ZWxzaC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbWFpbi5zY3NzPzNiYzAiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL21hcnRpeEJhc2UudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3BhZ2UudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3BhbmVsLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9wb3B1cC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb24udHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3F1ZXN0aW9uQ3VzdG9tV2lkZ2V0cy50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb25fYmFzZXNlbGVjdC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb25fYm9vbGVhbi50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb25fYnV0dG9uZ3JvdXAudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3F1ZXN0aW9uX2NoZWNrYm94LnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9xdWVzdGlvbl9jb21tZW50LnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9xdWVzdGlvbl9jdXN0b20udHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3F1ZXN0aW9uX2Ryb3Bkb3duLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9xdWVzdGlvbl9lbXB0eS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb25fZXhwcmVzc2lvbi50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb25fZmlsZS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb25faHRtbC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb25faW1hZ2UudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3F1ZXN0aW9uX2ltYWdlcGlja2VyLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9xdWVzdGlvbl9tYXRyaXgudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9xdWVzdGlvbl9tYXRyaXhkcm9wZG93bmJhc2UudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3F1ZXN0aW9uX21hdHJpeGR5bmFtaWMudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3F1ZXN0aW9uX211bHRpcGxldGV4dC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb25fcGFuZWxkeW5hbWljLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9xdWVzdGlvbl9yYWRpb2dyb3VwLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9xdWVzdGlvbl9yYW5raW5nLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9xdWVzdGlvbl9yYXRpbmcudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3F1ZXN0aW9uX3NpZ25hdHVyZXBhZC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb25fdGV4dC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb25fdGV4dGJhc2UudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3F1ZXN0aW9uZmFjdG9yeS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb25ub252YWx1ZS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcmVuZGVyZXJGYWN0b3J5LnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9zZXR0aW5ncy50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvc3R5bGVzbWFuYWdlci50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvc3VydmV5LWVsZW1lbnQudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3N1cnZleS1lcnJvci50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvc3VydmV5LnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9zdXJ2ZXlQcm9ncmVzc0J1dHRvbnMudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3N1cnZleVN0cmluZ3MudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3N1cnZleVdpbmRvdy50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvc3VydmV5dGltZXIudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3RleHRQcmVQcm9jZXNzb3IudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3RyaWdnZXIudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3V0aWxzL2lzLW1vYmlsZS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdXRpbHMvcG9wdXAudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3V0aWxzL3Jlc3BvbnNpdml0eS1tYW5hZ2VyLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy91dGlscy91dGlscy50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdmFsaWRhdG9yLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvYmFzZS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Jvb2xlYW4tY2hlY2tib3gudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvYm9vbGVhbi1jaGVja2JveC52dWU/ODI3OCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Jvb2xlYW4tY2hlY2tib3gudnVlPzQ4OTMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9ib29sZWFuLXN3aXRjaC52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9ib29sZWFuLXN3aXRjaC52dWU/OTZlMyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Jvb2xlYW4tc3dpdGNoLnZ1ZT9hOWI0Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvYm9vbGVhbi50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2J1dHRvbmdyb3VwLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2J1dHRvbmdyb3VwLnZ1ZT9iNWI2Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvYnV0dG9uZ3JvdXAudnVlP2RlZTUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9idXR0b25ncm91cGl0ZW0udnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvYnV0dG9uZ3JvdXBpdGVtLnZ1ZT9kMTgzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvYnV0dG9uZ3JvdXBpdGVtLnZ1ZT9iMDZmIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY2hlY2tib3gudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY2hlY2tib3gudnVlPzBiMzYiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jaGVja2JveC52dWU/MjBhMiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NoZWNrYm94aXRlbS52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jaGVja2JveGl0ZW0udnVlPzUyNzAiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jaGVja2JveGl0ZW0udnVlP2UyODQiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21tZW50LnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbW1lbnQudnVlPzJiZGYiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21tZW50LnZ1ZT80MTBkIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS1kcm9wZG93bi52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci1pdGVtLWRyb3Bkb3duLnZ1ZT9jZDA5Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS1kcm9wZG93bi52dWU/NDg0YiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLWl0ZW0udnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS52dWU/NmRlMSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLWl0ZW0udnVlPzI0MjEiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci1zZXBhcmF0b3IudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItc2VwYXJhdG9yLnZ1ZT83ODA5Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItc2VwYXJhdG9yLnZ1ZT8zN2FlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXIudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXIudnVlPzAxMWMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci52dWU/ZDQwMSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24udnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi52dWU/ZGFlZiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24udnVlP2I4MjkiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL2RlZmF1bHQtdGl0bGUvZGVmYXVsdC10aXRsZS52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL2RlZmF1bHQtdGl0bGUvZGVmYXVsdC10aXRsZS52dWU/YzliYyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvZGVmYXVsdC10aXRsZS9kZWZhdWx0LXRpdGxlLnZ1ZT9hYTZjIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9saXN0L2xpc3QudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9saXN0L2xpc3QudnVlP2QxNTgiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL2xpc3QvbGlzdC52dWU/NzJhMiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZGV0YWlsLWJ1dHRvbi9kZXRhaWwtYnV0dG9uLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZGV0YWlsLWJ1dHRvbi9kZXRhaWwtYnV0dG9uLnZ1ZT9hNTllIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9kZXRhaWwtYnV0dG9uL2RldGFpbC1idXR0b24udnVlPzA4ZjQiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL2RyYWctZHJvcC1pY29uL2RyYWctZHJvcC1pY29uLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZHJhZy1kcm9wLWljb24vZHJhZy1kcm9wLWljb24udnVlP2NiYmUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL2RyYWctZHJvcC1pY29uL2RyYWctZHJvcC1pY29uLnZ1ZT9mZTM3Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9yZW1vdmUtYnV0dG9uL3JlbW92ZS1idXR0b24udnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9yZW1vdmUtYnV0dG9uL3JlbW92ZS1idXR0b24udnVlPzc0YjciLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL3JlbW92ZS1idXR0b24vcmVtb3ZlLWJ1dHRvbi52dWU/YzUzMyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAtY29udGFpbmVyLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAtY29udGFpbmVyLnZ1ZT9hMmZjIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9wb3B1cC9wb3B1cC1jb250YWluZXIudnVlP2FjZmQiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL3BvcHVwL3BvcHVwLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAudnVlPzEwZDYiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL3BvcHVwL3BvcHVwLnZ1ZT85OTczIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvbi52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL3N2Zy1pY29uL3N2Zy1pY29uLnZ1ZT9jNzcwIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvbi52dWU/ZjBhMSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvdGl0bGUtYWN0aW9ucy90aXRsZS1hY3Rpb25zLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvdGl0bGUtYWN0aW9ucy90aXRsZS1hY3Rpb25zLnZ1ZT9lNTcxIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy90aXRsZS1hY3Rpb25zL3RpdGxlLWFjdGlvbnMudnVlPzFiZTAiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb3NpdGUudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9zaXRlLnZ1ZT9iZGExIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9zaXRlLnZ1ZT9kZmU3Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY3VzdG9tLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2N1c3RvbS52dWU/ZmJhZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2N1c3RvbS52dWU/OTgzYyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2N1c3RvbXdpZGdldC52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jdXN0b213aWRnZXQudnVlPzQ5ZmYiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jdXN0b213aWRnZXQudnVlP2Q1YWIiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9kcm9wZG93bi52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9kcm9wZG93bi52dWU/MjE4NiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Ryb3Bkb3duLnZ1ZT8wY2VkIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZWxlbWVudC52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9lbGVtZW50LnZ1ZT9lZTUxIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZWxlbWVudC52dWU/ODRiMyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2VsZW1lbnRoZWFkZXIudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZWxlbWVudGhlYWRlci52dWU/NDE0YiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2VsZW1lbnRoZWFkZXIudnVlPzhjMzgiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9lbXB0eS52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9lbXB0eS52dWU/OWEwOCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2VtcHR5LnZ1ZT84N2UzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZXJyb3JzLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Vycm9ycy52dWU/NTMxMyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Vycm9ycy52dWU/MjIxNiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2V4cHJlc3Npb24udnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZXhwcmVzc2lvbi52dWU/ZDY5YyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2V4cHJlc3Npb24udnVlPzZjYjkiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9maWxlLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2ZpbGUudnVlPzFiMWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9maWxlLnZ1ZT9iZDFmIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZmxvd3BhbmVsLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Zsb3dwYW5lbC52dWU/OGY5YyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Zsb3dwYW5lbC52dWU/NWM1ZiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Zsb3dwYW5lbGVsZW1lbnQudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZmxvd3BhbmVsZWxlbWVudC52dWU/YjNmOSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Zsb3dwYW5lbGVsZW1lbnQudnVlPzY2YTciLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9oZWFkZXIudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvaGVhZGVyLnZ1ZT8wZjE2Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvaGVhZGVyLnZ1ZT9jNGNiIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvaHRtbC52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9odG1sLnZ1ZT8wMTEyIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvaHRtbC52dWU/ZDJlZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2ltYWdlLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2ltYWdlLnZ1ZT9lMzZiIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvaW1hZ2UudnVlP2Y5ODEiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9pbWFnZXBpY2tlci52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9pbWFnZXBpY2tlci52dWU/YTA3ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2ltYWdlcGlja2VyLnZ1ZT9hZjNmIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbWF0cml4LnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL21hdHJpeC52dWU/ZGJkMSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL21hdHJpeC52dWU/ZWU5ZCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL21hdHJpeGNlbGwudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbWF0cml4Y2VsbC52dWU/NWY3OSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL21hdHJpeGNlbGwudnVlPzU3MzAiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9tYXRyaXhkcm9wZG93bi52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9tYXRyaXhkcm9wZG93bi52dWU/NDJjZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL21hdHJpeGRyb3Bkb3duLnZ1ZT85NDk0Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbWF0cml4ZHluYW1pYy52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9tYXRyaXhkeW5hbWljLnZ1ZT9iOTJjIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbWF0cml4ZHluYW1pYy52dWU/NWM1ZCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL21hdHJpeHRhYmxlLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL21hdHJpeHRhYmxlLnZ1ZT83NjllIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbWF0cml4dGFibGUudnVlPzMzZDQiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9tdWx0aXBsZXRleHQudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbXVsdGlwbGV0ZXh0LnZ1ZT9kY2ZjIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbXVsdGlwbGV0ZXh0LnZ1ZT82ZjVmIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbmF2aWdhdGlvbi52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9uYXZpZ2F0aW9uLnZ1ZT80NzdjIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbmF2aWdhdGlvbi52dWU/MWFkMSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL290aGVyQ2hvaWNlLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL290aGVyQ2hvaWNlLnZ1ZT9mZTI0Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvb3RoZXJDaG9pY2UudnVlPzRjYTkiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wYWdlLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3BhZ2UudnVlP2UzMzkiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wYWdlLnZ1ZT9mOWE3Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcGFuZWwudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcGFuZWwudnVlPzc3ZjAiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wYW5lbC52dWU/YmU3MiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3BhbmVsZHluYW1pYy52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wYW5lbGR5bmFtaWMudnVlPzliZmYiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wYW5lbGR5bmFtaWMudnVlP2E5Y2MiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wYW5lbGR5bmFtaWNwcm9ncmVzcy52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wYW5lbGR5bmFtaWNwcm9ncmVzcy52dWU/MDEwNyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3BhbmVsZHluYW1pY3Byb2dyZXNzLnZ1ZT8xOTFhIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcGFuZWxkeW5hbWljcmVtb3ZlLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3BhbmVsZHluYW1pY3JlbW92ZS52dWU/M2MxYiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3BhbmVsZHluYW1pY3JlbW92ZS52dWU/NjZhOCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3Byb2dyZXNzLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3Byb2dyZXNzLnZ1ZT9mNzI2Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcHJvZ3Jlc3MudnVlP2MxOGQiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wcm9ncmVzc0J1dHRvbnMudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcHJvZ3Jlc3NCdXR0b25zLnZ1ZT8yOTE5Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcHJvZ3Jlc3NCdXR0b25zLnZ1ZT9iZWM1Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcXVlc3Rpb24udHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9yYWRpb2dyb3VwLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3JhZGlvZ3JvdXAudnVlPzcwMTQiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9yYWRpb2dyb3VwLnZ1ZT81OTQxIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcmFkaW9ncm91cGl0ZW0udnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcmFkaW9ncm91cGl0ZW0udnVlPzgwYjMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9yYWRpb2dyb3VwaXRlbS52dWU/MzIyMCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3JhbmtpbmcvcmFua2luZy1pdGVtLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3JhbmtpbmcvcmFua2luZy1pdGVtLnZ1ZT9mYjZmIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcmFua2luZy9yYW5raW5nLWl0ZW0udnVlPzU3M2YiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9yYW5raW5nL3JhbmtpbmcudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcmFua2luZy9yYW5raW5nLnZ1ZT85OWM1Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcmFua2luZy9yYW5raW5nLnZ1ZT9hNTUyIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcmF0aW5nLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3JhdGluZy52dWU/MzhkNiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3JhdGluZy52dWU/OGJkYyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3Jvdy52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9yb3cudnVlPzkxNjkiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9yb3cudnVlPzIwOTgiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9zaWduYXR1cmVwYWQudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvc2lnbmF0dXJlcGFkLnZ1ZT9kMzdiIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvc2lnbmF0dXJlcGFkLnZ1ZT85MzIwIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvc3RyaW5nLWVkaXRvci52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9zdHJpbmctZWRpdG9yLnZ1ZT9kZjUzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvc3RyaW5nLWVkaXRvci52dWU/M2I1NSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3N0cmluZy12aWV3ZXIudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvc3RyaW5nLXZpZXdlci52dWU/N2U1OCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3N0cmluZy12aWV3ZXIudnVlPzdmNGQiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9zdHJpbmcudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvc3RyaW5nLnZ1ZT9kMTcxIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvc3RyaW5nLnZ1ZT84NjZiIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvc3VydmV5LnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3N1cnZleS52dWU/N2VmMCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3N1cnZleS52dWU/YzU2MiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3N1cnZleU1vZGVsLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvdGV4dC52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS90ZXh0LnZ1ZT8zMzdjIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvdGV4dC52dWU/MzhlYyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3RpbWVycGFuZWwudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvdGltZXJwYW5lbC52dWU/ZmI3NyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3RpbWVycGFuZWwudnVlP2JmM2YiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS90aXRsZWNvbnRlbnQudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvdGl0bGVjb250ZW50LnZ1ZT85YjcxIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvdGl0bGVjb250ZW50LnZ1ZT83MDMwIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvd2luZG93LnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3dpbmRvdy52dWU/MjliOSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3dpbmRvdy52dWU/OGZkZiIsIndlYnBhY2s6Ly9TdXJ2ZXkvZXh0ZXJuYWwge1wicm9vdFwiOlwiVnVlXCIsXCJjb21tb25qczJcIjpcInZ1ZVwiLFwiY29tbW9uanNcIjpcInZ1ZVwiLFwiYW1kXCI6XCJ2dWVcIn0iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTztRQ1ZBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBOzs7UUFHQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMENBQTBDLGdDQUFnQztRQUMxRTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLHdEQUF3RCxrQkFBa0I7UUFDMUU7UUFDQSxpREFBaUQsY0FBYztRQUMvRDs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EseUNBQXlDLGlDQUFpQztRQUMxRSxnSEFBZ0gsbUJBQW1CLEVBQUU7UUFDckk7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwyQkFBMkIsMEJBQTBCLEVBQUU7UUFDdkQsaUNBQWlDLGVBQWU7UUFDaEQ7UUFDQTtRQUNBOztRQUVBO1FBQ0Esc0RBQXNELCtEQUErRDs7UUFFckg7UUFDQTs7O1FBR0E7UUFDQTs7Ozs7Ozs7Ozs7OztBQ2xGQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixZQUFZO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDBEQUEwRDtBQUMxRDs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRkFBMkYsYUFBYTtBQUN4RztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkI7O0FBRTdCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsOERBQThEOztBQUU5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLFlBQVk7QUFDWjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsWUFBWTtBQUNaLFlBQVk7O0FBRVo7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxpQkFBaUIsZUFBZTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLHdCQUF3QjtBQUN6Qzs7QUFFQTtBQUNBLHFCQUFxQixrQkFBa0I7QUFDdkM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOztBQUVILG1DQUFtQztBQUNuQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLGtCQUFrQjtBQUNyQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRWUsMkVBQVksRUFBQzs7Ozs7Ozs7Ozs7OztBQ3psQjVCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1CQUFtQixzQkFBc0I7QUFDekM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQixzQkFBc0I7QUFDdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsYUFBYSx1QkFBdUI7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsZUFBZSw2QkFBNkI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpREFBaUQsZ0JBQWdCOztBQUVqRTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVCx1Q0FBdUMsb0RBQW9EOzs7QUFHM0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7OztBQUdUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0M7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsK0NBQStDOztBQUUvQztB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QUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0EseURBQXlEOztBQUV6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxlQUFlO0FBQ2Y7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTs7QUFFQTtBQUNBLFNBQVM7QUFDVDs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7OztBQUdULDRDQUE0Qzs7O0FBRzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxFQUFFOzs7QUFHWDtBQUNBLFFBQVE7OztBQUdSO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNEQUFzRDs7QUFFdEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU8sRUFBRTs7QUFFVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBOztBQUVBLGlDQUFpQzs7QUFFakM7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdNQUFnTTs7QUFFaE07QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDOztBQUVqQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDOztBQUVyQztBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0wsOERBQThEOztBQUU5RDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0NBQWtDOztBQUVsQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLE9BQU87QUFDUCxLQUFLOzs7QUFHTDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFD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QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFCQUFxQiw4QkFBOEI7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU8sRUFBRTs7QUFFVDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsU0FBUzs7O0FBR1Q7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0Es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LHNCQUFDO0FBQUQsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUM5SUQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBbUM7QUFDQTtBQUNHO0FBQ0Y7QUFDQztBQUNIO0FBQ0M7QUFDRDtBQUNHO0FBQ0Q7QUFDRDtBQUNFO0FBQ0Y7QUFDRDtBQUNDO0FBQ0Q7QUFDSTtBQUNBO0FBQ0M7QUFDSDtBQUNDO0FBQ0Y7QUFDQTtBQUNDO0FBQ0c7QUFDQTtBQUNEO0FBQ0Y7QUFDRDtBQUNJO0FBQ0c7QUFDTDtBQUNEO0FBQ0E7QUFDVztBQUNYO0FBQ0E7QUFDQTtBQUNGO0FBQ0Q7QUFDZTtBQUNaO0FBQ0U7QUFDQztBQUNMOzs7Ozs7Ozs7Ozs7O0FDNUNsQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsU0FBUztBQUNnQjtBQUN6Qiw2QkFBNkI7QUFFdEIsSUFBSSxPQUFlLENBQUM7QUFDM0IsT0FBTyxHQUFHLEtBQUcsUUFBcUIsQ0FBQztBQUVPO0FBQ1M7QUFXMUI7QUFDbUI7QUFDVztBQVFOO0FBQ0k7QUFDRztBQU9uQztBQU1ZO0FBQzJDO0FBQ0w7QUFDSTtBQUNOO0FBUTlCO0FBQ21CO0FBQ0M7QUFlakM7QUFVaUI7QUFJSjtBQUlEO0FBTVA7QUFJTTtBQUNzQztBQUMxQjtBQUNWO0FBQ0M7QUFDRTtBQUNnQjtBQUNBO0FBSXZCO0FBQzZCO0FBQ0Y7QUFDQTtBQUNFO0FBQ1E7QUFDaEI7QUFDQTtBQUNZO0FBQ1I7QUFDUTtBQUNaO0FBQ007QUFJMUI7QUFDc0I7QUFDYztBQUluQztBQUNXO0FBQ3lCO0FBQzlCO0FBU3BCO0FBQ2dDO0FBQ0c7QUFFRjtBQUNJO0FBQ1k7QUFDeEUsbURBQW1EO0FBSWQ7QUFNTjtBQUVxQjtBQUNiO0FBQ3NCO0FBS3pCO0FBQ2E7QUFPdEI7QUFFOEI7QUFDekQsZ0RBQWdEO0FBQ2hELDJFQUEyRTtBQUVyQjs7Ozs7Ozs7Ozs7OztBQzFMdEQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBQVE7QUFDdUI7QUFFL0IsZUFBZTtBQUNnQjtBQUUvQix1QkFBdUI7QUFDd0M7QUFDL0Qsd0JBQXdCO0FBQ3lDO0FBQ2pFLG1DQUFtQztBQUM4QztBQUNqRixxQkFBcUI7QUFDK0I7QUFFcEQsUUFBUTtBQUMyQjtBQUNXO0FBQ047QUFDTjtBQUNZO0FBQ1Q7Ozs7Ozs7Ozs7Ozs7QUNyQnJDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFvRDtBQUNqQjtBQUN1QjtBQUNYO0FBQ0o7QUFDWTtBQUNOO0FBQ2E7QUFDQTtBQUNSO0FBQ1g7QUFDSjtBQUNZO0FBQ1E7QUFDTjtBQUNWO0FBQ0U7QUFDUTtBQUNTO0FBQ2Y7QUFDUTtBQUNGO0FBQ1E7QUFDZDtBQUNOO0FBQ2lCO0FBQ0k7QUFDckI7QUFDYztBQUNaO0FBQ0k7QUFDUjtBQUNZO0FBQ0U7QUFDTTtBQUNGO0FBQ2Q7QUFDSjtBQUNZO0FBQ0U7QUFDRTtBQUNZO0FBQ0k7QUFDcEI7QUFDSjtBQUNjO0FBQ1Y7QUFDVjtBQUNRO0FBQ2M7QUFDMUI7QUFDb0I7QUFDUjtBQUNNO0FBQ047QUFDTjtBQUNNO0FBRU07QUFDMEI7QUFDQTtBQUNBO0FBQ2Y7QUFDUjtBQUNIO0FBQ29FO0FBQ1A7QUFDUzs7Ozs7Ozs7Ozs7OztBQ25FN0g7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUF1QjtBQUNFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDRDRCO0FBQ1I7QUFHN0M7SUFBeUMsdUNBQVc7SUFDbEQsNkJBQ1MsSUFBbUIsRUFDMUIsVUFBb0M7UUFEN0Isa0NBQW1CO1FBQzFCLDhDQUFvQztRQUZ0QyxZQUlFLGtCQUFNLElBQUksRUFBRSxVQUFVLENBQUMsU0FD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RUFBRTtnQkFDNUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO2FBQ25DO1lBQ0QsSUFBSSxDQUFDLGdEQUFPLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRTtnQkFDakQsSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDO2FBQzdDO1lBQ0QsSUFBSSxDQUFDLGdEQUFPLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRTtnQkFDbEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDO2FBQy9DO1lBQ0QsSUFBSSxDQUFDLGdEQUFPLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRTtnQkFDaEQsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDO2FBQzNDO1lBQ0QsSUFBSSxDQUFDLGdEQUFPLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDNUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO2FBQ25DO1lBQ0QsSUFBSSxDQUFDLGdEQUFPLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDNUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO2FBQ25DO1lBQ0QsSUFBSSxDQUFDLGdEQUFPLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDNUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO2FBQ25DO1lBQ0QsSUFBSSxDQUFDLGdEQUFPLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDNUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO2FBQ25DO1lBQ0QsSUFBSSxDQUFDLGdEQUFPLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FB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QUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtB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QUFFQTtBQUNBLElBQUksS0FBVSxFQUFFLFlBaUJmO0FBQ0Q7QUFDZSxnRjs7Ozs7Ozs7Ozs7O0FDdENmO0FBQUE7QUFBQTtBQUFBO0FBQXVLLENBQWdCLHlPQUFHLEVBQUMsQzs7Ozs7Ozs7Ozs7O0FDQTNMO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7O0FDQUEsaUQiLCJmaWxlIjoic3VydmV5LnZ1ZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcInZ1ZVwiKSk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShcInN1cnZleS12dWVcIiwgW1widnVlXCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcInN1cnZleS12dWVcIl0gPSBmYWN0b3J5KHJlcXVpcmUoXCJ2dWVcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIlN1cnZleVwiXSA9IGZhY3Rvcnkocm9vdFtcIlZ1ZVwiXSk7XG59KSh0aGlzLCBmdW5jdGlvbihfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3Z1ZV9fKSB7XG5yZXR1cm4gIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvZW50cmllcy92dWUudHNcIik7XG4iLCIvKiFcbiAqIFNpZ25hdHVyZSBQYWQgdjIuMy4yXG4gKiBodHRwczovL2dpdGh1Yi5jb20vc3ppbWVrL3NpZ25hdHVyZV9wYWRcbiAqXG4gKiBDb3B5cmlnaHQgMjAxNyBTenltb24gTm93YWtcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICpcbiAqIFRoZSBtYWluIGlkZWEgYW5kIHNvbWUgcGFydHMgb2YgdGhlIGNvZGUgKGUuZy4gZHJhd2luZyB2YXJpYWJsZSB3aWR0aCBCw6l6aWVyIGN1cnZlKSBhcmUgdGFrZW4gZnJvbTpcbiAqIGh0dHA6Ly9jb3JuZXIuc3F1YXJldXAuY29tLzIwMTIvMDcvc21vb3RoZXItc2lnbmF0dXJlcy5odG1sXG4gKlxuICogSW1wbGVtZW50YXRpb24gb2YgaW50ZXJwb2xhdGlvbiB1c2luZyBjdWJpYyBCw6l6aWVyIGN1cnZlcyBpcyB0YWtlbiBmcm9tOlxuICogaHR0cDovL2Jlbmtub3dzY29kZS53b3JkcHJlc3MuY29tLzIwMTIvMDkvMTQvcGF0aC1pbnRlcnBvbGF0aW9uLXVzaW5nLWN1YmljLWJlemllci1hbmQtY29udHJvbC1wb2ludC1lc3RpbWF0aW9uLWluLWphdmFzY3JpcHRcbiAqXG4gKiBBbGdvcml0aG0gZm9yIGFwcHJveGltYXRlZCBsZW5ndGggb2YgYSBCw6l6aWVyIGN1cnZlIGlzIHRha2VuIGZyb206XG4gKiBodHRwOi8vd3d3LmxlbW9kYS5uZXQvbWF0aHMvYmV6aWVyLWxlbmd0aC9pbmRleC5odG1sXG4gKlxuICovXG5cbmZ1bmN0aW9uIFBvaW50KHgsIHksIHRpbWUpIHtcbiAgdGhpcy54ID0geDtcbiAgdGhpcy55ID0geTtcbiAgdGhpcy50aW1lID0gdGltZSB8fCBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbn1cblxuUG9pbnQucHJvdG90eXBlLnZlbG9jaXR5RnJvbSA9IGZ1bmN0aW9uIChzdGFydCkge1xuICByZXR1cm4gdGhpcy50aW1lICE9PSBzdGFydC50aW1lID8gdGhpcy5kaXN0YW5jZVRvKHN0YXJ0KSAvICh0aGlzLnRpbWUgLSBzdGFydC50aW1lKSA6IDE7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZGlzdGFuY2VUbyA9IGZ1bmN0aW9uIChzdGFydCkge1xuICByZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHRoaXMueCAtIHN0YXJ0LngsIDIpICsgTWF0aC5wb3codGhpcy55IC0gc3RhcnQueSwgMikpO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIChvdGhlcikge1xuICByZXR1cm4gdGhpcy54ID09PSBvdGhlci54ICYmIHRoaXMueSA9PT0gb3RoZXIueSAmJiB0aGlzLnRpbWUgPT09IG90aGVyLnRpbWU7XG59O1xuXG5mdW5jdGlvbiBCZXppZXIoc3RhcnRQb2ludCwgY29udHJvbDEsIGNvbnRyb2wyLCBlbmRQb2ludCkge1xuICB0aGlzLnN0YXJ0UG9pbnQgPSBzdGFydFBvaW50O1xuICB0aGlzLmNvbnRyb2wxID0gY29udHJvbDE7XG4gIHRoaXMuY29udHJvbDIgPSBjb250cm9sMjtcbiAgdGhpcy5lbmRQb2ludCA9IGVuZFBvaW50O1xufVxuXG4vLyBSZXR1cm5zIGFwcHJveGltYXRlZCBsZW5ndGguXG5CZXppZXIucHJvdG90eXBlLmxlbmd0aCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0ZXBzID0gMTA7XG4gIHZhciBsZW5ndGggPSAwO1xuICB2YXIgcHggPSB2b2lkIDA7XG4gIHZhciBweSA9IHZvaWQgMDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8PSBzdGVwczsgaSArPSAxKSB7XG4gICAgdmFyIHQgPSBpIC8gc3RlcHM7XG4gICAgdmFyIGN4ID0gdGhpcy5fcG9pbnQodCwgdGhpcy5zdGFydFBvaW50LngsIHRoaXMuY29udHJvbDEueCwgdGhpcy5jb250cm9sMi54LCB0aGlzLmVuZFBvaW50LngpO1xuICAgIHZhciBjeSA9IHRoaXMuX3BvaW50KHQsIHRoaXMuc3RhcnRQb2ludC55LCB0aGlzLmNvbnRyb2wxLnksIHRoaXMuY29udHJvbDIueSwgdGhpcy5lbmRQb2ludC55KTtcbiAgICBpZiAoaSA+IDApIHtcbiAgICAgIHZhciB4ZGlmZiA9IGN4IC0gcHg7XG4gICAgICB2YXIgeWRpZmYgPSBjeSAtIHB5O1xuICAgICAgbGVuZ3RoICs9IE1hdGguc3FydCh4ZGlmZiAqIHhkaWZmICsgeWRpZmYgKiB5ZGlmZik7XG4gICAgfVxuICAgIHB4ID0gY3g7XG4gICAgcHkgPSBjeTtcbiAgfVxuXG4gIHJldHVybiBsZW5ndGg7XG59O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1tdWx0aS1zcGFjZXMsIHNwYWNlLWluLXBhcmVucyAqL1xuQmV6aWVyLnByb3RvdHlwZS5fcG9pbnQgPSBmdW5jdGlvbiAodCwgc3RhcnQsIGMxLCBjMiwgZW5kKSB7XG4gIHJldHVybiBzdGFydCAqICgxLjAgLSB0KSAqICgxLjAgLSB0KSAqICgxLjAgLSB0KSArIDMuMCAqIGMxICogKDEuMCAtIHQpICogKDEuMCAtIHQpICogdCArIDMuMCAqIGMyICogKDEuMCAtIHQpICogdCAqIHQgKyBlbmQgKiB0ICogdCAqIHQ7XG59O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuXG4vLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yNzA3ODQwMS84MTU1MDdcbmZ1bmN0aW9uIHRocm90dGxlKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHtcbiAgdmFyIGNvbnRleHQsIGFyZ3MsIHJlc3VsdDtcbiAgdmFyIHRpbWVvdXQgPSBudWxsO1xuICB2YXIgcHJldmlvdXMgPSAwO1xuICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgdmFyIGxhdGVyID0gZnVuY3Rpb24gbGF0ZXIoKSB7XG4gICAgcHJldmlvdXMgPSBvcHRpb25zLmxlYWRpbmcgPT09IGZhbHNlID8gMCA6IERhdGUubm93KCk7XG4gICAgdGltZW91dCA9IG51bGw7XG4gICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBpZiAoIXByZXZpb3VzICYmIG9wdGlvbnMubGVhZGluZyA9PT0gZmFsc2UpIHByZXZpb3VzID0gbm93O1xuICAgIHZhciByZW1haW5pbmcgPSB3YWl0IC0gKG5vdyAtIHByZXZpb3VzKTtcbiAgICBjb250ZXh0ID0gdGhpcztcbiAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgIGlmIChyZW1haW5pbmcgPD0gMCB8fCByZW1haW5pbmcgPiB3YWl0KSB7XG4gICAgICBpZiAodGltZW91dCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgfVxuICAgICAgcHJldmlvdXMgPSBub3c7XG4gICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgfSBlbHNlIGlmICghdGltZW91dCAmJiBvcHRpb25zLnRyYWlsaW5nICE9PSBmYWxzZSkge1xuICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHJlbWFpbmluZyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG5cbmZ1bmN0aW9uIFNpZ25hdHVyZVBhZChjYW52YXMsIG9wdGlvbnMpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgb3B0cyA9IG9wdGlvbnMgfHwge307XG5cbiAgdGhpcy52ZWxvY2l0eUZpbHRlcldlaWdodCA9IG9wdHMudmVsb2NpdHlGaWx0ZXJXZWlnaHQgfHwgMC43O1xuICB0aGlzLm1pbldpZHRoID0gb3B0cy5taW5XaWR0aCB8fCAwLjU7XG4gIHRoaXMubWF4V2lkdGggPSBvcHRzLm1heFdpZHRoIHx8IDIuNTtcbiAgdGhpcy50aHJvdHRsZSA9ICd0aHJvdHRsZScgaW4gb3B0cyA/IG9wdHMudGhyb3R0bGUgOiAxNjsgLy8gaW4gbWlsaXNlY29uZHNcbiAgdGhpcy5taW5EaXN0YW5jZSA9ICdtaW5EaXN0YW5jZScgaW4gb3B0cyA/IG9wdHMubWluRGlzdGFuY2UgOiA1O1xuXG4gIGlmICh0aGlzLnRocm90dGxlKSB7XG4gICAgdGhpcy5fc3Ryb2tlTW92ZVVwZGF0ZSA9IHRocm90dGxlKFNpZ25hdHVyZVBhZC5wcm90b3R5cGUuX3N0cm9rZVVwZGF0ZSwgdGhpcy50aHJvdHRsZSk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fc3Ryb2tlTW92ZVVwZGF0ZSA9IFNpZ25hdHVyZVBhZC5wcm90b3R5cGUuX3N0cm9rZVVwZGF0ZTtcbiAgfVxuXG4gIHRoaXMuZG90U2l6ZSA9IG9wdHMuZG90U2l6ZSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICh0aGlzLm1pbldpZHRoICsgdGhpcy5tYXhXaWR0aCkgLyAyO1xuICB9O1xuICB0aGlzLnBlbkNvbG9yID0gb3B0cy5wZW5Db2xvciB8fCAnYmxhY2snO1xuICB0aGlzLmJhY2tncm91bmRDb2xvciA9IG9wdHMuYmFja2dyb3VuZENvbG9yIHx8ICdyZ2JhKDAsMCwwLDApJztcbiAgdGhpcy5vbkJlZ2luID0gb3B0cy5vbkJlZ2luO1xuICB0aGlzLm9uRW5kID0gb3B0cy5vbkVuZDtcblxuICB0aGlzLl9jYW52YXMgPSBjYW52YXM7XG4gIHRoaXMuX2N0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICB0aGlzLmNsZWFyKCk7XG5cbiAgLy8gV2UgbmVlZCBhZGQgdGhlc2UgaW5saW5lIHNvIHRoZXkgYXJlIGF2YWlsYWJsZSB0byB1bmJpbmQgd2hpbGUgc3RpbGwgaGF2aW5nXG4gIC8vIGFjY2VzcyB0byAnc2VsZicgd2UgY291bGQgdXNlIF8uYmluZCBidXQgaXQncyBub3Qgd29ydGggYWRkaW5nIGEgZGVwZW5kZW5jeS5cbiAgdGhpcy5faGFuZGxlTW91c2VEb3duID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LndoaWNoID09PSAxKSB7XG4gICAgICBzZWxmLl9tb3VzZUJ1dHRvbkRvd24gPSB0cnVlO1xuICAgICAgc2VsZi5fc3Ryb2tlQmVnaW4oZXZlbnQpO1xuICAgIH1cbiAgfTtcblxuICB0aGlzLl9oYW5kbGVNb3VzZU1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoc2VsZi5fbW91c2VCdXR0b25Eb3duKSB7XG4gICAgICBzZWxmLl9zdHJva2VNb3ZlVXBkYXRlKGV2ZW50KTtcbiAgICB9XG4gIH07XG5cbiAgdGhpcy5faGFuZGxlTW91c2VVcCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChldmVudC53aGljaCA9PT0gMSAmJiBzZWxmLl9tb3VzZUJ1dHRvbkRvd24pIHtcbiAgICAgIHNlbGYuX21vdXNlQnV0dG9uRG93biA9IGZhbHNlO1xuICAgICAgc2VsZi5fc3Ryb2tlRW5kKGV2ZW50KTtcbiAgICB9XG4gIH07XG5cbiAgdGhpcy5faGFuZGxlVG91Y2hTdGFydCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChldmVudC50YXJnZXRUb3VjaGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdmFyIHRvdWNoID0gZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF07XG4gICAgICBzZWxmLl9zdHJva2VCZWdpbih0b3VjaCk7XG4gICAgfVxuICB9O1xuXG4gIHRoaXMuX2hhbmRsZVRvdWNoTW92ZSA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIC8vIFByZXZlbnQgc2Nyb2xsaW5nLlxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICB2YXIgdG91Y2ggPSBldmVudC50YXJnZXRUb3VjaGVzWzBdO1xuICAgIHNlbGYuX3N0cm9rZU1vdmVVcGRhdGUodG91Y2gpO1xuICB9O1xuXG4gIHRoaXMuX2hhbmRsZVRvdWNoRW5kID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdmFyIHdhc0NhbnZhc1RvdWNoZWQgPSBldmVudC50YXJnZXQgPT09IHNlbGYuX2NhbnZhcztcbiAgICBpZiAod2FzQ2FudmFzVG91Y2hlZCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHNlbGYuX3N0cm9rZUVuZChldmVudCk7XG4gICAgfVxuICB9O1xuXG4gIC8vIEVuYWJsZSBtb3VzZSBhbmQgdG91Y2ggZXZlbnQgaGFuZGxlcnNcbiAgdGhpcy5vbigpO1xufVxuXG4vLyBQdWJsaWMgbWV0aG9kc1xuU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGN0eCA9IHRoaXMuX2N0eDtcbiAgdmFyIGNhbnZhcyA9IHRoaXMuX2NhbnZhcztcblxuICBjdHguZmlsbFN0eWxlID0gdGhpcy5iYWNrZ3JvdW5kQ29sb3I7XG4gIGN0eC5jbGVhclJlY3QoMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTtcbiAgY3R4LmZpbGxSZWN0KDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XG5cbiAgdGhpcy5fZGF0YSA9IFtdO1xuICB0aGlzLl9yZXNldCgpO1xuICB0aGlzLl9pc0VtcHR5ID0gdHJ1ZTtcbn07XG5cblNpZ25hdHVyZVBhZC5wcm90b3R5cGUuZnJvbURhdGFVUkwgPSBmdW5jdGlvbiAoZGF0YVVybCkge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICB2YXIgaW1hZ2UgPSBuZXcgSW1hZ2UoKTtcbiAgdmFyIHJhdGlvID0gb3B0aW9ucy5yYXRpbyB8fCB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxO1xuICB2YXIgd2lkdGggPSBvcHRpb25zLndpZHRoIHx8IHRoaXMuX2NhbnZhcy53aWR0aCAvIHJhdGlvO1xuICB2YXIgaGVpZ2h0ID0gb3B0aW9ucy5oZWlnaHQgfHwgdGhpcy5fY2FudmFzLmhlaWdodCAvIHJhdGlvO1xuXG4gIHRoaXMuX3Jlc2V0KCk7XG4gIGltYWdlLnNyYyA9IGRhdGFVcmw7XG4gIGltYWdlLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICBfdGhpcy5fY3R4LmRyYXdJbWFnZShpbWFnZSwgMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gIH07XG4gIHRoaXMuX2lzRW1wdHkgPSBmYWxzZTtcbn07XG5cblNpZ25hdHVyZVBhZC5wcm90b3R5cGUudG9EYXRhVVJMID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgdmFyIF9jYW52YXM7XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnaW1hZ2Uvc3ZnK3htbCc6XG4gICAgICByZXR1cm4gdGhpcy5fdG9TVkcoKTtcbiAgICBkZWZhdWx0OlxuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIG9wdGlvbnMgPSBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIG9wdGlvbnNbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gKF9jYW52YXMgPSB0aGlzLl9jYW52YXMpLnRvRGF0YVVSTC5hcHBseShfY2FudmFzLCBbdHlwZV0uY29uY2F0KG9wdGlvbnMpKTtcbiAgfVxufTtcblxuU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5faGFuZGxlTW91c2VFdmVudHMoKTtcbiAgdGhpcy5faGFuZGxlVG91Y2hFdmVudHMoKTtcbn07XG5cblNpZ25hdHVyZVBhZC5wcm90b3R5cGUub2ZmID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl9jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5faGFuZGxlTW91c2VEb3duKTtcbiAgdGhpcy5fY2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX2hhbmRsZU1vdXNlTW92ZSk7XG4gIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLl9oYW5kbGVNb3VzZVVwKTtcblxuICB0aGlzLl9jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMuX2hhbmRsZVRvdWNoU3RhcnQpO1xuICB0aGlzLl9jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5faGFuZGxlVG91Y2hNb3ZlKTtcbiAgdGhpcy5fY2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5faGFuZGxlVG91Y2hFbmQpO1xufTtcblxuU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5faXNFbXB0eTtcbn07XG5cbi8vIFByaXZhdGUgbWV0aG9kc1xuU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5fc3Ryb2tlQmVnaW4gPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgdGhpcy5fZGF0YS5wdXNoKFtdKTtcbiAgdGhpcy5fcmVzZXQoKTtcbiAgdGhpcy5fc3Ryb2tlVXBkYXRlKGV2ZW50KTtcblxuICBpZiAodHlwZW9mIHRoaXMub25CZWdpbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRoaXMub25CZWdpbihldmVudCk7XG4gIH1cbn07XG5cblNpZ25hdHVyZVBhZC5wcm90b3R5cGUuX3N0cm9rZVVwZGF0ZSA9IGZ1bmN0aW9uIChldmVudCkge1xuICB2YXIgeCA9IGV2ZW50LmNsaWVudFg7XG4gIHZhciB5ID0gZXZlbnQuY2xpZW50WTtcblxuICB2YXIgcG9pbnQgPSB0aGlzLl9jcmVhdGVQb2ludCh4LCB5KTtcbiAgdmFyIGxhc3RQb2ludEdyb3VwID0gdGhpcy5fZGF0YVt0aGlzLl9kYXRhLmxlbmd0aCAtIDFdO1xuICB2YXIgbGFzdFBvaW50ID0gbGFzdFBvaW50R3JvdXAgJiYgbGFzdFBvaW50R3JvdXBbbGFzdFBvaW50R3JvdXAubGVuZ3RoIC0gMV07XG4gIHZhciBpc0xhc3RQb2ludFRvb0Nsb3NlID0gbGFzdFBvaW50ICYmIHBvaW50LmRpc3RhbmNlVG8obGFzdFBvaW50KSA8IHRoaXMubWluRGlzdGFuY2U7XG5cbiAgLy8gU2tpcCB0aGlzIHBvaW50IGlmIGl0J3MgdG9vIGNsb3NlIHRvIHRoZSBwcmV2aW91cyBvbmVcbiAgaWYgKCEobGFzdFBvaW50ICYmIGlzTGFzdFBvaW50VG9vQ2xvc2UpKSB7XG4gICAgdmFyIF9hZGRQb2ludCA9IHRoaXMuX2FkZFBvaW50KHBvaW50KSxcbiAgICAgICAgY3VydmUgPSBfYWRkUG9pbnQuY3VydmUsXG4gICAgICAgIHdpZHRocyA9IF9hZGRQb2ludC53aWR0aHM7XG5cbiAgICBpZiAoY3VydmUgJiYgd2lkdGhzKSB7XG4gICAgICB0aGlzLl9kcmF3Q3VydmUoY3VydmUsIHdpZHRocy5zdGFydCwgd2lkdGhzLmVuZCk7XG4gICAgfVxuXG4gICAgdGhpcy5fZGF0YVt0aGlzLl9kYXRhLmxlbmd0aCAtIDFdLnB1c2goe1xuICAgICAgeDogcG9pbnQueCxcbiAgICAgIHk6IHBvaW50LnksXG4gICAgICB0aW1lOiBwb2ludC50aW1lLFxuICAgICAgY29sb3I6IHRoaXMucGVuQ29sb3JcbiAgICB9KTtcbiAgfVxufTtcblxuU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5fc3Ryb2tlRW5kID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gIHZhciBjYW5EcmF3Q3VydmUgPSB0aGlzLnBvaW50cy5sZW5ndGggPiAyO1xuICB2YXIgcG9pbnQgPSB0aGlzLnBvaW50c1swXTsgLy8gUG9pbnQgaW5zdGFuY2VcblxuICBpZiAoIWNhbkRyYXdDdXJ2ZSAmJiBwb2ludCkge1xuICAgIHRoaXMuX2RyYXdEb3QocG9pbnQpO1xuICB9XG5cbiAgaWYgKHBvaW50KSB7XG4gICAgdmFyIGxhc3RQb2ludEdyb3VwID0gdGhpcy5fZGF0YVt0aGlzLl9kYXRhLmxlbmd0aCAtIDFdO1xuICAgIHZhciBsYXN0UG9pbnQgPSBsYXN0UG9pbnRHcm91cFtsYXN0UG9pbnRHcm91cC5sZW5ndGggLSAxXTsgLy8gcGxhaW4gb2JqZWN0XG5cbiAgICAvLyBXaGVuIGRyYXdpbmcgYSBkb3QsIHRoZXJlJ3Mgb25seSBvbmUgcG9pbnQgaW4gYSBncm91cCwgc28gd2l0aG91dCB0aGlzIGNoZWNrXG4gICAgLy8gc3VjaCBncm91cCB3b3VsZCBlbmQgdXAgd2l0aCBleGFjdGx5IHRoZSBzYW1lIDIgcG9pbnRzLlxuICAgIGlmICghcG9pbnQuZXF1YWxzKGxhc3RQb2ludCkpIHtcbiAgICAgIGxhc3RQb2ludEdyb3VwLnB1c2goe1xuICAgICAgICB4OiBwb2ludC54LFxuICAgICAgICB5OiBwb2ludC55LFxuICAgICAgICB0aW1lOiBwb2ludC50aW1lLFxuICAgICAgICBjb2xvcjogdGhpcy5wZW5Db2xvclxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0aGlzLm9uRW5kID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhpcy5vbkVuZChldmVudCk7XG4gIH1cbn07XG5cblNpZ25hdHVyZVBhZC5wcm90b3R5cGUuX2hhbmRsZU1vdXNlRXZlbnRzID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl9tb3VzZUJ1dHRvbkRvd24gPSBmYWxzZTtcblxuICB0aGlzLl9jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5faGFuZGxlTW91c2VEb3duKTtcbiAgdGhpcy5fY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX2hhbmRsZU1vdXNlTW92ZSk7XG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLl9oYW5kbGVNb3VzZVVwKTtcbn07XG5cblNpZ25hdHVyZVBhZC5wcm90b3R5cGUuX2hhbmRsZVRvdWNoRXZlbnRzID0gZnVuY3Rpb24gKCkge1xuICAvLyBQYXNzIHRvdWNoIGV2ZW50cyB0byBjYW52YXMgZWxlbWVudCBvbiBtb2JpbGUgSUUxMSBhbmQgRWRnZS5cbiAgdGhpcy5fY2FudmFzLnN0eWxlLm1zVG91Y2hBY3Rpb24gPSAnbm9uZSc7XG4gIHRoaXMuX2NhbnZhcy5zdHlsZS50b3VjaEFjdGlvbiA9ICdub25lJztcblxuICB0aGlzLl9jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMuX2hhbmRsZVRvdWNoU3RhcnQpO1xuICB0aGlzLl9jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5faGFuZGxlVG91Y2hNb3ZlKTtcbiAgdGhpcy5fY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5faGFuZGxlVG91Y2hFbmQpO1xufTtcblxuU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5fcmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMucG9pbnRzID0gW107XG4gIHRoaXMuX2xhc3RWZWxvY2l0eSA9IDA7XG4gIHRoaXMuX2xhc3RXaWR0aCA9ICh0aGlzLm1pbldpZHRoICsgdGhpcy5tYXhXaWR0aCkgLyAyO1xuICB0aGlzLl9jdHguZmlsbFN0eWxlID0gdGhpcy5wZW5Db2xvcjtcbn07XG5cblNpZ25hdHVyZVBhZC5wcm90b3R5cGUuX2NyZWF0ZVBvaW50ID0gZnVuY3Rpb24gKHgsIHksIHRpbWUpIHtcbiAgdmFyIHJlY3QgPSB0aGlzLl9jYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgcmV0dXJuIG5ldyBQb2ludCh4IC0gcmVjdC5sZWZ0LCB5IC0gcmVjdC50b3AsIHRpbWUgfHwgbmV3IERhdGUoKS5nZXRUaW1lKCkpO1xufTtcblxuU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5fYWRkUG9pbnQgPSBmdW5jdGlvbiAocG9pbnQpIHtcbiAgdmFyIHBvaW50cyA9IHRoaXMucG9pbnRzO1xuICB2YXIgdG1wID0gdm9pZCAwO1xuXG4gIHBvaW50cy5wdXNoKHBvaW50KTtcblxuICBpZiAocG9pbnRzLmxlbmd0aCA+IDIpIHtcbiAgICAvLyBUbyByZWR1Y2UgdGhlIGluaXRpYWwgbGFnIG1ha2UgaXQgd29yayB3aXRoIDMgcG9pbnRzXG4gICAgLy8gYnkgY29weWluZyB0aGUgZmlyc3QgcG9pbnQgdG8gdGhlIGJlZ2lubmluZy5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMykgcG9pbnRzLnVuc2hpZnQocG9pbnRzWzBdKTtcblxuICAgIHRtcCA9IHRoaXMuX2NhbGN1bGF0ZUN1cnZlQ29udHJvbFBvaW50cyhwb2ludHNbMF0sIHBvaW50c1sxXSwgcG9pbnRzWzJdKTtcbiAgICB2YXIgYzIgPSB0bXAuYzI7XG4gICAgdG1wID0gdGhpcy5fY2FsY3VsYXRlQ3VydmVDb250cm9sUG9pbnRzKHBvaW50c1sxXSwgcG9pbnRzWzJdLCBwb2ludHNbM10pO1xuICAgIHZhciBjMyA9IHRtcC5jMTtcbiAgICB2YXIgY3VydmUgPSBuZXcgQmV6aWVyKHBvaW50c1sxXSwgYzIsIGMzLCBwb2ludHNbMl0pO1xuICAgIHZhciB3aWR0aHMgPSB0aGlzLl9jYWxjdWxhdGVDdXJ2ZVdpZHRocyhjdXJ2ZSk7XG5cbiAgICAvLyBSZW1vdmUgdGhlIGZpcnN0IGVsZW1lbnQgZnJvbSB0aGUgbGlzdCxcbiAgICAvLyBzbyB0aGF0IHdlIGFsd2F5cyBoYXZlIG5vIG1vcmUgdGhhbiA0IHBvaW50cyBpbiBwb2ludHMgYXJyYXkuXG4gICAgcG9pbnRzLnNoaWZ0KCk7XG5cbiAgICByZXR1cm4geyBjdXJ2ZTogY3VydmUsIHdpZHRoczogd2lkdGhzIH07XG4gIH1cblxuICByZXR1cm4ge307XG59O1xuXG5TaWduYXR1cmVQYWQucHJvdG90eXBlLl9jYWxjdWxhdGVDdXJ2ZUNvbnRyb2xQb2ludHMgPSBmdW5jdGlvbiAoczEsIHMyLCBzMykge1xuICB2YXIgZHgxID0gczEueCAtIHMyLng7XG4gIHZhciBkeTEgPSBzMS55IC0gczIueTtcbiAgdmFyIGR4MiA9IHMyLnggLSBzMy54O1xuICB2YXIgZHkyID0gczIueSAtIHMzLnk7XG5cbiAgdmFyIG0xID0geyB4OiAoczEueCArIHMyLngpIC8gMi4wLCB5OiAoczEueSArIHMyLnkpIC8gMi4wIH07XG4gIHZhciBtMiA9IHsgeDogKHMyLnggKyBzMy54KSAvIDIuMCwgeTogKHMyLnkgKyBzMy55KSAvIDIuMCB9O1xuXG4gIHZhciBsMSA9IE1hdGguc3FydChkeDEgKiBkeDEgKyBkeTEgKiBkeTEpO1xuICB2YXIgbDIgPSBNYXRoLnNxcnQoZHgyICogZHgyICsgZHkyICogZHkyKTtcblxuICB2YXIgZHhtID0gbTEueCAtIG0yLng7XG4gIHZhciBkeW0gPSBtMS55IC0gbTIueTtcblxuICB2YXIgayA9IGwyIC8gKGwxICsgbDIpO1xuICB2YXIgY20gPSB7IHg6IG0yLnggKyBkeG0gKiBrLCB5OiBtMi55ICsgZHltICogayB9O1xuXG4gIHZhciB0eCA9IHMyLnggLSBjbS54O1xuICB2YXIgdHkgPSBzMi55IC0gY20ueTtcblxuICByZXR1cm4ge1xuICAgIGMxOiBuZXcgUG9pbnQobTEueCArIHR4LCBtMS55ICsgdHkpLFxuICAgIGMyOiBuZXcgUG9pbnQobTIueCArIHR4LCBtMi55ICsgdHkpXG4gIH07XG59O1xuXG5TaWduYXR1cmVQYWQucHJvdG90eXBlLl9jYWxjdWxhdGVDdXJ2ZVdpZHRocyA9IGZ1bmN0aW9uIChjdXJ2ZSkge1xuICB2YXIgc3RhcnRQb2ludCA9IGN1cnZlLnN0YXJ0UG9pbnQ7XG4gIHZhciBlbmRQb2ludCA9IGN1cnZlLmVuZFBvaW50O1xuICB2YXIgd2lkdGhzID0geyBzdGFydDogbnVsbCwgZW5kOiBudWxsIH07XG5cbiAgdmFyIHZlbG9jaXR5ID0gdGhpcy52ZWxvY2l0eUZpbHRlcldlaWdodCAqIGVuZFBvaW50LnZlbG9jaXR5RnJvbShzdGFydFBvaW50KSArICgxIC0gdGhpcy52ZWxvY2l0eUZpbHRlcldlaWdodCkgKiB0aGlzLl9sYXN0VmVsb2NpdHk7XG5cbiAgdmFyIG5ld1dpZHRoID0gdGhpcy5fc3Ryb2tlV2lkdGgodmVsb2NpdHkpO1xuXG4gIHdpZHRocy5zdGFydCA9IHRoaXMuX2xhc3RXaWR0aDtcbiAgd2lkdGhzLmVuZCA9IG5ld1dpZHRoO1xuXG4gIHRoaXMuX2xhc3RWZWxvY2l0eSA9IHZlbG9jaXR5O1xuICB0aGlzLl9sYXN0V2lkdGggPSBuZXdXaWR0aDtcblxuICByZXR1cm4gd2lkdGhzO1xufTtcblxuU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5fc3Ryb2tlV2lkdGggPSBmdW5jdGlvbiAodmVsb2NpdHkpIHtcbiAgcmV0dXJuIE1hdGgubWF4KHRoaXMubWF4V2lkdGggLyAodmVsb2NpdHkgKyAxKSwgdGhpcy5taW5XaWR0aCk7XG59O1xuXG5TaWduYXR1cmVQYWQucHJvdG90eXBlLl9kcmF3UG9pbnQgPSBmdW5jdGlvbiAoeCwgeSwgc2l6ZSkge1xuICB2YXIgY3R4ID0gdGhpcy5fY3R4O1xuXG4gIGN0eC5tb3ZlVG8oeCwgeSk7XG4gIGN0eC5hcmMoeCwgeSwgc2l6ZSwgMCwgMiAqIE1hdGguUEksIGZhbHNlKTtcbiAgdGhpcy5faXNFbXB0eSA9IGZhbHNlO1xufTtcblxuU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5fZHJhd0N1cnZlID0gZnVuY3Rpb24gKGN1cnZlLCBzdGFydFdpZHRoLCBlbmRXaWR0aCkge1xuICB2YXIgY3R4ID0gdGhpcy5fY3R4O1xuICB2YXIgd2lkdGhEZWx0YSA9IGVuZFdpZHRoIC0gc3RhcnRXaWR0aDtcbiAgdmFyIGRyYXdTdGVwcyA9IE1hdGguZmxvb3IoY3VydmUubGVuZ3RoKCkpO1xuXG4gIGN0eC5iZWdpblBhdGgoKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGRyYXdTdGVwczsgaSArPSAxKSB7XG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBCZXppZXIgKHgsIHkpIGNvb3JkaW5hdGUgZm9yIHRoaXMgc3RlcC5cbiAgICB2YXIgdCA9IGkgLyBkcmF3U3RlcHM7XG4gICAgdmFyIHR0ID0gdCAqIHQ7XG4gICAgdmFyIHR0dCA9IHR0ICogdDtcbiAgICB2YXIgdSA9IDEgLSB0O1xuICAgIHZhciB1dSA9IHUgKiB1O1xuICAgIHZhciB1dXUgPSB1dSAqIHU7XG5cbiAgICB2YXIgeCA9IHV1dSAqIGN1cnZlLnN0YXJ0UG9pbnQueDtcbiAgICB4ICs9IDMgKiB1dSAqIHQgKiBjdXJ2ZS5jb250cm9sMS54O1xuICAgIHggKz0gMyAqIHUgKiB0dCAqIGN1cnZlLmNvbnRyb2wyLng7XG4gICAgeCArPSB0dHQgKiBjdXJ2ZS5lbmRQb2ludC54O1xuXG4gICAgdmFyIHkgPSB1dXUgKiBjdXJ2ZS5zdGFydFBvaW50Lnk7XG4gICAgeSArPSAzICogdXUgKiB0ICogY3VydmUuY29udHJvbDEueTtcbiAgICB5ICs9IDMgKiB1ICogdHQgKiBjdXJ2ZS5jb250cm9sMi55O1xuICAgIHkgKz0gdHR0ICogY3VydmUuZW5kUG9pbnQueTtcblxuICAgIHZhciB3aWR0aCA9IHN0YXJ0V2lkdGggKyB0dHQgKiB3aWR0aERlbHRhO1xuICAgIHRoaXMuX2RyYXdQb2ludCh4LCB5LCB3aWR0aCk7XG4gIH1cblxuICBjdHguY2xvc2VQYXRoKCk7XG4gIGN0eC5maWxsKCk7XG59O1xuXG5TaWduYXR1cmVQYWQucHJvdG90eXBlLl9kcmF3RG90ID0gZnVuY3Rpb24gKHBvaW50KSB7XG4gIHZhciBjdHggPSB0aGlzLl9jdHg7XG4gIHZhciB3aWR0aCA9IHR5cGVvZiB0aGlzLmRvdFNpemUgPT09ICdmdW5jdGlvbicgPyB0aGlzLmRvdFNpemUoKSA6IHRoaXMuZG90U2l6ZTtcblxuICBjdHguYmVnaW5QYXRoKCk7XG4gIHRoaXMuX2RyYXdQb2ludChwb2ludC54LCBwb2ludC55LCB3aWR0aCk7XG4gIGN0eC5jbG9zZVBhdGgoKTtcbiAgY3R4LmZpbGwoKTtcbn07XG5cblNpZ25hdHVyZVBhZC5wcm90b3R5cGUuX2Zyb21EYXRhID0gZnVuY3Rpb24gKHBvaW50R3JvdXBzLCBkcmF3Q3VydmUsIGRyYXdEb3QpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludEdyb3Vwcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIHZhciBncm91cCA9IHBvaW50R3JvdXBzW2ldO1xuXG4gICAgaWYgKGdyb3VwLmxlbmd0aCA+IDEpIHtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZ3JvdXAubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgdmFyIHJhd1BvaW50ID0gZ3JvdXBbal07XG4gICAgICAgIHZhciBwb2ludCA9IG5ldyBQb2ludChyYXdQb2ludC54LCByYXdQb2ludC55LCByYXdQb2ludC50aW1lKTtcbiAgICAgICAgdmFyIGNvbG9yID0gcmF3UG9pbnQuY29sb3I7XG5cbiAgICAgICAgaWYgKGogPT09IDApIHtcbiAgICAgICAgICAvLyBGaXJzdCBwb2ludCBpbiBhIGdyb3VwLiBOb3RoaW5nIHRvIGRyYXcgeWV0LlxuXG4gICAgICAgICAgLy8gQWxsIHBvaW50cyBpbiB0aGUgZ3JvdXAgaGF2ZSB0aGUgc2FtZSBjb2xvciwgc28gaXQncyBlbm91Z2ggdG8gc2V0XG4gICAgICAgICAgLy8gcGVuQ29sb3IganVzdCBhdCB0aGUgYmVnaW5uaW5nLlxuICAgICAgICAgIHRoaXMucGVuQ29sb3IgPSBjb2xvcjtcbiAgICAgICAgICB0aGlzLl9yZXNldCgpO1xuXG4gICAgICAgICAgdGhpcy5fYWRkUG9pbnQocG9pbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKGogIT09IGdyb3VwLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAvLyBNaWRkbGUgcG9pbnQgaW4gYSBncm91cC5cbiAgICAgICAgICB2YXIgX2FkZFBvaW50MiA9IHRoaXMuX2FkZFBvaW50KHBvaW50KSxcbiAgICAgICAgICAgICAgY3VydmUgPSBfYWRkUG9pbnQyLmN1cnZlLFxuICAgICAgICAgICAgICB3aWR0aHMgPSBfYWRkUG9pbnQyLndpZHRocztcblxuICAgICAgICAgIGlmIChjdXJ2ZSAmJiB3aWR0aHMpIHtcbiAgICAgICAgICAgIGRyYXdDdXJ2ZShjdXJ2ZSwgd2lkdGhzLCBjb2xvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIExhc3QgcG9pbnQgaW4gYSBncm91cC4gRG8gbm90aGluZy5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9yZXNldCgpO1xuICAgICAgdmFyIF9yYXdQb2ludCA9IGdyb3VwWzBdO1xuICAgICAgZHJhd0RvdChfcmF3UG9pbnQpO1xuICAgIH1cbiAgfVxufTtcblxuU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5fdG9TVkcgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gIHZhciBwb2ludEdyb3VwcyA9IHRoaXMuX2RhdGE7XG4gIHZhciBjYW52YXMgPSB0aGlzLl9jYW52YXM7XG4gIHZhciByYXRpbyA9IE1hdGgubWF4KHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDEsIDEpO1xuICB2YXIgbWluWCA9IDA7XG4gIHZhciBtaW5ZID0gMDtcbiAgdmFyIG1heFggPSBjYW52YXMud2lkdGggLyByYXRpbztcbiAgdmFyIG1heFkgPSBjYW52YXMuaGVpZ2h0IC8gcmF0aW87XG4gIHZhciBzdmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3N2ZycpO1xuXG4gIHN2Zy5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnd2lkdGgnLCBjYW52YXMud2lkdGgpO1xuICBzdmcuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2hlaWdodCcsIGNhbnZhcy5oZWlnaHQpO1xuXG4gIHRoaXMuX2Zyb21EYXRhKHBvaW50R3JvdXBzLCBmdW5jdGlvbiAoY3VydmUsIHdpZHRocywgY29sb3IpIHtcbiAgICB2YXIgcGF0aCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3BhdGgnKTtcblxuICAgIC8vIE5lZWQgdG8gY2hlY2sgY3VydmUgZm9yIE5hTiB2YWx1ZXMsIHRoZXNlIHBvcCB1cCB3aGVuIGRyYXdpbmdcbiAgICAvLyBsaW5lcyBvbiB0aGUgY2FudmFzIHRoYXQgYXJlIG5vdCBjb250aW51b3VzLiBFLmcuIFNoYXJwIGNvcm5lcnNcbiAgICAvLyBvciBzdG9wcGluZyBtaWQtc3Ryb2tlIGFuZCB0aGFuIGNvbnRpbnVpbmcgd2l0aG91dCBsaWZ0aW5nIG1vdXNlLlxuICAgIGlmICghaXNOYU4oY3VydmUuY29udHJvbDEueCkgJiYgIWlzTmFOKGN1cnZlLmNvbnRyb2wxLnkpICYmICFpc05hTihjdXJ2ZS5jb250cm9sMi54KSAmJiAhaXNOYU4oY3VydmUuY29udHJvbDIueSkpIHtcbiAgICAgIHZhciBhdHRyID0gJ00gJyArIGN1cnZlLnN0YXJ0UG9pbnQueC50b0ZpeGVkKDMpICsgJywnICsgY3VydmUuc3RhcnRQb2ludC55LnRvRml4ZWQoMykgKyAnICcgKyAoJ0MgJyArIGN1cnZlLmNvbnRyb2wxLngudG9GaXhlZCgzKSArICcsJyArIGN1cnZlLmNvbnRyb2wxLnkudG9GaXhlZCgzKSArICcgJykgKyAoY3VydmUuY29udHJvbDIueC50b0ZpeGVkKDMpICsgJywnICsgY3VydmUuY29udHJvbDIueS50b0ZpeGVkKDMpICsgJyAnKSArIChjdXJ2ZS5lbmRQb2ludC54LnRvRml4ZWQoMykgKyAnLCcgKyBjdXJ2ZS5lbmRQb2ludC55LnRvRml4ZWQoMykpO1xuXG4gICAgICBwYXRoLnNldEF0dHJpYnV0ZSgnZCcsIGF0dHIpO1xuICAgICAgcGF0aC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS13aWR0aCcsICh3aWR0aHMuZW5kICogMi4yNSkudG9GaXhlZCgzKSk7XG4gICAgICBwYXRoLnNldEF0dHJpYnV0ZSgnc3Ryb2tlJywgY29sb3IpO1xuICAgICAgcGF0aC5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAnbm9uZScpO1xuICAgICAgcGF0aC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS1saW5lY2FwJywgJ3JvdW5kJyk7XG5cbiAgICAgIHN2Zy5hcHBlbmRDaGlsZChwYXRoKTtcbiAgICB9XG4gIH0sIGZ1bmN0aW9uIChyYXdQb2ludCkge1xuICAgIHZhciBjaXJjbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjaXJjbGUnKTtcbiAgICB2YXIgZG90U2l6ZSA9IHR5cGVvZiBfdGhpczIuZG90U2l6ZSA9PT0gJ2Z1bmN0aW9uJyA/IF90aGlzMi5kb3RTaXplKCkgOiBfdGhpczIuZG90U2l6ZTtcbiAgICBjaXJjbGUuc2V0QXR0cmlidXRlKCdyJywgZG90U2l6ZSk7XG4gICAgY2lyY2xlLnNldEF0dHJpYnV0ZSgnY3gnLCByYXdQb2ludC54KTtcbiAgICBjaXJjbGUuc2V0QXR0cmlidXRlKCdjeScsIHJhd1BvaW50LnkpO1xuICAgIGNpcmNsZS5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCByYXdQb2ludC5jb2xvcik7XG5cbiAgICBzdmcuYXBwZW5kQ2hpbGQoY2lyY2xlKTtcbiAgfSk7XG5cbiAgdmFyIHByZWZpeCA9ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCc7XG4gIHZhciBoZWFkZXIgPSAnPHN2ZycgKyAnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIicgKyAnIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiJyArICgnIHZpZXdCb3g9XCInICsgbWluWCArICcgJyArIG1pblkgKyAnICcgKyBtYXhYICsgJyAnICsgbWF4WSArICdcIicpICsgKCcgd2lkdGg9XCInICsgbWF4WCArICdcIicpICsgKCcgaGVpZ2h0PVwiJyArIG1heFkgKyAnXCInKSArICc+JztcbiAgdmFyIGJvZHkgPSBzdmcuaW5uZXJIVE1MO1xuXG4gIC8vIElFIGhhY2sgZm9yIG1pc3NpbmcgaW5uZXJIVE1MIHByb3BlcnR5IG9uIFNWR0VsZW1lbnRcbiAgaWYgKGJvZHkgPT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBkdW1teSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2R1bW15Jyk7XG4gICAgdmFyIG5vZGVzID0gc3ZnLmNoaWxkTm9kZXM7XG4gICAgZHVtbXkuaW5uZXJIVE1MID0gJyc7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBkdW1teS5hcHBlbmRDaGlsZChub2Rlc1tpXS5jbG9uZU5vZGUodHJ1ZSkpO1xuICAgIH1cblxuICAgIGJvZHkgPSBkdW1teS5pbm5lckhUTUw7XG4gIH1cblxuICB2YXIgZm9vdGVyID0gJzwvc3ZnPic7XG4gIHZhciBkYXRhID0gaGVhZGVyICsgYm9keSArIGZvb3RlcjtcblxuICByZXR1cm4gcHJlZml4ICsgYnRvYShkYXRhKTtcbn07XG5cblNpZ25hdHVyZVBhZC5wcm90b3R5cGUuZnJvbURhdGEgPSBmdW5jdGlvbiAocG9pbnRHcm91cHMpIHtcbiAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgdGhpcy5jbGVhcigpO1xuXG4gIHRoaXMuX2Zyb21EYXRhKHBvaW50R3JvdXBzLCBmdW5jdGlvbiAoY3VydmUsIHdpZHRocykge1xuICAgIHJldHVybiBfdGhpczMuX2RyYXdDdXJ2ZShjdXJ2ZSwgd2lkdGhzLnN0YXJ0LCB3aWR0aHMuZW5kKTtcbiAgfSwgZnVuY3Rpb24gKHJhd1BvaW50KSB7XG4gICAgcmV0dXJuIF90aGlzMy5fZHJhd0RvdChyYXdQb2ludCk7XG4gIH0pO1xuXG4gIHRoaXMuX2RhdGEgPSBwb2ludEdyb3Vwcztcbn07XG5cblNpZ25hdHVyZVBhZC5wcm90b3R5cGUudG9EYXRhID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5fZGF0YTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFNpZ25hdHVyZVBhZDtcbiIsIi8qKiFcbiAqIFNvcnRhYmxlIDEuMTMuMFxuICogQGF1dGhvclx0UnViYVhhICAgPHRyYXNoQHJ1YmF4YS5vcmc+XG4gKiBAYXV0aG9yXHRvd2VubSAgICA8b3dlbjIzMzU1QGdtYWlsLmNvbT5cbiAqIEBsaWNlbnNlIE1JVFxuICovXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHtcbiAgICBfdHlwZW9mID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgcmV0dXJuIHR5cGVvZiBvYmo7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBfdHlwZW9mID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBfdHlwZW9mKG9iaik7XG59XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xuXG4gIHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9O1xuICAgIHZhciBvd25LZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcblxuICAgIGlmICh0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgb3duS2V5cyA9IG93bktleXMuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKS5maWx0ZXIoZnVuY3Rpb24gKHN5bSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIHN5bSkuZW51bWVyYWJsZTtcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBvd25LZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcbiAgdmFyIGtleSwgaTtcblxuICBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IHNvdXJjZUtleXNbaV07XG4gICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHtcbiAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307XG5cbiAgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpO1xuXG4gIHZhciBrZXksIGk7XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldO1xuICAgICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7XG4gICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTtcbn1cblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIGFycjJbaV0gPSBhcnJbaV07XG5cbiAgICByZXR1cm4gYXJyMjtcbiAgfVxufVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgaWYgKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoaXRlcikgfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGl0ZXIpID09PSBcIltvYmplY3QgQXJndW1lbnRzXVwiKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTtcbn1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2VcIik7XG59XG5cbnZhciB2ZXJzaW9uID0gXCIxLjEzLjBcIjtcblxuZnVuY3Rpb24gdXNlckFnZW50KHBhdHRlcm4pIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5uYXZpZ2F0b3IpIHtcbiAgICByZXR1cm4gISFcbiAgICAvKkBfX1BVUkVfXyovXG4gICAgbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaChwYXR0ZXJuKTtcbiAgfVxufVxuXG52YXIgSUUxMU9yTGVzcyA9IHVzZXJBZ2VudCgvKD86VHJpZGVudC4qcnZbIDpdPzExXFwufG1zaWV8aWVtb2JpbGV8V2luZG93cyBQaG9uZSkvaSk7XG52YXIgRWRnZSA9IHVzZXJBZ2VudCgvRWRnZS9pKTtcbnZhciBGaXJlRm94ID0gdXNlckFnZW50KC9maXJlZm94L2kpO1xudmFyIFNhZmFyaSA9IHVzZXJBZ2VudCgvc2FmYXJpL2kpICYmICF1c2VyQWdlbnQoL2Nocm9tZS9pKSAmJiAhdXNlckFnZW50KC9hbmRyb2lkL2kpO1xudmFyIElPUyA9IHVzZXJBZ2VudCgvaVAoYWR8b2R8aG9uZSkvaSk7XG52YXIgQ2hyb21lRm9yQW5kcm9pZCA9IHVzZXJBZ2VudCgvY2hyb21lL2kpICYmIHVzZXJBZ2VudCgvYW5kcm9pZC9pKTtcblxudmFyIGNhcHR1cmVNb2RlID0ge1xuICBjYXB0dXJlOiBmYWxzZSxcbiAgcGFzc2l2ZTogZmFsc2Vcbn07XG5cbmZ1bmN0aW9uIG9uKGVsLCBldmVudCwgZm4pIHtcbiAgZWwuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgZm4sICFJRTExT3JMZXNzICYmIGNhcHR1cmVNb2RlKTtcbn1cblxuZnVuY3Rpb24gb2ZmKGVsLCBldmVudCwgZm4pIHtcbiAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgZm4sICFJRTExT3JMZXNzICYmIGNhcHR1cmVNb2RlKTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hlcyhcbi8qKkhUTUxFbGVtZW50Ki9cbmVsLFxuLyoqU3RyaW5nKi9cbnNlbGVjdG9yKSB7XG4gIGlmICghc2VsZWN0b3IpIHJldHVybjtcbiAgc2VsZWN0b3JbMF0gPT09ICc+JyAmJiAoc2VsZWN0b3IgPSBzZWxlY3Rvci5zdWJzdHJpbmcoMSkpO1xuXG4gIGlmIChlbCkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoZWwubWF0Y2hlcykge1xuICAgICAgICByZXR1cm4gZWwubWF0Y2hlcyhzZWxlY3Rvcik7XG4gICAgICB9IGVsc2UgaWYgKGVsLm1zTWF0Y2hlc1NlbGVjdG9yKSB7XG4gICAgICAgIHJldHVybiBlbC5tc01hdGNoZXNTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgICB9IGVsc2UgaWYgKGVsLndlYmtpdE1hdGNoZXNTZWxlY3Rvcikge1xuICAgICAgICByZXR1cm4gZWwud2Via2l0TWF0Y2hlc1NlbGVjdG9yKHNlbGVjdG9yKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRQYXJlbnRPckhvc3QoZWwpIHtcbiAgcmV0dXJuIGVsLmhvc3QgJiYgZWwgIT09IGRvY3VtZW50ICYmIGVsLmhvc3Qubm9kZVR5cGUgPyBlbC5ob3N0IDogZWwucGFyZW50Tm9kZTtcbn1cblxuZnVuY3Rpb24gY2xvc2VzdChcbi8qKkhUTUxFbGVtZW50Ki9cbmVsLFxuLyoqU3RyaW5nKi9cbnNlbGVjdG9yLFxuLyoqSFRNTEVsZW1lbnQqL1xuY3R4LCBpbmNsdWRlQ1RYKSB7XG4gIGlmIChlbCkge1xuICAgIGN0eCA9IGN0eCB8fCBkb2N1bWVudDtcblxuICAgIGRvIHtcbiAgICAgIGlmIChzZWxlY3RvciAhPSBudWxsICYmIChzZWxlY3RvclswXSA9PT0gJz4nID8gZWwucGFyZW50Tm9kZSA9PT0gY3R4ICYmIG1hdGNoZXMoZWwsIHNlbGVjdG9yKSA6IG1hdGNoZXMoZWwsIHNlbGVjdG9yKSkgfHwgaW5jbHVkZUNUWCAmJiBlbCA9PT0gY3R4KSB7XG4gICAgICAgIHJldHVybiBlbDtcbiAgICAgIH1cblxuICAgICAgaWYgKGVsID09PSBjdHgpIGJyZWFrO1xuICAgICAgLyoganNoaW50IGJvc3M6dHJ1ZSAqL1xuICAgIH0gd2hpbGUgKGVsID0gZ2V0UGFyZW50T3JIb3N0KGVsKSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxudmFyIFJfU1BBQ0UgPSAvXFxzKy9nO1xuXG5mdW5jdGlvbiB0b2dnbGVDbGFzcyhlbCwgbmFtZSwgc3RhdGUpIHtcbiAgaWYgKGVsICYmIG5hbWUpIHtcbiAgICBpZiAoZWwuY2xhc3NMaXN0KSB7XG4gICAgICBlbC5jbGFzc0xpc3Rbc3RhdGUgPyAnYWRkJyA6ICdyZW1vdmUnXShuYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGNsYXNzTmFtZSA9ICgnICcgKyBlbC5jbGFzc05hbWUgKyAnICcpLnJlcGxhY2UoUl9TUEFDRSwgJyAnKS5yZXBsYWNlKCcgJyArIG5hbWUgKyAnICcsICcgJyk7XG4gICAgICBlbC5jbGFzc05hbWUgPSAoY2xhc3NOYW1lICsgKHN0YXRlID8gJyAnICsgbmFtZSA6ICcnKSkucmVwbGFjZShSX1NQQUNFLCAnICcpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjc3MoZWwsIHByb3AsIHZhbCkge1xuICB2YXIgc3R5bGUgPSBlbCAmJiBlbC5zdHlsZTtcblxuICBpZiAoc3R5bGUpIHtcbiAgICBpZiAodmFsID09PSB2b2lkIDApIHtcbiAgICAgIGlmIChkb2N1bWVudC5kZWZhdWx0VmlldyAmJiBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKSB7XG4gICAgICAgIHZhbCA9IGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZWwsICcnKTtcbiAgICAgIH0gZWxzZSBpZiAoZWwuY3VycmVudFN0eWxlKSB7XG4gICAgICAgIHZhbCA9IGVsLmN1cnJlbnRTdHlsZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb3AgPT09IHZvaWQgMCA/IHZhbCA6IHZhbFtwcm9wXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCEocHJvcCBpbiBzdHlsZSkgJiYgcHJvcC5pbmRleE9mKCd3ZWJraXQnKSA9PT0gLTEpIHtcbiAgICAgICAgcHJvcCA9ICctd2Via2l0LScgKyBwcm9wO1xuICAgICAgfVxuXG4gICAgICBzdHlsZVtwcm9wXSA9IHZhbCArICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJyA/ICcnIDogJ3B4Jyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1hdHJpeChlbCwgc2VsZk9ubHkpIHtcbiAgdmFyIGFwcGxpZWRUcmFuc2Zvcm1zID0gJyc7XG5cbiAgaWYgKHR5cGVvZiBlbCA9PT0gJ3N0cmluZycpIHtcbiAgICBhcHBsaWVkVHJhbnNmb3JtcyA9IGVsO1xuICB9IGVsc2Uge1xuICAgIGRvIHtcbiAgICAgIHZhciB0cmFuc2Zvcm0gPSBjc3MoZWwsICd0cmFuc2Zvcm0nKTtcblxuICAgICAgaWYgKHRyYW5zZm9ybSAmJiB0cmFuc2Zvcm0gIT09ICdub25lJykge1xuICAgICAgICBhcHBsaWVkVHJhbnNmb3JtcyA9IHRyYW5zZm9ybSArICcgJyArIGFwcGxpZWRUcmFuc2Zvcm1zO1xuICAgICAgfVxuICAgICAgLyoganNoaW50IGJvc3M6dHJ1ZSAqL1xuXG4gICAgfSB3aGlsZSAoIXNlbGZPbmx5ICYmIChlbCA9IGVsLnBhcmVudE5vZGUpKTtcbiAgfVxuXG4gIHZhciBtYXRyaXhGbiA9IHdpbmRvdy5ET01NYXRyaXggfHwgd2luZG93LldlYktpdENTU01hdHJpeCB8fCB3aW5kb3cuQ1NTTWF0cml4IHx8IHdpbmRvdy5NU0NTU01hdHJpeDtcbiAgLypqc2hpbnQgLVcwNTYgKi9cblxuICByZXR1cm4gbWF0cml4Rm4gJiYgbmV3IG1hdHJpeEZuKGFwcGxpZWRUcmFuc2Zvcm1zKTtcbn1cblxuZnVuY3Rpb24gZmluZChjdHgsIHRhZ05hbWUsIGl0ZXJhdG9yKSB7XG4gIGlmIChjdHgpIHtcbiAgICB2YXIgbGlzdCA9IGN0eC5nZXRFbGVtZW50c0J5VGFnTmFtZSh0YWdOYW1lKSxcbiAgICAgICAgaSA9IDAsXG4gICAgICAgIG4gPSBsaXN0Lmxlbmd0aDtcblxuICAgIGlmIChpdGVyYXRvcikge1xuICAgICAgZm9yICg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgaXRlcmF0b3IobGlzdFtpXSwgaSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpc3Q7XG4gIH1cblxuICByZXR1cm4gW107XG59XG5cbmZ1bmN0aW9uIGdldFdpbmRvd1Njcm9sbGluZ0VsZW1lbnQoKSB7XG4gIHZhciBzY3JvbGxpbmdFbGVtZW50ID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudDtcblxuICBpZiAoc2Nyb2xsaW5nRWxlbWVudCkge1xuICAgIHJldHVybiBzY3JvbGxpbmdFbGVtZW50O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIH1cbn1cbi8qKlxuICogUmV0dXJucyB0aGUgXCJib3VuZGluZyBjbGllbnQgcmVjdFwiIG9mIGdpdmVuIGVsZW1lbnRcbiAqIEBwYXJhbSAge0hUTUxFbGVtZW50fSBlbCAgICAgICAgICAgICAgICAgICAgICAgVGhlIGVsZW1lbnQgd2hvc2UgYm91bmRpbmdDbGllbnRSZWN0IGlzIHdhbnRlZFxuICogQHBhcmFtICB7W0Jvb2xlYW5dfSByZWxhdGl2ZVRvQ29udGFpbmluZ0Jsb2NrICBXaGV0aGVyIHRoZSByZWN0IHNob3VsZCBiZSByZWxhdGl2ZSB0byB0aGUgY29udGFpbmluZyBibG9jayBvZiAoaW5jbHVkaW5nKSB0aGUgY29udGFpbmVyXG4gKiBAcGFyYW0gIHtbQm9vbGVhbl19IHJlbGF0aXZlVG9Ob25TdGF0aWNQYXJlbnQgIFdoZXRoZXIgdGhlIHJlY3Qgc2hvdWxkIGJlIHJlbGF0aXZlIHRvIHRoZSByZWxhdGl2ZSBwYXJlbnQgb2YgKGluY2x1ZGluZykgdGhlIGNvbnRhaWVuclxuICogQHBhcmFtICB7W0Jvb2xlYW5dfSB1bmRvU2NhbGUgICAgICAgICAgICAgICAgICBXaGV0aGVyIHRoZSBjb250YWluZXIncyBzY2FsZSgpIHNob3VsZCBiZSB1bmRvbmVcbiAqIEBwYXJhbSAge1tIVE1MRWxlbWVudF19IGNvbnRhaW5lciAgICAgICAgICAgICAgVGhlIHBhcmVudCB0aGUgZWxlbWVudCB3aWxsIGJlIHBsYWNlZCBpblxuICogQHJldHVybiB7T2JqZWN0fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYm91bmRpbmdDbGllbnRSZWN0IG9mIGVsLCB3aXRoIHNwZWNpZmllZCBhZGp1c3RtZW50c1xuICovXG5cblxuZnVuY3Rpb24gZ2V0UmVjdChlbCwgcmVsYXRpdmVUb0NvbnRhaW5pbmdCbG9jaywgcmVsYXRpdmVUb05vblN0YXRpY1BhcmVudCwgdW5kb1NjYWxlLCBjb250YWluZXIpIHtcbiAgaWYgKCFlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QgJiYgZWwgIT09IHdpbmRvdykgcmV0dXJuO1xuICB2YXIgZWxSZWN0LCB0b3AsIGxlZnQsIGJvdHRvbSwgcmlnaHQsIGhlaWdodCwgd2lkdGg7XG5cbiAgaWYgKGVsICE9PSB3aW5kb3cgJiYgZWwucGFyZW50Tm9kZSAmJiBlbCAhPT0gZ2V0V2luZG93U2Nyb2xsaW5nRWxlbWVudCgpKSB7XG4gICAgZWxSZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgdG9wID0gZWxSZWN0LnRvcDtcbiAgICBsZWZ0ID0gZWxSZWN0LmxlZnQ7XG4gICAgYm90dG9tID0gZWxSZWN0LmJvdHRvbTtcbiAgICByaWdodCA9IGVsUmVjdC5yaWdodDtcbiAgICBoZWlnaHQgPSBlbFJlY3QuaGVpZ2h0O1xuICAgIHdpZHRoID0gZWxSZWN0LndpZHRoO1xuICB9IGVsc2Uge1xuICAgIHRvcCA9IDA7XG4gICAgbGVmdCA9IDA7XG4gICAgYm90dG9tID0gd2luZG93LmlubmVySGVpZ2h0O1xuICAgIHJpZ2h0ID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgaGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0O1xuICAgIHdpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gIH1cblxuICBpZiAoKHJlbGF0aXZlVG9Db250YWluaW5nQmxvY2sgfHwgcmVsYXRpdmVUb05vblN0YXRpY1BhcmVudCkgJiYgZWwgIT09IHdpbmRvdykge1xuICAgIC8vIEFkanVzdCBmb3IgdHJhbnNsYXRlKClcbiAgICBjb250YWluZXIgPSBjb250YWluZXIgfHwgZWwucGFyZW50Tm9kZTsgLy8gc29sdmVzICMxMTIzIChzZWU6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8zNzk1MzgwNi82MDg4MzEyKVxuICAgIC8vIE5vdCBuZWVkZWQgb24gPD0gSUUxMVxuXG4gICAgaWYgKCFJRTExT3JMZXNzKSB7XG4gICAgICBkbyB7XG4gICAgICAgIGlmIChjb250YWluZXIgJiYgY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCAmJiAoY3NzKGNvbnRhaW5lciwgJ3RyYW5zZm9ybScpICE9PSAnbm9uZScgfHwgcmVsYXRpdmVUb05vblN0YXRpY1BhcmVudCAmJiBjc3MoY29udGFpbmVyLCAncG9zaXRpb24nKSAhPT0gJ3N0YXRpYycpKSB7XG4gICAgICAgICAgdmFyIGNvbnRhaW5lclJlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7IC8vIFNldCByZWxhdGl2ZSB0byBlZGdlcyBvZiBwYWRkaW5nIGJveCBvZiBjb250YWluZXJcblxuICAgICAgICAgIHRvcCAtPSBjb250YWluZXJSZWN0LnRvcCArIHBhcnNlSW50KGNzcyhjb250YWluZXIsICdib3JkZXItdG9wLXdpZHRoJykpO1xuICAgICAgICAgIGxlZnQgLT0gY29udGFpbmVyUmVjdC5sZWZ0ICsgcGFyc2VJbnQoY3NzKGNvbnRhaW5lciwgJ2JvcmRlci1sZWZ0LXdpZHRoJykpO1xuICAgICAgICAgIGJvdHRvbSA9IHRvcCArIGVsUmVjdC5oZWlnaHQ7XG4gICAgICAgICAgcmlnaHQgPSBsZWZ0ICsgZWxSZWN0LndpZHRoO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIC8qIGpzaGludCBib3NzOnRydWUgKi9cblxuICAgICAgfSB3aGlsZSAoY29udGFpbmVyID0gY29udGFpbmVyLnBhcmVudE5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh1bmRvU2NhbGUgJiYgZWwgIT09IHdpbmRvdykge1xuICAgIC8vIEFkanVzdCBmb3Igc2NhbGUoKVxuICAgIHZhciBlbE1hdHJpeCA9IG1hdHJpeChjb250YWluZXIgfHwgZWwpLFxuICAgICAgICBzY2FsZVggPSBlbE1hdHJpeCAmJiBlbE1hdHJpeC5hLFxuICAgICAgICBzY2FsZVkgPSBlbE1hdHJpeCAmJiBlbE1hdHJpeC5kO1xuXG4gICAgaWYgKGVsTWF0cml4KSB7XG4gICAgICB0b3AgLz0gc2NhbGVZO1xuICAgICAgbGVmdCAvPSBzY2FsZVg7XG4gICAgICB3aWR0aCAvPSBzY2FsZVg7XG4gICAgICBoZWlnaHQgLz0gc2NhbGVZO1xuICAgICAgYm90dG9tID0gdG9wICsgaGVpZ2h0O1xuICAgICAgcmlnaHQgPSBsZWZ0ICsgd2lkdGg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0b3A6IHRvcCxcbiAgICBsZWZ0OiBsZWZ0LFxuICAgIGJvdHRvbTogYm90dG9tLFxuICAgIHJpZ2h0OiByaWdodCxcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHRcbiAgfTtcbn1cbi8qKlxuICogQ2hlY2tzIGlmIGEgc2lkZSBvZiBhbiBlbGVtZW50IGlzIHNjcm9sbGVkIHBhc3QgYSBzaWRlIG9mIGl0cyBwYXJlbnRzXG4gKiBAcGFyYW0gIHtIVE1MRWxlbWVudH0gIGVsICAgICAgICAgICBUaGUgZWxlbWVudCB3aG8ncyBzaWRlIGJlaW5nIHNjcm9sbGVkIG91dCBvZiB2aWV3IGlzIGluIHF1ZXN0aW9uXG4gKiBAcGFyYW0gIHtTdHJpbmd9ICAgICAgIGVsU2lkZSAgICAgICBTaWRlIG9mIHRoZSBlbGVtZW50IGluIHF1ZXN0aW9uICgndG9wJywgJ2xlZnQnLCAncmlnaHQnLCAnYm90dG9tJylcbiAqIEBwYXJhbSAge1N0cmluZ30gICAgICAgcGFyZW50U2lkZSAgIFNpZGUgb2YgdGhlIHBhcmVudCBpbiBxdWVzdGlvbiAoJ3RvcCcsICdsZWZ0JywgJ3JpZ2h0JywgJ2JvdHRvbScpXG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudH0gICAgICAgICAgICAgICBUaGUgcGFyZW50IHNjcm9sbCBlbGVtZW50IHRoYXQgdGhlIGVsJ3Mgc2lkZSBpcyBzY3JvbGxlZCBwYXN0LCBvciBudWxsIGlmIHRoZXJlIGlzIG5vIHN1Y2ggZWxlbWVudFxuICovXG5cblxuZnVuY3Rpb24gaXNTY3JvbGxlZFBhc3QoZWwsIGVsU2lkZSwgcGFyZW50U2lkZSkge1xuICB2YXIgcGFyZW50ID0gZ2V0UGFyZW50QXV0b1Njcm9sbEVsZW1lbnQoZWwsIHRydWUpLFxuICAgICAgZWxTaWRlVmFsID0gZ2V0UmVjdChlbClbZWxTaWRlXTtcbiAgLyoganNoaW50IGJvc3M6dHJ1ZSAqL1xuXG4gIHdoaWxlIChwYXJlbnQpIHtcbiAgICB2YXIgcGFyZW50U2lkZVZhbCA9IGdldFJlY3QocGFyZW50KVtwYXJlbnRTaWRlXSxcbiAgICAgICAgdmlzaWJsZSA9IHZvaWQgMDtcblxuICAgIGlmIChwYXJlbnRTaWRlID09PSAndG9wJyB8fCBwYXJlbnRTaWRlID09PSAnbGVmdCcpIHtcbiAgICAgIHZpc2libGUgPSBlbFNpZGVWYWwgPj0gcGFyZW50U2lkZVZhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmlzaWJsZSA9IGVsU2lkZVZhbCA8PSBwYXJlbnRTaWRlVmFsO1xuICAgIH1cblxuICAgIGlmICghdmlzaWJsZSkgcmV0dXJuIHBhcmVudDtcbiAgICBpZiAocGFyZW50ID09PSBnZXRXaW5kb3dTY3JvbGxpbmdFbGVtZW50KCkpIGJyZWFrO1xuICAgIHBhcmVudCA9IGdldFBhcmVudEF1dG9TY3JvbGxFbGVtZW50KHBhcmVudCwgZmFsc2UpO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuLyoqXG4gKiBHZXRzIG50aCBjaGlsZCBvZiBlbCwgaWdub3JpbmcgaGlkZGVuIGNoaWxkcmVuLCBzb3J0YWJsZSdzIGVsZW1lbnRzIChkb2VzIG5vdCBpZ25vcmUgY2xvbmUgaWYgaXQncyB2aXNpYmxlKVxuICogYW5kIG5vbi1kcmFnZ2FibGUgZWxlbWVudHNcbiAqIEBwYXJhbSAge0hUTUxFbGVtZW50fSBlbCAgICAgICBUaGUgcGFyZW50IGVsZW1lbnRcbiAqIEBwYXJhbSAge051bWJlcn0gY2hpbGROdW0gICAgICBUaGUgaW5kZXggb2YgdGhlIGNoaWxkXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnMgICAgICAgUGFyZW50IFNvcnRhYmxlJ3Mgb3B0aW9uc1xuICogQHJldHVybiB7SFRNTEVsZW1lbnR9ICAgICAgICAgIFRoZSBjaGlsZCBhdCBpbmRleCBjaGlsZE51bSwgb3IgbnVsbCBpZiBub3QgZm91bmRcbiAqL1xuXG5cbmZ1bmN0aW9uIGdldENoaWxkKGVsLCBjaGlsZE51bSwgb3B0aW9ucykge1xuICB2YXIgY3VycmVudENoaWxkID0gMCxcbiAgICAgIGkgPSAwLFxuICAgICAgY2hpbGRyZW4gPSBlbC5jaGlsZHJlbjtcblxuICB3aGlsZSAoaSA8IGNoaWxkcmVuLmxlbmd0aCkge1xuICAgIGlmIChjaGlsZHJlbltpXS5zdHlsZS5kaXNwbGF5ICE9PSAnbm9uZScgJiYgY2hpbGRyZW5baV0gIT09IFNvcnRhYmxlLmdob3N0ICYmIGNoaWxkcmVuW2ldICE9PSBTb3J0YWJsZS5kcmFnZ2VkICYmIGNsb3Nlc3QoY2hpbGRyZW5baV0sIG9wdGlvbnMuZHJhZ2dhYmxlLCBlbCwgZmFsc2UpKSB7XG4gICAgICBpZiAoY3VycmVudENoaWxkID09PSBjaGlsZE51bSkge1xuICAgICAgICByZXR1cm4gY2hpbGRyZW5baV07XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnRDaGlsZCsrO1xuICAgIH1cblxuICAgIGkrKztcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuLyoqXG4gKiBHZXRzIHRoZSBsYXN0IGNoaWxkIGluIHRoZSBlbCwgaWdub3JpbmcgZ2hvc3RFbCBvciBpbnZpc2libGUgZWxlbWVudHMgKGNsb25lcylcbiAqIEBwYXJhbSAge0hUTUxFbGVtZW50fSBlbCAgICAgICBQYXJlbnQgZWxlbWVudFxuICogQHBhcmFtICB7c2VsZWN0b3J9IHNlbGVjdG9yICAgIEFueSBvdGhlciBlbGVtZW50cyB0aGF0IHNob3VsZCBiZSBpZ25vcmVkXG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudH0gICAgICAgICAgVGhlIGxhc3QgY2hpbGQsIGlnbm9yaW5nIGdob3N0RWxcbiAqL1xuXG5cbmZ1bmN0aW9uIGxhc3RDaGlsZChlbCwgc2VsZWN0b3IpIHtcbiAgdmFyIGxhc3QgPSBlbC5sYXN0RWxlbWVudENoaWxkO1xuXG4gIHdoaWxlIChsYXN0ICYmIChsYXN0ID09PSBTb3J0YWJsZS5naG9zdCB8fCBjc3MobGFzdCwgJ2Rpc3BsYXknKSA9PT0gJ25vbmUnIHx8IHNlbGVjdG9yICYmICFtYXRjaGVzKGxhc3QsIHNlbGVjdG9yKSkpIHtcbiAgICBsYXN0ID0gbGFzdC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xuICB9XG5cbiAgcmV0dXJuIGxhc3QgfHwgbnVsbDtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgaW5kZXggb2YgYW4gZWxlbWVudCB3aXRoaW4gaXRzIHBhcmVudCBmb3IgYSBzZWxlY3RlZCBzZXQgb2ZcbiAqIGVsZW1lbnRzXG4gKiBAcGFyYW0gIHtIVE1MRWxlbWVudH0gZWxcbiAqIEBwYXJhbSAge3NlbGVjdG9yfSBzZWxlY3RvclxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5cblxuZnVuY3Rpb24gaW5kZXgoZWwsIHNlbGVjdG9yKSB7XG4gIHZhciBpbmRleCA9IDA7XG5cbiAgaWYgKCFlbCB8fCAhZWwucGFyZW50Tm9kZSkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICAvKiBqc2hpbnQgYm9zczp0cnVlICovXG5cblxuICB3aGlsZSAoZWwgPSBlbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKSB7XG4gICAgaWYgKGVsLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkgIT09ICdURU1QTEFURScgJiYgZWwgIT09IFNvcnRhYmxlLmNsb25lICYmICghc2VsZWN0b3IgfHwgbWF0Y2hlcyhlbCwgc2VsZWN0b3IpKSkge1xuICAgICAgaW5kZXgrKztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaW5kZXg7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIHNjcm9sbCBvZmZzZXQgb2YgdGhlIGdpdmVuIGVsZW1lbnQsIGFkZGVkIHdpdGggYWxsIHRoZSBzY3JvbGwgb2Zmc2V0cyBvZiBwYXJlbnQgZWxlbWVudHMuXG4gKiBUaGUgdmFsdWUgaXMgcmV0dXJuZWQgaW4gcmVhbCBwaXhlbHMuXG4gKiBAcGFyYW0gIHtIVE1MRWxlbWVudH0gZWxcbiAqIEByZXR1cm4ge0FycmF5fSAgICAgICAgICAgICBPZmZzZXRzIGluIHRoZSBmb3JtYXQgb2YgW2xlZnQsIHRvcF1cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldFJlbGF0aXZlU2Nyb2xsT2Zmc2V0KGVsKSB7XG4gIHZhciBvZmZzZXRMZWZ0ID0gMCxcbiAgICAgIG9mZnNldFRvcCA9IDAsXG4gICAgICB3aW5TY3JvbGxlciA9IGdldFdpbmRvd1Njcm9sbGluZ0VsZW1lbnQoKTtcblxuICBpZiAoZWwpIHtcbiAgICBkbyB7XG4gICAgICB2YXIgZWxNYXRyaXggPSBtYXRyaXgoZWwpLFxuICAgICAgICAgIHNjYWxlWCA9IGVsTWF0cml4LmEsXG4gICAgICAgICAgc2NhbGVZID0gZWxNYXRyaXguZDtcbiAgICAgIG9mZnNldExlZnQgKz0gZWwuc2Nyb2xsTGVmdCAqIHNjYWxlWDtcbiAgICAgIG9mZnNldFRvcCArPSBlbC5zY3JvbGxUb3AgKiBzY2FsZVk7XG4gICAgfSB3aGlsZSAoZWwgIT09IHdpblNjcm9sbGVyICYmIChlbCA9IGVsLnBhcmVudE5vZGUpKTtcbiAgfVxuXG4gIHJldHVybiBbb2Zmc2V0TGVmdCwgb2Zmc2V0VG9wXTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG9iamVjdCB3aXRoaW4gdGhlIGdpdmVuIGFycmF5XG4gKiBAcGFyYW0gIHtBcnJheX0gYXJyICAgQXJyYXkgdGhhdCBtYXkgb3IgbWF5IG5vdCBob2xkIHRoZSBvYmplY3RcbiAqIEBwYXJhbSAge09iamVjdH0gb2JqICBBbiBvYmplY3QgdGhhdCBoYXMgYSBrZXktdmFsdWUgcGFpciB1bmlxdWUgdG8gYW5kIGlkZW50aWNhbCB0byBhIGtleS12YWx1ZSBwYWlyIGluIHRoZSBvYmplY3QgeW91IHdhbnQgdG8gZmluZFxuICogQHJldHVybiB7TnVtYmVyfSAgICAgIFRoZSBpbmRleCBvZiB0aGUgb2JqZWN0IGluIHRoZSBhcnJheSwgb3IgLTFcbiAqL1xuXG5cbmZ1bmN0aW9uIGluZGV4T2ZPYmplY3QoYXJyLCBvYmopIHtcbiAgZm9yICh2YXIgaSBpbiBhcnIpIHtcbiAgICBpZiAoIWFyci5oYXNPd25Qcm9wZXJ0eShpKSkgY29udGludWU7XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkgJiYgb2JqW2tleV0gPT09IGFycltpXVtrZXldKSByZXR1cm4gTnVtYmVyKGkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFyZW50QXV0b1Njcm9sbEVsZW1lbnQoZWwsIGluY2x1ZGVTZWxmKSB7XG4gIC8vIHNraXAgdG8gd2luZG93XG4gIGlmICghZWwgfHwgIWVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCkgcmV0dXJuIGdldFdpbmRvd1Njcm9sbGluZ0VsZW1lbnQoKTtcbiAgdmFyIGVsZW0gPSBlbDtcbiAgdmFyIGdvdFNlbGYgPSBmYWxzZTtcblxuICBkbyB7XG4gICAgLy8gd2UgZG9uJ3QgbmVlZCB0byBnZXQgZWxlbSBjc3MgaWYgaXQgaXNuJ3QgZXZlbiBvdmVyZmxvd2luZyBpbiB0aGUgZmlyc3QgcGxhY2UgKHBlcmZvcm1hbmNlKVxuICAgIGlmIChlbGVtLmNsaWVudFdpZHRoIDwgZWxlbS5zY3JvbGxXaWR0aCB8fCBlbGVtLmNsaWVudEhlaWdodCA8IGVsZW0uc2Nyb2xsSGVpZ2h0KSB7XG4gICAgICB2YXIgZWxlbUNTUyA9IGNzcyhlbGVtKTtcblxuICAgICAgaWYgKGVsZW0uY2xpZW50V2lkdGggPCBlbGVtLnNjcm9sbFdpZHRoICYmIChlbGVtQ1NTLm92ZXJmbG93WCA9PSAnYXV0bycgfHwgZWxlbUNTUy5vdmVyZmxvd1ggPT0gJ3Njcm9sbCcpIHx8IGVsZW0uY2xpZW50SGVpZ2h0IDwgZWxlbS5zY3JvbGxIZWlnaHQgJiYgKGVsZW1DU1Mub3ZlcmZsb3dZID09ICdhdXRvJyB8fCBlbGVtQ1NTLm92ZXJmbG93WSA9PSAnc2Nyb2xsJykpIHtcbiAgICAgICAgaWYgKCFlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCB8fCBlbGVtID09PSBkb2N1bWVudC5ib2R5KSByZXR1cm4gZ2V0V2luZG93U2Nyb2xsaW5nRWxlbWVudCgpO1xuICAgICAgICBpZiAoZ290U2VsZiB8fCBpbmNsdWRlU2VsZikgcmV0dXJuIGVsZW07XG4gICAgICAgIGdvdFNlbGYgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICAvKiBqc2hpbnQgYm9zczp0cnVlICovXG5cbiAgfSB3aGlsZSAoZWxlbSA9IGVsZW0ucGFyZW50Tm9kZSk7XG5cbiAgcmV0dXJuIGdldFdpbmRvd1Njcm9sbGluZ0VsZW1lbnQoKTtcbn1cblxuZnVuY3Rpb24gZXh0ZW5kKGRzdCwgc3JjKSB7XG4gIGlmIChkc3QgJiYgc3JjKSB7XG4gICAgZm9yICh2YXIga2V5IGluIHNyYykge1xuICAgICAgaWYgKHNyYy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIGRzdFtrZXldID0gc3JjW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRzdDtcbn1cblxuZnVuY3Rpb24gaXNSZWN0RXF1YWwocmVjdDEsIHJlY3QyKSB7XG4gIHJldHVybiBNYXRoLnJvdW5kKHJlY3QxLnRvcCkgPT09IE1hdGgucm91bmQocmVjdDIudG9wKSAmJiBNYXRoLnJvdW5kKHJlY3QxLmxlZnQpID09PSBNYXRoLnJvdW5kKHJlY3QyLmxlZnQpICYmIE1hdGgucm91bmQocmVjdDEuaGVpZ2h0KSA9PT0gTWF0aC5yb3VuZChyZWN0Mi5oZWlnaHQpICYmIE1hdGgucm91bmQocmVjdDEud2lkdGgpID09PSBNYXRoLnJvdW5kKHJlY3QyLndpZHRoKTtcbn1cblxudmFyIF90aHJvdHRsZVRpbWVvdXQ7XG5cbmZ1bmN0aW9uIHRocm90dGxlKGNhbGxiYWNrLCBtcykge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmICghX3Rocm90dGxlVGltZW91dCkge1xuICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgICAgX3RoaXMgPSB0aGlzO1xuXG4gICAgICBpZiAoYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgY2FsbGJhY2suY2FsbChfdGhpcywgYXJnc1swXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsYmFjay5hcHBseShfdGhpcywgYXJncyk7XG4gICAgICB9XG5cbiAgICAgIF90aHJvdHRsZVRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3Rocm90dGxlVGltZW91dCA9IHZvaWQgMDtcbiAgICAgIH0sIG1zKTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNhbmNlbFRocm90dGxlKCkge1xuICBjbGVhclRpbWVvdXQoX3Rocm90dGxlVGltZW91dCk7XG4gIF90aHJvdHRsZVRpbWVvdXQgPSB2b2lkIDA7XG59XG5cbmZ1bmN0aW9uIHNjcm9sbEJ5KGVsLCB4LCB5KSB7XG4gIGVsLnNjcm9sbExlZnQgKz0geDtcbiAgZWwuc2Nyb2xsVG9wICs9IHk7XG59XG5cbmZ1bmN0aW9uIGNsb25lKGVsKSB7XG4gIHZhciBQb2x5bWVyID0gd2luZG93LlBvbHltZXI7XG4gIHZhciAkID0gd2luZG93LmpRdWVyeSB8fCB3aW5kb3cuWmVwdG87XG5cbiAgaWYgKFBvbHltZXIgJiYgUG9seW1lci5kb20pIHtcbiAgICByZXR1cm4gUG9seW1lci5kb20oZWwpLmNsb25lTm9kZSh0cnVlKTtcbiAgfSBlbHNlIGlmICgkKSB7XG4gICAgcmV0dXJuICQoZWwpLmNsb25lKHRydWUpWzBdO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBlbC5jbG9uZU5vZGUodHJ1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0UmVjdChlbCwgcmVjdCkge1xuICBjc3MoZWwsICdwb3NpdGlvbicsICdhYnNvbHV0ZScpO1xuICBjc3MoZWwsICd0b3AnLCByZWN0LnRvcCk7XG4gIGNzcyhlbCwgJ2xlZnQnLCByZWN0LmxlZnQpO1xuICBjc3MoZWwsICd3aWR0aCcsIHJlY3Qud2lkdGgpO1xuICBjc3MoZWwsICdoZWlnaHQnLCByZWN0LmhlaWdodCk7XG59XG5cbmZ1bmN0aW9uIHVuc2V0UmVjdChlbCkge1xuICBjc3MoZWwsICdwb3NpdGlvbicsICcnKTtcbiAgY3NzKGVsLCAndG9wJywgJycpO1xuICBjc3MoZWwsICdsZWZ0JywgJycpO1xuICBjc3MoZWwsICd3aWR0aCcsICcnKTtcbiAgY3NzKGVsLCAnaGVpZ2h0JywgJycpO1xufVxuXG52YXIgZXhwYW5kbyA9ICdTb3J0YWJsZScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcblxuZnVuY3Rpb24gQW5pbWF0aW9uU3RhdGVNYW5hZ2VyKCkge1xuICB2YXIgYW5pbWF0aW9uU3RhdGVzID0gW10sXG4gICAgICBhbmltYXRpb25DYWxsYmFja0lkO1xuICByZXR1cm4ge1xuICAgIGNhcHR1cmVBbmltYXRpb25TdGF0ZTogZnVuY3Rpb24gY2FwdHVyZUFuaW1hdGlvblN0YXRlKCkge1xuICAgICAgYW5pbWF0aW9uU3RhdGVzID0gW107XG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5hbmltYXRpb24pIHJldHVybjtcbiAgICAgIHZhciBjaGlsZHJlbiA9IFtdLnNsaWNlLmNhbGwodGhpcy5lbC5jaGlsZHJlbik7XG4gICAgICBjaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICBpZiAoY3NzKGNoaWxkLCAnZGlzcGxheScpID09PSAnbm9uZScgfHwgY2hpbGQgPT09IFNvcnRhYmxlLmdob3N0KSByZXR1cm47XG4gICAgICAgIGFuaW1hdGlvblN0YXRlcy5wdXNoKHtcbiAgICAgICAgICB0YXJnZXQ6IGNoaWxkLFxuICAgICAgICAgIHJlY3Q6IGdldFJlY3QoY2hpbGQpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBmcm9tUmVjdCA9IF9vYmplY3RTcHJlYWQoe30sIGFuaW1hdGlvblN0YXRlc1thbmltYXRpb25TdGF0ZXMubGVuZ3RoIC0gMV0ucmVjdCk7IC8vIElmIGFuaW1hdGluZzogY29tcGVuc2F0ZSBmb3IgY3VycmVudCBhbmltYXRpb25cblxuXG4gICAgICAgIGlmIChjaGlsZC50aGlzQW5pbWF0aW9uRHVyYXRpb24pIHtcbiAgICAgICAgICB2YXIgY2hpbGRNYXRyaXggPSBtYXRyaXgoY2hpbGQsIHRydWUpO1xuXG4gICAgICAgICAgaWYgKGNoaWxkTWF0cml4KSB7XG4gICAgICAgICAgICBmcm9tUmVjdC50b3AgLT0gY2hpbGRNYXRyaXguZjtcbiAgICAgICAgICAgIGZyb21SZWN0LmxlZnQgLT0gY2hpbGRNYXRyaXguZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZC5mcm9tUmVjdCA9IGZyb21SZWN0O1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBhZGRBbmltYXRpb25TdGF0ZTogZnVuY3Rpb24gYWRkQW5pbWF0aW9uU3RhdGUoc3RhdGUpIHtcbiAgICAgIGFuaW1hdGlvblN0YXRlcy5wdXNoKHN0YXRlKTtcbiAgICB9LFxuICAgIHJlbW92ZUFuaW1hdGlvblN0YXRlOiBmdW5jdGlvbiByZW1vdmVBbmltYXRpb25TdGF0ZSh0YXJnZXQpIHtcbiAgICAgIGFuaW1hdGlvblN0YXRlcy5zcGxpY2UoaW5kZXhPZk9iamVjdChhbmltYXRpb25TdGF0ZXMsIHtcbiAgICAgICAgdGFyZ2V0OiB0YXJnZXRcbiAgICAgIH0pLCAxKTtcbiAgICB9LFxuICAgIGFuaW1hdGVBbGw6IGZ1bmN0aW9uIGFuaW1hdGVBbGwoY2FsbGJhY2spIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIGlmICghdGhpcy5vcHRpb25zLmFuaW1hdGlvbikge1xuICAgICAgICBjbGVhclRpbWVvdXQoYW5pbWF0aW9uQ2FsbGJhY2tJZCk7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIGNhbGxiYWNrKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGFuaW1hdGluZyA9IGZhbHNlLFxuICAgICAgICAgIGFuaW1hdGlvblRpbWUgPSAwO1xuICAgICAgYW5pbWF0aW9uU3RhdGVzLmZvckVhY2goZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICAgIHZhciB0aW1lID0gMCxcbiAgICAgICAgICAgIHRhcmdldCA9IHN0YXRlLnRhcmdldCxcbiAgICAgICAgICAgIGZyb21SZWN0ID0gdGFyZ2V0LmZyb21SZWN0LFxuICAgICAgICAgICAgdG9SZWN0ID0gZ2V0UmVjdCh0YXJnZXQpLFxuICAgICAgICAgICAgcHJldkZyb21SZWN0ID0gdGFyZ2V0LnByZXZGcm9tUmVjdCxcbiAgICAgICAgICAgIHByZXZUb1JlY3QgPSB0YXJnZXQucHJldlRvUmVjdCxcbiAgICAgICAgICAgIGFuaW1hdGluZ1JlY3QgPSBzdGF0ZS5yZWN0LFxuICAgICAgICAgICAgdGFyZ2V0TWF0cml4ID0gbWF0cml4KHRhcmdldCwgdHJ1ZSk7XG5cbiAgICAgICAgaWYgKHRhcmdldE1hdHJpeCkge1xuICAgICAgICAgIC8vIENvbXBlbnNhdGUgZm9yIGN1cnJlbnQgYW5pbWF0aW9uXG4gICAgICAgICAgdG9SZWN0LnRvcCAtPSB0YXJnZXRNYXRyaXguZjtcbiAgICAgICAgICB0b1JlY3QubGVmdCAtPSB0YXJnZXRNYXRyaXguZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhcmdldC50b1JlY3QgPSB0b1JlY3Q7XG5cbiAgICAgICAgaWYgKHRhcmdldC50aGlzQW5pbWF0aW9uRHVyYXRpb24pIHtcbiAgICAgICAgICAvLyBDb3VsZCBhbHNvIGNoZWNrIGlmIGFuaW1hdGluZ1JlY3QgaXMgYmV0d2VlbiBmcm9tUmVjdCBhbmQgdG9SZWN0XG4gICAgICAgICAgaWYgKGlzUmVjdEVxdWFsKHByZXZGcm9tUmVjdCwgdG9SZWN0KSAmJiAhaXNSZWN0RXF1YWwoZnJvbVJlY3QsIHRvUmVjdCkgJiYgLy8gTWFrZSBzdXJlIGFuaW1hdGluZ1JlY3QgaXMgb24gbGluZSBiZXR3ZWVuIHRvUmVjdCAmIGZyb21SZWN0XG4gICAgICAgICAgKGFuaW1hdGluZ1JlY3QudG9wIC0gdG9SZWN0LnRvcCkgLyAoYW5pbWF0aW5nUmVjdC5sZWZ0IC0gdG9SZWN0LmxlZnQpID09PSAoZnJvbVJlY3QudG9wIC0gdG9SZWN0LnRvcCkgLyAoZnJvbVJlY3QubGVmdCAtIHRvUmVjdC5sZWZ0KSkge1xuICAgICAgICAgICAgLy8gSWYgcmV0dXJuaW5nIHRvIHNhbWUgcGxhY2UgYXMgc3RhcnRlZCBmcm9tIGFuaW1hdGlvbiBhbmQgb24gc2FtZSBheGlzXG4gICAgICAgICAgICB0aW1lID0gY2FsY3VsYXRlUmVhbFRpbWUoYW5pbWF0aW5nUmVjdCwgcHJldkZyb21SZWN0LCBwcmV2VG9SZWN0LCBfdGhpcy5vcHRpb25zKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gaWYgZnJvbVJlY3QgIT0gdG9SZWN0OiBhbmltYXRlXG5cblxuICAgICAgICBpZiAoIWlzUmVjdEVxdWFsKHRvUmVjdCwgZnJvbVJlY3QpKSB7XG4gICAgICAgICAgdGFyZ2V0LnByZXZGcm9tUmVjdCA9IGZyb21SZWN0O1xuICAgICAgICAgIHRhcmdldC5wcmV2VG9SZWN0ID0gdG9SZWN0O1xuXG4gICAgICAgICAgaWYgKCF0aW1lKSB7XG4gICAgICAgICAgICB0aW1lID0gX3RoaXMub3B0aW9ucy5hbmltYXRpb247XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgX3RoaXMuYW5pbWF0ZSh0YXJnZXQsIGFuaW1hdGluZ1JlY3QsIHRvUmVjdCwgdGltZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGltZSkge1xuICAgICAgICAgIGFuaW1hdGluZyA9IHRydWU7XG4gICAgICAgICAgYW5pbWF0aW9uVGltZSA9IE1hdGgubWF4KGFuaW1hdGlvblRpbWUsIHRpbWUpO1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0YXJnZXQuYW5pbWF0aW9uUmVzZXRUaW1lcik7XG4gICAgICAgICAgdGFyZ2V0LmFuaW1hdGlvblJlc2V0VGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRhcmdldC5hbmltYXRpb25UaW1lID0gMDtcbiAgICAgICAgICAgIHRhcmdldC5wcmV2RnJvbVJlY3QgPSBudWxsO1xuICAgICAgICAgICAgdGFyZ2V0LmZyb21SZWN0ID0gbnVsbDtcbiAgICAgICAgICAgIHRhcmdldC5wcmV2VG9SZWN0ID0gbnVsbDtcbiAgICAgICAgICAgIHRhcmdldC50aGlzQW5pbWF0aW9uRHVyYXRpb24gPSBudWxsO1xuICAgICAgICAgIH0sIHRpbWUpO1xuICAgICAgICAgIHRhcmdldC50aGlzQW5pbWF0aW9uRHVyYXRpb24gPSB0aW1lO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNsZWFyVGltZW91dChhbmltYXRpb25DYWxsYmFja0lkKTtcblxuICAgICAgaWYgKCFhbmltYXRpbmcpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykgY2FsbGJhY2soKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFuaW1hdGlvbkNhbGxiYWNrSWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSBjYWxsYmFjaygpO1xuICAgICAgICB9LCBhbmltYXRpb25UaW1lKTtcbiAgICAgIH1cblxuICAgICAgYW5pbWF0aW9uU3RhdGVzID0gW107XG4gICAgfSxcbiAgICBhbmltYXRlOiBmdW5jdGlvbiBhbmltYXRlKHRhcmdldCwgY3VycmVudFJlY3QsIHRvUmVjdCwgZHVyYXRpb24pIHtcbiAgICAgIGlmIChkdXJhdGlvbikge1xuICAgICAgICBjc3ModGFyZ2V0LCAndHJhbnNpdGlvbicsICcnKTtcbiAgICAgICAgY3NzKHRhcmdldCwgJ3RyYW5zZm9ybScsICcnKTtcbiAgICAgICAgdmFyIGVsTWF0cml4ID0gbWF0cml4KHRoaXMuZWwpLFxuICAgICAgICAgICAgc2NhbGVYID0gZWxNYXRyaXggJiYgZWxNYXRyaXguYSxcbiAgICAgICAgICAgIHNjYWxlWSA9IGVsTWF0cml4ICYmIGVsTWF0cml4LmQsXG4gICAgICAgICAgICB0cmFuc2xhdGVYID0gKGN1cnJlbnRSZWN0LmxlZnQgLSB0b1JlY3QubGVmdCkgLyAoc2NhbGVYIHx8IDEpLFxuICAgICAgICAgICAgdHJhbnNsYXRlWSA9IChjdXJyZW50UmVjdC50b3AgLSB0b1JlY3QudG9wKSAvIChzY2FsZVkgfHwgMSk7XG4gICAgICAgIHRhcmdldC5hbmltYXRpbmdYID0gISF0cmFuc2xhdGVYO1xuICAgICAgICB0YXJnZXQuYW5pbWF0aW5nWSA9ICEhdHJhbnNsYXRlWTtcbiAgICAgICAgY3NzKHRhcmdldCwgJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUzZCgnICsgdHJhbnNsYXRlWCArICdweCwnICsgdHJhbnNsYXRlWSArICdweCwwKScpO1xuICAgICAgICB0aGlzLmZvclJlcGFpbnREdW1teSA9IHJlcGFpbnQodGFyZ2V0KTsgLy8gcmVwYWludFxuXG4gICAgICAgIGNzcyh0YXJnZXQsICd0cmFuc2l0aW9uJywgJ3RyYW5zZm9ybSAnICsgZHVyYXRpb24gKyAnbXMnICsgKHRoaXMub3B0aW9ucy5lYXNpbmcgPyAnICcgKyB0aGlzLm9wdGlvbnMuZWFzaW5nIDogJycpKTtcbiAgICAgICAgY3NzKHRhcmdldCwgJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUzZCgwLDAsMCknKTtcbiAgICAgICAgdHlwZW9mIHRhcmdldC5hbmltYXRlZCA9PT0gJ251bWJlcicgJiYgY2xlYXJUaW1lb3V0KHRhcmdldC5hbmltYXRlZCk7XG4gICAgICAgIHRhcmdldC5hbmltYXRlZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNzcyh0YXJnZXQsICd0cmFuc2l0aW9uJywgJycpO1xuICAgICAgICAgIGNzcyh0YXJnZXQsICd0cmFuc2Zvcm0nLCAnJyk7XG4gICAgICAgICAgdGFyZ2V0LmFuaW1hdGVkID0gZmFsc2U7XG4gICAgICAgICAgdGFyZ2V0LmFuaW1hdGluZ1ggPSBmYWxzZTtcbiAgICAgICAgICB0YXJnZXQuYW5pbWF0aW5nWSA9IGZhbHNlO1xuICAgICAgICB9LCBkdXJhdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiByZXBhaW50KHRhcmdldCkge1xuICByZXR1cm4gdGFyZ2V0Lm9mZnNldFdpZHRoO1xufVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVSZWFsVGltZShhbmltYXRpbmdSZWN0LCBmcm9tUmVjdCwgdG9SZWN0LCBvcHRpb25zKSB7XG4gIHJldHVybiBNYXRoLnNxcnQoTWF0aC5wb3coZnJvbVJlY3QudG9wIC0gYW5pbWF0aW5nUmVjdC50b3AsIDIpICsgTWF0aC5wb3coZnJvbVJlY3QubGVmdCAtIGFuaW1hdGluZ1JlY3QubGVmdCwgMikpIC8gTWF0aC5zcXJ0KE1hdGgucG93KGZyb21SZWN0LnRvcCAtIHRvUmVjdC50b3AsIDIpICsgTWF0aC5wb3coZnJvbVJlY3QubGVmdCAtIHRvUmVjdC5sZWZ0LCAyKSkgKiBvcHRpb25zLmFuaW1hdGlvbjtcbn1cblxudmFyIHBsdWdpbnMgPSBbXTtcbnZhciBkZWZhdWx0cyA9IHtcbiAgaW5pdGlhbGl6ZUJ5RGVmYXVsdDogdHJ1ZVxufTtcbnZhciBQbHVnaW5NYW5hZ2VyID0ge1xuICBtb3VudDogZnVuY3Rpb24gbW91bnQocGx1Z2luKSB7XG4gICAgLy8gU2V0IGRlZmF1bHQgc3RhdGljIHByb3BlcnRpZXNcbiAgICBmb3IgKHZhciBvcHRpb24gaW4gZGVmYXVsdHMpIHtcbiAgICAgIGlmIChkZWZhdWx0cy5oYXNPd25Qcm9wZXJ0eShvcHRpb24pICYmICEob3B0aW9uIGluIHBsdWdpbikpIHtcbiAgICAgICAgcGx1Z2luW29wdGlvbl0gPSBkZWZhdWx0c1tvcHRpb25dO1xuICAgICAgfVxuICAgIH1cblxuICAgIHBsdWdpbnMuZm9yRWFjaChmdW5jdGlvbiAocCkge1xuICAgICAgaWYgKHAucGx1Z2luTmFtZSA9PT0gcGx1Z2luLnBsdWdpbk5hbWUpIHtcbiAgICAgICAgdGhyb3cgXCJTb3J0YWJsZTogQ2Fubm90IG1vdW50IHBsdWdpbiBcIi5jb25jYXQocGx1Z2luLnBsdWdpbk5hbWUsIFwiIG1vcmUgdGhhbiBvbmNlXCIpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHBsdWdpbnMucHVzaChwbHVnaW4pO1xuICB9LFxuICBwbHVnaW5FdmVudDogZnVuY3Rpb24gcGx1Z2luRXZlbnQoZXZlbnROYW1lLCBzb3J0YWJsZSwgZXZ0KSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuZXZlbnRDYW5jZWxlZCA9IGZhbHNlO1xuXG4gICAgZXZ0LmNhbmNlbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLmV2ZW50Q2FuY2VsZWQgPSB0cnVlO1xuICAgIH07XG5cbiAgICB2YXIgZXZlbnROYW1lR2xvYmFsID0gZXZlbnROYW1lICsgJ0dsb2JhbCc7XG4gICAgcGx1Z2lucy5mb3JFYWNoKGZ1bmN0aW9uIChwbHVnaW4pIHtcbiAgICAgIGlmICghc29ydGFibGVbcGx1Z2luLnBsdWdpbk5hbWVdKSByZXR1cm47IC8vIEZpcmUgZ2xvYmFsIGV2ZW50cyBpZiBpdCBleGlzdHMgaW4gdGhpcyBzb3J0YWJsZVxuXG4gICAgICBpZiAoc29ydGFibGVbcGx1Z2luLnBsdWdpbk5hbWVdW2V2ZW50TmFtZUdsb2JhbF0pIHtcbiAgICAgICAgc29ydGFibGVbcGx1Z2luLnBsdWdpbk5hbWVdW2V2ZW50TmFtZUdsb2JhbF0oX29iamVjdFNwcmVhZCh7XG4gICAgICAgICAgc29ydGFibGU6IHNvcnRhYmxlXG4gICAgICAgIH0sIGV2dCkpO1xuICAgICAgfSAvLyBPbmx5IGZpcmUgcGx1Z2luIGV2ZW50IGlmIHBsdWdpbiBpcyBlbmFibGVkIGluIHRoaXMgc29ydGFibGUsXG4gICAgICAvLyBhbmQgcGx1Z2luIGhhcyBldmVudCBkZWZpbmVkXG5cblxuICAgICAgaWYgKHNvcnRhYmxlLm9wdGlvbnNbcGx1Z2luLnBsdWdpbk5hbWVdICYmIHNvcnRhYmxlW3BsdWdpbi5wbHVnaW5OYW1lXVtldmVudE5hbWVdKSB7XG4gICAgICAgIHNvcnRhYmxlW3BsdWdpbi5wbHVnaW5OYW1lXVtldmVudE5hbWVdKF9vYmplY3RTcHJlYWQoe1xuICAgICAgICAgIHNvcnRhYmxlOiBzb3J0YWJsZVxuICAgICAgICB9LCBldnQpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSxcbiAgaW5pdGlhbGl6ZVBsdWdpbnM6IGZ1bmN0aW9uIGluaXRpYWxpemVQbHVnaW5zKHNvcnRhYmxlLCBlbCwgZGVmYXVsdHMsIG9wdGlvbnMpIHtcbiAgICBwbHVnaW5zLmZvckVhY2goZnVuY3Rpb24gKHBsdWdpbikge1xuICAgICAgdmFyIHBsdWdpbk5hbWUgPSBwbHVnaW4ucGx1Z2luTmFtZTtcbiAgICAgIGlmICghc29ydGFibGUub3B0aW9uc1twbHVnaW5OYW1lXSAmJiAhcGx1Z2luLmluaXRpYWxpemVCeURlZmF1bHQpIHJldHVybjtcbiAgICAgIHZhciBpbml0aWFsaXplZCA9IG5ldyBwbHVnaW4oc29ydGFibGUsIGVsLCBzb3J0YWJsZS5vcHRpb25zKTtcbiAgICAgIGluaXRpYWxpemVkLnNvcnRhYmxlID0gc29ydGFibGU7XG4gICAgICBpbml0aWFsaXplZC5vcHRpb25zID0gc29ydGFibGUub3B0aW9ucztcbiAgICAgIHNvcnRhYmxlW3BsdWdpbk5hbWVdID0gaW5pdGlhbGl6ZWQ7IC8vIEFkZCBkZWZhdWx0IG9wdGlvbnMgZnJvbSBwbHVnaW5cblxuICAgICAgX2V4dGVuZHMoZGVmYXVsdHMsIGluaXRpYWxpemVkLmRlZmF1bHRzKTtcbiAgICB9KTtcblxuICAgIGZvciAodmFyIG9wdGlvbiBpbiBzb3J0YWJsZS5vcHRpb25zKSB7XG4gICAgICBpZiAoIXNvcnRhYmxlLm9wdGlvbnMuaGFzT3duUHJvcGVydHkob3B0aW9uKSkgY29udGludWU7XG4gICAgICB2YXIgbW9kaWZpZWQgPSB0aGlzLm1vZGlmeU9wdGlvbihzb3J0YWJsZSwgb3B0aW9uLCBzb3J0YWJsZS5vcHRpb25zW29wdGlvbl0pO1xuXG4gICAgICBpZiAodHlwZW9mIG1vZGlmaWVkICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBzb3J0YWJsZS5vcHRpb25zW29wdGlvbl0gPSBtb2RpZmllZDtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGdldEV2ZW50UHJvcGVydGllczogZnVuY3Rpb24gZ2V0RXZlbnRQcm9wZXJ0aWVzKG5hbWUsIHNvcnRhYmxlKSB7XG4gICAgdmFyIGV2ZW50UHJvcGVydGllcyA9IHt9O1xuICAgIHBsdWdpbnMuZm9yRWFjaChmdW5jdGlvbiAocGx1Z2luKSB7XG4gICAgICBpZiAodHlwZW9mIHBsdWdpbi5ldmVudFByb3BlcnRpZXMgIT09ICdmdW5jdGlvbicpIHJldHVybjtcblxuICAgICAgX2V4dGVuZHMoZXZlbnRQcm9wZXJ0aWVzLCBwbHVnaW4uZXZlbnRQcm9wZXJ0aWVzLmNhbGwoc29ydGFibGVbcGx1Z2luLnBsdWdpbk5hbWVdLCBuYW1lKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGV2ZW50UHJvcGVydGllcztcbiAgfSxcbiAgbW9kaWZ5T3B0aW9uOiBmdW5jdGlvbiBtb2RpZnlPcHRpb24oc29ydGFibGUsIG5hbWUsIHZhbHVlKSB7XG4gICAgdmFyIG1vZGlmaWVkVmFsdWU7XG4gICAgcGx1Z2lucy5mb3JFYWNoKGZ1bmN0aW9uIChwbHVnaW4pIHtcbiAgICAgIC8vIFBsdWdpbiBtdXN0IGV4aXN0IG9uIHRoZSBTb3J0YWJsZVxuICAgICAgaWYgKCFzb3J0YWJsZVtwbHVnaW4ucGx1Z2luTmFtZV0pIHJldHVybjsgLy8gSWYgc3RhdGljIG9wdGlvbiBsaXN0ZW5lciBleGlzdHMgZm9yIHRoaXMgb3B0aW9uLCBjYWxsIGluIHRoZSBjb250ZXh0IG9mIHRoZSBTb3J0YWJsZSdzIGluc3RhbmNlIG9mIHRoaXMgcGx1Z2luXG5cbiAgICAgIGlmIChwbHVnaW4ub3B0aW9uTGlzdGVuZXJzICYmIHR5cGVvZiBwbHVnaW4ub3B0aW9uTGlzdGVuZXJzW25hbWVdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG1vZGlmaWVkVmFsdWUgPSBwbHVnaW4ub3B0aW9uTGlzdGVuZXJzW25hbWVdLmNhbGwoc29ydGFibGVbcGx1Z2luLnBsdWdpbk5hbWVdLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG1vZGlmaWVkVmFsdWU7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGRpc3BhdGNoRXZlbnQoX3JlZikge1xuICB2YXIgc29ydGFibGUgPSBfcmVmLnNvcnRhYmxlLFxuICAgICAgcm9vdEVsID0gX3JlZi5yb290RWwsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lLFxuICAgICAgdGFyZ2V0RWwgPSBfcmVmLnRhcmdldEVsLFxuICAgICAgY2xvbmVFbCA9IF9yZWYuY2xvbmVFbCxcbiAgICAgIHRvRWwgPSBfcmVmLnRvRWwsXG4gICAgICBmcm9tRWwgPSBfcmVmLmZyb21FbCxcbiAgICAgIG9sZEluZGV4ID0gX3JlZi5vbGRJbmRleCxcbiAgICAgIG5ld0luZGV4ID0gX3JlZi5uZXdJbmRleCxcbiAgICAgIG9sZERyYWdnYWJsZUluZGV4ID0gX3JlZi5vbGREcmFnZ2FibGVJbmRleCxcbiAgICAgIG5ld0RyYWdnYWJsZUluZGV4ID0gX3JlZi5uZXdEcmFnZ2FibGVJbmRleCxcbiAgICAgIG9yaWdpbmFsRXZlbnQgPSBfcmVmLm9yaWdpbmFsRXZlbnQsXG4gICAgICBwdXRTb3J0YWJsZSA9IF9yZWYucHV0U29ydGFibGUsXG4gICAgICBleHRyYUV2ZW50UHJvcGVydGllcyA9IF9yZWYuZXh0cmFFdmVudFByb3BlcnRpZXM7XG4gIHNvcnRhYmxlID0gc29ydGFibGUgfHwgcm9vdEVsICYmIHJvb3RFbFtleHBhbmRvXTtcbiAgaWYgKCFzb3J0YWJsZSkgcmV0dXJuO1xuICB2YXIgZXZ0LFxuICAgICAgb3B0aW9ucyA9IHNvcnRhYmxlLm9wdGlvbnMsXG4gICAgICBvbk5hbWUgPSAnb24nICsgbmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIG5hbWUuc3Vic3RyKDEpOyAvLyBTdXBwb3J0IGZvciBuZXcgQ3VzdG9tRXZlbnQgZmVhdHVyZVxuXG4gIGlmICh3aW5kb3cuQ3VzdG9tRXZlbnQgJiYgIUlFMTFPckxlc3MgJiYgIUVkZ2UpIHtcbiAgICBldnQgPSBuZXcgQ3VzdG9tRXZlbnQobmFtZSwge1xuICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgIGNhbmNlbGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcbiAgICBldnQuaW5pdEV2ZW50KG5hbWUsIHRydWUsIHRydWUpO1xuICB9XG5cbiAgZXZ0LnRvID0gdG9FbCB8fCByb290RWw7XG4gIGV2dC5mcm9tID0gZnJvbUVsIHx8IHJvb3RFbDtcbiAgZXZ0Lml0ZW0gPSB0YXJnZXRFbCB8fCByb290RWw7XG4gIGV2dC5jbG9uZSA9IGNsb25lRWw7XG4gIGV2dC5vbGRJbmRleCA9IG9sZEluZGV4O1xuICBldnQubmV3SW5kZXggPSBuZXdJbmRleDtcbiAgZXZ0Lm9sZERyYWdnYWJsZUluZGV4ID0gb2xkRHJhZ2dhYmxlSW5kZXg7XG4gIGV2dC5uZXdEcmFnZ2FibGVJbmRleCA9IG5ld0RyYWdnYWJsZUluZGV4O1xuICBldnQub3JpZ2luYWxFdmVudCA9IG9yaWdpbmFsRXZlbnQ7XG4gIGV2dC5wdWxsTW9kZSA9IHB1dFNvcnRhYmxlID8gcHV0U29ydGFibGUubGFzdFB1dE1vZGUgOiB1bmRlZmluZWQ7XG5cbiAgdmFyIGFsbEV2ZW50UHJvcGVydGllcyA9IF9vYmplY3RTcHJlYWQoe30sIGV4dHJhRXZlbnRQcm9wZXJ0aWVzLCBQbHVnaW5NYW5hZ2VyLmdldEV2ZW50UHJvcGVydGllcyhuYW1lLCBzb3J0YWJsZSkpO1xuXG4gIGZvciAodmFyIG9wdGlvbiBpbiBhbGxFdmVudFByb3BlcnRpZXMpIHtcbiAgICBldnRbb3B0aW9uXSA9IGFsbEV2ZW50UHJvcGVydGllc1tvcHRpb25dO1xuICB9XG5cbiAgaWYgKHJvb3RFbCkge1xuICAgIHJvb3RFbC5kaXNwYXRjaEV2ZW50KGV2dCk7XG4gIH1cblxuICBpZiAob3B0aW9uc1tvbk5hbWVdKSB7XG4gICAgb3B0aW9uc1tvbk5hbWVdLmNhbGwoc29ydGFibGUsIGV2dCk7XG4gIH1cbn1cblxudmFyIHBsdWdpbkV2ZW50ID0gZnVuY3Rpb24gcGx1Z2luRXZlbnQoZXZlbnROYW1lLCBzb3J0YWJsZSkge1xuICB2YXIgX3JlZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge30sXG4gICAgICBvcmlnaW5hbEV2ZW50ID0gX3JlZi5ldnQsXG4gICAgICBkYXRhID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImV2dFwiXSk7XG5cbiAgUGx1Z2luTWFuYWdlci5wbHVnaW5FdmVudC5iaW5kKFNvcnRhYmxlKShldmVudE5hbWUsIHNvcnRhYmxlLCBfb2JqZWN0U3ByZWFkKHtcbiAgICBkcmFnRWw6IGRyYWdFbCxcbiAgICBwYXJlbnRFbDogcGFyZW50RWwsXG4gICAgZ2hvc3RFbDogZ2hvc3RFbCxcbiAgICByb290RWw6IHJvb3RFbCxcbiAgICBuZXh0RWw6IG5leHRFbCxcbiAgICBsYXN0RG93bkVsOiBsYXN0RG93bkVsLFxuICAgIGNsb25lRWw6IGNsb25lRWwsXG4gICAgY2xvbmVIaWRkZW46IGNsb25lSGlkZGVuLFxuICAgIGRyYWdTdGFydGVkOiBtb3ZlZCxcbiAgICBwdXRTb3J0YWJsZTogcHV0U29ydGFibGUsXG4gICAgYWN0aXZlU29ydGFibGU6IFNvcnRhYmxlLmFjdGl2ZSxcbiAgICBvcmlnaW5hbEV2ZW50OiBvcmlnaW5hbEV2ZW50LFxuICAgIG9sZEluZGV4OiBvbGRJbmRleCxcbiAgICBvbGREcmFnZ2FibGVJbmRleDogb2xkRHJhZ2dhYmxlSW5kZXgsXG4gICAgbmV3SW5kZXg6IG5ld0luZGV4LFxuICAgIG5ld0RyYWdnYWJsZUluZGV4OiBuZXdEcmFnZ2FibGVJbmRleCxcbiAgICBoaWRlR2hvc3RGb3JUYXJnZXQ6IF9oaWRlR2hvc3RGb3JUYXJnZXQsXG4gICAgdW5oaWRlR2hvc3RGb3JUYXJnZXQ6IF91bmhpZGVHaG9zdEZvclRhcmdldCxcbiAgICBjbG9uZU5vd0hpZGRlbjogZnVuY3Rpb24gY2xvbmVOb3dIaWRkZW4oKSB7XG4gICAgICBjbG9uZUhpZGRlbiA9IHRydWU7XG4gICAgfSxcbiAgICBjbG9uZU5vd1Nob3duOiBmdW5jdGlvbiBjbG9uZU5vd1Nob3duKCkge1xuICAgICAgY2xvbmVIaWRkZW4gPSBmYWxzZTtcbiAgICB9LFxuICAgIGRpc3BhdGNoU29ydGFibGVFdmVudDogZnVuY3Rpb24gZGlzcGF0Y2hTb3J0YWJsZUV2ZW50KG5hbWUpIHtcbiAgICAgIF9kaXNwYXRjaEV2ZW50KHtcbiAgICAgICAgc29ydGFibGU6IHNvcnRhYmxlLFxuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICBvcmlnaW5hbEV2ZW50OiBvcmlnaW5hbEV2ZW50XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIGRhdGEpKTtcbn07XG5cbmZ1bmN0aW9uIF9kaXNwYXRjaEV2ZW50KGluZm8pIHtcbiAgZGlzcGF0Y2hFdmVudChfb2JqZWN0U3ByZWFkKHtcbiAgICBwdXRTb3J0YWJsZTogcHV0U29ydGFibGUsXG4gICAgY2xvbmVFbDogY2xvbmVFbCxcbiAgICB0YXJnZXRFbDogZHJhZ0VsLFxuICAgIHJvb3RFbDogcm9vdEVsLFxuICAgIG9sZEluZGV4OiBvbGRJbmRleCxcbiAgICBvbGREcmFnZ2FibGVJbmRleDogb2xkRHJhZ2dhYmxlSW5kZXgsXG4gICAgbmV3SW5kZXg6IG5ld0luZGV4LFxuICAgIG5ld0RyYWdnYWJsZUluZGV4OiBuZXdEcmFnZ2FibGVJbmRleFxuICB9LCBpbmZvKSk7XG59XG5cbnZhciBkcmFnRWwsXG4gICAgcGFyZW50RWwsXG4gICAgZ2hvc3RFbCxcbiAgICByb290RWwsXG4gICAgbmV4dEVsLFxuICAgIGxhc3REb3duRWwsXG4gICAgY2xvbmVFbCxcbiAgICBjbG9uZUhpZGRlbixcbiAgICBvbGRJbmRleCxcbiAgICBuZXdJbmRleCxcbiAgICBvbGREcmFnZ2FibGVJbmRleCxcbiAgICBuZXdEcmFnZ2FibGVJbmRleCxcbiAgICBhY3RpdmVHcm91cCxcbiAgICBwdXRTb3J0YWJsZSxcbiAgICBhd2FpdGluZ0RyYWdTdGFydGVkID0gZmFsc2UsXG4gICAgaWdub3JlTmV4dENsaWNrID0gZmFsc2UsXG4gICAgc29ydGFibGVzID0gW10sXG4gICAgdGFwRXZ0LFxuICAgIHRvdWNoRXZ0LFxuICAgIGxhc3REeCxcbiAgICBsYXN0RHksXG4gICAgdGFwRGlzdGFuY2VMZWZ0LFxuICAgIHRhcERpc3RhbmNlVG9wLFxuICAgIG1vdmVkLFxuICAgIGxhc3RUYXJnZXQsXG4gICAgbGFzdERpcmVjdGlvbixcbiAgICBwYXN0Rmlyc3RJbnZlcnRUaHJlc2ggPSBmYWxzZSxcbiAgICBpc0NpcmN1bXN0YW50aWFsSW52ZXJ0ID0gZmFsc2UsXG4gICAgdGFyZ2V0TW92ZURpc3RhbmNlLFxuICAgIC8vIEZvciBwb3NpdGlvbmluZyBnaG9zdCBhYnNvbHV0ZWx5XG5naG9zdFJlbGF0aXZlUGFyZW50LFxuICAgIGdob3N0UmVsYXRpdmVQYXJlbnRJbml0aWFsU2Nyb2xsID0gW10sXG4gICAgLy8gKGxlZnQsIHRvcClcbl9zaWxlbnQgPSBmYWxzZSxcbiAgICBzYXZlZElucHV0Q2hlY2tlZCA9IFtdO1xuLyoqIEBjb25zdCAqL1xuXG52YXIgZG9jdW1lbnRFeGlzdHMgPSB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnLFxuICAgIFBvc2l0aW9uR2hvc3RBYnNvbHV0ZWx5ID0gSU9TLFxuICAgIENTU0Zsb2F0UHJvcGVydHkgPSBFZGdlIHx8IElFMTFPckxlc3MgPyAnY3NzRmxvYXQnIDogJ2Zsb2F0JyxcbiAgICAvLyBUaGlzIHdpbGwgbm90IHBhc3MgZm9yIElFOSwgYmVjYXVzZSBJRTkgRG5EIG9ubHkgd29ya3Mgb24gYW5jaG9yc1xuc3VwcG9ydERyYWdnYWJsZSA9IGRvY3VtZW50RXhpc3RzICYmICFDaHJvbWVGb3JBbmRyb2lkICYmICFJT1MgJiYgJ2RyYWdnYWJsZScgaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksXG4gICAgc3VwcG9ydENzc1BvaW50ZXJFdmVudHMgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghZG9jdW1lbnRFeGlzdHMpIHJldHVybjsgLy8gZmFsc2Ugd2hlbiA8PSBJRTExXG5cbiAgaWYgKElFMTFPckxlc3MpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd4Jyk7XG4gIGVsLnN0eWxlLmNzc1RleHQgPSAncG9pbnRlci1ldmVudHM6YXV0byc7XG4gIHJldHVybiBlbC5zdHlsZS5wb2ludGVyRXZlbnRzID09PSAnYXV0byc7XG59KCksXG4gICAgX2RldGVjdERpcmVjdGlvbiA9IGZ1bmN0aW9uIF9kZXRlY3REaXJlY3Rpb24oZWwsIG9wdGlvbnMpIHtcbiAgdmFyIGVsQ1NTID0gY3NzKGVsKSxcbiAgICAgIGVsV2lkdGggPSBwYXJzZUludChlbENTUy53aWR0aCkgLSBwYXJzZUludChlbENTUy5wYWRkaW5nTGVmdCkgLSBwYXJzZUludChlbENTUy5wYWRkaW5nUmlnaHQpIC0gcGFyc2VJbnQoZWxDU1MuYm9yZGVyTGVmdFdpZHRoKSAtIHBhcnNlSW50KGVsQ1NTLmJvcmRlclJpZ2h0V2lkdGgpLFxuICAgICAgY2hpbGQxID0gZ2V0Q2hpbGQoZWwsIDAsIG9wdGlvbnMpLFxuICAgICAgY2hpbGQyID0gZ2V0Q2hpbGQoZWwsIDEsIG9wdGlvbnMpLFxuICAgICAgZmlyc3RDaGlsZENTUyA9IGNoaWxkMSAmJiBjc3MoY2hpbGQxKSxcbiAgICAgIHNlY29uZENoaWxkQ1NTID0gY2hpbGQyICYmIGNzcyhjaGlsZDIpLFxuICAgICAgZmlyc3RDaGlsZFdpZHRoID0gZmlyc3RDaGlsZENTUyAmJiBwYXJzZUludChmaXJzdENoaWxkQ1NTLm1hcmdpbkxlZnQpICsgcGFyc2VJbnQoZmlyc3RDaGlsZENTUy5tYXJnaW5SaWdodCkgKyBnZXRSZWN0KGNoaWxkMSkud2lkdGgsXG4gICAgICBzZWNvbmRDaGlsZFdpZHRoID0gc2Vjb25kQ2hpbGRDU1MgJiYgcGFyc2VJbnQoc2Vjb25kQ2hpbGRDU1MubWFyZ2luTGVmdCkgKyBwYXJzZUludChzZWNvbmRDaGlsZENTUy5tYXJnaW5SaWdodCkgKyBnZXRSZWN0KGNoaWxkMikud2lkdGg7XG5cbiAgaWYgKGVsQ1NTLmRpc3BsYXkgPT09ICdmbGV4Jykge1xuICAgIHJldHVybiBlbENTUy5mbGV4RGlyZWN0aW9uID09PSAnY29sdW1uJyB8fCBlbENTUy5mbGV4RGlyZWN0aW9uID09PSAnY29sdW1uLXJldmVyc2UnID8gJ3ZlcnRpY2FsJyA6ICdob3Jpem9udGFsJztcbiAgfVxuXG4gIGlmIChlbENTUy5kaXNwbGF5ID09PSAnZ3JpZCcpIHtcbiAgICByZXR1cm4gZWxDU1MuZ3JpZFRlbXBsYXRlQ29sdW1ucy5zcGxpdCgnICcpLmxlbmd0aCA8PSAxID8gJ3ZlcnRpY2FsJyA6ICdob3Jpem9udGFsJztcbiAgfVxuXG4gIGlmIChjaGlsZDEgJiYgZmlyc3RDaGlsZENTU1tcImZsb2F0XCJdICYmIGZpcnN0Q2hpbGRDU1NbXCJmbG9hdFwiXSAhPT0gJ25vbmUnKSB7XG4gICAgdmFyIHRvdWNoaW5nU2lkZUNoaWxkMiA9IGZpcnN0Q2hpbGRDU1NbXCJmbG9hdFwiXSA9PT0gJ2xlZnQnID8gJ2xlZnQnIDogJ3JpZ2h0JztcbiAgICByZXR1cm4gY2hpbGQyICYmIChzZWNvbmRDaGlsZENTUy5jbGVhciA9PT0gJ2JvdGgnIHx8IHNlY29uZENoaWxkQ1NTLmNsZWFyID09PSB0b3VjaGluZ1NpZGVDaGlsZDIpID8gJ3ZlcnRpY2FsJyA6ICdob3Jpem9udGFsJztcbiAgfVxuXG4gIHJldHVybiBjaGlsZDEgJiYgKGZpcnN0Q2hpbGRDU1MuZGlzcGxheSA9PT0gJ2Jsb2NrJyB8fCBmaXJzdENoaWxkQ1NTLmRpc3BsYXkgPT09ICdmbGV4JyB8fCBmaXJzdENoaWxkQ1NTLmRpc3BsYXkgPT09ICd0YWJsZScgfHwgZmlyc3RDaGlsZENTUy5kaXNwbGF5ID09PSAnZ3JpZCcgfHwgZmlyc3RDaGlsZFdpZHRoID49IGVsV2lkdGggJiYgZWxDU1NbQ1NTRmxvYXRQcm9wZXJ0eV0gPT09ICdub25lJyB8fCBjaGlsZDIgJiYgZWxDU1NbQ1NTRmxvYXRQcm9wZXJ0eV0gPT09ICdub25lJyAmJiBmaXJzdENoaWxkV2lkdGggKyBzZWNvbmRDaGlsZFdpZHRoID4gZWxXaWR0aCkgPyAndmVydGljYWwnIDogJ2hvcml6b250YWwnO1xufSxcbiAgICBfZHJhZ0VsSW5Sb3dDb2x1bW4gPSBmdW5jdGlvbiBfZHJhZ0VsSW5Sb3dDb2x1bW4oZHJhZ1JlY3QsIHRhcmdldFJlY3QsIHZlcnRpY2FsKSB7XG4gIHZhciBkcmFnRWxTMU9wcCA9IHZlcnRpY2FsID8gZHJhZ1JlY3QubGVmdCA6IGRyYWdSZWN0LnRvcCxcbiAgICAgIGRyYWdFbFMyT3BwID0gdmVydGljYWwgPyBkcmFnUmVjdC5yaWdodCA6IGRyYWdSZWN0LmJvdHRvbSxcbiAgICAgIGRyYWdFbE9wcExlbmd0aCA9IHZlcnRpY2FsID8gZHJhZ1JlY3Qud2lkdGggOiBkcmFnUmVjdC5oZWlnaHQsXG4gICAgICB0YXJnZXRTMU9wcCA9IHZlcnRpY2FsID8gdGFyZ2V0UmVjdC5sZWZ0IDogdGFyZ2V0UmVjdC50b3AsXG4gICAgICB0YXJnZXRTMk9wcCA9IHZlcnRpY2FsID8gdGFyZ2V0UmVjdC5yaWdodCA6IHRhcmdldFJlY3QuYm90dG9tLFxuICAgICAgdGFyZ2V0T3BwTGVuZ3RoID0gdmVydGljYWwgPyB0YXJnZXRSZWN0LndpZHRoIDogdGFyZ2V0UmVjdC5oZWlnaHQ7XG4gIHJldHVybiBkcmFnRWxTMU9wcCA9PT0gdGFyZ2V0UzFPcHAgfHwgZHJhZ0VsUzJPcHAgPT09IHRhcmdldFMyT3BwIHx8IGRyYWdFbFMxT3BwICsgZHJhZ0VsT3BwTGVuZ3RoIC8gMiA9PT0gdGFyZ2V0UzFPcHAgKyB0YXJnZXRPcHBMZW5ndGggLyAyO1xufSxcblxuLyoqXG4gKiBEZXRlY3RzIGZpcnN0IG5lYXJlc3QgZW1wdHkgc29ydGFibGUgdG8gWCBhbmQgWSBwb3NpdGlvbiB1c2luZyBlbXB0eUluc2VydFRocmVzaG9sZC5cbiAqIEBwYXJhbSAge051bWJlcn0geCAgICAgIFggcG9zaXRpb25cbiAqIEBwYXJhbSAge051bWJlcn0geSAgICAgIFkgcG9zaXRpb25cbiAqIEByZXR1cm4ge0hUTUxFbGVtZW50fSAgIEVsZW1lbnQgb2YgdGhlIGZpcnN0IGZvdW5kIG5lYXJlc3QgU29ydGFibGVcbiAqL1xuX2RldGVjdE5lYXJlc3RFbXB0eVNvcnRhYmxlID0gZnVuY3Rpb24gX2RldGVjdE5lYXJlc3RFbXB0eVNvcnRhYmxlKHgsIHkpIHtcbiAgdmFyIHJldDtcbiAgc29ydGFibGVzLnNvbWUoZnVuY3Rpb24gKHNvcnRhYmxlKSB7XG4gICAgaWYgKGxhc3RDaGlsZChzb3J0YWJsZSkpIHJldHVybjtcbiAgICB2YXIgcmVjdCA9IGdldFJlY3Qoc29ydGFibGUpLFxuICAgICAgICB0aHJlc2hvbGQgPSBzb3J0YWJsZVtleHBhbmRvXS5vcHRpb25zLmVtcHR5SW5zZXJ0VGhyZXNob2xkLFxuICAgICAgICBpbnNpZGVIb3Jpem9udGFsbHkgPSB4ID49IHJlY3QubGVmdCAtIHRocmVzaG9sZCAmJiB4IDw9IHJlY3QucmlnaHQgKyB0aHJlc2hvbGQsXG4gICAgICAgIGluc2lkZVZlcnRpY2FsbHkgPSB5ID49IHJlY3QudG9wIC0gdGhyZXNob2xkICYmIHkgPD0gcmVjdC5ib3R0b20gKyB0aHJlc2hvbGQ7XG5cbiAgICBpZiAodGhyZXNob2xkICYmIGluc2lkZUhvcml6b250YWxseSAmJiBpbnNpZGVWZXJ0aWNhbGx5KSB7XG4gICAgICByZXR1cm4gcmV0ID0gc29ydGFibGU7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJldDtcbn0sXG4gICAgX3ByZXBhcmVHcm91cCA9IGZ1bmN0aW9uIF9wcmVwYXJlR3JvdXAob3B0aW9ucykge1xuICBmdW5jdGlvbiB0b0ZuKHZhbHVlLCBwdWxsKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0bywgZnJvbSwgZHJhZ0VsLCBldnQpIHtcbiAgICAgIHZhciBzYW1lR3JvdXAgPSB0by5vcHRpb25zLmdyb3VwLm5hbWUgJiYgZnJvbS5vcHRpb25zLmdyb3VwLm5hbWUgJiYgdG8ub3B0aW9ucy5ncm91cC5uYW1lID09PSBmcm9tLm9wdGlvbnMuZ3JvdXAubmFtZTtcblxuICAgICAgaWYgKHZhbHVlID09IG51bGwgJiYgKHB1bGwgfHwgc2FtZUdyb3VwKSkge1xuICAgICAgICAvLyBEZWZhdWx0IHB1bGwgdmFsdWVcbiAgICAgICAgLy8gRGVmYXVsdCBwdWxsIGFuZCBwdXQgdmFsdWUgaWYgc2FtZSBncm91cFxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIGlmIChwdWxsICYmIHZhbHVlID09PSAnY2xvbmUnKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiB0b0ZuKHZhbHVlKHRvLCBmcm9tLCBkcmFnRWwsIGV2dCksIHB1bGwpKHRvLCBmcm9tLCBkcmFnRWwsIGV2dCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgb3RoZXJHcm91cCA9IChwdWxsID8gdG8gOiBmcm9tKS5vcHRpb25zLmdyb3VwLm5hbWU7XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gdHJ1ZSB8fCB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlID09PSBvdGhlckdyb3VwIHx8IHZhbHVlLmpvaW4gJiYgdmFsdWUuaW5kZXhPZihvdGhlckdyb3VwKSA+IC0xO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICB2YXIgZ3JvdXAgPSB7fTtcbiAgdmFyIG9yaWdpbmFsR3JvdXAgPSBvcHRpb25zLmdyb3VwO1xuXG4gIGlmICghb3JpZ2luYWxHcm91cCB8fCBfdHlwZW9mKG9yaWdpbmFsR3JvdXApICE9ICdvYmplY3QnKSB7XG4gICAgb3JpZ2luYWxHcm91cCA9IHtcbiAgICAgIG5hbWU6IG9yaWdpbmFsR3JvdXBcbiAgICB9O1xuICB9XG5cbiAgZ3JvdXAubmFtZSA9IG9yaWdpbmFsR3JvdXAubmFtZTtcbiAgZ3JvdXAuY2hlY2tQdWxsID0gdG9GbihvcmlnaW5hbEdyb3VwLnB1bGwsIHRydWUpO1xuICBncm91cC5jaGVja1B1dCA9IHRvRm4ob3JpZ2luYWxHcm91cC5wdXQpO1xuICBncm91cC5yZXZlcnRDbG9uZSA9IG9yaWdpbmFsR3JvdXAucmV2ZXJ0Q2xvbmU7XG4gIG9wdGlvbnMuZ3JvdXAgPSBncm91cDtcbn0sXG4gICAgX2hpZGVHaG9zdEZvclRhcmdldCA9IGZ1bmN0aW9uIF9oaWRlR2hvc3RGb3JUYXJnZXQoKSB7XG4gIGlmICghc3VwcG9ydENzc1BvaW50ZXJFdmVudHMgJiYgZ2hvc3RFbCkge1xuICAgIGNzcyhnaG9zdEVsLCAnZGlzcGxheScsICdub25lJyk7XG4gIH1cbn0sXG4gICAgX3VuaGlkZUdob3N0Rm9yVGFyZ2V0ID0gZnVuY3Rpb24gX3VuaGlkZUdob3N0Rm9yVGFyZ2V0KCkge1xuICBpZiAoIXN1cHBvcnRDc3NQb2ludGVyRXZlbnRzICYmIGdob3N0RWwpIHtcbiAgICBjc3MoZ2hvc3RFbCwgJ2Rpc3BsYXknLCAnJyk7XG4gIH1cbn07IC8vICMxMTg0IGZpeCAtIFByZXZlbnQgY2xpY2sgZXZlbnQgb24gZmFsbGJhY2sgaWYgZHJhZ2dlZCBidXQgaXRlbSBub3QgY2hhbmdlZCBwb3NpdGlvblxuXG5cbmlmIChkb2N1bWVudEV4aXN0cykge1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChldnQpIHtcbiAgICBpZiAoaWdub3JlTmV4dENsaWNrKSB7XG4gICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24gJiYgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXZ0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiAmJiBldnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICBpZ25vcmVOZXh0Q2xpY2sgPSBmYWxzZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0sIHRydWUpO1xufVxuXG52YXIgbmVhcmVzdEVtcHR5SW5zZXJ0RGV0ZWN0RXZlbnQgPSBmdW5jdGlvbiBuZWFyZXN0RW1wdHlJbnNlcnREZXRlY3RFdmVudChldnQpIHtcbiAgaWYgKGRyYWdFbCkge1xuICAgIGV2dCA9IGV2dC50b3VjaGVzID8gZXZ0LnRvdWNoZXNbMF0gOiBldnQ7XG5cbiAgICB2YXIgbmVhcmVzdCA9IF9kZXRlY3ROZWFyZXN0RW1wdHlTb3J0YWJsZShldnQuY2xpZW50WCwgZXZ0LmNsaWVudFkpO1xuXG4gICAgaWYgKG5lYXJlc3QpIHtcbiAgICAgIC8vIENyZWF0ZSBpbWl0YXRpb24gZXZlbnRcbiAgICAgIHZhciBldmVudCA9IHt9O1xuXG4gICAgICBmb3IgKHZhciBpIGluIGV2dCkge1xuICAgICAgICBpZiAoZXZ0Lmhhc093blByb3BlcnR5KGkpKSB7XG4gICAgICAgICAgZXZlbnRbaV0gPSBldnRbaV07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZXZlbnQudGFyZ2V0ID0gZXZlbnQucm9vdEVsID0gbmVhcmVzdDtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0ID0gdm9pZCAwO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uID0gdm9pZCAwO1xuXG4gICAgICBuZWFyZXN0W2V4cGFuZG9dLl9vbkRyYWdPdmVyKGV2ZW50KTtcbiAgICB9XG4gIH1cbn07XG5cbnZhciBfY2hlY2tPdXRzaWRlVGFyZ2V0RWwgPSBmdW5jdGlvbiBfY2hlY2tPdXRzaWRlVGFyZ2V0RWwoZXZ0KSB7XG4gIGlmIChkcmFnRWwpIHtcbiAgICBkcmFnRWwucGFyZW50Tm9kZVtleHBhbmRvXS5faXNPdXRzaWRlVGhpc0VsKGV2dC50YXJnZXQpO1xuICB9XG59O1xuLyoqXG4gKiBAY2xhc3MgIFNvcnRhYmxlXG4gKiBAcGFyYW0gIHtIVE1MRWxlbWVudH0gIGVsXG4gKiBAcGFyYW0gIHtPYmplY3R9ICAgICAgIFtvcHRpb25zXVxuICovXG5cblxuZnVuY3Rpb24gU29ydGFibGUoZWwsIG9wdGlvbnMpIHtcbiAgaWYgKCEoZWwgJiYgZWwubm9kZVR5cGUgJiYgZWwubm9kZVR5cGUgPT09IDEpKSB7XG4gICAgdGhyb3cgXCJTb3J0YWJsZTogYGVsYCBtdXN0IGJlIGFuIEhUTUxFbGVtZW50LCBub3QgXCIuY29uY2F0KHt9LnRvU3RyaW5nLmNhbGwoZWwpKTtcbiAgfVxuXG4gIHRoaXMuZWwgPSBlbDsgLy8gcm9vdCBlbGVtZW50XG5cbiAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyA9IF9leHRlbmRzKHt9LCBvcHRpb25zKTsgLy8gRXhwb3J0IGluc3RhbmNlXG5cbiAgZWxbZXhwYW5kb10gPSB0aGlzO1xuICB2YXIgZGVmYXVsdHMgPSB7XG4gICAgZ3JvdXA6IG51bGwsXG4gICAgc29ydDogdHJ1ZSxcbiAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgc3RvcmU6IG51bGwsXG4gICAgaGFuZGxlOiBudWxsLFxuICAgIGRyYWdnYWJsZTogL15bdW9dbCQvaS50ZXN0KGVsLm5vZGVOYW1lKSA/ICc+bGknIDogJz4qJyxcbiAgICBzd2FwVGhyZXNob2xkOiAxLFxuICAgIC8vIHBlcmNlbnRhZ2U7IDAgPD0geCA8PSAxXG4gICAgaW52ZXJ0U3dhcDogZmFsc2UsXG4gICAgLy8gaW52ZXJ0IGFsd2F5c1xuICAgIGludmVydGVkU3dhcFRocmVzaG9sZDogbnVsbCxcbiAgICAvLyB3aWxsIGJlIHNldCB0byBzYW1lIGFzIHN3YXBUaHJlc2hvbGQgaWYgZGVmYXVsdFxuICAgIHJlbW92ZUNsb25lT25IaWRlOiB0cnVlLFxuICAgIGRpcmVjdGlvbjogZnVuY3Rpb24gZGlyZWN0aW9uKCkge1xuICAgICAgcmV0dXJuIF9kZXRlY3REaXJlY3Rpb24oZWwsIHRoaXMub3B0aW9ucyk7XG4gICAgfSxcbiAgICBnaG9zdENsYXNzOiAnc29ydGFibGUtZ2hvc3QnLFxuICAgIGNob3NlbkNsYXNzOiAnc29ydGFibGUtY2hvc2VuJyxcbiAgICBkcmFnQ2xhc3M6ICdzb3J0YWJsZS1kcmFnJyxcbiAgICBpZ25vcmU6ICdhLCBpbWcnLFxuICAgIGZpbHRlcjogbnVsbCxcbiAgICBwcmV2ZW50T25GaWx0ZXI6IHRydWUsXG4gICAgYW5pbWF0aW9uOiAwLFxuICAgIGVhc2luZzogbnVsbCxcbiAgICBzZXREYXRhOiBmdW5jdGlvbiBzZXREYXRhKGRhdGFUcmFuc2ZlciwgZHJhZ0VsKSB7XG4gICAgICBkYXRhVHJhbnNmZXIuc2V0RGF0YSgnVGV4dCcsIGRyYWdFbC50ZXh0Q29udGVudCk7XG4gICAgfSxcbiAgICBkcm9wQnViYmxlOiBmYWxzZSxcbiAgICBkcmFnb3ZlckJ1YmJsZTogZmFsc2UsXG4gICAgZGF0YUlkQXR0cjogJ2RhdGEtaWQnLFxuICAgIGRlbGF5OiAwLFxuICAgIGRlbGF5T25Ub3VjaE9ubHk6IGZhbHNlLFxuICAgIHRvdWNoU3RhcnRUaHJlc2hvbGQ6IChOdW1iZXIucGFyc2VJbnQgPyBOdW1iZXIgOiB3aW5kb3cpLnBhcnNlSW50KHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvLCAxMCkgfHwgMSxcbiAgICBmb3JjZUZhbGxiYWNrOiBmYWxzZSxcbiAgICBmYWxsYmFja0NsYXNzOiAnc29ydGFibGUtZmFsbGJhY2snLFxuICAgIGZhbGxiYWNrT25Cb2R5OiBmYWxzZSxcbiAgICBmYWxsYmFja1RvbGVyYW5jZTogMCxcbiAgICBmYWxsYmFja09mZnNldDoge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDBcbiAgICB9LFxuICAgIHN1cHBvcnRQb2ludGVyOiBTb3J0YWJsZS5zdXBwb3J0UG9pbnRlciAhPT0gZmFsc2UgJiYgJ1BvaW50ZXJFdmVudCcgaW4gd2luZG93ICYmICFTYWZhcmksXG4gICAgZW1wdHlJbnNlcnRUaHJlc2hvbGQ6IDVcbiAgfTtcbiAgUGx1Z2luTWFuYWdlci5pbml0aWFsaXplUGx1Z2lucyh0aGlzLCBlbCwgZGVmYXVsdHMpOyAvLyBTZXQgZGVmYXVsdCBvcHRpb25zXG5cbiAgZm9yICh2YXIgbmFtZSBpbiBkZWZhdWx0cykge1xuICAgICEobmFtZSBpbiBvcHRpb25zKSAmJiAob3B0aW9uc1tuYW1lXSA9IGRlZmF1bHRzW25hbWVdKTtcbiAgfVxuXG4gIF9wcmVwYXJlR3JvdXAob3B0aW9ucyk7IC8vIEJpbmQgYWxsIHByaXZhdGUgbWV0aG9kc1xuXG5cbiAgZm9yICh2YXIgZm4gaW4gdGhpcykge1xuICAgIGlmIChmbi5jaGFyQXQoMCkgPT09ICdfJyAmJiB0eXBlb2YgdGhpc1tmbl0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNbZm5dID0gdGhpc1tmbl0uYmluZCh0aGlzKTtcbiAgICB9XG4gIH0gLy8gU2V0dXAgZHJhZyBtb2RlXG5cblxuICB0aGlzLm5hdGl2ZURyYWdnYWJsZSA9IG9wdGlvbnMuZm9yY2VGYWxsYmFjayA/IGZhbHNlIDogc3VwcG9ydERyYWdnYWJsZTtcblxuICBpZiAodGhpcy5uYXRpdmVEcmFnZ2FibGUpIHtcbiAgICAvLyBUb3VjaCBzdGFydCB0aHJlc2hvbGQgY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiB0aGUgbmF0aXZlIGRyYWdzdGFydCB0aHJlc2hvbGRcbiAgICB0aGlzLm9wdGlvbnMudG91Y2hTdGFydFRocmVzaG9sZCA9IDE7XG4gIH0gLy8gQmluZCBldmVudHNcblxuXG4gIGlmIChvcHRpb25zLnN1cHBvcnRQb2ludGVyKSB7XG4gICAgb24oZWwsICdwb2ludGVyZG93bicsIHRoaXMuX29uVGFwU3RhcnQpO1xuICB9IGVsc2Uge1xuICAgIG9uKGVsLCAnbW91c2Vkb3duJywgdGhpcy5fb25UYXBTdGFydCk7XG4gICAgb24oZWwsICd0b3VjaHN0YXJ0JywgdGhpcy5fb25UYXBTdGFydCk7XG4gIH1cblxuICBpZiAodGhpcy5uYXRpdmVEcmFnZ2FibGUpIHtcbiAgICBvbihlbCwgJ2RyYWdvdmVyJywgdGhpcyk7XG4gICAgb24oZWwsICdkcmFnZW50ZXInLCB0aGlzKTtcbiAgfVxuXG4gIHNvcnRhYmxlcy5wdXNoKHRoaXMuZWwpOyAvLyBSZXN0b3JlIHNvcnRpbmdcblxuICBvcHRpb25zLnN0b3JlICYmIG9wdGlvbnMuc3RvcmUuZ2V0ICYmIHRoaXMuc29ydChvcHRpb25zLnN0b3JlLmdldCh0aGlzKSB8fCBbXSk7IC8vIEFkZCBhbmltYXRpb24gc3RhdGUgbWFuYWdlclxuXG4gIF9leHRlbmRzKHRoaXMsIEFuaW1hdGlvblN0YXRlTWFuYWdlcigpKTtcbn1cblxuU29ydGFibGUucHJvdG90eXBlID1cbi8qKiBAbGVuZHMgU29ydGFibGUucHJvdG90eXBlICovXG57XG4gIGNvbnN0cnVjdG9yOiBTb3J0YWJsZSxcbiAgX2lzT3V0c2lkZVRoaXNFbDogZnVuY3Rpb24gX2lzT3V0c2lkZVRoaXNFbCh0YXJnZXQpIHtcbiAgICBpZiAoIXRoaXMuZWwuY29udGFpbnModGFyZ2V0KSAmJiB0YXJnZXQgIT09IHRoaXMuZWwpIHtcbiAgICAgIGxhc3RUYXJnZXQgPSBudWxsO1xuICAgIH1cbiAgfSxcbiAgX2dldERpcmVjdGlvbjogZnVuY3Rpb24gX2dldERpcmVjdGlvbihldnQsIHRhcmdldCkge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5vcHRpb25zLmRpcmVjdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMub3B0aW9ucy5kaXJlY3Rpb24uY2FsbCh0aGlzLCBldnQsIHRhcmdldCwgZHJhZ0VsKSA6IHRoaXMub3B0aW9ucy5kaXJlY3Rpb247XG4gIH0sXG4gIF9vblRhcFN0YXJ0OiBmdW5jdGlvbiBfb25UYXBTdGFydChcbiAgLyoqIEV2ZW50fFRvdWNoRXZlbnQgKi9cbiAgZXZ0KSB7XG4gICAgaWYgKCFldnQuY2FuY2VsYWJsZSkgcmV0dXJuO1xuXG4gICAgdmFyIF90aGlzID0gdGhpcyxcbiAgICAgICAgZWwgPSB0aGlzLmVsLFxuICAgICAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zLFxuICAgICAgICBwcmV2ZW50T25GaWx0ZXIgPSBvcHRpb25zLnByZXZlbnRPbkZpbHRlcixcbiAgICAgICAgdHlwZSA9IGV2dC50eXBlLFxuICAgICAgICB0b3VjaCA9IGV2dC50b3VjaGVzICYmIGV2dC50b3VjaGVzWzBdIHx8IGV2dC5wb2ludGVyVHlwZSAmJiBldnQucG9pbnRlclR5cGUgPT09ICd0b3VjaCcgJiYgZXZ0LFxuICAgICAgICB0YXJnZXQgPSAodG91Y2ggfHwgZXZ0KS50YXJnZXQsXG4gICAgICAgIG9yaWdpbmFsVGFyZ2V0ID0gZXZ0LnRhcmdldC5zaGFkb3dSb290ICYmIChldnQucGF0aCAmJiBldnQucGF0aFswXSB8fCBldnQuY29tcG9zZWRQYXRoICYmIGV2dC5jb21wb3NlZFBhdGgoKVswXSkgfHwgdGFyZ2V0LFxuICAgICAgICBmaWx0ZXIgPSBvcHRpb25zLmZpbHRlcjtcblxuICAgIF9zYXZlSW5wdXRDaGVja2VkU3RhdGUoZWwpOyAvLyBEb24ndCB0cmlnZ2VyIHN0YXJ0IGV2ZW50IHdoZW4gYW4gZWxlbWVudCBpcyBiZWVuIGRyYWdnZWQsIG90aGVyd2lzZSB0aGUgZXZ0Lm9sZGluZGV4IGFsd2F5cyB3cm9uZyB3aGVuIHNldCBvcHRpb24uZ3JvdXAuXG5cblxuICAgIGlmIChkcmFnRWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoL21vdXNlZG93bnxwb2ludGVyZG93bi8udGVzdCh0eXBlKSAmJiBldnQuYnV0dG9uICE9PSAwIHx8IG9wdGlvbnMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjsgLy8gb25seSBsZWZ0IGJ1dHRvbiBhbmQgZW5hYmxlZFxuICAgIH0gLy8gY2FuY2VsIGRuZCBpZiBvcmlnaW5hbCB0YXJnZXQgaXMgY29udGVudCBlZGl0YWJsZVxuXG5cbiAgICBpZiAob3JpZ2luYWxUYXJnZXQuaXNDb250ZW50RWRpdGFibGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFNhZmFyaSBpZ25vcmVzIGZ1cnRoZXIgZXZlbnQgaGFuZGxpbmcgYWZ0ZXIgbW91c2Vkb3duXG5cblxuICAgIGlmICghdGhpcy5uYXRpdmVEcmFnZ2FibGUgJiYgU2FmYXJpICYmIHRhcmdldCAmJiB0YXJnZXQudGFnTmFtZS50b1VwcGVyQ2FzZSgpID09PSAnU0VMRUNUJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRhcmdldCA9IGNsb3Nlc3QodGFyZ2V0LCBvcHRpb25zLmRyYWdnYWJsZSwgZWwsIGZhbHNlKTtcblxuICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0LmFuaW1hdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGxhc3REb3duRWwgPT09IHRhcmdldCkge1xuICAgICAgLy8gSWdub3JpbmcgZHVwbGljYXRlIGBkb3duYFxuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gR2V0IHRoZSBpbmRleCBvZiB0aGUgZHJhZ2dlZCBlbGVtZW50IHdpdGhpbiBpdHMgcGFyZW50XG5cblxuICAgIG9sZEluZGV4ID0gaW5kZXgodGFyZ2V0KTtcbiAgICBvbGREcmFnZ2FibGVJbmRleCA9IGluZGV4KHRhcmdldCwgb3B0aW9ucy5kcmFnZ2FibGUpOyAvLyBDaGVjayBmaWx0ZXJcblxuICAgIGlmICh0eXBlb2YgZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAoZmlsdGVyLmNhbGwodGhpcywgZXZ0LCB0YXJnZXQsIHRoaXMpKSB7XG4gICAgICAgIF9kaXNwYXRjaEV2ZW50KHtcbiAgICAgICAgICBzb3J0YWJsZTogX3RoaXMsXG4gICAgICAgICAgcm9vdEVsOiBvcmlnaW5hbFRhcmdldCxcbiAgICAgICAgICBuYW1lOiAnZmlsdGVyJyxcbiAgICAgICAgICB0YXJnZXRFbDogdGFyZ2V0LFxuICAgICAgICAgIHRvRWw6IGVsLFxuICAgICAgICAgIGZyb21FbDogZWxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcGx1Z2luRXZlbnQoJ2ZpbHRlcicsIF90aGlzLCB7XG4gICAgICAgICAgZXZ0OiBldnRcbiAgICAgICAgfSk7XG4gICAgICAgIHByZXZlbnRPbkZpbHRlciAmJiBldnQuY2FuY2VsYWJsZSAmJiBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuOyAvLyBjYW5jZWwgZG5kXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChmaWx0ZXIpIHtcbiAgICAgIGZpbHRlciA9IGZpbHRlci5zcGxpdCgnLCcpLnNvbWUoZnVuY3Rpb24gKGNyaXRlcmlhKSB7XG4gICAgICAgIGNyaXRlcmlhID0gY2xvc2VzdChvcmlnaW5hbFRhcmdldCwgY3JpdGVyaWEudHJpbSgpLCBlbCwgZmFsc2UpO1xuXG4gICAgICAgIGlmIChjcml0ZXJpYSkge1xuICAgICAgICAgIF9kaXNwYXRjaEV2ZW50KHtcbiAgICAgICAgICAgIHNvcnRhYmxlOiBfdGhpcyxcbiAgICAgICAgICAgIHJvb3RFbDogY3JpdGVyaWEsXG4gICAgICAgICAgICBuYW1lOiAnZmlsdGVyJyxcbiAgICAgICAgICAgIHRhcmdldEVsOiB0YXJnZXQsXG4gICAgICAgICAgICBmcm9tRWw6IGVsLFxuICAgICAgICAgICAgdG9FbDogZWxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHBsdWdpbkV2ZW50KCdmaWx0ZXInLCBfdGhpcywge1xuICAgICAgICAgICAgZXZ0OiBldnRcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChmaWx0ZXIpIHtcbiAgICAgICAgcHJldmVudE9uRmlsdGVyICYmIGV2dC5jYW5jZWxhYmxlICYmIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm47IC8vIGNhbmNlbCBkbmRcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5oYW5kbGUgJiYgIWNsb3Nlc3Qob3JpZ2luYWxUYXJnZXQsIG9wdGlvbnMuaGFuZGxlLCBlbCwgZmFsc2UpKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBQcmVwYXJlIGBkcmFnc3RhcnRgXG5cblxuICAgIHRoaXMuX3ByZXBhcmVEcmFnU3RhcnQoZXZ0LCB0b3VjaCwgdGFyZ2V0KTtcbiAgfSxcbiAgX3ByZXBhcmVEcmFnU3RhcnQ6IGZ1bmN0aW9uIF9wcmVwYXJlRHJhZ1N0YXJ0KFxuICAvKiogRXZlbnQgKi9cbiAgZXZ0LFxuICAvKiogVG91Y2ggKi9cbiAgdG91Y2gsXG4gIC8qKiBIVE1MRWxlbWVudCAqL1xuICB0YXJnZXQpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzLFxuICAgICAgICBlbCA9IF90aGlzLmVsLFxuICAgICAgICBvcHRpb25zID0gX3RoaXMub3B0aW9ucyxcbiAgICAgICAgb3duZXJEb2N1bWVudCA9IGVsLm93bmVyRG9jdW1lbnQsXG4gICAgICAgIGRyYWdTdGFydEZuO1xuXG4gICAgaWYgKHRhcmdldCAmJiAhZHJhZ0VsICYmIHRhcmdldC5wYXJlbnROb2RlID09PSBlbCkge1xuICAgICAgdmFyIGRyYWdSZWN0ID0gZ2V0UmVjdCh0YXJnZXQpO1xuICAgICAgcm9vdEVsID0gZWw7XG4gICAgICBkcmFnRWwgPSB0YXJnZXQ7XG4gICAgICBwYXJlbnRFbCA9IGRyYWdFbC5wYXJlbnROb2RlO1xuICAgICAgbmV4dEVsID0gZHJhZ0VsLm5leHRTaWJsaW5nO1xuICAgICAgbGFzdERvd25FbCA9IHRhcmdldDtcbiAgICAgIGFjdGl2ZUdyb3VwID0gb3B0aW9ucy5ncm91cDtcbiAgICAgIFNvcnRhYmxlLmRyYWdnZWQgPSBkcmFnRWw7XG4gICAgICB0YXBFdnQgPSB7XG4gICAgICAgIHRhcmdldDogZHJhZ0VsLFxuICAgICAgICBjbGllbnRYOiAodG91Y2ggfHwgZXZ0KS5jbGllbnRYLFxuICAgICAgICBjbGllbnRZOiAodG91Y2ggfHwgZXZ0KS5jbGllbnRZXG4gICAgICB9O1xuICAgICAgdGFwRGlzdGFuY2VMZWZ0ID0gdGFwRXZ0LmNsaWVudFggLSBkcmFnUmVjdC5sZWZ0O1xuICAgICAgdGFwRGlzdGFuY2VUb3AgPSB0YXBFdnQuY2xpZW50WSAtIGRyYWdSZWN0LnRvcDtcbiAgICAgIHRoaXMuX2xhc3RYID0gKHRvdWNoIHx8IGV2dCkuY2xpZW50WDtcbiAgICAgIHRoaXMuX2xhc3RZID0gKHRvdWNoIHx8IGV2dCkuY2xpZW50WTtcbiAgICAgIGRyYWdFbC5zdHlsZVsnd2lsbC1jaGFuZ2UnXSA9ICdhbGwnO1xuXG4gICAgICBkcmFnU3RhcnRGbiA9IGZ1bmN0aW9uIGRyYWdTdGFydEZuKCkge1xuICAgICAgICBwbHVnaW5FdmVudCgnZGVsYXlFbmRlZCcsIF90aGlzLCB7XG4gICAgICAgICAgZXZ0OiBldnRcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKFNvcnRhYmxlLmV2ZW50Q2FuY2VsZWQpIHtcbiAgICAgICAgICBfdGhpcy5fb25Ecm9wKCk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gRGVsYXllZCBkcmFnIGhhcyBiZWVuIHRyaWdnZXJlZFxuICAgICAgICAvLyB3ZSBjYW4gcmUtZW5hYmxlIHRoZSBldmVudHM6IHRvdWNobW92ZS9tb3VzZW1vdmVcblxuXG4gICAgICAgIF90aGlzLl9kaXNhYmxlRGVsYXllZERyYWdFdmVudHMoKTtcblxuICAgICAgICBpZiAoIUZpcmVGb3ggJiYgX3RoaXMubmF0aXZlRHJhZ2dhYmxlKSB7XG4gICAgICAgICAgZHJhZ0VsLmRyYWdnYWJsZSA9IHRydWU7XG4gICAgICAgIH0gLy8gQmluZCB0aGUgZXZlbnRzOiBkcmFnc3RhcnQvZHJhZ2VuZFxuXG5cbiAgICAgICAgX3RoaXMuX3RyaWdnZXJEcmFnU3RhcnQoZXZ0LCB0b3VjaCk7IC8vIERyYWcgc3RhcnQgZXZlbnRcblxuXG4gICAgICAgIF9kaXNwYXRjaEV2ZW50KHtcbiAgICAgICAgICBzb3J0YWJsZTogX3RoaXMsXG4gICAgICAgICAgbmFtZTogJ2Nob29zZScsXG4gICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZ0XG4gICAgICAgIH0pOyAvLyBDaG9zZW4gaXRlbVxuXG5cbiAgICAgICAgdG9nZ2xlQ2xhc3MoZHJhZ0VsLCBvcHRpb25zLmNob3NlbkNsYXNzLCB0cnVlKTtcbiAgICAgIH07IC8vIERpc2FibGUgXCJkcmFnZ2FibGVcIlxuXG5cbiAgICAgIG9wdGlvbnMuaWdub3JlLnNwbGl0KCcsJykuZm9yRWFjaChmdW5jdGlvbiAoY3JpdGVyaWEpIHtcbiAgICAgICAgZmluZChkcmFnRWwsIGNyaXRlcmlhLnRyaW0oKSwgX2Rpc2FibGVEcmFnZ2FibGUpO1xuICAgICAgfSk7XG4gICAgICBvbihvd25lckRvY3VtZW50LCAnZHJhZ292ZXInLCBuZWFyZXN0RW1wdHlJbnNlcnREZXRlY3RFdmVudCk7XG4gICAgICBvbihvd25lckRvY3VtZW50LCAnbW91c2Vtb3ZlJywgbmVhcmVzdEVtcHR5SW5zZXJ0RGV0ZWN0RXZlbnQpO1xuICAgICAgb24ob3duZXJEb2N1bWVudCwgJ3RvdWNobW92ZScsIG5lYXJlc3RFbXB0eUluc2VydERldGVjdEV2ZW50KTtcbiAgICAgIG9uKG93bmVyRG9jdW1lbnQsICdtb3VzZXVwJywgX3RoaXMuX29uRHJvcCk7XG4gICAgICBvbihvd25lckRvY3VtZW50LCAndG91Y2hlbmQnLCBfdGhpcy5fb25Ecm9wKTtcbiAgICAgIG9uKG93bmVyRG9jdW1lbnQsICd0b3VjaGNhbmNlbCcsIF90aGlzLl9vbkRyb3ApOyAvLyBNYWtlIGRyYWdFbCBkcmFnZ2FibGUgKG11c3QgYmUgYmVmb3JlIGRlbGF5IGZvciBGaXJlRm94KVxuXG4gICAgICBpZiAoRmlyZUZveCAmJiB0aGlzLm5hdGl2ZURyYWdnYWJsZSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMudG91Y2hTdGFydFRocmVzaG9sZCA9IDQ7XG4gICAgICAgIGRyYWdFbC5kcmFnZ2FibGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBwbHVnaW5FdmVudCgnZGVsYXlTdGFydCcsIHRoaXMsIHtcbiAgICAgICAgZXZ0OiBldnRcbiAgICAgIH0pOyAvLyBEZWxheSBpcyBpbXBvc3NpYmxlIGZvciBuYXRpdmUgRG5EIGluIEVkZ2Ugb3IgSUVcblxuICAgICAgaWYgKG9wdGlvbnMuZGVsYXkgJiYgKCFvcHRpb25zLmRlbGF5T25Ub3VjaE9ubHkgfHwgdG91Y2gpICYmICghdGhpcy5uYXRpdmVEcmFnZ2FibGUgfHwgIShFZGdlIHx8IElFMTFPckxlc3MpKSkge1xuICAgICAgICBpZiAoU29ydGFibGUuZXZlbnRDYW5jZWxlZCkge1xuICAgICAgICAgIHRoaXMuX29uRHJvcCgpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIElmIHRoZSB1c2VyIG1vdmVzIHRoZSBwb2ludGVyIG9yIGxldCBnbyB0aGUgY2xpY2sgb3IgdG91Y2hcbiAgICAgICAgLy8gYmVmb3JlIHRoZSBkZWxheSBoYXMgYmVlbiByZWFjaGVkOlxuICAgICAgICAvLyBkaXNhYmxlIHRoZSBkZWxheWVkIGRyYWdcblxuXG4gICAgICAgIG9uKG93bmVyRG9jdW1lbnQsICdtb3VzZXVwJywgX3RoaXMuX2Rpc2FibGVEZWxheWVkRHJhZyk7XG4gICAgICAgIG9uKG93bmVyRG9jdW1lbnQsICd0b3VjaGVuZCcsIF90aGlzLl9kaXNhYmxlRGVsYXllZERyYWcpO1xuICAgICAgICBvbihvd25lckRvY3VtZW50LCAndG91Y2hjYW5jZWwnLCBfdGhpcy5fZGlzYWJsZURlbGF5ZWREcmFnKTtcbiAgICAgICAgb24ob3duZXJEb2N1bWVudCwgJ21vdXNlbW92ZScsIF90aGlzLl9kZWxheWVkRHJhZ1RvdWNoTW92ZUhhbmRsZXIpO1xuICAgICAgICBvbihvd25lckRvY3VtZW50LCAndG91Y2htb3ZlJywgX3RoaXMuX2RlbGF5ZWREcmFnVG91Y2hNb3ZlSGFuZGxlcik7XG4gICAgICAgIG9wdGlvbnMuc3VwcG9ydFBvaW50ZXIgJiYgb24ob3duZXJEb2N1bWVudCwgJ3BvaW50ZXJtb3ZlJywgX3RoaXMuX2RlbGF5ZWREcmFnVG91Y2hNb3ZlSGFuZGxlcik7XG4gICAgICAgIF90aGlzLl9kcmFnU3RhcnRUaW1lciA9IHNldFRpbWVvdXQoZHJhZ1N0YXJ0Rm4sIG9wdGlvbnMuZGVsYXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZHJhZ1N0YXJ0Rm4oKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIF9kZWxheWVkRHJhZ1RvdWNoTW92ZUhhbmRsZXI6IGZ1bmN0aW9uIF9kZWxheWVkRHJhZ1RvdWNoTW92ZUhhbmRsZXIoXG4gIC8qKiBUb3VjaEV2ZW50fFBvaW50ZXJFdmVudCAqKi9cbiAgZSkge1xuICAgIHZhciB0b3VjaCA9IGUudG91Y2hlcyA/IGUudG91Y2hlc1swXSA6IGU7XG5cbiAgICBpZiAoTWF0aC5tYXgoTWF0aC5hYnModG91Y2guY2xpZW50WCAtIHRoaXMuX2xhc3RYKSwgTWF0aC5hYnModG91Y2guY2xpZW50WSAtIHRoaXMuX2xhc3RZKSkgPj0gTWF0aC5mbG9vcih0aGlzLm9wdGlvbnMudG91Y2hTdGFydFRocmVzaG9sZCAvICh0aGlzLm5hdGl2ZURyYWdnYWJsZSAmJiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxKSkpIHtcbiAgICAgIHRoaXMuX2Rpc2FibGVEZWxheWVkRHJhZygpO1xuICAgIH1cbiAgfSxcbiAgX2Rpc2FibGVEZWxheWVkRHJhZzogZnVuY3Rpb24gX2Rpc2FibGVEZWxheWVkRHJhZygpIHtcbiAgICBkcmFnRWwgJiYgX2Rpc2FibGVEcmFnZ2FibGUoZHJhZ0VsKTtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fZHJhZ1N0YXJ0VGltZXIpO1xuXG4gICAgdGhpcy5fZGlzYWJsZURlbGF5ZWREcmFnRXZlbnRzKCk7XG4gIH0sXG4gIF9kaXNhYmxlRGVsYXllZERyYWdFdmVudHM6IGZ1bmN0aW9uIF9kaXNhYmxlRGVsYXllZERyYWdFdmVudHMoKSB7XG4gICAgdmFyIG93bmVyRG9jdW1lbnQgPSB0aGlzLmVsLm93bmVyRG9jdW1lbnQ7XG4gICAgb2ZmKG93bmVyRG9jdW1lbnQsICdtb3VzZXVwJywgdGhpcy5fZGlzYWJsZURlbGF5ZWREcmFnKTtcbiAgICBvZmYob3duZXJEb2N1bWVudCwgJ3RvdWNoZW5kJywgdGhpcy5fZGlzYWJsZURlbGF5ZWREcmFnKTtcbiAgICBvZmYob3duZXJEb2N1bWVudCwgJ3RvdWNoY2FuY2VsJywgdGhpcy5fZGlzYWJsZURlbGF5ZWREcmFnKTtcbiAgICBvZmYob3duZXJEb2N1bWVudCwgJ21vdXNlbW92ZScsIHRoaXMuX2RlbGF5ZWREcmFnVG91Y2hNb3ZlSGFuZGxlcik7XG4gICAgb2ZmKG93bmVyRG9jdW1lbnQsICd0b3VjaG1vdmUnLCB0aGlzLl9kZWxheWVkRHJhZ1RvdWNoTW92ZUhhbmRsZXIpO1xuICAgIG9mZihvd25lckRvY3VtZW50LCAncG9pbnRlcm1vdmUnLCB0aGlzLl9kZWxheWVkRHJhZ1RvdWNoTW92ZUhhbmRsZXIpO1xuICB9LFxuICBfdHJpZ2dlckRyYWdTdGFydDogZnVuY3Rpb24gX3RyaWdnZXJEcmFnU3RhcnQoXG4gIC8qKiBFdmVudCAqL1xuICBldnQsXG4gIC8qKiBUb3VjaCAqL1xuICB0b3VjaCkge1xuICAgIHRvdWNoID0gdG91Y2ggfHwgZXZ0LnBvaW50ZXJUeXBlID09ICd0b3VjaCcgJiYgZXZ0O1xuXG4gICAgaWYgKCF0aGlzLm5hdGl2ZURyYWdnYWJsZSB8fCB0b3VjaCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5zdXBwb3J0UG9pbnRlcikge1xuICAgICAgICBvbihkb2N1bWVudCwgJ3BvaW50ZXJtb3ZlJywgdGhpcy5fb25Ub3VjaE1vdmUpO1xuICAgICAgfSBlbHNlIGlmICh0b3VjaCkge1xuICAgICAgICBvbihkb2N1bWVudCwgJ3RvdWNobW92ZScsIHRoaXMuX29uVG91Y2hNb3ZlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9uKGRvY3VtZW50LCAnbW91c2Vtb3ZlJywgdGhpcy5fb25Ub3VjaE1vdmUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvbihkcmFnRWwsICdkcmFnZW5kJywgdGhpcyk7XG4gICAgICBvbihyb290RWwsICdkcmFnc3RhcnQnLCB0aGlzLl9vbkRyYWdTdGFydCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGlmIChkb2N1bWVudC5zZWxlY3Rpb24pIHtcbiAgICAgICAgLy8gVGltZW91dCBuZWNjZXNzYXJ5IGZvciBJRTlcbiAgICAgICAgX25leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBkb2N1bWVudC5zZWxlY3Rpb24uZW1wdHkoKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7fVxuICB9LFxuICBfZHJhZ1N0YXJ0ZWQ6IGZ1bmN0aW9uIF9kcmFnU3RhcnRlZChmYWxsYmFjaywgZXZ0KSB7XG5cbiAgICBhd2FpdGluZ0RyYWdTdGFydGVkID0gZmFsc2U7XG5cbiAgICBpZiAocm9vdEVsICYmIGRyYWdFbCkge1xuICAgICAgcGx1Z2luRXZlbnQoJ2RyYWdTdGFydGVkJywgdGhpcywge1xuICAgICAgICBldnQ6IGV2dFxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLm5hdGl2ZURyYWdnYWJsZSkge1xuICAgICAgICBvbihkb2N1bWVudCwgJ2RyYWdvdmVyJywgX2NoZWNrT3V0c2lkZVRhcmdldEVsKTtcbiAgICAgIH1cblxuICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7IC8vIEFwcGx5IGVmZmVjdFxuXG4gICAgICAhZmFsbGJhY2sgJiYgdG9nZ2xlQ2xhc3MoZHJhZ0VsLCBvcHRpb25zLmRyYWdDbGFzcywgZmFsc2UpO1xuICAgICAgdG9nZ2xlQ2xhc3MoZHJhZ0VsLCBvcHRpb25zLmdob3N0Q2xhc3MsIHRydWUpO1xuICAgICAgU29ydGFibGUuYWN0aXZlID0gdGhpcztcbiAgICAgIGZhbGxiYWNrICYmIHRoaXMuX2FwcGVuZEdob3N0KCk7IC8vIERyYWcgc3RhcnQgZXZlbnRcblxuICAgICAgX2Rpc3BhdGNoRXZlbnQoe1xuICAgICAgICBzb3J0YWJsZTogdGhpcyxcbiAgICAgICAgbmFtZTogJ3N0YXJ0JyxcbiAgICAgICAgb3JpZ2luYWxFdmVudDogZXZ0XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbnVsbGluZygpO1xuICAgIH1cbiAgfSxcbiAgX2VtdWxhdGVEcmFnT3ZlcjogZnVuY3Rpb24gX2VtdWxhdGVEcmFnT3ZlcigpIHtcbiAgICBpZiAodG91Y2hFdnQpIHtcbiAgICAgIHRoaXMuX2xhc3RYID0gdG91Y2hFdnQuY2xpZW50WDtcbiAgICAgIHRoaXMuX2xhc3RZID0gdG91Y2hFdnQuY2xpZW50WTtcblxuICAgICAgX2hpZGVHaG9zdEZvclRhcmdldCgpO1xuXG4gICAgICB2YXIgdGFyZ2V0ID0gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludCh0b3VjaEV2dC5jbGllbnRYLCB0b3VjaEV2dC5jbGllbnRZKTtcbiAgICAgIHZhciBwYXJlbnQgPSB0YXJnZXQ7XG5cbiAgICAgIHdoaWxlICh0YXJnZXQgJiYgdGFyZ2V0LnNoYWRvd1Jvb3QpIHtcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnNoYWRvd1Jvb3QuZWxlbWVudEZyb21Qb2ludCh0b3VjaEV2dC5jbGllbnRYLCB0b3VjaEV2dC5jbGllbnRZKTtcbiAgICAgICAgaWYgKHRhcmdldCA9PT0gcGFyZW50KSBicmVhaztcbiAgICAgICAgcGFyZW50ID0gdGFyZ2V0O1xuICAgICAgfVxuXG4gICAgICBkcmFnRWwucGFyZW50Tm9kZVtleHBhbmRvXS5faXNPdXRzaWRlVGhpc0VsKHRhcmdldCk7XG5cbiAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgZG8ge1xuICAgICAgICAgIGlmIChwYXJlbnRbZXhwYW5kb10pIHtcbiAgICAgICAgICAgIHZhciBpbnNlcnRlZCA9IHZvaWQgMDtcbiAgICAgICAgICAgIGluc2VydGVkID0gcGFyZW50W2V4cGFuZG9dLl9vbkRyYWdPdmVyKHtcbiAgICAgICAgICAgICAgY2xpZW50WDogdG91Y2hFdnQuY2xpZW50WCxcbiAgICAgICAgICAgICAgY2xpZW50WTogdG91Y2hFdnQuY2xpZW50WSxcbiAgICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgICAgICAgIHJvb3RFbDogcGFyZW50XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGluc2VydGVkICYmICF0aGlzLm9wdGlvbnMuZHJhZ292ZXJCdWJibGUpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGFyZ2V0ID0gcGFyZW50OyAvLyBzdG9yZSBsYXN0IGVsZW1lbnRcbiAgICAgICAgfVxuICAgICAgICAvKiBqc2hpbnQgYm9zczp0cnVlICovXG4gICAgICAgIHdoaWxlIChwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZSk7XG4gICAgICB9XG5cbiAgICAgIF91bmhpZGVHaG9zdEZvclRhcmdldCgpO1xuICAgIH1cbiAgfSxcbiAgX29uVG91Y2hNb3ZlOiBmdW5jdGlvbiBfb25Ub3VjaE1vdmUoXG4gIC8qKlRvdWNoRXZlbnQqL1xuICBldnQpIHtcbiAgICBpZiAodGFwRXZ0KSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucyxcbiAgICAgICAgICBmYWxsYmFja1RvbGVyYW5jZSA9IG9wdGlvbnMuZmFsbGJhY2tUb2xlcmFuY2UsXG4gICAgICAgICAgZmFsbGJhY2tPZmZzZXQgPSBvcHRpb25zLmZhbGxiYWNrT2Zmc2V0LFxuICAgICAgICAgIHRvdWNoID0gZXZ0LnRvdWNoZXMgPyBldnQudG91Y2hlc1swXSA6IGV2dCxcbiAgICAgICAgICBnaG9zdE1hdHJpeCA9IGdob3N0RWwgJiYgbWF0cml4KGdob3N0RWwsIHRydWUpLFxuICAgICAgICAgIHNjYWxlWCA9IGdob3N0RWwgJiYgZ2hvc3RNYXRyaXggJiYgZ2hvc3RNYXRyaXguYSxcbiAgICAgICAgICBzY2FsZVkgPSBnaG9zdEVsICYmIGdob3N0TWF0cml4ICYmIGdob3N0TWF0cml4LmQsXG4gICAgICAgICAgcmVsYXRpdmVTY3JvbGxPZmZzZXQgPSBQb3NpdGlvbkdob3N0QWJzb2x1dGVseSAmJiBnaG9zdFJlbGF0aXZlUGFyZW50ICYmIGdldFJlbGF0aXZlU2Nyb2xsT2Zmc2V0KGdob3N0UmVsYXRpdmVQYXJlbnQpLFxuICAgICAgICAgIGR4ID0gKHRvdWNoLmNsaWVudFggLSB0YXBFdnQuY2xpZW50WCArIGZhbGxiYWNrT2Zmc2V0LngpIC8gKHNjYWxlWCB8fCAxKSArIChyZWxhdGl2ZVNjcm9sbE9mZnNldCA/IHJlbGF0aXZlU2Nyb2xsT2Zmc2V0WzBdIC0gZ2hvc3RSZWxhdGl2ZVBhcmVudEluaXRpYWxTY3JvbGxbMF0gOiAwKSAvIChzY2FsZVggfHwgMSksXG4gICAgICAgICAgZHkgPSAodG91Y2guY2xpZW50WSAtIHRhcEV2dC5jbGllbnRZICsgZmFsbGJhY2tPZmZzZXQueSkgLyAoc2NhbGVZIHx8IDEpICsgKHJlbGF0aXZlU2Nyb2xsT2Zmc2V0ID8gcmVsYXRpdmVTY3JvbGxPZmZzZXRbMV0gLSBnaG9zdFJlbGF0aXZlUGFyZW50SW5pdGlhbFNjcm9sbFsxXSA6IDApIC8gKHNjYWxlWSB8fCAxKTsgLy8gb25seSBzZXQgdGhlIHN0YXR1cyB0byBkcmFnZ2luZywgd2hlbiB3ZSBhcmUgYWN0dWFsbHkgZHJhZ2dpbmdcblxuICAgICAgaWYgKCFTb3J0YWJsZS5hY3RpdmUgJiYgIWF3YWl0aW5nRHJhZ1N0YXJ0ZWQpIHtcbiAgICAgICAgaWYgKGZhbGxiYWNrVG9sZXJhbmNlICYmIE1hdGgubWF4KE1hdGguYWJzKHRvdWNoLmNsaWVudFggLSB0aGlzLl9sYXN0WCksIE1hdGguYWJzKHRvdWNoLmNsaWVudFkgLSB0aGlzLl9sYXN0WSkpIDwgZmFsbGJhY2tUb2xlcmFuY2UpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9vbkRyYWdTdGFydChldnQsIHRydWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZ2hvc3RFbCkge1xuICAgICAgICBpZiAoZ2hvc3RNYXRyaXgpIHtcbiAgICAgICAgICBnaG9zdE1hdHJpeC5lICs9IGR4IC0gKGxhc3REeCB8fCAwKTtcbiAgICAgICAgICBnaG9zdE1hdHJpeC5mICs9IGR5IC0gKGxhc3REeSB8fCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBnaG9zdE1hdHJpeCA9IHtcbiAgICAgICAgICAgIGE6IDEsXG4gICAgICAgICAgICBiOiAwLFxuICAgICAgICAgICAgYzogMCxcbiAgICAgICAgICAgIGQ6IDEsXG4gICAgICAgICAgICBlOiBkeCxcbiAgICAgICAgICAgIGY6IGR5XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjc3NNYXRyaXggPSBcIm1hdHJpeChcIi5jb25jYXQoZ2hvc3RNYXRyaXguYSwgXCIsXCIpLmNvbmNhdChnaG9zdE1hdHJpeC5iLCBcIixcIikuY29uY2F0KGdob3N0TWF0cml4LmMsIFwiLFwiKS5jb25jYXQoZ2hvc3RNYXRyaXguZCwgXCIsXCIpLmNvbmNhdChnaG9zdE1hdHJpeC5lLCBcIixcIikuY29uY2F0KGdob3N0TWF0cml4LmYsIFwiKVwiKTtcbiAgICAgICAgY3NzKGdob3N0RWwsICd3ZWJraXRUcmFuc2Zvcm0nLCBjc3NNYXRyaXgpO1xuICAgICAgICBjc3MoZ2hvc3RFbCwgJ21velRyYW5zZm9ybScsIGNzc01hdHJpeCk7XG4gICAgICAgIGNzcyhnaG9zdEVsLCAnbXNUcmFuc2Zvcm0nLCBjc3NNYXRyaXgpO1xuICAgICAgICBjc3MoZ2hvc3RFbCwgJ3RyYW5zZm9ybScsIGNzc01hdHJpeCk7XG4gICAgICAgIGxhc3REeCA9IGR4O1xuICAgICAgICBsYXN0RHkgPSBkeTtcbiAgICAgICAgdG91Y2hFdnQgPSB0b3VjaDtcbiAgICAgIH1cblxuICAgICAgZXZ0LmNhbmNlbGFibGUgJiYgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9LFxuICBfYXBwZW5kR2hvc3Q6IGZ1bmN0aW9uIF9hcHBlbmRHaG9zdCgpIHtcbiAgICAvLyBCdWcgaWYgdXNpbmcgc2NhbGUoKTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjYzNzA1OFxuICAgIC8vIE5vdCBiZWluZyBhZGp1c3RlZCBmb3JcbiAgICBpZiAoIWdob3N0RWwpIHtcbiAgICAgIHZhciBjb250YWluZXIgPSB0aGlzLm9wdGlvbnMuZmFsbGJhY2tPbkJvZHkgPyBkb2N1bWVudC5ib2R5IDogcm9vdEVsLFxuICAgICAgICAgIHJlY3QgPSBnZXRSZWN0KGRyYWdFbCwgdHJ1ZSwgUG9zaXRpb25HaG9zdEFic29sdXRlbHksIHRydWUsIGNvbnRhaW5lciksXG4gICAgICAgICAgb3B0aW9ucyA9IHRoaXMub3B0aW9uczsgLy8gUG9zaXRpb24gYWJzb2x1dGVseVxuXG4gICAgICBpZiAoUG9zaXRpb25HaG9zdEFic29sdXRlbHkpIHtcbiAgICAgICAgLy8gR2V0IHJlbGF0aXZlbHkgcG9zaXRpb25lZCBwYXJlbnRcbiAgICAgICAgZ2hvc3RSZWxhdGl2ZVBhcmVudCA9IGNvbnRhaW5lcjtcblxuICAgICAgICB3aGlsZSAoY3NzKGdob3N0UmVsYXRpdmVQYXJlbnQsICdwb3NpdGlvbicpID09PSAnc3RhdGljJyAmJiBjc3MoZ2hvc3RSZWxhdGl2ZVBhcmVudCwgJ3RyYW5zZm9ybScpID09PSAnbm9uZScgJiYgZ2hvc3RSZWxhdGl2ZVBhcmVudCAhPT0gZG9jdW1lbnQpIHtcbiAgICAgICAgICBnaG9zdFJlbGF0aXZlUGFyZW50ID0gZ2hvc3RSZWxhdGl2ZVBhcmVudC5wYXJlbnROb2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGdob3N0UmVsYXRpdmVQYXJlbnQgIT09IGRvY3VtZW50LmJvZHkgJiYgZ2hvc3RSZWxhdGl2ZVBhcmVudCAhPT0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICAgICAgaWYgKGdob3N0UmVsYXRpdmVQYXJlbnQgPT09IGRvY3VtZW50KSBnaG9zdFJlbGF0aXZlUGFyZW50ID0gZ2V0V2luZG93U2Nyb2xsaW5nRWxlbWVudCgpO1xuICAgICAgICAgIHJlY3QudG9wICs9IGdob3N0UmVsYXRpdmVQYXJlbnQuc2Nyb2xsVG9wO1xuICAgICAgICAgIHJlY3QubGVmdCArPSBnaG9zdFJlbGF0aXZlUGFyZW50LnNjcm9sbExlZnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZ2hvc3RSZWxhdGl2ZVBhcmVudCA9IGdldFdpbmRvd1Njcm9sbGluZ0VsZW1lbnQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdob3N0UmVsYXRpdmVQYXJlbnRJbml0aWFsU2Nyb2xsID0gZ2V0UmVsYXRpdmVTY3JvbGxPZmZzZXQoZ2hvc3RSZWxhdGl2ZVBhcmVudCk7XG4gICAgICB9XG5cbiAgICAgIGdob3N0RWwgPSBkcmFnRWwuY2xvbmVOb2RlKHRydWUpO1xuICAgICAgdG9nZ2xlQ2xhc3MoZ2hvc3RFbCwgb3B0aW9ucy5naG9zdENsYXNzLCBmYWxzZSk7XG4gICAgICB0b2dnbGVDbGFzcyhnaG9zdEVsLCBvcHRpb25zLmZhbGxiYWNrQ2xhc3MsIHRydWUpO1xuICAgICAgdG9nZ2xlQ2xhc3MoZ2hvc3RFbCwgb3B0aW9ucy5kcmFnQ2xhc3MsIHRydWUpO1xuICAgICAgY3NzKGdob3N0RWwsICd0cmFuc2l0aW9uJywgJycpO1xuICAgICAgY3NzKGdob3N0RWwsICd0cmFuc2Zvcm0nLCAnJyk7XG4gICAgICBjc3MoZ2hvc3RFbCwgJ2JveC1zaXppbmcnLCAnYm9yZGVyLWJveCcpO1xuICAgICAgY3NzKGdob3N0RWwsICdtYXJnaW4nLCAwKTtcbiAgICAgIGNzcyhnaG9zdEVsLCAndG9wJywgcmVjdC50b3ApO1xuICAgICAgY3NzKGdob3N0RWwsICdsZWZ0JywgcmVjdC5sZWZ0KTtcbiAgICAgIGNzcyhnaG9zdEVsLCAnd2lkdGgnLCByZWN0LndpZHRoKTtcbiAgICAgIGNzcyhnaG9zdEVsLCAnaGVpZ2h0JywgcmVjdC5oZWlnaHQpO1xuICAgICAgY3NzKGdob3N0RWwsICdvcGFjaXR5JywgJzAuOCcpO1xuICAgICAgY3NzKGdob3N0RWwsICdwb3NpdGlvbicsIFBvc2l0aW9uR2hvc3RBYnNvbHV0ZWx5ID8gJ2Fic29sdXRlJyA6ICdmaXhlZCcpO1xuICAgICAgY3NzKGdob3N0RWwsICd6SW5kZXgnLCAnMTAwMDAwJyk7XG4gICAgICBjc3MoZ2hvc3RFbCwgJ3BvaW50ZXJFdmVudHMnLCAnbm9uZScpO1xuICAgICAgU29ydGFibGUuZ2hvc3QgPSBnaG9zdEVsO1xuICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGdob3N0RWwpOyAvLyBTZXQgdHJhbnNmb3JtLW9yaWdpblxuXG4gICAgICBjc3MoZ2hvc3RFbCwgJ3RyYW5zZm9ybS1vcmlnaW4nLCB0YXBEaXN0YW5jZUxlZnQgLyBwYXJzZUludChnaG9zdEVsLnN0eWxlLndpZHRoKSAqIDEwMCArICclICcgKyB0YXBEaXN0YW5jZVRvcCAvIHBhcnNlSW50KGdob3N0RWwuc3R5bGUuaGVpZ2h0KSAqIDEwMCArICclJyk7XG4gICAgfVxuICB9LFxuICBfb25EcmFnU3RhcnQ6IGZ1bmN0aW9uIF9vbkRyYWdTdGFydChcbiAgLyoqRXZlbnQqL1xuICBldnQsXG4gIC8qKmJvb2xlYW4qL1xuICBmYWxsYmFjaykge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB2YXIgZGF0YVRyYW5zZmVyID0gZXZ0LmRhdGFUcmFuc2ZlcjtcbiAgICB2YXIgb3B0aW9ucyA9IF90aGlzLm9wdGlvbnM7XG4gICAgcGx1Z2luRXZlbnQoJ2RyYWdTdGFydCcsIHRoaXMsIHtcbiAgICAgIGV2dDogZXZ0XG4gICAgfSk7XG5cbiAgICBpZiAoU29ydGFibGUuZXZlbnRDYW5jZWxlZCkge1xuICAgICAgdGhpcy5fb25Ecm9wKCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwbHVnaW5FdmVudCgnc2V0dXBDbG9uZScsIHRoaXMpO1xuXG4gICAgaWYgKCFTb3J0YWJsZS5ldmVudENhbmNlbGVkKSB7XG4gICAgICBjbG9uZUVsID0gY2xvbmUoZHJhZ0VsKTtcbiAgICAgIGNsb25lRWwuZHJhZ2dhYmxlID0gZmFsc2U7XG4gICAgICBjbG9uZUVsLnN0eWxlWyd3aWxsLWNoYW5nZSddID0gJyc7XG5cbiAgICAgIHRoaXMuX2hpZGVDbG9uZSgpO1xuXG4gICAgICB0b2dnbGVDbGFzcyhjbG9uZUVsLCB0aGlzLm9wdGlvbnMuY2hvc2VuQ2xhc3MsIGZhbHNlKTtcbiAgICAgIFNvcnRhYmxlLmNsb25lID0gY2xvbmVFbDtcbiAgICB9IC8vICMxMTQzOiBJRnJhbWUgc3VwcG9ydCB3b3JrYXJvdW5kXG5cblxuICAgIF90aGlzLmNsb25lSWQgPSBfbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgcGx1Z2luRXZlbnQoJ2Nsb25lJywgX3RoaXMpO1xuICAgICAgaWYgKFNvcnRhYmxlLmV2ZW50Q2FuY2VsZWQpIHJldHVybjtcblxuICAgICAgaWYgKCFfdGhpcy5vcHRpb25zLnJlbW92ZUNsb25lT25IaWRlKSB7XG4gICAgICAgIHJvb3RFbC5pbnNlcnRCZWZvcmUoY2xvbmVFbCwgZHJhZ0VsKTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuX2hpZGVDbG9uZSgpO1xuXG4gICAgICBfZGlzcGF0Y2hFdmVudCh7XG4gICAgICAgIHNvcnRhYmxlOiBfdGhpcyxcbiAgICAgICAgbmFtZTogJ2Nsb25lJ1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgIWZhbGxiYWNrICYmIHRvZ2dsZUNsYXNzKGRyYWdFbCwgb3B0aW9ucy5kcmFnQ2xhc3MsIHRydWUpOyAvLyBTZXQgcHJvcGVyIGRyb3AgZXZlbnRzXG5cbiAgICBpZiAoZmFsbGJhY2spIHtcbiAgICAgIGlnbm9yZU5leHRDbGljayA9IHRydWU7XG4gICAgICBfdGhpcy5fbG9vcElkID0gc2V0SW50ZXJ2YWwoX3RoaXMuX2VtdWxhdGVEcmFnT3ZlciwgNTApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVbmRvIHdoYXQgd2FzIHNldCBpbiBfcHJlcGFyZURyYWdTdGFydCBiZWZvcmUgZHJhZyBzdGFydGVkXG4gICAgICBvZmYoZG9jdW1lbnQsICdtb3VzZXVwJywgX3RoaXMuX29uRHJvcCk7XG4gICAgICBvZmYoZG9jdW1lbnQsICd0b3VjaGVuZCcsIF90aGlzLl9vbkRyb3ApO1xuICAgICAgb2ZmKGRvY3VtZW50LCAndG91Y2hjYW5jZWwnLCBfdGhpcy5fb25Ecm9wKTtcblxuICAgICAgaWYgKGRhdGFUcmFuc2Zlcikge1xuICAgICAgICBkYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZCA9ICdtb3ZlJztcbiAgICAgICAgb3B0aW9ucy5zZXREYXRhICYmIG9wdGlvbnMuc2V0RGF0YS5jYWxsKF90aGlzLCBkYXRhVHJhbnNmZXIsIGRyYWdFbCk7XG4gICAgICB9XG5cbiAgICAgIG9uKGRvY3VtZW50LCAnZHJvcCcsIF90aGlzKTsgLy8gIzEyNzYgZml4OlxuXG4gICAgICBjc3MoZHJhZ0VsLCAndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZVooMCknKTtcbiAgICB9XG5cbiAgICBhd2FpdGluZ0RyYWdTdGFydGVkID0gdHJ1ZTtcbiAgICBfdGhpcy5fZHJhZ1N0YXJ0SWQgPSBfbmV4dFRpY2soX3RoaXMuX2RyYWdTdGFydGVkLmJpbmQoX3RoaXMsIGZhbGxiYWNrLCBldnQpKTtcbiAgICBvbihkb2N1bWVudCwgJ3NlbGVjdHN0YXJ0JywgX3RoaXMpO1xuICAgIG1vdmVkID0gdHJ1ZTtcblxuICAgIGlmIChTYWZhcmkpIHtcbiAgICAgIGNzcyhkb2N1bWVudC5ib2R5LCAndXNlci1zZWxlY3QnLCAnbm9uZScpO1xuICAgIH1cbiAgfSxcbiAgLy8gUmV0dXJucyB0cnVlIC0gaWYgbm8gZnVydGhlciBhY3Rpb24gaXMgbmVlZGVkIChlaXRoZXIgaW5zZXJ0ZWQgb3IgYW5vdGhlciBjb25kaXRpb24pXG4gIF9vbkRyYWdPdmVyOiBmdW5jdGlvbiBfb25EcmFnT3ZlcihcbiAgLyoqRXZlbnQqL1xuICBldnQpIHtcbiAgICB2YXIgZWwgPSB0aGlzLmVsLFxuICAgICAgICB0YXJnZXQgPSBldnQudGFyZ2V0LFxuICAgICAgICBkcmFnUmVjdCxcbiAgICAgICAgdGFyZ2V0UmVjdCxcbiAgICAgICAgcmV2ZXJ0LFxuICAgICAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zLFxuICAgICAgICBncm91cCA9IG9wdGlvbnMuZ3JvdXAsXG4gICAgICAgIGFjdGl2ZVNvcnRhYmxlID0gU29ydGFibGUuYWN0aXZlLFxuICAgICAgICBpc093bmVyID0gYWN0aXZlR3JvdXAgPT09IGdyb3VwLFxuICAgICAgICBjYW5Tb3J0ID0gb3B0aW9ucy5zb3J0LFxuICAgICAgICBmcm9tU29ydGFibGUgPSBwdXRTb3J0YWJsZSB8fCBhY3RpdmVTb3J0YWJsZSxcbiAgICAgICAgdmVydGljYWwsXG4gICAgICAgIF90aGlzID0gdGhpcyxcbiAgICAgICAgY29tcGxldGVkRmlyZWQgPSBmYWxzZTtcblxuICAgIGlmIChfc2lsZW50KSByZXR1cm47XG5cbiAgICBmdW5jdGlvbiBkcmFnT3ZlckV2ZW50KG5hbWUsIGV4dHJhKSB7XG4gICAgICBwbHVnaW5FdmVudChuYW1lLCBfdGhpcywgX29iamVjdFNwcmVhZCh7XG4gICAgICAgIGV2dDogZXZ0LFxuICAgICAgICBpc093bmVyOiBpc093bmVyLFxuICAgICAgICBheGlzOiB2ZXJ0aWNhbCA/ICd2ZXJ0aWNhbCcgOiAnaG9yaXpvbnRhbCcsXG4gICAgICAgIHJldmVydDogcmV2ZXJ0LFxuICAgICAgICBkcmFnUmVjdDogZHJhZ1JlY3QsXG4gICAgICAgIHRhcmdldFJlY3Q6IHRhcmdldFJlY3QsXG4gICAgICAgIGNhblNvcnQ6IGNhblNvcnQsXG4gICAgICAgIGZyb21Tb3J0YWJsZTogZnJvbVNvcnRhYmxlLFxuICAgICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgICAgY29tcGxldGVkOiBjb21wbGV0ZWQsXG4gICAgICAgIG9uTW92ZTogZnVuY3Rpb24gb25Nb3ZlKHRhcmdldCwgYWZ0ZXIpIHtcbiAgICAgICAgICByZXR1cm4gX29uTW92ZShyb290RWwsIGVsLCBkcmFnRWwsIGRyYWdSZWN0LCB0YXJnZXQsIGdldFJlY3QodGFyZ2V0KSwgZXZ0LCBhZnRlcik7XG4gICAgICAgIH0sXG4gICAgICAgIGNoYW5nZWQ6IGNoYW5nZWRcbiAgICAgIH0sIGV4dHJhKSk7XG4gICAgfSAvLyBDYXB0dXJlIGFuaW1hdGlvbiBzdGF0ZVxuXG5cbiAgICBmdW5jdGlvbiBjYXB0dXJlKCkge1xuICAgICAgZHJhZ092ZXJFdmVudCgnZHJhZ092ZXJBbmltYXRpb25DYXB0dXJlJyk7XG5cbiAgICAgIF90aGlzLmNhcHR1cmVBbmltYXRpb25TdGF0ZSgpO1xuXG4gICAgICBpZiAoX3RoaXMgIT09IGZyb21Tb3J0YWJsZSkge1xuICAgICAgICBmcm9tU29ydGFibGUuY2FwdHVyZUFuaW1hdGlvblN0YXRlKCk7XG4gICAgICB9XG4gICAgfSAvLyBSZXR1cm4gaW52b2NhdGlvbiB3aGVuIGRyYWdFbCBpcyBpbnNlcnRlZCAob3IgY29tcGxldGVkKVxuXG5cbiAgICBmdW5jdGlvbiBjb21wbGV0ZWQoaW5zZXJ0aW9uKSB7XG4gICAgICBkcmFnT3ZlckV2ZW50KCdkcmFnT3ZlckNvbXBsZXRlZCcsIHtcbiAgICAgICAgaW5zZXJ0aW9uOiBpbnNlcnRpb25cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoaW5zZXJ0aW9uKSB7XG4gICAgICAgIC8vIENsb25lcyBtdXN0IGJlIGhpZGRlbiBiZWZvcmUgZm9sZGluZyBhbmltYXRpb24gdG8gY2FwdHVyZSBkcmFnUmVjdEFic29sdXRlIHByb3Blcmx5XG4gICAgICAgIGlmIChpc093bmVyKSB7XG4gICAgICAgICAgYWN0aXZlU29ydGFibGUuX2hpZGVDbG9uZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFjdGl2ZVNvcnRhYmxlLl9zaG93Q2xvbmUoX3RoaXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF90aGlzICE9PSBmcm9tU29ydGFibGUpIHtcbiAgICAgICAgICAvLyBTZXQgZ2hvc3QgY2xhc3MgdG8gbmV3IHNvcnRhYmxlJ3MgZ2hvc3QgY2xhc3NcbiAgICAgICAgICB0b2dnbGVDbGFzcyhkcmFnRWwsIHB1dFNvcnRhYmxlID8gcHV0U29ydGFibGUub3B0aW9ucy5naG9zdENsYXNzIDogYWN0aXZlU29ydGFibGUub3B0aW9ucy5naG9zdENsYXNzLCBmYWxzZSk7XG4gICAgICAgICAgdG9nZ2xlQ2xhc3MoZHJhZ0VsLCBvcHRpb25zLmdob3N0Q2xhc3MsIHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHB1dFNvcnRhYmxlICE9PSBfdGhpcyAmJiBfdGhpcyAhPT0gU29ydGFibGUuYWN0aXZlKSB7XG4gICAgICAgICAgcHV0U29ydGFibGUgPSBfdGhpcztcbiAgICAgICAgfSBlbHNlIGlmIChfdGhpcyA9PT0gU29ydGFibGUuYWN0aXZlICYmIHB1dFNvcnRhYmxlKSB7XG4gICAgICAgICAgcHV0U29ydGFibGUgPSBudWxsO1xuICAgICAgICB9IC8vIEFuaW1hdGlvblxuXG5cbiAgICAgICAgaWYgKGZyb21Tb3J0YWJsZSA9PT0gX3RoaXMpIHtcbiAgICAgICAgICBfdGhpcy5faWdub3JlV2hpbGVBbmltYXRpbmcgPSB0YXJnZXQ7XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpcy5hbmltYXRlQWxsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBkcmFnT3ZlckV2ZW50KCdkcmFnT3ZlckFuaW1hdGlvbkNvbXBsZXRlJyk7XG4gICAgICAgICAgX3RoaXMuX2lnbm9yZVdoaWxlQW5pbWF0aW5nID0gbnVsbDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKF90aGlzICE9PSBmcm9tU29ydGFibGUpIHtcbiAgICAgICAgICBmcm9tU29ydGFibGUuYW5pbWF0ZUFsbCgpO1xuICAgICAgICAgIGZyb21Tb3J0YWJsZS5faWdub3JlV2hpbGVBbmltYXRpbmcgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9IC8vIE51bGwgbGFzdFRhcmdldCBpZiBpdCBpcyBub3QgaW5zaWRlIGEgcHJldmlvdXNseSBzd2FwcGVkIGVsZW1lbnRcblxuXG4gICAgICBpZiAodGFyZ2V0ID09PSBkcmFnRWwgJiYgIWRyYWdFbC5hbmltYXRlZCB8fCB0YXJnZXQgPT09IGVsICYmICF0YXJnZXQuYW5pbWF0ZWQpIHtcbiAgICAgICAgbGFzdFRhcmdldCA9IG51bGw7XG4gICAgICB9IC8vIG5vIGJ1YmJsaW5nIGFuZCBub3QgZmFsbGJhY2tcblxuXG4gICAgICBpZiAoIW9wdGlvbnMuZHJhZ292ZXJCdWJibGUgJiYgIWV2dC5yb290RWwgJiYgdGFyZ2V0ICE9PSBkb2N1bWVudCkge1xuICAgICAgICBkcmFnRWwucGFyZW50Tm9kZVtleHBhbmRvXS5faXNPdXRzaWRlVGhpc0VsKGV2dC50YXJnZXQpOyAvLyBEbyBub3QgZGV0ZWN0IGZvciBlbXB0eSBpbnNlcnQgaWYgYWxyZWFkeSBpbnNlcnRlZFxuXG5cbiAgICAgICAgIWluc2VydGlvbiAmJiBuZWFyZXN0RW1wdHlJbnNlcnREZXRlY3RFdmVudChldnQpO1xuICAgICAgfVxuXG4gICAgICAhb3B0aW9ucy5kcmFnb3ZlckJ1YmJsZSAmJiBldnQuc3RvcFByb3BhZ2F0aW9uICYmIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHJldHVybiBjb21wbGV0ZWRGaXJlZCA9IHRydWU7XG4gICAgfSAvLyBDYWxsIHdoZW4gZHJhZ0VsIGhhcyBiZWVuIGluc2VydGVkXG5cblxuICAgIGZ1bmN0aW9uIGNoYW5nZWQoKSB7XG4gICAgICBuZXdJbmRleCA9IGluZGV4KGRyYWdFbCk7XG4gICAgICBuZXdEcmFnZ2FibGVJbmRleCA9IGluZGV4KGRyYWdFbCwgb3B0aW9ucy5kcmFnZ2FibGUpO1xuXG4gICAgICBfZGlzcGF0Y2hFdmVudCh7XG4gICAgICAgIHNvcnRhYmxlOiBfdGhpcyxcbiAgICAgICAgbmFtZTogJ2NoYW5nZScsXG4gICAgICAgIHRvRWw6IGVsLFxuICAgICAgICBuZXdJbmRleDogbmV3SW5kZXgsXG4gICAgICAgIG5ld0RyYWdnYWJsZUluZGV4OiBuZXdEcmFnZ2FibGVJbmRleCxcbiAgICAgICAgb3JpZ2luYWxFdmVudDogZXZ0XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoZXZ0LnByZXZlbnREZWZhdWx0ICE9PSB2b2lkIDApIHtcbiAgICAgIGV2dC5jYW5jZWxhYmxlICYmIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHRhcmdldCA9IGNsb3Nlc3QodGFyZ2V0LCBvcHRpb25zLmRyYWdnYWJsZSwgZWwsIHRydWUpO1xuICAgIGRyYWdPdmVyRXZlbnQoJ2RyYWdPdmVyJyk7XG4gICAgaWYgKFNvcnRhYmxlLmV2ZW50Q2FuY2VsZWQpIHJldHVybiBjb21wbGV0ZWRGaXJlZDtcblxuICAgIGlmIChkcmFnRWwuY29udGFpbnMoZXZ0LnRhcmdldCkgfHwgdGFyZ2V0LmFuaW1hdGVkICYmIHRhcmdldC5hbmltYXRpbmdYICYmIHRhcmdldC5hbmltYXRpbmdZIHx8IF90aGlzLl9pZ25vcmVXaGlsZUFuaW1hdGluZyA9PT0gdGFyZ2V0KSB7XG4gICAgICByZXR1cm4gY29tcGxldGVkKGZhbHNlKTtcbiAgICB9XG5cbiAgICBpZ25vcmVOZXh0Q2xpY2sgPSBmYWxzZTtcblxuICAgIGlmIChhY3RpdmVTb3J0YWJsZSAmJiAhb3B0aW9ucy5kaXNhYmxlZCAmJiAoaXNPd25lciA/IGNhblNvcnQgfHwgKHJldmVydCA9ICFyb290RWwuY29udGFpbnMoZHJhZ0VsKSkgLy8gUmV2ZXJ0aW5nIGl0ZW0gaW50byB0aGUgb3JpZ2luYWwgbGlzdFxuICAgIDogcHV0U29ydGFibGUgPT09IHRoaXMgfHwgKHRoaXMubGFzdFB1dE1vZGUgPSBhY3RpdmVHcm91cC5jaGVja1B1bGwodGhpcywgYWN0aXZlU29ydGFibGUsIGRyYWdFbCwgZXZ0KSkgJiYgZ3JvdXAuY2hlY2tQdXQodGhpcywgYWN0aXZlU29ydGFibGUsIGRyYWdFbCwgZXZ0KSkpIHtcbiAgICAgIHZlcnRpY2FsID0gdGhpcy5fZ2V0RGlyZWN0aW9uKGV2dCwgdGFyZ2V0KSA9PT0gJ3ZlcnRpY2FsJztcbiAgICAgIGRyYWdSZWN0ID0gZ2V0UmVjdChkcmFnRWwpO1xuICAgICAgZHJhZ092ZXJFdmVudCgnZHJhZ092ZXJWYWxpZCcpO1xuICAgICAgaWYgKFNvcnRhYmxlLmV2ZW50Q2FuY2VsZWQpIHJldHVybiBjb21wbGV0ZWRGaXJlZDtcblxuICAgICAgaWYgKHJldmVydCkge1xuICAgICAgICBwYXJlbnRFbCA9IHJvb3RFbDsgLy8gYWN0dWFsaXphdGlvblxuXG4gICAgICAgIGNhcHR1cmUoKTtcblxuICAgICAgICB0aGlzLl9oaWRlQ2xvbmUoKTtcblxuICAgICAgICBkcmFnT3ZlckV2ZW50KCdyZXZlcnQnKTtcblxuICAgICAgICBpZiAoIVNvcnRhYmxlLmV2ZW50Q2FuY2VsZWQpIHtcbiAgICAgICAgICBpZiAobmV4dEVsKSB7XG4gICAgICAgICAgICByb290RWwuaW5zZXJ0QmVmb3JlKGRyYWdFbCwgbmV4dEVsKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcm9vdEVsLmFwcGVuZENoaWxkKGRyYWdFbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbXBsZXRlZCh0cnVlKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGVsTGFzdENoaWxkID0gbGFzdENoaWxkKGVsLCBvcHRpb25zLmRyYWdnYWJsZSk7XG5cbiAgICAgIGlmICghZWxMYXN0Q2hpbGQgfHwgX2dob3N0SXNMYXN0KGV2dCwgdmVydGljYWwsIHRoaXMpICYmICFlbExhc3RDaGlsZC5hbmltYXRlZCkge1xuICAgICAgICAvLyBJZiBhbHJlYWR5IGF0IGVuZCBvZiBsaXN0OiBEbyBub3QgaW5zZXJ0XG4gICAgICAgIGlmIChlbExhc3RDaGlsZCA9PT0gZHJhZ0VsKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbXBsZXRlZChmYWxzZSk7XG4gICAgICAgIH0gLy8gYXNzaWduIHRhcmdldCBvbmx5IGlmIGNvbmRpdGlvbiBpcyB0cnVlXG5cblxuICAgICAgICBpZiAoZWxMYXN0Q2hpbGQgJiYgZWwgPT09IGV2dC50YXJnZXQpIHtcbiAgICAgICAgICB0YXJnZXQgPSBlbExhc3RDaGlsZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICB0YXJnZXRSZWN0ID0gZ2V0UmVjdCh0YXJnZXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF9vbk1vdmUocm9vdEVsLCBlbCwgZHJhZ0VsLCBkcmFnUmVjdCwgdGFyZ2V0LCB0YXJnZXRSZWN0LCBldnQsICEhdGFyZ2V0KSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBjYXB0dXJlKCk7XG4gICAgICAgICAgZWwuYXBwZW5kQ2hpbGQoZHJhZ0VsKTtcbiAgICAgICAgICBwYXJlbnRFbCA9IGVsOyAvLyBhY3R1YWxpemF0aW9uXG5cbiAgICAgICAgICBjaGFuZ2VkKCk7XG4gICAgICAgICAgcmV0dXJuIGNvbXBsZXRlZCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0YXJnZXQucGFyZW50Tm9kZSA9PT0gZWwpIHtcbiAgICAgICAgdGFyZ2V0UmVjdCA9IGdldFJlY3QodGFyZ2V0KTtcbiAgICAgICAgdmFyIGRpcmVjdGlvbiA9IDAsXG4gICAgICAgICAgICB0YXJnZXRCZWZvcmVGaXJzdFN3YXAsXG4gICAgICAgICAgICBkaWZmZXJlbnRMZXZlbCA9IGRyYWdFbC5wYXJlbnROb2RlICE9PSBlbCxcbiAgICAgICAgICAgIGRpZmZlcmVudFJvd0NvbCA9ICFfZHJhZ0VsSW5Sb3dDb2x1bW4oZHJhZ0VsLmFuaW1hdGVkICYmIGRyYWdFbC50b1JlY3QgfHwgZHJhZ1JlY3QsIHRhcmdldC5hbmltYXRlZCAmJiB0YXJnZXQudG9SZWN0IHx8IHRhcmdldFJlY3QsIHZlcnRpY2FsKSxcbiAgICAgICAgICAgIHNpZGUxID0gdmVydGljYWwgPyAndG9wJyA6ICdsZWZ0JyxcbiAgICAgICAgICAgIHNjcm9sbGVkUGFzdFRvcCA9IGlzU2Nyb2xsZWRQYXN0KHRhcmdldCwgJ3RvcCcsICd0b3AnKSB8fCBpc1Njcm9sbGVkUGFzdChkcmFnRWwsICd0b3AnLCAndG9wJyksXG4gICAgICAgICAgICBzY3JvbGxCZWZvcmUgPSBzY3JvbGxlZFBhc3RUb3AgPyBzY3JvbGxlZFBhc3RUb3Auc2Nyb2xsVG9wIDogdm9pZCAwO1xuXG4gICAgICAgIGlmIChsYXN0VGFyZ2V0ICE9PSB0YXJnZXQpIHtcbiAgICAgICAgICB0YXJnZXRCZWZvcmVGaXJzdFN3YXAgPSB0YXJnZXRSZWN0W3NpZGUxXTtcbiAgICAgICAgICBwYXN0Rmlyc3RJbnZlcnRUaHJlc2ggPSBmYWxzZTtcbiAgICAgICAgICBpc0NpcmN1bXN0YW50aWFsSW52ZXJ0ID0gIWRpZmZlcmVudFJvd0NvbCAmJiBvcHRpb25zLmludmVydFN3YXAgfHwgZGlmZmVyZW50TGV2ZWw7XG4gICAgICAgIH1cblxuICAgICAgICBkaXJlY3Rpb24gPSBfZ2V0U3dhcERpcmVjdGlvbihldnQsIHRhcmdldCwgdGFyZ2V0UmVjdCwgdmVydGljYWwsIGRpZmZlcmVudFJvd0NvbCA/IDEgOiBvcHRpb25zLnN3YXBUaHJlc2hvbGQsIG9wdGlvbnMuaW52ZXJ0ZWRTd2FwVGhyZXNob2xkID09IG51bGwgPyBvcHRpb25zLnN3YXBUaHJlc2hvbGQgOiBvcHRpb25zLmludmVydGVkU3dhcFRocmVzaG9sZCwgaXNDaXJjdW1zdGFudGlhbEludmVydCwgbGFzdFRhcmdldCA9PT0gdGFyZ2V0KTtcbiAgICAgICAgdmFyIHNpYmxpbmc7XG5cbiAgICAgICAgaWYgKGRpcmVjdGlvbiAhPT0gMCkge1xuICAgICAgICAgIC8vIENoZWNrIGlmIHRhcmdldCBpcyBiZXNpZGUgZHJhZ0VsIGluIHJlc3BlY3RpdmUgZGlyZWN0aW9uIChpZ25vcmluZyBoaWRkZW4gZWxlbWVudHMpXG4gICAgICAgICAgdmFyIGRyYWdJbmRleCA9IGluZGV4KGRyYWdFbCk7XG5cbiAgICAgICAgICBkbyB7XG4gICAgICAgICAgICBkcmFnSW5kZXggLT0gZGlyZWN0aW9uO1xuICAgICAgICAgICAgc2libGluZyA9IHBhcmVudEVsLmNoaWxkcmVuW2RyYWdJbmRleF07XG4gICAgICAgICAgfSB3aGlsZSAoc2libGluZyAmJiAoY3NzKHNpYmxpbmcsICdkaXNwbGF5JykgPT09ICdub25lJyB8fCBzaWJsaW5nID09PSBnaG9zdEVsKSk7XG4gICAgICAgIH0gLy8gSWYgZHJhZ0VsIGlzIGFscmVhZHkgYmVzaWRlIHRhcmdldDogRG8gbm90IGluc2VydFxuXG5cbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gMCB8fCBzaWJsaW5nID09PSB0YXJnZXQpIHtcbiAgICAgICAgICByZXR1cm4gY29tcGxldGVkKGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RUYXJnZXQgPSB0YXJnZXQ7XG4gICAgICAgIGxhc3REaXJlY3Rpb24gPSBkaXJlY3Rpb247XG4gICAgICAgIHZhciBuZXh0U2libGluZyA9IHRhcmdldC5uZXh0RWxlbWVudFNpYmxpbmcsXG4gICAgICAgICAgICBhZnRlciA9IGZhbHNlO1xuICAgICAgICBhZnRlciA9IGRpcmVjdGlvbiA9PT0gMTtcblxuICAgICAgICB2YXIgbW92ZVZlY3RvciA9IF9vbk1vdmUocm9vdEVsLCBlbCwgZHJhZ0VsLCBkcmFnUmVjdCwgdGFyZ2V0LCB0YXJnZXRSZWN0LCBldnQsIGFmdGVyKTtcblxuICAgICAgICBpZiAobW92ZVZlY3RvciAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBpZiAobW92ZVZlY3RvciA9PT0gMSB8fCBtb3ZlVmVjdG9yID09PSAtMSkge1xuICAgICAgICAgICAgYWZ0ZXIgPSBtb3ZlVmVjdG9yID09PSAxO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIF9zaWxlbnQgPSB0cnVlO1xuICAgICAgICAgIHNldFRpbWVvdXQoX3Vuc2lsZW50LCAzMCk7XG4gICAgICAgICAgY2FwdHVyZSgpO1xuXG4gICAgICAgICAgaWYgKGFmdGVyICYmICFuZXh0U2libGluZykge1xuICAgICAgICAgICAgZWwuYXBwZW5kQ2hpbGQoZHJhZ0VsKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGFyZ2V0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGRyYWdFbCwgYWZ0ZXIgPyBuZXh0U2libGluZyA6IHRhcmdldCk7XG4gICAgICAgICAgfSAvLyBVbmRvIGNocm9tZSdzIHNjcm9sbCBhZGp1c3RtZW50IChoYXMgbm8gZWZmZWN0IG9uIG90aGVyIGJyb3dzZXJzKVxuXG5cbiAgICAgICAgICBpZiAoc2Nyb2xsZWRQYXN0VG9wKSB7XG4gICAgICAgICAgICBzY3JvbGxCeShzY3JvbGxlZFBhc3RUb3AsIDAsIHNjcm9sbEJlZm9yZSAtIHNjcm9sbGVkUGFzdFRvcC5zY3JvbGxUb3ApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHBhcmVudEVsID0gZHJhZ0VsLnBhcmVudE5vZGU7IC8vIGFjdHVhbGl6YXRpb25cbiAgICAgICAgICAvLyBtdXN0IGJlIGRvbmUgYmVmb3JlIGFuaW1hdGlvblxuXG4gICAgICAgICAgaWYgKHRhcmdldEJlZm9yZUZpcnN0U3dhcCAhPT0gdW5kZWZpbmVkICYmICFpc0NpcmN1bXN0YW50aWFsSW52ZXJ0KSB7XG4gICAgICAgICAgICB0YXJnZXRNb3ZlRGlzdGFuY2UgPSBNYXRoLmFicyh0YXJnZXRCZWZvcmVGaXJzdFN3YXAgLSBnZXRSZWN0KHRhcmdldClbc2lkZTFdKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjaGFuZ2VkKCk7XG4gICAgICAgICAgcmV0dXJuIGNvbXBsZXRlZCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZWwuY29udGFpbnMoZHJhZ0VsKSkge1xuICAgICAgICByZXR1cm4gY29tcGxldGVkKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIF9pZ25vcmVXaGlsZUFuaW1hdGluZzogbnVsbCxcbiAgX29mZk1vdmVFdmVudHM6IGZ1bmN0aW9uIF9vZmZNb3ZlRXZlbnRzKCkge1xuICAgIG9mZihkb2N1bWVudCwgJ21vdXNlbW92ZScsIHRoaXMuX29uVG91Y2hNb3ZlKTtcbiAgICBvZmYoZG9jdW1lbnQsICd0b3VjaG1vdmUnLCB0aGlzLl9vblRvdWNoTW92ZSk7XG4gICAgb2ZmKGRvY3VtZW50LCAncG9pbnRlcm1vdmUnLCB0aGlzLl9vblRvdWNoTW92ZSk7XG4gICAgb2ZmKGRvY3VtZW50LCAnZHJhZ292ZXInLCBuZWFyZXN0RW1wdHlJbnNlcnREZXRlY3RFdmVudCk7XG4gICAgb2ZmKGRvY3VtZW50LCAnbW91c2Vtb3ZlJywgbmVhcmVzdEVtcHR5SW5zZXJ0RGV0ZWN0RXZlbnQpO1xuICAgIG9mZihkb2N1bWVudCwgJ3RvdWNobW92ZScsIG5lYXJlc3RFbXB0eUluc2VydERldGVjdEV2ZW50KTtcbiAgfSxcbiAgX29mZlVwRXZlbnRzOiBmdW5jdGlvbiBfb2ZmVXBFdmVudHMoKSB7XG4gICAgdmFyIG93bmVyRG9jdW1lbnQgPSB0aGlzLmVsLm93bmVyRG9jdW1lbnQ7XG4gICAgb2ZmKG93bmVyRG9jdW1lbnQsICdtb3VzZXVwJywgdGhpcy5fb25Ecm9wKTtcbiAgICBvZmYob3duZXJEb2N1bWVudCwgJ3RvdWNoZW5kJywgdGhpcy5fb25Ecm9wKTtcbiAgICBvZmYob3duZXJEb2N1bWVudCwgJ3BvaW50ZXJ1cCcsIHRoaXMuX29uRHJvcCk7XG4gICAgb2ZmKG93bmVyRG9jdW1lbnQsICd0b3VjaGNhbmNlbCcsIHRoaXMuX29uRHJvcCk7XG4gICAgb2ZmKGRvY3VtZW50LCAnc2VsZWN0c3RhcnQnLCB0aGlzKTtcbiAgfSxcbiAgX29uRHJvcDogZnVuY3Rpb24gX29uRHJvcChcbiAgLyoqRXZlbnQqL1xuICBldnQpIHtcbiAgICB2YXIgZWwgPSB0aGlzLmVsLFxuICAgICAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zOyAvLyBHZXQgdGhlIGluZGV4IG9mIHRoZSBkcmFnZ2VkIGVsZW1lbnQgd2l0aGluIGl0cyBwYXJlbnRcblxuICAgIG5ld0luZGV4ID0gaW5kZXgoZHJhZ0VsKTtcbiAgICBuZXdEcmFnZ2FibGVJbmRleCA9IGluZGV4KGRyYWdFbCwgb3B0aW9ucy5kcmFnZ2FibGUpO1xuICAgIHBsdWdpbkV2ZW50KCdkcm9wJywgdGhpcywge1xuICAgICAgZXZ0OiBldnRcbiAgICB9KTtcbiAgICBwYXJlbnRFbCA9IGRyYWdFbCAmJiBkcmFnRWwucGFyZW50Tm9kZTsgLy8gR2V0IGFnYWluIGFmdGVyIHBsdWdpbiBldmVudFxuXG4gICAgbmV3SW5kZXggPSBpbmRleChkcmFnRWwpO1xuICAgIG5ld0RyYWdnYWJsZUluZGV4ID0gaW5kZXgoZHJhZ0VsLCBvcHRpb25zLmRyYWdnYWJsZSk7XG5cbiAgICBpZiAoU29ydGFibGUuZXZlbnRDYW5jZWxlZCkge1xuICAgICAgdGhpcy5fbnVsbGluZygpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXdhaXRpbmdEcmFnU3RhcnRlZCA9IGZhbHNlO1xuICAgIGlzQ2lyY3Vtc3RhbnRpYWxJbnZlcnQgPSBmYWxzZTtcbiAgICBwYXN0Rmlyc3RJbnZlcnRUaHJlc2ggPSBmYWxzZTtcbiAgICBjbGVhckludGVydmFsKHRoaXMuX2xvb3BJZCk7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX2RyYWdTdGFydFRpbWVyKTtcblxuICAgIF9jYW5jZWxOZXh0VGljayh0aGlzLmNsb25lSWQpO1xuXG4gICAgX2NhbmNlbE5leHRUaWNrKHRoaXMuX2RyYWdTdGFydElkKTsgLy8gVW5iaW5kIGV2ZW50c1xuXG5cbiAgICBpZiAodGhpcy5uYXRpdmVEcmFnZ2FibGUpIHtcbiAgICAgIG9mZihkb2N1bWVudCwgJ2Ryb3AnLCB0aGlzKTtcbiAgICAgIG9mZihlbCwgJ2RyYWdzdGFydCcsIHRoaXMuX29uRHJhZ1N0YXJ0KTtcbiAgICB9XG5cbiAgICB0aGlzLl9vZmZNb3ZlRXZlbnRzKCk7XG5cbiAgICB0aGlzLl9vZmZVcEV2ZW50cygpO1xuXG4gICAgaWYgKFNhZmFyaSkge1xuICAgICAgY3NzKGRvY3VtZW50LmJvZHksICd1c2VyLXNlbGVjdCcsICcnKTtcbiAgICB9XG5cbiAgICBjc3MoZHJhZ0VsLCAndHJhbnNmb3JtJywgJycpO1xuXG4gICAgaWYgKGV2dCkge1xuICAgICAgaWYgKG1vdmVkKSB7XG4gICAgICAgIGV2dC5jYW5jZWxhYmxlICYmIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAhb3B0aW9ucy5kcm9wQnViYmxlICYmIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIH1cblxuICAgICAgZ2hvc3RFbCAmJiBnaG9zdEVsLnBhcmVudE5vZGUgJiYgZ2hvc3RFbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGdob3N0RWwpO1xuXG4gICAgICBpZiAocm9vdEVsID09PSBwYXJlbnRFbCB8fCBwdXRTb3J0YWJsZSAmJiBwdXRTb3J0YWJsZS5sYXN0UHV0TW9kZSAhPT0gJ2Nsb25lJykge1xuICAgICAgICAvLyBSZW1vdmUgY2xvbmUocylcbiAgICAgICAgY2xvbmVFbCAmJiBjbG9uZUVsLnBhcmVudE5vZGUgJiYgY2xvbmVFbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNsb25lRWwpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZHJhZ0VsKSB7XG4gICAgICAgIGlmICh0aGlzLm5hdGl2ZURyYWdnYWJsZSkge1xuICAgICAgICAgIG9mZihkcmFnRWwsICdkcmFnZW5kJywgdGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICBfZGlzYWJsZURyYWdnYWJsZShkcmFnRWwpO1xuXG4gICAgICAgIGRyYWdFbC5zdHlsZVsnd2lsbC1jaGFuZ2UnXSA9ICcnOyAvLyBSZW1vdmUgY2xhc3Nlc1xuICAgICAgICAvLyBnaG9zdENsYXNzIGlzIGFkZGVkIGluIGRyYWdTdGFydGVkXG5cbiAgICAgICAgaWYgKG1vdmVkICYmICFhd2FpdGluZ0RyYWdTdGFydGVkKSB7XG4gICAgICAgICAgdG9nZ2xlQ2xhc3MoZHJhZ0VsLCBwdXRTb3J0YWJsZSA/IHB1dFNvcnRhYmxlLm9wdGlvbnMuZ2hvc3RDbGFzcyA6IHRoaXMub3B0aW9ucy5naG9zdENsYXNzLCBmYWxzZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0b2dnbGVDbGFzcyhkcmFnRWwsIHRoaXMub3B0aW9ucy5jaG9zZW5DbGFzcywgZmFsc2UpOyAvLyBEcmFnIHN0b3AgZXZlbnRcblxuICAgICAgICBfZGlzcGF0Y2hFdmVudCh7XG4gICAgICAgICAgc29ydGFibGU6IHRoaXMsXG4gICAgICAgICAgbmFtZTogJ3VuY2hvb3NlJyxcbiAgICAgICAgICB0b0VsOiBwYXJlbnRFbCxcbiAgICAgICAgICBuZXdJbmRleDogbnVsbCxcbiAgICAgICAgICBuZXdEcmFnZ2FibGVJbmRleDogbnVsbCxcbiAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldnRcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHJvb3RFbCAhPT0gcGFyZW50RWwpIHtcbiAgICAgICAgICBpZiAobmV3SW5kZXggPj0gMCkge1xuICAgICAgICAgICAgLy8gQWRkIGV2ZW50XG4gICAgICAgICAgICBfZGlzcGF0Y2hFdmVudCh7XG4gICAgICAgICAgICAgIHJvb3RFbDogcGFyZW50RWwsXG4gICAgICAgICAgICAgIG5hbWU6ICdhZGQnLFxuICAgICAgICAgICAgICB0b0VsOiBwYXJlbnRFbCxcbiAgICAgICAgICAgICAgZnJvbUVsOiByb290RWwsXG4gICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2dFxuICAgICAgICAgICAgfSk7IC8vIFJlbW92ZSBldmVudFxuXG5cbiAgICAgICAgICAgIF9kaXNwYXRjaEV2ZW50KHtcbiAgICAgICAgICAgICAgc29ydGFibGU6IHRoaXMsXG4gICAgICAgICAgICAgIG5hbWU6ICdyZW1vdmUnLFxuICAgICAgICAgICAgICB0b0VsOiBwYXJlbnRFbCxcbiAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZ0XG4gICAgICAgICAgICB9KTsgLy8gZHJhZyBmcm9tIG9uZSBsaXN0IGFuZCBkcm9wIGludG8gYW5vdGhlclxuXG5cbiAgICAgICAgICAgIF9kaXNwYXRjaEV2ZW50KHtcbiAgICAgICAgICAgICAgcm9vdEVsOiBwYXJlbnRFbCxcbiAgICAgICAgICAgICAgbmFtZTogJ3NvcnQnLFxuICAgICAgICAgICAgICB0b0VsOiBwYXJlbnRFbCxcbiAgICAgICAgICAgICAgZnJvbUVsOiByb290RWwsXG4gICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2dFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIF9kaXNwYXRjaEV2ZW50KHtcbiAgICAgICAgICAgICAgc29ydGFibGU6IHRoaXMsXG4gICAgICAgICAgICAgIG5hbWU6ICdzb3J0JyxcbiAgICAgICAgICAgICAgdG9FbDogcGFyZW50RWwsXG4gICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2dFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcHV0U29ydGFibGUgJiYgcHV0U29ydGFibGUuc2F2ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChuZXdJbmRleCAhPT0gb2xkSW5kZXgpIHtcbiAgICAgICAgICAgIGlmIChuZXdJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgIC8vIGRyYWcgJiBkcm9wIHdpdGhpbiB0aGUgc2FtZSBsaXN0XG4gICAgICAgICAgICAgIF9kaXNwYXRjaEV2ZW50KHtcbiAgICAgICAgICAgICAgICBzb3J0YWJsZTogdGhpcyxcbiAgICAgICAgICAgICAgICBuYW1lOiAndXBkYXRlJyxcbiAgICAgICAgICAgICAgICB0b0VsOiBwYXJlbnRFbCxcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldnRcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgX2Rpc3BhdGNoRXZlbnQoe1xuICAgICAgICAgICAgICAgIHNvcnRhYmxlOiB0aGlzLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdzb3J0JyxcbiAgICAgICAgICAgICAgICB0b0VsOiBwYXJlbnRFbCxcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldnRcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFNvcnRhYmxlLmFjdGl2ZSkge1xuICAgICAgICAgIC8qIGpzaGludCBlcW51bGw6dHJ1ZSAqL1xuICAgICAgICAgIGlmIChuZXdJbmRleCA9PSBudWxsIHx8IG5ld0luZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgbmV3SW5kZXggPSBvbGRJbmRleDtcbiAgICAgICAgICAgIG5ld0RyYWdnYWJsZUluZGV4ID0gb2xkRHJhZ2dhYmxlSW5kZXg7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgX2Rpc3BhdGNoRXZlbnQoe1xuICAgICAgICAgICAgc29ydGFibGU6IHRoaXMsXG4gICAgICAgICAgICBuYW1lOiAnZW5kJyxcbiAgICAgICAgICAgIHRvRWw6IHBhcmVudEVsLFxuICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZ0XG4gICAgICAgICAgfSk7IC8vIFNhdmUgc29ydGluZ1xuXG5cbiAgICAgICAgICB0aGlzLnNhdmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX251bGxpbmcoKTtcbiAgfSxcbiAgX251bGxpbmc6IGZ1bmN0aW9uIF9udWxsaW5nKCkge1xuICAgIHBsdWdpbkV2ZW50KCdudWxsaW5nJywgdGhpcyk7XG4gICAgcm9vdEVsID0gZHJhZ0VsID0gcGFyZW50RWwgPSBnaG9zdEVsID0gbmV4dEVsID0gY2xvbmVFbCA9IGxhc3REb3duRWwgPSBjbG9uZUhpZGRlbiA9IHRhcEV2dCA9IHRvdWNoRXZ0ID0gbW92ZWQgPSBuZXdJbmRleCA9IG5ld0RyYWdnYWJsZUluZGV4ID0gb2xkSW5kZXggPSBvbGREcmFnZ2FibGVJbmRleCA9IGxhc3RUYXJnZXQgPSBsYXN0RGlyZWN0aW9uID0gcHV0U29ydGFibGUgPSBhY3RpdmVHcm91cCA9IFNvcnRhYmxlLmRyYWdnZWQgPSBTb3J0YWJsZS5naG9zdCA9IFNvcnRhYmxlLmNsb25lID0gU29ydGFibGUuYWN0aXZlID0gbnVsbDtcbiAgICBzYXZlZElucHV0Q2hlY2tlZC5mb3JFYWNoKGZ1bmN0aW9uIChlbCkge1xuICAgICAgZWwuY2hlY2tlZCA9IHRydWU7XG4gICAgfSk7XG4gICAgc2F2ZWRJbnB1dENoZWNrZWQubGVuZ3RoID0gbGFzdER4ID0gbGFzdER5ID0gMDtcbiAgfSxcbiAgaGFuZGxlRXZlbnQ6IGZ1bmN0aW9uIGhhbmRsZUV2ZW50KFxuICAvKipFdmVudCovXG4gIGV2dCkge1xuICAgIHN3aXRjaCAoZXZ0LnR5cGUpIHtcbiAgICAgIGNhc2UgJ2Ryb3AnOlxuICAgICAgY2FzZSAnZHJhZ2VuZCc6XG4gICAgICAgIHRoaXMuX29uRHJvcChldnQpO1xuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdkcmFnZW50ZXInOlxuICAgICAgY2FzZSAnZHJhZ292ZXInOlxuICAgICAgICBpZiAoZHJhZ0VsKSB7XG4gICAgICAgICAgdGhpcy5fb25EcmFnT3ZlcihldnQpO1xuXG4gICAgICAgICAgX2dsb2JhbERyYWdPdmVyKGV2dCk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnc2VsZWN0c3RhcnQnOlxuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIHRoZSBpdGVtIGludG8gYW4gYXJyYXkgb2Ygc3RyaW5nLlxuICAgKiBAcmV0dXJucyB7U3RyaW5nW119XG4gICAqL1xuICB0b0FycmF5OiBmdW5jdGlvbiB0b0FycmF5KCkge1xuICAgIHZhciBvcmRlciA9IFtdLFxuICAgICAgICBlbCxcbiAgICAgICAgY2hpbGRyZW4gPSB0aGlzLmVsLmNoaWxkcmVuLFxuICAgICAgICBpID0gMCxcbiAgICAgICAgbiA9IGNoaWxkcmVuLmxlbmd0aCxcbiAgICAgICAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuICAgIGZvciAoOyBpIDwgbjsgaSsrKSB7XG4gICAgICBlbCA9IGNoaWxkcmVuW2ldO1xuXG4gICAgICBpZiAoY2xvc2VzdChlbCwgb3B0aW9ucy5kcmFnZ2FibGUsIHRoaXMuZWwsIGZhbHNlKSkge1xuICAgICAgICBvcmRlci5wdXNoKGVsLmdldEF0dHJpYnV0ZShvcHRpb25zLmRhdGFJZEF0dHIpIHx8IF9nZW5lcmF0ZUlkKGVsKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG9yZGVyO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTb3J0cyB0aGUgZWxlbWVudHMgYWNjb3JkaW5nIHRvIHRoZSBhcnJheS5cbiAgICogQHBhcmFtICB7U3RyaW5nW119ICBvcmRlciAgb3JkZXIgb2YgdGhlIGl0ZW1zXG4gICAqL1xuICBzb3J0OiBmdW5jdGlvbiBzb3J0KG9yZGVyLCB1c2VBbmltYXRpb24pIHtcbiAgICB2YXIgaXRlbXMgPSB7fSxcbiAgICAgICAgcm9vdEVsID0gdGhpcy5lbDtcbiAgICB0aGlzLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChpZCwgaSkge1xuICAgICAgdmFyIGVsID0gcm9vdEVsLmNoaWxkcmVuW2ldO1xuXG4gICAgICBpZiAoY2xvc2VzdChlbCwgdGhpcy5vcHRpb25zLmRyYWdnYWJsZSwgcm9vdEVsLCBmYWxzZSkpIHtcbiAgICAgICAgaXRlbXNbaWRdID0gZWw7XG4gICAgICB9XG4gICAgfSwgdGhpcyk7XG4gICAgdXNlQW5pbWF0aW9uICYmIHRoaXMuY2FwdHVyZUFuaW1hdGlvblN0YXRlKCk7XG4gICAgb3JkZXIuZm9yRWFjaChmdW5jdGlvbiAoaWQpIHtcbiAgICAgIGlmIChpdGVtc1tpZF0pIHtcbiAgICAgICAgcm9vdEVsLnJlbW92ZUNoaWxkKGl0ZW1zW2lkXSk7XG4gICAgICAgIHJvb3RFbC5hcHBlbmRDaGlsZChpdGVtc1tpZF0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHVzZUFuaW1hdGlvbiAmJiB0aGlzLmFuaW1hdGVBbGwoKTtcbiAgfSxcblxuICAvKipcbiAgICogU2F2ZSB0aGUgY3VycmVudCBzb3J0aW5nXG4gICAqL1xuICBzYXZlOiBmdW5jdGlvbiBzYXZlKCkge1xuICAgIHZhciBzdG9yZSA9IHRoaXMub3B0aW9ucy5zdG9yZTtcbiAgICBzdG9yZSAmJiBzdG9yZS5zZXQgJiYgc3RvcmUuc2V0KHRoaXMpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBGb3IgZWFjaCBlbGVtZW50IGluIHRoZSBzZXQsIGdldCB0aGUgZmlyc3QgZWxlbWVudCB0aGF0IG1hdGNoZXMgdGhlIHNlbGVjdG9yIGJ5IHRlc3RpbmcgdGhlIGVsZW1lbnQgaXRzZWxmIGFuZCB0cmF2ZXJzaW5nIHVwIHRocm91Z2ggaXRzIGFuY2VzdG9ycyBpbiB0aGUgRE9NIHRyZWUuXG4gICAqIEBwYXJhbSAgIHtIVE1MRWxlbWVudH0gIGVsXG4gICAqIEBwYXJhbSAgIHtTdHJpbmd9ICAgICAgIFtzZWxlY3Rvcl0gIGRlZmF1bHQ6IGBvcHRpb25zLmRyYWdnYWJsZWBcbiAgICogQHJldHVybnMge0hUTUxFbGVtZW50fG51bGx9XG4gICAqL1xuICBjbG9zZXN0OiBmdW5jdGlvbiBjbG9zZXN0JDEoZWwsIHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIGNsb3Nlc3QoZWwsIHNlbGVjdG9yIHx8IHRoaXMub3B0aW9ucy5kcmFnZ2FibGUsIHRoaXMuZWwsIGZhbHNlKTtcbiAgfSxcblxuICAvKipcbiAgICogU2V0L2dldCBvcHRpb25cbiAgICogQHBhcmFtICAge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0gICB7Kn0gICAgICBbdmFsdWVdXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgb3B0aW9uOiBmdW5jdGlvbiBvcHRpb24obmFtZSwgdmFsdWUpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuICAgIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSB7XG4gICAgICByZXR1cm4gb3B0aW9uc1tuYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG1vZGlmaWVkVmFsdWUgPSBQbHVnaW5NYW5hZ2VyLm1vZGlmeU9wdGlvbih0aGlzLCBuYW1lLCB2YWx1ZSk7XG5cbiAgICAgIGlmICh0eXBlb2YgbW9kaWZpZWRWYWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgb3B0aW9uc1tuYW1lXSA9IG1vZGlmaWVkVmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcHRpb25zW25hbWVdID0gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChuYW1lID09PSAnZ3JvdXAnKSB7XG4gICAgICAgIF9wcmVwYXJlR3JvdXAob3B0aW9ucyk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBEZXN0cm95XG4gICAqL1xuICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIHBsdWdpbkV2ZW50KCdkZXN0cm95JywgdGhpcyk7XG4gICAgdmFyIGVsID0gdGhpcy5lbDtcbiAgICBlbFtleHBhbmRvXSA9IG51bGw7XG4gICAgb2ZmKGVsLCAnbW91c2Vkb3duJywgdGhpcy5fb25UYXBTdGFydCk7XG4gICAgb2ZmKGVsLCAndG91Y2hzdGFydCcsIHRoaXMuX29uVGFwU3RhcnQpO1xuICAgIG9mZihlbCwgJ3BvaW50ZXJkb3duJywgdGhpcy5fb25UYXBTdGFydCk7XG5cbiAgICBpZiAodGhpcy5uYXRpdmVEcmFnZ2FibGUpIHtcbiAgICAgIG9mZihlbCwgJ2RyYWdvdmVyJywgdGhpcyk7XG4gICAgICBvZmYoZWwsICdkcmFnZW50ZXInLCB0aGlzKTtcbiAgICB9IC8vIFJlbW92ZSBkcmFnZ2FibGUgYXR0cmlidXRlc1xuXG5cbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkcmFnZ2FibGVdJyksIGZ1bmN0aW9uIChlbCkge1xuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKCdkcmFnZ2FibGUnKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX29uRHJvcCgpO1xuXG4gICAgdGhpcy5fZGlzYWJsZURlbGF5ZWREcmFnRXZlbnRzKCk7XG5cbiAgICBzb3J0YWJsZXMuc3BsaWNlKHNvcnRhYmxlcy5pbmRleE9mKHRoaXMuZWwpLCAxKTtcbiAgICB0aGlzLmVsID0gZWwgPSBudWxsO1xuICB9LFxuICBfaGlkZUNsb25lOiBmdW5jdGlvbiBfaGlkZUNsb25lKCkge1xuICAgIGlmICghY2xvbmVIaWRkZW4pIHtcbiAgICAgIHBsdWdpbkV2ZW50KCdoaWRlQ2xvbmUnLCB0aGlzKTtcbiAgICAgIGlmIChTb3J0YWJsZS5ldmVudENhbmNlbGVkKSByZXR1cm47XG4gICAgICBjc3MoY2xvbmVFbCwgJ2Rpc3BsYXknLCAnbm9uZScpO1xuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLnJlbW92ZUNsb25lT25IaWRlICYmIGNsb25lRWwucGFyZW50Tm9kZSkge1xuICAgICAgICBjbG9uZUVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY2xvbmVFbCk7XG4gICAgICB9XG5cbiAgICAgIGNsb25lSGlkZGVuID0gdHJ1ZTtcbiAgICB9XG4gIH0sXG4gIF9zaG93Q2xvbmU6IGZ1bmN0aW9uIF9zaG93Q2xvbmUocHV0U29ydGFibGUpIHtcbiAgICBpZiAocHV0U29ydGFibGUubGFzdFB1dE1vZGUgIT09ICdjbG9uZScpIHtcbiAgICAgIHRoaXMuX2hpZGVDbG9uZSgpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGNsb25lSGlkZGVuKSB7XG4gICAgICBwbHVnaW5FdmVudCgnc2hvd0Nsb25lJywgdGhpcyk7XG4gICAgICBpZiAoU29ydGFibGUuZXZlbnRDYW5jZWxlZCkgcmV0dXJuOyAvLyBzaG93IGNsb25lIGF0IGRyYWdFbCBvciBvcmlnaW5hbCBwb3NpdGlvblxuXG4gICAgICBpZiAoZHJhZ0VsLnBhcmVudE5vZGUgPT0gcm9vdEVsICYmICF0aGlzLm9wdGlvbnMuZ3JvdXAucmV2ZXJ0Q2xvbmUpIHtcbiAgICAgICAgcm9vdEVsLmluc2VydEJlZm9yZShjbG9uZUVsLCBkcmFnRWwpO1xuICAgICAgfSBlbHNlIGlmIChuZXh0RWwpIHtcbiAgICAgICAgcm9vdEVsLmluc2VydEJlZm9yZShjbG9uZUVsLCBuZXh0RWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdEVsLmFwcGVuZENoaWxkKGNsb25lRWwpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmdyb3VwLnJldmVydENsb25lKSB7XG4gICAgICAgIHRoaXMuYW5pbWF0ZShkcmFnRWwsIGNsb25lRWwpO1xuICAgICAgfVxuXG4gICAgICBjc3MoY2xvbmVFbCwgJ2Rpc3BsYXknLCAnJyk7XG4gICAgICBjbG9uZUhpZGRlbiA9IGZhbHNlO1xuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gX2dsb2JhbERyYWdPdmVyKFxuLyoqRXZlbnQqL1xuZXZ0KSB7XG4gIGlmIChldnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgZXZ0LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gJ21vdmUnO1xuICB9XG5cbiAgZXZ0LmNhbmNlbGFibGUgJiYgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG59XG5cbmZ1bmN0aW9uIF9vbk1vdmUoZnJvbUVsLCB0b0VsLCBkcmFnRWwsIGRyYWdSZWN0LCB0YXJnZXRFbCwgdGFyZ2V0UmVjdCwgb3JpZ2luYWxFdmVudCwgd2lsbEluc2VydEFmdGVyKSB7XG4gIHZhciBldnQsXG4gICAgICBzb3J0YWJsZSA9IGZyb21FbFtleHBhbmRvXSxcbiAgICAgIG9uTW92ZUZuID0gc29ydGFibGUub3B0aW9ucy5vbk1vdmUsXG4gICAgICByZXRWYWw7IC8vIFN1cHBvcnQgZm9yIG5ldyBDdXN0b21FdmVudCBmZWF0dXJlXG5cbiAgaWYgKHdpbmRvdy5DdXN0b21FdmVudCAmJiAhSUUxMU9yTGVzcyAmJiAhRWRnZSkge1xuICAgIGV2dCA9IG5ldyBDdXN0b21FdmVudCgnbW92ZScsIHtcbiAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICBjYW5jZWxhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG4gICAgZXZ0LmluaXRFdmVudCgnbW92ZScsIHRydWUsIHRydWUpO1xuICB9XG5cbiAgZXZ0LnRvID0gdG9FbDtcbiAgZXZ0LmZyb20gPSBmcm9tRWw7XG4gIGV2dC5kcmFnZ2VkID0gZHJhZ0VsO1xuICBldnQuZHJhZ2dlZFJlY3QgPSBkcmFnUmVjdDtcbiAgZXZ0LnJlbGF0ZWQgPSB0YXJnZXRFbCB8fCB0b0VsO1xuICBldnQucmVsYXRlZFJlY3QgPSB0YXJnZXRSZWN0IHx8IGdldFJlY3QodG9FbCk7XG4gIGV2dC53aWxsSW5zZXJ0QWZ0ZXIgPSB3aWxsSW5zZXJ0QWZ0ZXI7XG4gIGV2dC5vcmlnaW5hbEV2ZW50ID0gb3JpZ2luYWxFdmVudDtcbiAgZnJvbUVsLmRpc3BhdGNoRXZlbnQoZXZ0KTtcblxuICBpZiAob25Nb3ZlRm4pIHtcbiAgICByZXRWYWwgPSBvbk1vdmVGbi5jYWxsKHNvcnRhYmxlLCBldnQsIG9yaWdpbmFsRXZlbnQpO1xuICB9XG5cbiAgcmV0dXJuIHJldFZhbDtcbn1cblxuZnVuY3Rpb24gX2Rpc2FibGVEcmFnZ2FibGUoZWwpIHtcbiAgZWwuZHJhZ2dhYmxlID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIF91bnNpbGVudCgpIHtcbiAgX3NpbGVudCA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBfZ2hvc3RJc0xhc3QoZXZ0LCB2ZXJ0aWNhbCwgc29ydGFibGUpIHtcbiAgdmFyIHJlY3QgPSBnZXRSZWN0KGxhc3RDaGlsZChzb3J0YWJsZS5lbCwgc29ydGFibGUub3B0aW9ucy5kcmFnZ2FibGUpKTtcbiAgdmFyIHNwYWNlciA9IDEwO1xuICByZXR1cm4gdmVydGljYWwgPyBldnQuY2xpZW50WCA+IHJlY3QucmlnaHQgKyBzcGFjZXIgfHwgZXZ0LmNsaWVudFggPD0gcmVjdC5yaWdodCAmJiBldnQuY2xpZW50WSA+IHJlY3QuYm90dG9tICYmIGV2dC5jbGllbnRYID49IHJlY3QubGVmdCA6IGV2dC5jbGllbnRYID4gcmVjdC5yaWdodCAmJiBldnQuY2xpZW50WSA+IHJlY3QudG9wIHx8IGV2dC5jbGllbnRYIDw9IHJlY3QucmlnaHQgJiYgZXZ0LmNsaWVudFkgPiByZWN0LmJvdHRvbSArIHNwYWNlcjtcbn1cblxuZnVuY3Rpb24gX2dldFN3YXBEaXJlY3Rpb24oZXZ0LCB0YXJnZXQsIHRhcmdldFJlY3QsIHZlcnRpY2FsLCBzd2FwVGhyZXNob2xkLCBpbnZlcnRlZFN3YXBUaHJlc2hvbGQsIGludmVydFN3YXAsIGlzTGFzdFRhcmdldCkge1xuICB2YXIgbW91c2VPbkF4aXMgPSB2ZXJ0aWNhbCA/IGV2dC5jbGllbnRZIDogZXZ0LmNsaWVudFgsXG4gICAgICB0YXJnZXRMZW5ndGggPSB2ZXJ0aWNhbCA/IHRhcmdldFJlY3QuaGVpZ2h0IDogdGFyZ2V0UmVjdC53aWR0aCxcbiAgICAgIHRhcmdldFMxID0gdmVydGljYWwgPyB0YXJnZXRSZWN0LnRvcCA6IHRhcmdldFJlY3QubGVmdCxcbiAgICAgIHRhcmdldFMyID0gdmVydGljYWwgPyB0YXJnZXRSZWN0LmJvdHRvbSA6IHRhcmdldFJlY3QucmlnaHQsXG4gICAgICBpbnZlcnQgPSBmYWxzZTtcblxuICBpZiAoIWludmVydFN3YXApIHtcbiAgICAvLyBOZXZlciBpbnZlcnQgb3IgY3JlYXRlIGRyYWdFbCBzaGFkb3cgd2hlbiB0YXJnZXQgbW92ZW1lbmV0IGNhdXNlcyBtb3VzZSB0byBtb3ZlIHBhc3QgdGhlIGVuZCBvZiByZWd1bGFyIHN3YXBUaHJlc2hvbGRcbiAgICBpZiAoaXNMYXN0VGFyZ2V0ICYmIHRhcmdldE1vdmVEaXN0YW5jZSA8IHRhcmdldExlbmd0aCAqIHN3YXBUaHJlc2hvbGQpIHtcbiAgICAgIC8vIG11bHRpcGxpZWQgb25seSBieSBzd2FwVGhyZXNob2xkIGJlY2F1c2UgbW91c2Ugd2lsbCBhbHJlYWR5IGJlIGluc2lkZSB0YXJnZXQgYnkgKDEgLSB0aHJlc2hvbGQpICogdGFyZ2V0TGVuZ3RoIC8gMlxuICAgICAgLy8gY2hlY2sgaWYgcGFzdCBmaXJzdCBpbnZlcnQgdGhyZXNob2xkIG9uIHNpZGUgb3Bwb3NpdGUgb2YgbGFzdERpcmVjdGlvblxuICAgICAgaWYgKCFwYXN0Rmlyc3RJbnZlcnRUaHJlc2ggJiYgKGxhc3REaXJlY3Rpb24gPT09IDEgPyBtb3VzZU9uQXhpcyA+IHRhcmdldFMxICsgdGFyZ2V0TGVuZ3RoICogaW52ZXJ0ZWRTd2FwVGhyZXNob2xkIC8gMiA6IG1vdXNlT25BeGlzIDwgdGFyZ2V0UzIgLSB0YXJnZXRMZW5ndGggKiBpbnZlcnRlZFN3YXBUaHJlc2hvbGQgLyAyKSkge1xuICAgICAgICAvLyBwYXN0IGZpcnN0IGludmVydCB0aHJlc2hvbGQsIGRvIG5vdCByZXN0cmljdCBpbnZlcnRlZCB0aHJlc2hvbGQgdG8gZHJhZ0VsIHNoYWRvd1xuICAgICAgICBwYXN0Rmlyc3RJbnZlcnRUaHJlc2ggPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXBhc3RGaXJzdEludmVydFRocmVzaCkge1xuICAgICAgICAvLyBkcmFnRWwgc2hhZG93ICh0YXJnZXQgbW92ZSBkaXN0YW5jZSBzaGFkb3cpXG4gICAgICAgIGlmIChsYXN0RGlyZWN0aW9uID09PSAxID8gbW91c2VPbkF4aXMgPCB0YXJnZXRTMSArIHRhcmdldE1vdmVEaXN0YW5jZSAvLyBvdmVyIGRyYWdFbCBzaGFkb3dcbiAgICAgICAgOiBtb3VzZU9uQXhpcyA+IHRhcmdldFMyIC0gdGFyZ2V0TW92ZURpc3RhbmNlKSB7XG4gICAgICAgICAgcmV0dXJuIC1sYXN0RGlyZWN0aW9uO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnZlcnQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZWd1bGFyXG4gICAgICBpZiAobW91c2VPbkF4aXMgPiB0YXJnZXRTMSArIHRhcmdldExlbmd0aCAqICgxIC0gc3dhcFRocmVzaG9sZCkgLyAyICYmIG1vdXNlT25BeGlzIDwgdGFyZ2V0UzIgLSB0YXJnZXRMZW5ndGggKiAoMSAtIHN3YXBUaHJlc2hvbGQpIC8gMikge1xuICAgICAgICByZXR1cm4gX2dldEluc2VydERpcmVjdGlvbih0YXJnZXQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGludmVydCA9IGludmVydCB8fCBpbnZlcnRTd2FwO1xuXG4gIGlmIChpbnZlcnQpIHtcbiAgICAvLyBJbnZlcnQgb2YgcmVndWxhclxuICAgIGlmIChtb3VzZU9uQXhpcyA8IHRhcmdldFMxICsgdGFyZ2V0TGVuZ3RoICogaW52ZXJ0ZWRTd2FwVGhyZXNob2xkIC8gMiB8fCBtb3VzZU9uQXhpcyA+IHRhcmdldFMyIC0gdGFyZ2V0TGVuZ3RoICogaW52ZXJ0ZWRTd2FwVGhyZXNob2xkIC8gMikge1xuICAgICAgcmV0dXJuIG1vdXNlT25BeGlzID4gdGFyZ2V0UzEgKyB0YXJnZXRMZW5ndGggLyAyID8gMSA6IC0xO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAwO1xufVxuLyoqXG4gKiBHZXRzIHRoZSBkaXJlY3Rpb24gZHJhZ0VsIG11c3QgYmUgc3dhcHBlZCByZWxhdGl2ZSB0byB0YXJnZXQgaW4gb3JkZXIgdG8gbWFrZSBpdFxuICogc2VlbSB0aGF0IGRyYWdFbCBoYXMgYmVlbiBcImluc2VydGVkXCIgaW50byB0aGF0IGVsZW1lbnQncyBwb3NpdGlvblxuICogQHBhcmFtICB7SFRNTEVsZW1lbnR9IHRhcmdldCAgICAgICBUaGUgdGFyZ2V0IHdob3NlIHBvc2l0aW9uIGRyYWdFbCBpcyBiZWluZyBpbnNlcnRlZCBhdFxuICogQHJldHVybiB7TnVtYmVyfSAgICAgICAgICAgICAgICAgICBEaXJlY3Rpb24gZHJhZ0VsIG11c3QgYmUgc3dhcHBlZFxuICovXG5cblxuZnVuY3Rpb24gX2dldEluc2VydERpcmVjdGlvbih0YXJnZXQpIHtcbiAgaWYgKGluZGV4KGRyYWdFbCkgPCBpbmRleCh0YXJnZXQpKSB7XG4gICAgcmV0dXJuIDE7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG59XG4vKipcbiAqIEdlbmVyYXRlIGlkXG4gKiBAcGFyYW0gICB7SFRNTEVsZW1lbnR9IGVsXG4gKiBAcmV0dXJucyB7U3RyaW5nfVxuICogQHByaXZhdGVcbiAqL1xuXG5cbmZ1bmN0aW9uIF9nZW5lcmF0ZUlkKGVsKSB7XG4gIHZhciBzdHIgPSBlbC50YWdOYW1lICsgZWwuY2xhc3NOYW1lICsgZWwuc3JjICsgZWwuaHJlZiArIGVsLnRleHRDb250ZW50LFxuICAgICAgaSA9IHN0ci5sZW5ndGgsXG4gICAgICBzdW0gPSAwO1xuXG4gIHdoaWxlIChpLS0pIHtcbiAgICBzdW0gKz0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gIH1cblxuICByZXR1cm4gc3VtLnRvU3RyaW5nKDM2KTtcbn1cblxuZnVuY3Rpb24gX3NhdmVJbnB1dENoZWNrZWRTdGF0ZShyb290KSB7XG4gIHNhdmVkSW5wdXRDaGVja2VkLmxlbmd0aCA9IDA7XG4gIHZhciBpbnB1dHMgPSByb290LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpO1xuICB2YXIgaWR4ID0gaW5wdXRzLmxlbmd0aDtcblxuICB3aGlsZSAoaWR4LS0pIHtcbiAgICB2YXIgZWwgPSBpbnB1dHNbaWR4XTtcbiAgICBlbC5jaGVja2VkICYmIHNhdmVkSW5wdXRDaGVja2VkLnB1c2goZWwpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9uZXh0VGljayhmbikge1xuICByZXR1cm4gc2V0VGltZW91dChmbiwgMCk7XG59XG5cbmZ1bmN0aW9uIF9jYW5jZWxOZXh0VGljayhpZCkge1xuICByZXR1cm4gY2xlYXJUaW1lb3V0KGlkKTtcbn0gLy8gRml4ZWQgIzk3MzpcblxuXG5pZiAoZG9jdW1lbnRFeGlzdHMpIHtcbiAgb24oZG9jdW1lbnQsICd0b3VjaG1vdmUnLCBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgaWYgKChTb3J0YWJsZS5hY3RpdmUgfHwgYXdhaXRpbmdEcmFnU3RhcnRlZCkgJiYgZXZ0LmNhbmNlbGFibGUpIHtcbiAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfSk7XG59IC8vIEV4cG9ydCB1dGlsc1xuXG5cblNvcnRhYmxlLnV0aWxzID0ge1xuICBvbjogb24sXG4gIG9mZjogb2ZmLFxuICBjc3M6IGNzcyxcbiAgZmluZDogZmluZCxcbiAgaXM6IGZ1bmN0aW9uIGlzKGVsLCBzZWxlY3Rvcikge1xuICAgIHJldHVybiAhIWNsb3Nlc3QoZWwsIHNlbGVjdG9yLCBlbCwgZmFsc2UpO1xuICB9LFxuICBleHRlbmQ6IGV4dGVuZCxcbiAgdGhyb3R0bGU6IHRocm90dGxlLFxuICBjbG9zZXN0OiBjbG9zZXN0LFxuICB0b2dnbGVDbGFzczogdG9nZ2xlQ2xhc3MsXG4gIGNsb25lOiBjbG9uZSxcbiAgaW5kZXg6IGluZGV4LFxuICBuZXh0VGljazogX25leHRUaWNrLFxuICBjYW5jZWxOZXh0VGljazogX2NhbmNlbE5leHRUaWNrLFxuICBkZXRlY3REaXJlY3Rpb246IF9kZXRlY3REaXJlY3Rpb24sXG4gIGdldENoaWxkOiBnZXRDaGlsZFxufTtcbi8qKlxuICogR2V0IHRoZSBTb3J0YWJsZSBpbnN0YW5jZSBvZiBhbiBlbGVtZW50XG4gKiBAcGFyYW0gIHtIVE1MRWxlbWVudH0gZWxlbWVudCBUaGUgZWxlbWVudFxuICogQHJldHVybiB7U29ydGFibGV8dW5kZWZpbmVkfSAgICAgICAgIFRoZSBpbnN0YW5jZSBvZiBTb3J0YWJsZVxuICovXG5cblNvcnRhYmxlLmdldCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50W2V4cGFuZG9dO1xufTtcbi8qKlxuICogTW91bnQgYSBwbHVnaW4gdG8gU29ydGFibGVcbiAqIEBwYXJhbSAgey4uLlNvcnRhYmxlUGx1Z2lufFNvcnRhYmxlUGx1Z2luW119IHBsdWdpbnMgICAgICAgUGx1Z2lucyBiZWluZyBtb3VudGVkXG4gKi9cblxuXG5Tb3J0YWJsZS5tb3VudCA9IGZ1bmN0aW9uICgpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHBsdWdpbnMgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgcGx1Z2luc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIGlmIChwbHVnaW5zWzBdLmNvbnN0cnVjdG9yID09PSBBcnJheSkgcGx1Z2lucyA9IHBsdWdpbnNbMF07XG4gIHBsdWdpbnMuZm9yRWFjaChmdW5jdGlvbiAocGx1Z2luKSB7XG4gICAgaWYgKCFwbHVnaW4ucHJvdG90eXBlIHx8ICFwbHVnaW4ucHJvdG90eXBlLmNvbnN0cnVjdG9yKSB7XG4gICAgICB0aHJvdyBcIlNvcnRhYmxlOiBNb3VudGVkIHBsdWdpbiBtdXN0IGJlIGEgY29uc3RydWN0b3IgZnVuY3Rpb24sIG5vdCBcIi5jb25jYXQoe30udG9TdHJpbmcuY2FsbChwbHVnaW4pKTtcbiAgICB9XG5cbiAgICBpZiAocGx1Z2luLnV0aWxzKSBTb3J0YWJsZS51dGlscyA9IF9vYmplY3RTcHJlYWQoe30sIFNvcnRhYmxlLnV0aWxzLCBwbHVnaW4udXRpbHMpO1xuICAgIFBsdWdpbk1hbmFnZXIubW91bnQocGx1Z2luKTtcbiAgfSk7XG59O1xuLyoqXG4gKiBDcmVhdGUgc29ydGFibGUgaW5zdGFuY2VcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9ICBlbFxuICogQHBhcmFtIHtPYmplY3R9ICAgICAgW29wdGlvbnNdXG4gKi9cblxuXG5Tb3J0YWJsZS5jcmVhdGUgPSBmdW5jdGlvbiAoZWwsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBTb3J0YWJsZShlbCwgb3B0aW9ucyk7XG59OyAvLyBFeHBvcnRcblxuXG5Tb3J0YWJsZS52ZXJzaW9uID0gdmVyc2lvbjtcblxudmFyIGF1dG9TY3JvbGxzID0gW10sXG4gICAgc2Nyb2xsRWwsXG4gICAgc2Nyb2xsUm9vdEVsLFxuICAgIHNjcm9sbGluZyA9IGZhbHNlLFxuICAgIGxhc3RBdXRvU2Nyb2xsWCxcbiAgICBsYXN0QXV0b1Njcm9sbFksXG4gICAgdG91Y2hFdnQkMSxcbiAgICBwb2ludGVyRWxlbUNoYW5nZWRJbnRlcnZhbDtcblxuZnVuY3Rpb24gQXV0b1Njcm9sbFBsdWdpbigpIHtcbiAgZnVuY3Rpb24gQXV0b1Njcm9sbCgpIHtcbiAgICB0aGlzLmRlZmF1bHRzID0ge1xuICAgICAgc2Nyb2xsOiB0cnVlLFxuICAgICAgc2Nyb2xsU2Vuc2l0aXZpdHk6IDMwLFxuICAgICAgc2Nyb2xsU3BlZWQ6IDEwLFxuICAgICAgYnViYmxlU2Nyb2xsOiB0cnVlXG4gICAgfTsgLy8gQmluZCBhbGwgcHJpdmF0ZSBtZXRob2RzXG5cbiAgICBmb3IgKHZhciBmbiBpbiB0aGlzKSB7XG4gICAgICBpZiAoZm4uY2hhckF0KDApID09PSAnXycgJiYgdHlwZW9mIHRoaXNbZm5dID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXNbZm5dID0gdGhpc1tmbl0uYmluZCh0aGlzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBBdXRvU2Nyb2xsLnByb3RvdHlwZSA9IHtcbiAgICBkcmFnU3RhcnRlZDogZnVuY3Rpb24gZHJhZ1N0YXJ0ZWQoX3JlZikge1xuICAgICAgdmFyIG9yaWdpbmFsRXZlbnQgPSBfcmVmLm9yaWdpbmFsRXZlbnQ7XG5cbiAgICAgIGlmICh0aGlzLnNvcnRhYmxlLm5hdGl2ZURyYWdnYWJsZSkge1xuICAgICAgICBvbihkb2N1bWVudCwgJ2RyYWdvdmVyJywgdGhpcy5faGFuZGxlQXV0b1Njcm9sbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnN1cHBvcnRQb2ludGVyKSB7XG4gICAgICAgICAgb24oZG9jdW1lbnQsICdwb2ludGVybW92ZScsIHRoaXMuX2hhbmRsZUZhbGxiYWNrQXV0b1Njcm9sbCk7XG4gICAgICAgIH0gZWxzZSBpZiAob3JpZ2luYWxFdmVudC50b3VjaGVzKSB7XG4gICAgICAgICAgb24oZG9jdW1lbnQsICd0b3VjaG1vdmUnLCB0aGlzLl9oYW5kbGVGYWxsYmFja0F1dG9TY3JvbGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9uKGRvY3VtZW50LCAnbW91c2Vtb3ZlJywgdGhpcy5faGFuZGxlRmFsbGJhY2tBdXRvU2Nyb2xsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgZHJhZ092ZXJDb21wbGV0ZWQ6IGZ1bmN0aW9uIGRyYWdPdmVyQ29tcGxldGVkKF9yZWYyKSB7XG4gICAgICB2YXIgb3JpZ2luYWxFdmVudCA9IF9yZWYyLm9yaWdpbmFsRXZlbnQ7XG5cbiAgICAgIC8vIEZvciB3aGVuIGJ1YmJsaW5nIGlzIGNhbmNlbGVkIGFuZCB1c2luZyBmYWxsYmFjayAoZmFsbGJhY2sgJ3RvdWNobW92ZScgYWx3YXlzIHJlYWNoZWQpXG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5kcmFnT3ZlckJ1YmJsZSAmJiAhb3JpZ2luYWxFdmVudC5yb290RWwpIHtcbiAgICAgICAgdGhpcy5faGFuZGxlQXV0b1Njcm9sbChvcmlnaW5hbEV2ZW50KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRyb3A6IGZ1bmN0aW9uIGRyb3AoKSB7XG4gICAgICBpZiAodGhpcy5zb3J0YWJsZS5uYXRpdmVEcmFnZ2FibGUpIHtcbiAgICAgICAgb2ZmKGRvY3VtZW50LCAnZHJhZ292ZXInLCB0aGlzLl9oYW5kbGVBdXRvU2Nyb2xsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9mZihkb2N1bWVudCwgJ3BvaW50ZXJtb3ZlJywgdGhpcy5faGFuZGxlRmFsbGJhY2tBdXRvU2Nyb2xsKTtcbiAgICAgICAgb2ZmKGRvY3VtZW50LCAndG91Y2htb3ZlJywgdGhpcy5faGFuZGxlRmFsbGJhY2tBdXRvU2Nyb2xsKTtcbiAgICAgICAgb2ZmKGRvY3VtZW50LCAnbW91c2Vtb3ZlJywgdGhpcy5faGFuZGxlRmFsbGJhY2tBdXRvU2Nyb2xsKTtcbiAgICAgIH1cblxuICAgICAgY2xlYXJQb2ludGVyRWxlbUNoYW5nZWRJbnRlcnZhbCgpO1xuICAgICAgY2xlYXJBdXRvU2Nyb2xscygpO1xuICAgICAgY2FuY2VsVGhyb3R0bGUoKTtcbiAgICB9LFxuICAgIG51bGxpbmc6IGZ1bmN0aW9uIG51bGxpbmcoKSB7XG4gICAgICB0b3VjaEV2dCQxID0gc2Nyb2xsUm9vdEVsID0gc2Nyb2xsRWwgPSBzY3JvbGxpbmcgPSBwb2ludGVyRWxlbUNoYW5nZWRJbnRlcnZhbCA9IGxhc3RBdXRvU2Nyb2xsWCA9IGxhc3RBdXRvU2Nyb2xsWSA9IG51bGw7XG4gICAgICBhdXRvU2Nyb2xscy5sZW5ndGggPSAwO1xuICAgIH0sXG4gICAgX2hhbmRsZUZhbGxiYWNrQXV0b1Njcm9sbDogZnVuY3Rpb24gX2hhbmRsZUZhbGxiYWNrQXV0b1Njcm9sbChldnQpIHtcbiAgICAgIHRoaXMuX2hhbmRsZUF1dG9TY3JvbGwoZXZ0LCB0cnVlKTtcbiAgICB9LFxuICAgIF9oYW5kbGVBdXRvU2Nyb2xsOiBmdW5jdGlvbiBfaGFuZGxlQXV0b1Njcm9sbChldnQsIGZhbGxiYWNrKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICB2YXIgeCA9IChldnQudG91Y2hlcyA/IGV2dC50b3VjaGVzWzBdIDogZXZ0KS5jbGllbnRYLFxuICAgICAgICAgIHkgPSAoZXZ0LnRvdWNoZXMgPyBldnQudG91Y2hlc1swXSA6IGV2dCkuY2xpZW50WSxcbiAgICAgICAgICBlbGVtID0gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludCh4LCB5KTtcbiAgICAgIHRvdWNoRXZ0JDEgPSBldnQ7IC8vIElFIGRvZXMgbm90IHNlZW0gdG8gaGF2ZSBuYXRpdmUgYXV0b3Njcm9sbCxcbiAgICAgIC8vIEVkZ2UncyBhdXRvc2Nyb2xsIHNlZW1zIHRvbyBjb25kaXRpb25hbCxcbiAgICAgIC8vIE1BQ09TIFNhZmFyaSBkb2VzIG5vdCBoYXZlIGF1dG9zY3JvbGwsXG4gICAgICAvLyBGaXJlZm94IGFuZCBDaHJvbWUgYXJlIGdvb2RcblxuICAgICAgaWYgKGZhbGxiYWNrIHx8IEVkZ2UgfHwgSUUxMU9yTGVzcyB8fCBTYWZhcmkpIHtcbiAgICAgICAgYXV0b1Njcm9sbChldnQsIHRoaXMub3B0aW9ucywgZWxlbSwgZmFsbGJhY2spOyAvLyBMaXN0ZW5lciBmb3IgcG9pbnRlciBlbGVtZW50IGNoYW5nZVxuXG4gICAgICAgIHZhciBvZ0VsZW1TY3JvbGxlciA9IGdldFBhcmVudEF1dG9TY3JvbGxFbGVtZW50KGVsZW0sIHRydWUpO1xuXG4gICAgICAgIGlmIChzY3JvbGxpbmcgJiYgKCFwb2ludGVyRWxlbUNoYW5nZWRJbnRlcnZhbCB8fCB4ICE9PSBsYXN0QXV0b1Njcm9sbFggfHwgeSAhPT0gbGFzdEF1dG9TY3JvbGxZKSkge1xuICAgICAgICAgIHBvaW50ZXJFbGVtQ2hhbmdlZEludGVydmFsICYmIGNsZWFyUG9pbnRlckVsZW1DaGFuZ2VkSW50ZXJ2YWwoKTsgLy8gRGV0ZWN0IGZvciBwb2ludGVyIGVsZW0gY2hhbmdlLCBlbXVsYXRpbmcgbmF0aXZlIERuRCBiZWhhdmlvdXJcblxuICAgICAgICAgIHBvaW50ZXJFbGVtQ2hhbmdlZEludGVydmFsID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIG5ld0VsZW0gPSBnZXRQYXJlbnRBdXRvU2Nyb2xsRWxlbWVudChkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KHgsIHkpLCB0cnVlKTtcblxuICAgICAgICAgICAgaWYgKG5ld0VsZW0gIT09IG9nRWxlbVNjcm9sbGVyKSB7XG4gICAgICAgICAgICAgIG9nRWxlbVNjcm9sbGVyID0gbmV3RWxlbTtcbiAgICAgICAgICAgICAgY2xlYXJBdXRvU2Nyb2xscygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhdXRvU2Nyb2xsKGV2dCwgX3RoaXMub3B0aW9ucywgbmV3RWxlbSwgZmFsbGJhY2spO1xuICAgICAgICAgIH0sIDEwKTtcbiAgICAgICAgICBsYXN0QXV0b1Njcm9sbFggPSB4O1xuICAgICAgICAgIGxhc3RBdXRvU2Nyb2xsWSA9IHk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGlmIERuRCBpcyBlbmFibGVkIChhbmQgYnJvd3NlciBoYXMgZ29vZCBhdXRvc2Nyb2xsaW5nKSwgZmlyc3QgYXV0b3Njcm9sbCB3aWxsIGFscmVhZHkgc2Nyb2xsLCBzbyBnZXQgcGFyZW50IGF1dG9zY3JvbGwgb2YgZmlyc3QgYXV0b3Njcm9sbFxuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5idWJibGVTY3JvbGwgfHwgZ2V0UGFyZW50QXV0b1Njcm9sbEVsZW1lbnQoZWxlbSwgdHJ1ZSkgPT09IGdldFdpbmRvd1Njcm9sbGluZ0VsZW1lbnQoKSkge1xuICAgICAgICAgIGNsZWFyQXV0b1Njcm9sbHMoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBhdXRvU2Nyb2xsKGV2dCwgdGhpcy5vcHRpb25zLCBnZXRQYXJlbnRBdXRvU2Nyb2xsRWxlbWVudChlbGVtLCBmYWxzZSksIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHJldHVybiBfZXh0ZW5kcyhBdXRvU2Nyb2xsLCB7XG4gICAgcGx1Z2luTmFtZTogJ3Njcm9sbCcsXG4gICAgaW5pdGlhbGl6ZUJ5RGVmYXVsdDogdHJ1ZVxuICB9KTtcbn1cblxuZnVuY3Rpb24gY2xlYXJBdXRvU2Nyb2xscygpIHtcbiAgYXV0b1Njcm9sbHMuZm9yRWFjaChmdW5jdGlvbiAoYXV0b1Njcm9sbCkge1xuICAgIGNsZWFySW50ZXJ2YWwoYXV0b1Njcm9sbC5waWQpO1xuICB9KTtcbiAgYXV0b1Njcm9sbHMgPSBbXTtcbn1cblxuZnVuY3Rpb24gY2xlYXJQb2ludGVyRWxlbUNoYW5nZWRJbnRlcnZhbCgpIHtcbiAgY2xlYXJJbnRlcnZhbChwb2ludGVyRWxlbUNoYW5nZWRJbnRlcnZhbCk7XG59XG5cbnZhciBhdXRvU2Nyb2xsID0gdGhyb3R0bGUoZnVuY3Rpb24gKGV2dCwgb3B0aW9ucywgcm9vdEVsLCBpc0ZhbGxiYWNrKSB7XG4gIC8vIEJ1ZzogaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA1NTIxXG4gIGlmICghb3B0aW9ucy5zY3JvbGwpIHJldHVybjtcbiAgdmFyIHggPSAoZXZ0LnRvdWNoZXMgPyBldnQudG91Y2hlc1swXSA6IGV2dCkuY2xpZW50WCxcbiAgICAgIHkgPSAoZXZ0LnRvdWNoZXMgPyBldnQudG91Y2hlc1swXSA6IGV2dCkuY2xpZW50WSxcbiAgICAgIHNlbnMgPSBvcHRpb25zLnNjcm9sbFNlbnNpdGl2aXR5LFxuICAgICAgc3BlZWQgPSBvcHRpb25zLnNjcm9sbFNwZWVkLFxuICAgICAgd2luU2Nyb2xsZXIgPSBnZXRXaW5kb3dTY3JvbGxpbmdFbGVtZW50KCk7XG4gIHZhciBzY3JvbGxUaGlzSW5zdGFuY2UgPSBmYWxzZSxcbiAgICAgIHNjcm9sbEN1c3RvbUZuOyAvLyBOZXcgc2Nyb2xsIHJvb3QsIHNldCBzY3JvbGxFbFxuXG4gIGlmIChzY3JvbGxSb290RWwgIT09IHJvb3RFbCkge1xuICAgIHNjcm9sbFJvb3RFbCA9IHJvb3RFbDtcbiAgICBjbGVhckF1dG9TY3JvbGxzKCk7XG4gICAgc2Nyb2xsRWwgPSBvcHRpb25zLnNjcm9sbDtcbiAgICBzY3JvbGxDdXN0b21GbiA9IG9wdGlvbnMuc2Nyb2xsRm47XG5cbiAgICBpZiAoc2Nyb2xsRWwgPT09IHRydWUpIHtcbiAgICAgIHNjcm9sbEVsID0gZ2V0UGFyZW50QXV0b1Njcm9sbEVsZW1lbnQocm9vdEVsLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICB2YXIgbGF5ZXJzT3V0ID0gMDtcbiAgdmFyIGN1cnJlbnRQYXJlbnQgPSBzY3JvbGxFbDtcblxuICBkbyB7XG4gICAgdmFyIGVsID0gY3VycmVudFBhcmVudCxcbiAgICAgICAgcmVjdCA9IGdldFJlY3QoZWwpLFxuICAgICAgICB0b3AgPSByZWN0LnRvcCxcbiAgICAgICAgYm90dG9tID0gcmVjdC5ib3R0b20sXG4gICAgICAgIGxlZnQgPSByZWN0LmxlZnQsXG4gICAgICAgIHJpZ2h0ID0gcmVjdC5yaWdodCxcbiAgICAgICAgd2lkdGggPSByZWN0LndpZHRoLFxuICAgICAgICBoZWlnaHQgPSByZWN0LmhlaWdodCxcbiAgICAgICAgY2FuU2Nyb2xsWCA9IHZvaWQgMCxcbiAgICAgICAgY2FuU2Nyb2xsWSA9IHZvaWQgMCxcbiAgICAgICAgc2Nyb2xsV2lkdGggPSBlbC5zY3JvbGxXaWR0aCxcbiAgICAgICAgc2Nyb2xsSGVpZ2h0ID0gZWwuc2Nyb2xsSGVpZ2h0LFxuICAgICAgICBlbENTUyA9IGNzcyhlbCksXG4gICAgICAgIHNjcm9sbFBvc1ggPSBlbC5zY3JvbGxMZWZ0LFxuICAgICAgICBzY3JvbGxQb3NZID0gZWwuc2Nyb2xsVG9wO1xuXG4gICAgaWYgKGVsID09PSB3aW5TY3JvbGxlcikge1xuICAgICAgY2FuU2Nyb2xsWCA9IHdpZHRoIDwgc2Nyb2xsV2lkdGggJiYgKGVsQ1NTLm92ZXJmbG93WCA9PT0gJ2F1dG8nIHx8IGVsQ1NTLm92ZXJmbG93WCA9PT0gJ3Njcm9sbCcgfHwgZWxDU1Mub3ZlcmZsb3dYID09PSAndmlzaWJsZScpO1xuICAgICAgY2FuU2Nyb2xsWSA9IGhlaWdodCA8IHNjcm9sbEhlaWdodCAmJiAoZWxDU1Mub3ZlcmZsb3dZID09PSAnYXV0bycgfHwgZWxDU1Mub3ZlcmZsb3dZID09PSAnc2Nyb2xsJyB8fCBlbENTUy5vdmVyZmxvd1kgPT09ICd2aXNpYmxlJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhblNjcm9sbFggPSB3aWR0aCA8IHNjcm9sbFdpZHRoICYmIChlbENTUy5vdmVyZmxvd1ggPT09ICdhdXRvJyB8fCBlbENTUy5vdmVyZmxvd1ggPT09ICdzY3JvbGwnKTtcbiAgICAgIGNhblNjcm9sbFkgPSBoZWlnaHQgPCBzY3JvbGxIZWlnaHQgJiYgKGVsQ1NTLm92ZXJmbG93WSA9PT0gJ2F1dG8nIHx8IGVsQ1NTLm92ZXJmbG93WSA9PT0gJ3Njcm9sbCcpO1xuICAgIH1cblxuICAgIHZhciB2eCA9IGNhblNjcm9sbFggJiYgKE1hdGguYWJzKHJpZ2h0IC0geCkgPD0gc2VucyAmJiBzY3JvbGxQb3NYICsgd2lkdGggPCBzY3JvbGxXaWR0aCkgLSAoTWF0aC5hYnMobGVmdCAtIHgpIDw9IHNlbnMgJiYgISFzY3JvbGxQb3NYKTtcbiAgICB2YXIgdnkgPSBjYW5TY3JvbGxZICYmIChNYXRoLmFicyhib3R0b20gLSB5KSA8PSBzZW5zICYmIHNjcm9sbFBvc1kgKyBoZWlnaHQgPCBzY3JvbGxIZWlnaHQpIC0gKE1hdGguYWJzKHRvcCAtIHkpIDw9IHNlbnMgJiYgISFzY3JvbGxQb3NZKTtcblxuICAgIGlmICghYXV0b1Njcm9sbHNbbGF5ZXJzT3V0XSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gbGF5ZXJzT3V0OyBpKyspIHtcbiAgICAgICAgaWYgKCFhdXRvU2Nyb2xsc1tpXSkge1xuICAgICAgICAgIGF1dG9TY3JvbGxzW2ldID0ge307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYXV0b1Njcm9sbHNbbGF5ZXJzT3V0XS52eCAhPSB2eCB8fCBhdXRvU2Nyb2xsc1tsYXllcnNPdXRdLnZ5ICE9IHZ5IHx8IGF1dG9TY3JvbGxzW2xheWVyc091dF0uZWwgIT09IGVsKSB7XG4gICAgICBhdXRvU2Nyb2xsc1tsYXllcnNPdXRdLmVsID0gZWw7XG4gICAgICBhdXRvU2Nyb2xsc1tsYXllcnNPdXRdLnZ4ID0gdng7XG4gICAgICBhdXRvU2Nyb2xsc1tsYXllcnNPdXRdLnZ5ID0gdnk7XG4gICAgICBjbGVhckludGVydmFsKGF1dG9TY3JvbGxzW2xheWVyc091dF0ucGlkKTtcblxuICAgICAgaWYgKHZ4ICE9IDAgfHwgdnkgIT0gMCkge1xuICAgICAgICBzY3JvbGxUaGlzSW5zdGFuY2UgPSB0cnVlO1xuICAgICAgICAvKiBqc2hpbnQgbG9vcGZ1bmM6dHJ1ZSAqL1xuXG4gICAgICAgIGF1dG9TY3JvbGxzW2xheWVyc091dF0ucGlkID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIGVtdWxhdGUgZHJhZyBvdmVyIGR1cmluZyBhdXRvc2Nyb2xsIChmYWxsYmFjayksIGVtdWxhdGluZyBuYXRpdmUgRG5EIGJlaGF2aW91clxuICAgICAgICAgIGlmIChpc0ZhbGxiYWNrICYmIHRoaXMubGF5ZXIgPT09IDApIHtcbiAgICAgICAgICAgIFNvcnRhYmxlLmFjdGl2ZS5fb25Ub3VjaE1vdmUodG91Y2hFdnQkMSk7IC8vIFRvIG1vdmUgZ2hvc3QgaWYgaXQgaXMgcG9zaXRpb25lZCBhYnNvbHV0ZWx5XG5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgc2Nyb2xsT2Zmc2V0WSA9IGF1dG9TY3JvbGxzW3RoaXMubGF5ZXJdLnZ5ID8gYXV0b1Njcm9sbHNbdGhpcy5sYXllcl0udnkgKiBzcGVlZCA6IDA7XG4gICAgICAgICAgdmFyIHNjcm9sbE9mZnNldFggPSBhdXRvU2Nyb2xsc1t0aGlzLmxheWVyXS52eCA/IGF1dG9TY3JvbGxzW3RoaXMubGF5ZXJdLnZ4ICogc3BlZWQgOiAwO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBzY3JvbGxDdXN0b21GbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgaWYgKHNjcm9sbEN1c3RvbUZuLmNhbGwoU29ydGFibGUuZHJhZ2dlZC5wYXJlbnROb2RlW2V4cGFuZG9dLCBzY3JvbGxPZmZzZXRYLCBzY3JvbGxPZmZzZXRZLCBldnQsIHRvdWNoRXZ0JDEsIGF1dG9TY3JvbGxzW3RoaXMubGF5ZXJdLmVsKSAhPT0gJ2NvbnRpbnVlJykge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2Nyb2xsQnkoYXV0b1Njcm9sbHNbdGhpcy5sYXllcl0uZWwsIHNjcm9sbE9mZnNldFgsIHNjcm9sbE9mZnNldFkpO1xuICAgICAgICB9LmJpbmQoe1xuICAgICAgICAgIGxheWVyOiBsYXllcnNPdXRcbiAgICAgICAgfSksIDI0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsYXllcnNPdXQrKztcbiAgfSB3aGlsZSAob3B0aW9ucy5idWJibGVTY3JvbGwgJiYgY3VycmVudFBhcmVudCAhPT0gd2luU2Nyb2xsZXIgJiYgKGN1cnJlbnRQYXJlbnQgPSBnZXRQYXJlbnRBdXRvU2Nyb2xsRWxlbWVudChjdXJyZW50UGFyZW50LCBmYWxzZSkpKTtcblxuICBzY3JvbGxpbmcgPSBzY3JvbGxUaGlzSW5zdGFuY2U7IC8vIGluIGNhc2UgYW5vdGhlciBmdW5jdGlvbiBjYXRjaGVzIHNjcm9sbGluZyBhcyBmYWxzZSBpbiBiZXR3ZWVuIHdoZW4gaXQgaXMgbm90XG59LCAzMCk7XG5cbnZhciBkcm9wID0gZnVuY3Rpb24gZHJvcChfcmVmKSB7XG4gIHZhciBvcmlnaW5hbEV2ZW50ID0gX3JlZi5vcmlnaW5hbEV2ZW50LFxuICAgICAgcHV0U29ydGFibGUgPSBfcmVmLnB1dFNvcnRhYmxlLFxuICAgICAgZHJhZ0VsID0gX3JlZi5kcmFnRWwsXG4gICAgICBhY3RpdmVTb3J0YWJsZSA9IF9yZWYuYWN0aXZlU29ydGFibGUsXG4gICAgICBkaXNwYXRjaFNvcnRhYmxlRXZlbnQgPSBfcmVmLmRpc3BhdGNoU29ydGFibGVFdmVudCxcbiAgICAgIGhpZGVHaG9zdEZvclRhcmdldCA9IF9yZWYuaGlkZUdob3N0Rm9yVGFyZ2V0LFxuICAgICAgdW5oaWRlR2hvc3RGb3JUYXJnZXQgPSBfcmVmLnVuaGlkZUdob3N0Rm9yVGFyZ2V0O1xuICBpZiAoIW9yaWdpbmFsRXZlbnQpIHJldHVybjtcbiAgdmFyIHRvU29ydGFibGUgPSBwdXRTb3J0YWJsZSB8fCBhY3RpdmVTb3J0YWJsZTtcbiAgaGlkZUdob3N0Rm9yVGFyZ2V0KCk7XG4gIHZhciB0b3VjaCA9IG9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXMgJiYgb3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlcy5sZW5ndGggPyBvcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdIDogb3JpZ2luYWxFdmVudDtcbiAgdmFyIHRhcmdldCA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQodG91Y2guY2xpZW50WCwgdG91Y2guY2xpZW50WSk7XG4gIHVuaGlkZUdob3N0Rm9yVGFyZ2V0KCk7XG5cbiAgaWYgKHRvU29ydGFibGUgJiYgIXRvU29ydGFibGUuZWwuY29udGFpbnModGFyZ2V0KSkge1xuICAgIGRpc3BhdGNoU29ydGFibGVFdmVudCgnc3BpbGwnKTtcbiAgICB0aGlzLm9uU3BpbGwoe1xuICAgICAgZHJhZ0VsOiBkcmFnRWwsXG4gICAgICBwdXRTb3J0YWJsZTogcHV0U29ydGFibGVcbiAgICB9KTtcbiAgfVxufTtcblxuZnVuY3Rpb24gUmV2ZXJ0KCkge31cblxuUmV2ZXJ0LnByb3RvdHlwZSA9IHtcbiAgc3RhcnRJbmRleDogbnVsbCxcbiAgZHJhZ1N0YXJ0OiBmdW5jdGlvbiBkcmFnU3RhcnQoX3JlZjIpIHtcbiAgICB2YXIgb2xkRHJhZ2dhYmxlSW5kZXggPSBfcmVmMi5vbGREcmFnZ2FibGVJbmRleDtcbiAgICB0aGlzLnN0YXJ0SW5kZXggPSBvbGREcmFnZ2FibGVJbmRleDtcbiAgfSxcbiAgb25TcGlsbDogZnVuY3Rpb24gb25TcGlsbChfcmVmMykge1xuICAgIHZhciBkcmFnRWwgPSBfcmVmMy5kcmFnRWwsXG4gICAgICAgIHB1dFNvcnRhYmxlID0gX3JlZjMucHV0U29ydGFibGU7XG4gICAgdGhpcy5zb3J0YWJsZS5jYXB0dXJlQW5pbWF0aW9uU3RhdGUoKTtcblxuICAgIGlmIChwdXRTb3J0YWJsZSkge1xuICAgICAgcHV0U29ydGFibGUuY2FwdHVyZUFuaW1hdGlvblN0YXRlKCk7XG4gICAgfVxuXG4gICAgdmFyIG5leHRTaWJsaW5nID0gZ2V0Q2hpbGQodGhpcy5zb3J0YWJsZS5lbCwgdGhpcy5zdGFydEluZGV4LCB0aGlzLm9wdGlvbnMpO1xuXG4gICAgaWYgKG5leHRTaWJsaW5nKSB7XG4gICAgICB0aGlzLnNvcnRhYmxlLmVsLmluc2VydEJlZm9yZShkcmFnRWwsIG5leHRTaWJsaW5nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zb3J0YWJsZS5lbC5hcHBlbmRDaGlsZChkcmFnRWwpO1xuICAgIH1cblxuICAgIHRoaXMuc29ydGFibGUuYW5pbWF0ZUFsbCgpO1xuXG4gICAgaWYgKHB1dFNvcnRhYmxlKSB7XG4gICAgICBwdXRTb3J0YWJsZS5hbmltYXRlQWxsKCk7XG4gICAgfVxuICB9LFxuICBkcm9wOiBkcm9wXG59O1xuXG5fZXh0ZW5kcyhSZXZlcnQsIHtcbiAgcGx1Z2luTmFtZTogJ3JldmVydE9uU3BpbGwnXG59KTtcblxuZnVuY3Rpb24gUmVtb3ZlKCkge31cblxuUmVtb3ZlLnByb3RvdHlwZSA9IHtcbiAgb25TcGlsbDogZnVuY3Rpb24gb25TcGlsbChfcmVmNCkge1xuICAgIHZhciBkcmFnRWwgPSBfcmVmNC5kcmFnRWwsXG4gICAgICAgIHB1dFNvcnRhYmxlID0gX3JlZjQucHV0U29ydGFibGU7XG4gICAgdmFyIHBhcmVudFNvcnRhYmxlID0gcHV0U29ydGFibGUgfHwgdGhpcy5zb3J0YWJsZTtcbiAgICBwYXJlbnRTb3J0YWJsZS5jYXB0dXJlQW5pbWF0aW9uU3RhdGUoKTtcbiAgICBkcmFnRWwucGFyZW50Tm9kZSAmJiBkcmFnRWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkcmFnRWwpO1xuICAgIHBhcmVudFNvcnRhYmxlLmFuaW1hdGVBbGwoKTtcbiAgfSxcbiAgZHJvcDogZHJvcFxufTtcblxuX2V4dGVuZHMoUmVtb3ZlLCB7XG4gIHBsdWdpbk5hbWU6ICdyZW1vdmVPblNwaWxsJ1xufSk7XG5cbnZhciBsYXN0U3dhcEVsO1xuXG5mdW5jdGlvbiBTd2FwUGx1Z2luKCkge1xuICBmdW5jdGlvbiBTd2FwKCkge1xuICAgIHRoaXMuZGVmYXVsdHMgPSB7XG4gICAgICBzd2FwQ2xhc3M6ICdzb3J0YWJsZS1zd2FwLWhpZ2hsaWdodCdcbiAgICB9O1xuICB9XG5cbiAgU3dhcC5wcm90b3R5cGUgPSB7XG4gICAgZHJhZ1N0YXJ0OiBmdW5jdGlvbiBkcmFnU3RhcnQoX3JlZikge1xuICAgICAgdmFyIGRyYWdFbCA9IF9yZWYuZHJhZ0VsO1xuICAgICAgbGFzdFN3YXBFbCA9IGRyYWdFbDtcbiAgICB9LFxuICAgIGRyYWdPdmVyVmFsaWQ6IGZ1bmN0aW9uIGRyYWdPdmVyVmFsaWQoX3JlZjIpIHtcbiAgICAgIHZhciBjb21wbGV0ZWQgPSBfcmVmMi5jb21wbGV0ZWQsXG4gICAgICAgICAgdGFyZ2V0ID0gX3JlZjIudGFyZ2V0LFxuICAgICAgICAgIG9uTW92ZSA9IF9yZWYyLm9uTW92ZSxcbiAgICAgICAgICBhY3RpdmVTb3J0YWJsZSA9IF9yZWYyLmFjdGl2ZVNvcnRhYmxlLFxuICAgICAgICAgIGNoYW5nZWQgPSBfcmVmMi5jaGFuZ2VkLFxuICAgICAgICAgIGNhbmNlbCA9IF9yZWYyLmNhbmNlbDtcbiAgICAgIGlmICghYWN0aXZlU29ydGFibGUub3B0aW9ucy5zd2FwKSByZXR1cm47XG4gICAgICB2YXIgZWwgPSB0aGlzLnNvcnRhYmxlLmVsLFxuICAgICAgICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cbiAgICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0ICE9PSBlbCkge1xuICAgICAgICB2YXIgcHJldlN3YXBFbCA9IGxhc3RTd2FwRWw7XG5cbiAgICAgICAgaWYgKG9uTW92ZSh0YXJnZXQpICE9PSBmYWxzZSkge1xuICAgICAgICAgIHRvZ2dsZUNsYXNzKHRhcmdldCwgb3B0aW9ucy5zd2FwQ2xhc3MsIHRydWUpO1xuICAgICAgICAgIGxhc3RTd2FwRWwgPSB0YXJnZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGFzdFN3YXBFbCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJldlN3YXBFbCAmJiBwcmV2U3dhcEVsICE9PSBsYXN0U3dhcEVsKSB7XG4gICAgICAgICAgdG9nZ2xlQ2xhc3MocHJldlN3YXBFbCwgb3B0aW9ucy5zd2FwQ2xhc3MsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjaGFuZ2VkKCk7XG4gICAgICBjb21wbGV0ZWQodHJ1ZSk7XG4gICAgICBjYW5jZWwoKTtcbiAgICB9LFxuICAgIGRyb3A6IGZ1bmN0aW9uIGRyb3AoX3JlZjMpIHtcbiAgICAgIHZhciBhY3RpdmVTb3J0YWJsZSA9IF9yZWYzLmFjdGl2ZVNvcnRhYmxlLFxuICAgICAgICAgIHB1dFNvcnRhYmxlID0gX3JlZjMucHV0U29ydGFibGUsXG4gICAgICAgICAgZHJhZ0VsID0gX3JlZjMuZHJhZ0VsO1xuICAgICAgdmFyIHRvU29ydGFibGUgPSBwdXRTb3J0YWJsZSB8fCB0aGlzLnNvcnRhYmxlO1xuICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICBsYXN0U3dhcEVsICYmIHRvZ2dsZUNsYXNzKGxhc3RTd2FwRWwsIG9wdGlvbnMuc3dhcENsYXNzLCBmYWxzZSk7XG5cbiAgICAgIGlmIChsYXN0U3dhcEVsICYmIChvcHRpb25zLnN3YXAgfHwgcHV0U29ydGFibGUgJiYgcHV0U29ydGFibGUub3B0aW9ucy5zd2FwKSkge1xuICAgICAgICBpZiAoZHJhZ0VsICE9PSBsYXN0U3dhcEVsKSB7XG4gICAgICAgICAgdG9Tb3J0YWJsZS5jYXB0dXJlQW5pbWF0aW9uU3RhdGUoKTtcbiAgICAgICAgICBpZiAodG9Tb3J0YWJsZSAhPT0gYWN0aXZlU29ydGFibGUpIGFjdGl2ZVNvcnRhYmxlLmNhcHR1cmVBbmltYXRpb25TdGF0ZSgpO1xuICAgICAgICAgIHN3YXBOb2RlcyhkcmFnRWwsIGxhc3RTd2FwRWwpO1xuICAgICAgICAgIHRvU29ydGFibGUuYW5pbWF0ZUFsbCgpO1xuICAgICAgICAgIGlmICh0b1NvcnRhYmxlICE9PSBhY3RpdmVTb3J0YWJsZSkgYWN0aXZlU29ydGFibGUuYW5pbWF0ZUFsbCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBudWxsaW5nOiBmdW5jdGlvbiBudWxsaW5nKCkge1xuICAgICAgbGFzdFN3YXBFbCA9IG51bGw7XG4gICAgfVxuICB9O1xuICByZXR1cm4gX2V4dGVuZHMoU3dhcCwge1xuICAgIHBsdWdpbk5hbWU6ICdzd2FwJyxcbiAgICBldmVudFByb3BlcnRpZXM6IGZ1bmN0aW9uIGV2ZW50UHJvcGVydGllcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN3YXBJdGVtOiBsYXN0U3dhcEVsXG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHN3YXBOb2RlcyhuMSwgbjIpIHtcbiAgdmFyIHAxID0gbjEucGFyZW50Tm9kZSxcbiAgICAgIHAyID0gbjIucGFyZW50Tm9kZSxcbiAgICAgIGkxLFxuICAgICAgaTI7XG4gIGlmICghcDEgfHwgIXAyIHx8IHAxLmlzRXF1YWxOb2RlKG4yKSB8fCBwMi5pc0VxdWFsTm9kZShuMSkpIHJldHVybjtcbiAgaTEgPSBpbmRleChuMSk7XG4gIGkyID0gaW5kZXgobjIpO1xuXG4gIGlmIChwMS5pc0VxdWFsTm9kZShwMikgJiYgaTEgPCBpMikge1xuICAgIGkyKys7XG4gIH1cblxuICBwMS5pbnNlcnRCZWZvcmUobjIsIHAxLmNoaWxkcmVuW2kxXSk7XG4gIHAyLmluc2VydEJlZm9yZShuMSwgcDIuY2hpbGRyZW5baTJdKTtcbn1cblxudmFyIG11bHRpRHJhZ0VsZW1lbnRzID0gW10sXG4gICAgbXVsdGlEcmFnQ2xvbmVzID0gW10sXG4gICAgbGFzdE11bHRpRHJhZ1NlbGVjdCxcbiAgICAvLyBmb3Igc2VsZWN0aW9uIHdpdGggbW9kaWZpZXIga2V5IGRvd24gKFNISUZUKVxubXVsdGlEcmFnU29ydGFibGUsXG4gICAgaW5pdGlhbEZvbGRpbmcgPSBmYWxzZSxcbiAgICAvLyBJbml0aWFsIG11bHRpLWRyYWcgZm9sZCB3aGVuIGRyYWcgc3RhcnRlZFxuZm9sZGluZyA9IGZhbHNlLFxuICAgIC8vIEZvbGRpbmcgYW55IG90aGVyIHRpbWVcbmRyYWdTdGFydGVkID0gZmFsc2UsXG4gICAgZHJhZ0VsJDEsXG4gICAgY2xvbmVzRnJvbVJlY3QsXG4gICAgY2xvbmVzSGlkZGVuO1xuXG5mdW5jdGlvbiBNdWx0aURyYWdQbHVnaW4oKSB7XG4gIGZ1bmN0aW9uIE11bHRpRHJhZyhzb3J0YWJsZSkge1xuICAgIC8vIEJpbmQgYWxsIHByaXZhdGUgbWV0aG9kc1xuICAgIGZvciAodmFyIGZuIGluIHRoaXMpIHtcbiAgICAgIGlmIChmbi5jaGFyQXQoMCkgPT09ICdfJyAmJiB0eXBlb2YgdGhpc1tmbl0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpc1tmbl0gPSB0aGlzW2ZuXS5iaW5kKHRoaXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzb3J0YWJsZS5vcHRpb25zLnN1cHBvcnRQb2ludGVyKSB7XG4gICAgICBvbihkb2N1bWVudCwgJ3BvaW50ZXJ1cCcsIHRoaXMuX2Rlc2VsZWN0TXVsdGlEcmFnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb24oZG9jdW1lbnQsICdtb3VzZXVwJywgdGhpcy5fZGVzZWxlY3RNdWx0aURyYWcpO1xuICAgICAgb24oZG9jdW1lbnQsICd0b3VjaGVuZCcsIHRoaXMuX2Rlc2VsZWN0TXVsdGlEcmFnKTtcbiAgICB9XG5cbiAgICBvbihkb2N1bWVudCwgJ2tleWRvd24nLCB0aGlzLl9jaGVja0tleURvd24pO1xuICAgIG9uKGRvY3VtZW50LCAna2V5dXAnLCB0aGlzLl9jaGVja0tleVVwKTtcbiAgICB0aGlzLmRlZmF1bHRzID0ge1xuICAgICAgc2VsZWN0ZWRDbGFzczogJ3NvcnRhYmxlLXNlbGVjdGVkJyxcbiAgICAgIG11bHRpRHJhZ0tleTogbnVsbCxcbiAgICAgIHNldERhdGE6IGZ1bmN0aW9uIHNldERhdGEoZGF0YVRyYW5zZmVyLCBkcmFnRWwpIHtcbiAgICAgICAgdmFyIGRhdGEgPSAnJztcblxuICAgICAgICBpZiAobXVsdGlEcmFnRWxlbWVudHMubGVuZ3RoICYmIG11bHRpRHJhZ1NvcnRhYmxlID09PSBzb3J0YWJsZSkge1xuICAgICAgICAgIG11bHRpRHJhZ0VsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24gKG11bHRpRHJhZ0VsZW1lbnQsIGkpIHtcbiAgICAgICAgICAgIGRhdGEgKz0gKCFpID8gJycgOiAnLCAnKSArIG11bHRpRHJhZ0VsZW1lbnQudGV4dENvbnRlbnQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGF0YSA9IGRyYWdFbC50ZXh0Q29udGVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGFUcmFuc2Zlci5zZXREYXRhKCdUZXh0JywgZGF0YSk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIE11bHRpRHJhZy5wcm90b3R5cGUgPSB7XG4gICAgbXVsdGlEcmFnS2V5RG93bjogZmFsc2UsXG4gICAgaXNNdWx0aURyYWc6IGZhbHNlLFxuICAgIGRlbGF5U3RhcnRHbG9iYWw6IGZ1bmN0aW9uIGRlbGF5U3RhcnRHbG9iYWwoX3JlZikge1xuICAgICAgdmFyIGRyYWdnZWQgPSBfcmVmLmRyYWdFbDtcbiAgICAgIGRyYWdFbCQxID0gZHJhZ2dlZDtcbiAgICB9LFxuICAgIGRlbGF5RW5kZWQ6IGZ1bmN0aW9uIGRlbGF5RW5kZWQoKSB7XG4gICAgICB0aGlzLmlzTXVsdGlEcmFnID0gfm11bHRpRHJhZ0VsZW1lbnRzLmluZGV4T2YoZHJhZ0VsJDEpO1xuICAgIH0sXG4gICAgc2V0dXBDbG9uZTogZnVuY3Rpb24gc2V0dXBDbG9uZShfcmVmMikge1xuICAgICAgdmFyIHNvcnRhYmxlID0gX3JlZjIuc29ydGFibGUsXG4gICAgICAgICAgY2FuY2VsID0gX3JlZjIuY2FuY2VsO1xuICAgICAgaWYgKCF0aGlzLmlzTXVsdGlEcmFnKSByZXR1cm47XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXVsdGlEcmFnRWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbXVsdGlEcmFnQ2xvbmVzLnB1c2goY2xvbmUobXVsdGlEcmFnRWxlbWVudHNbaV0pKTtcbiAgICAgICAgbXVsdGlEcmFnQ2xvbmVzW2ldLnNvcnRhYmxlSW5kZXggPSBtdWx0aURyYWdFbGVtZW50c1tpXS5zb3J0YWJsZUluZGV4O1xuICAgICAgICBtdWx0aURyYWdDbG9uZXNbaV0uZHJhZ2dhYmxlID0gZmFsc2U7XG4gICAgICAgIG11bHRpRHJhZ0Nsb25lc1tpXS5zdHlsZVsnd2lsbC1jaGFuZ2UnXSA9ICcnO1xuICAgICAgICB0b2dnbGVDbGFzcyhtdWx0aURyYWdDbG9uZXNbaV0sIHRoaXMub3B0aW9ucy5zZWxlY3RlZENsYXNzLCBmYWxzZSk7XG4gICAgICAgIG11bHRpRHJhZ0VsZW1lbnRzW2ldID09PSBkcmFnRWwkMSAmJiB0b2dnbGVDbGFzcyhtdWx0aURyYWdDbG9uZXNbaV0sIHRoaXMub3B0aW9ucy5jaG9zZW5DbGFzcywgZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICBzb3J0YWJsZS5faGlkZUNsb25lKCk7XG5cbiAgICAgIGNhbmNlbCgpO1xuICAgIH0sXG4gICAgY2xvbmU6IGZ1bmN0aW9uIGNsb25lKF9yZWYzKSB7XG4gICAgICB2YXIgc29ydGFibGUgPSBfcmVmMy5zb3J0YWJsZSxcbiAgICAgICAgICByb290RWwgPSBfcmVmMy5yb290RWwsXG4gICAgICAgICAgZGlzcGF0Y2hTb3J0YWJsZUV2ZW50ID0gX3JlZjMuZGlzcGF0Y2hTb3J0YWJsZUV2ZW50LFxuICAgICAgICAgIGNhbmNlbCA9IF9yZWYzLmNhbmNlbDtcbiAgICAgIGlmICghdGhpcy5pc011bHRpRHJhZykgcmV0dXJuO1xuXG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5yZW1vdmVDbG9uZU9uSGlkZSkge1xuICAgICAgICBpZiAobXVsdGlEcmFnRWxlbWVudHMubGVuZ3RoICYmIG11bHRpRHJhZ1NvcnRhYmxlID09PSBzb3J0YWJsZSkge1xuICAgICAgICAgIGluc2VydE11bHRpRHJhZ0Nsb25lcyh0cnVlLCByb290RWwpO1xuICAgICAgICAgIGRpc3BhdGNoU29ydGFibGVFdmVudCgnY2xvbmUnKTtcbiAgICAgICAgICBjYW5jZWwoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgc2hvd0Nsb25lOiBmdW5jdGlvbiBzaG93Q2xvbmUoX3JlZjQpIHtcbiAgICAgIHZhciBjbG9uZU5vd1Nob3duID0gX3JlZjQuY2xvbmVOb3dTaG93bixcbiAgICAgICAgICByb290RWwgPSBfcmVmNC5yb290RWwsXG4gICAgICAgICAgY2FuY2VsID0gX3JlZjQuY2FuY2VsO1xuICAgICAgaWYgKCF0aGlzLmlzTXVsdGlEcmFnKSByZXR1cm47XG4gICAgICBpbnNlcnRNdWx0aURyYWdDbG9uZXMoZmFsc2UsIHJvb3RFbCk7XG4gICAgICBtdWx0aURyYWdDbG9uZXMuZm9yRWFjaChmdW5jdGlvbiAoY2xvbmUpIHtcbiAgICAgICAgY3NzKGNsb25lLCAnZGlzcGxheScsICcnKTtcbiAgICAgIH0pO1xuICAgICAgY2xvbmVOb3dTaG93bigpO1xuICAgICAgY2xvbmVzSGlkZGVuID0gZmFsc2U7XG4gICAgICBjYW5jZWwoKTtcbiAgICB9LFxuICAgIGhpZGVDbG9uZTogZnVuY3Rpb24gaGlkZUNsb25lKF9yZWY1KSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICB2YXIgc29ydGFibGUgPSBfcmVmNS5zb3J0YWJsZSxcbiAgICAgICAgICBjbG9uZU5vd0hpZGRlbiA9IF9yZWY1LmNsb25lTm93SGlkZGVuLFxuICAgICAgICAgIGNhbmNlbCA9IF9yZWY1LmNhbmNlbDtcbiAgICAgIGlmICghdGhpcy5pc011bHRpRHJhZykgcmV0dXJuO1xuICAgICAgbXVsdGlEcmFnQ2xvbmVzLmZvckVhY2goZnVuY3Rpb24gKGNsb25lKSB7XG4gICAgICAgIGNzcyhjbG9uZSwgJ2Rpc3BsYXknLCAnbm9uZScpO1xuXG4gICAgICAgIGlmIChfdGhpcy5vcHRpb25zLnJlbW92ZUNsb25lT25IaWRlICYmIGNsb25lLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICBjbG9uZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNsb25lKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjbG9uZU5vd0hpZGRlbigpO1xuICAgICAgY2xvbmVzSGlkZGVuID0gdHJ1ZTtcbiAgICAgIGNhbmNlbCgpO1xuICAgIH0sXG4gICAgZHJhZ1N0YXJ0R2xvYmFsOiBmdW5jdGlvbiBkcmFnU3RhcnRHbG9iYWwoX3JlZjYpIHtcbiAgICAgIHZhciBzb3J0YWJsZSA9IF9yZWY2LnNvcnRhYmxlO1xuXG4gICAgICBpZiAoIXRoaXMuaXNNdWx0aURyYWcgJiYgbXVsdGlEcmFnU29ydGFibGUpIHtcbiAgICAgICAgbXVsdGlEcmFnU29ydGFibGUubXVsdGlEcmFnLl9kZXNlbGVjdE11bHRpRHJhZygpO1xuICAgICAgfVxuXG4gICAgICBtdWx0aURyYWdFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChtdWx0aURyYWdFbGVtZW50KSB7XG4gICAgICAgIG11bHRpRHJhZ0VsZW1lbnQuc29ydGFibGVJbmRleCA9IGluZGV4KG11bHRpRHJhZ0VsZW1lbnQpO1xuICAgICAgfSk7IC8vIFNvcnQgbXVsdGktZHJhZyBlbGVtZW50c1xuXG4gICAgICBtdWx0aURyYWdFbGVtZW50cyA9IG11bHRpRHJhZ0VsZW1lbnRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIGEuc29ydGFibGVJbmRleCAtIGIuc29ydGFibGVJbmRleDtcbiAgICAgIH0pO1xuICAgICAgZHJhZ1N0YXJ0ZWQgPSB0cnVlO1xuICAgIH0sXG4gICAgZHJhZ1N0YXJ0ZWQ6IGZ1bmN0aW9uIGRyYWdTdGFydGVkKF9yZWY3KSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIHNvcnRhYmxlID0gX3JlZjcuc29ydGFibGU7XG4gICAgICBpZiAoIXRoaXMuaXNNdWx0aURyYWcpIHJldHVybjtcblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5zb3J0KSB7XG4gICAgICAgIC8vIENhcHR1cmUgcmVjdHMsXG4gICAgICAgIC8vIGhpZGUgbXVsdGkgZHJhZyBlbGVtZW50cyAoYnkgcG9zaXRpb25pbmcgdGhlbSBhYnNvbHV0ZSksXG4gICAgICAgIC8vIHNldCBtdWx0aSBkcmFnIGVsZW1lbnRzIHJlY3RzIHRvIGRyYWdSZWN0LFxuICAgICAgICAvLyBzaG93IG11bHRpIGRyYWcgZWxlbWVudHMsXG4gICAgICAgIC8vIGFuaW1hdGUgdG8gcmVjdHMsXG4gICAgICAgIC8vIHVuc2V0IHJlY3RzICYgcmVtb3ZlIGZyb20gRE9NXG4gICAgICAgIHNvcnRhYmxlLmNhcHR1cmVBbmltYXRpb25TdGF0ZSgpO1xuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYW5pbWF0aW9uKSB7XG4gICAgICAgICAgbXVsdGlEcmFnRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbiAobXVsdGlEcmFnRWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKG11bHRpRHJhZ0VsZW1lbnQgPT09IGRyYWdFbCQxKSByZXR1cm47XG4gICAgICAgICAgICBjc3MobXVsdGlEcmFnRWxlbWVudCwgJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdmFyIGRyYWdSZWN0ID0gZ2V0UmVjdChkcmFnRWwkMSwgZmFsc2UsIHRydWUsIHRydWUpO1xuICAgICAgICAgIG11bHRpRHJhZ0VsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24gKG11bHRpRHJhZ0VsZW1lbnQpIHtcbiAgICAgICAgICAgIGlmIChtdWx0aURyYWdFbGVtZW50ID09PSBkcmFnRWwkMSkgcmV0dXJuO1xuICAgICAgICAgICAgc2V0UmVjdChtdWx0aURyYWdFbGVtZW50LCBkcmFnUmVjdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZm9sZGluZyA9IHRydWU7XG4gICAgICAgICAgaW5pdGlhbEZvbGRpbmcgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHNvcnRhYmxlLmFuaW1hdGVBbGwoZnVuY3Rpb24gKCkge1xuICAgICAgICBmb2xkaW5nID0gZmFsc2U7XG4gICAgICAgIGluaXRpYWxGb2xkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKF90aGlzMi5vcHRpb25zLmFuaW1hdGlvbikge1xuICAgICAgICAgIG11bHRpRHJhZ0VsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24gKG11bHRpRHJhZ0VsZW1lbnQpIHtcbiAgICAgICAgICAgIHVuc2V0UmVjdChtdWx0aURyYWdFbGVtZW50KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSAvLyBSZW1vdmUgYWxsIGF1eGlsaWFyeSBtdWx0aWRyYWcgaXRlbXMgZnJvbSBlbCwgaWYgc29ydGluZyBlbmFibGVkXG5cblxuICAgICAgICBpZiAoX3RoaXMyLm9wdGlvbnMuc29ydCkge1xuICAgICAgICAgIHJlbW92ZU11bHRpRHJhZ0VsZW1lbnRzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZHJhZ092ZXI6IGZ1bmN0aW9uIGRyYWdPdmVyKF9yZWY4KSB7XG4gICAgICB2YXIgdGFyZ2V0ID0gX3JlZjgudGFyZ2V0LFxuICAgICAgICAgIGNvbXBsZXRlZCA9IF9yZWY4LmNvbXBsZXRlZCxcbiAgICAgICAgICBjYW5jZWwgPSBfcmVmOC5jYW5jZWw7XG5cbiAgICAgIGlmIChmb2xkaW5nICYmIH5tdWx0aURyYWdFbGVtZW50cy5pbmRleE9mKHRhcmdldCkpIHtcbiAgICAgICAgY29tcGxldGVkKGZhbHNlKTtcbiAgICAgICAgY2FuY2VsKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICByZXZlcnQ6IGZ1bmN0aW9uIHJldmVydChfcmVmOSkge1xuICAgICAgdmFyIGZyb21Tb3J0YWJsZSA9IF9yZWY5LmZyb21Tb3J0YWJsZSxcbiAgICAgICAgICByb290RWwgPSBfcmVmOS5yb290RWwsXG4gICAgICAgICAgc29ydGFibGUgPSBfcmVmOS5zb3J0YWJsZSxcbiAgICAgICAgICBkcmFnUmVjdCA9IF9yZWY5LmRyYWdSZWN0O1xuXG4gICAgICBpZiAobXVsdGlEcmFnRWxlbWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAvLyBTZXR1cCB1bmZvbGQgYW5pbWF0aW9uXG4gICAgICAgIG11bHRpRHJhZ0VsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24gKG11bHRpRHJhZ0VsZW1lbnQpIHtcbiAgICAgICAgICBzb3J0YWJsZS5hZGRBbmltYXRpb25TdGF0ZSh7XG4gICAgICAgICAgICB0YXJnZXQ6IG11bHRpRHJhZ0VsZW1lbnQsXG4gICAgICAgICAgICByZWN0OiBmb2xkaW5nID8gZ2V0UmVjdChtdWx0aURyYWdFbGVtZW50KSA6IGRyYWdSZWN0XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdW5zZXRSZWN0KG11bHRpRHJhZ0VsZW1lbnQpO1xuICAgICAgICAgIG11bHRpRHJhZ0VsZW1lbnQuZnJvbVJlY3QgPSBkcmFnUmVjdDtcbiAgICAgICAgICBmcm9tU29ydGFibGUucmVtb3ZlQW5pbWF0aW9uU3RhdGUobXVsdGlEcmFnRWxlbWVudCk7XG4gICAgICAgIH0pO1xuICAgICAgICBmb2xkaW5nID0gZmFsc2U7XG4gICAgICAgIGluc2VydE11bHRpRHJhZ0VsZW1lbnRzKCF0aGlzLm9wdGlvbnMucmVtb3ZlQ2xvbmVPbkhpZGUsIHJvb3RFbCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBkcmFnT3ZlckNvbXBsZXRlZDogZnVuY3Rpb24gZHJhZ092ZXJDb21wbGV0ZWQoX3JlZjEwKSB7XG4gICAgICB2YXIgc29ydGFibGUgPSBfcmVmMTAuc29ydGFibGUsXG4gICAgICAgICAgaXNPd25lciA9IF9yZWYxMC5pc093bmVyLFxuICAgICAgICAgIGluc2VydGlvbiA9IF9yZWYxMC5pbnNlcnRpb24sXG4gICAgICAgICAgYWN0aXZlU29ydGFibGUgPSBfcmVmMTAuYWN0aXZlU29ydGFibGUsXG4gICAgICAgICAgcGFyZW50RWwgPSBfcmVmMTAucGFyZW50RWwsXG4gICAgICAgICAgcHV0U29ydGFibGUgPSBfcmVmMTAucHV0U29ydGFibGU7XG4gICAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuICAgICAgaWYgKGluc2VydGlvbikge1xuICAgICAgICAvLyBDbG9uZXMgbXVzdCBiZSBoaWRkZW4gYmVmb3JlIGZvbGRpbmcgYW5pbWF0aW9uIHRvIGNhcHR1cmUgZHJhZ1JlY3RBYnNvbHV0ZSBwcm9wZXJseVxuICAgICAgICBpZiAoaXNPd25lcikge1xuICAgICAgICAgIGFjdGl2ZVNvcnRhYmxlLl9oaWRlQ2xvbmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluaXRpYWxGb2xkaW5nID0gZmFsc2U7IC8vIElmIGxlYXZpbmcgc29ydDpmYWxzZSByb290LCBvciBhbHJlYWR5IGZvbGRpbmcgLSBGb2xkIHRvIG5ldyBsb2NhdGlvblxuXG4gICAgICAgIGlmIChvcHRpb25zLmFuaW1hdGlvbiAmJiBtdWx0aURyYWdFbGVtZW50cy5sZW5ndGggPiAxICYmIChmb2xkaW5nIHx8ICFpc093bmVyICYmICFhY3RpdmVTb3J0YWJsZS5vcHRpb25zLnNvcnQgJiYgIXB1dFNvcnRhYmxlKSkge1xuICAgICAgICAgIC8vIEZvbGQ6IFNldCBhbGwgbXVsdGkgZHJhZyBlbGVtZW50cydzIHJlY3RzIHRvIGRyYWdFbCdzIHJlY3Qgd2hlbiBtdWx0aS1kcmFnIGVsZW1lbnRzIGFyZSBpbnZpc2libGVcbiAgICAgICAgICB2YXIgZHJhZ1JlY3RBYnNvbHV0ZSA9IGdldFJlY3QoZHJhZ0VsJDEsIGZhbHNlLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgICBtdWx0aURyYWdFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChtdWx0aURyYWdFbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAobXVsdGlEcmFnRWxlbWVudCA9PT0gZHJhZ0VsJDEpIHJldHVybjtcbiAgICAgICAgICAgIHNldFJlY3QobXVsdGlEcmFnRWxlbWVudCwgZHJhZ1JlY3RBYnNvbHV0ZSk7IC8vIE1vdmUgZWxlbWVudChzKSB0byBlbmQgb2YgcGFyZW50RWwgc28gdGhhdCBpdCBkb2VzIG5vdCBpbnRlcmZlcmUgd2l0aCBtdWx0aS1kcmFnIGNsb25lcyBpbnNlcnRpb24gaWYgdGhleSBhcmUgaW5zZXJ0ZWRcbiAgICAgICAgICAgIC8vIHdoaWxlIGZvbGRpbmcsIGFuZCBzbyB0aGF0IHdlIGNhbiBjYXB0dXJlIHRoZW0gYWdhaW4gYmVjYXVzZSBvbGQgc29ydGFibGUgd2lsbCBubyBsb25nZXIgYmUgZnJvbVNvcnRhYmxlXG5cbiAgICAgICAgICAgIHBhcmVudEVsLmFwcGVuZENoaWxkKG11bHRpRHJhZ0VsZW1lbnQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGZvbGRpbmcgPSB0cnVlO1xuICAgICAgICB9IC8vIENsb25lcyBtdXN0IGJlIHNob3duIChhbmQgY2hlY2sgdG8gcmVtb3ZlIG11bHRpIGRyYWdzKSBhZnRlciBmb2xkaW5nIHdoZW4gaW50ZXJmZXJpbmcgbXVsdGlEcmFnRWxlbWVudHMgYXJlIG1vdmVkIG91dFxuXG5cbiAgICAgICAgaWYgKCFpc093bmVyKSB7XG4gICAgICAgICAgLy8gT25seSByZW1vdmUgaWYgbm90IGZvbGRpbmcgKGZvbGRpbmcgd2lsbCByZW1vdmUgdGhlbSBhbnl3YXlzKVxuICAgICAgICAgIGlmICghZm9sZGluZykge1xuICAgICAgICAgICAgcmVtb3ZlTXVsdGlEcmFnRWxlbWVudHMoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobXVsdGlEcmFnRWxlbWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdmFyIGNsb25lc0hpZGRlbkJlZm9yZSA9IGNsb25lc0hpZGRlbjtcblxuICAgICAgICAgICAgYWN0aXZlU29ydGFibGUuX3Nob3dDbG9uZShzb3J0YWJsZSk7IC8vIFVuZm9sZCBhbmltYXRpb24gZm9yIGNsb25lcyBpZiBzaG93aW5nIGZyb20gaGlkZGVuXG5cblxuICAgICAgICAgICAgaWYgKGFjdGl2ZVNvcnRhYmxlLm9wdGlvbnMuYW5pbWF0aW9uICYmICFjbG9uZXNIaWRkZW4gJiYgY2xvbmVzSGlkZGVuQmVmb3JlKSB7XG4gICAgICAgICAgICAgIG11bHRpRHJhZ0Nsb25lcy5mb3JFYWNoKGZ1bmN0aW9uIChjbG9uZSkge1xuICAgICAgICAgICAgICAgIGFjdGl2ZVNvcnRhYmxlLmFkZEFuaW1hdGlvblN0YXRlKHtcbiAgICAgICAgICAgICAgICAgIHRhcmdldDogY2xvbmUsXG4gICAgICAgICAgICAgICAgICByZWN0OiBjbG9uZXNGcm9tUmVjdFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNsb25lLmZyb21SZWN0ID0gY2xvbmVzRnJvbVJlY3Q7XG4gICAgICAgICAgICAgICAgY2xvbmUudGhpc0FuaW1hdGlvbkR1cmF0aW9uID0gbnVsbDtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFjdGl2ZVNvcnRhYmxlLl9zaG93Q2xvbmUoc29ydGFibGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgZHJhZ092ZXJBbmltYXRpb25DYXB0dXJlOiBmdW5jdGlvbiBkcmFnT3ZlckFuaW1hdGlvbkNhcHR1cmUoX3JlZjExKSB7XG4gICAgICB2YXIgZHJhZ1JlY3QgPSBfcmVmMTEuZHJhZ1JlY3QsXG4gICAgICAgICAgaXNPd25lciA9IF9yZWYxMS5pc093bmVyLFxuICAgICAgICAgIGFjdGl2ZVNvcnRhYmxlID0gX3JlZjExLmFjdGl2ZVNvcnRhYmxlO1xuICAgICAgbXVsdGlEcmFnRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbiAobXVsdGlEcmFnRWxlbWVudCkge1xuICAgICAgICBtdWx0aURyYWdFbGVtZW50LnRoaXNBbmltYXRpb25EdXJhdGlvbiA9IG51bGw7XG4gICAgICB9KTtcblxuICAgICAgaWYgKGFjdGl2ZVNvcnRhYmxlLm9wdGlvbnMuYW5pbWF0aW9uICYmICFpc093bmVyICYmIGFjdGl2ZVNvcnRhYmxlLm11bHRpRHJhZy5pc011bHRpRHJhZykge1xuICAgICAgICBjbG9uZXNGcm9tUmVjdCA9IF9leHRlbmRzKHt9LCBkcmFnUmVjdCk7XG4gICAgICAgIHZhciBkcmFnTWF0cml4ID0gbWF0cml4KGRyYWdFbCQxLCB0cnVlKTtcbiAgICAgICAgY2xvbmVzRnJvbVJlY3QudG9wIC09IGRyYWdNYXRyaXguZjtcbiAgICAgICAgY2xvbmVzRnJvbVJlY3QubGVmdCAtPSBkcmFnTWF0cml4LmU7XG4gICAgICB9XG4gICAgfSxcbiAgICBkcmFnT3ZlckFuaW1hdGlvbkNvbXBsZXRlOiBmdW5jdGlvbiBkcmFnT3ZlckFuaW1hdGlvbkNvbXBsZXRlKCkge1xuICAgICAgaWYgKGZvbGRpbmcpIHtcbiAgICAgICAgZm9sZGluZyA9IGZhbHNlO1xuICAgICAgICByZW1vdmVNdWx0aURyYWdFbGVtZW50cygpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZHJvcDogZnVuY3Rpb24gZHJvcChfcmVmMTIpIHtcbiAgICAgIHZhciBldnQgPSBfcmVmMTIub3JpZ2luYWxFdmVudCxcbiAgICAgICAgICByb290RWwgPSBfcmVmMTIucm9vdEVsLFxuICAgICAgICAgIHBhcmVudEVsID0gX3JlZjEyLnBhcmVudEVsLFxuICAgICAgICAgIHNvcnRhYmxlID0gX3JlZjEyLnNvcnRhYmxlLFxuICAgICAgICAgIGRpc3BhdGNoU29ydGFibGVFdmVudCA9IF9yZWYxMi5kaXNwYXRjaFNvcnRhYmxlRXZlbnQsXG4gICAgICAgICAgb2xkSW5kZXggPSBfcmVmMTIub2xkSW5kZXgsXG4gICAgICAgICAgcHV0U29ydGFibGUgPSBfcmVmMTIucHV0U29ydGFibGU7XG4gICAgICB2YXIgdG9Tb3J0YWJsZSA9IHB1dFNvcnRhYmxlIHx8IHRoaXMuc29ydGFibGU7XG4gICAgICBpZiAoIWV2dCkgcmV0dXJuO1xuICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBwYXJlbnRFbC5jaGlsZHJlbjsgLy8gTXVsdGktZHJhZyBzZWxlY3Rpb25cblxuICAgICAgaWYgKCFkcmFnU3RhcnRlZCkge1xuICAgICAgICBpZiAob3B0aW9ucy5tdWx0aURyYWdLZXkgJiYgIXRoaXMubXVsdGlEcmFnS2V5RG93bikge1xuICAgICAgICAgIHRoaXMuX2Rlc2VsZWN0TXVsdGlEcmFnKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0b2dnbGVDbGFzcyhkcmFnRWwkMSwgb3B0aW9ucy5zZWxlY3RlZENsYXNzLCAhfm11bHRpRHJhZ0VsZW1lbnRzLmluZGV4T2YoZHJhZ0VsJDEpKTtcblxuICAgICAgICBpZiAoIX5tdWx0aURyYWdFbGVtZW50cy5pbmRleE9mKGRyYWdFbCQxKSkge1xuICAgICAgICAgIG11bHRpRHJhZ0VsZW1lbnRzLnB1c2goZHJhZ0VsJDEpO1xuICAgICAgICAgIGRpc3BhdGNoRXZlbnQoe1xuICAgICAgICAgICAgc29ydGFibGU6IHNvcnRhYmxlLFxuICAgICAgICAgICAgcm9vdEVsOiByb290RWwsXG4gICAgICAgICAgICBuYW1lOiAnc2VsZWN0JyxcbiAgICAgICAgICAgIHRhcmdldEVsOiBkcmFnRWwkMSxcbiAgICAgICAgICAgIG9yaWdpbmFsRXZ0OiBldnRcbiAgICAgICAgICB9KTsgLy8gTW9kaWZpZXIgYWN0aXZhdGVkLCBzZWxlY3QgZnJvbSBsYXN0IHRvIGRyYWdFbFxuXG4gICAgICAgICAgaWYgKGV2dC5zaGlmdEtleSAmJiBsYXN0TXVsdGlEcmFnU2VsZWN0ICYmIHNvcnRhYmxlLmVsLmNvbnRhaW5zKGxhc3RNdWx0aURyYWdTZWxlY3QpKSB7XG4gICAgICAgICAgICB2YXIgbGFzdEluZGV4ID0gaW5kZXgobGFzdE11bHRpRHJhZ1NlbGVjdCksXG4gICAgICAgICAgICAgICAgY3VycmVudEluZGV4ID0gaW5kZXgoZHJhZ0VsJDEpO1xuXG4gICAgICAgICAgICBpZiAofmxhc3RJbmRleCAmJiB+Y3VycmVudEluZGV4ICYmIGxhc3RJbmRleCAhPT0gY3VycmVudEluZGV4KSB7XG4gICAgICAgICAgICAgIC8vIE11c3QgaW5jbHVkZSBsYXN0TXVsdGlEcmFnU2VsZWN0IChzZWxlY3QgaXQpLCBpbiBjYXNlIG1vZGlmaWVkIHNlbGVjdGlvbiBmcm9tIG5vIHNlbGVjdGlvblxuICAgICAgICAgICAgICAvLyAoYnV0IHByZXZpb3VzIHNlbGVjdGlvbiBleGlzdGVkKVxuICAgICAgICAgICAgICB2YXIgbiwgaTtcblxuICAgICAgICAgICAgICBpZiAoY3VycmVudEluZGV4ID4gbGFzdEluZGV4KSB7XG4gICAgICAgICAgICAgICAgaSA9IGxhc3RJbmRleDtcbiAgICAgICAgICAgICAgICBuID0gY3VycmVudEluZGV4O1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGkgPSBjdXJyZW50SW5kZXg7XG4gICAgICAgICAgICAgICAgbiA9IGxhc3RJbmRleCArIDE7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBmb3IgKDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICh+bXVsdGlEcmFnRWxlbWVudHMuaW5kZXhPZihjaGlsZHJlbltpXSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIHRvZ2dsZUNsYXNzKGNoaWxkcmVuW2ldLCBvcHRpb25zLnNlbGVjdGVkQ2xhc3MsIHRydWUpO1xuICAgICAgICAgICAgICAgIG11bHRpRHJhZ0VsZW1lbnRzLnB1c2goY2hpbGRyZW5baV0pO1xuICAgICAgICAgICAgICAgIGRpc3BhdGNoRXZlbnQoe1xuICAgICAgICAgICAgICAgICAgc29ydGFibGU6IHNvcnRhYmxlLFxuICAgICAgICAgICAgICAgICAgcm9vdEVsOiByb290RWwsXG4gICAgICAgICAgICAgICAgICBuYW1lOiAnc2VsZWN0JyxcbiAgICAgICAgICAgICAgICAgIHRhcmdldEVsOiBjaGlsZHJlbltpXSxcbiAgICAgICAgICAgICAgICAgIG9yaWdpbmFsRXZ0OiBldnRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsYXN0TXVsdGlEcmFnU2VsZWN0ID0gZHJhZ0VsJDE7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbXVsdGlEcmFnU29ydGFibGUgPSB0b1NvcnRhYmxlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG11bHRpRHJhZ0VsZW1lbnRzLnNwbGljZShtdWx0aURyYWdFbGVtZW50cy5pbmRleE9mKGRyYWdFbCQxKSwgMSk7XG4gICAgICAgICAgbGFzdE11bHRpRHJhZ1NlbGVjdCA9IG51bGw7XG4gICAgICAgICAgZGlzcGF0Y2hFdmVudCh7XG4gICAgICAgICAgICBzb3J0YWJsZTogc29ydGFibGUsXG4gICAgICAgICAgICByb290RWw6IHJvb3RFbCxcbiAgICAgICAgICAgIG5hbWU6ICdkZXNlbGVjdCcsXG4gICAgICAgICAgICB0YXJnZXRFbDogZHJhZ0VsJDEsXG4gICAgICAgICAgICBvcmlnaW5hbEV2dDogZXZ0XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gTXVsdGktZHJhZyBkcm9wXG5cblxuICAgICAgaWYgKGRyYWdTdGFydGVkICYmIHRoaXMuaXNNdWx0aURyYWcpIHtcbiAgICAgICAgLy8gRG8gbm90IFwidW5mb2xkXCIgYWZ0ZXIgYXJvdW5kIGRyYWdFbCBpZiByZXZlcnRlZFxuICAgICAgICBpZiAoKHBhcmVudEVsW2V4cGFuZG9dLm9wdGlvbnMuc29ydCB8fCBwYXJlbnRFbCAhPT0gcm9vdEVsKSAmJiBtdWx0aURyYWdFbGVtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgdmFyIGRyYWdSZWN0ID0gZ2V0UmVjdChkcmFnRWwkMSksXG4gICAgICAgICAgICAgIG11bHRpRHJhZ0luZGV4ID0gaW5kZXgoZHJhZ0VsJDEsICc6bm90KC4nICsgdGhpcy5vcHRpb25zLnNlbGVjdGVkQ2xhc3MgKyAnKScpO1xuICAgICAgICAgIGlmICghaW5pdGlhbEZvbGRpbmcgJiYgb3B0aW9ucy5hbmltYXRpb24pIGRyYWdFbCQxLnRoaXNBbmltYXRpb25EdXJhdGlvbiA9IG51bGw7XG4gICAgICAgICAgdG9Tb3J0YWJsZS5jYXB0dXJlQW5pbWF0aW9uU3RhdGUoKTtcblxuICAgICAgICAgIGlmICghaW5pdGlhbEZvbGRpbmcpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmFuaW1hdGlvbikge1xuICAgICAgICAgICAgICBkcmFnRWwkMS5mcm9tUmVjdCA9IGRyYWdSZWN0O1xuICAgICAgICAgICAgICBtdWx0aURyYWdFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChtdWx0aURyYWdFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgbXVsdGlEcmFnRWxlbWVudC50aGlzQW5pbWF0aW9uRHVyYXRpb24gPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgaWYgKG11bHRpRHJhZ0VsZW1lbnQgIT09IGRyYWdFbCQxKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgcmVjdCA9IGZvbGRpbmcgPyBnZXRSZWN0KG11bHRpRHJhZ0VsZW1lbnQpIDogZHJhZ1JlY3Q7XG4gICAgICAgICAgICAgICAgICBtdWx0aURyYWdFbGVtZW50LmZyb21SZWN0ID0gcmVjdDsgLy8gUHJlcGFyZSB1bmZvbGQgYW5pbWF0aW9uXG5cbiAgICAgICAgICAgICAgICAgIHRvU29ydGFibGUuYWRkQW5pbWF0aW9uU3RhdGUoe1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IG11bHRpRHJhZ0VsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHJlY3Q6IHJlY3RcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IC8vIE11bHRpIGRyYWcgZWxlbWVudHMgYXJlIG5vdCBuZWNlc3NhcmlseSByZW1vdmVkIGZyb20gdGhlIERPTSBvbiBkcm9wLCBzbyB0byByZWluc2VydFxuICAgICAgICAgICAgLy8gcHJvcGVybHkgdGhleSBtdXN0IGFsbCBiZSByZW1vdmVkXG5cblxuICAgICAgICAgICAgcmVtb3ZlTXVsdGlEcmFnRWxlbWVudHMoKTtcbiAgICAgICAgICAgIG11bHRpRHJhZ0VsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24gKG11bHRpRHJhZ0VsZW1lbnQpIHtcbiAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuW211bHRpRHJhZ0luZGV4XSkge1xuICAgICAgICAgICAgICAgIHBhcmVudEVsLmluc2VydEJlZm9yZShtdWx0aURyYWdFbGVtZW50LCBjaGlsZHJlblttdWx0aURyYWdJbmRleF0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBhcmVudEVsLmFwcGVuZENoaWxkKG11bHRpRHJhZ0VsZW1lbnQpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgbXVsdGlEcmFnSW5kZXgrKztcbiAgICAgICAgICAgIH0pOyAvLyBJZiBpbml0aWFsIGZvbGRpbmcgaXMgZG9uZSwgdGhlIGVsZW1lbnRzIG1heSBoYXZlIGNoYW5nZWQgcG9zaXRpb24gYmVjYXVzZSB0aGV5IGFyZSBub3dcbiAgICAgICAgICAgIC8vIHVuZm9sZGluZyBhcm91bmQgZHJhZ0VsLCBldmVuIHRob3VnaCBkcmFnRWwgbWF5IG5vdCBoYXZlIGhpcyBpbmRleCBjaGFuZ2VkLCBzbyB1cGRhdGUgZXZlbnRcbiAgICAgICAgICAgIC8vIG11c3QgYmUgZmlyZWQgaGVyZSBhcyBTb3J0YWJsZSB3aWxsIG5vdC5cblxuICAgICAgICAgICAgaWYgKG9sZEluZGV4ID09PSBpbmRleChkcmFnRWwkMSkpIHtcbiAgICAgICAgICAgICAgdmFyIHVwZGF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICBtdWx0aURyYWdFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChtdWx0aURyYWdFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgaWYgKG11bHRpRHJhZ0VsZW1lbnQuc29ydGFibGVJbmRleCAhPT0gaW5kZXgobXVsdGlEcmFnRWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICAgIHVwZGF0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBpZiAodXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgZGlzcGF0Y2hTb3J0YWJsZUV2ZW50KCd1cGRhdGUnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gTXVzdCBiZSBkb25lIGFmdGVyIGNhcHR1cmluZyBpbmRpdmlkdWFsIHJlY3RzIChzY3JvbGwgYmFyKVxuXG5cbiAgICAgICAgICBtdWx0aURyYWdFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChtdWx0aURyYWdFbGVtZW50KSB7XG4gICAgICAgICAgICB1bnNldFJlY3QobXVsdGlEcmFnRWxlbWVudCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdG9Tb3J0YWJsZS5hbmltYXRlQWxsKCk7XG4gICAgICAgIH1cblxuICAgICAgICBtdWx0aURyYWdTb3J0YWJsZSA9IHRvU29ydGFibGU7XG4gICAgICB9IC8vIFJlbW92ZSBjbG9uZXMgaWYgbmVjZXNzYXJ5XG5cblxuICAgICAgaWYgKHJvb3RFbCA9PT0gcGFyZW50RWwgfHwgcHV0U29ydGFibGUgJiYgcHV0U29ydGFibGUubGFzdFB1dE1vZGUgIT09ICdjbG9uZScpIHtcbiAgICAgICAgbXVsdGlEcmFnQ2xvbmVzLmZvckVhY2goZnVuY3Rpb24gKGNsb25lKSB7XG4gICAgICAgICAgY2xvbmUucGFyZW50Tm9kZSAmJiBjbG9uZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNsb25lKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBudWxsaW5nR2xvYmFsOiBmdW5jdGlvbiBudWxsaW5nR2xvYmFsKCkge1xuICAgICAgdGhpcy5pc011bHRpRHJhZyA9IGRyYWdTdGFydGVkID0gZmFsc2U7XG4gICAgICBtdWx0aURyYWdDbG9uZXMubGVuZ3RoID0gMDtcbiAgICB9LFxuICAgIGRlc3Ryb3lHbG9iYWw6IGZ1bmN0aW9uIGRlc3Ryb3lHbG9iYWwoKSB7XG4gICAgICB0aGlzLl9kZXNlbGVjdE11bHRpRHJhZygpO1xuXG4gICAgICBvZmYoZG9jdW1lbnQsICdwb2ludGVydXAnLCB0aGlzLl9kZXNlbGVjdE11bHRpRHJhZyk7XG4gICAgICBvZmYoZG9jdW1lbnQsICdtb3VzZXVwJywgdGhpcy5fZGVzZWxlY3RNdWx0aURyYWcpO1xuICAgICAgb2ZmKGRvY3VtZW50LCAndG91Y2hlbmQnLCB0aGlzLl9kZXNlbGVjdE11bHRpRHJhZyk7XG4gICAgICBvZmYoZG9jdW1lbnQsICdrZXlkb3duJywgdGhpcy5fY2hlY2tLZXlEb3duKTtcbiAgICAgIG9mZihkb2N1bWVudCwgJ2tleXVwJywgdGhpcy5fY2hlY2tLZXlVcCk7XG4gICAgfSxcbiAgICBfZGVzZWxlY3RNdWx0aURyYWc6IGZ1bmN0aW9uIF9kZXNlbGVjdE11bHRpRHJhZyhldnQpIHtcbiAgICAgIGlmICh0eXBlb2YgZHJhZ1N0YXJ0ZWQgIT09IFwidW5kZWZpbmVkXCIgJiYgZHJhZ1N0YXJ0ZWQpIHJldHVybjsgLy8gT25seSBkZXNlbGVjdCBpZiBzZWxlY3Rpb24gaXMgaW4gdGhpcyBzb3J0YWJsZVxuXG4gICAgICBpZiAobXVsdGlEcmFnU29ydGFibGUgIT09IHRoaXMuc29ydGFibGUpIHJldHVybjsgLy8gT25seSBkZXNlbGVjdCBpZiB0YXJnZXQgaXMgbm90IGl0ZW0gaW4gdGhpcyBzb3J0YWJsZVxuXG4gICAgICBpZiAoZXZ0ICYmIGNsb3Nlc3QoZXZ0LnRhcmdldCwgdGhpcy5vcHRpb25zLmRyYWdnYWJsZSwgdGhpcy5zb3J0YWJsZS5lbCwgZmFsc2UpKSByZXR1cm47IC8vIE9ubHkgZGVzZWxlY3QgaWYgbGVmdCBjbGlja1xuXG4gICAgICBpZiAoZXZ0ICYmIGV2dC5idXR0b24gIT09IDApIHJldHVybjtcblxuICAgICAgd2hpbGUgKG11bHRpRHJhZ0VsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICB2YXIgZWwgPSBtdWx0aURyYWdFbGVtZW50c1swXTtcbiAgICAgICAgdG9nZ2xlQ2xhc3MoZWwsIHRoaXMub3B0aW9ucy5zZWxlY3RlZENsYXNzLCBmYWxzZSk7XG4gICAgICAgIG11bHRpRHJhZ0VsZW1lbnRzLnNoaWZ0KCk7XG4gICAgICAgIGRpc3BhdGNoRXZlbnQoe1xuICAgICAgICAgIHNvcnRhYmxlOiB0aGlzLnNvcnRhYmxlLFxuICAgICAgICAgIHJvb3RFbDogdGhpcy5zb3J0YWJsZS5lbCxcbiAgICAgICAgICBuYW1lOiAnZGVzZWxlY3QnLFxuICAgICAgICAgIHRhcmdldEVsOiBlbCxcbiAgICAgICAgICBvcmlnaW5hbEV2dDogZXZ0XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgX2NoZWNrS2V5RG93bjogZnVuY3Rpb24gX2NoZWNrS2V5RG93bihldnQpIHtcbiAgICAgIGlmIChldnQua2V5ID09PSB0aGlzLm9wdGlvbnMubXVsdGlEcmFnS2V5KSB7XG4gICAgICAgIHRoaXMubXVsdGlEcmFnS2V5RG93biA9IHRydWU7XG4gICAgICB9XG4gICAgfSxcbiAgICBfY2hlY2tLZXlVcDogZnVuY3Rpb24gX2NoZWNrS2V5VXAoZXZ0KSB7XG4gICAgICBpZiAoZXZ0LmtleSA9PT0gdGhpcy5vcHRpb25zLm11bHRpRHJhZ0tleSkge1xuICAgICAgICB0aGlzLm11bHRpRHJhZ0tleURvd24gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHJldHVybiBfZXh0ZW5kcyhNdWx0aURyYWcsIHtcbiAgICAvLyBTdGF0aWMgbWV0aG9kcyAmIHByb3BlcnRpZXNcbiAgICBwbHVnaW5OYW1lOiAnbXVsdGlEcmFnJyxcbiAgICB1dGlsczoge1xuICAgICAgLyoqXHJcbiAgICAgICAqIFNlbGVjdHMgdGhlIHByb3ZpZGVkIG11bHRpLWRyYWcgaXRlbVxyXG4gICAgICAgKiBAcGFyYW0gIHtIVE1MRWxlbWVudH0gZWwgICAgVGhlIGVsZW1lbnQgdG8gYmUgc2VsZWN0ZWRcclxuICAgICAgICovXG4gICAgICBzZWxlY3Q6IGZ1bmN0aW9uIHNlbGVjdChlbCkge1xuICAgICAgICB2YXIgc29ydGFibGUgPSBlbC5wYXJlbnROb2RlW2V4cGFuZG9dO1xuICAgICAgICBpZiAoIXNvcnRhYmxlIHx8ICFzb3J0YWJsZS5vcHRpb25zLm11bHRpRHJhZyB8fCB+bXVsdGlEcmFnRWxlbWVudHMuaW5kZXhPZihlbCkpIHJldHVybjtcblxuICAgICAgICBpZiAobXVsdGlEcmFnU29ydGFibGUgJiYgbXVsdGlEcmFnU29ydGFibGUgIT09IHNvcnRhYmxlKSB7XG4gICAgICAgICAgbXVsdGlEcmFnU29ydGFibGUubXVsdGlEcmFnLl9kZXNlbGVjdE11bHRpRHJhZygpO1xuXG4gICAgICAgICAgbXVsdGlEcmFnU29ydGFibGUgPSBzb3J0YWJsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRvZ2dsZUNsYXNzKGVsLCBzb3J0YWJsZS5vcHRpb25zLnNlbGVjdGVkQ2xhc3MsIHRydWUpO1xuICAgICAgICBtdWx0aURyYWdFbGVtZW50cy5wdXNoKGVsKTtcbiAgICAgIH0sXG5cbiAgICAgIC8qKlxyXG4gICAgICAgKiBEZXNlbGVjdHMgdGhlIHByb3ZpZGVkIG11bHRpLWRyYWcgaXRlbVxyXG4gICAgICAgKiBAcGFyYW0gIHtIVE1MRWxlbWVudH0gZWwgICAgVGhlIGVsZW1lbnQgdG8gYmUgZGVzZWxlY3RlZFxyXG4gICAgICAgKi9cbiAgICAgIGRlc2VsZWN0OiBmdW5jdGlvbiBkZXNlbGVjdChlbCkge1xuICAgICAgICB2YXIgc29ydGFibGUgPSBlbC5wYXJlbnROb2RlW2V4cGFuZG9dLFxuICAgICAgICAgICAgaW5kZXggPSBtdWx0aURyYWdFbGVtZW50cy5pbmRleE9mKGVsKTtcbiAgICAgICAgaWYgKCFzb3J0YWJsZSB8fCAhc29ydGFibGUub3B0aW9ucy5tdWx0aURyYWcgfHwgIX5pbmRleCkgcmV0dXJuO1xuICAgICAgICB0b2dnbGVDbGFzcyhlbCwgc29ydGFibGUub3B0aW9ucy5zZWxlY3RlZENsYXNzLCBmYWxzZSk7XG4gICAgICAgIG11bHRpRHJhZ0VsZW1lbnRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBldmVudFByb3BlcnRpZXM6IGZ1bmN0aW9uIGV2ZW50UHJvcGVydGllcygpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICB2YXIgb2xkSW5kaWNpZXMgPSBbXSxcbiAgICAgICAgICBuZXdJbmRpY2llcyA9IFtdO1xuICAgICAgbXVsdGlEcmFnRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbiAobXVsdGlEcmFnRWxlbWVudCkge1xuICAgICAgICBvbGRJbmRpY2llcy5wdXNoKHtcbiAgICAgICAgICBtdWx0aURyYWdFbGVtZW50OiBtdWx0aURyYWdFbGVtZW50LFxuICAgICAgICAgIGluZGV4OiBtdWx0aURyYWdFbGVtZW50LnNvcnRhYmxlSW5kZXhcbiAgICAgICAgfSk7IC8vIG11bHRpRHJhZ0VsZW1lbnRzIHdpbGwgYWxyZWFkeSBiZSBzb3J0ZWQgaWYgZm9sZGluZ1xuXG4gICAgICAgIHZhciBuZXdJbmRleDtcblxuICAgICAgICBpZiAoZm9sZGluZyAmJiBtdWx0aURyYWdFbGVtZW50ICE9PSBkcmFnRWwkMSkge1xuICAgICAgICAgIG5ld0luZGV4ID0gLTE7XG4gICAgICAgIH0gZWxzZSBpZiAoZm9sZGluZykge1xuICAgICAgICAgIG5ld0luZGV4ID0gaW5kZXgobXVsdGlEcmFnRWxlbWVudCwgJzpub3QoLicgKyBfdGhpczMub3B0aW9ucy5zZWxlY3RlZENsYXNzICsgJyknKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdJbmRleCA9IGluZGV4KG11bHRpRHJhZ0VsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV3SW5kaWNpZXMucHVzaCh7XG4gICAgICAgICAgbXVsdGlEcmFnRWxlbWVudDogbXVsdGlEcmFnRWxlbWVudCxcbiAgICAgICAgICBpbmRleDogbmV3SW5kZXhcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGl0ZW1zOiBfdG9Db25zdW1hYmxlQXJyYXkobXVsdGlEcmFnRWxlbWVudHMpLFxuICAgICAgICBjbG9uZXM6IFtdLmNvbmNhdChtdWx0aURyYWdDbG9uZXMpLFxuICAgICAgICBvbGRJbmRpY2llczogb2xkSW5kaWNpZXMsXG4gICAgICAgIG5ld0luZGljaWVzOiBuZXdJbmRpY2llc1xuICAgICAgfTtcbiAgICB9LFxuICAgIG9wdGlvbkxpc3RlbmVyczoge1xuICAgICAgbXVsdGlEcmFnS2V5OiBmdW5jdGlvbiBtdWx0aURyYWdLZXkoa2V5KSB7XG4gICAgICAgIGtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgIGlmIChrZXkgPT09ICdjdHJsJykge1xuICAgICAgICAgIGtleSA9ICdDb250cm9sJztcbiAgICAgICAgfSBlbHNlIGlmIChrZXkubGVuZ3RoID4gMSkge1xuICAgICAgICAgIGtleSA9IGtleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGtleS5zdWJzdHIoMSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGluc2VydE11bHRpRHJhZ0VsZW1lbnRzKGNsb25lc0luc2VydGVkLCByb290RWwpIHtcbiAgbXVsdGlEcmFnRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbiAobXVsdGlEcmFnRWxlbWVudCwgaSkge1xuICAgIHZhciB0YXJnZXQgPSByb290RWwuY2hpbGRyZW5bbXVsdGlEcmFnRWxlbWVudC5zb3J0YWJsZUluZGV4ICsgKGNsb25lc0luc2VydGVkID8gTnVtYmVyKGkpIDogMCldO1xuXG4gICAgaWYgKHRhcmdldCkge1xuICAgICAgcm9vdEVsLmluc2VydEJlZm9yZShtdWx0aURyYWdFbGVtZW50LCB0YXJnZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByb290RWwuYXBwZW5kQ2hpbGQobXVsdGlEcmFnRWxlbWVudCk7XG4gICAgfVxuICB9KTtcbn1cbi8qKlxyXG4gKiBJbnNlcnQgbXVsdGktZHJhZyBjbG9uZXNcclxuICogQHBhcmFtICB7W0Jvb2xlYW5dfSBlbGVtZW50c0luc2VydGVkICBXaGV0aGVyIHRoZSBtdWx0aS1kcmFnIGVsZW1lbnRzIGFyZSBpbnNlcnRlZFxyXG4gKiBAcGFyYW0gIHtIVE1MRWxlbWVudH0gcm9vdEVsXHJcbiAqL1xuXG5cbmZ1bmN0aW9uIGluc2VydE11bHRpRHJhZ0Nsb25lcyhlbGVtZW50c0luc2VydGVkLCByb290RWwpIHtcbiAgbXVsdGlEcmFnQ2xvbmVzLmZvckVhY2goZnVuY3Rpb24gKGNsb25lLCBpKSB7XG4gICAgdmFyIHRhcmdldCA9IHJvb3RFbC5jaGlsZHJlbltjbG9uZS5zb3J0YWJsZUluZGV4ICsgKGVsZW1lbnRzSW5zZXJ0ZWQgPyBOdW1iZXIoaSkgOiAwKV07XG5cbiAgICBpZiAodGFyZ2V0KSB7XG4gICAgICByb290RWwuaW5zZXJ0QmVmb3JlKGNsb25lLCB0YXJnZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByb290RWwuYXBwZW5kQ2hpbGQoY2xvbmUpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU11bHRpRHJhZ0VsZW1lbnRzKCkge1xuICBtdWx0aURyYWdFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChtdWx0aURyYWdFbGVtZW50KSB7XG4gICAgaWYgKG11bHRpRHJhZ0VsZW1lbnQgPT09IGRyYWdFbCQxKSByZXR1cm47XG4gICAgbXVsdGlEcmFnRWxlbWVudC5wYXJlbnROb2RlICYmIG11bHRpRHJhZ0VsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChtdWx0aURyYWdFbGVtZW50KTtcbiAgfSk7XG59XG5cblNvcnRhYmxlLm1vdW50KG5ldyBBdXRvU2Nyb2xsUGx1Z2luKCkpO1xuU29ydGFibGUubW91bnQoUmVtb3ZlLCBSZXZlcnQpO1xuXG5leHBvcnQgZGVmYXVsdCBTb3J0YWJsZTtcbmV4cG9ydCB7IE11bHRpRHJhZ1BsdWdpbiBhcyBNdWx0aURyYWcsIFNvcnRhYmxlLCBTd2FwUGx1Z2luIGFzIFN3YXAgfTtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCwgV2F0Y2ggfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBRdWVzdGlvblZ1ZSB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkJvb2xlYW5Nb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgQm9vbGVhbiB9IGZyb20gXCIuL2Jvb2xlYW5cIjtcbmltcG9ydCB7IFJlbmRlcmVyRmFjdG9yeSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgQm9vbGVhbkNoZWNrYm94IGV4dGVuZHMgQm9vbGVhbiB7fVxuXG5WdWUuY29tcG9uZW50KFwic3YtYm9vbGVhbi1jaGVja2JveFwiLCBCb29sZWFuQ2hlY2tib3gpO1xuXG5SZW5kZXJlckZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJSZW5kZXJlcihcbiAgXCJib29sZWFuXCIsXG4gIFwiY2hlY2tib3hcIixcbiAgXCJzdi1ib29sZWFuLWNoZWNrYm94XCJcbik7XG5cbmV4cG9ydCBkZWZhdWx0IEJvb2xlYW5DaGVja2JveDtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCwgV2F0Y2ggfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBRdWVzdGlvblZ1ZSB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkJvb2xlYW5Nb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgQm9vbGVhbiB9IGZyb20gXCIuL2Jvb2xlYW5cIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIEJvb2xlYW5Td2l0Y2ggZXh0ZW5kcyBCb29sZWFuIHt9XG5cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktYm9vbGVhblwiLCBCb29sZWFuU3dpdGNoKTtcblxuZXhwb3J0IGRlZmF1bHQgQm9vbGVhblN3aXRjaDtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25CdXR0b25Hcm91cE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBRdWVzdGlvblZ1ZSB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBCdXR0b25Hcm91cCBleHRlbmRzIFF1ZXN0aW9uVnVlPFF1ZXN0aW9uQnV0dG9uR3JvdXBNb2RlbD4ge1xuICBAUHJvcCgpIHF1ZXN0aW9uOiBRdWVzdGlvbkJ1dHRvbkdyb3VwTW9kZWw7XG5cbiAgZ2V0TW9kZWwoKTogUXVlc3Rpb25CdXR0b25Hcm91cE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbjtcbiAgfVxufVxuLy8gVnVlLmNvbXBvbmVudChcInN1cnZleS1idXR0b25ncm91cFwiLCBCdXR0b25Hcm91cCk7XG5leHBvcnQgZGVmYXVsdCBCdXR0b25Hcm91cDtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHtcbiAgQnV0dG9uR3JvdXBJdGVtTW9kZWwsXG4gIEl0ZW1WYWx1ZSxcbiAgUXVlc3Rpb25CdXR0b25Hcm91cE1vZGVsLFxufSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IEJhc2VWdWUgfSBmcm9tIFwiLi9iYXNlXCI7XG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgQnV0dG9uR3JvdXBJdGVtIGV4dGVuZHMgQmFzZVZ1ZSB7XG4gIEBQcm9wKCkgaXRlbTogSXRlbVZhbHVlO1xuICBAUHJvcCgpIHF1ZXN0aW9uOiBRdWVzdGlvbkJ1dHRvbkdyb3VwTW9kZWw7XG4gIEBQcm9wKCkgaW5kZXg6IG51bWJlcjtcbiAgcHVibGljIG1vZGVsOiBCdXR0b25Hcm91cEl0ZW1Nb2RlbDtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMubW9kZWwgPSBuZXcgQnV0dG9uR3JvdXBJdGVtTW9kZWwodGhpcy5xdWVzdGlvbiwgdGhpcy5pdGVtLCB0aGlzLmluZGV4KTtcbiAgfVxuICBnZXRNb2RlbCgpOiBJdGVtVmFsdWUge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cbn1cblxuVnVlLmNvbXBvbmVudChcInN2LWJ1dHRvbi1ncm91cC1pdGVtXCIsIEJ1dHRvbkdyb3VwSXRlbSk7XG5leHBvcnQgZGVmYXVsdCBCdXR0b25Hcm91cEl0ZW07XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCwgV2F0Y2ggfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBRdWVzdGlvblZ1ZSB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkNoZWNrYm94TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIENoZWNrYm94IGV4dGVuZHMgUXVlc3Rpb25WdWU8UXVlc3Rpb25DaGVja2JveE1vZGVsPiB7XG4gIGdldEl0ZW1DbGFzcyhpdGVtOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5nZXRJdGVtQ2xhc3MoaXRlbSk7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktY2hlY2tib3hcIiwgQ2hlY2tib3gpO1xuZXhwb3J0IGRlZmF1bHQgQ2hlY2tib3g7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgeyBJdGVtVmFsdWUsIEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IEJhc2VWdWUgfSBmcm9tIFwiLi9iYXNlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBDaGVja2JveEl0ZW0gZXh0ZW5kcyBCYXNlVnVlIHtcbiAgQFByb3AoKSBxdWVzdGlvbjogYW55O1xuICBAUHJvcCgpIGl0ZW06IEl0ZW1WYWx1ZTtcbiAgQFByb3AoKSBpbmRleDogYW55O1xuICBAUHJvcCgpIGhpZGVMYWJlbDogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIGdldE1vZGVsKCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cbiAgZ2V0IGlzQWxsU2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uaXNBbGxTZWxlY3RlZDtcbiAgfVxuICBzZXQgaXNBbGxTZWxlY3RlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnF1ZXN0aW9uLmlzQWxsU2VsZWN0ZWQgPSB2YWw7XG4gIH1cbiAgZ2V0TGFiZWxDbGFzcyhpdGVtOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5nZXRMYWJlbENsYXNzKGl0ZW0pO1xuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LWNoZWNrYm94LWl0ZW1cIiwgQ2hlY2tib3hJdGVtKTtcbmV4cG9ydCBkZWZhdWx0IENoZWNrYm94SXRlbTtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgUXVlc3Rpb25WdWUgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUXVlc3Rpb25Db21tZW50TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIENvbW1lbnQgZXh0ZW5kcyBRdWVzdGlvblZ1ZTxRdWVzdGlvbkNvbW1lbnRNb2RlbD4ge1xuICBjaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb24udmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG4gIH1cbiAga2V5dXAoZXZlbnQ6IGFueSkge1xuICAgIGlmICghdGhpcy5xdWVzdGlvbi5pc0lucHV0VGV4dFVwZGF0ZSkgcmV0dXJuO1xuICAgIHRoaXMucXVlc3Rpb24udmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktY29tbWVudFwiLCBDb21tZW50KTtcblxuZXhwb3J0IGRlZmF1bHQgQ29tbWVudDtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cclxuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcclxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XHJcbmltcG9ydCBBY3Rpb25CYXJJdGVtVmlld01vZGVsIGZyb20gXCIuL2FjdGlvbi1iYXItaXRlbS52dWVcIjtcclxuXHJcbkBDb21wb25lbnRcclxuZXhwb3J0IGNsYXNzIEFjdGlvbkJhckl0ZW1Ecm9wZG93blZpZXdNb2RlbCBleHRlbmRzIEFjdGlvbkJhckl0ZW1WaWV3TW9kZWwge31cclxuVnVlLmNvbXBvbmVudChcInN2LWFjdGlvbi1iYXItaXRlbS1kcm9wZG93blwiLCBBY3Rpb25CYXJJdGVtRHJvcGRvd25WaWV3TW9kZWwpO1xyXG5leHBvcnQgZGVmYXVsdCBBY3Rpb25CYXJJdGVtRHJvcGRvd25WaWV3TW9kZWw7XHJcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxyXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcclxuaW1wb3J0IHsgUHJvcCwgQ29tcG9uZW50IH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcclxuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XHJcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcclxuaW1wb3J0IEJhc2VWdWUgZnJvbSBcIi4uLy4uL2Jhc2VcIjtcclxuXHJcbkBDb21wb25lbnRcclxuZXhwb3J0IGNsYXNzIEFjdGlvbkJhckl0ZW1WaWV3TW9kZWwgZXh0ZW5kcyBCYXNlVnVlIHtcclxuICBAUHJvcCgpIHB1YmxpYyBpdGVtOiBBY3Rpb247XHJcblxyXG4gIGdldE1vZGVsKCk6IEJhc2Uge1xyXG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcclxuICB9XHJcbn1cclxuXHJcblZ1ZS5jb21wb25lbnQoXCJzdi1hY3Rpb24tYmFyLWl0ZW1cIiwgQWN0aW9uQmFySXRlbVZpZXdNb2RlbCk7XHJcbmV4cG9ydCBkZWZhdWx0IEFjdGlvbkJhckl0ZW1WaWV3TW9kZWw7XHJcbiIsIlxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IFByb3AsIENvbXBvbmVudCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBBY3Rpb25CYXJTZXBhcmF0b3JWaWV3TW9kZWwgZXh0ZW5kcyBWdWUge1xuICBAUHJvcCgpIGl0ZW06IGFueTtcblxuICBwdWJsaWMgZ2V0IGlubmVyQ3NzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbSAmJiB0aGlzLml0ZW0uaW5uZXJDc3M7XG4gIH1cbn1cblxuVnVlLmNvbXBvbmVudChcInN2LWFjdGlvbi1iYXItc2VwYXJhdG9yXCIsIEFjdGlvbkJhclNlcGFyYXRvclZpZXdNb2RlbCk7XG5leHBvcnQgZGVmYXVsdCBBY3Rpb25CYXJTZXBhcmF0b3JWaWV3TW9kZWw7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxyXG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xyXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcclxuaW1wb3J0IHsgQWRhcHRpdmVBY3Rpb25Db250YWluZXIgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcclxuaW1wb3J0IHsgQmFzZVZ1ZSB9IGZyb20gXCIuLi8uLi9iYXNlXCI7XHJcblxyXG5leHBvcnQgKiBmcm9tIFwiLi9hY3Rpb24udnVlXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2FjdGlvbi1iYXItaXRlbS52dWVcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vYWN0aW9uLWJhci1pdGVtLWRyb3Bkb3duLnZ1ZVwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9hY3Rpb24tYmFyLXNlcGFyYXRvci52dWVcIjtcclxuXHJcbkBDb21wb25lbnRcclxuZXhwb3J0IGNsYXNzIEFjdGlvbkJhclZpZXdNb2RlbCBleHRlbmRzIEJhc2VWdWUge1xyXG4gIEBQcm9wKCkgbW9kZWw6IEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyO1xyXG4gIEBQcm9wKCkgaGFuZGxlQ2xpY2s6IGJvb2xlYW47XHJcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgc3VwZXIocHJvcHMpO1xyXG4gIH1cclxuICBnZXRNb2RlbCgpIHtcclxuICAgIHJldHVybiB0aGlzLm1vZGVsO1xyXG4gIH1cclxufVxyXG5cclxuVnVlLmNvbXBvbmVudChcInN2LWFjdGlvbi1iYXJcIiwgQWN0aW9uQmFyVmlld01vZGVsKTtcclxuZXhwb3J0IGRlZmF1bHQgQWN0aW9uQmFyVmlld01vZGVsO1xyXG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgUHJvcCwgQ29tcG9uZW50IH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IEFjdGlvbiwgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IEJhc2VWdWUgZnJvbSBcIi4uLy4uL2Jhc2VcIjtcbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBBY3Rpb25WaWV3TW9kZWwgZXh0ZW5kcyBCYXNlVnVlIHtcbiAgQFByb3AoKSBpdGVtOiBBY3Rpb247XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgZ2V0TW9kZWwoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcbiAgfVxuICBnZXRDb21wb25lbnROYW1lKCkge1xuICAgIHJldHVybiB0aGlzLml0ZW0uY29tcG9uZW50IHx8IFwic3YtYWN0aW9uLWJhci1pdGVtXCI7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdi1hY3Rpb25cIiwgQWN0aW9uVmlld01vZGVsKTtcbmV4cG9ydCBkZWZhdWx0IEFjdGlvblZpZXdNb2RlbDtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IENvbXBvbmVudCBmcm9tIFwidnVlLWNsYXNzLWNvbXBvbmVudFwiO1xuaW1wb3J0IHsgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBEZWZhdWx0VGl0bGUgZXh0ZW5kcyBWdWUge1xuICBAUHJvcCgpIGVsZW1lbnQ6IGFueTtcbiAgQFByb3AoKSBjc3M6IGFueTtcbiAgZ2V0IHNob3dJY29uKCkge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnQuaXNFeHBhbmRlZCB8fCB0aGlzLmVsZW1lbnQuaXNDb2xsYXBzZWQ7XG4gIH1cblxuICBwcml2YXRlIGlzQ29sbGFwc2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY2hhbmdlRXhwYW5kZWQoKSB7XG4gICAgdGhpcy5lbGVtZW50LnRvZ2dsZVN0YXRlKCk7XG4gIH1cblxuICBnZXRJY29uQ3NzKGlzQ29sbGFwc2VkOiBib29sZWFuKSB7XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMuY3NzLnF1ZXN0aW9uLmljb247XG4gICAgaWYgKCFpc0NvbGxhcHNlZCkgcmVzdWx0ICs9IFwiIFwiICsgdGhpcy5jc3MucXVlc3Rpb24uaWNvbkV4cGFuZGVkO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMuaXNDb2xsYXBzZWQgPSB0aGlzLmVsZW1lbnQuaXNDb2xsYXBzZWQ7XG5cbiAgICB0aGlzLmVsZW1lbnQuc3RhdGVDaGFuZ2VkQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICB0aGlzLmlzQ29sbGFwc2VkID0gdGhpcy5lbGVtZW50LmlzQ29sbGFwc2VkO1xuICAgIH07XG4gIH1cbn1cblxuVnVlLmNvbXBvbmVudChcInN2LWRlZmF1bHQtdGl0bGVcIiwgRGVmYXVsdFRpdGxlKTtcbmV4cG9ydCBkZWZhdWx0IERlZmF1bHRUaXRsZTtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cclxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XHJcbmltcG9ydCB7IExpc3RNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xyXG5pbXBvcnQgeyBCYXNlVnVlIH0gZnJvbSBcIi4uLy4uL2Jhc2VcIjtcclxuXHJcbkBDb21wb25lbnRcclxuZXhwb3J0IGNsYXNzIExpc3QgZXh0ZW5kcyBCYXNlVnVlIHtcclxuICBAUHJvcCgpIG1vZGVsOiBMaXN0TW9kZWw7XHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuICBnZXRNb2RlbCgpIHtcclxuICAgIHJldHVybiB0aGlzLm1vZGVsO1xyXG4gIH1cclxufVxyXG5cclxuVnVlLmNvbXBvbmVudChcInN2LWxpc3RcIiwgTGlzdCk7XHJcbmV4cG9ydCBkZWZhdWx0IExpc3Q7XHJcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IFByb3AsIENvbXBvbmVudCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCBCYXNlVnVlIGZyb20gXCIuLi8uLi8uLi9iYXNlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeERldGFpbEJ1dHRvbiBleHRlbmRzIEJhc2VWdWUge1xuICBAUHJvcCgpIHB1YmxpYyBpdGVtOiBBY3Rpb247XG5cbiAgZ2V0IHF1ZXN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLml0ZW0uZGF0YS5xdWVzdGlvbjtcbiAgfVxuXG4gIGdldCByb3coKSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbS5kYXRhLnJvdztcbiAgfVxuXG4gIGdldE1vZGVsKCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cbn1cblxuVnVlLmNvbXBvbmVudChcInN2LW1hdHJpeC1kZXRhaWwtYnV0dG9uXCIsIFN1cnZleVF1ZXN0aW9uTWF0cml4RGV0YWlsQnV0dG9uKTtcbmV4cG9ydCBkZWZhdWx0IFN1cnZleVF1ZXN0aW9uTWF0cml4RGV0YWlsQnV0dG9uO1xuIiwiXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgUHJvcCwgQ29tcG9uZW50IH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IEFjdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IEJhc2VWdWUgZnJvbSBcIi4uLy4uLy4uL2Jhc2VcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY0RyYWdEcm9wSWNvbiBleHRlbmRzIEJhc2VWdWUge1xuICBAUHJvcCgpIHB1YmxpYyBpdGVtOiBBY3Rpb247XG5cbiAgZ2V0IHF1ZXN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLml0ZW0uZGF0YS5xdWVzdGlvbjtcbiAgfVxuXG4gIGdldE1vZGVsKCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cbn1cblxuVnVlLmNvbXBvbmVudChcbiAgXCJzdi1tYXRyaXgtZHJhZy1kcm9wLWljb25cIixcbiAgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljRHJhZ0Ryb3BJY29uXG4pO1xuZXhwb3J0IGRlZmF1bHQgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljRHJhZ0Ryb3BJY29uO1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IFByb3AsIENvbXBvbmVudCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCBCYXNlVnVlIGZyb20gXCIuLi8uLi8uLi9iYXNlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNSZW1vdmVCdXR0b24gZXh0ZW5kcyBCYXNlVnVlIHtcbiAgQFByb3AoKSBwdWJsaWMgaXRlbTogQWN0aW9uO1xuXG4gIGdldCBxdWVzdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtLmRhdGEucXVlc3Rpb247XG4gIH1cblxuICBnZXQgcm93KCkge1xuICAgIHJldHVybiB0aGlzLml0ZW0uZGF0YS5yb3c7XG4gIH1cblxuICBnZXRNb2RlbCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtO1xuICB9XG59XG5cblZ1ZS5jb21wb25lbnQoXG4gIFwic3YtbWF0cml4LXJlbW92ZS1idXR0b25cIixcbiAgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljUmVtb3ZlQnV0dG9uXG4pO1xuZXhwb3J0IGRlZmF1bHQgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljUmVtb3ZlQnV0dG9uO1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IFByb3AsIENvbXBvbmVudCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBQb3B1cEJhc2VWaWV3TW9kZWwsIFBvcHVwTW9kZWwsIHNldHRpbmdzIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBCYXNlVnVlIH0gZnJvbSBcIi4uLy4uL2Jhc2VcIjtcbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBQb3B1cENvbnRhaW5lciBleHRlbmRzIEJhc2VWdWUge1xuICBAUHJvcCgpIG1vZGVsOiBQb3B1cEJhc2VWaWV3TW9kZWw7XG4gIHByaXZhdGUgcHJldklzVmlzaWJsZTogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIGdldE1vZGVsKCkge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIGNsaWNrSW5zaWRlKGV2ZW50OiBhbnkpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuICBvblVwZGF0ZWQoKSB7XG4gICAgaWYgKCF0aGlzLnByZXZJc1Zpc2libGUgJiYgdGhpcy5tb2RlbC5pc1Zpc2libGUpIHtcbiAgICAgIHRoaXMubW9kZWwudXBkYXRlT25TaG93aW5nKCk7XG4gICAgfVxuICAgIHRoaXMucHJldklzVmlzaWJsZSA9IHRoaXMubW9kZWwuaXNWaXNpYmxlO1xuICB9XG59XG5leHBvcnQgZnVuY3Rpb24gc2hvd01vZGFsKFxuICBjb21wb25lbnROYW1lOiBzdHJpbmcsXG4gIGRhdGE6IGFueSxcbiAgb25BcHBseTogKCkgPT4gYm9vbGVhbixcbiAgb25DYW5jZWw/OiAoKSA9PiB2b2lkXG4pIHtcbiAgY29uc3QgcG9wdXBNb2RlbCA9IG5ldyBQb3B1cE1vZGVsKFxuICAgIGNvbXBvbmVudE5hbWUsXG4gICAgZGF0YSxcbiAgICBcInRvcFwiLFxuICAgIFwibGVmdFwiLFxuICAgIGZhbHNlLFxuICAgIHRydWUsXG4gICAgb25DYW5jZWwsXG4gICAgb25BcHBseVxuICApO1xuICBjb25zdCBwb3B1cFZpZXdNb2RlbDogUG9wdXBCYXNlVmlld01vZGVsID0gbmV3IFBvcHVwQmFzZVZpZXdNb2RlbChcbiAgICBwb3B1cE1vZGVsLFxuICAgIHVuZGVmaW5lZFxuICApO1xuICBwb3B1cFZpZXdNb2RlbC5pbml0aWFsaXplUG9wdXBDb250YWluZXIoKTtcbiAgY29uc3QgcG9wdXAgPSBuZXcgUG9wdXBDb250YWluZXIoe1xuICAgIGVsOiBwb3B1cFZpZXdNb2RlbC5jb250YWluZXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSksXG4gICAgcHJvcHNEYXRhOiB7IG1vZGVsOiBwb3B1cFZpZXdNb2RlbCB9LFxuICB9KTtcbiAgcG9wdXBNb2RlbC5vbkhpZGUgPSAoKSA9PiB7XG4gICAgcG9wdXAuJGRlc3Ryb3koKTtcbiAgICBwb3B1cFZpZXdNb2RlbC5kZXN0cm95UG9wdXBDb250YWluZXIoKTtcbiAgfTtcbiAgcG9wdXBWaWV3TW9kZWwubW9kZWwuaXNWaXNpYmxlID0gdHJ1ZTtcbn1cbnNldHRpbmdzLnNob3dNb2RhbCA9IHNob3dNb2RhbDtcblZ1ZS5jb21wb25lbnQoXCJzdi1wb3B1cC1jb250YWluZXJcIiwgUG9wdXBDb250YWluZXIpO1xuZXhwb3J0IGRlZmF1bHQgUG9wdXBDb250YWluZXI7XG4iLCJcblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgUHJvcCwgQ29tcG9uZW50IH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFBvcHVwQmFzZVZpZXdNb2RlbCwgUG9wdXBNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUG9wdXBDb250YWluZXIgfSBmcm9tIFwiLi9wb3B1cC1jb250YWluZXIudnVlXCI7XG5pbXBvcnQgeyBCYXNlVnVlIH0gZnJvbSBcIi4uLy4uL2Jhc2VcIjtcbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBQb3B1cCBleHRlbmRzIEJhc2VWdWUge1xuICBAUHJvcCgpIG1vZGVsOiBQb3B1cE1vZGVsO1xuICBAUHJvcCgpIHRhcmdldEVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIHBvcHVwQ29udGFpbmVyOiBhbnk7XG4gIHByaXZhdGUgcG9wdXBWaWV3TW9kZWw6IFBvcHVwQmFzZVZpZXdNb2RlbDtcbiAgcHJvdGVjdGVkIGdldE1vZGVsKCkge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIG9uTW91bnRlZCgpIHtcbiAgICB0aGlzLnBvcHVwVmlld01vZGVsID0gbmV3IFBvcHVwQmFzZVZpZXdNb2RlbChcbiAgICAgIHRoaXMubW9kZWwsXG4gICAgICB0aGlzLiRlbC5wYXJlbnRFbGVtZW50XG4gICAgKTtcbiAgICB0aGlzLnBvcHVwVmlld01vZGVsLmluaXRpYWxpemVQb3B1cENvbnRhaW5lcigpO1xuICAgIHRoaXMucG9wdXBDb250YWluZXIgPSBuZXcgUG9wdXBDb250YWluZXIoe1xuICAgICAgZWw6IHRoaXMucG9wdXBWaWV3TW9kZWwuY29udGFpbmVyLmFwcGVuZENoaWxkKFxuICAgICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpXG4gICAgICApLFxuICAgICAgcHJvcHNEYXRhOiB7IG1vZGVsOiB0aGlzLnBvcHVwVmlld01vZGVsIH0sXG4gICAgfSk7XG4gIH1cbiAgZGVzdHJveWVkKCkge1xuICAgIHRoaXMucG9wdXBDb250YWluZXIuJGRlc3Ryb3koKTtcbiAgICB0aGlzLnBvcHVwVmlld01vZGVsLmRlc3Ryb3lQb3B1cENvbnRhaW5lcigpO1xuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3YtcG9wdXBcIiwgUG9wdXApO1xuZXhwb3J0IGRlZmF1bHQgUG9wdXA7XG4iLCJcblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AsIFdhdGNoIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IGNyZWF0ZVN2ZyB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgQmFzZVZ1ZSB9IGZyb20gXCIuLi8uLi9iYXNlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBTdmdJY29uIGV4dGVuZHMgQmFzZVZ1ZSB7XG4gIEBQcm9wKClcbiAgc2l6ZTogbnVtYmVyO1xuICBAUHJvcCgpXG4gIHdpZHRoOiBudW1iZXI7XG4gIEBQcm9wKClcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIEBQcm9wKCkgaWNvbk5hbWU6IHN0cmluZztcbiAgc3ZnSWNvbkVsZW1lbnQ6IGFueTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG4gIEBXYXRjaChcInNpemVcIilcbiAgb25TaXplUHJvcGVydHlDaGFuZ2VkKCkge1xuICAgIHRoaXMub25VcGRhdGVkKCk7XG4gIH1cbiAgQFdhdGNoKFwid2lkdGhcIilcbiAgb25XaWR0aFByb3BlcnR5Q2hhbmdlZCgpIHtcbiAgICB0aGlzLm9uVXBkYXRlZCgpO1xuICB9XG4gIEBXYXRjaChcImhlaWdodFwiKVxuICBvbkhlaWdodFByb3BlcnR5Q2hhbmdlZCgpIHtcbiAgICB0aGlzLm9uVXBkYXRlZCgpO1xuICB9XG4gIEBXYXRjaChcImljb25OYW1lXCIpXG4gIG9uSWNvbk5hbWVQcm9wZXJ0eUNoYW5nZWQoKSB7XG4gICAgdGhpcy5vblVwZGF0ZWQoKTtcbiAgfVxuXG4gIG9uVXBkYXRlZCgpIHtcbiAgICBjcmVhdGVTdmcoXG4gICAgICB0aGlzLnNpemUsXG4gICAgICB0aGlzLndpZHRoLFxuICAgICAgdGhpcy5oZWlnaHQsXG4gICAgICB0aGlzLmljb25OYW1lLFxuICAgICAgdGhpcy5zdmdJY29uRWxlbWVudFxuICAgICk7XG4gIH1cblxuICBvbk1vdW50ZWQoKSB7XG4gICAgdGhpcy5zdmdJY29uRWxlbWVudCA9IHRoaXMuJHJlZnNbXCJzdmdJY29uXCJdO1xuICAgIHRoaXMub25VcGRhdGVkKCk7XG4gIH1cbn1cblxuVnVlLmNvbXBvbmVudChcInN2LXN2Zy1pY29uXCIsIFN2Z0ljb24pO1xuXG5leHBvcnQgZGVmYXVsdCBTdmdJY29uO1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgSVN1cnZleUVsZW1lbnQgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlbmRlcmVyRmFjdG9yeSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgVGl0bGVBY3Rpb25zIGV4dGVuZHMgVnVlIHtcbiAgQFByb3AoKSBlbGVtZW50OiBJU3VydmV5RWxlbWVudDtcbiAgQFByb3AoKSBjc3M6IGFueTtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdG9vbGJhcigpIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50LmdldFRpdGxlVG9vbGJhcigpO1xuICB9XG59XG5cblJlbmRlcmVyRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclJlbmRlcmVyKFxuICBcImVsZW1lbnRcIixcbiAgXCJ0aXRsZS1hY3Rpb25zXCIsXG4gIFwic3YtdGl0bGUtYWN0aW9uc1wiXG4pO1xuXG5WdWUuY29tcG9uZW50KFwic3YtdGl0bGUtYWN0aW9uc1wiLCBUaXRsZUFjdGlvbnMpO1xuZXhwb3J0IGRlZmF1bHQgVGl0bGVBY3Rpb25zO1xuIiwiXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgUXVlc3Rpb25WdWUgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUXVlc3Rpb25Db21wb3NpdGVNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUGFuZWxNb2RlbCB9IGZyb20gXCIuLi9wYW5lbFwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgQ29tcG9zaXRlIGV4dGVuZHMgUXVlc3Rpb25WdWU8UXVlc3Rpb25Db21wb3NpdGVNb2RlbD4ge1xuICBnZXQgY29udGVudFBhbmVsKCk6IFBhbmVsTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmNvbnRlbnRQYW5lbDtcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1jb21wb3NpdGVcIiwgQ29tcG9zaXRlKTtcblxuZXhwb3J0IGRlZmF1bHQgQ29tcG9zaXRlO1xuIiwiXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBRdWVzdGlvblZ1ZSB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25DdXN0b21Nb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgQ3VzdG9tIGV4dGVuZHMgUXVlc3Rpb25WdWU8UXVlc3Rpb25DdXN0b21Nb2RlbD4ge1xuICBnZXQgY29udGVudFF1ZXN0aW9uKCk6IFF1ZXN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5jb250ZW50UXVlc3Rpb247XG4gIH1cbiAgZ2V0Q29tcG9uZW50TmFtZShlbGVtZW50OiBRdWVzdGlvbik6IHN0cmluZyB7XG4gICAgaWYgKGVsZW1lbnQuY3VzdG9tV2lkZ2V0KSB7XG4gICAgICByZXR1cm4gXCJzdXJ2ZXktY3VzdG9td2lkZ2V0XCI7XG4gICAgfVxuICAgIHJldHVybiBcInN1cnZleS1cIiArIGVsZW1lbnQuZ2V0VGVtcGxhdGUoKTtcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1jdXN0b21cIiwgQ3VzdG9tKTtcblxuZXhwb3J0IGRlZmF1bHQgQ3VzdG9tO1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlLCB7IENvbXBvbmVudE9wdGlvbnMgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIEN1c3RvbVdpZGdldCBleHRlbmRzIFZ1ZSB7XG4gIEBQcm9wKCkgY3NzOiBhbnk7XG4gIEBQcm9wKCkgcXVlc3Rpb246IFF1ZXN0aW9uO1xuICBnZXQgaGFzRGVmYXVsdFJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQuaXNEZWZhdWx0UmVuZGVyIHx8IHRoaXMuaGFzVnVlQ29tcG9uZW50O1xuICB9XG4gIGdldCBoYXNIdG1sKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmN1c3RvbVdpZGdldC5odG1sVGVtcGxhdGUgPyB0cnVlIDogZmFsc2U7XG4gIH1cbiAgZ2V0IGN1c3RvbUh0bWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQuaHRtbFRlbXBsYXRlO1xuICB9XG4gIGdldCBoYXNWdWVDb21wb25lbnQoKTogYm9vbGVhbiB7XG4gICAgdmFyIG9wdGlvbnMgPSAoPGFueT5WdWUpW1wib3B0aW9uc1wiXTtcbiAgICBpZiAoIW9wdGlvbnMpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gKFxuICAgICAgb3B0aW9ucy5jb21wb25lbnRzICYmIG9wdGlvbnMuY29tcG9uZW50c1t0aGlzLnF1ZXN0aW9uLmN1c3RvbVdpZGdldC5uYW1lXVxuICAgICk7XG4gIH1cbiAgZ2V0IGNvbXBvbmVudE5hbWUoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5oYXNWdWVDb21wb25lbnQpIHJldHVybiB0aGlzLnF1ZXN0aW9uLmN1c3RvbVdpZGdldC5uYW1lO1xuICAgIHJldHVybiBcInN1cnZleS1cIiArIHRoaXMucXVlc3Rpb24uZ2V0VGVtcGxhdGUoKTtcbiAgfVxuICBtb3VudGVkKCkge1xuICAgIHRoaXMucXVlc3Rpb24uY3VzdG9tV2lkZ2V0LmFmdGVyUmVuZGVyKHRoaXMucXVlc3Rpb24sIHRoaXMuJGVsKTtcbiAgfVxuICB1cGRhdGVkKCkge1xuICAgIC8vdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQuYWZ0ZXJSZW5kZXIodGhpcy5xdWVzdGlvbiwgdGhpcy4kZWwpO1xuICB9XG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQud2lsbFVubW91bnQodGhpcy5xdWVzdGlvbiwgdGhpcy4kZWwpO1xuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LWN1c3RvbXdpZGdldFwiLCBDdXN0b21XaWRnZXQpO1xuXG5leHBvcnQgZGVmYXVsdCBDdXN0b21XaWRnZXQ7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBRdWVzdGlvblZ1ZSB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkRyb3Bkb3duTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIERyb3Bkb3duIGV4dGVuZHMgUXVlc3Rpb25WdWU8UXVlc3Rpb25Ecm9wZG93bk1vZGVsPiB7XG4gIGdldCBpc090aGVyU2VsZWN0ZWQoKSB7XG4gICAgY29uc3QgcXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uO1xuICAgIHJldHVybiBxdWVzdGlvbi5oYXNPdGhlciAmJiBxdWVzdGlvbi5pc090aGVyU2VsZWN0ZWQ7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktZHJvcGRvd25cIiwgRHJvcGRvd24pO1xuZXhwb3J0IGRlZmF1bHQgRHJvcGRvd247XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBJRWxlbWVudCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlFbGVtZW50VnVlIGV4dGVuZHMgVnVlIHtcbiAgQFByb3AoKSBjc3M6IGFueTtcbiAgQFByb3AoKSBzdXJ2ZXk6IFN1cnZleU1vZGVsO1xuICBAUHJvcCgpIGVsZW1lbnQ6IElFbGVtZW50O1xuICBnZXRDb21wb25lbnROYW1lKGVsZW1lbnQ6IFF1ZXN0aW9uKSB7XG4gICAgaWYgKGVsZW1lbnQuY3VzdG9tV2lkZ2V0KSByZXR1cm4gXCJzdXJ2ZXktY3VzdG9td2lkZ2V0XCI7XG4gICAgaWYgKGVsZW1lbnQuZ2V0VHlwZSgpID09PSBcInBhbmVsXCIgfHwgZWxlbWVudC5pc0RlZmF1bHRSZW5kZXJpbmcoKSkge1xuICAgICAgcmV0dXJuIFwic3VydmV5LVwiICsgZWxlbWVudC5nZXRUZW1wbGF0ZSgpO1xuICAgIH1cbiAgICByZXR1cm4gZWxlbWVudC5nZXRDb21wb25lbnROYW1lKCk7XG4gIH1cbiAgZ2V0Um9vdENsYXNzKGVsZW1lbnQ6IFF1ZXN0aW9uKSB7XG4gICAgbGV0IGNzc1Jvb3QgPSBlbGVtZW50LmNzc1Jvb3Q7XG4gICAgaWYgKGVsZW1lbnQuaXNSZWFkT25seSkge1xuICAgICAgY3NzUm9vdCArPSBcIiBcIiArICg8YW55PnRoaXMuZWxlbWVudCkuY3NzQ2xhc3Nlcy5kaXNhYmxlZDtcbiAgICB9XG5cbiAgICByZXR1cm4gY3NzUm9vdDtcbiAgfVxuICBnZXRDb250ZW50Q2xhc3MoZWxlbWVudDogUXVlc3Rpb24pIHtcbiAgICByZXR1cm4gZWxlbWVudC5jc3NDb250ZW50O1xuICB9XG4gIGdldCBoYXNFcnJvcnNPblRvcCgpIHtcbiAgICByZXR1cm4gIXRoaXMuZWxlbWVudC5pc1BhbmVsICYmIHRoaXMuc3VydmV5LnF1ZXN0aW9uRXJyb3JMb2NhdGlvbiA9PT0gXCJ0b3BcIjtcbiAgfVxuICBnZXQgaGFzRXJyb3JzT25Cb3R0b20oKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICF0aGlzLmVsZW1lbnQuaXNQYW5lbCAmJiB0aGlzLnN1cnZleS5xdWVzdGlvbkVycm9yTG9jYXRpb24gPT09IFwiYm90dG9tXCJcbiAgICApO1xuICB9XG4gIG1vdW50ZWQoKSB7XG4gICAgaWYgKCF0aGlzLmVsZW1lbnQuaXNQYW5lbCkge1xuICAgICAgKDxRdWVzdGlvbj50aGlzLmVsZW1lbnQpLmFmdGVyUmVuZGVyKHRoaXMuJGVsIGFzIEhUTUxFbGVtZW50KTtcbiAgICB9XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktZWxlbWVudFwiLCBTdXJ2ZXlFbGVtZW50VnVlKTtcbmV4cG9ydCBkZWZhdWx0IFN1cnZleUVsZW1lbnRWdWU7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgSUVsZW1lbnQsIFF1ZXN0aW9uLCBkb0tleTJDbGljayB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgRWxlbWVudEhlYWRlciBleHRlbmRzIFZ1ZSB7XG4gIEBQcm9wKCkgZWxlbWVudDogSUVsZW1lbnQ7XG4gIEBQcm9wKCkgY3NzOiBhbnk7XG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLmVsZW1lbnQuc3RhdGVDaGFuZ2VkQ2FsbGJhY2sgPSBudWxsO1xuICB9XG5cbiAgZ2V0VGl0bGVDbGFzcyhlbGVtZW50OiBRdWVzdGlvbikge1xuICAgIHJldHVybiBlbGVtZW50LmNzc1RpdGxlO1xuICB9XG4gIGdldEhlYWRlckNsYXNzKGVsZW1lbnQ6IFF1ZXN0aW9uKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQuY3NzSGVhZGVyO1xuICB9XG4gIGtleXVwKGV2dDogYW55KSB7XG4gICAgZG9LZXkyQ2xpY2soZXZ0KTtcbiAgfVxuICBjbGlja1RpdGxlRnVuY3Rpb24oKSB7XG4gICAgaWYodHlwZW9mICg8YW55PnRoaXMuZWxlbWVudCkuY2xpY2tUaXRsZUZ1bmN0aW9uID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICg8YW55PnRoaXMuZWxlbWVudCkuY2xpY2tUaXRsZUZ1bmN0aW9uKCk7XG4gICAgfVxuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LWVsZW1lbnQtaGVhZGVyXCIsIEVsZW1lbnRIZWFkZXIpO1xuZXhwb3J0IGRlZmF1bHQgRWxlbWVudEhlYWRlcjtcbiIsIlxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCwgV2F0Y2ggfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBRdWVzdGlvblZ1ZSB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkVtcHR5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIEVtcHR5IGV4dGVuZHMgUXVlc3Rpb25WdWU8UXVlc3Rpb25FbXB0eU1vZGVsPiB7fVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1lbXB0eVwiLCBFbXB0eSk7XG5leHBvcnQgZGVmYXVsdCBFbXB0eTtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleUVycm9yIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBFcnJvcnMgZXh0ZW5kcyBWdWUge1xuICBAUHJvcCgpIHF1ZXN0aW9uOiBRdWVzdGlvbjtcbiAgQFByb3AoKSBsb2NhdGlvbjogU3RyaW5nO1xuXG4gIGdldCBjbGFzc2VzKCkge1xuICAgIHZhciBxdWVzdGlvbiA9IHRoaXMucXVlc3Rpb247XG4gICAgdmFyIGNsYXNzZXMgPSBxdWVzdGlvbi5jc3NDbGFzc2VzXG4gICAgICA/IHF1ZXN0aW9uLmNzc0NsYXNzZXMuZXJyb3Iucm9vdFxuICAgICAgOiBcInBhbmVsLWVycm9yLXJvb3RcIjtcblxuICAgIHZhciBhZGRpdGlvbmFsQ2xhc3NlcyA9IFwiXCI7XG5cbiAgICBpZiAodGhpcy5sb2NhdGlvbiA9PT0gXCJ0b3BcIikge1xuICAgICAgYWRkaXRpb25hbENsYXNzZXMgPSBxdWVzdGlvbi5jc3NDbGFzc2VzLmVycm9yLmxvY2F0aW9uVG9wO1xuICAgIH0gZWxzZSBpZiAodGhpcy5sb2NhdGlvbiA9PT0gXCJib3R0b21cIikge1xuICAgICAgYWRkaXRpb25hbENsYXNzZXMgPSBxdWVzdGlvbi5jc3NDbGFzc2VzLmVycm9yLmxvY2F0aW9uQm90dG9tO1xuICAgIH1cblxuICAgIGlmIChhZGRpdGlvbmFsQ2xhc3NlcykgY2xhc3NlcyArPSBcIiBcIiArIGFkZGl0aW9uYWxDbGFzc2VzO1xuXG4gICAgcmV0dXJuIGNsYXNzZXM7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktZXJyb3JzXCIsIEVycm9ycyk7XG5leHBvcnQgZGVmYXVsdCBFcnJvcnM7XG4iLCJcblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBRdWVzdGlvblZ1ZSB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkV4cHJlc3Npb25Nb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgRXhwcmVzc2lvbiBleHRlbmRzIFF1ZXN0aW9uVnVlPFF1ZXN0aW9uRXhwcmVzc2lvbk1vZGVsPiB7fVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1leHByZXNzaW9uXCIsIEV4cHJlc3Npb24pO1xuZXhwb3J0IGRlZmF1bHQgRXhwcmVzc2lvbjtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AsIFdhdGNoIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgUXVlc3Rpb25WdWUgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUXVlc3Rpb25GaWxlTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IGNvbmZpcm1BY3Rpb24sIGRldGVjdElFT3JFZGdlLCBsb2FkRmlsZUZyb21CYXNlNjQgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBGaWxlIGV4dGVuZHMgUXVlc3Rpb25WdWU8UXVlc3Rpb25GaWxlTW9kZWw+IHtcbiAgb25EcmFnT3ZlciA9IChldmVudDogYW55KSA9PiB7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uaXNSZWFkT25seSkge1xuICAgICAgZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZXZlbnQuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSBcImNvcHlcIjtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9O1xuICBvbkRyb3AgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgbGV0IHNyYyA9IGV2ZW50LmRhdGFUcmFuc2ZlcjtcbiAgICB0aGlzLm9uQ2hhbmdlKHNyYyk7XG4gIH07XG4gIGRvQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB2YXIgc3JjID0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7XG4gICAgdGhpcy5vbkNoYW5nZShzcmMpO1xuICB9XG4gIGRvQ2xlYW4oZXZlbnQ6IGFueSkge1xuICAgIHZhciBxdWVzdGlvbiA9IHRoaXMucXVlc3Rpb247XG4gICAgdmFyIHNyYyA9IGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVtZW50O1xuICAgIGlmIChxdWVzdGlvbi5uZWVkQ29uZmlybVJlbW92ZUZpbGUpIHtcbiAgICAgIHZhciBpc0NvbmZpcm1lZCA9IGNvbmZpcm1BY3Rpb24ocXVlc3Rpb24uY29uZmlybVJlbW92ZUFsbE1lc3NhZ2UpO1xuICAgICAgaWYgKCFpc0NvbmZpcm1lZCkgcmV0dXJuO1xuICAgIH1cbiAgICBxdWVzdGlvbi5jbGVhcigpO1xuICAgIHNyYy5wYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJpbnB1dFwiKVswXS52YWx1ZSA9IFwiXCI7XG4gIH1cbiAgZG9SZW1vdmVGaWxlKGRhdGE6IGFueSkge1xuICAgIHZhciBxdWVzdGlvbiA9IHRoaXMucXVlc3Rpb247XG4gICAgaWYgKHF1ZXN0aW9uLm5lZWRDb25maXJtUmVtb3ZlRmlsZSkge1xuICAgICAgdmFyIGlzQ29uZmlybWVkID0gY29uZmlybUFjdGlvbihcbiAgICAgICAgcXVlc3Rpb24uZ2V0Q29uZmlybVJlbW92ZU1lc3NhZ2UoZGF0YS5uYW1lKVxuICAgICAgKTtcbiAgICAgIGlmICghaXNDb25maXJtZWQpIHJldHVybjtcbiAgICB9XG4gICAgcXVlc3Rpb24ucmVtb3ZlRmlsZShkYXRhKTtcbiAgfVxuICBkb0Rvd25sb2FkRmlsZShldmVudDogYW55LCBkYXRhOiBhbnkpIHtcbiAgICBpZiAoZGV0ZWN0SUVPckVkZ2UoKSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGxvYWRGaWxlRnJvbUJhc2U2NChkYXRhLmNvbnRlbnQsIGRhdGEubmFtZSk7XG4gICAgfVxuICB9XG4gIGdldFBsYWNlaG9sZGVyQ2xhc3MoKSB7XG4gICAgcmV0dXJuIFwiZm9ybS1jb250cm9sIFwiICsgdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnBsYWNlaG9sZGVySW5wdXQ7XG4gIH1cbiAgcHJpdmF0ZSBvbkNoYW5nZShzcmM6IGFueSkge1xuICAgIGlmICghKDxhbnk+d2luZG93KVtcIkZpbGVSZWFkZXJcIl0pIHJldHVybjtcbiAgICBpZiAoIXNyYyB8fCAhc3JjLmZpbGVzIHx8IHNyYy5maWxlcy5sZW5ndGggPCAxKSByZXR1cm47XG4gICAgbGV0IGZpbGVzID0gW107XG4gICAgbGV0IGFsbG93Q291bnQgPSB0aGlzLnF1ZXN0aW9uLmFsbG93TXVsdGlwbGUgPyBzcmMuZmlsZXMubGVuZ3RoIDogMTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFsbG93Q291bnQ7IGkrKykge1xuICAgICAgZmlsZXMucHVzaChzcmMuZmlsZXNbaV0pO1xuICAgIH1cbiAgICBzcmMudmFsdWUgPSBcIlwiO1xuICAgIHRoaXMucXVlc3Rpb24ubG9hZEZpbGVzKGZpbGVzKTtcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1maWxlXCIsIEZpbGUpO1xuZXhwb3J0IGRlZmF1bHQgRmlsZTtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFBhbmVsTW9kZWxCYXNlLCBQYW5lbE1vZGVsLCBRdWVzdGlvblJvd01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBJU3VydmV5IH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgRmxvd1BhbmVsTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIEZsb3dQYW5lbCBleHRlbmRzIFZ1ZSB7XG4gIEBQcm9wKCkgcXVlc3Rpb246IEZsb3dQYW5lbE1vZGVsO1xuICBAUHJvcCgpIGlzRWRpdE1vZGU6IEJvb2xlYW47XG4gIEBQcm9wKCkgY3NzOiBhbnk7XG4gIHByaXZhdGUgaXNDb2xsYXBzZWRWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIHJvb3ROb2RlVmFsdWU6IE5vZGU7XG5cbiAgZ2V0IHJvb3ROb2RlKCk6IE5vZGUge1xuICAgIHJldHVybiB0aGlzLnJvb3ROb2RlVmFsdWU7XG4gIH1cbiAgYmVmb3JlTW91bnQoKSB7XG4gICAgaWYgKCF0aGlzLnF1ZXN0aW9uKSByZXR1cm47XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMucXVlc3Rpb24ub25DdXN0b21IdG1sUHJvZHVjaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfTtcbiAgICB0aGlzLnF1ZXN0aW9uLm9uR2V0SHRtbEZvclF1ZXN0aW9uID0gc2VsZi5yZW5kZXJRdWVzdGlvbjtcbiAgICB0aGlzLnNldFJvb3ROb2RlKCk7XG4gIH1cbiAgcHJvdGVjdGVkIHNldFJvb3ROb2RlKCkge1xuICAgIGxldCBodG1sID0gXCI8c3Bhbj5cIiArIHRoaXMucXVlc3Rpb24ucHJvZHVjZUh0bWwoKSArIFwiPC9zcGFuPlwiO1xuICAgIGxldCBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGh0bWwsIFwidGV4dC94bWxcIik7XG4gICAgdGhpcy5yb290Tm9kZVZhbHVlID1cbiAgICAgICEhZG9jICYmIGRvYy5jaGlsZE5vZGVzLmxlbmd0aCA+IDAgPyBkb2MuY2hpbGROb2Rlc1swXSA6IG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclF1ZXN0aW9uKHF1ZXN0aW9uOiBRdWVzdGlvbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiPHF1ZXN0aW9uPlwiICsgcXVlc3Rpb24ubmFtZSArIFwiPC9xdWVzdGlvbj5cIjtcbiAgfVxuICBtb3VudGVkKCkge1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLnN1cnZleSkge1xuICAgICAgdGhpcy5xdWVzdGlvbi5zdXJ2ZXkuYWZ0ZXJSZW5kZXJQYW5lbCh0aGlzLnF1ZXN0aW9uLCB0aGlzLiRlbCBhcyBIVE1MRWxlbWVudCk7XG4gICAgfVxuICAgIHRoaXMuaXNDb2xsYXBzZWQgPSB0aGlzLnF1ZXN0aW9uLmlzQ29sbGFwc2VkO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnF1ZXN0aW9uLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFxuICAgICAgXCJzdGF0ZVwiLFxuICAgICAgZnVuY3Rpb24gKHZhbDogYW55KSB7XG4gICAgICAgIHNlbGYuaXNDb2xsYXBzZWQgPSBzZWxmLnF1ZXN0aW9uLmlzQ29sbGFwc2VkO1xuICAgICAgfVxuICAgICk7XG4gIH1cbiAgZ2V0IHJvb3RTdHlsZSgpIHtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKHRoaXMucXVlc3Rpb24ucmVuZGVyV2lkdGgpIHtcbiAgICAgICg8YW55PnJlc3VsdClbXCJmbGV4QmFzaXNcIl0gPSB0aGlzLnF1ZXN0aW9uLnJlbmRlcldpZHRoO1xuICAgICAgKDxhbnk+cmVzdWx0KVtcImZsZXhHcm93XCJdID0gMTtcbiAgICAgICg8YW55PnJlc3VsdClbXCJmbGV4U2hyaW5rXCJdID0gMTtcbiAgICAgICg8YW55PnJlc3VsdClbXCJ3aWR0aFwiXSA9IHRoaXMucXVlc3Rpb24ucmVuZGVyV2lkdGg7XG4gICAgICAoPGFueT5yZXN1bHQpW1wibWluV2lkdGhcIl0gPSB0aGlzLnF1ZXN0aW9uLm1pbldpZHRoO1xuICAgICAgKDxhbnk+cmVzdWx0KVtcIm1heFdpZHRoXCJdID0gdGhpcy5xdWVzdGlvbi5tYXhXaWR0aDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBnZXQgc2hvd0ljb24oKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucXVlc3Rpb24gJiYgKHRoaXMucXVlc3Rpb24uaXNFeHBhbmRlZCB8fCB0aGlzLnF1ZXN0aW9uLmlzQ29sbGFwc2VkKVxuICAgICk7XG4gIH1cbiAgZ2V0IHJvd3MoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24ucm93cztcbiAgfVxuICBnZXQgaGFzVGl0bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24udGl0bGUubGVuZ3RoID4gMDtcbiAgfVxuICBnZXQgc3VydmV5KCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLnN1cnZleTtcbiAgfVxuICBnZXQgaWNvbkNzcygpIHtcbiAgICB2YXIgcmVzdWx0ID0gXCJzdl9wYW5lbF9pY29uXCI7XG4gICAgaWYgKCF0aGlzLmlzQ29sbGFwc2VkKSByZXN1bHQgKz0gXCIgc3ZfZXhwYW5kZWRcIjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGdldCBpc0NvbGxhcHNlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc0NvbGxhcHNlZFZhbHVlO1xuICB9XG4gIHNldCBpc0NvbGxhcHNlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmlzQ29sbGFwc2VkVmFsdWUgPSB2YWw7XG4gIH1cbiAgY2hhbmdlRXhwYW5kZWQoKSB7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uaXNDb2xsYXBzZWQgfHwgdGhpcy5xdWVzdGlvbi5pc0V4cGFuZGVkKSB7XG4gICAgICBpZiAodGhpcy5xdWVzdGlvbi5pc0NvbGxhcHNlZCkge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uLmV4cGFuZCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5jb2xsYXBzZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBnZXRUaXRsZVN0eWxlKCkge1xuICAgIHZhciByZXN1bHQgPSB0aGlzLmNzcy5wYW5lbC50aXRsZTtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5pc0NvbGxhcHNlZCB8fCB0aGlzLnF1ZXN0aW9uLmlzRXhwYW5kZWQpIHtcbiAgICAgIHJlc3VsdCArPSBcIiBcIiArIHRoaXMuY3NzLnBhbmVsLnRpdGxlRXhwYW5kYWJsZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuXG5WdWUuY29tcG9uZW50KFwic3VydmV5LWZsb3dwYW5lbFwiLCBGbG93UGFuZWwpO1xuZXhwb3J0IGRlZmF1bHQgRmxvd1BhbmVsO1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBGbG93UGFuZWxNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgRmxvd1BhbmVsRWxlbWVudCBleHRlbmRzIFZ1ZSB7XG4gIHN0YXRpYyBpZFZhbHVlOiBudW1iZXI7XG4gIEBQcm9wKCkgbm9kZTogTm9kZTtcbiAgQFByb3AoKSBwYW5lbDogRmxvd1BhbmVsTW9kZWw7XG4gIEBQcm9wKCkgY3NzOiBhbnk7XG4gIHByaXZhdGUgZWxlbWVudElkVmFsdWU6IHN0cmluZztcbiAgcHVibGljIHF1ZXN0aW9uOiBRdWVzdGlvbiA9IG51bGw7XG4gIHB1YmxpYyB0YWdOYW1lOiBzdHJpbmcgPSBcInNwYW5cIjtcbiAgcHVibGljIG5vZGVzOiBBcnJheTxOb2RlPiA9IFtdO1xuICBwdWJsaWMgdGV4dDogc3RyaW5nID0gXCJcIjtcbiAgcHVibGljIHN0eWxlOiBhbnkgPSB7fTtcblxuICBwcml2YXRlIGdldFN0eWxlKG5vZGVUeXBlOiBzdHJpbmcpIHtcbiAgICB2YXIgc3R5bGU6IGFueSA9IHt9O1xuICAgIGlmIChub2RlVHlwZS50b0xvd2VyQ2FzZSgpID09PSBcImJcIikge1xuICAgICAgc3R5bGUuZm9udFdlaWdodCA9IFwiYm9sZFwiO1xuICAgIH1cbiAgICBpZiAobm9kZVR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJpXCIpIHtcbiAgICAgIHN0eWxlLmZvbnRTdHlsZSA9IFwiaXRhbGljXCI7XG4gICAgfVxuICAgIGlmIChub2RlVHlwZS50b0xvd2VyQ2FzZSgpID09PSBcInVcIikge1xuICAgICAgc3R5bGUudGV4dERlY29yYXRpb24gPSBcInVuZGVybGluZVwiO1xuICAgIH1cbiAgICByZXR1cm4gc3R5bGU7XG4gIH1cbiAgcHVibGljIGdldCBlbGVtZW50SWQoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuZWxlbWVudElkVmFsdWUpIHtcbiAgICAgIGlmICghRmxvd1BhbmVsRWxlbWVudC5pZFZhbHVlKSB7XG4gICAgICAgIEZsb3dQYW5lbEVsZW1lbnQuaWRWYWx1ZSA9IDA7XG4gICAgICB9XG4gICAgICBGbG93UGFuZWxFbGVtZW50LmlkVmFsdWUrKztcbiAgICAgIHRoaXMuZWxlbWVudElkVmFsdWUgPSBcImZwX2VsXCIgKyBGbG93UGFuZWxFbGVtZW50LmlkVmFsdWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmVsZW1lbnRJZFZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXQgc3VydmV5KCk6IFN1cnZleU1vZGVsIHtcbiAgICByZXR1cm4gPFN1cnZleU1vZGVsPnRoaXMucGFuZWwuc3VydmV5O1xuICB9XG4gIGJlZm9yZU1vdW50KCkge1xuICAgIGlmICghdGhpcy5wYW5lbCB8fCAhdGhpcy5ub2RlKSByZXR1cm47XG4gICAgdmFyIG5vZGVUeXBlID0gdGhpcy5ub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKCF0aGlzLmhhc1RleHRDaGlsZE5vZGVzT25seSh0aGlzLm5vZGUpKSB7XG4gICAgICB0aGlzLm5vZGVzID0gdGhpcy5nZXRDaGlsZERvbU5vZGVzKHRoaXMubm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChub2RlVHlwZSA9PSBcInF1ZXN0aW9uXCIpIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbiA9IHRoaXMucGFuZWwuZ2V0UXVlc3Rpb25CeU5hbWUodGhpcy5ub2RlLnRleHRDb250ZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudGV4dCA9IHRoaXMubm9kZS50ZXh0Q29udGVudDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG5vZGVUeXBlID09IFwiZGl2XCIgJiYgIXRoaXMucXVlc3Rpb24pIHtcbiAgICAgIHRoaXMudGFnTmFtZSA9IFwiZGl2XCI7XG4gICAgfVxuICAgIHRoaXMuc3R5bGUgPSB0aGlzLmdldFN0eWxlKG5vZGVUeXBlKTtcbiAgfVxuICAvL2R1cGxpY2F0ZWQgY29kZSBmcm9tIGVsZW1lbnQudnVlXG4gIGdldENvbXBvbmVudE5hbWUoZWxlbWVudDogUXVlc3Rpb24pIHtcbiAgICBpZiAoZWxlbWVudC5jdXN0b21XaWRnZXQpIHtcbiAgICAgIHJldHVybiBcInN1cnZleS1jdXN0b213aWRnZXRcIjtcbiAgICB9XG4gICAgcmV0dXJuIFwic3VydmV5LVwiICsgZWxlbWVudC5nZXRUZW1wbGF0ZSgpO1xuICB9XG4gIC8vIGR1cGxpY2F0ZWQgY29kZSBmcm9tIHJlYWN0cGFnZXMudHN4XG4gIHByaXZhdGUgaGFzVGV4dENoaWxkTm9kZXNPbmx5KG5vZGU6IE5vZGUpOiBib29sZWFuIHtcbiAgICB2YXIgbm9kZXMgPSBub2RlLmNoaWxkTm9kZXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKG5vZGVzW2ldLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09IFwiI3RleHRcIikgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwcml2YXRlIGdldENoaWxkRG9tTm9kZXMobm9kZTogTm9kZSk6IEFycmF5PE5vZGU+IHtcbiAgICB2YXIgZG9tTm9kZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgZG9tTm9kZXMucHVzaChub2RlLmNoaWxkTm9kZXNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gZG9tTm9kZXM7XG4gIH1cbn1cblxuVnVlLmNvbXBvbmVudChcInN1cnZleS1mbG93cGFuZWxlbGVtZW50XCIsIEZsb3dQYW5lbEVsZW1lbnQpO1xuZXhwb3J0IGRlZmF1bHQgRmxvd1BhbmVsRWxlbWVudDtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBWdWVTdXJ2ZXlNb2RlbCBhcyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCIuL3N1cnZleU1vZGVsXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlIZWFkZXIgZXh0ZW5kcyBWdWUge1xuICBAUHJvcCgpIHN1cnZleTogU3VydmV5TW9kZWw7XG5cbiAgbW91bnRlZCgpIHtcbiAgICB2YXIgZWwgPSB0aGlzLiRlbDtcbiAgICBpZiAoZWwgJiYgdGhpcy5zdXJ2ZXkpIHRoaXMuc3VydmV5LmRvQWZ0ZXJSZW5kZXJIZWFkZXIoZWwpO1xuICB9XG59XG5cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktaGVhZGVyXCIsIFN1cnZleUhlYWRlcik7XG5leHBvcnQgZGVmYXVsdCBTdXJ2ZXlIZWFkZXI7XG4iLCJcblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgUXVlc3Rpb25IdG1sTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIEh0bWwgZXh0ZW5kcyBWdWUge1xuICBAUHJvcCgpIHF1ZXN0aW9uOiBRdWVzdGlvbkh0bWxNb2RlbDtcbiAgQFByb3AoKSBjc3M6IGFueTtcbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktaHRtbFwiLCBIdG1sKTtcbmV4cG9ydCBkZWZhdWx0IEh0bWw7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgUXVlc3Rpb25JbWFnZU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkltYWdlIGV4dGVuZHMgVnVlIHtcbiAgQFByb3AoKSBxdWVzdGlvbjogUXVlc3Rpb25JbWFnZU1vZGVsO1xuICBAUHJvcCgpIGNzczogYW55O1xufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1pbWFnZVwiLCBRdWVzdGlvbkltYWdlKTtcbmV4cG9ydCBkZWZhdWx0IFF1ZXN0aW9uSW1hZ2U7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgUXVlc3Rpb25WdWUgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBJbWFnZVBpY2tlciBleHRlbmRzIFF1ZXN0aW9uVnVlPFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbD4ge1xuICBnZXRJdGVtQ2xhc3MoaXRlbTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uZ2V0SXRlbUNsYXNzKGl0ZW0pO1xuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LWltYWdlcGlja2VyXCIsIEltYWdlUGlja2VyKTtcbmV4cG9ydCBkZWZhdWx0IEltYWdlUGlja2VyO1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgUXVlc3Rpb25WdWUgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUXVlc3Rpb25NYXRyaXhNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgTWF0cml4IGV4dGVuZHMgUXVlc3Rpb25WdWU8UXVlc3Rpb25NYXRyaXhNb2RlbD4ge1xuICBjZWxsQ2xpY2socm93OiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5KSByZXR1cm47XG4gICAgcm93LnZhbHVlID0gY29sdW1uLnZhbHVlO1xuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LW1hdHJpeFwiLCBNYXRyaXgpO1xuZXhwb3J0IGRlZmF1bHQgTWF0cml4O1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIE1hdHJpeERyb3Bkb3duQ2VsbCxcbiAgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCxcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBNYXRyaXhDZWxsIGV4dGVuZHMgVnVlIHtcbiAgQFByb3AoKSBxdWVzdGlvbjogUXVlc3Rpb247XG4gIEBQcm9wKCkgY2VsbDogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbDtcblxuICBpc1Zpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZ2V0Q29tcG9uZW50TmFtZShlbGVtZW50OiBRdWVzdGlvbikge1xuICAgIGlmIChlbGVtZW50LmN1c3RvbVdpZGdldCkge1xuICAgICAgcmV0dXJuIFwic3VydmV5LWN1c3RvbXdpZGdldFwiO1xuICAgIH1cbiAgICByZXR1cm4gXCJzdXJ2ZXktXCIgKyBlbGVtZW50LmdldFR5cGUoKTtcbiAgfVxuICBnZXQgaGFzRXJyb3JzT25Ub3AoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2VsbC5zaG93RXJyb3JPblRvcDtcbiAgfVxuICBnZXQgaGFzRXJyb3JzT25Cb3R0b20oKSB7XG4gICAgcmV0dXJuIHRoaXMuY2VsbC5zaG93RXJyb3JPbkJvdHRvbTtcbiAgfVxuICBnZXRIZWFkZXJzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY2VsbC5oZWFkZXJzO1xuICB9XG4gIGdldENlbGxTdHlsZSgpIHtcbiAgICBpZiAoISF0aGlzLmNlbGwud2lkdGggfHwgISF0aGlzLmNlbGwubWluV2lkdGgpXG4gICAgICByZXR1cm4geyB3aWR0aDogdGhpcy5jZWxsLndpZHRoLCBtaW5XaWR0aDogdGhpcy5jZWxsLm1pbldpZHRoIH07XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgZ2V0SXRlbUNsYXNzKGl0ZW06IGFueSkge1xuICAgIHZhciBjc3NDbGFzc2VzID0gdGhpcy5jZWxsLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIGlzRGlzYWJsZWQgPSB0aGlzLmNlbGwucXVlc3Rpb24uaXNSZWFkT25seSB8fCAhaXRlbS5pc0VuYWJsZWQ7XG4gICAgdmFyIGlzQ2hlY2tlZCA9IGl0ZW0udmFsdWUgPT09IHRoaXMuY2VsbC5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlO1xuICAgIHZhciBhbGxvd0hvdmVyID0gIWlzRGlzYWJsZWQgJiYgIWlzQ2hlY2tlZDtcbiAgICB2YXIgaXRlbUNsYXNzID0gdGhpcy5jZWxsLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbTtcbiAgICBpZiAoaXNEaXNhYmxlZCkgaXRlbUNsYXNzICs9IFwiIFwiICsgY3NzQ2xhc3Nlcy5pdGVtRGlzYWJsZWQ7XG4gICAgaWYgKGlzQ2hlY2tlZCkgaXRlbUNsYXNzICs9IFwiIFwiICsgY3NzQ2xhc3Nlcy5pdGVtQ2hlY2tlZDtcbiAgICBpZiAoYWxsb3dIb3ZlcikgaXRlbUNsYXNzICs9IFwiIFwiICsgY3NzQ2xhc3Nlcy5pdGVtSG92ZXI7XG4gICAgcmV0dXJuIGl0ZW1DbGFzcztcbiAgfVxuICBtb3VudGVkKCkge1xuICAgIGlmICghdGhpcy5jZWxsLmhhc1F1ZXN0aW9uIHx8ICF0aGlzLnF1ZXN0aW9uIHx8ICF0aGlzLnF1ZXN0aW9uLnN1cnZleSlcbiAgICAgIHJldHVybjtcbiAgICB0aGlzLm9uVmlzaWJpbGl0eUNoYW5nZWQoKTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5jZWxsLnF1ZXN0aW9uLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFxuICAgICAgXCJpc1Zpc2libGVcIixcbiAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2VsZi5vblZpc2liaWxpdHlDaGFuZ2VkKCk7XG4gICAgICB9XG4gICAgKTtcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIGNlbGw6IHRoaXMuY2VsbC5jZWxsLFxuICAgICAgY2VsbFF1ZXN0aW9uOiB0aGlzLmNlbGwucXVlc3Rpb24sXG4gICAgICBodG1sRWxlbWVudDogdGhpcy4kZWwsXG4gICAgICByb3c6IHRoaXMuY2VsbC5yb3csXG4gICAgICBjb2x1bW46IHRoaXMuY2VsbC5jZWxsLmNvbHVtbixcbiAgICB9O1xuICAgIHRoaXMucXVlc3Rpb24uc3VydmV5Lm1hdHJpeEFmdGVyQ2VsbFJlbmRlcih0aGlzLnF1ZXN0aW9uLCBvcHRpb25zKTtcbiAgfVxuICBwcml2YXRlIG9uVmlzaWJpbGl0eUNoYW5nZWQoKSB7XG4gICAgdGhpcy5pc1Zpc2libGUgPSB0aGlzLmNlbGwucXVlc3Rpb24uaXNWaXNpYmxlO1xuICB9XG59XG5cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktbWF0cml4Y2VsbFwiLCBNYXRyaXhDZWxsKTtcbmV4cG9ydCBkZWZhdWx0IE1hdHJpeENlbGw7XG4iLCJcblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgUXVlc3Rpb25WdWUgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgTWF0cml4RHJvcGRvd24gZXh0ZW5kcyBRdWVzdGlvblZ1ZTxRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWw+IHt9XG5cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktbWF0cml4ZHJvcGRvd25cIiwgTWF0cml4RHJvcGRvd24pO1xuZXhwb3J0IGRlZmF1bHQgTWF0cml4RHJvcGRvd247XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBRdWVzdGlvblZ1ZSB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIE1hdHJpeER5bmFtaWMgZXh0ZW5kcyBRdWVzdGlvblZ1ZTxRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbD4ge1xuICBhZGRSb3dDbGljaygpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLmFkZFJvd1VJKCk7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktbWF0cml4ZHluYW1pY1wiLCBNYXRyaXhEeW5hbWljKTtcbmV4cG9ydCBkZWZhdWx0IE1hdHJpeER5bmFtaWM7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLFxuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZSxcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBCYXNlVnVlIH0gZnJvbSBcIi4vYmFzZVwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgTWF0cml4VGFibGUgZXh0ZW5kcyBCYXNlVnVlIHtcbiAgQFByb3AoKSBxdWVzdGlvbjogUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZTtcbiAgZ2V0IHRhYmxlKCk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFRhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFRhYmxlO1xuICB9XG4gIHByb3RlY3RlZCBnZXRNb2RlbCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFRhYmxlO1xuICB9XG59XG5cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktbWF0cml4dGFibGVcIiwgTWF0cml4VGFibGUpO1xuZXhwb3J0IGRlZmF1bHQgTWF0cml4VGFibGU7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIFF1ZXN0aW9uVnVlIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBNdWx0aXBsZVRleHQgZXh0ZW5kcyBRdWVzdGlvblZ1ZTxRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsPiB7XG4gIGdldENvbXBvbmVudE5hbWUocXVlc3Rpb246IFF1ZXN0aW9uKSB7XG4gICAgaWYgKHF1ZXN0aW9uLmN1c3RvbVdpZGdldCkge1xuICAgICAgcmV0dXJuIFwic3VydmV5LWN1c3RvbXdpZGdldFwiO1xuICAgIH1cbiAgICByZXR1cm4gXCJzdXJ2ZXktdGV4dFwiO1xuICB9XG4gIGdldCBoYXNFcnJvcnNPblRvcCgpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5zdXJ2ZXkucXVlc3Rpb25FcnJvckxvY2F0aW9uID09PSBcInRvcFwiO1xuICB9XG4gIGdldCBoYXNFcnJvcnNPbkJvdHRvbSgpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5zdXJ2ZXkucXVlc3Rpb25FcnJvckxvY2F0aW9uID09PSBcImJvdHRvbVwiO1xuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LW11bHRpcGxldGV4dFwiLCBNdWx0aXBsZVRleHQpO1xuZXhwb3J0IGRlZmF1bHQgTXVsdGlwbGVUZXh0O1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCwgV2F0Y2ggfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgU3VydmV5TW9kZWwsIEJhc2UsIFBhZ2VNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgQmFzZVZ1ZSB9IGZyb20gXCIuL2Jhc2VcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIE5hdmlnYXRpb24gZXh0ZW5kcyBCYXNlVnVlIHtcbiAgcHJpdmF0ZSBtb3VzZURvd25QYWdlOiBQYWdlTW9kZWw7XG4gIHNob3dQcmV2QnRuOiBib29sZWFuID0gdHJ1ZTtcbiAgc2hvd05leHRCdG46IGJvb2xlYW4gPSB0cnVlO1xuICBzaG93Q29tcGxldGVCdG46IGJvb2xlYW4gPSB0cnVlO1xuICBAUHJvcCgpIHN1cnZleTogU3VydmV5TW9kZWw7XG4gIEBQcm9wKCkgY3NzOiBhbnk7XG4gIHByb3RlY3RlZCBnZXRNb2RlbCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXk7XG4gIH1cbiAgQFdhdGNoKFwic3VydmV5XCIpXG4gIG9uUHJvcGVydHlDaGFuZ2VkKHZhbHVlOiBzdHJpbmcsIG9sZFZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLm9uQ3JlYXRlZCgpO1xuICAgIHRoaXMudXBkYXRlU2hvd0J1dHRvbnMoKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25Nb3VudGVkKCkge1xuICAgIHRoaXMuc3VydmV5Lm9uQ3VycmVudFBhZ2VDaGFuZ2VkLmFkZCgoc2VuZGVyLCBvcHRpb25zKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVNob3dCdXR0b25zKCk7XG4gICAgfSk7XG4gICAgdGhpcy51cGRhdGVTaG93QnV0dG9ucygpO1xuICB9XG4gIHByaXZhdGUgdXBkYXRlU2hvd0J1dHRvbnMoKSB7XG4gICAgdGhpcy5zaG93UHJldkJ0biA9ICF0aGlzLnN1cnZleS5pc0ZpcnN0UGFnZSAmJiB0aGlzLnN1cnZleS5pc1Nob3dQcmV2QnV0dG9uO1xuICAgIHRoaXMuc2hvd05leHRCdG4gPSAhdGhpcy5zdXJ2ZXkuaXNMYXN0UGFnZTtcbiAgICB0aGlzLnNob3dDb21wbGV0ZUJ0biA9IHRoaXMuc3VydmV5LmlzTGFzdFBhZ2U7XG4gIH1cbiAgbmV4dEJ1dHRvbk1vdXNlRG93bigpIHtcbiAgICB0aGlzLm1vdXNlRG93blBhZ2UgPSB0aGlzLnN1cnZleS5jdXJyZW50UGFnZTtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkubmF2aWdhdGlvbk1vdXNlRG93bigpO1xuICB9XG4gIGJ1dHRvbk1vdXNlRG93bigpIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkubmF2aWdhdGlvbk1vdXNlRG93bigpO1xuICB9XG4gIHByZXZQYWdlKCkge1xuICAgIHRoaXMuc3VydmV5LnByZXZQYWdlKCk7XG4gIH1cbiAgbmV4dFBhZ2UoKSB7XG4gICAgaWYgKCEhdGhpcy5tb3VzZURvd25QYWdlICYmIHRoaXMubW91c2VEb3duUGFnZSAhPT0gdGhpcy5zdXJ2ZXkuY3VycmVudFBhZ2UpXG4gICAgICByZXR1cm47XG4gICAgdGhpcy5tb3VzZURvd25QYWdlID0gbnVsbDtcbiAgICB0aGlzLnN1cnZleS5uZXh0UGFnZSgpO1xuICB9XG4gIGNvbXBsZXRlTGFzdFBhZ2UoKSB7XG4gICAgdGhpcy5zdXJ2ZXkuY29tcGxldGVMYXN0UGFnZSgpO1xuICB9XG4gIHNob3dQcmV2aWV3KCkge1xuICAgIHRoaXMuc3VydmV5LnNob3dQcmV2aWV3KCk7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktbmF2aWdhdGlvblwiLCBOYXZpZ2F0aW9uKTtcbmV4cG9ydCBkZWZhdWx0IE5hdmlnYXRpb247XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBPdGhlckNob2ljZSBleHRlbmRzIFZ1ZSB7XG4gIEBQcm9wKCkgcXVlc3Rpb246IFF1ZXN0aW9uO1xuICBAUHJvcCgpIGNvbW1lbnRDbGFzczogYW55O1xuICBjaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb24uY29tbWVudCA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgfVxuICBrZXl1cChldmVudDogYW55KSB7XG4gICAgaWYgKCF0aGlzLnF1ZXN0aW9uLmlzU3VydmV5SW5wdXRUZXh0VXBkYXRlKSByZXR1cm47XG4gICAgdGhpcy5xdWVzdGlvbi5jb21tZW50ID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LW90aGVyLWNob2ljZVwiLCBPdGhlckNob2ljZSk7XG5leHBvcnQgZGVmYXVsdCBPdGhlckNob2ljZTtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wLCBXYXRjaCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUGFnZU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBCYXNlVnVlIH0gZnJvbSBcIi4vYmFzZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgUGFnZSBleHRlbmRzIEJhc2VWdWUge1xuICBAUHJvcCgpIHN1cnZleTogU3VydmV5TW9kZWw7XG4gIEBQcm9wKCkgcGFnZTogUGFnZU1vZGVsO1xuICBAUHJvcCgpIGNzczogT2JqZWN0O1xuXG4gIGlzQ3VycmVudFBhZ2VDaGFuZ2VkOiBib29sZWFuID0gZmFsc2U7XG4gIEBXYXRjaChcInBhZ2VcIilcbiAgb25QYWdlUHJvcGVydHlDaGFuZ2VkKHZhbHVlOiBzdHJpbmcsIG9sZFZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmlzQ3VycmVudFBhZ2VDaGFuZ2VkID0gdHJ1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0TW9kZWwoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucGFnZTtcbiAgfVxuICBwcm90ZWN0ZWQgb25Nb3VudGVkKCkge1xuICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgdGhpcy5zdXJ2ZXkuYWZ0ZXJSZW5kZXJQYWdlKHRoaXMuJGVsIGFzIEhUTUxFbGVtZW50KTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIG9uVXBkYXRlZCgpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgc2VsZi5zdXJ2ZXkuYWZ0ZXJSZW5kZXJQYWdlKHRoaXMuJGVsIGFzIEhUTUxFbGVtZW50KTtcbiAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpIHtcbiAgICAgIGlmICh0aGlzLmlzQ3VycmVudFBhZ2VDaGFuZ2VkKSB7XG4gICAgICAgIHRoaXMuaXNDdXJyZW50UGFnZUNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgc2VsZi5zdXJ2ZXkuc2Nyb2xsVG9Ub3BPblBhZ2VDaGFuZ2UoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBnZXQgc2hvd0hlYWRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5wYWdlLl9zaG93VGl0bGU7XG4gIH1cbiAgZ2V0IHNob3dEZXNjcmlwdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5wYWdlLl9zaG93RGVzY3JpcHRpb247XG4gIH1cbiAgZ2V0IG51bSgpIHtcbiAgICByZXR1cm4gdGhpcy5wYWdlLm51bSA+IDAgPyB0aGlzLnBhZ2UubnVtICsgXCIuIFwiIDogXCJcIjtcbiAgfVxuICBnZXQgcm93cygpOiBBcnJheTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5wYWdlLnJvd3M7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktcGFnZVwiLCBQYWdlKTtcbmV4cG9ydCBkZWZhdWx0IFBhZ2U7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgUGFuZWxNb2RlbEJhc2UsIFBhbmVsTW9kZWwsIGRvS2V5MkNsaWNrIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBJU3VydmV5LCBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBCYXNlVnVlIH0gZnJvbSBcIi4vYmFzZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgUGFuZWwgZXh0ZW5kcyBCYXNlVnVlIHtcbiAgQFByb3AoKSBxdWVzdGlvbjogUGFuZWxNb2RlbDtcbiAgQFByb3AoKSBpc0VkaXRNb2RlOiBCb29sZWFuO1xuICBAUHJvcCgpIGNzczogYW55O1xuXG4gIHByaXZhdGUgaXNDb2xsYXBzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwcm90ZWN0ZWQgZ2V0TW9kZWwoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIG9uTW91bnRlZCgpIHtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5zdXJ2ZXkpIHtcbiAgICAgIHRoaXMucXVlc3Rpb24uc3VydmV5LmFmdGVyUmVuZGVyUGFuZWwoXG4gICAgICAgIHRoaXMucXVlc3Rpb24sXG4gICAgICAgIHRoaXMuJGVsIGFzIEhUTUxFbGVtZW50XG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmlzQ29sbGFwc2VkID0gdGhpcy5xdWVzdGlvbi5pc0NvbGxhcHNlZDtcblxuICAgIHRoaXMucXVlc3Rpb24uc3RhdGVDaGFuZ2VkQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICB0aGlzLmlzQ29sbGFwc2VkID0gdGhpcy5xdWVzdGlvbi5pc0NvbGxhcHNlZDtcbiAgICB9O1xuICB9XG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5xdWVzdGlvbi5zdGF0ZUNoYW5nZWRDYWxsYmFjayA9IG51bGw7XG4gIH1cbiAgZ2V0IHJvb3RTdHlsZSgpIHtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKHRoaXMucXVlc3Rpb24ucmVuZGVyV2lkdGgpIHtcbiAgICAgICg8YW55PnJlc3VsdClbXCJmbGV4QmFzaXNcIl0gPSB0aGlzLnF1ZXN0aW9uLnJlbmRlcldpZHRoO1xuICAgICAgKDxhbnk+cmVzdWx0KVtcImZsZXhHcm93XCJdID0gMTtcbiAgICAgICg8YW55PnJlc3VsdClbXCJmbGV4U2hyaW5rXCJdID0gMTtcbiAgICAgICg8YW55PnJlc3VsdClbXCJ3aWR0aFwiXSA9IHRoaXMucXVlc3Rpb24ucmVuZGVyV2lkdGg7XG4gICAgICAoPGFueT5yZXN1bHQpW1wibWluV2lkdGhcIl0gPSB0aGlzLnF1ZXN0aW9uLm1pbldpZHRoO1xuICAgICAgKDxhbnk+cmVzdWx0KVtcIm1heFdpZHRoXCJdID0gdGhpcy5xdWVzdGlvbi5tYXhXaWR0aDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBnZXQgc2hvd0ljb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uaXNFeHBhbmRlZCB8fCB0aGlzLnF1ZXN0aW9uLmlzQ29sbGFwc2VkO1xuICB9XG4gIGdldCByb3dzKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLnJvd3M7XG4gIH1cbiAgZ2V0IGhhc1RpdGxlKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLnRpdGxlLmxlbmd0aCA+IDA7XG4gIH1cbiAgZ2V0IHN1cnZleSgpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5zdXJ2ZXk7XG4gIH1cbiAgZ2V0IGljb25Dc3MoKSB7XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMuY3NzLnBhbmVsLmljb247XG4gICAgaWYgKCF0aGlzLmlzQ29sbGFwc2VkKSByZXN1bHQgKz0gXCIgXCIgKyB0aGlzLmNzcy5wYW5lbC5pY29uRXhwYW5kZWQ7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBrZXl1cChldnQ6IGFueSkge1xuICAgIGRvS2V5MkNsaWNrKGV2dCk7XG4gIH1cbiAgY2FuY2VsUHJldmlldygpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLmNhbmNlbFByZXZpZXcoKTtcbiAgfVxuICBnZXQgcmVxdWlyZWRUZXh0Q3NzKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVxdWlyZWRUZXh0IHx8XG4gICAgICB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucGFuZWwucmVxdWlyZWRUZXh0XG4gICAgKTtcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1wYW5lbFwiLCBQYW5lbCk7XG5leHBvcnQgZGVmYXVsdCBQYW5lbDtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBRdWVzdGlvblZ1ZSB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBQYW5lbE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgUGFuZWxEeW5hbWljIGV4dGVuZHMgUXVlc3Rpb25WdWU8UXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbD4ge1xuICBnZXQgcmVuZGVyZWRQYW5lbHMoKSB7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uaXNSZW5kZXJNb2RlTGlzdCkgcmV0dXJuIHRoaXMucXVlc3Rpb24ucGFuZWxzO1xuICAgIHZhciBwYW5lbHMgPSBbXTtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5jdXJyZW50UGFuZWwpIHtcbiAgICAgIHBhbmVscy5wdXNoKHRoaXMucXVlc3Rpb24uY3VycmVudFBhbmVsKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhbmVscztcbiAgfVxuICBhZGRQYW5lbENsaWNrKCkge1xuICAgIHRoaXMucXVlc3Rpb24uYWRkUGFuZWwoKTtcbiAgfVxuICBnZXRCdXR0b25BZGRDc3MocXVlc3Rpb246IFF1ZXN0aW9uKSB7XG4gICAgdmFyIGJ0bkNsYXNzZXMgPVxuICAgICAgcXVlc3Rpb24uY3NzQ2xhc3Nlcy5idXR0b24gKyBcIiBcIiArIHF1ZXN0aW9uLmNzc0NsYXNzZXMuYnV0dG9uQWRkO1xuXG4gICAgaWYgKHRoaXMucXVlc3Rpb24ucmVuZGVyTW9kZSA9PT0gXCJsaXN0XCIpIHtcbiAgICAgIGJ0bkNsYXNzZXMgKz0gXCIgXCIgKyBxdWVzdGlvbi5jc3NDbGFzc2VzLmJ1dHRvbkFkZCArIFwiLS1saXN0LW1vZGVcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gYnRuQ2xhc3NlcztcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1wYW5lbGR5bmFtaWNcIiwgUGFuZWxEeW5hbWljKTtcbmV4cG9ydCBkZWZhdWx0IFBhbmVsRHluYW1pYztcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBQYW5lbE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgUGFuZWxEeW5hbWljUHJvZ3Jlc3MgZXh0ZW5kcyBWdWUge1xuICBAUHJvcCgpIHF1ZXN0aW9uOiBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsO1xuXG4gIGdldCBjc3NDbGFzcygpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5pc1Byb2dyZXNzVG9wU2hvd2luZ1xuICAgICAgPyB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJvZ3Jlc3NUb3BcbiAgICAgIDogdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnByb2dyZXNzQm90dG9tO1xuICB9XG4gIGdldCByYW5nZU1heCgpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5wYW5lbENvdW50IC0gMTtcbiAgfVxuICBhZGRQYW5lbENsaWNrKCkge1xuICAgIHRoaXMucXVlc3Rpb24uYWRkUGFuZWxVSSgpO1xuICB9XG4gIHByZXZQYW5lbENsaWNrKCkge1xuICAgIHRoaXMucXVlc3Rpb24uZ29Ub1ByZXZQYW5lbCgpO1xuICB9XG4gIG5leHRQYW5lbENsaWNrKCkge1xuICAgIHRoaXMucXVlc3Rpb24uZ29Ub05leHRQYW5lbCgpO1xuICB9XG5cbiAgY2hhbmdlUmFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb24uY3VycmVudEluZGV4ID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICB9XG5cbiAgZ2V0QnV0dG9uQWRkQ3NzKHF1ZXN0aW9uOiBRdWVzdGlvbikge31cblxuICBnZXRCdXR0b25QcmV2Q3NzKHF1ZXN0aW9uOiBRdWVzdGlvbikge1xuICAgIHZhciBidG5DbGFzc2VzID0gcXVlc3Rpb24uY3NzQ2xhc3Nlcy5idXR0b25QcmV2O1xuICAgIGlmICghcXVlc3Rpb24uaXNQcmV2QnV0dG9uU2hvd2luZykge1xuICAgICAgYnRuQ2xhc3NlcyArPSBcIiBcIiArIHF1ZXN0aW9uLmNzc0NsYXNzZXMuYnV0dG9uUHJldiArIFwiLS1kaXNhYmxlZFwiO1xuICAgIH1cbiAgICByZXR1cm4gYnRuQ2xhc3NlcztcbiAgfVxuXG4gIGdldEJ1dHRvbk5leHRDc3MocXVlc3Rpb246IFF1ZXN0aW9uKSB7XG4gICAgdmFyIGJ0bkNsYXNzZXMgPSBxdWVzdGlvbi5jc3NDbGFzc2VzLmJ1dHRvbk5leHQ7XG4gICAgaWYgKCFxdWVzdGlvbi5pc05leHRCdXR0b25TaG93aW5nKSB7XG4gICAgICBidG5DbGFzc2VzICs9IFwiIFwiICsgcXVlc3Rpb24uY3NzQ2xhc3Nlcy5idXR0b25OZXh0ICsgXCItLWRpc2FibGVkXCI7XG4gICAgfVxuICAgIHJldHVybiBidG5DbGFzc2VzO1xuICB9XG5cbiAgZ2V0IHByb2dyZXNzKCkge1xuICAgIHJldHVybiAodGhpcy5xdWVzdGlvbi5jdXJyZW50SW5kZXggLyB0aGlzLnJhbmdlTWF4KSAqIDEwMCArIFwiJVwiO1xuICB9XG59XG5cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktcGFuZWxkeW5hbWljcHJvZ3Jlc3NcIiwgUGFuZWxEeW5hbWljUHJvZ3Jlc3MpO1xuZXhwb3J0IGRlZmF1bHQgUGFuZWxEeW5hbWljUHJvZ3Jlc3M7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBQYW5lbE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBJU3VydmV5IH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBQYW5lbER5bmFtaWNSZW1vdmUgZXh0ZW5kcyBWdWUge1xuICBAUHJvcCgpIHF1ZXN0aW9uOiBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsO1xuICBAUHJvcCgpIHBhbmVsOiBQYW5lbE1vZGVsO1xuICBwcml2YXRlIGlzQ29sbGFwc2VkVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMuaXNDb2xsYXBzZWQgPSB0aGlzLnBhbmVsLmlzQ29sbGFwc2VkO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnBhbmVsLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFxuICAgICAgXCJzdGF0ZVwiLFxuICAgICAgZnVuY3Rpb24odmFsOiBhbnkpIHtcbiAgICAgICAgc2VsZi5pc0NvbGxhcHNlZCA9IHNlbGYucGFuZWwuaXNDb2xsYXBzZWQ7XG4gICAgICB9LFxuICAgICAgXCJidXR0b25cIlxuICAgICk7XG4gIH1cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLnBhbmVsLnVuUmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJzdGF0ZVwiLCBcImJ1dHRvblwiKTtcbiAgfVxuICByZW1vdmVQYW5lbENsaWNrKHBhbmVsOiBhbnkpIHtcbiAgICBpZiAoIXRoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5KSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uLnJlbW92ZVBhbmVsVUkocGFuZWwpO1xuICAgIH1cbiAgfVxuICBnZXQgaXNDb2xsYXBzZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNDb2xsYXBzZWRWYWx1ZTtcbiAgfVxuICBzZXQgaXNDb2xsYXBzZWQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5pc0NvbGxhcHNlZFZhbHVlID0gdmFsO1xuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LXBhbmVsZHluYW1pY3JlbW92ZVwiLCBQYW5lbER5bmFtaWNSZW1vdmUpO1xuZXhwb3J0IGRlZmF1bHQgUGFuZWxEeW5hbWljUmVtb3ZlO1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBQcm9ncmVzcyBleHRlbmRzIFZ1ZSB7XG4gIEBQcm9wKCkgc3VydmV5OiBTdXJ2ZXlNb2RlbDtcbiAgQFByb3AoKSBjc3M6IGFueTtcbiAgZ2V0IHByb2dyZXNzKCkge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5wcm9ncmVzc1ZhbHVlICsgXCIlXCI7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdi1wcm9ncmVzcy1wYWdlc1wiLCBQcm9ncmVzcyk7XG5WdWUuY29tcG9uZW50KFwic3YtcHJvZ3Jlc3MtcXVlc3Rpb25zXCIsIFByb2dyZXNzKTtcblZ1ZS5jb21wb25lbnQoXCJzdi1wcm9ncmVzcy1jb3JyZWN0UXVlc3Rpb25zXCIsIFByb2dyZXNzKTtcblZ1ZS5jb21wb25lbnQoXCJzdi1wcm9ncmVzcy1yZXF1aXJlZFF1ZXN0aW9uc1wiLCBQcm9ncmVzcyk7XG5leHBvcnQgZGVmYXVsdCBQcm9ncmVzcztcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVByb2dyZXNzQnV0dG9uc01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBQcm9ncmVzc0J1dHRvbnMgZXh0ZW5kcyBWdWUge1xuICBAUHJvcCgpIHN1cnZleTogU3VydmV5TW9kZWw7XG4gIEBQcm9wKCkgY3NzOiBhbnk7XG4gIHB1YmxpYyBoYXNTY3JvbGxlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIHByb2dyZXNzQnV0dG9uc01vZGVsOiBTdXJ2ZXlQcm9ncmVzc0J1dHRvbnNNb2RlbDtcbiAgcHJpdmF0ZSB1cGRhdGVTY3JvbGxlcjogYW55ID0gdW5kZWZpbmVkO1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMucHJvZ3Jlc3NCdXR0b25zTW9kZWwgPSBuZXcgU3VydmV5UHJvZ3Jlc3NCdXR0b25zTW9kZWwodGhpcy5zdXJ2ZXkpO1xuICB9XG4gIG1vdW50ZWQoKSB7XG4gICAgbGV0IGxpc3RDb250YWluZXJFbGVtZW50OiBhbnkgPSB0aGlzLiRyZWZzW1wicHJvZ3Jlc3NCdXR0b25zTGlzdENvbnRhaW5lclwiXTtcbiAgICB0aGlzLnVwZGF0ZVNjcm9sbGVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy5oYXNTY3JvbGxlciA9XG4gICAgICAgIGxpc3RDb250YWluZXJFbGVtZW50LnNjcm9sbFdpZHRoID4gbGlzdENvbnRhaW5lckVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgfSwgMTAwKTtcbiAgfVxuICBwdWJsaWMgaXNMaXN0RWxlbWVudENsaWNrYWJsZShpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvZ3Jlc3NCdXR0b25zTW9kZWwuaXNMaXN0RWxlbWVudENsaWNrYWJsZShpbmRleCk7XG4gIH1cbiAgcHVibGljIGdldExpc3RFbGVtZW50Q3NzKGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb2dyZXNzQnV0dG9uc01vZGVsLmdldExpc3RFbGVtZW50Q3NzKGluZGV4KTtcbiAgfVxuICBwdWJsaWMgY2xpY2tMaXN0RWxlbWVudChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5wcm9ncmVzc0J1dHRvbnNNb2RlbC5jbGlja0xpc3RFbGVtZW50KGluZGV4KTtcbiAgfVxuICBwdWJsaWMgZ2V0U2Nyb2xsQnV0dG9uQ3NzKGhhc1Njcm9sbGVyOiBib29sZWFuLCBpc0xlZnRTY3JvbGw6IGJvb2xlYW4pOiBhbnkge1xuICAgIGxldCBzY3JvbGxDc3M6IHN0cmluZyA9IGlzTGVmdFNjcm9sbFxuICAgICAgPyB0aGlzLmNzcy5wcm9ncmVzc0J1dHRvbnNJbWFnZUJ1dHRvbkxlZnRcbiAgICAgIDogdGhpcy5jc3MucHJvZ3Jlc3NCdXR0b25zSW1hZ2VCdXR0b25SaWdodDtcbiAgICBpZiAoIWhhc1Njcm9sbGVyKVxuICAgICAgc2Nyb2xsQ3NzICs9IFwiIFwiICsgdGhpcy5jc3MucHJvZ3Jlc3NCdXR0b25zSW1hZ2VCdXR0b25IaWRkZW47XG4gICAgcmV0dXJuIHNjcm9sbENzcztcbiAgfVxuICBwdWJsaWMgY2xpY2tTY3JvbGxCdXR0b24oaXNMZWZ0U2Nyb2xsOiBib29sZWFuKTogdm9pZCB7XG4gICAgbGV0IGxpc3RDb250YWluZXJFbGVtZW50OiBhbnkgPSB0aGlzLiRyZWZzW1wicHJvZ3Jlc3NCdXR0b25zTGlzdENvbnRhaW5lclwiXTtcbiAgICBsaXN0Q29udGFpbmVyRWxlbWVudC5zY3JvbGxMZWZ0ICs9IChpc0xlZnRTY3JvbGwgPyAtMSA6IDEpICogNzA7XG4gIH1cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMudXBkYXRlU2Nyb2xsZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy51cGRhdGVTY3JvbGxlcik7XG4gICAgICB0aGlzLnVwZGF0ZVNjcm9sbGVyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxufVxuXG5WdWUuY29tcG9uZW50KFwic3YtcHJvZ3Jlc3MtYnV0dG9uc1wiLCBQcm9ncmVzc0J1dHRvbnMpO1xuZXhwb3J0IGRlZmF1bHQgUHJvZ3Jlc3NCdXR0b25zO1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgUXVlc3Rpb25WdWUgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUXVlc3Rpb25SYWRpb2dyb3VwTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIFJhZGlvZ3JvdXAgZXh0ZW5kcyBRdWVzdGlvblZ1ZTxRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbD4ge1xuICBnZXQgY2hvaWNlc0NvdW50KCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzLmxlbmd0aCAtIDE7XG4gIH1cbiAgZ2V0SXRlbUNsYXNzKGl0ZW06IGFueSkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmdldEl0ZW1DbGFzcyhpdGVtKTtcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1yYWRpb2dyb3VwXCIsIFJhZGlvZ3JvdXApO1xuZXhwb3J0IGRlZmF1bHQgUmFkaW9ncm91cDtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IHsgSXRlbVZhbHVlLCBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBCYXNlVnVlIH0gZnJvbSBcIi4vYmFzZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgUmFkaW9ncm91cEl0ZW0gZXh0ZW5kcyBCYXNlVnVlIHtcbiAgQFByb3AoKSBxdWVzdGlvbjogYW55O1xuICBAUHJvcCgpIGl0ZW06IEl0ZW1WYWx1ZTtcbiAgQFByb3AoKSBpbmRleDogYW55O1xuICBAUHJvcCgpIGhpZGVMYWJlbDogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIGdldE1vZGVsKCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cbiAgZ2V0TGFiZWxDbGFzcyhpdGVtOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5nZXRMYWJlbENsYXNzKGl0ZW0pO1xuICB9XG4gIGdldENvbnRyb2xMYWJlbENsYXNzKGl0ZW06IGFueSkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmdldENvbnRyb2xMYWJlbENsYXNzKGl0ZW0pO1xuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LXJhZGlvZ3JvdXAtaXRlbVwiLCBSYWRpb2dyb3VwSXRlbSk7XG5leHBvcnQgZGVmYXVsdCBSYWRpb2dyb3VwSXRlbTtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIFJhbmtpbmdJdGVtIGV4dGVuZHMgVnVlIHtcbiAgQFByb3AoKSBpbmRleDogbnVtYmVyO1xuICBAUHJvcCgpIHRleHQ6IHN0cmluZztcbiAgQFByb3AoKSBoYW5kbGVLZXlkb3duOiAoKT0+e307XG4gIEBQcm9wKCkgY3NzQ2xhc3NlczogYW55XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LXJhbmtpbmctaXRlbVwiLCBSYW5raW5nSXRlbSk7XG5leHBvcnQgZGVmYXVsdCBSYW5raW5nSXRlbTtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wLCBXYXRjaCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIFF1ZXN0aW9uVnVlIH0gZnJvbSBcIi4uL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvblJhbmtpbmdNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgUmFua2luZyBleHRlbmRzIFF1ZXN0aW9uVnVlPFF1ZXN0aW9uUmFua2luZ01vZGVsPiB7fVxuXG5WdWUuY29tcG9uZW50KFwic3VydmV5LXJhbmtpbmdcIiwgUmFua2luZyk7XG5leHBvcnQgZGVmYXVsdCBSYW5raW5nO1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIFF1ZXN0aW9uVnVlIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IFF1ZXN0aW9uUmF0aW5nTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIFJhdGluZyBleHRlbmRzIFF1ZXN0aW9uVnVlPFF1ZXN0aW9uUmF0aW5nTW9kZWw+IHtcbiAgZ2V0Um9vdENsYXNzKHF1ZXN0aW9uOiBRdWVzdGlvblJhdGluZ01vZGVsKSB7XG4gICAgY29uc3QgY2xhc3NlcyA9IHF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgaWYgKHF1ZXN0aW9uLmlzUmVhZE9ubHkpIHJldHVybiBjbGFzc2VzLnJvb3QgKyBcIiBcIiArIGNsYXNzZXMuZGlzYWJsZWQ7XG4gICAgcmV0dXJuIGNsYXNzZXMucm9vdDtcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1yYXRpbmdcIiwgUmF0aW5nKTtcbmV4cG9ydCBkZWZhdWx0IFJhdGluZztcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBQYW5lbE1vZGVsQmFzZSwgUGFuZWxNb2RlbCwgUXVlc3Rpb25Sb3dNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgVnVlU3VydmV5TW9kZWwgfSBmcm9tIFwiLi9zdXJ2ZXlNb2RlbFwiO1xuaW1wb3J0IHsgc2V0dGluZ3MgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IEJhc2VWdWUgfSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBSb3cgZXh0ZW5kcyBCYXNlVnVlIHtcbiAgQFByb3AoKSByb3c6IFF1ZXN0aW9uUm93TW9kZWw7XG4gIEBQcm9wKCkgY3NzOiBhbnk7XG4gIEBQcm9wKCkgc3VydmV5OiBTdXJ2ZXlNb2RlbDtcblxuICBwcm90ZWN0ZWQgZ2V0TW9kZWwoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucm93O1xuICB9XG4gIHByb3RlY3RlZCBvbk1vdW50ZWQoKSB7XG4gICAgaWYgKCEhdGhpcy5yb3cpIHtcbiAgICAgIGlmICghdGhpcy5yb3cuaXNOZWVkUmVuZGVyKSB7XG4gICAgICAgIHZhciByb3dDb250YWluZXJEaXYgPSB0aGlzLiRlbDtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5yb3cuc3RhcnRMYXp5UmVuZGVyaW5nKHJvd0NvbnRhaW5lckRpdiBhcyBIVE1MRWxlbWVudCk7XG4gICAgICAgIH0sIDEwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICBpZiAoISF0aGlzLnJvdykge1xuICAgICAgdGhpcy5yb3cuaXNOZWVkUmVuZGVyID0gIXRoaXMucm93LmlzTGF6eVJlbmRlcmluZztcbiAgICB9XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktcm93XCIsIFJvdyk7XG5leHBvcnQgZGVmYXVsdCBSb3c7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCwgV2F0Y2ggfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBRdWVzdGlvblZ1ZSB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvblNpZ25hdHVyZVBhZE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBTaWduYXR1cmVQYWQgZXh0ZW5kcyBRdWVzdGlvblZ1ZTxRdWVzdGlvblNpZ25hdHVyZVBhZE1vZGVsPiB7fVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1zaWduYXR1cmVwYWRcIiwgU2lnbmF0dXJlUGFkKTtcbmV4cG9ydCBkZWZhdWx0IFNpZ25hdHVyZVBhZDtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlTdHJpbmdFZGl0b3IgZXh0ZW5kcyBWdWUge1xuICBAUHJvcCgpIGxvY1N0cmluZzogTG9jYWxpemFibGVTdHJpbmc7XG5cbiAgb25JbnB1dCA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5sb2NTdHJpbmcudGV4dCA9IGV2ZW50LnRhcmdldC5pbm5lclRleHQ7XG4gIH07XG4gIG9uQ2xpY2sgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH07XG59XG5cblZ1ZS5jb21wb25lbnQoTG9jYWxpemFibGVTdHJpbmcuZWRpdGFibGVSZW5kZXJlciwgU3VydmV5U3RyaW5nRWRpdG9yKTtcbmV4cG9ydCBkZWZhdWx0IFN1cnZleVN0cmluZ0VkaXRvcjtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlTdHJpbmdWaWV3ZXIgZXh0ZW5kcyBWdWUge1xuICBAUHJvcCgpIGxvY1N0cmluZzogTG9jYWxpemFibGVTdHJpbmc7XG59XG5cblZ1ZS5jb21wb25lbnQoTG9jYWxpemFibGVTdHJpbmcuZGVmYXVsdFJlbmRlcmVyLCBTdXJ2ZXlTdHJpbmdWaWV3ZXIpO1xuZXhwb3J0IGRlZmF1bHQgU3VydmV5U3RyaW5nVmlld2VyO1xuIiwiXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlTdHJpbmcgZXh0ZW5kcyBWdWUge1xuICBAUHJvcCgpIGxvY1N0cmluZzogTG9jYWxpemFibGVTdHJpbmc7XG59XG5cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktc3RyaW5nXCIsIFN1cnZleVN0cmluZyk7XG5leHBvcnQgZGVmYXVsdCBTdXJ2ZXlTdHJpbmc7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wLCBXYXRjaCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBzdXJ2ZXlDc3MgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFZ1ZVN1cnZleU1vZGVsIGFzIFN1cnZleU1vZGVsIH0gZnJvbSBcIi4vc3VydmV5TW9kZWxcIjtcbmltcG9ydCB7IFN0eWxlc01hbmFnZXIsIEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IEJhc2VWdWUgfSBmcm9tIFwiLi9iYXNlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBTdXJ2ZXkgZXh0ZW5kcyBCYXNlVnVlIHtcbiAgQFByb3AoKSBzdXJ2ZXk6IFN1cnZleU1vZGVsO1xuICBwcm9jZXNzZWRDb21wbGV0ZWRIdG1sVmFsdWU6IHN0cmluZztcbiAgY3VycmVudFBhZ2VJZDogbnVtYmVyID0gMTtcbiAgZ2V0IHBhZ2VJZCgpIHtcbiAgICByZXR1cm4gXCJwYWdlXCIgKyB0aGlzLmN1cnJlbnRQYWdlSWQudG9TdHJpbmcoKTtcbiAgfVxuICBnZXQgbmF2SWQoKSB7XG4gICAgcmV0dXJuIFwibmF2XCIgKyB0aGlzLmN1cnJlbnRQYWdlSWQudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGZvcmNlVXBkYXRlKCkge1xuICAgIHRoaXMuJGZvcmNlVXBkYXRlKCk7XG4gICAgdGhpcy5jdXJyZW50UGFnZUlkKys7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRNb2RlbCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXk7XG4gIH1cbiAgQFdhdGNoKFwic3VydmV5XCIpXG4gIG9uUHJvcGVydHlDaGFuZ2VkKHZhbHVlOiBzdHJpbmcsIG9sZFZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLm9uQ3JlYXRlZCgpO1xuICAgIHRoaXMuc3VydmV5T25Nb3VudGVkKCk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uTW91bnRlZCgpIHtcbiAgICB0aGlzLnN1cnZleU9uTW91bnRlZCgpO1xuICB9XG4gIHByaXZhdGUgc3VydmV5T25Nb3VudGVkKCkge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkpIHJldHVybjtcbiAgICBWdWUuc2V0KHRoaXMuc3VydmV5LCBcImN1cnJlbnRQYWdlXCIsIHRoaXMuc3VydmV5LmN1cnJlbnRQYWdlKTtcbiAgICB0aGlzLnN1cnZleS5vbkN1cnJlbnRQYWdlQ2hhbmdlZC5hZGQoKHNlbmRlciwgb3B0aW9ucykgPT4ge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZUlkKys7XG4gICAgfSk7XG4gICAgdGhpcy5zdXJ2ZXkub25QYWdlVmlzaWJsZUNoYW5nZWQuYWRkKChzZW5kZXIsIG9wdGlvbnMpID0+IHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2VJZCsrO1xuICAgIH0pO1xuICAgIHZhciBlbCA9IHRoaXMuJGVsO1xuICAgIGlmIChlbCkgdGhpcy5zdXJ2ZXkuZG9BZnRlclJlbmRlclN1cnZleShlbCk7XG4gICAgdGhpcy5zdXJ2ZXkucmVuZGVyQ2FsbGJhY2sgPSB0aGlzLmZvcmNlVXBkYXRlO1xuICAgIHRoaXMuc3VydmV5LnN0YXJ0VGltZXJGcm9tVUkoKTtcbiAgfVxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMuc3VydmV5LnN0b3BUaW1lcigpO1xuICAgIHRoaXMuc3VydmV5LnJlbmRlckNhbGxiYWNrID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0IGhhc1RpdGxlKCkge1xuICAgIHJldHVybiAhIXRoaXMuc3VydmV5LnRpdGxlICYmIHRoaXMuc3VydmV5LnNob3dUaXRsZTtcbiAgfVxuICBnZXQgaGFzQ29tcGxldGVkUGFnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkuc2hvd0NvbXBsZXRlZFBhZ2UgJiYgdGhpcy5zdXJ2ZXkuc3RhdGUgPT09IFwiY29tcGxldGVkXCI7XG4gIH1cbiAgZ2V0IGNzcygpIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkuY3NzO1xuICB9XG4gIGdldENvbXBsZXRlZFBhZ2VDbGFzc2VzKCkge1xuICAgIHZhciBjc3MgPSB0aGlzLmNzcztcbiAgICByZXR1cm4gY3NzLmJvZHkgKyBcIiBcIiArIGNzcy5jb21wbGV0ZWRQYWdlO1xuICB9XG4gIGdldFByb2Nlc3NlZENvbXBsZXRlZEh0bWwoKSB7XG4gICAgaWYgKCF0aGlzLmhhc0NvbXBsZXRlZFBhZ2UpIHJldHVybiBcIlwiO1xuICAgIGlmICghdGhpcy5wcm9jZXNzZWRDb21wbGV0ZWRIdG1sVmFsdWUpIHtcbiAgICAgIHRoaXMucHJvY2Vzc2VkQ29tcGxldGVkSHRtbFZhbHVlID0gdGhpcy5zdXJ2ZXkucHJvY2Vzc2VkQ29tcGxldGVkSHRtbDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucHJvY2Vzc2VkQ29tcGxldGVkSHRtbFZhbHVlO1xuICB9XG4gIGdldENvbXBsZXRlZFN0YXRlQ2xhc3NlcygpIHtcbiAgICByZXR1cm4gdGhpcy5jc3Muc2F2ZURhdGFbdGhpcy5zdXJ2ZXkuY29tcGxldGVkU3RhdGVdO1xuICB9XG4gIHN0YXJ0KCkge1xuICAgIHRoaXMuc3VydmV5LnN0YXJ0KCk7XG4gIH1cbiAgZG9UcnlTYXZlQWdhaW4oKSB7XG4gICAgdGhpcy5zdXJ2ZXkuZG9Db21wbGV0ZSgpO1xuICB9XG59XG5cbi8vIFRPRE86IG1ha2UgdGhpcyBmdW5jdGlvbmFsaXR5IGF2YWlsYWJsZSB2aWEgc3VydmV5Q3NzIGluIGFsbCBleGFtcGxlc1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleSwgXCJjc3NUeXBlXCIsIHtcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gc3VydmV5Q3NzLmN1cnJlbnRUeXBlO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uKG5ld1R5cGUpIHtcbiAgICBTdHlsZXNNYW5hZ2VyLmFwcGx5VGhlbWUobmV3VHlwZSk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG59KTtcblxuVnVlLmNvbXBvbmVudChcInN1cnZleVwiLCBTdXJ2ZXkpO1xuZXhwb3J0IGRlZmF1bHQgU3VydmV5O1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBRdWVzdGlvblZ1ZSB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvblRleHRNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgUXVlc3Rpb25UZXh0IGV4dGVuZHMgUXVlc3Rpb25WdWU8UXVlc3Rpb25UZXh0TW9kZWw+IHtcbiAgY2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICB9XG4gIGtleXVwKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoIXRoaXMucXVlc3Rpb24uaXNJbnB1dFRleHRVcGRhdGUpIHJldHVybjtcbiAgICB0aGlzLnF1ZXN0aW9uLnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICB9XG4gIGdldCBpbnB1dFN0eWxlKCk6IGFueSB7XG4gICAgdmFyIHN0eWxlOiBhbnkgPSB7fTtcbiAgICBpZiAoISF0aGlzLnF1ZXN0aW9uLmlucHV0V2lkdGgpIHtcbiAgICAgIHN0eWxlLndpZHRoID0gdGhpcy5xdWVzdGlvbi5pbnB1dFdpZHRoO1xuICAgIH1cbiAgICByZXR1cm4gc3R5bGU7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktdGV4dFwiLCBRdWVzdGlvblRleHQpO1xuZXhwb3J0IGRlZmF1bHQgUXVlc3Rpb25UZXh0O1xuIiwiXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBUaW1lclBhbmVsIGV4dGVuZHMgVnVlIHtcbiAgQFByb3AoKSBzdXJ2ZXk6IFN1cnZleU1vZGVsO1xuICBAUHJvcCgpIGNzczogYW55O1xuICBnZXQgdGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkudGltZXJJbmZvVGV4dDtcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS10aW1lcnBhbmVsXCIsIFRpbWVyUGFuZWwpO1xuZXhwb3J0IGRlZmF1bHQgVGltZXJQYW5lbDtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBJRWxlbWVudCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgVGl0bGVDb250ZW50IGV4dGVuZHMgVnVlIHtcbiAgQFByb3AoKSBlbGVtZW50OiBJRWxlbWVudDtcbiAgQFByb3AoKSBjc3M6IGFueTtcbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktcXVlc3Rpb24tdGl0bGUtY29udGVudFwiLCBUaXRsZUNvbnRlbnQpO1xuZXhwb3J0IGRlZmF1bHQgVGl0bGVDb250ZW50O1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AsIFdhdGNoIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlXaW5kb3dNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgVnVlU3VydmV5V2luZG93TW9kZWwgfSBmcm9tIFwiLi9zdXJ2ZXlNb2RlbFwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgV2luZG93IGV4dGVuZHMgVnVlIHtcbiAgQFByb3AoKSB3aW5kb3c6IFN1cnZleVdpbmRvd01vZGVsO1xuICBAUHJvcCgpIHN1cnZleTogU3VydmV5TW9kZWw7XG4gIEBQcm9wKCkgaXNFeHBhbmRlZDogYm9vbGVhbjtcbiAgQFByb3AoKSBpc2V4cGFuZGVkOiBib29sZWFuO1xuICBAUHJvcCgpIGNsb3NlT25Db21wbGV0ZVRpbWVvdXQ6IG51bWJlcjtcblxuICBzdXJ2ZXlXaW5kb3c6IFN1cnZleVdpbmRvd01vZGVsO1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGlmICh0aGlzLndpbmRvdykge1xuICAgICAgdGhpcy5zdXJ2ZXlXaW5kb3cgPSB0aGlzLndpbmRvdztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdXJ2ZXlXaW5kb3cgPSBuZXcgVnVlU3VydmV5V2luZG93TW9kZWwobnVsbCwgdGhpcy5zdXJ2ZXkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc2V4cGFuZGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc3VydmV5V2luZG93LmlzRXhwYW5kZWQgPSB0aGlzLmlzZXhwYW5kZWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzRXhwYW5kZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zdXJ2ZXlXaW5kb3cuaXNFeHBhbmRlZCA9IHRoaXMuaXNFeHBhbmRlZDtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2xvc2VPbkNvbXBsZXRlVGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnN1cnZleVdpbmRvdy5jbG9zZU9uQ29tcGxldGVUaW1lb3V0ID0gdGhpcy5jbG9zZU9uQ29tcGxldGVUaW1lb3V0O1xuICAgIH1cbiAgICB0aGlzLnN1cnZleVdpbmRvdy5pc1Nob3dpbmcgPSB0cnVlO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnN1cnZleVdpbmRvdy5jbG9zZVdpbmRvd09uQ29tcGxldGVDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYuZG9IaWRlKCk7XG4gICAgfTtcbiAgfVxuICBnZXQgd2luZG93U3VydmV5KCk6IFN1cnZleU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXlXaW5kb3cuc3VydmV5O1xuICB9XG4gIGdldCBjc3MoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5zdXJ2ZXkgPyB0aGlzLnN1cnZleS5nZXRDc3MoKSA6IHt9O1xuICB9XG4gIGdldCBleHBhbmRlZENzcygpIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXlXaW5kb3cuaXNFeHBhbmRlZFxuICAgICAgPyB0aGlzLmNzcy53aW5kb3cuaGVhZGVyLmJ1dHRvbkNvbGxhcHNlZFxuICAgICAgOiB0aGlzLmNzcy53aW5kb3cuaGVhZGVyLmJ1dHRvbkV4cGFuZGVkO1xuICB9XG4gIGdldCBpc0V4cGFuZGVkU3VydmV5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN1cnZleVdpbmRvdy5pc0V4cGFuZGVkO1xuICB9XG4gIHNldCBpc0V4cGFuZGVkU3VydmV5KHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc3VydmV5V2luZG93LmlzRXhwYW5kZWQgPSB2YWw7XG4gIH1cbiAgZG9FeHBhbmQoKSB7XG4gICAgdGhpcy5zdXJ2ZXlXaW5kb3cuaXNFeHBhbmRlZCA9ICF0aGlzLnN1cnZleVdpbmRvdy5pc0V4cGFuZGVkO1xuICB9XG4gIGRvSGlkZSgpIHtcbiAgICBWdWUuc2V0KHRoaXMuc3VydmV5V2luZG93LCBcImlzU2hvd2luZ1wiLCBmYWxzZSk7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktd2luZG93XCIsIFdpbmRvdyk7XG5leHBvcnQgZGVmYXVsdCBXaW5kb3c7XG4iLCIvKipcbiAgKiB2dWUtY2xhc3MtY29tcG9uZW50IHY3LjIuNlxuICAqIChjKSAyMDE1LXByZXNlbnQgRXZhbiBZb3VcbiAgKiBAbGljZW5zZSBNSVRcbiAgKi9cbmltcG9ydCBWdWUgZnJvbSAndnVlJztcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7XG4gICAgX3R5cGVvZiA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgX3R5cGVvZiA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gX3R5cGVvZihvYmopO1xufVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikge1xuICByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpO1xufVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShhcnIubGVuZ3RoKTsgaSA8IGFyci5sZW5ndGg7IGkrKykgYXJyMltpXSA9IGFycltpXTtcblxuICAgIHJldHVybiBhcnIyO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikge1xuICBpZiAoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChpdGVyKSB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaXRlcikgPT09IFwiW29iamVjdCBBcmd1bWVudHNdXCIpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpO1xufVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKTtcbn1cblxuLy8gVGhlIHJhdGlvbmFsIGJlaGluZCB0aGUgdmVyYm9zZSBSZWZsZWN0LWZlYXR1cmUgY2hlY2sgYmVsb3cgaXMgdGhlIGZhY3QgdGhhdCB0aGVyZSBhcmUgcG9seWZpbGxzXG4vLyB3aGljaCBhZGQgYW4gaW1wbGVtZW50YXRpb24gZm9yIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEgYnV0IG5vdCBmb3IgUmVmbGVjdC5nZXRPd25NZXRhZGF0YUtleXMuXG4vLyBXaXRob3V0IHRoaXMgY2hlY2sgY29uc3VtZXJzIHdpbGwgZW5jb3VudGVyIGhhcmQgdG8gdHJhY2sgZG93biBydW50aW1lIGVycm9ycy5cbmZ1bmN0aW9uIHJlZmxlY3Rpb25Jc1N1cHBvcnRlZCgpIHtcbiAgcmV0dXJuIHR5cGVvZiBSZWZsZWN0ICE9PSAndW5kZWZpbmVkJyAmJiBSZWZsZWN0LmRlZmluZU1ldGFkYXRhICYmIFJlZmxlY3QuZ2V0T3duTWV0YWRhdGFLZXlzO1xufVxuZnVuY3Rpb24gY29weVJlZmxlY3Rpb25NZXRhZGF0YSh0bywgZnJvbSkge1xuICBmb3J3YXJkTWV0YWRhdGEodG8sIGZyb20pO1xuICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhmcm9tLnByb3RvdHlwZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgZm9yd2FyZE1ldGFkYXRhKHRvLnByb3RvdHlwZSwgZnJvbS5wcm90b3R5cGUsIGtleSk7XG4gIH0pO1xuICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhmcm9tKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBmb3J3YXJkTWV0YWRhdGEodG8sIGZyb20sIGtleSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBmb3J3YXJkTWV0YWRhdGEodG8sIGZyb20sIHByb3BlcnR5S2V5KSB7XG4gIHZhciBtZXRhS2V5cyA9IHByb3BlcnR5S2V5ID8gUmVmbGVjdC5nZXRPd25NZXRhZGF0YUtleXMoZnJvbSwgcHJvcGVydHlLZXkpIDogUmVmbGVjdC5nZXRPd25NZXRhZGF0YUtleXMoZnJvbSk7XG4gIG1ldGFLZXlzLmZvckVhY2goZnVuY3Rpb24gKG1ldGFLZXkpIHtcbiAgICB2YXIgbWV0YWRhdGEgPSBwcm9wZXJ0eUtleSA/IFJlZmxlY3QuZ2V0T3duTWV0YWRhdGEobWV0YUtleSwgZnJvbSwgcHJvcGVydHlLZXkpIDogUmVmbGVjdC5nZXRPd25NZXRhZGF0YShtZXRhS2V5LCBmcm9tKTtcblxuICAgIGlmIChwcm9wZXJ0eUtleSkge1xuICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShtZXRhS2V5LCBtZXRhZGF0YSwgdG8sIHByb3BlcnR5S2V5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShtZXRhS2V5LCBtZXRhZGF0YSwgdG8pO1xuICAgIH1cbiAgfSk7XG59XG5cbnZhciBmYWtlQXJyYXkgPSB7XG4gIF9fcHJvdG9fXzogW11cbn07XG52YXIgaGFzUHJvdG8gPSBmYWtlQXJyYXkgaW5zdGFuY2VvZiBBcnJheTtcbmZ1bmN0aW9uIGNyZWF0ZURlY29yYXRvcihmYWN0b3J5KSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXksIGluZGV4KSB7XG4gICAgdmFyIEN0b3IgPSB0eXBlb2YgdGFyZ2V0ID09PSAnZnVuY3Rpb24nID8gdGFyZ2V0IDogdGFyZ2V0LmNvbnN0cnVjdG9yO1xuXG4gICAgaWYgKCFDdG9yLl9fZGVjb3JhdG9yc19fKSB7XG4gICAgICBDdG9yLl9fZGVjb3JhdG9yc19fID0gW107XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbmRleCAhPT0gJ251bWJlcicpIHtcbiAgICAgIGluZGV4ID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIEN0b3IuX19kZWNvcmF0b3JzX18ucHVzaChmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgcmV0dXJuIGZhY3Rvcnkob3B0aW9ucywga2V5LCBpbmRleCk7XG4gICAgfSk7XG4gIH07XG59XG5mdW5jdGlvbiBtaXhpbnMoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBDdG9ycyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBDdG9yc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHJldHVybiBWdWUuZXh0ZW5kKHtcbiAgICBtaXhpbnM6IEN0b3JzXG4gIH0pO1xufVxuZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSBfdHlwZW9mKHZhbHVlKTtcblxuICByZXR1cm4gdmFsdWUgPT0gbnVsbCB8fCB0eXBlICE9PSAnb2JqZWN0JyAmJiB0eXBlICE9PSAnZnVuY3Rpb24nO1xufVxuZnVuY3Rpb24gd2FybihtZXNzYWdlKSB7XG4gIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBjb25zb2xlLndhcm4oJ1t2dWUtY2xhc3MtY29tcG9uZW50XSAnICsgbWVzc2FnZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29sbGVjdERhdGFGcm9tQ29uc3RydWN0b3Iodm0sIENvbXBvbmVudCkge1xuICAvLyBvdmVycmlkZSBfaW5pdCB0byBwcmV2ZW50IHRvIGluaXQgYXMgVnVlIGluc3RhbmNlXG4gIHZhciBvcmlnaW5hbEluaXQgPSBDb21wb25lbnQucHJvdG90eXBlLl9pbml0O1xuXG4gIENvbXBvbmVudC5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIC8vIHByb3h5IHRvIGFjdHVhbCB2bVxuICAgIHZhciBrZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModm0pOyAvLyAyLjIuMCBjb21wYXQgKHByb3BzIGFyZSBubyBsb25nZXIgZXhwb3NlZCBhcyBzZWxmIHByb3BlcnRpZXMpXG5cbiAgICBpZiAodm0uJG9wdGlvbnMucHJvcHMpIHtcbiAgICAgIGZvciAodmFyIGtleSBpbiB2bS4kb3B0aW9ucy5wcm9wcykge1xuICAgICAgICBpZiAoIXZtLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX3RoaXMsIGtleSwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gdm1ba2V5XTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiBzZXQodmFsdWUpIHtcbiAgICAgICAgICB2bVtrZXldID0gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07IC8vIHNob3VsZCBiZSBhY3F1aXJlZCBjbGFzcyBwcm9wZXJ0eSB2YWx1ZXNcblxuXG4gIHZhciBkYXRhID0gbmV3IENvbXBvbmVudCgpOyAvLyByZXN0b3JlIG9yaWdpbmFsIF9pbml0IHRvIGF2b2lkIG1lbW9yeSBsZWFrICgjMjA5KVxuXG4gIENvbXBvbmVudC5wcm90b3R5cGUuX2luaXQgPSBvcmlnaW5hbEluaXQ7IC8vIGNyZWF0ZSBwbGFpbiBkYXRhIG9iamVjdFxuXG4gIHZhciBwbGFpbkRhdGEgPSB7fTtcbiAgT2JqZWN0LmtleXMoZGF0YSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwbGFpbkRhdGFba2V5XSA9IGRhdGFba2V5XTtcbiAgICB9XG4gIH0pO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKCEoQ29tcG9uZW50LnByb3RvdHlwZSBpbnN0YW5jZW9mIFZ1ZSkgJiYgT2JqZWN0LmtleXMocGxhaW5EYXRhKS5sZW5ndGggPiAwKSB7XG4gICAgICB3YXJuKCdDb21wb25lbnQgY2xhc3MgbXVzdCBpbmhlcml0IFZ1ZSBvciBpdHMgZGVzY2VuZGFudCBjbGFzcyAnICsgJ3doZW4gY2xhc3MgcHJvcGVydHkgaXMgdXNlZC4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGxhaW5EYXRhO1xufVxuXG52YXIgJGludGVybmFsSG9va3MgPSBbJ2RhdGEnLCAnYmVmb3JlQ3JlYXRlJywgJ2NyZWF0ZWQnLCAnYmVmb3JlTW91bnQnLCAnbW91bnRlZCcsICdiZWZvcmVEZXN0cm95JywgJ2Rlc3Ryb3llZCcsICdiZWZvcmVVcGRhdGUnLCAndXBkYXRlZCcsICdhY3RpdmF0ZWQnLCAnZGVhY3RpdmF0ZWQnLCAncmVuZGVyJywgJ2Vycm9yQ2FwdHVyZWQnLCAnc2VydmVyUHJlZmV0Y2gnIC8vIDIuNlxuXTtcbmZ1bmN0aW9uIGNvbXBvbmVudEZhY3RvcnkoQ29tcG9uZW50KSB7XG4gIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgb3B0aW9ucy5uYW1lID0gb3B0aW9ucy5uYW1lIHx8IENvbXBvbmVudC5fY29tcG9uZW50VGFnIHx8IENvbXBvbmVudC5uYW1lOyAvLyBwcm90b3R5cGUgcHJvcHMuXG5cbiAgdmFyIHByb3RvID0gQ29tcG9uZW50LnByb3RvdHlwZTtcbiAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocHJvdG8pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIGlmIChrZXkgPT09ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIGhvb2tzXG5cblxuICAgIGlmICgkaW50ZXJuYWxIb29rcy5pbmRleE9mKGtleSkgPiAtMSkge1xuICAgICAgb3B0aW9uc1trZXldID0gcHJvdG9ba2V5XTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIGtleSk7XG5cbiAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSAhPT0gdm9pZCAwKSB7XG4gICAgICAvLyBtZXRob2RzXG4gICAgICBpZiAodHlwZW9mIGRlc2NyaXB0b3IudmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgKG9wdGlvbnMubWV0aG9kcyB8fCAob3B0aW9ucy5tZXRob2RzID0ge30pKVtrZXldID0gZGVzY3JpcHRvci52YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHR5cGVzY3JpcHQgZGVjb3JhdGVkIGRhdGFcbiAgICAgICAgKG9wdGlvbnMubWl4aW5zIHx8IChvcHRpb25zLm1peGlucyA9IFtdKSkucHVzaCh7XG4gICAgICAgICAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICAgICAgICAgIHJldHVybiBfZGVmaW5lUHJvcGVydHkoe30sIGtleSwgZGVzY3JpcHRvci52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRlc2NyaXB0b3IuZ2V0IHx8IGRlc2NyaXB0b3Iuc2V0KSB7XG4gICAgICAvLyBjb21wdXRlZCBwcm9wZXJ0aWVzXG4gICAgICAob3B0aW9ucy5jb21wdXRlZCB8fCAob3B0aW9ucy5jb21wdXRlZCA9IHt9KSlba2V5XSA9IHtcbiAgICAgICAgZ2V0OiBkZXNjcmlwdG9yLmdldCxcbiAgICAgICAgc2V0OiBkZXNjcmlwdG9yLnNldFxuICAgICAgfTtcbiAgICB9XG4gIH0pO1xuICAob3B0aW9ucy5taXhpbnMgfHwgKG9wdGlvbnMubWl4aW5zID0gW10pKS5wdXNoKHtcbiAgICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgICAgcmV0dXJuIGNvbGxlY3REYXRhRnJvbUNvbnN0cnVjdG9yKHRoaXMsIENvbXBvbmVudCk7XG4gICAgfVxuICB9KTsgLy8gZGVjb3JhdGUgb3B0aW9uc1xuXG4gIHZhciBkZWNvcmF0b3JzID0gQ29tcG9uZW50Ll9fZGVjb3JhdG9yc19fO1xuXG4gIGlmIChkZWNvcmF0b3JzKSB7XG4gICAgZGVjb3JhdG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChmbikge1xuICAgICAgcmV0dXJuIGZuKG9wdGlvbnMpO1xuICAgIH0pO1xuICAgIGRlbGV0ZSBDb21wb25lbnQuX19kZWNvcmF0b3JzX187XG4gIH0gLy8gZmluZCBzdXBlclxuXG5cbiAgdmFyIHN1cGVyUHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoQ29tcG9uZW50LnByb3RvdHlwZSk7XG4gIHZhciBTdXBlciA9IHN1cGVyUHJvdG8gaW5zdGFuY2VvZiBWdWUgPyBzdXBlclByb3RvLmNvbnN0cnVjdG9yIDogVnVlO1xuICB2YXIgRXh0ZW5kZWQgPSBTdXBlci5leHRlbmQob3B0aW9ucyk7XG4gIGZvcndhcmRTdGF0aWNNZW1iZXJzKEV4dGVuZGVkLCBDb21wb25lbnQsIFN1cGVyKTtcblxuICBpZiAocmVmbGVjdGlvbklzU3VwcG9ydGVkKCkpIHtcbiAgICBjb3B5UmVmbGVjdGlvbk1ldGFkYXRhKEV4dGVuZGVkLCBDb21wb25lbnQpO1xuICB9XG5cbiAgcmV0dXJuIEV4dGVuZGVkO1xufVxudmFyIHJlc2VydmVkUHJvcGVydHlOYW1lcyA9IFsvLyBVbmlxdWUgaWRcbidjaWQnLCAvLyBTdXBlciBWdWUgY29uc3RydWN0b3JcbidzdXBlcicsIC8vIENvbXBvbmVudCBvcHRpb25zIHRoYXQgd2lsbCBiZSB1c2VkIGJ5IHRoZSBjb21wb25lbnRcbidvcHRpb25zJywgJ3N1cGVyT3B0aW9ucycsICdleHRlbmRPcHRpb25zJywgJ3NlYWxlZE9wdGlvbnMnLCAvLyBQcml2YXRlIGFzc2V0c1xuJ2NvbXBvbmVudCcsICdkaXJlY3RpdmUnLCAnZmlsdGVyJ107XG52YXIgc2hvdWxkSWdub3JlID0ge1xuICBwcm90b3R5cGU6IHRydWUsXG4gIGFyZ3VtZW50czogdHJ1ZSxcbiAgY2FsbGVlOiB0cnVlLFxuICBjYWxsZXI6IHRydWVcbn07XG5cbmZ1bmN0aW9uIGZvcndhcmRTdGF0aWNNZW1iZXJzKEV4dGVuZGVkLCBPcmlnaW5hbCwgU3VwZXIpIHtcbiAgLy8gV2UgaGF2ZSB0byB1c2UgZ2V0T3duUHJvcGVydHlOYW1lcyBzaW5jZSBCYWJlbCByZWdpc3RlcnMgbWV0aG9kcyBhcyBub24tZW51bWVyYWJsZVxuICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPcmlnaW5hbCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgLy8gU2tpcCB0aGUgcHJvcGVydGllcyB0aGF0IHNob3VsZCBub3QgYmUgb3ZlcndyaXR0ZW5cbiAgICBpZiAoc2hvdWxkSWdub3JlW2tleV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFNvbWUgYnJvd3NlcnMgZG9lcyBub3QgYWxsb3cgcmVjb25maWd1cmUgYnVpbHQtaW4gcHJvcGVydGllc1xuXG5cbiAgICB2YXIgZXh0ZW5kZWREZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihFeHRlbmRlZCwga2V5KTtcblxuICAgIGlmIChleHRlbmRlZERlc2NyaXB0b3IgJiYgIWV4dGVuZGVkRGVzY3JpcHRvci5jb25maWd1cmFibGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT3JpZ2luYWwsIGtleSk7IC8vIElmIHRoZSB1c2VyIGFnZW50IGRvZXMgbm90IHN1cHBvcnQgYF9fcHJvdG9fX2Agb3IgaXRzIGZhbWlseSAoSUUgPD0gMTApLFxuICAgIC8vIHRoZSBzdWIgY2xhc3MgcHJvcGVydGllcyBtYXkgYmUgaW5oZXJpdGVkIHByb3BlcnRpZXMgZnJvbSB0aGUgc3VwZXIgY2xhc3MgaW4gVHlwZVNjcmlwdC5cbiAgICAvLyBXZSBuZWVkIHRvIGV4Y2x1ZGUgc3VjaCBwcm9wZXJ0aWVzIHRvIHByZXZlbnQgdG8gb3ZlcndyaXRlXG4gICAgLy8gdGhlIGNvbXBvbmVudCBvcHRpb25zIG9iamVjdCB3aGljaCBzdG9yZWQgb24gdGhlIGV4dGVuZGVkIGNvbnN0cnVjdG9yIChTZWUgIzE5MikuXG4gICAgLy8gSWYgdGhlIHZhbHVlIGlzIGEgcmVmZXJlbmNlZCB2YWx1ZSAob2JqZWN0IG9yIGZ1bmN0aW9uKSxcbiAgICAvLyB3ZSBjYW4gY2hlY2sgZXF1YWxpdHkgb2YgdGhlbSBhbmQgZXhjbHVkZSBpdCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgcmVmZXJlbmNlLlxuICAgIC8vIElmIGl0IGlzIGEgcHJpbWl0aXZlIHZhbHVlLCBpdCB3aWxsIGJlIGZvcndhcmRlZCBmb3Igc2FmZXR5LlxuXG4gICAgaWYgKCFoYXNQcm90bykge1xuICAgICAgLy8gT25seSBgY2lkYCBpcyBleHBsaWNpdGx5IGV4bHVkZWQgZnJvbSBwcm9wZXJ0eSBmb3J3YXJkaW5nXG4gICAgICAvLyBiZWNhdXNlIHdlIGNhbm5vdCBkZXRlY3Qgd2hldGhlciBpdCBpcyBhIGluaGVyaXRlZCBwcm9wZXJ0eSBvciBub3RcbiAgICAgIC8vIG9uIHRoZSBubyBgX19wcm90b19fYCBlbnZpcm9ubWVudCBldmVuIHRob3VnaCB0aGUgcHJvcGVydHkgaXMgcmVzZXJ2ZWQuXG4gICAgICBpZiAoa2V5ID09PSAnY2lkJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBzdXBlckRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFN1cGVyLCBrZXkpO1xuXG4gICAgICBpZiAoIWlzUHJpbWl0aXZlKGRlc2NyaXB0b3IudmFsdWUpICYmIHN1cGVyRGVzY3JpcHRvciAmJiBzdXBlckRlc2NyaXB0b3IudmFsdWUgPT09IGRlc2NyaXB0b3IudmFsdWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gLy8gV2FybiBpZiB0aGUgdXNlcnMgbWFudWFsbHkgZGVjbGFyZSByZXNlcnZlZCBwcm9wZXJ0aWVzXG5cblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHJlc2VydmVkUHJvcGVydHlOYW1lcy5pbmRleE9mKGtleSkgPj0gMCkge1xuICAgICAgd2FybihcIlN0YXRpYyBwcm9wZXJ0eSBuYW1lICdcIi5jb25jYXQoa2V5LCBcIicgZGVjbGFyZWQgb24gY2xhc3MgJ1wiKS5jb25jYXQoT3JpZ2luYWwubmFtZSwgXCInIFwiKSArICdjb25mbGljdHMgd2l0aCByZXNlcnZlZCBwcm9wZXJ0eSBuYW1lIG9mIFZ1ZSBpbnRlcm5hbC4gJyArICdJdCBtYXkgY2F1c2UgdW5leHBlY3RlZCBiZWhhdmlvciBvZiB0aGUgY29tcG9uZW50LiBDb25zaWRlciByZW5hbWluZyB0aGUgcHJvcGVydHkuJyk7XG4gICAgfVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEV4dGVuZGVkLCBrZXksIGRlc2NyaXB0b3IpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gQ29tcG9uZW50KG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGNvbXBvbmVudEZhY3Rvcnkob3B0aW9ucyk7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKENvbXBvbmVudCkge1xuICAgIHJldHVybiBjb21wb25lbnRGYWN0b3J5KENvbXBvbmVudCwgb3B0aW9ucyk7XG4gIH07XG59XG5cbkNvbXBvbmVudC5yZWdpc3Rlckhvb2tzID0gZnVuY3Rpb24gcmVnaXN0ZXJIb29rcyhrZXlzKSB7XG4gICRpbnRlcm5hbEhvb2tzLnB1c2guYXBwbHkoJGludGVybmFsSG9va3MsIF90b0NvbnN1bWFibGVBcnJheShrZXlzKSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBDb21wb25lbnQ7XG5leHBvcnQgeyBjcmVhdGVEZWNvcmF0b3IsIG1peGlucyB9O1xuIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290IH0sIFtcbiAgICBfYyhcImxhYmVsXCIsIHsgY2xhc3M6IF92bS5pdGVtQ2xhc3MgfSwgW1xuICAgICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcIm1vZGVsXCIsXG4gICAgICAgICAgICByYXdOYW1lOiBcInYtbW9kZWxcIixcbiAgICAgICAgICAgIHZhbHVlOiBfdm0ucXVlc3Rpb24uY2hlY2tlZFZhbHVlLFxuICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJxdWVzdGlvbi5jaGVja2VkVmFsdWVcIlxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNvbnRyb2wsXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgdHlwZTogXCJjaGVja2JveFwiLFxuICAgICAgICAgIG5hbWU6IF92bS5xdWVzdGlvbi5uYW1lLFxuICAgICAgICAgIGlkOiBfdm0ucXVlc3Rpb24uaW5wdXRJZCxcbiAgICAgICAgICBkaXNhYmxlZDogX3ZtLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSxcbiAgICAgICAgICBcImFyaWEtcmVxdWlyZWRcIjogX3ZtLnF1ZXN0aW9uLmlzUmVxdWlyZWQsXG4gICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF92bS5xdWVzdGlvbi5sb2NUaXRsZS5yZW5kZXJlZEh0bWwsXG4gICAgICAgICAgXCJhcmlhLWludmFsaWRcIjogX3ZtLnF1ZXN0aW9uLmVycm9ycy5sZW5ndGggPiAwLFxuICAgICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOlxuICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmVycm9ycy5sZW5ndGggPiAwID8gX3ZtLnF1ZXN0aW9uLmlkICsgXCJfZXJyb3JzXCIgOiBudWxsXG4gICAgICAgIH0sXG4gICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgdmFsdWU6IF92bS5xdWVzdGlvbi5jaGVja2VkVmFsdWUsXG4gICAgICAgICAgaW5kZXRlcm1pbmF0ZTogX3ZtLnF1ZXN0aW9uLmlzSW5kZXRlcm1pbmF0ZSxcbiAgICAgICAgICBjaGVja2VkOiBBcnJheS5pc0FycmF5KF92bS5xdWVzdGlvbi5jaGVja2VkVmFsdWUpXG4gICAgICAgICAgICA/IF92bS5faShfdm0ucXVlc3Rpb24uY2hlY2tlZFZhbHVlLCBfdm0ucXVlc3Rpb24uY2hlY2tlZFZhbHVlKSA+IC0xXG4gICAgICAgICAgICA6IF92bS5xdWVzdGlvbi5jaGVja2VkVmFsdWVcbiAgICAgICAgfSxcbiAgICAgICAgb246IHtcbiAgICAgICAgICBjaGFuZ2U6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgdmFyICQkYSA9IF92bS5xdWVzdGlvbi5jaGVja2VkVmFsdWUsXG4gICAgICAgICAgICAgICQkZWwgPSAkZXZlbnQudGFyZ2V0LFxuICAgICAgICAgICAgICAkJGMgPSAkJGVsLmNoZWNrZWQgPyB0cnVlIDogZmFsc2VcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KCQkYSkpIHtcbiAgICAgICAgICAgICAgdmFyICQkdiA9IF92bS5xdWVzdGlvbi5jaGVja2VkVmFsdWUsXG4gICAgICAgICAgICAgICAgJCRpID0gX3ZtLl9pKCQkYSwgJCR2KVxuICAgICAgICAgICAgICBpZiAoJCRlbC5jaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgJCRpIDwgMCAmJlxuICAgICAgICAgICAgICAgICAgX3ZtLiRzZXQoX3ZtLnF1ZXN0aW9uLCBcImNoZWNrZWRWYWx1ZVwiLCAkJGEuY29uY2F0KFskJHZdKSlcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAkJGkgPiAtMSAmJlxuICAgICAgICAgICAgICAgICAgX3ZtLiRzZXQoXG4gICAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbixcbiAgICAgICAgICAgICAgICAgICAgXCJjaGVja2VkVmFsdWVcIixcbiAgICAgICAgICAgICAgICAgICAgJCRhLnNsaWNlKDAsICQkaSkuY29uY2F0KCQkYS5zbGljZSgkJGkgKyAxKSlcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgX3ZtLiRzZXQoX3ZtLnF1ZXN0aW9uLCBcImNoZWNrZWRWYWx1ZVwiLCAkJGMpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcInNwYW5cIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMubWF0ZXJpYWxEZWNvcmF0b3IgfSwgW1xuICAgICAgICBfYyhcbiAgICAgICAgICBcInN2Z1wiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtRGVjb3JhdG9yLFxuICAgICAgICAgICAgYXR0cnM6IHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBbXG4gICAgICAgICAgICBfYyhcInJlY3RcIiwge1xuICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMudW5jaGVja2VkUGF0aCxcbiAgICAgICAgICAgICAgYXR0cnM6IHsgeDogXCI1XCIsIHk6IFwiMTBcIiwgd2lkdGg6IFwiMTRcIiwgaGVpZ2h0OiBcIjRcIiB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICBfYyhcInBvbHlnb25cIiwge1xuICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2hlY2tlZFBhdGgsXG4gICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgcG9pbnRzOlxuICAgICAgICAgICAgICAgICAgXCIxOSwxMCAxNCwxMCAxNCw1IDEwLDUgMTAsMTAgNSwxMCA1LDE0IDEwLDE0IDEwLDE5IDE0LDE5IDE0LDE0IDE5LDE0IFwiXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgIF9jKFwicGF0aFwiLCB7XG4gICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pbmRldGVybWluYXRlUGF0aCxcbiAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICBkOlxuICAgICAgICAgICAgICAgICAgXCJNMjIsMEgyQzAuOSwwLDAsMC45LDAsMnYyMGMwLDEuMSwwLjksMiwyLDJoMjBjMS4xLDAsMi0wLjksMi0yVjJDMjQsMC45LDIzLjEsMCwyMiwweiBNMjEsMThMNiwzaDE1VjE4eiBNMyw2bDE1LDE1SDNWNnpcIlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgKSxcbiAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgX2MoXCJzcGFuXCIsIHsgc3RhdGljQ2xhc3M6IFwiY2hlY2tcIiB9KVxuICAgICAgXSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLnF1ZXN0aW9uLnRpdGxlTG9jYXRpb24gPT09IFwiaGlkZGVuXCJcbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMubGFiZWwgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5xdWVzdGlvbi5sb2NEaXNwbGF5TGFiZWwgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKClcbiAgICBdKVxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdCB9LCBbXG4gICAgX2MoXCJsYWJlbFwiLCB7IGNsYXNzOiBfdm0uaXRlbUNsYXNzIH0sIFtcbiAgICAgIF9jKFwiaW5wdXRcIiwge1xuICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG4gICAgICAgICAgICB2YWx1ZTogX3ZtLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSxcbiAgICAgICAgICAgIGV4cHJlc3Npb246IFwicXVlc3Rpb24uY2hlY2tlZFZhbHVlXCJcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jb250cm9sLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHR5cGU6IFwiY2hlY2tib3hcIixcbiAgICAgICAgICBuYW1lOiBfdm0ucXVlc3Rpb24ubmFtZSxcbiAgICAgICAgICBpZDogX3ZtLnF1ZXN0aW9uLmlucHV0SWQsXG4gICAgICAgICAgZGlzYWJsZWQ6IF92bS5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHksXG4gICAgICAgICAgXCJhcmlhLXJlcXVpcmVkXCI6IF92bS5xdWVzdGlvbi5pc1JlcXVpcmVkLFxuICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0ucXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sLFxuICAgICAgICAgIFwiYXJpYS1pbnZhbGlkXCI6IF92bS5xdWVzdGlvbi5lcnJvcnMubGVuZ3RoID4gMCxcbiAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjpcbiAgICAgICAgICAgIF92bS5xdWVzdGlvbi5lcnJvcnMubGVuZ3RoID4gMCA/IF92bS5xdWVzdGlvbi5pZCArIFwiX2Vycm9yc1wiIDogbnVsbFxuICAgICAgICB9LFxuICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgIHZhbHVlOiBfdm0ucXVlc3Rpb24uY2hlY2tlZFZhbHVlLFxuICAgICAgICAgIGluZGV0ZXJtaW5hdGU6IF92bS5xdWVzdGlvbi5pc0luZGV0ZXJtaW5hdGUsXG4gICAgICAgICAgY2hlY2tlZDogQXJyYXkuaXNBcnJheShfdm0ucXVlc3Rpb24uY2hlY2tlZFZhbHVlKVxuICAgICAgICAgICAgPyBfdm0uX2koX3ZtLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSwgX3ZtLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSkgPiAtMVxuICAgICAgICAgICAgOiBfdm0ucXVlc3Rpb24uY2hlY2tlZFZhbHVlXG4gICAgICAgIH0sXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgIHZhciAkJGEgPSBfdm0ucXVlc3Rpb24uY2hlY2tlZFZhbHVlLFxuICAgICAgICAgICAgICAkJGVsID0gJGV2ZW50LnRhcmdldCxcbiAgICAgICAgICAgICAgJCRjID0gJCRlbC5jaGVja2VkID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSgkJGEpKSB7XG4gICAgICAgICAgICAgIHZhciAkJHYgPSBfdm0ucXVlc3Rpb24uY2hlY2tlZFZhbHVlLFxuICAgICAgICAgICAgICAgICQkaSA9IF92bS5faSgkJGEsICQkdilcbiAgICAgICAgICAgICAgaWYgKCQkZWwuY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICQkaSA8IDAgJiZcbiAgICAgICAgICAgICAgICAgIF92bS4kc2V0KF92bS5xdWVzdGlvbiwgXCJjaGVja2VkVmFsdWVcIiwgJCRhLmNvbmNhdChbJCR2XSkpXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgJCRpID4gLTEgJiZcbiAgICAgICAgICAgICAgICAgIF92bS4kc2V0KFxuICAgICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIFwiY2hlY2tlZFZhbHVlXCIsXG4gICAgICAgICAgICAgICAgICAgICQkYS5zbGljZSgwLCAkJGkpLmNvbmNhdCgkJGEuc2xpY2UoJCRpICsgMSkpXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIF92bS4kc2V0KF92bS5xdWVzdGlvbiwgXCJjaGVja2VkVmFsdWVcIiwgJCRjKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXG4gICAgICAgIFwic3BhblwiLFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3M6IF92bS5nZXRMYWJlbENsYXNzKGZhbHNlKSxcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICByZXR1cm4gX3ZtLm9uTGFiZWxDbGljaygkZXZlbnQsIGZhbHNlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFwic3VydmV5LXN0cmluZ1wiLCB7XG4gICAgICAgICAgICBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5xdWVzdGlvbi5sb2NMYWJlbEZhbHNlIH1cbiAgICAgICAgICB9KVxuICAgICAgICBdLFxuICAgICAgICAxXG4gICAgICApLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnN3aXRjaCxcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICByZXR1cm4gX3ZtLm9uU3dpdGNoQ2xpY2soJGV2ZW50KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW19jKFwic3BhblwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5zbGlkZXIgfSldXG4gICAgICApLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFxuICAgICAgICBcInNwYW5cIixcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzOiBfdm0uZ2V0TGFiZWxDbGFzcyh0cnVlKSxcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICByZXR1cm4gX3ZtLm9uTGFiZWxDbGljaygkZXZlbnQsIHRydWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLnF1ZXN0aW9uLmxvY0xhYmVsVHJ1ZSB9XG4gICAgICAgICAgfSlcbiAgICAgICAgXSxcbiAgICAgICAgMVxuICAgICAgKVxuICAgIF0pXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnJvb3QsIGF0dHJzOiB7IHJvbGU6IFwiZ3JvdXBcIiB9IH0sXG4gICAgW1xuICAgICAgX3ZtLl9sKF92bS5xdWVzdGlvbi52aXNpYmxlQ2hvaWNlcywgZnVuY3Rpb24oaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBfYyhcInN2LWJ1dHRvbi1ncm91cC1pdGVtXCIsIHtcbiAgICAgICAgICAgIGtleTogX3ZtLnF1ZXN0aW9uLmlucHV0SWQgKyBcIl9cIiArIGluZGV4LFxuICAgICAgICAgICAgYXR0cnM6IHsgaXRlbTogaXRlbSwgcXVlc3Rpb246IF92bS5xdWVzdGlvbiwgaW5kZXg6IGluZGV4IH1cbiAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgICB9KVxuICAgIF0sXG4gICAgMlxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImxhYmVsXCIsXG4gICAge1xuICAgICAgY2xhc3M6IF92bS5tb2RlbC5jc3MubGFiZWwsXG4gICAgICBhdHRyczogeyB0aXRsZTogX3ZtLm1vZGVsLmNhcHRpb24ucmVuZGVyZWRIdG1sIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFwiaW5wdXRcIiwge1xuICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG4gICAgICAgICAgICB2YWx1ZTogX3ZtLm1vZGVsLnF1ZXN0aW9uLnJlbmRlcmVkVmFsdWUsXG4gICAgICAgICAgICBleHByZXNzaW9uOiBcIm1vZGVsLnF1ZXN0aW9uLnJlbmRlcmVkVmFsdWVcIlxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgY2xhc3M6IF92bS5tb2RlbC5jc3MuY29udHJvbCxcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICB0eXBlOiBcInJhZGlvXCIsXG4gICAgICAgICAgbmFtZTogX3ZtLm1vZGVsLm5hbWUsXG4gICAgICAgICAgaWQ6IF92bS5tb2RlbC5pZCxcbiAgICAgICAgICBcImFyaWEtcmVxdWlyZWRcIjogX3ZtLm1vZGVsLmlzUmVxdWlyZWQsXG4gICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF92bS5tb2RlbC5jYXB0aW9uLnJlbmRlcmVkSHRtbCxcbiAgICAgICAgICByb2xlOiBcInJhZGlvXCIsXG4gICAgICAgICAgXCJhcmlhLWludmFsaWRcIjogX3ZtLm1vZGVsLmhhc0Vycm9ycyxcbiAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogX3ZtLm1vZGVsLmRlc2NyaWJlQnksXG4gICAgICAgICAgZGlzYWJsZWQ6IF92bS5tb2RlbC5yZWFkT25seVxuICAgICAgICB9LFxuICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgIHZhbHVlOiBfdm0ubW9kZWwudmFsdWUsXG4gICAgICAgICAgY2hlY2tlZDogX3ZtLl9xKF92bS5tb2RlbC5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlLCBfdm0ubW9kZWwudmFsdWUpXG4gICAgICAgIH0sXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBfdm0uJHNldChcbiAgICAgICAgICAgICAgX3ZtLm1vZGVsLnF1ZXN0aW9uLFxuICAgICAgICAgICAgICBcInJlbmRlcmVkVmFsdWVcIixcbiAgICAgICAgICAgICAgX3ZtLm1vZGVsLnZhbHVlXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAgeyBjbGFzczogX3ZtLm1vZGVsLmNzcy5kZWNvcmF0b3IgfSxcbiAgICAgICAgW1xuICAgICAgICAgICEhX3ZtLm1vZGVsLmljb25OYW1lXG4gICAgICAgICAgICA/IF9jKFwic3Ytc3ZnLWljb25cIiwge1xuICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ubW9kZWwuY3NzLmljb24sXG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIGljb25OYW1lOiBfdm0ubW9kZWwuaWNvbk5hbWUsXG4gICAgICAgICAgICAgICAgICBzaXplOiBfdm0ubW9kZWwuaWNvblNpemVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX3ZtLm1vZGVsLnNob3dDYXB0aW9uXG4gICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5tb2RlbC5jc3MuY2FwdGlvbiB9LFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF9jKFwic3VydmV5LXN0cmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLm1vZGVsLmNhcHRpb24gfVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICBdLFxuICAgICAgICAxXG4gICAgICApXG4gICAgXVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImZpZWxkc2V0XCIsXG4gICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdCB9LFxuICAgIFtcbiAgICAgIF9jKFwibGVnZW5kXCIsIHtcbiAgICAgICAgYXR0cnM6IHsgXCJhcmlhLWxhYmVsXCI6IF92bS5xdWVzdGlvbi5sb2NUaXRsZS5yZW5kZXJlZEh0bWwgfVxuICAgICAgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLl9sKF92bS5xdWVzdGlvbi52aXNpYmxlQ2hvaWNlcywgZnVuY3Rpb24oaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuICFfdm0ucXVlc3Rpb24uaGFzQ29sdW1uc1xuICAgICAgICAgID8gX2MoXCJzdXJ2ZXktY2hlY2tib3gtaXRlbVwiLCB7XG4gICAgICAgICAgICAgIGtleTogaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5nZXRJdGVtQ2xhc3MoaXRlbSksXG4gICAgICAgICAgICAgIGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24sIGl0ZW06IGl0ZW0sIGluZGV4OiBpbmRleCB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgIH0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5fbChfdm0ucXVlc3Rpb24uY29sdW1ucywgZnVuY3Rpb24oY29sdW1uLCBjb2xJbmRleCkge1xuICAgICAgICByZXR1cm4gX3ZtLnF1ZXN0aW9uLmhhc0NvbHVtbnNcbiAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0Q29sdW1uQ2xhc3MoKSB9LFxuICAgICAgICAgICAgICBfdm0uX2woY29sdW1uLCBmdW5jdGlvbihpdGVtLCBpbmRleCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfYyhcInN1cnZleS1jaGVja2JveC1pdGVtXCIsIHtcbiAgICAgICAgICAgICAgICAgIGtleTogaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0uZ2V0SXRlbUNsYXNzKGl0ZW0pLFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb246IF92bS5xdWVzdGlvbixcbiAgICAgICAgICAgICAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgaW5kZXg6IFwiXCIgKyBjb2xJbmRleCArIGluZGV4XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICB9KVxuICAgIF0sXG4gICAgMlxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIFtcbiAgICAgIF9jKFwibGFiZWxcIiwgeyBjbGFzczogX3ZtLmdldExhYmVsQ2xhc3MoX3ZtLml0ZW0pIH0sIFtcbiAgICAgICAgX3ZtLml0ZW0gPT0gX3ZtLnF1ZXN0aW9uLnNlbGVjdEFsbEl0ZW1cbiAgICAgICAgICA/IF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmlzQWxsU2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImlzQWxsU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLml0ZW1Db250cm9sLFxuICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiY2hlY2tib3hcIixcbiAgICAgICAgICAgICAgICBuYW1lOiBfdm0ucXVlc3Rpb24ubmFtZSxcbiAgICAgICAgICAgICAgICBpZDogX3ZtLnF1ZXN0aW9uLmlucHV0SWQgKyBcIl9cIiArIF92bS5pbmRleCxcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogX3ZtLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSB8fCAhX3ZtLml0ZW0uaXNFbmFibGVkLFxuICAgICAgICAgICAgICAgIFwiYXJpYS1yZXF1aXJlZFwiOiBfdm0ucXVlc3Rpb24uaXNSZXF1aXJlZCxcbiAgICAgICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogX3ZtLml0ZW0ubG9jVGV4dC5yZW5kZXJlZEh0bWwsXG4gICAgICAgICAgICAgICAgXCJhcmlhLWludmFsaWRcIjogX3ZtLnF1ZXN0aW9uLmVycm9ycy5sZW5ndGggPiAwLFxuICAgICAgICAgICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOlxuICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmVycm9ycy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICAgID8gX3ZtLnF1ZXN0aW9uLmlkICsgXCJfZXJyb3JzXCJcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IF92bS5pc0FsbFNlbGVjdGVkLFxuICAgICAgICAgICAgICAgIGNoZWNrZWQ6IEFycmF5LmlzQXJyYXkoX3ZtLmlzQWxsU2VsZWN0ZWQpXG4gICAgICAgICAgICAgICAgICA/IF92bS5faShfdm0uaXNBbGxTZWxlY3RlZCwgX3ZtLmlzQWxsU2VsZWN0ZWQpID4gLTFcbiAgICAgICAgICAgICAgICAgIDogX3ZtLmlzQWxsU2VsZWN0ZWRcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICBjaGFuZ2U6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgdmFyICQkYSA9IF92bS5pc0FsbFNlbGVjdGVkLFxuICAgICAgICAgICAgICAgICAgICAkJGVsID0gJGV2ZW50LnRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgJCRjID0gJCRlbC5jaGVja2VkID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSgkJGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciAkJHYgPSBfdm0uaXNBbGxTZWxlY3RlZCxcbiAgICAgICAgICAgICAgICAgICAgICAkJGkgPSBfdm0uX2koJCRhLCAkJHYpXG4gICAgICAgICAgICAgICAgICAgIGlmICgkJGVsLmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAkJGkgPCAwICYmIChfdm0uaXNBbGxTZWxlY3RlZCA9ICQkYS5jb25jYXQoWyQkdl0pKVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICQkaSA+IC0xICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoX3ZtLmlzQWxsU2VsZWN0ZWQgPSAkJGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnNsaWNlKDAsICQkaSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdCgkJGEuc2xpY2UoJCRpICsgMSkpKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBfdm0uaXNBbGxTZWxlY3RlZCA9ICQkY1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICBfdm0uaXRlbSAhPSBfdm0ucXVlc3Rpb24uc2VsZWN0QWxsSXRlbVxuICAgICAgICAgID8gX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBcIm1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtbW9kZWxcIixcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0ucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwicXVlc3Rpb24ucmVuZGVyZWRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbUNvbnRyb2wsXG4gICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJjaGVja2JveFwiLFxuICAgICAgICAgICAgICAgIG5hbWU6IF92bS5xdWVzdGlvbi5uYW1lLFxuICAgICAgICAgICAgICAgIGlkOiBfdm0ucXVlc3Rpb24uaW5wdXRJZCArIFwiX1wiICsgX3ZtLmluZGV4LFxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiBfdm0ucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5IHx8ICFfdm0uaXRlbS5pc0VuYWJsZWQsXG4gICAgICAgICAgICAgICAgXCJhcmlhLXJlcXVpcmVkXCI6IF92bS5xdWVzdGlvbi5pc1JlcXVpcmVkLFxuICAgICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0uaXRlbS5sb2NUZXh0LnJlbmRlcmVkSHRtbCxcbiAgICAgICAgICAgICAgICBcImFyaWEtaW52YWxpZFwiOiBfdm0ucXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA+IDAsXG4gICAgICAgICAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6XG4gICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgPyBfdm0ucXVlc3Rpb24uaWQgKyBcIl9lcnJvcnNcIlxuICAgICAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLml0ZW0udmFsdWUsXG4gICAgICAgICAgICAgICAgY2hlY2tlZDogQXJyYXkuaXNBcnJheShfdm0ucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSlcbiAgICAgICAgICAgICAgICAgID8gX3ZtLl9pKF92bS5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlLCBfdm0uaXRlbS52YWx1ZSkgPiAtMVxuICAgICAgICAgICAgICAgICAgOiBfdm0ucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgIGNoYW5nZTogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICB2YXIgJCRhID0gX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICQkZWwgPSAkZXZlbnQudGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICAkJGMgPSAkJGVsLmNoZWNrZWQgPyB0cnVlIDogZmFsc2VcbiAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KCQkYSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyICQkdiA9IF92bS5pdGVtLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICQkaSA9IF92bS5faSgkJGEsICQkdilcbiAgICAgICAgICAgICAgICAgICAgaWYgKCQkZWwuY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICQkaSA8IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS4kc2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwicmVuZGVyZWRWYWx1ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAkJGEuY29uY2F0KFskJHZdKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICQkaSA+IC0xICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uJHNldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcInJlbmRlcmVkVmFsdWVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJCRhLnNsaWNlKDAsICQkaSkuY29uY2F0KCQkYS5zbGljZSgkJGkgKyAxKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLiRzZXQoX3ZtLnF1ZXN0aW9uLCBcInJlbmRlcmVkVmFsdWVcIiwgJCRjKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICBfYyhcInNwYW5cIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMubWF0ZXJpYWxEZWNvcmF0b3IgfSwgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJzdmdcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLml0ZW1EZWNvcmF0b3IsXG4gICAgICAgICAgICAgIGF0dHJzOiB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtfYyhcInBhdGhcIiwgeyBhdHRyczogeyBkOiBcIk01LDEzbDItMmwzLDNsNy03bDIsMmwtOSw5TDUsMTN6XCIgfSB9KV1cbiAgICAgICAgICApLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX2MoXCJzcGFuXCIsIHsgc3RhdGljQ2xhc3M6IFwiY2hlY2tcIiB9KVxuICAgICAgICBdKSxcbiAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgIV92bS5oaWRlTGFiZWxcbiAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jb250cm9sTGFiZWwsXG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgdGl0bGU6IF92bS5pdGVtLmxvY1RleHQudGV4dCB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtfYyhcInN1cnZleS1zdHJpbmdcIiwgeyBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5pdGVtLmxvY1RleHQgfSB9KV0sXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICBdKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uaXRlbS52YWx1ZSA9PSBfdm0ucXVlc3Rpb24ub3RoZXJJdGVtLnZhbHVlXG4gICAgICAgID8gX2MoXCJzdXJ2ZXktb3RoZXItY2hvaWNlXCIsIHtcbiAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6XG4gICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uaGFzT3RoZXIgJiZcbiAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlICYmXG4gICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uaXNPdGhlclNlbGVjdGVkLFxuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246XG4gICAgICAgICAgICAgICAgICBcIlxcbiAgICAgIHF1ZXN0aW9uLmhhc090aGVyICYmIHF1ZXN0aW9uLnJlbmRlcmVkVmFsdWUgJiYgcXVlc3Rpb24uaXNPdGhlclNlbGVjdGVkXFxuICAgIFwiXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBhdHRyczogeyBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uIH1cbiAgICAgICAgICB9KVxuICAgICAgICA6IF92bS5fZSgpXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIFtcbiAgICAhX3ZtLnF1ZXN0aW9uLmlzUmVhZE9ubHlSZW5kZXJEaXYoKVxuICAgICAgPyBfYyhcInRleHRhcmVhXCIsIHtcbiAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXNcbiAgICAgICAgICAgID8gX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdFxuICAgICAgICAgICAgOiBcInBhbmVsLWNvbW1lbnQtcm9vdFwiLFxuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHJlYWRvbmx5OiBfdm0ucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5LFxuICAgICAgICAgICAgZGlzYWJsZWQ6IF92bS5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHksXG4gICAgICAgICAgICBpZDogX3ZtLnF1ZXN0aW9uLmlucHV0SWQsXG4gICAgICAgICAgICBtYXhsZW5ndGg6IF92bS5xdWVzdGlvbi5nZXRNYXhMZW5ndGgoKSxcbiAgICAgICAgICAgIGNvbHM6IF92bS5xdWVzdGlvbi5jb2xzLFxuICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF92bS5xdWVzdGlvbi5sb2NUaXRsZS5yZW5kZXJlZEh0bWwsXG4gICAgICAgICAgICByb3dzOiBfdm0ucXVlc3Rpb24ucm93cyxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBfdm0ucXVlc3Rpb24ucmVuZGVyZWRQbGFjZUhvbGRlcixcbiAgICAgICAgICAgIFwiYXJpYS1yZXF1aXJlZFwiOiBfdm0ucXVlc3Rpb24uaXNSZXF1aXJlZCxcbiAgICAgICAgICAgIFwiYXJpYS1pbnZhbGlkXCI6IF92bS5xdWVzdGlvbi5lcnJvcnMubGVuZ3RoID4gMCxcbiAgICAgICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOlxuICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICA/IF92bS5xdWVzdGlvbi5pZCArIFwiX2Vycm9yc1wiXG4gICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogX3ZtLnF1ZXN0aW9uLnZhbHVlIH0sXG4gICAgICAgICAgb246IHsgY2hhbmdlOiBfdm0uY2hhbmdlLCBrZXl1cDogX3ZtLmtleXVwIH1cbiAgICAgICAgfSlcbiAgICAgIDogX3ZtLl9lKCksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfdm0ucXVlc3Rpb24uaXNSZWFkT25seVJlbmRlckRpdigpXG4gICAgICA/IF9jKFwiZGl2XCIsIFtfdm0uX3YoX3ZtLl9zKF92bS5xdWVzdGlvbi52YWx1ZSkpXSlcbiAgICAgIDogX3ZtLl9lKClcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiYnV0dG9uXCIsXG4gICAge1xuICAgICAgc3RhdGljQ2xhc3M6IFwic3YtYWN0aW9uLWJhci1pdGVtXCIsXG4gICAgICBjbGFzczogW1xuICAgICAgICB7IFwic3YtYWN0aW9uLWJhci1pdGVtLS1hY3RpdmVcIjogX3ZtLml0ZW0uaXNBY3RpdmUgfSxcbiAgICAgICAgX3ZtLml0ZW0uaW5uZXJDc3NcbiAgICAgIF0sXG4gICAgICBhdHRyczoge1xuICAgICAgICBkaXNhYmxlZDogX3ZtLml0ZW0uZW5hYmxlZCAhPT0gdW5kZWZpbmVkICYmIF92bS5pdGVtLmVuYWJsZWQsXG4gICAgICAgIHRpdGxlOiBfdm0uaXRlbS50b29sdGlwIHx8IF92bS5pdGVtLnRpdGxlXG4gICAgICB9LFxuICAgICAgb246IHtcbiAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIF92bS5pdGVtLmFjdGlvbigpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF92bS5pdGVtLmljb25OYW1lXG4gICAgICAgID8gX2MoXCJzdi1zdmctaWNvblwiLCB7XG4gICAgICAgICAgICBzdGF0aWNDbGFzczogXCJzdi1hY3Rpb24tYmFyLWl0ZW1fX2ljb25cIixcbiAgICAgICAgICAgIGF0dHJzOiB7IGljb25OYW1lOiBfdm0uaXRlbS5pY29uTmFtZSwgc2l6ZTogMjQgfVxuICAgICAgICAgIH0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLml0ZW0uc2hvd1RpdGxlID09PSB1bmRlZmluZWQgfHxcbiAgICAgIF92bS5pdGVtLnNob3dUaXRsZSB8fFxuICAgICAgIV92bS5pdGVtLmljb25OYW1lXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwic3YtYWN0aW9uLWJhci1pdGVtX190aXRsZVwiLFxuICAgICAgICAgICAgICBjbGFzczoge1xuICAgICAgICAgICAgICAgIFwic3YtYWN0aW9uLWJhci1pdGVtX190aXRsZS0td2l0aC1pY29uXCI6ICEhX3ZtLml0ZW0uaWNvbk5hbWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKF92bS5pdGVtLnRpdGxlKSldXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwic3YtcG9wdXBcIiwgeyBhdHRyczogeyBtb2RlbDogX3ZtLml0ZW0ucG9wdXBNb2RlbCB9IH0pXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiYnV0dG9uXCIsXG4gICAge1xuICAgICAgc3RhdGljQ2xhc3M6IFwic3YtYWN0aW9uLWJhci1pdGVtXCIsXG4gICAgICBjbGFzczogW1xuICAgICAgICB7IFwic3YtYWN0aW9uLWJhci1pdGVtLS1hY3RpdmVcIjogX3ZtLml0ZW0uaXNBY3RpdmUgfSxcbiAgICAgICAgX3ZtLml0ZW0uaW5uZXJDc3NcbiAgICAgIF0sXG4gICAgICBhdHRyczoge1xuICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICBkaXNhYmxlZDogX3ZtLml0ZW0uZW5hYmxlZCAhPT0gdW5kZWZpbmVkICYmICFfdm0uaXRlbS5lbmFibGVkLFxuICAgICAgICB0aXRsZTogX3ZtLml0ZW0udG9vbHRpcCB8fCBfdm0uaXRlbS50aXRsZSxcbiAgICAgICAgdGFiaW5kZXg6IF92bS5pdGVtLmRpc2FibGVUYWJTdG9wID8gLTEgOiB1bmRlZmluZWRcbiAgICAgIH0sXG4gICAgICBvbjoge1xuICAgICAgICBjbGljazogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgX3ZtLml0ZW0uYWN0aW9uKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX3ZtLml0ZW0uaWNvbk5hbWVcbiAgICAgICAgPyBfYyhcInN2LXN2Zy1pY29uXCIsIHtcbiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInN2LWFjdGlvbi1iYXItaXRlbV9faWNvblwiLFxuICAgICAgICAgICAgYXR0cnM6IHsgaWNvbk5hbWU6IF92bS5pdGVtLmljb25OYW1lLCBzaXplOiAyNCB9XG4gICAgICAgICAgfSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uaXRlbS5zaG93VGl0bGUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgX3ZtLml0ZW0uc2hvd1RpdGxlIHx8XG4gICAgICAhX3ZtLml0ZW0uaWNvbk5hbWVcbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJzdi1hY3Rpb24tYmFyLWl0ZW1fX3RpdGxlXCIsXG4gICAgICAgICAgICAgIGNsYXNzOiB7XG4gICAgICAgICAgICAgICAgXCJzdi1hY3Rpb24tYmFyLWl0ZW1fX3RpdGxlLS13aXRoLWljb25cIjogISFfdm0uaXRlbS5pY29uTmFtZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW192bS5fdihfdm0uX3MoX3ZtLml0ZW0udGl0bGUpKV1cbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKClcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwge1xuICAgIHN0YXRpY0NsYXNzOiBcInN2LWFjdGlvbi1iYXItc2VwYXJhdG9yXCIsXG4gICAgY2xhc3M6IF92bS5pbm5lckNzc1xuICB9KVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX3ZtLm1vZGVsLmhhc0l0ZW1zXG4gICAgPyBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAge1xuICAgICAgICAgIHJlZjogXCJjb250YWluZXJcIixcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJzdi1hY3Rpb24tYmFyXCIsXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgX3ZtLl9sKF92bS5tb2RlbC5hY3Rpb25zLCBmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIF9jKFwic3YtYWN0aW9uXCIsIHsga2V5OiBpdGVtLmlkLCBhdHRyczogeyBpdGVtOiBpdGVtIH0gfSlcbiAgICAgICAgfSksXG4gICAgICAgIDFcbiAgICAgIClcbiAgICA6IF92bS5fZSgpXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcInNwYW5cIixcbiAgICB7XG4gICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgIHZhbHVlOiBfdm0uaXRlbS52aXNpYmxlIHx8IF92bS5pdGVtLnZpc2libGUgPT09IHVuZGVmaW5lZCxcbiAgICAgICAgICBleHByZXNzaW9uOiBcIml0ZW0udmlzaWJsZSB8fCBpdGVtLnZpc2libGUgPT09IHVuZGVmaW5lZFwiXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBzdGF0aWNDbGFzczogXCJzdi1hY3Rpb25cIixcbiAgICAgIGNsYXNzOiB7IFwic3YtYWN0aW9uLS1oaWRkZW5cIjogIV92bS5pdGVtLmlzVmlzaWJsZSB9XG4gICAgfSxcbiAgICBbXG4gICAgICBfdm0uaXRlbS5uZWVkU2VwYXJhdG9yID8gX2MoXCJzdi1hY3Rpb24tYmFyLXNlcGFyYXRvclwiKSA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKF92bS5nZXRDb21wb25lbnROYW1lKCksIHtcbiAgICAgICAgdGFnOiBcImNvbXBvbmVudFwiLFxuICAgICAgICBhdHRyczogeyBpdGVtOiBfdm0uaXRlbSB9XG4gICAgICB9KVxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIFtcbiAgICAgIF9jKFwic3VydmV5LXF1ZXN0aW9uLXRpdGxlLWNvbnRlbnRcIiwge1xuICAgICAgICBhdHRyczogeyBlbGVtZW50OiBfdm0uZWxlbWVudCwgY3NzOiBfdm0uY3NzIH1cbiAgICAgIH0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwic3BhblwiLCB7XG4gICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICB2YWx1ZTogX3ZtLnNob3dJY29uLFxuICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJzaG93SWNvblwiXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBjbGFzczogX3ZtLmdldEljb25Dc3MoX3ZtLmlzQ29sbGFwc2VkKSxcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICB0YWJpbmRleDogXCIwXCIsXG4gICAgICAgICAgXCJhcmlhLWV4cGFuZGVkXCI6IF92bS5pc0NvbGxhcHNlZCA/IFwiZmFsc2VcIiA6IFwidHJ1ZVwiLFxuICAgICAgICAgIFwiYXJpYS1jb250cm9sc1wiOiAhX3ZtLmlzQ29sbGFwc2VkID8gX3ZtLmVsZW1lbnQuY29udGVudElkIDogbnVsbFxuICAgICAgICB9LFxuICAgICAgICBvbjoge1xuICAgICAgICAgIGtleXVwOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgISRldmVudC50eXBlLmluZGV4T2YoXCJrZXlcIikgJiZcbiAgICAgICAgICAgICAgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcImVudGVyXCIsIDEzLCAkZXZlbnQua2V5LCBcIkVudGVyXCIpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBfdm0uY2hhbmdlRXhwYW5kZWQuYXBwbHkobnVsbCwgYXJndW1lbnRzKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJ1bFwiLFxuICAgIHtcbiAgICAgIHN0YXRpY0NsYXNzOiBcInN2LWxpc3RcIixcbiAgICAgIG9uOiB7XG4gICAgICAgIG1vdXNlZG93bjogZnVuY3Rpb24oZGF0YSwgZSkge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBfdm0uX2woX3ZtLm1vZGVsLml0ZW1zLCBmdW5jdGlvbihpdGVtKSB7XG4gICAgICByZXR1cm4gX2MoXG4gICAgICAgIFwibGlcIixcbiAgICAgICAge1xuICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgIHZhbHVlOiBpdGVtLnZpc2libGUgPT09IHVuZGVmaW5lZCB8fCBpdGVtLnZpc2libGUsXG4gICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiaXRlbS52aXNpYmxlID09PSB1bmRlZmluZWQgfHwgaXRlbS52aXNpYmxlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdLFxuICAgICAgICAgIGtleTogaXRlbS5pZCxcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJzdi1saXN0X19pdGVtXCIsXG4gICAgICAgICAgY2xhc3M6IF92bS5tb2RlbC5nZXRJdGVtQ2xhc3MoaXRlbSksXG4gICAgICAgICAgc3R5bGU6IHsgcGFkZGluZ0xlZnQ6IF92bS5tb2RlbC5nZXRJdGVtSW5kZW50KGl0ZW0pIH0sXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF92bS5tb2RlbC5zZWxlY3RJdGVtKGl0ZW0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgaXRlbS5pY29uTmFtZVxuICAgICAgICAgICAgPyBfYyhcInN2LXN2Zy1pY29uXCIsIHtcbiAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJzdi1saXN0X19pdGVtLWljb25cIixcbiAgICAgICAgICAgICAgICBhdHRyczogeyBpY29uTmFtZTogaXRlbS5pY29uTmFtZSwgc2l6ZTogMjQgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKFwic3BhblwiLCBbX3ZtLl92KF92bS5fcyhpdGVtLnRpdGxlKSldKVxuICAgICAgICBdLFxuICAgICAgICAxXG4gICAgICApXG4gICAgfSksXG4gICAgMFxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImJ1dHRvblwiLFxuICAgIHtcbiAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0RGV0YWlsUGFuZWxCdXR0b25Dc3MoX3ZtLnJvdyksXG4gICAgICBhdHRyczoge1xuICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICBcImFyaWEtZXhwYW5kZWRcIjogX3ZtLnF1ZXN0aW9uLmdldElzRGV0YWlsUGFuZWxTaG93aW5nKF92bS5yb3cpXG4gICAgICAgICAgPyBcInRydWVcIlxuICAgICAgICAgIDogXCJmYWxzZVwiLFxuICAgICAgICBcImFyaWEtY29udHJvbHNcIjogX3ZtLnF1ZXN0aW9uLmdldElzRGV0YWlsUGFuZWxTaG93aW5nKF92bS5yb3cpXG4gICAgICAgICAgPyBfdm0ucm93LmRldGFpbFBhbmVsSWRcbiAgICAgICAgICA6IG51bGxcbiAgICAgIH0sXG4gICAgICBvbjoge1xuICAgICAgICBjbGljazogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIF92bS5yb3cuc2hvd0hpZGVEZXRhaWxQYW5lbENsaWNrKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW19jKFwic3BhblwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0RGV0YWlsUGFuZWxJY29uQ3NzKF92bS5yb3cpIH0pXVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcInNwYW5cIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaWNvbkRyYWcgfSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiYnV0dG9uXCIsXG4gICAge1xuICAgICAgY2xhc3M6XG4gICAgICAgIF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmJ1dHRvbiArXG4gICAgICAgIFwiIFwiICtcbiAgICAgICAgX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuYnV0dG9uUmVtb3ZlLFxuICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IF92bS5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHkgfSxcbiAgICAgIG9uOiB7XG4gICAgICAgIGNsaWNrOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gX3ZtLnF1ZXN0aW9uLnJlbW92ZVJvd1VJKF92bS5yb3cpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFwic3VydmV5LXN0cmluZ1wiLCB7XG4gICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLnF1ZXN0aW9uLmxvY1JlbW92ZVJvd1RleHQgfVxuICAgICAgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJzcGFuXCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmljb25SZW1vdmUgfSlcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgIHZhbHVlOiBfdm0ubW9kZWwuaXNWaXNpYmxlLFxuICAgICAgICAgIGV4cHJlc3Npb246IFwibW9kZWwuaXNWaXNpYmxlXCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIHN0YXRpY0NsYXNzOiBcInN2LXBvcHVwXCIsXG4gICAgICBjbGFzczogX3ZtLm1vZGVsLnN0eWxlQ2xhc3MsXG4gICAgICBhdHRyczogeyB0YWJpbmRleDogXCItMVwiIH0sXG4gICAgICBvbjoge1xuICAgICAgICBrZXlkb3duOiBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgIF92bS5tb2RlbC5vbktleURvd24oZXZlbnQpXG4gICAgICAgIH0sXG4gICAgICAgIGNsaWNrOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBfdm0ubW9kZWwuY2xpY2tPdXRzaWRlKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJzdi1wb3B1cF9fY29udGFpbmVyXCIsXG4gICAgICAgICAgc3R5bGU6IHsgbGVmdDogX3ZtLm1vZGVsLmxlZnQsIHRvcDogX3ZtLm1vZGVsLnRvcCB9LFxuICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0uY2xpY2tJbnNpZGUgfVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXCJzcGFuXCIsIHtcbiAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IF92bS5tb2RlbC5zaG93UG9pbnRlcixcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcIm1vZGVsLnNob3dQb2ludGVyXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInN2LXBvcHVwX19wb2ludGVyXCIsXG4gICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICBsZWZ0OiBfdm0ubW9kZWwucG9pbnRlclRhcmdldC5sZWZ0LFxuICAgICAgICAgICAgICB0b3A6IF92bS5tb2RlbC5wb2ludGVyVGFyZ2V0LnRvcFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJzdi1wb3B1cF9fc2Nyb2xsaW5nLWNvbnRlbnRcIiB9LCBbXG4gICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInN2LXBvcHVwX19oZWFkZXJcIiB9KSxcbiAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJzdi1wb3B1cF9fY29udGVudFwiIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgIF92bS5tb2RlbC5jb250ZW50Q29tcG9uZW50TmFtZSxcbiAgICAgICAgICAgICAgICAgIF92bS5fYihcbiAgICAgICAgICAgICAgICAgICAgeyB0YWc6IFwiY29tcG9uZW50XCIgfSxcbiAgICAgICAgICAgICAgICAgICAgXCJjb21wb25lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgX3ZtLm1vZGVsLmNvbnRlbnRDb21wb25lbnREYXRhLFxuICAgICAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICBfdm0ubW9kZWwuaXNNb2RhbFxuICAgICAgICAgICAgICA/IF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwic3YtcG9wdXBfX2Zvb3RlclwiIH0sIFtcbiAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICBcInN2LXBvcHVwX19mb290ZXItaXRlbSBzdi1wb3B1cF9fYnV0dG9uIHN2LXBvcHVwX19idXR0b24tLWNhbmNlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5tb2RlbC5jYW5jZWwoKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKF92bS5tb2RlbC5jYW5jZWxCdXR0b25UZXh0KSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOlxuICAgICAgICAgICAgICAgICAgICAgICAgXCJzdi1wb3B1cF9fZm9vdGVyLWl0ZW0gc3YtcG9wdXBfX2J1dHRvbiBzdi1wb3B1cF9fYnV0dG9uLS1jYW5jZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0ubW9kZWwuYXBwbHkoKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKF92bS5tb2RlbC5hcHBseUJ1dHRvblRleHQpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgIF0pXG4gICAgICAgIF1cbiAgICAgIClcbiAgICBdXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIpXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcInN2Z1wiLFxuICAgIHsgcmVmOiBcInN2Z0ljb25cIiwgc3RhdGljQ2xhc3M6IFwic3Ytc3ZnLWljb25cIiwgYXR0cnM6IHsgcm9sZTogXCJpbWdcIiB9IH0sXG4gICAgW19jKFwidXNlXCIpXVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHsgc3RhdGljQ2xhc3M6IFwic3YtdGl0bGUtYWN0aW9uc1wiIH0sXG4gICAgW1xuICAgICAgX2MoXG4gICAgICAgIFwic3BhblwiLFxuICAgICAgICB7IHN0YXRpY0NsYXNzOiBcInN2LXRpdGxlLWFjdGlvbnNfX3RpdGxlXCIgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF92bS5lbGVtZW50LmlzUGFnZVxuICAgICAgICAgICAgPyBfYyhcInN1cnZleS1zdHJpbmdcIiwge1xuICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLmVsZW1lbnQubG9jVGl0bGUgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICFfdm0uZWxlbWVudC5pc1BhZ2VcbiAgICAgICAgICAgID8gX2MoXCJzdXJ2ZXktcXVlc3Rpb24tdGl0bGUtY29udGVudFwiLCB7XG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgZWxlbWVudDogX3ZtLmVsZW1lbnQsIGNzczogX3ZtLmNzcyB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgIF0sXG4gICAgICAgIDFcbiAgICAgICksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJzdi1hY3Rpb24tYmFyXCIsIHtcbiAgICAgICAgc3RhdGljQ2xhc3M6IFwic3YtdGl0bGUtYWN0aW9uc19fYmFyXCIsXG4gICAgICAgIGF0dHJzOiB7IG1vZGVsOiBfdm0udG9vbGJhciB9XG4gICAgICB9KVxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcInN1cnZleS1wYW5lbFwiLCB7XG4gICAgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5jb250ZW50UGFuZWwsIGNzczogX3ZtLmNzcyB9XG4gIH0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhfdm0uZ2V0Q29tcG9uZW50TmFtZShfdm0uY29udGVudFF1ZXN0aW9uKSwge1xuICAgIHRhZzogXCJjb21wb25lbnRcIixcbiAgICBhdHRyczogeyBxdWVzdGlvbjogX3ZtLmNvbnRlbnRRdWVzdGlvbiwgY3NzOiBfdm0uY3NzIH1cbiAgfSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgW1xuICAgICAgX3ZtLmhhc0h0bWxcbiAgICAgICAgPyBfYyhcImRpdlwiLCB7IGRvbVByb3BzOiB7IGlubmVySFRNTDogX3ZtLl9zKF92bS5jdXN0b21IdG1sKSB9IH0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLmhhc0RlZmF1bHRSZW5kZXJcbiAgICAgICAgPyBfYyhfdm0uY29tcG9uZW50TmFtZSwge1xuICAgICAgICAgICAgdGFnOiBcImNvbXBvbmVudFwiLFxuICAgICAgICAgICAgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5xdWVzdGlvbiwgY3NzOiBfdm0uY3NzIH1cbiAgICAgICAgICB9KVxuICAgICAgICA6IF92bS5fZSgpXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdCB9LFxuICAgIFtcbiAgICAgICFfdm0ucXVlc3Rpb24uaXNSZWFkT25seVxuICAgICAgICA/IF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnNlbGVjdFdyYXBwZXIgfSwgW1xuICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgIFwic2VsZWN0XCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwibW9kZWxcIixcbiAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0ucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJxdWVzdGlvbi5yZW5kZXJlZFZhbHVlXCJcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0Q29udHJvbENsYXNzKCksXG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIGlkOiBfdm0ucXVlc3Rpb24uaW5wdXRJZCxcbiAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZTogX3ZtLnF1ZXN0aW9uLmF1dG9Db21wbGV0ZSxcbiAgICAgICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0ucXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sLFxuICAgICAgICAgICAgICAgICAgXCJhcmlhLWludmFsaWRcIjogX3ZtLnF1ZXN0aW9uLmVycm9ycy5sZW5ndGggPiAwLFxuICAgICAgICAgICAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6XG4gICAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5lcnJvcnMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgICAgID8gX3ZtLnF1ZXN0aW9uLmlkICsgXCJfZXJyb3JzXCJcbiAgICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImFyaWEtcmVxdWlyZWRcIjogX3ZtLnF1ZXN0aW9uLmlzUmVxdWlyZWQsXG4gICAgICAgICAgICAgICAgICByZXF1aXJlZDogX3ZtLnF1ZXN0aW9uLmlzUmVxdWlyZWRcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICBjaGFuZ2U6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgJCRzZWxlY3RlZFZhbCA9IEFycmF5LnByb3RvdHlwZS5maWx0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAuY2FsbCgkZXZlbnQudGFyZ2V0Lm9wdGlvbnMsIGZ1bmN0aW9uKG8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvLnNlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uKG8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWwgPSBcIl92YWx1ZVwiIGluIG8gPyBvLl92YWx1ZSA6IG8udmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWxcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICBfdm0uJHNldChcbiAgICAgICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJlZFZhbHVlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnRhcmdldC5tdWx0aXBsZSA/ICQkc2VsZWN0ZWRWYWwgOiAkJHNlbGVjdGVkVmFsWzBdXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uc2hvd09wdGlvbnNDYXB0aW9uXG4gICAgICAgICAgICAgICAgICA/IF9jKFwib3B0aW9uXCIsIHsgZG9tUHJvcHM6IHsgdmFsdWU6IHVuZGVmaW5lZCB9IH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3MoX3ZtLnF1ZXN0aW9uLm9wdGlvbnNDYXB0aW9uKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgX3ZtLl9sKF92bS5xdWVzdGlvbi52aXNpYmxlQ2hvaWNlcywgZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgICAgICAgICBcIm9wdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgZGlzYWJsZWQ6ICFpdGVtLmlzRW5hYmxlZCB9LFxuICAgICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7IHZhbHVlOiBpdGVtLnZhbHVlIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgW192bS5fdihcIlxcbiAgICAgICAgXCIgKyBfdm0uX3MoaXRlbS50ZXh0KSArIFwiXFxuICAgICAgXCIpXVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdKVxuICAgICAgICA6IF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5nZXRDb250cm9sQ2xhc3MoKSxcbiAgICAgICAgICAgICAgYXR0cnM6IHsgZGlzYWJsZWQ6IFwiXCIsIGlkOiBfdm0ucXVlc3Rpb24uaW5wdXRJZCB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgXCJcXG4gICAgXCIgK1xuICAgICAgICAgICAgICAgICAgX3ZtLl9zKFxuICAgICAgICAgICAgICAgICAgICBfdm0uaXNPdGhlclNlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgPyBfdm0ucXVlc3Rpb24ub3RoZXJUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgOiBfdm0ucXVlc3Rpb24uZGlzcGxheVZhbHVlXG4gICAgICAgICAgICAgICAgICApICtcbiAgICAgICAgICAgICAgICAgIFwiXFxuICBcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICBdXG4gICAgICAgICAgKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcInN1cnZleS1vdGhlci1jaG9pY2VcIiwge1xuICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgdmFsdWU6IF92bS5pc090aGVyU2VsZWN0ZWQsXG4gICAgICAgICAgICBleHByZXNzaW9uOiBcImlzT3RoZXJTZWxlY3RlZFwiXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBhdHRyczogeyBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uIH1cbiAgICAgIH0pXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgeyBjbGFzczogX3ZtLmdldFJvb3RDbGFzcyhfdm0uZWxlbWVudCkgfSxcbiAgICBbXG4gICAgICAhX3ZtLmVsZW1lbnQuaXNQYW5lbCAmJiBfdm0uZWxlbWVudC5oYXNUaXRsZU9uTGVmdFRvcFxuICAgICAgICA/IF9jKFwic3VydmV5LWVsZW1lbnQtaGVhZGVyXCIsIHtcbiAgICAgICAgICAgIGF0dHJzOiB7IGVsZW1lbnQ6IF92bS5lbGVtZW50LCBjc3M6IF92bS5jc3MgfVxuICAgICAgICAgIH0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHtcbiAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmVsZW1lbnQuaXNQYW5lbCB8fCAhX3ZtLmVsZW1lbnQuaXNDb2xsYXBzZWQsXG4gICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiZWxlbWVudC5pc1BhbmVsIHx8ICFlbGVtZW50LmlzQ29sbGFwc2VkXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdLFxuICAgICAgICAgIGNsYXNzOiBfdm0uZ2V0Q29udGVudENsYXNzKF92bS5lbGVtZW50KVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgIV92bS5lbGVtZW50LmlzUGFuZWwgJiYgX3ZtLmhhc0Vycm9yc09uVG9wXG4gICAgICAgICAgICA/IF9jKFwic3VydmV5LWVycm9yc1wiLCB7XG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5lbGVtZW50LCBsb2NhdGlvbjogXCJ0b3BcIiB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX2MoX3ZtLmdldENvbXBvbmVudE5hbWUoX3ZtLmVsZW1lbnQpLCB7XG4gICAgICAgICAgICB0YWc6IFwiY29tcG9uZW50XCIsXG4gICAgICAgICAgICBhdHRyczogeyBxdWVzdGlvbjogX3ZtLmVsZW1lbnQsIGNzczogX3ZtLmNzcyB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfdm0uZWxlbWVudC5oYXNDb21tZW50XG4gICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgeyBjbGFzczogX3ZtLmVsZW1lbnQuY3NzQ2xhc3Nlcy5mb3JtR3JvdXAgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCBbX3ZtLl92KF92bS5fcyhfdm0uZWxlbWVudC5jb21tZW50VGV4dCkpXSksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktb3RoZXItY2hvaWNlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICBjb21tZW50Q2xhc3M6IF92bS5jc3MuY29tbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbjogX3ZtLmVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICFfdm0uZWxlbWVudC5pc1BhbmVsICYmIF92bS5oYXNFcnJvcnNPbkJvdHRvbVxuICAgICAgICAgICAgPyBfYyhcInN1cnZleS1lcnJvcnNcIiwge1xuICAgICAgICAgICAgICAgIGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0uZWxlbWVudCwgbG9jYXRpb246IFwiYm90dG9tXCIgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICFfdm0uZWxlbWVudC5pc1BhbmVsICYmIF92bS5lbGVtZW50Lmhhc0Rlc2NyaXB0aW9uVW5kZXJJbnB1dFxuICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5lbGVtZW50LmNzc0NsYXNzZXMuZGVzY3JpcHRpb25VbmRlcklucHV0IH0sXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0uZWxlbWVudC5sb2NEZXNjcmlwdGlvbiB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgIF0sXG4gICAgICAgIDFcbiAgICAgICksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgIV92bS5lbGVtZW50LmlzUGFuZWwgJiYgX3ZtLmVsZW1lbnQuaGFzVGl0bGVPbkJvdHRvbVxuICAgICAgICA/IF9jKFwic3VydmV5LWVsZW1lbnQtaGVhZGVyXCIsIHtcbiAgICAgICAgICAgIGF0dHJzOiB7IGVsZW1lbnQ6IF92bS5lbGVtZW50LCBjc3M6IF92bS5jc3MgfVxuICAgICAgICAgIH0pXG4gICAgICAgIDogX3ZtLl9lKClcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBjbGFzczogX3ZtLmdldEhlYWRlckNsYXNzKF92bS5lbGVtZW50KSxcbiAgICAgIG9uOiB7IGNsaWNrOiBfdm0uY2xpY2tUaXRsZUZ1bmN0aW9uIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF92bS5lbGVtZW50Lmhhc1RpdGxlXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcImg1XCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzOiBfdm0uZ2V0VGl0bGVDbGFzcyhfdm0uZWxlbWVudCksXG4gICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF92bS5lbGVtZW50LmxvY1RpdGxlLnJlbmRlcmVkSHRtbCxcbiAgICAgICAgICAgICAgICBpZDogX3ZtLmVsZW1lbnQuYXJpYVRpdGxlSWQsXG4gICAgICAgICAgICAgICAgdGFiaW5kZXg6IF92bS5lbGVtZW50LnRpdGxlVGFiSW5kZXgsXG4gICAgICAgICAgICAgICAgXCJhcmlhLWV4cGFuZGVkXCI6IF92bS5lbGVtZW50LnRpdGxlQXJpYUV4cGFuZGVkXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5lbGVtZW50LnRvZ2dsZVN0YXRlKClcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGtleXVwOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgIF92bS5rZXl1cCgkZXZlbnQpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhfdm0uZWxlbWVudC5nZXRUaXRsZUNvbXBvbmVudE5hbWUoKSwge1xuICAgICAgICAgICAgICAgIHRhZzogXCJjb21wb25lbnRcIixcbiAgICAgICAgICAgICAgICBhdHRyczogeyBlbGVtZW50OiBfdm0uZWxlbWVudCwgY3NzOiBfdm0uY3NzIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5lbGVtZW50Lmhhc0Rlc2NyaXB0aW9uVW5kZXJUaXRsZVxuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHsgY2xhc3M6IF92bS5lbGVtZW50LmNzc0NsYXNzZXMuZGVzY3JpcHRpb24gfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5lbGVtZW50LmxvY0Rlc2NyaXB0aW9uIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpXG4gICAgXVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgIHZhbHVlOiBfdm0ucXVlc3Rpb24uaGFzVmlzaWJsZUVycm9ycyxcbiAgICAgICAgICBleHByZXNzaW9uOiBcInF1ZXN0aW9uLmhhc1Zpc2libGVFcnJvcnNcIlxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgY2xhc3M6IF92bS5jbGFzc2VzLFxuICAgICAgYXR0cnM6IHtcbiAgICAgICAgcm9sZTogXCJhbGVydFwiLFxuICAgICAgICBcImFyaWEtbGl2ZVwiOiBcInBvbGl0ZVwiLFxuICAgICAgICBpZDogX3ZtLnF1ZXN0aW9uLmlkICsgXCJfZXJyb3JzXCJcbiAgICAgIH1cbiAgICB9LFxuICAgIF92bS5fbChfdm0ucXVlc3Rpb24uZXJyb3JzLCBmdW5jdGlvbihlcnJvcikge1xuICAgICAgcmV0dXJuIF9jKFwiZGl2XCIsIFtcbiAgICAgICAgX2MoXCJzcGFuXCIsIHtcbiAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXNcbiAgICAgICAgICAgID8gX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZXJyb3IuaWNvblxuICAgICAgICAgICAgOiBcInBhbmVsLWVycm9yLWljb25cIixcbiAgICAgICAgICBhdHRyczogeyBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiIH1cbiAgICAgICAgfSksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF9jKFxuICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlc1xuICAgICAgICAgICAgICA/IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmVycm9yLml0ZW1cbiAgICAgICAgICAgICAgOiBcInBhbmVsLWVycm9yLWl0ZW1cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgW19jKFwic3VydmV5LXN0cmluZ1wiLCB7IGF0dHJzOiB7IGxvY1N0cmluZzogZXJyb3IubG9jVGV4dCB9IH0pXSxcbiAgICAgICAgICAxXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgfSksXG4gICAgMFxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy50ZXh0IH0sIFtcbiAgICBfdm0uX3YoX3ZtLl9zKF92bS5xdWVzdGlvbi5kaXNwbGF5VmFsdWUpKVxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdCB9LCBbXG4gICAgIV92bS5xdWVzdGlvbi5pc1JlYWRPbmx5XG4gICAgICA/IF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5maWxlSW5wdXQsXG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIHR5cGU6IFwiZmlsZVwiLFxuICAgICAgICAgICAgaWQ6IF92bS5xdWVzdGlvbi5pbnB1dElkLFxuICAgICAgICAgICAgXCJhcmlhLXJlcXVpcmVkXCI6IF92bS5xdWVzdGlvbi5pc1JlcXVpcmVkLFxuICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF92bS5xdWVzdGlvbi5sb2NUaXRsZS5yZW5kZXJlZEh0bWwsXG4gICAgICAgICAgICBcImFyaWEtaW52YWxpZFwiOiBfdm0ucXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA+IDAsXG4gICAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjpcbiAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmVycm9ycy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBfdm0ucXVlc3Rpb24uaWQgKyBcIl9lcnJvcnNcIlxuICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgIG11bHRpcGxlOiBfdm0ucXVlc3Rpb24uYWxsb3dNdWx0aXBsZSA/IFwibXVsdGlwbGVcIiA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHRpdGxlOiBfdm0ucXVlc3Rpb24uaW5wdXRUaXRsZSxcbiAgICAgICAgICAgIGFjY2VwdDogX3ZtLnF1ZXN0aW9uLmFjY2VwdGVkVHlwZXNcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uOiB7IGNoYW5nZTogX3ZtLmRvQ2hhbmdlIH1cbiAgICAgICAgfSlcbiAgICAgIDogX3ZtLl9lKCksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfdm0ucXVlc3Rpb24uaXNSZWFkT25seVxuICAgICAgPyBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICBjbGFzczogX3ZtLmdldFBsYWNlaG9sZGVyQ2xhc3MoKSxcbiAgICAgICAgICBzdGF0aWNTdHlsZTogeyBjb2xvcjogXCJ0cmFuc3BhcmVudFwiIH0sXG4gICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJmaWxlXCIsIGRpc2FibGVkOiBcIlwiLCBwbGFjZWhvbGRlcjogX3ZtLnF1ZXN0aW9uLnRpdGxlIH1cbiAgICAgICAgfSlcbiAgICAgIDogX3ZtLl9lKCksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfYyhcbiAgICAgIFwiZGl2XCIsXG4gICAgICB7XG4gICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5maWxlRGVjb3JhdG9yLFxuICAgICAgICBvbjogeyBkcm9wOiBfdm0ub25Ecm9wLCBkcmFnb3ZlcjogX3ZtLm9uRHJhZ092ZXIgfVxuICAgICAgfSxcbiAgICAgIFtcbiAgICAgICAgX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMud3JhcHBlciB9LCBbXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcImxhYmVsXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzOlxuICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNob29zZUZpbGUgK1xuICAgICAgICAgICAgICAgIChfdm0ucXVlc3Rpb24uaXNSZWFkT25seVxuICAgICAgICAgICAgICAgICAgPyBcIiBcIiArIF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNvbnRyb2xEaXNhYmxlZFxuICAgICAgICAgICAgICAgICAgOiBcIlwiKSxcbiAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICByb2xlOiBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgIGZvcjogX3ZtLnF1ZXN0aW9uLmlucHV0SWQsXG4gICAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF92bS5xdWVzdGlvbi5jaG9vc2VCdXR0b25DYXB0aW9uXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhfdm0ucXVlc3Rpb24uY2hvb3NlQnV0dG9uQ2FwdGlvbikpXVxuICAgICAgICAgICksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfdm0ucXVlc3Rpb24uaXNFbXB0eSgpXG4gICAgICAgICAgICA/IF9jKFwic3BhblwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5ub0ZpbGVDaG9zZW4gfSwgW1xuICAgICAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLnF1ZXN0aW9uLm5vRmlsZUNob3NlbkNhcHRpb24pKVxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICBdKVxuICAgICAgXVxuICAgICksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICAhX3ZtLnF1ZXN0aW9uLmlzUmVhZE9ubHkgJiYgIV92bS5xdWVzdGlvbi5pc0VtcHR5KClcbiAgICAgID8gX2MoXG4gICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVtb3ZlQnV0dG9uLFxuICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiB9LFxuICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5kb0NsZWFuIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFtfdm0uX3YoXCJcXG4gICAgXCIgKyBfdm0uX3MoX3ZtLnF1ZXN0aW9uLmNsZWFuQnV0dG9uQ2FwdGlvbikgKyBcIlxcbiAgXCIpXVxuICAgICAgICApXG4gICAgICA6IF92bS5fZSgpLFxuICAgIF92bS5fdihcIiBcIiksXG4gICAgIV92bS5xdWVzdGlvbi5pc0VtcHR5KClcbiAgICAgID8gX2MoXG4gICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICBfdm0uX2woX3ZtLnF1ZXN0aW9uLnByZXZpZXdWYWx1ZSwgZnVuY3Rpb24odmFsLCBpbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwsXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwidmFsXCJcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIGtleTogX3ZtLnF1ZXN0aW9uLmlucHV0SWQgKyBcIl9cIiArIGluZGV4LFxuICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcmV2aWV3XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICB2YWwubmFtZVxuICAgICAgICAgICAgICAgICAgPyBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5maWxlU2lnbiB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcImFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmOiB2YWwuY29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogdmFsLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG93bmxvYWQ6IHZhbC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBfdm0ucXVlc3Rpb24uaW1hZ2VXaWR0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uZG9Eb3dubG9hZEZpbGUoJGV2ZW50LCB2YWwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgW192bS5fdihfdm0uX3ModmFsLm5hbWUpKV1cbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmNhblByZXZpZXdJbWFnZSh2YWwpXG4gICAgICAgICAgICAgICAgICA/IF9jKFwiaW1nXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3JjOiB2YWwuY29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogX3ZtLnF1ZXN0aW9uLmltYWdlSGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IF92bS5xdWVzdGlvbi5pbWFnZVdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWx0OiBcIkZpbGUgcHJldmlld1wiXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgIHZhbC5uYW1lICYmICFfdm0ucXVlc3Rpb24uaXNSZWFkT25seVxuICAgICAgICAgICAgICAgICAgPyBfYyhcImRpdlwiLCBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnJlbW92ZUZpbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5kb1JlbW92ZUZpbGUodmFsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKF92bS5xdWVzdGlvbi5yZW1vdmVGaWxlQ2FwdGlvbikpXVxuICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic3ZnXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yZW1vdmVGaWxlU3ZnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5kb1JlbW92ZUZpbGUodmFsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJwYXRoXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJNOCwyQzQuNywyLDIsNC43LDIsOHMyLjcsNiw2LDZzNi0yLjcsNi02UzExLjMsMiw4LDJ6IE0xMSwxMGwtMSwxTDgsOWwtMiwybC0xLTFsMi0yTDUsNmwxLTFsMiwybDItMmwxLDFMOSw4IEwxMSwxMHpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgdmFsLm5hbWVcbiAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5maWxlU2lnbkJvdHRvbSB9LFxuICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmOiB2YWwuY29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB2YWwubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvd25sb2FkOiB2YWwubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBfdm0ucXVlc3Rpb24uaW1hZ2VXaWR0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5kb0Rvd25sb2FkRmlsZSgkZXZlbnQsIHZhbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKHZhbC5uYW1lKSldXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAwXG4gICAgICAgIClcbiAgICAgIDogX3ZtLl9lKCksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICAhX3ZtLnF1ZXN0aW9uLmlzUmVhZE9ubHkgJiYgIV92bS5xdWVzdGlvbi5pc0VtcHR5KClcbiAgICAgID8gX2MoXG4gICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVtb3ZlQnV0dG9uQm90dG9tLFxuICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiB9LFxuICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5kb0NsZWFuIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFtfdm0uX3YoXCJcXG4gICAgXCIgKyBfdm0uX3MoX3ZtLnF1ZXN0aW9uLmNsZWFuQnV0dG9uQ2FwdGlvbikgKyBcIlxcbiAgXCIpXVxuICAgICAgICApXG4gICAgICA6IF92bS5fZSgpXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfdm0ucXVlc3Rpb24uaXNWaXNpYmxlXG4gICAgPyBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wYW5lbC5jb250YWluZXIsXG4gICAgICAgICAgc3R5bGU6IF92bS5yb290U3R5bGVcbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJoNFwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5oYXNUaXRsZSxcbiAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiaGFzVGl0bGVcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5nZXRUaXRsZVN0eWxlKCksXG4gICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0uY2hhbmdlRXhwYW5kZWQgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5xdWVzdGlvbi5sb2NUaXRsZSB9XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfYyhcInNwYW5cIiwge1xuICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uc2hvd0ljb24sXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwic2hvd0ljb25cIlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgY2xhc3M6IF92bS5pY29uQ3NzXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgICksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wYW5lbC5kZXNjcmlwdGlvbiB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcInN1cnZleS1zdHJpbmdcIiwge1xuICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLnF1ZXN0aW9uLmxvY0Rlc2NyaXB0aW9uIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKFwic3VydmV5LWVycm9yc1wiLCB7IGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24gfSB9KSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJmLXBhbmVsXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogIV92bS5pc0NvbGxhcHNlZCxcbiAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiIWlzQ29sbGFwc2VkXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHN0eWxlOiB7IHBhZGRpbmdMZWZ0OiBfdm0ucXVlc3Rpb24uaW5uZXJQYWRkaW5nTGVmdCB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcInN1cnZleS1mbG93cGFuZWxlbGVtZW50XCIsIHtcbiAgICAgICAgICAgICAgICBhdHRyczogeyBub2RlOiBfdm0ucm9vdE5vZGUsIHBhbmVsOiBfdm0ucXVlc3Rpb24sIGNzczogXCJjc3NcIiB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgIClcbiAgICAgICAgXSxcbiAgICAgICAgMVxuICAgICAgKVxuICAgIDogX3ZtLl9lKClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwic3BhblwiLFxuICAgIHsgc3R5bGU6IF92bS5zdHlsZSB9LFxuICAgIFtcbiAgICAgICFfdm0ucXVlc3Rpb25cbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIF92bS50YWdOYW1lLFxuICAgICAgICAgICAgeyB0YWc6IFwiY29tcG9uZW50XCIgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX3ZtLl9sKF92bS5ub2RlcywgZnVuY3Rpb24oZWxOb2RlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9jKFwic3VydmV5LWZsb3dwYW5lbGVsZW1lbnRcIiwge1xuICAgICAgICAgICAgICAgICAga2V5OiBlbE5vZGUuZWxlbWVudElkLFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgbm9kZTogZWxOb2RlLCBwYW5lbDogX3ZtLnBhbmVsLCBjc3M6IFwiY3NzXCIgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBfdm0uX3YoXCJcXG4gICAgXCIgKyBfdm0uX3MoX3ZtLnRleHQpICsgXCJcXG4gIFwiKVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDJcbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgISFfdm0ucXVlc3Rpb25cbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcInN1cnZleS1lbGVtZW50XCIsIHtcbiAgICAgICAgICAgICAgICBrZXk6IF92bS5xdWVzdGlvbi5pZFZhbHVlLFxuICAgICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICBmbGV4QmFzaXM6IF92bS5xdWVzdGlvbi5yZW5kZXJXaWR0aCxcbiAgICAgICAgICAgICAgICAgIGZsZXhHcm93OiAxLFxuICAgICAgICAgICAgICAgICAgZmxleFNocmluazogMSxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiBfdm0ucXVlc3Rpb24ucmVuZGVyV2lkdGgsXG4gICAgICAgICAgICAgICAgICBtaW5XaWR0aDogX3ZtLnF1ZXN0aW9uLm1pbldpZHRoLFxuICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IF92bS5xdWVzdGlvbi5tYXhXaWR0aFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIGlkOiBfdm0ucXVlc3Rpb24uaWQsXG4gICAgICAgICAgICAgICAgICBlbGVtZW50OiBfdm0ucXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICBzdXJ2ZXk6IF92bS5zdXJ2ZXksXG4gICAgICAgICAgICAgICAgICBjc3M6IF92bS5jc3NcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKVxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfdm0uc3VydmV5LnJlbmRlcmVkSGFzSGVhZGVyXG4gICAgPyBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0uc3VydmV5LmNzcy5oZWFkZXIgfSwgW1xuICAgICAgICBfdm0uc3VydmV5LmlzTG9nb0JlZm9yZVxuICAgICAgICAgID8gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnN1cnZleS5sb2dvQ2xhc3NOYW1lcyB9LCBbXG4gICAgICAgICAgICAgIF9jKFwiaW1nXCIsIHtcbiAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnN1cnZleS5jc3MubG9nb0ltYWdlLFxuICAgICAgICAgICAgICAgIHN0eWxlOiB7IG9iamVjdEZpdDogX3ZtLnN1cnZleS5sb2dvRml0IH0sXG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIHNyYzogX3ZtLnN1cnZleS5sb2NMb2dvLnJlbmRlcmVkSHRtbCxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiBfdm0uc3VydmV5LmxvZ29XaWR0aFxuICAgICAgICAgICAgICAgICAgICA/IF92bS5zdXJ2ZXkubG9nb1dpZHRoXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBfdm0uc3VydmV5LmxvZ29IZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgPyBfdm0uc3VydmV5LmxvZ29IZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICBhbHQ6IF92bS5zdXJ2ZXkubG9jVGl0bGUucmVuZGVyZWRIdG1sXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICBfdm0uc3VydmV5LnJlbmRlcmVkSGFzVGl0bGVcbiAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3M6IF92bS5zdXJ2ZXkuY3NzLmhlYWRlclRleHQsXG4gICAgICAgICAgICAgICAgc3R5bGU6IHsgbWF4V2lkdGg6IF92bS5zdXJ2ZXkudGl0bGVNYXhXaWR0aCB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgIFwiaDNcIixcbiAgICAgICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5zdXJ2ZXkuY3NzLnRpdGxlIH0sXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIF9jKFwic3VydmV5LXN0cmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0uc3VydmV5LmxvY1RpdGxlIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgXCJoNVwiLFxuICAgICAgICAgICAgICAgICAgeyBjbGFzczogX3ZtLnN1cnZleS5jc3MuZGVzY3JpcHRpb24gfSxcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5zdXJ2ZXkubG9jRGVzY3JpcHRpb24gfVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICBfdm0uc3VydmV5LmlzTG9nb0FmdGVyXG4gICAgICAgICAgPyBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0uc3VydmV5LmxvZ29DbGFzc05hbWVzIH0sIFtcbiAgICAgICAgICAgICAgX2MoXCJpbWdcIiwge1xuICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0uc3VydmV5LmNzcy5sb2dvSW1hZ2UsXG4gICAgICAgICAgICAgICAgc3R5bGU6IHsgb2JqZWN0Rml0OiBfdm0uc3VydmV5LmxvZ29GaXQgfSxcbiAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgc3JjOiBfdm0uc3VydmV5LmxvY0xvZ28ucmVuZGVyZWRIdG1sLFxuICAgICAgICAgICAgICAgICAgd2lkdGg6IF92bS5zdXJ2ZXkubG9nb1dpZHRoXG4gICAgICAgICAgICAgICAgICAgID8gX3ZtLnN1cnZleS5sb2dvV2lkdGhcbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6IF92bS5zdXJ2ZXkubG9nb0hlaWdodFxuICAgICAgICAgICAgICAgICAgICA/IF92bS5zdXJ2ZXkubG9nb0hlaWdodFxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIGFsdDogX3ZtLnN1cnZleS5sb2NUaXRsZS5yZW5kZXJlZEh0bWxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF92bS5zdXJ2ZXkuaXNMb2dvQWZ0ZXJcbiAgICAgICAgICA/IF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwic3YtbG9nby0tcmlnaHQtdGFpbFwiIH0pXG4gICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgXSlcbiAgICA6IF92bS5fZSgpXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7XG4gICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnJvb3QsXG4gICAgZG9tUHJvcHM6IHsgaW5uZXJIVE1MOiBfdm0uX3MoX3ZtLnF1ZXN0aW9uLmxvY0h0bWwucmVuZGVyZWRIdG1sKSB9XG4gIH0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290IH0sIFtcbiAgICBfdm0ucXVlc3Rpb24uY29udGVudE1vZGUgPT09IFwiaW1hZ2VcIlxuICAgICAgPyBfYyhcImltZ1wiLCB7XG4gICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmltYWdlLFxuICAgICAgICAgIHN0eWxlOiB7IG9iamVjdEZpdDogX3ZtLnF1ZXN0aW9uLmltYWdlRml0IH0sXG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIHNyYzogX3ZtLnF1ZXN0aW9uLmltYWdlTGluayxcbiAgICAgICAgICAgIGFsdDogX3ZtLnF1ZXN0aW9uLnRleHQgfHwgX3ZtLnF1ZXN0aW9uLnRpdGxlLFxuICAgICAgICAgICAgd2lkdGg6IF92bS5xdWVzdGlvbi5pbWFnZVdpZHRoXG4gICAgICAgICAgICAgID8gX3ZtLnF1ZXN0aW9uLmltYWdlV2lkdGggKyBcInB4XCJcbiAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBoZWlnaHQ6IF92bS5xdWVzdGlvbi5pbWFnZUhlaWdodFxuICAgICAgICAgICAgICA/IF92bS5xdWVzdGlvbi5pbWFnZUhlaWdodCArIFwicHhcIlxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIDogX3ZtLl9lKCksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfdm0ucXVlc3Rpb24uY29udGVudE1vZGUgPT09IFwidmlkZW9cIlxuICAgICAgPyBfYyhcImVtYmVkXCIsIHtcbiAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaW1hZ2UsXG4gICAgICAgICAgc3R5bGU6IHsgb2JqZWN0Rml0OiBfdm0ucXVlc3Rpb24uaW1hZ2VGaXQgfSxcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgc3JjOiBfdm0ucXVlc3Rpb24uaW1hZ2VMaW5rLFxuICAgICAgICAgICAgd2lkdGg6IF92bS5xdWVzdGlvbi5pbWFnZVdpZHRoXG4gICAgICAgICAgICAgID8gX3ZtLnF1ZXN0aW9uLmltYWdlV2lkdGggKyBcInB4XCJcbiAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBoZWlnaHQ6IF92bS5xdWVzdGlvbi5pbWFnZUhlaWdodFxuICAgICAgICAgICAgICA/IF92bS5xdWVzdGlvbi5pbWFnZUhlaWdodCArIFwicHhcIlxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIDogX3ZtLl9lKClcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZmllbGRzZXRcIixcbiAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290IH0sXG4gICAgW1xuICAgICAgX2MoXCJsZWdlbmRcIiwge1xuICAgICAgICBhdHRyczogeyBcImFyaWEtbGFiZWxcIjogX3ZtLnF1ZXN0aW9uLmxvY1RpdGxlLnJlbmRlcmVkSHRtbCB9XG4gICAgICB9KSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uX2woX3ZtLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzLCBmdW5jdGlvbihpdGVtLCBpbmRleCkge1xuICAgICAgICByZXR1cm4gX2MoXCJkaXZcIiwgeyBrZXk6IGl0ZW0udmFsdWUsIGNsYXNzOiBfdm0uZ2V0SXRlbUNsYXNzKGl0ZW0pIH0sIFtcbiAgICAgICAgICBfYyhcImxhYmVsXCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmxhYmVsIH0sIFtcbiAgICAgICAgICAgIF92bS5xdWVzdGlvbi5tdWx0aVNlbGVjdFxuICAgICAgICAgICAgICA/IF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0ucXVlc3Rpb24udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJxdWVzdGlvbi52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbUNvbnRyb2wsXG4gICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogeyBkaXNwbGF5OiBcIm5vbmVcIiB9LFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJjaGVja2JveFwiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBfdm0ucXVlc3Rpb24ubmFtZSArIFwiX1wiICsgX3ZtLnF1ZXN0aW9uLmlkLFxuICAgICAgICAgICAgICAgICAgICBpZDogX3ZtLnF1ZXN0aW9uLmlucHV0SWQgKyBcIl9cIiArIGl0ZW0udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBfdm0ucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5IHx8ICFpdGVtLmlzRW5hYmxlZCxcbiAgICAgICAgICAgICAgICAgICAgXCJhcmlhLXJlcXVpcmVkXCI6IF92bS5xdWVzdGlvbi5pc1JlcXVpcmVkLFxuICAgICAgICAgICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogX3ZtLnF1ZXN0aW9uLmxvY1RpdGxlLnJlbmRlcmVkSHRtbCxcbiAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWludmFsaWRcIjogX3ZtLnF1ZXN0aW9uLmVycm9ycy5sZW5ndGggPiAwLFxuICAgICAgICAgICAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjpcbiAgICAgICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgICAgID8gX3ZtLnF1ZXN0aW9uLmlkICsgXCJfZXJyb3JzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBjaGVja2VkOiBBcnJheS5pc0FycmF5KF92bS5xdWVzdGlvbi52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICA/IF92bS5faShfdm0ucXVlc3Rpb24udmFsdWUsIGl0ZW0udmFsdWUpID4gLTFcbiAgICAgICAgICAgICAgICAgICAgICA6IF92bS5xdWVzdGlvbi52YWx1ZVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZTogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFyICQkYSA9IF92bS5xdWVzdGlvbi52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICQkZWwgPSAkZXZlbnQudGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgJCRjID0gJCRlbC5jaGVja2VkID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoJCRhKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyICQkdiA9IGl0ZW0udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICQkaSA9IF92bS5faSgkJGEsICQkdilcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkJGVsLmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJCRpIDwgMCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS4kc2V0KF92bS5xdWVzdGlvbiwgXCJ2YWx1ZVwiLCAkJGEuY29uY2F0KFskJHZdKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICQkaSA+IC0xICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLiRzZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInZhbHVlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJGEuc2xpY2UoMCwgJCRpKS5jb25jYXQoJCRhLnNsaWNlKCQkaSArIDEpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLiRzZXQoX3ZtLnF1ZXN0aW9uLCBcInZhbHVlXCIsICQkYylcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICA6IF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0ucXVlc3Rpb24udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJxdWVzdGlvbi52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbUNvbnRyb2wsXG4gICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogeyBkaXNwbGF5OiBcIm5vbmVcIiB9LFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJyYWRpb1wiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBfdm0ucXVlc3Rpb24ubmFtZSArIFwiX1wiICsgX3ZtLnF1ZXN0aW9uLmlkLFxuICAgICAgICAgICAgICAgICAgICBpZDogX3ZtLnF1ZXN0aW9uLmlucHV0SWQgKyBcIl9cIiArIGl0ZW0udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBfdm0ucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5IHx8ICFpdGVtLmlzRW5hYmxlZCxcbiAgICAgICAgICAgICAgICAgICAgXCJhcmlhLXJlcXVpcmVkXCI6IF92bS5xdWVzdGlvbi5pc1JlcXVpcmVkLFxuICAgICAgICAgICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogX3ZtLnF1ZXN0aW9uLmxvY1RpdGxlLnJlbmRlcmVkSHRtbCxcbiAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWludmFsaWRcIjogX3ZtLnF1ZXN0aW9uLmVycm9ycy5sZW5ndGggPiAwLFxuICAgICAgICAgICAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjpcbiAgICAgICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgICAgID8gX3ZtLnF1ZXN0aW9uLmlkICsgXCJfZXJyb3JzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBjaGVja2VkOiBfdm0uX3EoX3ZtLnF1ZXN0aW9uLnZhbHVlLCBpdGVtLnZhbHVlKVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZTogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS4kc2V0KF92bS5xdWVzdGlvbiwgXCJ2YWx1ZVwiLCBpdGVtLnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgX2MoXCJkaXZcIiwgW1xuICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uY29udGVudE1vZGUgPT09IFwiaW1hZ2VcIlxuICAgICAgICAgICAgICAgID8gX2MoXCJpbWdcIiwge1xuICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaW1hZ2UsXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7IG9iamVjdEZpdDogX3ZtLnF1ZXN0aW9uLmltYWdlRml0IH0sXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgc3JjOiBpdGVtLmltYWdlTGluayxcbiAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogX3ZtLnF1ZXN0aW9uLmltYWdlV2lkdGhcbiAgICAgICAgICAgICAgICAgICAgICAgID8gX3ZtLnF1ZXN0aW9uLmltYWdlV2lkdGggKyBcInB4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogX3ZtLnF1ZXN0aW9uLmltYWdlSGVpZ2h0XG4gICAgICAgICAgICAgICAgICAgICAgICA/IF92bS5xdWVzdGlvbi5pbWFnZUhlaWdodCArIFwicHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgYWx0OiBpdGVtLnRleHQgfHwgaXRlbS52YWx1ZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5jb250ZW50TW9kZSA9PT0gXCJ2aWRlb1wiXG4gICAgICAgICAgICAgICAgPyBfYyhcImVtYmVkXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmltYWdlLFxuICAgICAgICAgICAgICAgICAgICBzdHlsZTogeyBvYmplY3RGaXQ6IF92bS5xdWVzdGlvbi5pbWFnZUZpdCB9LFxuICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgIHNyYzogaXRlbS5pbWFnZUxpbmssXG4gICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IF92bS5xdWVzdGlvbi5pbWFnZVdpZHRoXG4gICAgICAgICAgICAgICAgICAgICAgICA/IF92bS5xdWVzdGlvbi5pbWFnZVdpZHRoICsgXCJweFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IF92bS5xdWVzdGlvbi5pbWFnZUhlaWdodFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBfdm0ucXVlc3Rpb24uaW1hZ2VIZWlnaHQgKyBcInB4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLnNob3dMYWJlbFxuICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLml0ZW1UZXh0LFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHRpdGxlOiBpdGVtLnRleHQgfHwgaXRlbS52YWx1ZSB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKGl0ZW0udGV4dCB8fCBpdGVtLnZhbHVlKSldXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICBdKVxuICAgICAgICBdKVxuICAgICAgfSlcbiAgICBdLFxuICAgIDJcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMudGFibGVXcmFwcGVyIH0sIFtcbiAgICBfYyhcImZpZWxkc2V0XCIsIFtcbiAgICAgIF9jKFwibGVnZW5kXCIsIHtcbiAgICAgICAgYXR0cnM6IHsgXCJhcmlhLWxhYmVsXCI6IF92bS5xdWVzdGlvbi5sb2NUaXRsZS5yZW5kZXJlZEh0bWwgfVxuICAgICAgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJ0YWJsZVwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290IH0sIFtcbiAgICAgICAgX3ZtLnF1ZXN0aW9uLnNob3dIZWFkZXJcbiAgICAgICAgICA/IF9jKFwidGhlYWRcIiwgW1xuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcInRyXCIsXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX2MoXCJ0ZFwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnF1ZXN0aW9uLmhhc1Jvd3MsXG4gICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInF1ZXN0aW9uLmhhc1Jvd3NcIlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX3ZtLl9sKF92bS5xdWVzdGlvbi52aXNpYmxlQ29sdW1ucywgZnVuY3Rpb24oXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXhcbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgXCJ0aFwiLFxuICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaGVhZGVyQ2VsbFxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBjb2x1bW4ubG9jVGV4dCB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF9jKFxuICAgICAgICAgIFwidGJvZHlcIixcbiAgICAgICAgICBfdm0uX2woX3ZtLnF1ZXN0aW9uLnZpc2libGVSb3dzLCBmdW5jdGlvbihyb3csIHJvd0luZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICAgIFwidHJcIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGtleTogXCJyb3ctXCIgKyByb3cubmFtZSArIFwiLVwiICsgcm93SW5kZXgsXG4gICAgICAgICAgICAgICAgY2xhc3M6IHJvdy5yb3dDbGFzc2VzXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgIFwidGRcIixcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0ucXVlc3Rpb24uaGFzUm93cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwicXVlc3Rpb24uaGFzUm93c1wiXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2VsbFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIFtfYyhcInN1cnZleS1zdHJpbmdcIiwgeyBhdHRyczogeyBsb2NTdHJpbmc6IHJvdy5sb2NUZXh0IH0gfSldLFxuICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICBfdm0uX2woX3ZtLnF1ZXN0aW9uLnZpc2libGVDb2x1bW5zLCBmdW5jdGlvbihcbiAgICAgICAgICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4XG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLnF1ZXN0aW9uLmhhc0NlbGxUZXh0XG4gICAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcInRkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0SXRlbUNsYXNzKHJvdywgY29sdW1uKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLmNlbGxDbGljayhyb3csIGNvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwic3VydmV5LXN0cmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY1N0cmluZzogX3ZtLnF1ZXN0aW9uLmdldENlbGxEaXNwbGF5TG9jVGV4dChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICBfdm0uX2woX3ZtLnF1ZXN0aW9uLnZpc2libGVDb2x1bW5zLCBmdW5jdGlvbihcbiAgICAgICAgICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4XG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gIV92bS5xdWVzdGlvbi5oYXNDZWxsVGV4dFxuICAgICAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGNvbHVtbkluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2VsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgdGl0bGU6IGNvbHVtbi5sb2NUZXh0LnJlbmRlcmVkSHRtbCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uY2VsbENsaWNrKHJvdywgY29sdW1uKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsYWJlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5nZXRJdGVtQ2xhc3Mocm93LCBjb2x1bW4pIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIm1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtbW9kZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiByb3cudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInJvdy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbVZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwicmFkaW9cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiByb3cuZnVsbE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IF92bS5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uaW5wdXRJZCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIl9cIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3cubmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIl9cIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5JbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFyaWEtcmVxdWlyZWRcIjogX3ZtLnF1ZXN0aW9uLmlzUmVxdWlyZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNvbHVtbi52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkOiBfdm0uX3Eocm93LnZhbHVlLCBjb2x1bW4udmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uJHNldChyb3csIFwidmFsdWVcIiwgY29sdW1uLnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5tYXRlcmlhbERlY29yYXRvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN2Z1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtRGVjb3JhdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyB2aWV3Qm94OiBcIi0xMiAtMTIgMjQgMjRcIiB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcImNpcmNsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgcjogXCI2XCIsIGN4OiBcIjBcIiwgY3k6IFwiMFwiIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJzcGFuXCIsIHsgc3RhdGljQ2xhc3M6IFwiY2lyY2xlXCIgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJzcGFuXCIsIHsgc3RhdGljQ2xhc3M6IFwiY2hlY2tcIiB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcInNwYW5cIiwgeyBzdHlsZTogeyBkaXNwbGF5OiBcIm5vbmVcIiB9IH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0ucXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAwXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgXSlcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwidGRcIixcbiAgICB7XG4gICAgICBjbGFzczogX3ZtLmNlbGwuY2xhc3NOYW1lLFxuICAgICAgc3R5bGU6IF92bS5nZXRDZWxsU3R5bGUoKSxcbiAgICAgIGF0dHJzOiB7IHRpdGxlOiBfdm0uZ2V0SGVhZGVycygpLCBjb2xzcGFuOiBfdm0uY2VsbC5jb2xTcGFucyB9XG4gICAgfSxcbiAgICBbXG4gICAgICBfdm0uY2VsbC5pc0FjdGlvbnNDZWxsXG4gICAgICAgID8gX2MoXCJzdi1hY3Rpb24tYmFyXCIsIHtcbiAgICAgICAgICAgIGF0dHJzOiB7IG1vZGVsOiBfdm0uY2VsbC5pdGVtLmdldERhdGEoKSwgaGFuZGxlQ2xpY2s6IGZhbHNlIH1cbiAgICAgICAgICB9KVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5jZWxsLmhhc1BhbmVsXG4gICAgICAgID8gX2MoX3ZtLmdldENvbXBvbmVudE5hbWUoX3ZtLmNlbGwucGFuZWwpLCB7XG4gICAgICAgICAgICB0YWc6IFwiY29tcG9uZW50XCIsXG4gICAgICAgICAgICBhdHRyczogeyBxdWVzdGlvbjogX3ZtLmNlbGwucGFuZWwsIGNzczogX3ZtLnF1ZXN0aW9uLnN1cnZleS5jc3MgfVxuICAgICAgICAgIH0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLmNlbGwuaGFzUXVlc3Rpb25cbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF92bS5oYXNFcnJvcnNPblRvcFxuICAgICAgICAgICAgICAgID8gX2MoXCJzdXJ2ZXktZXJyb3JzXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5jZWxsLnF1ZXN0aW9uLCBsb2NhdGlvbjogXCJ0b3BcIiB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICFfdm0uY2VsbC5pc0Nob2ljZSAmJiBfdm0uY2VsbC5xdWVzdGlvbi5pc0RlZmF1bHRSZW5kZXJpbmcoKVxuICAgICAgICAgICAgICAgID8gX2MoX3ZtLmdldENvbXBvbmVudE5hbWUoX3ZtLmNlbGwucXVlc3Rpb24pLCB7XG4gICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmlzVmlzaWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiaXNWaXNpYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHRhZzogXCJjb21wb25lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5jZWxsLnF1ZXN0aW9uIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgIV92bS5jZWxsLmlzQ2hvaWNlICYmICFfdm0uY2VsbC5xdWVzdGlvbi5pc0RlZmF1bHRSZW5kZXJpbmcoKVxuICAgICAgICAgICAgICAgID8gX2MoX3ZtLmNlbGwucXVlc3Rpb24uZ2V0Q29tcG9uZW50TmFtZSgpLCB7XG4gICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmlzVmlzaWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiaXNWaXNpYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHRhZzogXCJjb21wb25lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5jZWxsLnF1ZXN0aW9uIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX3ZtLmNlbGwuaXNDaG9pY2UgJiYgIV92bS5jZWxsLmlzQ2hlY2tib3hcbiAgICAgICAgICAgICAgICA/IF9jKFwic3VydmV5LXJhZGlvZ3JvdXAtaXRlbVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGtleTogX3ZtLmNlbGwuaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5nZXRJdGVtQ2xhc3MoX3ZtLmNlbGwuaXRlbSksXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb246IF92bS5jZWxsLnF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW06IF92bS5jZWxsLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IFwiXCIgKyBfdm0uY2VsbC5pbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICBoaWRlTGFiZWw6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfdm0uY2VsbC5pc0Nob2ljZSAmJiBfdm0uY2VsbC5pc0NoZWNrYm94XG4gICAgICAgICAgICAgICAgPyBfYyhcInN1cnZleS1jaGVja2JveC1pdGVtXCIsIHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiBfdm0uY2VsbC5pdGVtLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLmdldEl0ZW1DbGFzcyhfdm0uY2VsbC5pdGVtKSxcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbjogX3ZtLmNlbGwucXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbTogX3ZtLmNlbGwuaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICBpbmRleDogXCJcIiArIF92bS5jZWxsLmluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgIGhpZGVMYWJlbDogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF92bS5oYXNFcnJvcnNPbkJvdHRvbVxuICAgICAgICAgICAgICAgID8gX2MoXCJzdXJ2ZXktZXJyb3JzXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5jZWxsLnF1ZXN0aW9uLCBsb2NhdGlvbjogXCJib3R0b21cIiB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5jZWxsLmhhc1RpdGxlXG4gICAgICAgID8gX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHsgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0uY2VsbC5sb2NUaXRsZSB9IH0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgISFfdm0uY2VsbC5yZXF1aXJlZFRleHRcbiAgICAgICAgPyBfYyhcInNwYW5cIiwgW192bS5fdihfdm0uX3MoX3ZtLmNlbGwucmVxdWlyZWRUZXh0KSldKVxuICAgICAgICA6IF92bS5fZSgpXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgeyBzdHlsZTogeyBvdmVyZmxvd1g6IF92bS5xdWVzdGlvbi5ob3Jpem9udGFsU2Nyb2xsID8gXCJzY3JvbGxcIiA6IFwiXCIgfSB9LFxuICAgIFtfYyhcInN1cnZleS1tYXRyaXh0YWJsZVwiLCB7IGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24gfSB9KV0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHsgc3R5bGU6IHsgb3ZlcmZsb3dYOiBfdm0ucXVlc3Rpb24uaG9yaXpvbnRhbFNjcm9sbCA/IFwic2Nyb2xsXCIgOiBcIlwiIH0gfSxcbiAgICBbXG4gICAgICBfdm0ucXVlc3Rpb24ucmVuZGVyZWRUYWJsZS5zaG93QWRkUm93T25Ub3BcbiAgICAgICAgPyBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5mb290ZXIgfSwgW1xuICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzczpcbiAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmJ1dHRvbiArXG4gICAgICAgICAgICAgICAgICBcIiBcIiArXG4gICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5idXR0b25BZGQsXG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiB9LFxuICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0uYWRkUm93Q2xpY2sgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLnF1ZXN0aW9uLmxvY0FkZFJvd1RleHQgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgX2MoXCJzcGFuXCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmljb25BZGQgfSlcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkVGFibGUuc2hvd1RhYmxlXG4gICAgICAgID8gX2MoXCJzdXJ2ZXktbWF0cml4dGFibGVcIiwgeyBhdHRyczogeyBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uIH0gfSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAhX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkVGFibGUuc2hvd1RhYmxlXG4gICAgICAgID8gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZW1wdHlSb3dzU2VjdGlvbiB9LCBbXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZW1wdHlSb3dzVGV4dCB9LFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLnF1ZXN0aW9uLmxvY0VtcHR5Um93c1RleHQgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzczpcbiAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmJ1dHRvbiArXG4gICAgICAgICAgICAgICAgICBcIiBcIiArXG4gICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5idXR0b25BZGQgK1xuICAgICAgICAgICAgICAgICAgXCIgXCIgK1xuICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZW1wdHlSb3dzQnV0dG9uLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6IFwiYnV0dG9uXCIgfSxcbiAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmFkZFJvd0NsaWNrIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF9jKFwic3VydmV5LXN0cmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgICBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5xdWVzdGlvbi5sb2NBZGRSb3dUZXh0IH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgIF9jKFwic3BhblwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pY29uQWRkIH0pXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5xdWVzdGlvbi5yZW5kZXJlZFRhYmxlLnNob3dBZGRSb3dPbkJvdHRvbVxuICAgICAgICA/IF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmZvb3RlciB9LCBbXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzOlxuICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuYnV0dG9uICtcbiAgICAgICAgICAgICAgICAgIFwiIFwiICtcbiAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmJ1dHRvbkFkZCxcbiAgICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiIH0sXG4gICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5hZGRSb3dDbGljayB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfYyhcInN1cnZleS1zdHJpbmdcIiwge1xuICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0ucXVlc3Rpb24ubG9jQWRkUm93VGV4dCB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICBfYyhcInNwYW5cIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaWNvbkFkZCB9KVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAxXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSlcbiAgICAgICAgOiBfdm0uX2UoKVxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcInRhYmxlXCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnJvb3QgfSwgW1xuICAgIF92bS50YWJsZS5zaG93SGVhZGVyXG4gICAgICA/IF9jKFwidGhlYWRcIiwgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJ0clwiLFxuICAgICAgICAgICAgX3ZtLl9sKF92bS50YWJsZS5oZWFkZXJSb3cuY2VsbHMsIGZ1bmN0aW9uKGNlbGwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgICAgIFwidGhcIixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBrZXk6IFwiaGVhZGVyX1wiICsgY2VsbC5pZCxcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5oZWFkZXJDZWxsLFxuICAgICAgICAgICAgICAgICAgc3R5bGU6IHsgbWluV2lkdGg6IGNlbGwubWluV2lkdGgsIHdpZHRoOiBjZWxsLndpZHRoIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIGNlbGwuaGFzVGl0bGVcbiAgICAgICAgICAgICAgICAgICAgPyBfYyhcInN1cnZleS1zdHJpbmdcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBjZWxsLmxvY1RpdGxlIH1cbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICEhY2VsbC5yZXF1aXJlZFRleHRcbiAgICAgICAgICAgICAgICAgICAgPyBfYyhcInNwYW5cIiwgW192bS5fdihfdm0uX3MoY2VsbC5yZXF1aXJlZFRleHQpKV0pXG4gICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAwXG4gICAgICAgICAgKVxuICAgICAgICBdKVxuICAgICAgOiBfdm0uX2UoKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF9jKFxuICAgICAgXCJ0Ym9keVwiLFxuICAgICAgX3ZtLl9sKF92bS50YWJsZS5yb3dzLCBmdW5jdGlvbihyb3cpIHtcbiAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgIFwidHJcIixcbiAgICAgICAgICB7IGtleTogX3ZtLnF1ZXN0aW9uLmlucHV0SWQgKyBcIl9cIiArIHJvdy5pZCwgY2xhc3M6IHJvdy5jbGFzc05hbWUgfSxcbiAgICAgICAgICBfdm0uX2wocm93LmNlbGxzLCBmdW5jdGlvbihjZWxsLCBjZWxsSW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiBfYyhcInN1cnZleS1tYXRyaXhjZWxsXCIsIHtcbiAgICAgICAgICAgICAga2V5OiByb3cuaWQgKyBcIl9cIiArIGNlbGxJbmRleCxcbiAgICAgICAgICAgICAgYXR0cnM6IHsgY2VsbDogY2VsbCwgcXVlc3Rpb246IF92bS5xdWVzdGlvbiB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIDFcbiAgICAgICAgKVxuICAgICAgfSksXG4gICAgICAwXG4gICAgKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF92bS50YWJsZS5zaG93Rm9vdGVyXG4gICAgICA/IF9jKFwidGZvb3RcIiwgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJ0clwiLFxuICAgICAgICAgICAgX3ZtLl9sKF92bS50YWJsZS5mb290ZXJSb3cuY2VsbHMsIGZ1bmN0aW9uKGNlbGwsIGNlbGxJbmRleCkge1xuICAgICAgICAgICAgICByZXR1cm4gX2MoXCJzdXJ2ZXktbWF0cml4Y2VsbFwiLCB7XG4gICAgICAgICAgICAgICAga2V5OiBcImZvb3Rlcl9cIiArIGNlbGxJbmRleCxcbiAgICAgICAgICAgICAgICBhdHRyczogeyBjZWxsOiBjZWxsLCBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgMVxuICAgICAgICAgIClcbiAgICAgICAgXSlcbiAgICAgIDogX3ZtLl9lKClcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwidGFibGVcIixcbiAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290IH0sXG4gICAgX3ZtLl9sKF92bS5xdWVzdGlvbi5nZXRSb3dzKCksIGZ1bmN0aW9uKHJvdywgcm93aW5kZXgpIHtcbiAgICAgIHJldHVybiBfYyhcbiAgICAgICAgXCJ0clwiLFxuICAgICAgICB7XG4gICAgICAgICAga2V5OiBfdm0ucXVlc3Rpb24uaW5wdXRJZCArIFwicm93a2V5XCIgKyByb3dpbmRleCxcbiAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm93XG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfdm0uX2wocm93LCBmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcInRkXCIsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAga2V5OiBcImxhYmVsXCIgKyBpdGVtLmVkaXRvci5pZCxcbiAgICAgICAgICAgICAgICAgIGNsYXNzOlxuICAgICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtVGl0bGUgK1xuICAgICAgICAgICAgICAgICAgICBcIiBcIiArXG4gICAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNlbGxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIGl0ZW0uZWRpdG9yLmlzUmVxdWlyZVRleHRCZWZvcmVUaXRsZSB8fFxuICAgICAgICAgICAgICAgICAgaXRlbS5lZGl0b3IuaXNSZXF1aXJlVGV4dE9uU3RhcnRcbiAgICAgICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVxdWlyZWRUZXh0IH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhpdGVtLmVkaXRvci5yZXF1aXJlZFRleHQpKV1cbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHsgYXR0cnM6IHsgbG9jU3RyaW5nOiBpdGVtLmxvY1RpdGxlIH0gfSksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgaXRlbS5lZGl0b3IuaXNSZXF1aXJlVGV4dEFmdGVyVGl0bGVcbiAgICAgICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVxdWlyZWRUZXh0IH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhpdGVtLmVkaXRvci5yZXF1aXJlZFRleHQpKV1cbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJ0ZFwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGtleTogaXRlbS5lZGl0b3IuaWQsXG4gICAgICAgICAgICAgICAgICBhdHRyczogeyBjc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNlbGwgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX3ZtLmhhc0Vycm9yc09uVG9wXG4gICAgICAgICAgICAgICAgICAgID8gX2MoXCJzdXJ2ZXktZXJyb3JzXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHF1ZXN0aW9uOiBpdGVtLmVkaXRvciwgbG9jYXRpb246IFwidG9wXCIgfVxuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX2MoX3ZtLmdldENvbXBvbmVudE5hbWUoaXRlbS5lZGl0b3IpLCB7XG4gICAgICAgICAgICAgICAgICAgIHRhZzogXCJjb21wb25lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgcXVlc3Rpb246IGl0ZW0uZWRpdG9yIH1cbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgIF92bS5oYXNFcnJvcnNPbkJvdHRvbVxuICAgICAgICAgICAgICAgICAgICA/IF9jKFwic3VydmV5LWVycm9yc1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBxdWVzdGlvbjogaXRlbS5lZGl0b3IsIGxvY2F0aW9uOiBcImJvdHRvbVwiIH1cbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9KVxuICAgICAgICBdLFxuICAgICAgICAyXG4gICAgICApXG4gICAgfSksXG4gICAgMFxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0uY3NzLmZvb3RlciB9LCBbXG4gICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgIHZhbHVlOiBfdm0uc2hvd1ByZXZCdG4sXG4gICAgICAgICAgZXhwcmVzc2lvbjogXCJzaG93UHJldkJ0blwiXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBjbGFzczogX3ZtLnN1cnZleS5jc3NOYXZpZ2F0aW9uUHJldixcbiAgICAgIGF0dHJzOiB7IHR5cGU6IFwiYnV0dG9uXCIsIHZhbHVlOiBfdm0uc3VydmV5LnBhZ2VQcmV2VGV4dCB9LFxuICAgICAgb246IHsgbW91c2Vkb3duOiBfdm0uYnV0dG9uTW91c2VEb3duLCBjbGljazogX3ZtLnByZXZQYWdlIH1cbiAgICB9KSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF9jKFwiaW5wdXRcIiwge1xuICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICB2YWx1ZTogX3ZtLnNob3dOZXh0QnRuLFxuICAgICAgICAgIGV4cHJlc3Npb246IFwic2hvd05leHRCdG5cIlxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgY2xhc3M6IF92bS5zdXJ2ZXkuY3NzTmF2aWdhdGlvbk5leHQsXG4gICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiLCB2YWx1ZTogX3ZtLnN1cnZleS5wYWdlTmV4dFRleHQgfSxcbiAgICAgIG9uOiB7IG1vdXNlZG93bjogX3ZtLm5leHRCdXR0b25Nb3VzZURvd24sIGNsaWNrOiBfdm0ubmV4dFBhZ2UgfVxuICAgIH0pLFxuICAgIF92bS5fdihcIiBcIiksXG4gICAgX3ZtLnN1cnZleS5pc1ByZXZpZXdCdXR0b25WaXNpYmxlXG4gICAgICA/IF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgIHZhbHVlOiBfdm0uc3VydmV5LmlzTGFzdFBhZ2UsXG4gICAgICAgICAgICAgIGV4cHJlc3Npb246IFwic3VydmV5LmlzTGFzdFBhZ2VcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIF0sXG4gICAgICAgICAgY2xhc3M6IF92bS5zdXJ2ZXkuY3NzTmF2aWdhdGlvblByZXZpZXcsXG4gICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiwgdmFsdWU6IF92bS5zdXJ2ZXkucHJldmlld1RleHQgfSxcbiAgICAgICAgICBvbjogeyBtb3VzZWRvd246IF92bS5idXR0b25Nb3VzZURvd24sIGNsaWNrOiBfdm0uc2hvd1ByZXZpZXcgfVxuICAgICAgICB9KVxuICAgICAgOiBfdm0uX2UoKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF92bS5zdXJ2ZXkuaXNDb21wbGV0ZUJ1dHRvblZpc2libGVcbiAgICAgID8gX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgdmFsdWU6IF92bS5zaG93Q29tcGxldGVCdG4sXG4gICAgICAgICAgICAgIGV4cHJlc3Npb246IFwic2hvd0NvbXBsZXRlQnRuXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdLFxuICAgICAgICAgIGNsYXNzOiBfdm0uc3VydmV5LmNzc05hdmlnYXRpb25Db21wbGV0ZSxcbiAgICAgICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiLCB2YWx1ZTogX3ZtLnN1cnZleS5jb21wbGV0ZVRleHQgfSxcbiAgICAgICAgICBvbjogeyBtb3VzZWRvd246IF92bS5idXR0b25Nb3VzZURvd24sIGNsaWNrOiBfdm0uY29tcGxldGVMYXN0UGFnZSB9XG4gICAgICAgIH0pXG4gICAgICA6IF92bS5fZSgpXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImZvcm0tZ3JvdXBcIiB9LCBbXG4gICAgIV92bS5xdWVzdGlvbi5pc1JlYWRPbmx5UmVuZGVyRGl2KClcbiAgICAgID8gX2MoXCJ0ZXh0YXJlYVwiLCB7XG4gICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLm90aGVyIHx8IF92bS5jb21tZW50Q2xhc3MsXG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIHJlYWRvbmx5OiBfdm0ucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5LFxuICAgICAgICAgICAgZGlzYWJsZWQ6IF92bS5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHksXG4gICAgICAgICAgICBtYXhsZW5ndGg6IF92bS5xdWVzdGlvbi5nZXRPdGhlcnNNYXhMZW5ndGgoKSxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBfdm0ucXVlc3Rpb24ub3RoZXJQbGFjZUhvbGRlcixcbiAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0ucXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogX3ZtLnF1ZXN0aW9uLmNvbW1lbnQgfSxcbiAgICAgICAgICBvbjogeyBjaGFuZ2U6IF92bS5jaGFuZ2UsIGtleXVwOiBfdm0ua2V5dXAgfVxuICAgICAgICB9KVxuICAgICAgOiBfdm0uX2UoKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF92bS5xdWVzdGlvbi5pc1JlYWRPbmx5UmVuZGVyRGl2KClcbiAgICAgID8gX2MoXCJkaXZcIiwgW192bS5fdihfdm0uX3MoX3ZtLnF1ZXN0aW9uLmNvbW1lbnQpKV0pXG4gICAgICA6IF92bS5fZSgpXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHsgY2xhc3M6IF92bS5wYWdlLmNzc0NsYXNzZXMucGFnZS5yb290IH0sXG4gICAgW1xuICAgICAgX3ZtLnNob3dIZWFkZXJcbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwiaDRcIixcbiAgICAgICAgICAgIHsgY2xhc3M6IF92bS5wYWdlLmNzc0NsYXNzZXMucGFnZS50aXRsZSB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAhX3ZtLnBhZ2UuaGFzVGl0bGVBY3Rpb25zXG4gICAgICAgICAgICAgICAgPyBfYyhcInN1cnZleS1zdHJpbmdcIiwge1xuICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5wYWdlLmxvY1RpdGxlIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX3ZtLnBhZ2UuaGFzVGl0bGVBY3Rpb25zXG4gICAgICAgICAgICAgICAgPyBfYyhcInN2LXRpdGxlLWFjdGlvbnNcIiwgeyBhdHRyczogeyBlbGVtZW50OiBfdm0ucGFnZSB9IH0pXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLnNob3dEZXNjcmlwdGlvblxuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHsgY2xhc3M6IF92bS5wYWdlLmNzc0NsYXNzZXMucGFnZS5kZXNjcmlwdGlvbiB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcInN1cnZleS1zdHJpbmdcIiwge1xuICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLnBhZ2UubG9jRGVzY3JpcHRpb24gfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLl9sKF92bS5yb3dzLCBmdW5jdGlvbihyb3csIGluZGV4KSB7XG4gICAgICAgIHJldHVybiByb3cudmlzaWJsZVxuICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgIHsga2V5OiBfdm0ucGFnZS5pZCArIFwiX1wiICsgaW5kZXgsIGNsYXNzOiBfdm0uY3NzLnJvdyB9LFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktcm93XCIsIHtcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHJvdzogcm93LCBzdXJ2ZXk6IF92bS5zdXJ2ZXksIGNzczogX3ZtLmNzcyB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgIH0pXG4gICAgXSxcbiAgICAyXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF92bS5xdWVzdGlvbi5pc1Zpc2libGVcbiAgICA/IF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnBhbmVsLmNvbnRhaW5lcixcbiAgICAgICAgICBzdHlsZTogX3ZtLnJvb3RTdHlsZVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcImg0XCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmhhc1RpdGxlLFxuICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJoYXNUaXRsZVwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc1RpdGxlLFxuICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgIHRhYmluZGV4OiBfdm0ucXVlc3Rpb24udGl0bGVUYWJJbmRleCxcbiAgICAgICAgICAgICAgICBcImFyaWEtZXhwYW5kZWRcIjogX3ZtLnF1ZXN0aW9uLnRpdGxlQXJpYUV4cGFuZGVkXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5xdWVzdGlvbi50b2dnbGVTdGF0ZSgpXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBrZXl1cDogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICBfdm0ua2V5dXAoJGV2ZW50KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoX3ZtLnF1ZXN0aW9uLmdldFRpdGxlQ29tcG9uZW50TmFtZSgpLCB7XG4gICAgICAgICAgICAgICAgdGFnOiBcImNvbXBvbmVudFwiLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7IGVsZW1lbnQ6IF92bS5xdWVzdGlvbiwgY3NzOiBfdm0uY3NzIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnBhbmVsLmRlc2NyaXB0aW9uIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFwic3VydmV5LXN0cmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0ucXVlc3Rpb24ubG9jRGVzY3JpcHRpb24gfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX2MoXCJzdXJ2ZXktZXJyb3JzXCIsIHsgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5xdWVzdGlvbiB9IH0pLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgIV92bS5pc0NvbGxhcHNlZFxuICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wYW5lbC5jb250ZW50LFxuICAgICAgICAgICAgICAgICAgc3R5bGU6IHsgcGFkZGluZ0xlZnQ6IF92bS5xdWVzdGlvbi5pbm5lclBhZGRpbmdMZWZ0IH0sXG4gICAgICAgICAgICAgICAgICBhdHRyczogeyBpZDogX3ZtLnF1ZXN0aW9uLmNvbnRlbnRJZCB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfdm0uX2woX3ZtLnJvd3MsIGZ1bmN0aW9uKHJvdywgaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJvdy52aXNpYmxlXG4gICAgICAgICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogX3ZtLnF1ZXN0aW9uLmlkICsgXCJfXCIgKyBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLmNzcy5yb3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwic3VydmV5LXJvd1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VydmV5OiBfdm0uc3VydmV5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3M6IF92bS5jc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmhhc0VkaXRCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wYW5lbC5mb290ZXIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5zdXJ2ZXkuY3NzTmF2aWdhdGlvbkVkaXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnN1cnZleS5lZGl0VGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5jYW5jZWxQcmV2aWV3IH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICBdLFxuICAgICAgICAxXG4gICAgICApXG4gICAgOiBfdm0uX2UoKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290IH0sXG4gICAgW1xuICAgICAgX3ZtLnF1ZXN0aW9uLmlzUHJvZ3Jlc3NUb3BTaG93aW5nXG4gICAgICAgID8gX2MoXCJzdXJ2ZXktcGFuZWxkeW5hbWljcHJvZ3Jlc3NcIiwge1xuICAgICAgICAgICAgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5xdWVzdGlvbiB9XG4gICAgICAgICAgfSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uX2woX3ZtLnJlbmRlcmVkUGFuZWxzLCBmdW5jdGlvbihwYW5lbCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHsga2V5OiBwYW5lbC5pZCwgY2xhc3M6IF92bS5xdWVzdGlvbi5nZXRQYW5lbFdyYXBwZXJDc3MoKSB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcInN1cnZleS1wYW5lbFwiLCB7IGF0dHJzOiB7IHF1ZXN0aW9uOiBwYW5lbCwgY3NzOiBfdm0uY3NzIH0gfSksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF9jKFwic3VydmV5LXBhbmVsZHluYW1pY3JlbW92ZVwiLCB7XG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5xdWVzdGlvbiwgcGFuZWw6IHBhbmVsIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKFwiaHJcIiwge1xuICAgICAgICAgICAga2V5OiBcInNlcGFyYXRvclwiICsgcGFuZWwuaWQsXG4gICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuc2VwYXJhdG9yXG4gICAgICAgICAgfSlcbiAgICAgICAgXVxuICAgICAgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLnF1ZXN0aW9uLmlzUHJvZ3Jlc3NCb3R0b21TaG93aW5nXG4gICAgICAgID8gX2MoXCJzdXJ2ZXktcGFuZWxkeW5hbWljcHJvZ3Jlc3NcIiwge1xuICAgICAgICAgICAgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5xdWVzdGlvbiB9XG4gICAgICAgICAgfSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0ucXVlc3Rpb24uaXNSZW5kZXJNb2RlTGlzdCAmJiBfdm0ucXVlc3Rpb24uY2FuQWRkUGFuZWxcbiAgICAgICAgPyBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICAgIGNsYXNzOiBfdm0uZ2V0QnV0dG9uQWRkQ3NzKF92bS5xdWVzdGlvbiksXG4gICAgICAgICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiLCB2YWx1ZTogX3ZtLnF1ZXN0aW9uLnBhbmVsQWRkVGV4dCB9LFxuICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5hZGRQYW5lbENsaWNrIH1cbiAgICAgICAgICB9KVxuICAgICAgICA6IF92bS5fZSgpXG4gICAgXSxcbiAgICAyXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgY2xhc3M6IHRoaXMuY3NzQ2xhc3MsIHN0YXRpY1N0eWxlOiB7IGNsZWFyOiBcImJvdGhcIiB9IH0sIFtcbiAgICBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzc0NvbnRhaW5lciB9LCBbXG4gICAgICBfYyhcImRpdlwiLCB7IGF0dHJzOiB7IHRpdGxlOiBfdm0ucXVlc3Rpb24ucGFuZWxQcmV2VGV4dCB9IH0sIFtcbiAgICAgICAgX2MoXG4gICAgICAgICAgXCJzdmdcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzczogX3ZtLmdldEJ1dHRvblByZXZDc3MoX3ZtLnF1ZXN0aW9uKSxcbiAgICAgICAgICAgIGF0dHJzOiB7IHZpZXdCb3g6IFwiMCAwIDEwIDEwXCIgfSxcbiAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0ucHJldlBhbmVsQ2xpY2sgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgW19jKFwicG9seWdvblwiLCB7IGF0dHJzOiB7IHBvaW50czogXCIyLDIgMCw0IDUsOSAxMCw0IDgsMiA1LDUgXCIgfSB9KV1cbiAgICAgICAgKVxuICAgICAgXSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLnF1ZXN0aW9uLmlzUmFuZ2VTaG93aW5nXG4gICAgICAgID8gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJvZ3Jlc3MgfSwgW1xuICAgICAgICAgICAgX2MoXCJkaXZcIiwge1xuICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJvZ3Jlc3NCYXIsXG4gICAgICAgICAgICAgIHN0eWxlOiB7IHdpZHRoOiBfdm0ucHJvZ3Jlc3MgfSxcbiAgICAgICAgICAgICAgYXR0cnM6IHsgcm9sZTogXCJwcm9ncmVzc2JhclwiIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcImRpdlwiLCB7IGF0dHJzOiB7IHRpdGxlOiBfdm0ucXVlc3Rpb24ucGFuZWxOZXh0VGV4dCB9IH0sIFtcbiAgICAgICAgX2MoXG4gICAgICAgICAgXCJzdmdcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzczogX3ZtLmdldEJ1dHRvbk5leHRDc3MoX3ZtLnF1ZXN0aW9uKSxcbiAgICAgICAgICAgIGF0dHJzOiB7IHZpZXdCb3g6IFwiMCAwIDEwIDEwXCIgfSxcbiAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0ubmV4dFBhbmVsQ2xpY2sgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgW19jKFwicG9seWdvblwiLCB7IGF0dHJzOiB7IHBvaW50czogXCIyLDIgMCw0IDUsOSAxMCw0IDgsMiA1LDUgXCIgfSB9KV1cbiAgICAgICAgKVxuICAgICAgXSlcbiAgICBdKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF92bS5xdWVzdGlvbi5jYW5BZGRQYW5lbFxuICAgICAgPyBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICBjbGFzczpcbiAgICAgICAgICAgIF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmJ1dHRvbiArXG4gICAgICAgICAgICBcIiBcIiArXG4gICAgICAgICAgICBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5idXR0b25BZGQsXG4gICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiwgdmFsdWU6IF92bS5xdWVzdGlvbi5wYW5lbEFkZFRleHQgfSxcbiAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmFkZFBhbmVsQ2xpY2sgfVxuICAgICAgICB9KVxuICAgICAgOiBfdm0uX2UoKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnByb2dyZXNzVGV4dCB9LCBbXG4gICAgICBfdm0uX3YoXCJcXG4gICAgXCIgKyBfdm0uX3MoX3ZtLnF1ZXN0aW9uLnByb2dyZXNzVGV4dCkgKyBcIlxcbiAgXCIpXG4gICAgXSlcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF92bS5xdWVzdGlvbi5jYW5SZW1vdmVQYW5lbCAmJiAhX3ZtLnF1ZXN0aW9uLmlzUmVhZE9ubHlcbiAgICA/IF9jKFwiaW5wdXRcIiwge1xuICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgdmFsdWU6ICFfdm0uaXNDb2xsYXBzZWQsXG4gICAgICAgICAgICBleHByZXNzaW9uOiBcIiFpc0NvbGxhcHNlZFwiXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmdldFBhbmVsUmVtb3ZlQnV0dG9uQ3NzKCksXG4gICAgICAgIGF0dHJzOiB7IHR5cGU6IFwiYnV0dG9uXCIsIHZhbHVlOiBfdm0ucXVlc3Rpb24ucGFuZWxSZW1vdmVUZXh0IH0sXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIF92bS5yZW1vdmVQYW5lbENsaWNrKF92bS5wYW5lbClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgOiBfdm0uX2UoKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLmNzcy5wcm9ncmVzcyB9LCBbXG4gICAgX2MoXG4gICAgICBcImRpdlwiLFxuICAgICAge1xuICAgICAgICBjbGFzczogX3ZtLmNzcy5wcm9ncmVzc0JhcixcbiAgICAgICAgc3R5bGU6IHsgd2lkdGg6IF92bS5wcm9ncmVzcyB9LFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHJvbGU6IFwicHJvZ3Jlc3NiYXJcIixcbiAgICAgICAgICBcImFyaWEtdmFsdWVtaW5cIjogXCIwXCIsXG4gICAgICAgICAgXCJhcmlhLXZhbHVlbWF4XCI6IFwiMTAwXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFtcbiAgICAgICAgX2MoXG4gICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgeyBjbGFzczogX3ZtLmNzcy5wcm9ncmVzc1RleHQgKyBcIiBcIiArIF92bS5jc3MucHJvZ3Jlc3NUZXh0SW5CYXIgfSxcbiAgICAgICAgICBbX3ZtLl92KF92bS5fcyhfdm0uc3VydmV5LnByb2dyZXNzVGV4dCkpXVxuICAgICAgICApXG4gICAgICBdXG4gICAgKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF9jKFxuICAgICAgXCJzcGFuXCIsXG4gICAgICB7IGNsYXNzOiBfdm0uY3NzLnByb2dyZXNzVGV4dCArIFwiIFwiICsgX3ZtLmNzcy5wcm9ncmVzc1RleHRVbmRlckJhciB9LFxuICAgICAgW192bS5fdihfdm0uX3MoX3ZtLnN1cnZleS5wcm9ncmVzc1RleHQpKV1cbiAgICApXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0uY3NzLnByb2dyZXNzQnV0dG9uc0NvbnRhaW5lckNlbnRlciB9LCBbXG4gICAgX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLmNzcy5wcm9ncmVzc0J1dHRvbnNDb250YWluZXIgfSwgW1xuICAgICAgX2MoXCJkaXZcIiwge1xuICAgICAgICBjbGFzczogX3ZtLmdldFNjcm9sbEJ1dHRvbkNzcyhfdm0uaGFzU2Nyb2xsZXIsIHRydWUpLFxuICAgICAgICBhdHRyczogeyByb2xlOiBcImJ1dHRvblwiIH0sXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIF92bS5jbGlja1Njcm9sbEJ1dHRvbih0cnVlKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHtcbiAgICAgICAgICByZWY6IFwicHJvZ3Jlc3NCdXR0b25zTGlzdENvbnRhaW5lclwiLFxuICAgICAgICAgIGNsYXNzOiBfdm0uY3NzLnByb2dyZXNzQnV0dG9uc0xpc3RDb250YWluZXJcbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJ1bFwiLFxuICAgICAgICAgICAgeyBjbGFzczogX3ZtLmNzcy5wcm9ncmVzc0J1dHRvbnNMaXN0IH0sXG4gICAgICAgICAgICBfdm0uX2woX3ZtLnN1cnZleS52aXNpYmxlUGFnZXMsIGZ1bmN0aW9uKHBhZ2UsIGluZGV4KSB7XG4gICAgICAgICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICAgICAgICBcImxpXCIsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAga2V5OiBcImxpc3RlbGVtZW50XCIgKyBpbmRleCxcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0uZ2V0TGlzdEVsZW1lbnRDc3MoaW5kZXgpLFxuICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgIF92bS5pc0xpc3RFbGVtZW50Q2xpY2thYmxlKGluZGV4KVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBfdm0uY2xpY2tMaXN0RWxlbWVudChpbmRleClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0uY3NzLnByb2dyZXNzQnV0dG9uc1BhZ2VUaXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBhZ2UubG9jTmF2aWdhdGlvblRpdGxlLnJlbmRlcmVkSHRtbCB8fCBwYWdlLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UubG9jTmF2aWdhdGlvblRpdGxlLnJlbmRlcmVkSHRtbCB8fCBwYWdlLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5jc3MucHJvZ3Jlc3NCdXR0b25zUGFnZURlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogcGFnZS5sb2NOYXZpZ2F0aW9uRGVzY3JpcHRpb24ucmVuZGVyZWRIdG1sXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgICBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhwYWdlLmxvY05hdmlnYXRpb25EZXNjcmlwdGlvbi5yZW5kZXJlZEh0bWwpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgMFxuICAgICAgICAgIClcbiAgICAgICAgXVxuICAgICAgKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcImRpdlwiLCB7XG4gICAgICAgIGNsYXNzOiBfdm0uZ2V0U2Nyb2xsQnV0dG9uQ3NzKF92bS5oYXNTY3JvbGxlciwgZmFsc2UpLFxuICAgICAgICBhdHRyczogeyByb2xlOiBcImJ1dHRvblwiIH0sXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIF92bS5jbGlja1Njcm9sbEJ1dHRvbihmYWxzZSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgXSlcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZmllbGRzZXRcIixcbiAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290LCBhdHRyczogeyByb2xlOiBcInJhZGlvZ3JvdXBcIiB9IH0sXG4gICAgW1xuICAgICAgIV92bS5xdWVzdGlvbi5oYXNUaXRsZVxuICAgICAgICA/IF9jKFwibGVnZW5kXCIsIHtcbiAgICAgICAgICAgIGF0dHJzOiB7IFwiYXJpYS1sYWJlbFwiOiBfdm0ucXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sIH1cbiAgICAgICAgICB9KVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5fbChfdm0ucXVlc3Rpb24udmlzaWJsZUNob2ljZXMsIGZ1bmN0aW9uKGl0ZW0sIGluZGV4KSB7XG4gICAgICAgIHJldHVybiAhX3ZtLnF1ZXN0aW9uLmhhc0NvbHVtbnNcbiAgICAgICAgICA/IF9jKFwic3VydmV5LXJhZGlvZ3JvdXAtaXRlbVwiLCB7XG4gICAgICAgICAgICAgIGtleTogaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5nZXRJdGVtQ2xhc3MoaXRlbSksXG4gICAgICAgICAgICAgIGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24sIGl0ZW06IGl0ZW0sIGluZGV4OiBpbmRleCB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgIH0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5fbChfdm0ucXVlc3Rpb24uY29sdW1ucywgZnVuY3Rpb24oY29sdW1uLCBjb2xJbmRleCkge1xuICAgICAgICByZXR1cm4gX3ZtLnF1ZXN0aW9uLmhhc0NvbHVtbnNcbiAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0Q29sdW1uQ2xhc3MoKSB9LFxuICAgICAgICAgICAgICBfdm0uX2woY29sdW1uLCBmdW5jdGlvbihpdGVtLCBpbmRleCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfYyhcInN1cnZleS1yYWRpb2dyb3VwLWl0ZW1cIiwge1xuICAgICAgICAgICAgICAgICAga2V5OiBpdGVtLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5nZXRJdGVtQ2xhc3MoaXRlbSksXG4gICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgICAgICBpdGVtOiBpdGVtLFxuICAgICAgICAgICAgICAgICAgICBpbmRleDogXCJcIiArIGNvbEluZGV4ICsgaW5kZXhcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgIH0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5xdWVzdGlvbi5jYW5TaG93Q2xlYXJCdXR0b25cbiAgICAgICAgPyBfYyhcImRpdlwiLCBbXG4gICAgICAgICAgICBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNsZWFyQnV0dG9uLFxuICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiLCB2YWx1ZTogX3ZtLnF1ZXN0aW9uLmNsZWFyQnV0dG9uQ2FwdGlvbiB9LFxuICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5jbGVhclZhbHVlKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXSlcbiAgICAgICAgOiBfdm0uX2UoKVxuICAgIF0sXG4gICAgMlxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIFtcbiAgICAgIF9jKFwibGFiZWxcIiwgeyBjbGFzczogX3ZtLmdldExhYmVsQ2xhc3MoX3ZtLml0ZW0pIH0sIFtcbiAgICAgICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBcIm1vZGVsXCIsXG4gICAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkVmFsdWUsXG4gICAgICAgICAgICAgIGV4cHJlc3Npb246IFwicXVlc3Rpb24ucmVuZGVyZWRWYWx1ZVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbUNvbnRyb2wsXG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIHR5cGU6IFwicmFkaW9cIixcbiAgICAgICAgICAgIG5hbWU6IF92bS5xdWVzdGlvbi5uYW1lICsgXCJfXCIgKyBfdm0ucXVlc3Rpb24uaWQsXG4gICAgICAgICAgICBpZDogX3ZtLnF1ZXN0aW9uLmlucHV0SWQgKyBcIl9cIiArIF92bS5pbmRleCxcbiAgICAgICAgICAgIGRpc2FibGVkOiBfdm0ucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5IHx8ICFfdm0uaXRlbS5pc0VuYWJsZWQsXG4gICAgICAgICAgICBcImFyaWEtcmVxdWlyZWRcIjogX3ZtLnF1ZXN0aW9uLmlzUmVxdWlyZWQsXG4gICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogX3ZtLml0ZW0ubG9jVGV4dC5yZW5kZXJlZEh0bWwsXG4gICAgICAgICAgICBcImFyaWEtaW52YWxpZFwiOiBfdm0ucXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA+IDAsXG4gICAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjpcbiAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmVycm9ycy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBfdm0ucXVlc3Rpb24uaWQgKyBcIl9lcnJvcnNcIlxuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgIHZhbHVlOiBfdm0uaXRlbS52YWx1ZSxcbiAgICAgICAgICAgIGNoZWNrZWQ6IF92bS5fcShfdm0ucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSwgX3ZtLml0ZW0udmFsdWUpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF92bS4kc2V0KF92bS5xdWVzdGlvbiwgXCJyZW5kZXJlZFZhbHVlXCIsIF92bS5pdGVtLnZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF9jKFwic3BhblwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5tYXRlcmlhbERlY29yYXRvciB9LCBbXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcInN2Z1wiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbURlY29yYXRvcixcbiAgICAgICAgICAgICAgYXR0cnM6IHsgdmlld0JveDogXCItMTIgLTEyIDI0IDI0XCIgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtfYyhcImNpcmNsZVwiLCB7IGF0dHJzOiB7IHI6IFwiNlwiLCBjeDogXCIwXCIsIGN5OiBcIjBcIiB9IH0pXVxuICAgICAgICAgIClcbiAgICAgICAgXSksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF9jKFwic3BhblwiLCB7IHN0YXRpY0NsYXNzOiBcImNoZWNrXCIgfSksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICFfdm0uaGlkZUxhYmVsXG4gICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzczogX3ZtLmdldENvbnRyb2xMYWJlbENsYXNzKF92bS5pdGVtKSxcbiAgICAgICAgICAgICAgICBhdHRyczogeyB0aXRsZTogX3ZtLml0ZW0ubG9jVGV4dC50ZXh0IH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgW19jKFwic3VydmV5LXN0cmluZ1wiLCB7IGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLml0ZW0ubG9jVGV4dCB9IH0pXSxcbiAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgIF0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5pdGVtLnZhbHVlID09IF92bS5xdWVzdGlvbi5vdGhlckl0ZW0udmFsdWVcbiAgICAgICAgPyBfYyhcInN1cnZleS1vdGhlci1jaG9pY2VcIiwge1xuICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTpcbiAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5oYXNPdGhlciAmJlxuICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkVmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5pc090aGVyU2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjpcbiAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgcXVlc3Rpb24uaGFzT3RoZXIgJiYgcXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSAmJiBxdWVzdGlvbi5pc090aGVyU2VsZWN0ZWRcXG4gICAgXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24gfVxuICAgICAgICAgIH0pXG4gICAgICAgIDogX3ZtLl9lKClcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7IGF0dHJzOiB7IHRhYmluZGV4OiBcIjBcIiB9LCBvbjogeyBrZXlkb3duOiBfdm0uaGFuZGxlS2V5ZG93biB9IH0sXG4gICAgW1xuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHsgc3RhdGljU3R5bGU6IHsgb3V0bGluZTogXCJub25lXCIgfSwgYXR0cnM6IHsgdGFiaW5kZXg6IFwiLTFcIiB9IH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0uY3NzQ2xhc3Nlcy5pdGVtR2hvc3ROb2RlIH0pLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLmNzc0NsYXNzZXMuaXRlbUNvbnRlbnQgfSwgW1xuICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLmNzc0NsYXNzZXMuaXRlbUljb25Db250YWluZXIgfSwgW1xuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcInN2Z1wiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGNsYXNzOlxuICAgICAgICAgICAgICAgICAgICBfdm0uY3NzQ2xhc3Nlcy5pdGVtSWNvbiArXG4gICAgICAgICAgICAgICAgICAgIFwiIFwiICtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLmNzc0NsYXNzZXMuaXRlbUljb25Ib3Zlck1vZCxcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBcIjEwXCIsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogXCIxNlwiLFxuICAgICAgICAgICAgICAgICAgICB2aWV3Qm94OiBcIjAgMCAxMCAxNlwiLFxuICAgICAgICAgICAgICAgICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcInBhdGhcIiwge1xuICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgIGQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBcIk02IDJDNiAwLjkgNi45IDAgOCAwQzkuMSAwIDEwIDAuOSAxMCAyQzEwIDMuMSA5LjEgNCA4IDRDNi45IDQgNiAzLjEgNiAyWk0yIDBDMC45IDAgMCAwLjkgMCAyQzAgMy4xIDAuOSA0IDIgNEMzLjEgNCA0IDMuMSA0IDJDNCAwLjkgMy4xIDAgMiAwWk04IDZDNi45IDYgNiA2LjkgNiA4QzYgOS4xIDYuOSAxMCA4IDEwQzkuMSAxMCAxMCA5LjEgMTAgOEMxMCA2LjkgOS4xIDYgOCA2Wk0yIDZDMC45IDYgMCA2LjkgMCA4QzAgOS4xIDAuOSAxMCAyIDEwQzMuMSAxMCA0IDkuMSA0IDhDNCA2LjkgMy4xIDYgMiA2Wk04IDEyQzYuOSAxMiA2IDEyLjkgNiAxNEM2IDE1LjEgNi45IDE2IDggMTZDOS4xIDE2IDEwIDE1LjEgMTAgMTRDMTAgMTIuOSA5LjEgMTIgOCAxMlpNMiAxMkMwLjkgMTIgMCAxMi45IDAgMTRDMCAxNS4xIDAuOSAxNiAyIDE2QzMuMSAxNiA0IDE1LjEgNCAxNEM0IDEyLjkgMy4xIDEyIDIgMTJaXCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgIFwic3ZnXCIsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgY2xhc3M6XG4gICAgICAgICAgICAgICAgICAgIF92bS5jc3NDbGFzc2VzLml0ZW1JY29uICtcbiAgICAgICAgICAgICAgICAgICAgXCIgXCIgK1xuICAgICAgICAgICAgICAgICAgICBfdm0uY3NzQ2xhc3Nlcy5pdGVtSWNvbkZvY3VzTW9kLFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IFwiMTBcIixcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcIjI0XCIsXG4gICAgICAgICAgICAgICAgICAgIHZpZXdCb3g6IFwiMCAwIDEwIDI0XCIsXG4gICAgICAgICAgICAgICAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF9jKFwicGF0aFwiLCB7IGF0dHJzOiB7IGQ6IFwiTTEwIDVMNSAwTDAgNUg0VjlINlY1SDEwWlwiIH0gfSksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX2MoXCJwYXRoXCIsIHsgYXR0cnM6IHsgZDogXCJNNiAxOVYxNUg0VjE5SDBMNSAyNEwxMCAxOUg2WlwiIH0gfSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5jc3NDbGFzc2VzLml0ZW1JbmRleCB9LCBbXG4gICAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLmluZGV4KSlcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICB7IGNsYXNzOiBfdm0uY3NzQ2xhc3Nlcy5jb250cm9sTGFiZWwgfSxcbiAgICAgICAgICAgICAgW19jKFwic3VydmV5LXN0cmluZ1wiLCB7IGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLnRleHQgfSB9KV0sXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdKVxuICAgICAgICBdXG4gICAgICApXG4gICAgXVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5yb290Q2xhc3MgfSxcbiAgICBfdm0uX2woX3ZtLnF1ZXN0aW9uLnJhbmtpbmdDaG9pY2VzLCBmdW5jdGlvbihpdGVtLCBpbmRleCkge1xuICAgICAgcmV0dXJuIF9jKFwic3VydmV5LXJhbmtpbmctaXRlbVwiLCB7XG4gICAgICAgIGtleTogaXRlbS52YWx1ZSArIFwiLVwiICsgaW5kZXggKyBcIi1pdGVtXCIsXG4gICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0SXRlbUNsYXNzKGl0ZW0pLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHRleHQ6IGl0ZW0ubG9jVGV4dCxcbiAgICAgICAgICBpbmRleDogX3ZtLnF1ZXN0aW9uLmdldE51bWJlckJ5SW5kZXgoaW5kZXgpLFxuICAgICAgICAgIGhhbmRsZUtleWRvd246IF92bS5xdWVzdGlvbi5oYW5kbGVLZXlkb3duLFxuICAgICAgICAgIGNzc0NsYXNzZXM6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSksXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIFtcbiAgICAgIF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5nZXRSb290Q2xhc3MoX3ZtLnF1ZXN0aW9uKSB9LCBbXG4gICAgICAgIF9jKFxuICAgICAgICAgIFwiZmllbGRzZXRcIixcbiAgICAgICAgICB7IGF0dHJzOiB7IHJvbGU6IFwicmFkaW9ncm91cFwiIH0gfSxcbiAgICAgICAgICBbXG4gICAgICAgICAgICBfYyhcImxlZ2VuZFwiLCB7XG4gICAgICAgICAgICAgIGF0dHJzOiB7IFwiYXJpYS1sYWJlbFwiOiBfdm0ucXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgIF92bS5fbChfdm0ucXVlc3Rpb24udmlzaWJsZVJhdGVWYWx1ZXMsIGZ1bmN0aW9uKGl0ZW0sIGluZGV4KSB7XG4gICAgICAgICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICAgICAgICBcImxhYmVsXCIsXG4gICAgICAgICAgICAgICAgeyBrZXk6IGl0ZW0udmFsdWUsIGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0SXRlbUNsYXNzKGl0ZW0pIH0sXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInN2LXZpc3VhbGx5aGlkZGVuXCIsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJyYWRpb1wiLFxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IF92bS5xdWVzdGlvbi5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdm0ucXVlc3Rpb24uaW5wdXRJZCArIFwiX1wiICsgaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IF92bS5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHksXG4gICAgICAgICAgICAgICAgICAgICAgXCJhcmlhLXJlcXVpcmVkXCI6IF92bS5xdWVzdGlvbi5pc1JlcXVpcmVkLFxuICAgICAgICAgICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBpdGVtLmxvY1RleHQudGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICBcImFyaWEtaW52YWxpZFwiOiBfdm0ucXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA+IDAsXG4gICAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfdm0ucXVlc3Rpb24uaWQgKyBcIl9lcnJvcnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IGl0ZW0udmFsdWUgfSxcbiAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5xdWVzdGlvbi5zZXRWYWx1ZUZyb21DbGljayhlLnRhcmdldC52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgIGluZGV4ID09PSAwXG4gICAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLm1pblRleHQgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jU3RyaW5nOiBfdm0ucXVlc3Rpb24ubG9jTWluUmF0ZURlc2NyaXB0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtVGV4dCB9LFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogaXRlbS5sb2NUZXh0IH1cbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgIGluZGV4ID09PSBfdm0ucXVlc3Rpb24udmlzaWJsZVJhdGVWYWx1ZXMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5tYXhUZXh0IH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwic3VydmV5LXN0cmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY1N0cmluZzogX3ZtLnF1ZXN0aW9uLmxvY01heFJhdGVEZXNjcmlwdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF0sXG4gICAgICAgICAgMlxuICAgICAgICApXG4gICAgICBdKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcInN1cnZleS1vdGhlci1jaG9pY2VcIiwge1xuICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgdmFsdWU6IF92bS5xdWVzdGlvbi5oYXNPdGhlcixcbiAgICAgICAgICAgIGV4cHJlc3Npb246IFwicXVlc3Rpb24uaGFzT3RoZXJcIlxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLm90aGVyLFxuICAgICAgICBhdHRyczogeyBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uIH1cbiAgICAgIH0pXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgeyBzdGF0aWNDbGFzczogXCJzdi12dWUtcm93LWFkZGl0aW9uYWwtZGl2XCIgfSxcbiAgICBfdm0uX2woX3ZtLnJvdy5lbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgcmV0dXJuIF92bS5yb3cuaXNOZWVkUmVuZGVyICYmIGVsZW1lbnQuaXNWaXNpYmxlXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBrZXk6IGVsZW1lbnQuaWRWYWx1ZSxcbiAgICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICBmbGV4QmFzaXM6IGVsZW1lbnQucmVuZGVyV2lkdGgsXG4gICAgICAgICAgICAgICAgZmxleEdyb3c6IDEsXG4gICAgICAgICAgICAgICAgZmxleFNocmluazogMSxcbiAgICAgICAgICAgICAgICB3aWR0aDogZWxlbWVudC5yZW5kZXJXaWR0aCxcbiAgICAgICAgICAgICAgICBtaW5XaWR0aDogZWxlbWVudC5taW5XaWR0aCxcbiAgICAgICAgICAgICAgICBtYXhXaWR0aDogZWxlbWVudC5tYXhXaWR0aFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcInN1cnZleS1lbGVtZW50XCIsIHtcbiAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgcGFkZGluZ0xlZnQ6IGVsZW1lbnQucGFkZGluZ0xlZnQsXG4gICAgICAgICAgICAgICAgICBwYWRkaW5nUmlnaHQ6IGVsZW1lbnQucGFkZGluZ1JpZ2h0XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgaWQ6IGVsZW1lbnQuaWQsXG4gICAgICAgICAgICAgICAgICByb2xlOiBlbGVtZW50LmFyaWFSb2xlLFxuICAgICAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogZWxlbWVudC5oYXNUaXRsZVxuICAgICAgICAgICAgICAgICAgICA/IGVsZW1lbnQuYXJpYVRpdGxlSWRcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgbmFtZTogZWxlbWVudC5uYW1lLFxuICAgICAgICAgICAgICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgIHN1cnZleTogX3ZtLnN1cnZleSxcbiAgICAgICAgICAgICAgICAgIGNzczogX3ZtLmNzc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpXG4gICAgfSksXG4gICAgMFxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290LFxuICAgICAgc3R5bGU6IHtcbiAgICAgICAgaGVpZ2h0OiBfdm0ucXVlc3Rpb24uaGVpZ2h0ICsgXCJweFwiLFxuICAgICAgICB3aWR0aDogX3ZtLnF1ZXN0aW9uLndpZHRoICsgXCJweFwiXG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAge1xuICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgIHZhbHVlOiBfdm0ucXVlc3Rpb24ubmVlZFNob3dQbGFjZWhvbGRlcigpLFxuICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInF1ZXN0aW9uLm5lZWRTaG93UGxhY2Vob2xkZXIoKVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucGxhY2Vob2xkZXJcbiAgICAgICAgfSxcbiAgICAgICAgW192bS5fdihcIlxcbiAgICBcIiArIF92bS5fcyhfdm0ucXVlc3Rpb24ucGxhY2VIb2xkZXJUZXh0KSArIFwiXFxuICBcIildXG4gICAgICApLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5fbSgwKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jb250cm9scyB9LCBbXG4gICAgICAgIF9jKFxuICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNsZWFyQnV0dG9uLFxuICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiwgdGl0bGU6IF92bS5xdWVzdGlvbi5jbGVhckJ1dHRvbkNhcHRpb24gfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgW192bS5fdihcIlxcbiAgICAgIOKcllxcbiAgICBcIildXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgXVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW1xuICBmdW5jdGlvbigpIHtcbiAgICB2YXIgX3ZtID0gdGhpc1xuICAgIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICAgIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICAgIHJldHVybiBfYyhcImRpdlwiLCBbX2MoXCJjYW52YXNcIiwgeyBhdHRyczogeyB0YWJpbmRleDogXCIwXCIgfSB9KV0pXG4gIH1cbl1cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcInNwYW5cIiwgeyBzdGF0aWNTdHlsZTogeyBwb3NpdGlvbjogXCJzdGF0aWNcIiB9IH0sIFtcbiAgICBfdm0ubG9jU3RyaW5nLmhhc0h0bWxcbiAgICAgID8gX2MoXCJzcGFuXCIsIHtcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJzdi1zdHJpbmctZWRpdG9yXCIsXG4gICAgICAgICAgc3RhdGljU3R5bGU6IHsgcG9zaXRpb246IFwic3RhdGljXCIgfSxcbiAgICAgICAgICBhdHRyczogeyBjb250ZW50ZWRpdGFibGU6IFwidHJ1ZVwiIH0sXG4gICAgICAgICAgZG9tUHJvcHM6IHsgaW5uZXJIVE1MOiBfdm0uX3MoX3ZtLmxvY1N0cmluZy5yZW5kZXJlZEh0bWwpIH0sXG4gICAgICAgICAgb246IHsgYmx1cjogX3ZtLm9uSW5wdXQsIGNsaWNrOiBfdm0ub25DbGljayB9XG4gICAgICAgIH0pXG4gICAgICA6IF9jKFxuICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInN2LXN0cmluZy1lZGl0b3JcIixcbiAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7IHBvc2l0aW9uOiBcInN0YXRpY1wiIH0sXG4gICAgICAgICAgICBhdHRyczogeyBjb250ZW50ZWRpdGFibGU6IFwidHJ1ZVwiIH0sXG4gICAgICAgICAgICBvbjogeyBibHVyOiBfdm0ub25JbnB1dCwgY2xpY2s6IF92bS5vbkNsaWNrIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKF92bS5sb2NTdHJpbmcucmVuZGVyZWRIdG1sKSldXG4gICAgICAgIClcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwic3BhblwiLCB7IHN0YXRpY1N0eWxlOiB7IHBvc2l0aW9uOiBcInN0YXRpY1wiIH0gfSwgW1xuICAgIF92bS5sb2NTdHJpbmcuaGFzSHRtbFxuICAgICAgPyBfYyhcInNwYW5cIiwge1xuICAgICAgICAgIHN0YXRpY1N0eWxlOiB7IHBvc2l0aW9uOiBcInN0YXRpY1wiIH0sXG4gICAgICAgICAgZG9tUHJvcHM6IHsgaW5uZXJIVE1MOiBfdm0uX3MoX3ZtLmxvY1N0cmluZy5yZW5kZXJlZEh0bWwpIH1cbiAgICAgICAgfSlcbiAgICAgIDogX2MoXCJzcGFuXCIsIHsgc3RhdGljU3R5bGU6IHsgcG9zaXRpb246IFwic3RhdGljXCIgfSB9LCBbXG4gICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0ubG9jU3RyaW5nLnJlbmRlcmVkSHRtbCkpXG4gICAgICAgIF0pXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhfdm0ubG9jU3RyaW5nLnJlbmRlckFzLCB7XG4gICAgdGFnOiBcImNvbXBvbmVudFwiLFxuICAgIGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLmxvY1N0cmluZyB9XG4gIH0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0uY3NzLnJvb3QgfSwgW1xuICAgIF9jKFwiZm9ybVwiLCB7IGF0dHJzOiB7IG9uc3VibWl0OiBcInJldHVybiBmYWxzZTtcIiB9IH0sIFtcbiAgICAgICFfdm0uc3VydmV5Lmhhc0xvZ29cbiAgICAgICAgPyBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInN2X2N1c3RvbV9oZWFkZXJcIiB9KVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7IGNsYXNzOiBfdm0uY3NzLmNvbnRhaW5lciB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXCJzdXJ2ZXktaGVhZGVyXCIsIHsgYXR0cnM6IHsgc3VydmV5OiBfdm0uc3VydmV5IH0gfSksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfdm0uc3VydmV5LnN0YXRlID09PSBcInN0YXJ0aW5nXCJcbiAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5jc3MuYm9keSB9LFxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBfdm0uc3VydmV5LmlzTmF2aWdhdGlvbkJ1dHRvbnNTaG93aW5nT25Ub3BcbiAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5jc3MuZm9vdGVyIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5zdXJ2ZXkuY3NzTmF2aWdhdGlvblN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5zdXJ2ZXkuc3RhcnRTdXJ2ZXlUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLnN0YXJ0IH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktcGFnZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdm0uc3VydmV5LnN0YXJ0ZWRQYWdlLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3VydmV5OiBfdm0uc3VydmV5LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogX3ZtLnN1cnZleS5zdGFydGVkUGFnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNzczogX3ZtLmNzc1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgIF92bS5zdXJ2ZXkuaXNOYXZpZ2F0aW9uQnV0dG9uc1Nob3dpbmdPbkJvdHRvbVxuICAgICAgICAgICAgICAgICAgICAgID8gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLmNzcy5mb290ZXIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnN1cnZleS5jc3NOYXZpZ2F0aW9uU3RhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnN1cnZleS5zdGFydFN1cnZleVRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0uc3RhcnQgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF92bS5zdXJ2ZXkuc3RhdGUgPT09IFwicnVubmluZ1wiIHx8IF92bS5zdXJ2ZXkuc3RhdGUgPT09IFwicHJldmlld1wiXG4gICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICB7IGNsYXNzOiBfdm0uY3NzLmJvZHkgfSxcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLnN1cnZleS5pc1Nob3dQcm9ncmVzc0Jhck9uVG9wXG4gICAgICAgICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzdi1wcm9ncmVzcy1cIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnN1cnZleS5wcm9ncmVzc0JhclR5cGUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZzogXCJjb21wb25lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBzdXJ2ZXk6IF92bS5zdXJ2ZXksIGNzczogX3ZtLmNzcyB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICBfdm0uc3VydmV5LmlzVGltZXJQYW5lbFNob3dpbmdPblRvcFxuICAgICAgICAgICAgICAgICAgICAgID8gX2MoXCJzdXJ2ZXktdGltZXJwYW5lbFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHN1cnZleTogX3ZtLnN1cnZleSwgY3NzOiBfdm0uY3NzIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLnN1cnZleS5pc05hdmlnYXRpb25CdXR0b25zU2hvd2luZ09uVG9wXG4gICAgICAgICAgICAgICAgICAgICAgPyBfYyhcInN1cnZleS1uYXZpZ2F0aW9uXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBfdm0ubmF2SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHN1cnZleTogX3ZtLnN1cnZleSwgY3NzOiBfdm0uY3NzIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktcGFnZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAga2V5OiBfdm0ucGFnZUlkLFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdXJ2ZXk6IF92bS5zdXJ2ZXksXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiBfdm0uc3VydmV5LmN1cnJlbnRQYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3NzOiBfdm0uY3NzXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLnN1cnZleS5pc1RpbWVyUGFuZWxTaG93aW5nT25Cb3R0b21cbiAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwic3VydmV5LXRpbWVycGFuZWxcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBzdXJ2ZXk6IF92bS5zdXJ2ZXksIGNzczogX3ZtLmNzcyB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgIF92bS5zdXJ2ZXkuaXNTaG93UHJvZ3Jlc3NCYXJPbkJvdHRvbVxuICAgICAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwic3YtcHJvZ3Jlc3MtXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5zdXJ2ZXkucHJvZ3Jlc3NCYXJUeXBlLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWc6IFwiY29tcG9uZW50XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgc3VydmV5OiBfdm0uc3VydmV5LCBjc3M6IF92bS5jc3MgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLnN1cnZleS5pc05hdmlnYXRpb25CdXR0b25zU2hvd2luZ09uQm90dG9tXG4gICAgICAgICAgICAgICAgICAgICAgPyBfYyhcInN1cnZleS1uYXZpZ2F0aW9uXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBfdm0ubmF2SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHN1cnZleTogX3ZtLnN1cnZleSwgY3NzOiBfdm0uY3NzIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfdm0uaGFzQ29tcGxldGVkUGFnZVxuICAgICAgICAgICAgPyBfYyhcImRpdlwiLCBbXG4gICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5nZXRDb21wbGV0ZWRQYWdlQ2xhc3NlcygpLFxuICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJIVE1MOiBfdm0uX3MoX3ZtLmdldFByb2Nlc3NlZENvbXBsZXRlZEh0bWwoKSlcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgIF92bS5zdXJ2ZXkuY29tcGxldGVkU3RhdGUgIT0gXCJcIlxuICAgICAgICAgICAgICAgICAgPyBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0uY3NzLnNhdmVEYXRhLnJvb3QgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5nZXRDb21wbGV0ZWRTdGF0ZUNsYXNzZXMoKSB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICBfYyhcInNwYW5cIiwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5zdXJ2ZXkuY29tcGxldGVkU3RhdGVUZXh0KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5zdXJ2ZXkuY29tcGxldGVkU3RhdGUgPT0gXCJlcnJvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLmNzcy5zYXZlRGF0YS5zYXZlQWdhaW5CdXR0b24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnN1cnZleS5nZXRMb2NTdHJpbmcoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzYXZlQWdhaW5CdXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5kb1RyeVNhdmVBZ2FpbiB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX3ZtLnN1cnZleS5zdGF0ZSA9PT0gXCJjb21wbGV0ZWRiZWZvcmVcIlxuICAgICAgICAgICAgPyBfYyhcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgY2xhc3M6IF92bS5jc3MuYm9keSxcbiAgICAgICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICAgICAgaW5uZXJIVE1MOiBfdm0uX3MoX3ZtLnN1cnZleS5wcm9jZXNzZWRDb21wbGV0ZWRCZWZvcmVIdG1sKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfdm0uc3VydmV5LnN0YXRlID09PSBcImxvYWRpbmdcIlxuICAgICAgICAgICAgPyBfYyhcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgY2xhc3M6IF92bS5jc3MuYm9keSxcbiAgICAgICAgICAgICAgICBkb21Qcm9wczogeyBpbm5lckhUTUw6IF92bS5fcyhfdm0uc3VydmV5LnByb2Nlc3NlZExvYWRpbmdIdG1sKSB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX3ZtLnN1cnZleS5zdGF0ZSA9PT0gXCJlbXB0eVwiXG4gICAgICAgICAgICA/IF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5jc3MuYm9keUVtcHR5IH0sIFtcbiAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgXCIgKyBfdm0uX3MoX3ZtLnN1cnZleS5lbXB0eVN1cnZleVRleHQpICsgXCJcXG4gICAgICBcIlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgXSxcbiAgICAgICAgMlxuICAgICAgKVxuICAgIF0pXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCBbXG4gICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmdldENvbnRyb2xDbGFzcygpLFxuICAgICAgc3R5bGU6IF92bS5pbnB1dFN0eWxlLFxuICAgICAgYXR0cnM6IHtcbiAgICAgICAgZGlzYWJsZWQ6IF92bS5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHksXG4gICAgICAgIHR5cGU6IF92bS5xdWVzdGlvbi5pbnB1dFR5cGUsXG4gICAgICAgIG1heGxlbmd0aDogX3ZtLnF1ZXN0aW9uLmdldE1heExlbmd0aCgpLFxuICAgICAgICBtaW46IF92bS5xdWVzdGlvbi5yZW5kZXJlZE1pbixcbiAgICAgICAgbWF4OiBfdm0ucXVlc3Rpb24ucmVuZGVyZWRNYXgsXG4gICAgICAgIHN0ZXA6IF92bS5xdWVzdGlvbi5yZW5kZXJlZFN0ZXAsXG4gICAgICAgIHNpemU6IF92bS5xdWVzdGlvbi5pbnB1dFNpemUsXG4gICAgICAgIGlkOiBfdm0ucXVlc3Rpb24uaW5wdXRJZCxcbiAgICAgICAgbGlzdDogX3ZtLnF1ZXN0aW9uLmRhdGFMaXN0SWQsXG4gICAgICAgIHBsYWNlaG9sZGVyOiBfdm0ucXVlc3Rpb24ucmVuZGVyZWRQbGFjZUhvbGRlcixcbiAgICAgICAgYXV0b2NvbXBsZXRlOiBfdm0ucXVlc3Rpb24uYXV0b0NvbXBsZXRlLFxuICAgICAgICBcImFyaWEtcmVxdWlyZWRcIjogX3ZtLnF1ZXN0aW9uLmlzUmVxdWlyZWQsXG4gICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0ucXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sLFxuICAgICAgICBcImFyaWEtaW52YWxpZFwiOiBfdm0ucXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA+IDAsXG4gICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOlxuICAgICAgICAgIF92bS5xdWVzdGlvbi5lcnJvcnMubGVuZ3RoID4gMCA/IF92bS5xdWVzdGlvbi5pZCArIFwiX2Vycm9yc1wiIDogbnVsbFxuICAgICAgfSxcbiAgICAgIGRvbVByb3BzOiB7IHZhbHVlOiBfdm0ucXVlc3Rpb24udmFsdWUgfSxcbiAgICAgIG9uOiB7IGNoYW5nZTogX3ZtLmNoYW5nZSwga2V5dXA6IF92bS5rZXl1cCB9XG4gICAgfSksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfdm0ucXVlc3Rpb24uZGF0YUxpc3RJZFxuICAgICAgPyBfYyhcbiAgICAgICAgICBcImRhdGFsaXN0XCIsXG4gICAgICAgICAgeyBhdHRyczogeyBpZDogX3ZtLnF1ZXN0aW9uLmRhdGFMaXN0SWQgfSB9LFxuICAgICAgICAgIF92bS5fbChfdm0ucXVlc3Rpb24uZGF0YUxpc3QsIGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiBfYyhcIm9wdGlvblwiLCB7IGRvbVByb3BzOiB7IHZhbHVlOiBpdGVtIH0gfSlcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAwXG4gICAgICAgIClcbiAgICAgIDogX3ZtLl9lKClcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIFtfdm0uX3YoX3ZtLl9zKF92bS50ZXh0KSldKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICBbXG4gICAgICBfdm0uZWxlbWVudC5pc1JlcXVpcmVUZXh0T25TdGFydFxuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzOiBfdm0uZWxlbWVudC5jc3NDbGFzc2VzLnJlcXVpcmVkVGV4dCxcbiAgICAgICAgICAgICAgYXR0cnM6IHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhfdm0uZWxlbWVudC5yZXF1aXJlZFRleHQpKV1cbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLmVsZW1lbnQubm9cbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjbGFzczogX3ZtLmVsZW1lbnQuY3NzQ2xhc3Nlcy5udW1iZXIsXG4gICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7IHBvc2l0aW9uOiBcInN0YXRpY1wiIH0sXG4gICAgICAgICAgICAgIGF0dHJzOiB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW192bS5fdihfdm0uX3MoX3ZtLmVsZW1lbnQubm8pKV1cbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLmVsZW1lbnQuaXNSZXF1aXJlVGV4dEJlZm9yZVRpdGxlXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5lbGVtZW50LmNzc0NsYXNzZXMucmVxdWlyZWRUZXh0LFxuICAgICAgICAgICAgICBhdHRyczogeyBcImFyaWEtaGlkZGVuXCI6IHRydWUgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKF92bS5lbGVtZW50LnJlcXVpcmVkVGV4dCkpXVxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcInN1cnZleS1zdHJpbmdcIiwgeyBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5lbGVtZW50LmxvY1RpdGxlIH0gfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLmVsZW1lbnQuaXNSZXF1aXJlVGV4dEFmdGVyVGl0bGVcbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjbGFzczogX3ZtLmVsZW1lbnQuY3NzQ2xhc3Nlcy5yZXF1aXJlZFRleHQsXG4gICAgICAgICAgICAgIGF0dHJzOiB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW192bS5fdihfdm0uX3MoX3ZtLmVsZW1lbnQucmVxdWlyZWRUZXh0KSldXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAge1xuICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICB2YWx1ZTogX3ZtLnN1cnZleVdpbmRvdy5pc1Nob3dpbmcsXG4gICAgICAgICAgZXhwcmVzc2lvbjogXCJzdXJ2ZXlXaW5kb3cuaXNTaG93aW5nXCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIGNsYXNzOiBfdm0uY3NzLndpbmRvdy5yb290LFxuICAgICAgc3RhdGljU3R5bGU6IHtcbiAgICAgICAgcG9zaXRpb246IFwiZml4ZWRcIixcbiAgICAgICAgYm90dG9tOiBcIjNweFwiLFxuICAgICAgICByaWdodDogXCIxMHB4XCIsXG4gICAgICAgIFwibWF4LXdpZHRoXCI6IFwiNjAlXCJcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5jc3Mud2luZG93LmhlYWRlci5yb290IH0sIFtcbiAgICAgICAgX2MoXG4gICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsgd2lkdGg6IFwiMTAwJVwiLCBjdXJzb3I6IFwicG9pbnRlclwiIH0sXG4gICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmRvRXhwYW5kIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0uY3NzLndpbmRvdy5oZWFkZXIudGl0bGUsXG4gICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsgXCJwYWRkaW5nLXJpZ2h0XCI6IFwiMTBweFwiIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF9jKFwic3VydmV5LXN0cmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgICBhdHRyczogeyBsb2NTdHJpbmc6IF92bS53aW5kb3dTdXJ2ZXkubG9jVGl0bGUgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgX2MoXCJzcGFuXCIsIHtcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5leHBhbmRlZENzcyxcbiAgICAgICAgICAgICAgYXR0cnM6IHsgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIiB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgKSxcbiAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgX3ZtLmlzRXhwYW5kZWRTdXJ2ZXlcbiAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7IGZsb2F0OiBcInJpZ2h0XCIsIGN1cnNvcjogXCJwb2ludGVyXCIgfSxcbiAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmRvRXhwYW5kIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0uY3NzLndpbmRvdy5oZWFkZXIudGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7IFwicGFkZGluZy1yaWdodFwiOiBcIjEwcHhcIiB9XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgW192bS5fdihcIlhcIildXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgXSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHtcbiAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmlzRXhwYW5kZWRTdXJ2ZXksXG4gICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiaXNFeHBhbmRlZFN1cnZleVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICBjbGFzczogX3ZtLmNzcy53aW5kb3cuYm9keVxuICAgICAgICB9LFxuICAgICAgICBbX2MoXCJzdXJ2ZXlcIiwgeyBhdHRyczogeyBzdXJ2ZXk6IF92bS53aW5kb3dTdXJ2ZXkgfSB9KV0sXG4gICAgICAgIDFcbiAgICAgIClcbiAgICBdXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCIvKiBnbG9iYWxzIF9fVlVFX1NTUl9DT05URVhUX18gKi9cblxuLy8gSU1QT1JUQU5UOiBEbyBOT1QgdXNlIEVTMjAxNSBmZWF0dXJlcyBpbiB0aGlzIGZpbGUgKGV4Y2VwdCBmb3IgbW9kdWxlcykuXG4vLyBUaGlzIG1vZHVsZSBpcyBhIHJ1bnRpbWUgdXRpbGl0eSBmb3IgY2xlYW5lciBjb21wb25lbnQgbW9kdWxlIG91dHB1dCBhbmQgd2lsbFxuLy8gYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHdlYnBhY2sgdXNlciBidW5kbGUuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG5vcm1hbGl6ZUNvbXBvbmVudCAoXG4gIHNjcmlwdEV4cG9ydHMsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmdW5jdGlvbmFsVGVtcGxhdGUsXG4gIGluamVjdFN0eWxlcyxcbiAgc2NvcGVJZCxcbiAgbW9kdWxlSWRlbnRpZmllciwgLyogc2VydmVyIG9ubHkgKi9cbiAgc2hhZG93TW9kZSAvKiB2dWUtY2xpIG9ubHkgKi9cbikge1xuICAvLyBWdWUuZXh0ZW5kIGNvbnN0cnVjdG9yIGV4cG9ydCBpbnRlcm9wXG4gIHZhciBvcHRpb25zID0gdHlwZW9mIHNjcmlwdEV4cG9ydHMgPT09ICdmdW5jdGlvbidcbiAgICA/IHNjcmlwdEV4cG9ydHMub3B0aW9uc1xuICAgIDogc2NyaXB0RXhwb3J0c1xuXG4gIC8vIHJlbmRlciBmdW5jdGlvbnNcbiAgaWYgKHJlbmRlcikge1xuICAgIG9wdGlvbnMucmVuZGVyID0gcmVuZGVyXG4gICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBzdGF0aWNSZW5kZXJGbnNcbiAgICBvcHRpb25zLl9jb21waWxlZCA9IHRydWVcbiAgfVxuXG4gIC8vIGZ1bmN0aW9uYWwgdGVtcGxhdGVcbiAgaWYgKGZ1bmN0aW9uYWxUZW1wbGF0ZSkge1xuICAgIG9wdGlvbnMuZnVuY3Rpb25hbCA9IHRydWVcbiAgfVxuXG4gIC8vIHNjb3BlZElkXG4gIGlmIChzY29wZUlkKSB7XG4gICAgb3B0aW9ucy5fc2NvcGVJZCA9ICdkYXRhLXYtJyArIHNjb3BlSWRcbiAgfVxuXG4gIHZhciBob29rXG4gIGlmIChtb2R1bGVJZGVudGlmaWVyKSB7IC8vIHNlcnZlciBidWlsZFxuICAgIGhvb2sgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgLy8gMi4zIGluamVjdGlvblxuICAgICAgY29udGV4dCA9XG4gICAgICAgIGNvbnRleHQgfHwgLy8gY2FjaGVkIGNhbGxcbiAgICAgICAgKHRoaXMuJHZub2RlICYmIHRoaXMuJHZub2RlLnNzckNvbnRleHQpIHx8IC8vIHN0YXRlZnVsXG4gICAgICAgICh0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC4kdm5vZGUgJiYgdGhpcy5wYXJlbnQuJHZub2RlLnNzckNvbnRleHQpIC8vIGZ1bmN0aW9uYWxcbiAgICAgIC8vIDIuMiB3aXRoIHJ1bkluTmV3Q29udGV4dDogdHJ1ZVxuICAgICAgaWYgKCFjb250ZXh0ICYmIHR5cGVvZiBfX1ZVRV9TU1JfQ09OVEVYVF9fICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb250ZXh0ID0gX19WVUVfU1NSX0NPTlRFWFRfX1xuICAgICAgfVxuICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCBzdHlsZXNcbiAgICAgIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICAgICAgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgY29udGV4dClcbiAgICAgIH1cbiAgICAgIC8vIHJlZ2lzdGVyIGNvbXBvbmVudCBtb2R1bGUgaWRlbnRpZmllciBmb3IgYXN5bmMgY2h1bmsgaW5mZXJyZW5jZVxuICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMpIHtcbiAgICAgICAgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMuYWRkKG1vZHVsZUlkZW50aWZpZXIpXG4gICAgICB9XG4gICAgfVxuICAgIC8vIHVzZWQgYnkgc3NyIGluIGNhc2UgY29tcG9uZW50IGlzIGNhY2hlZCBhbmQgYmVmb3JlQ3JlYXRlXG4gICAgLy8gbmV2ZXIgZ2V0cyBjYWxsZWRcbiAgICBvcHRpb25zLl9zc3JSZWdpc3RlciA9IGhvb2tcbiAgfSBlbHNlIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICBob29rID0gc2hhZG93TW9kZVxuICAgICAgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGluamVjdFN0eWxlcy5jYWxsKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgKG9wdGlvbnMuZnVuY3Rpb25hbCA/IHRoaXMucGFyZW50IDogdGhpcykuJHJvb3QuJG9wdGlvbnMuc2hhZG93Um9vdFxuICAgICAgICApXG4gICAgICB9XG4gICAgICA6IGluamVjdFN0eWxlc1xuICB9XG5cbiAgaWYgKGhvb2spIHtcbiAgICBpZiAob3B0aW9ucy5mdW5jdGlvbmFsKSB7XG4gICAgICAvLyBmb3IgdGVtcGxhdGUtb25seSBob3QtcmVsb2FkIGJlY2F1c2UgaW4gdGhhdCBjYXNlIHRoZSByZW5kZXIgZm4gZG9lc24ndFxuICAgICAgLy8gZ28gdGhyb3VnaCB0aGUgbm9ybWFsaXplclxuICAgICAgb3B0aW9ucy5faW5qZWN0U3R5bGVzID0gaG9va1xuICAgICAgLy8gcmVnaXN0ZXIgZm9yIGZ1bmN0aW9uYWwgY29tcG9uZW50IGluIHZ1ZSBmaWxlXG4gICAgICB2YXIgb3JpZ2luYWxSZW5kZXIgPSBvcHRpb25zLnJlbmRlclxuICAgICAgb3B0aW9ucy5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXJXaXRoU3R5bGVJbmplY3Rpb24gKGgsIGNvbnRleHQpIHtcbiAgICAgICAgaG9vay5jYWxsKGNvbnRleHQpXG4gICAgICAgIHJldHVybiBvcmlnaW5hbFJlbmRlcihoLCBjb250ZXh0KVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHJlZ2lzdHJhdGlvbiBhcyBiZWZvcmVDcmVhdGUgaG9va1xuICAgICAgdmFyIGV4aXN0aW5nID0gb3B0aW9ucy5iZWZvcmVDcmVhdGVcbiAgICAgIG9wdGlvbnMuYmVmb3JlQ3JlYXRlID0gZXhpc3RpbmdcbiAgICAgICAgPyBbXS5jb25jYXQoZXhpc3RpbmcsIGhvb2spXG4gICAgICAgIDogW2hvb2tdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBleHBvcnRzOiBzY3JpcHRFeHBvcnRzLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgfVxufVxuIiwidmFyIF9fc3ByZWFkQXJyYXlzID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5cykgfHwgZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xuICAgIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXG4gICAgICAgICAgICByW2tdID0gYVtqXTtcbiAgICByZXR1cm4gcjtcbn07XG4vLyBDb2RlIGNvcGllZCBmcm9tIFZ1ZS9zcmMvc2hhcmVkL3V0aWwuanNcbnZhciBoeXBoZW5hdGVSRSA9IC9cXEIoW0EtWl0pL2c7XG52YXIgaHlwaGVuYXRlID0gZnVuY3Rpb24gKHN0cikgeyByZXR1cm4gc3RyLnJlcGxhY2UoaHlwaGVuYXRlUkUsICctJDEnKS50b0xvd2VyQ2FzZSgpOyB9O1xuLyoqXG4gKiBkZWNvcmF0b3Igb2YgYW4gZXZlbnQtZW1pdHRlciBmdW5jdGlvblxuICogQHBhcmFtICBldmVudCBUaGUgbmFtZSBvZiB0aGUgZXZlbnRcbiAqIEByZXR1cm4gTWV0aG9kRGVjb3JhdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBFbWl0KGV2ZW50KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChfdGFyZ2V0LCBwcm9wZXJ0eUtleSwgZGVzY3JpcHRvcikge1xuICAgICAgICB2YXIga2V5ID0gaHlwaGVuYXRlKHByb3BlcnR5S2V5KTtcbiAgICAgICAgdmFyIG9yaWdpbmFsID0gZGVzY3JpcHRvci52YWx1ZTtcbiAgICAgICAgZGVzY3JpcHRvci52YWx1ZSA9IGZ1bmN0aW9uIGVtaXR0ZXIoKSB7XG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGVtaXQgPSBmdW5jdGlvbiAocmV0dXJuVmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgZW1pdE5hbWUgPSBldmVudCB8fCBrZXk7XG4gICAgICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy4kZW1pdChlbWl0TmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLiRlbWl0KGVtaXROYW1lLCBhcmdzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLiRlbWl0LmFwcGx5KF90aGlzLCBfX3NwcmVhZEFycmF5cyhbZW1pdE5hbWVdLCBhcmdzKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MudW5zaGlmdChyZXR1cm5WYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLiRlbWl0LmFwcGx5KF90aGlzLCBfX3NwcmVhZEFycmF5cyhbZW1pdE5hbWVdLCBhcmdzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHZhciByZXR1cm5WYWx1ZSA9IG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgaWYgKGlzUHJvbWlzZShyZXR1cm5WYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZS50aGVuKGVtaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZW1pdChyZXR1cm5WYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG4gICAgICAgIH07XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGlzUHJvbWlzZShvYmopIHtcbiAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgUHJvbWlzZSB8fCAob2JqICYmIHR5cGVvZiBvYmoudGhlbiA9PT0gJ2Z1bmN0aW9uJyk7XG59XG4iLCJpbXBvcnQgeyBjcmVhdGVEZWNvcmF0b3IgfSBmcm9tICd2dWUtY2xhc3MtY29tcG9uZW50Jztcbi8qKlxuICogZGVjb3JhdG9yIG9mIGFuIGluamVjdFxuICogQHBhcmFtIGZyb20ga2V5XG4gKiBAcmV0dXJuIFByb3BlcnR5RGVjb3JhdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBJbmplY3Qob3B0aW9ucykge1xuICAgIHJldHVybiBjcmVhdGVEZWNvcmF0b3IoZnVuY3Rpb24gKGNvbXBvbmVudE9wdGlvbnMsIGtleSkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbXBvbmVudE9wdGlvbnMuaW5qZWN0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29tcG9uZW50T3B0aW9ucy5pbmplY3QgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29tcG9uZW50T3B0aW9ucy5pbmplY3QpKSB7XG4gICAgICAgICAgICBjb21wb25lbnRPcHRpb25zLmluamVjdFtrZXldID0gb3B0aW9ucyB8fCBrZXk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbiIsImltcG9ydCB7IGNyZWF0ZURlY29yYXRvciB9IGZyb20gJ3Z1ZS1jbGFzcy1jb21wb25lbnQnO1xuaW1wb3J0IHsgcmVhY3RpdmVJbmplY3RLZXkgfSBmcm9tICcuLi9oZWxwZXJzL3Byb3ZpZGVJbmplY3QnO1xuLyoqXG4gKiBkZWNvcmF0b3Igb2YgYSByZWFjdGl2ZSBpbmplY3RcbiAqIEBwYXJhbSBmcm9tIGtleVxuICogQHJldHVybiBQcm9wZXJ0eURlY29yYXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gSW5qZWN0UmVhY3RpdmUob3B0aW9ucykge1xuICAgIHJldHVybiBjcmVhdGVEZWNvcmF0b3IoZnVuY3Rpb24gKGNvbXBvbmVudE9wdGlvbnMsIGtleSkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbXBvbmVudE9wdGlvbnMuaW5qZWN0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29tcG9uZW50T3B0aW9ucy5pbmplY3QgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29tcG9uZW50T3B0aW9ucy5pbmplY3QpKSB7XG4gICAgICAgICAgICB2YXIgZnJvbUtleV8xID0gISFvcHRpb25zID8gb3B0aW9ucy5mcm9tIHx8IG9wdGlvbnMgOiBrZXk7XG4gICAgICAgICAgICB2YXIgZGVmYXVsdFZhbF8xID0gKCEhb3B0aW9ucyAmJiBvcHRpb25zLmRlZmF1bHQpIHx8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmICghY29tcG9uZW50T3B0aW9ucy5jb21wdXRlZClcbiAgICAgICAgICAgICAgICBjb21wb25lbnRPcHRpb25zLmNvbXB1dGVkID0ge307XG4gICAgICAgICAgICBjb21wb25lbnRPcHRpb25zLmNvbXB1dGVkW2tleV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG9iaiA9IHRoaXNbcmVhY3RpdmVJbmplY3RLZXldO1xuICAgICAgICAgICAgICAgIHJldHVybiBvYmogPyBvYmpbZnJvbUtleV8xXSA6IGRlZmF1bHRWYWxfMTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb21wb25lbnRPcHRpb25zLmluamVjdFtyZWFjdGl2ZUluamVjdEtleV0gPSByZWFjdGl2ZUluamVjdEtleTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuIiwiaW1wb3J0IHsgY3JlYXRlRGVjb3JhdG9yIH0gZnJvbSAndnVlLWNsYXNzLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBhcHBseU1ldGFkYXRhIH0gZnJvbSAnLi4vaGVscGVycy9tZXRhZGF0YSc7XG4vKipcbiAqIGRlY29yYXRvciBvZiBtb2RlbFxuICogQHBhcmFtICBldmVudCBldmVudCBuYW1lXG4gKiBAcGFyYW0gb3B0aW9ucyBvcHRpb25zXG4gKiBAcmV0dXJuIFByb3BlcnR5RGVjb3JhdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBNb2RlbChldmVudCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgICAgICBhcHBseU1ldGFkYXRhKG9wdGlvbnMsIHRhcmdldCwga2V5KTtcbiAgICAgICAgY3JlYXRlRGVjb3JhdG9yKGZ1bmN0aW9uIChjb21wb25lbnRPcHRpb25zLCBrKSB7XG4gICAgICAgICAgICA7XG4gICAgICAgICAgICAoY29tcG9uZW50T3B0aW9ucy5wcm9wcyB8fCAoY29tcG9uZW50T3B0aW9ucy5wcm9wcyA9IHt9KSlba10gPSBvcHRpb25zO1xuICAgICAgICAgICAgY29tcG9uZW50T3B0aW9ucy5tb2RlbCA9IHsgcHJvcDogaywgZXZlbnQ6IGV2ZW50IHx8IGsgfTtcbiAgICAgICAgfSkodGFyZ2V0LCBrZXkpO1xuICAgIH07XG59XG4iLCJpbXBvcnQgeyBjcmVhdGVEZWNvcmF0b3IgfSBmcm9tICd2dWUtY2xhc3MtY29tcG9uZW50JztcbmltcG9ydCB7IGFwcGx5TWV0YWRhdGEgfSBmcm9tICcuLi9oZWxwZXJzL21ldGFkYXRhJztcbi8qKlxuICogZGVjb3JhdG9yIG9mIHN5bmNlZCBtb2RlbCBhbmQgcHJvcFxuICogQHBhcmFtIHByb3BOYW1lIHRoZSBuYW1lIHRvIGludGVyZmFjZSB3aXRoIGZyb20gb3V0c2lkZSwgbXVzdCBiZSBkaWZmZXJlbnQgZnJvbSBkZWNvcmF0ZWQgcHJvcGVydHlcbiAqIEBwYXJhbSAgZXZlbnQgZXZlbnQgbmFtZVxuICogQHBhcmFtIG9wdGlvbnMgb3B0aW9uc1xuICogQHJldHVybiBQcm9wZXJ0eURlY29yYXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gTW9kZWxTeW5jKHByb3BOYW1lLCBldmVudCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgICAgICBhcHBseU1ldGFkYXRhKG9wdGlvbnMsIHRhcmdldCwga2V5KTtcbiAgICAgICAgY3JlYXRlRGVjb3JhdG9yKGZ1bmN0aW9uIChjb21wb25lbnRPcHRpb25zLCBrKSB7XG4gICAgICAgICAgICA7XG4gICAgICAgICAgICAoY29tcG9uZW50T3B0aW9ucy5wcm9wcyB8fCAoY29tcG9uZW50T3B0aW9ucy5wcm9wcyA9IHt9KSlbcHJvcE5hbWVdID0gb3B0aW9ucztcbiAgICAgICAgICAgIGNvbXBvbmVudE9wdGlvbnMubW9kZWwgPSB7IHByb3A6IHByb3BOYW1lLCBldmVudDogZXZlbnQgfHwgayB9O1xuICAgICAgICAgICAgKGNvbXBvbmVudE9wdGlvbnMuY29tcHV0ZWQgfHwgKGNvbXBvbmVudE9wdGlvbnMuY29tcHV0ZWQgPSB7fSkpW2tdID0ge1xuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1twcm9wTmFtZV07XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoZXZlbnQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSkodGFyZ2V0LCBrZXkpO1xuICAgIH07XG59XG4iLCJpbXBvcnQgeyBjcmVhdGVEZWNvcmF0b3IgfSBmcm9tICd2dWUtY2xhc3MtY29tcG9uZW50JztcbmltcG9ydCB7IGFwcGx5TWV0YWRhdGEgfSBmcm9tICcuLi9oZWxwZXJzL21ldGFkYXRhJztcbi8qKlxuICogZGVjb3JhdG9yIG9mIGEgcHJvcFxuICogQHBhcmFtICBvcHRpb25zIHRoZSBvcHRpb25zIGZvciB0aGUgcHJvcFxuICogQHJldHVybiBQcm9wZXJ0eURlY29yYXRvciB8IHZvaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFByb3Aob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgICAgICBhcHBseU1ldGFkYXRhKG9wdGlvbnMsIHRhcmdldCwga2V5KTtcbiAgICAgICAgY3JlYXRlRGVjb3JhdG9yKGZ1bmN0aW9uIChjb21wb25lbnRPcHRpb25zLCBrKSB7XG4gICAgICAgICAgICA7XG4gICAgICAgICAgICAoY29tcG9uZW50T3B0aW9ucy5wcm9wcyB8fCAoY29tcG9uZW50T3B0aW9ucy5wcm9wcyA9IHt9KSlba10gPSBvcHRpb25zO1xuICAgICAgICB9KSh0YXJnZXQsIGtleSk7XG4gICAgfTtcbn1cbiIsImltcG9ydCB7IGNyZWF0ZURlY29yYXRvciB9IGZyb20gJ3Z1ZS1jbGFzcy1jb21wb25lbnQnO1xuaW1wb3J0IHsgYXBwbHlNZXRhZGF0YSB9IGZyb20gJy4uL2hlbHBlcnMvbWV0YWRhdGEnO1xuLyoqXG4gKiBkZWNvcmF0b3Igb2YgYSBzeW5jZWQgcHJvcFxuICogQHBhcmFtIHByb3BOYW1lIHRoZSBuYW1lIHRvIGludGVyZmFjZSB3aXRoIGZyb20gb3V0c2lkZSwgbXVzdCBiZSBkaWZmZXJlbnQgZnJvbSBkZWNvcmF0ZWQgcHJvcGVydHlcbiAqIEBwYXJhbSBvcHRpb25zIHRoZSBvcHRpb25zIGZvciB0aGUgc3luY2VkIHByb3BcbiAqIEByZXR1cm4gUHJvcGVydHlEZWNvcmF0b3IgfCB2b2lkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBQcm9wU3luYyhwcm9wTmFtZSwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgICAgICBhcHBseU1ldGFkYXRhKG9wdGlvbnMsIHRhcmdldCwga2V5KTtcbiAgICAgICAgY3JlYXRlRGVjb3JhdG9yKGZ1bmN0aW9uIChjb21wb25lbnRPcHRpb25zLCBrKSB7XG4gICAgICAgICAgICA7XG4gICAgICAgICAgICAoY29tcG9uZW50T3B0aW9ucy5wcm9wcyB8fCAoY29tcG9uZW50T3B0aW9ucy5wcm9wcyA9IHt9KSlbcHJvcE5hbWVdID0gb3B0aW9ucztcbiAgICAgICAgICAgIChjb21wb25lbnRPcHRpb25zLmNvbXB1dGVkIHx8IChjb21wb25lbnRPcHRpb25zLmNvbXB1dGVkID0ge30pKVtrXSA9IHtcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbcHJvcE5hbWVdO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZW1pdChcInVwZGF0ZTpcIiArIHByb3BOYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pKHRhcmdldCwga2V5KTtcbiAgICB9O1xufVxuIiwiaW1wb3J0IHsgY3JlYXRlRGVjb3JhdG9yIH0gZnJvbSAndnVlLWNsYXNzLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBpbmhlcml0SW5qZWN0ZWQsIG5lZWRUb1Byb2R1Y2VQcm92aWRlLCBwcm9kdWNlUHJvdmlkZSwgfSBmcm9tICcuLi9oZWxwZXJzL3Byb3ZpZGVJbmplY3QnO1xuLyoqXG4gKiBkZWNvcmF0b3Igb2YgYSBwcm92aWRlXG4gKiBAcGFyYW0ga2V5IGtleVxuICogQHJldHVybiBQcm9wZXJ0eURlY29yYXRvciB8IHZvaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFByb3ZpZGUoa2V5KSB7XG4gICAgcmV0dXJuIGNyZWF0ZURlY29yYXRvcihmdW5jdGlvbiAoY29tcG9uZW50T3B0aW9ucywgaykge1xuICAgICAgICB2YXIgcHJvdmlkZSA9IGNvbXBvbmVudE9wdGlvbnMucHJvdmlkZTtcbiAgICAgICAgaW5oZXJpdEluamVjdGVkKGNvbXBvbmVudE9wdGlvbnMpO1xuICAgICAgICBpZiAobmVlZFRvUHJvZHVjZVByb3ZpZGUocHJvdmlkZSkpIHtcbiAgICAgICAgICAgIHByb3ZpZGUgPSBjb21wb25lbnRPcHRpb25zLnByb3ZpZGUgPSBwcm9kdWNlUHJvdmlkZShwcm92aWRlKTtcbiAgICAgICAgfVxuICAgICAgICBwcm92aWRlLm1hbmFnZWRba10gPSBrZXkgfHwgaztcbiAgICB9KTtcbn1cbiIsImltcG9ydCB7IGNyZWF0ZURlY29yYXRvciB9IGZyb20gJ3Z1ZS1jbGFzcy1jb21wb25lbnQnO1xuaW1wb3J0IHsgaW5oZXJpdEluamVjdGVkLCBuZWVkVG9Qcm9kdWNlUHJvdmlkZSwgcHJvZHVjZVByb3ZpZGUsIH0gZnJvbSAnLi4vaGVscGVycy9wcm92aWRlSW5qZWN0Jztcbi8qKlxuICogZGVjb3JhdG9yIG9mIGEgcmVhY3RpdmUgcHJvdmlkZVxuICogQHBhcmFtIGtleSBrZXlcbiAqIEByZXR1cm4gUHJvcGVydHlEZWNvcmF0b3IgfCB2b2lkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBQcm92aWRlUmVhY3RpdmUoa2V5KSB7XG4gICAgcmV0dXJuIGNyZWF0ZURlY29yYXRvcihmdW5jdGlvbiAoY29tcG9uZW50T3B0aW9ucywgaykge1xuICAgICAgICB2YXIgcHJvdmlkZSA9IGNvbXBvbmVudE9wdGlvbnMucHJvdmlkZTtcbiAgICAgICAgaW5oZXJpdEluamVjdGVkKGNvbXBvbmVudE9wdGlvbnMpO1xuICAgICAgICBpZiAobmVlZFRvUHJvZHVjZVByb3ZpZGUocHJvdmlkZSkpIHtcbiAgICAgICAgICAgIHByb3ZpZGUgPSBjb21wb25lbnRPcHRpb25zLnByb3ZpZGUgPSBwcm9kdWNlUHJvdmlkZShwcm92aWRlKTtcbiAgICAgICAgfVxuICAgICAgICBwcm92aWRlLm1hbmFnZWRSZWFjdGl2ZVtrXSA9IGtleSB8fCBrO1xuICAgIH0pO1xufVxuIiwiaW1wb3J0IHsgY3JlYXRlRGVjb3JhdG9yIH0gZnJvbSAndnVlLWNsYXNzLWNvbXBvbmVudCc7XG4vKipcbiAqIGRlY29yYXRvciBvZiBhIHJlZiBwcm9wXG4gKiBAcGFyYW0gcmVmS2V5IHRoZSByZWYga2V5IGRlZmluZWQgaW4gdGVtcGxhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFJlZihyZWZLZXkpIHtcbiAgICByZXR1cm4gY3JlYXRlRGVjb3JhdG9yKGZ1bmN0aW9uIChvcHRpb25zLCBrZXkpIHtcbiAgICAgICAgb3B0aW9ucy5jb21wdXRlZCA9IG9wdGlvbnMuY29tcHV0ZWQgfHwge307XG4gICAgICAgIG9wdGlvbnMuY29tcHV0ZWRba2V5XSA9IHtcbiAgICAgICAgICAgIGNhY2hlOiBmYWxzZSxcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRyZWZzW3JlZktleSB8fCBrZXldO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbiIsImltcG9ydCB7IGNyZWF0ZURlY29yYXRvciB9IGZyb20gJ3Z1ZS1jbGFzcy1jb21wb25lbnQnO1xuLyoqXG4gKiBkZWNvcmF0b3IgZm9yIGNhcHR1cmluZ3Mgdi1tb2RlbCBiaW5kaW5nIHRvIGNvbXBvbmVudFxuICogQHBhcmFtIG9wdGlvbnMgdGhlIG9wdGlvbnMgZm9yIHRoZSBwcm9wXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBWTW9kZWwob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgdmFyIHZhbHVlS2V5ID0gJ3ZhbHVlJztcbiAgICByZXR1cm4gY3JlYXRlRGVjb3JhdG9yKGZ1bmN0aW9uIChjb21wb25lbnRPcHRpb25zLCBrZXkpIHtcbiAgICAgICAgO1xuICAgICAgICAoY29tcG9uZW50T3B0aW9ucy5wcm9wcyB8fCAoY29tcG9uZW50T3B0aW9ucy5wcm9wcyA9IHt9KSlbdmFsdWVLZXldID0gb3B0aW9ucztcbiAgICAgICAgKGNvbXBvbmVudE9wdGlvbnMuY29tcHV0ZWQgfHwgKGNvbXBvbmVudE9wdGlvbnMuY29tcHV0ZWQgPSB7fSkpW2tleV0gPSB7XG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1t2YWx1ZUtleV07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIHZhbHVlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgeyBjcmVhdGVEZWNvcmF0b3IgfSBmcm9tICd2dWUtY2xhc3MtY29tcG9uZW50Jztcbi8qKlxuICogZGVjb3JhdG9yIG9mIGEgd2F0Y2ggZnVuY3Rpb25cbiAqIEBwYXJhbSAgcGF0aCB0aGUgcGF0aCBvciB0aGUgZXhwcmVzc2lvbiB0byBvYnNlcnZlXG4gKiBAcGFyYW0gIFdhdGNoT3B0aW9uXG4gKiBAcmV0dXJuIE1ldGhvZERlY29yYXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gV2F0Y2gocGF0aCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgdmFyIF9hID0gb3B0aW9ucy5kZWVwLCBkZWVwID0gX2EgPT09IHZvaWQgMCA/IGZhbHNlIDogX2EsIF9iID0gb3B0aW9ucy5pbW1lZGlhdGUsIGltbWVkaWF0ZSA9IF9iID09PSB2b2lkIDAgPyBmYWxzZSA6IF9iO1xuICAgIHJldHVybiBjcmVhdGVEZWNvcmF0b3IoZnVuY3Rpb24gKGNvbXBvbmVudE9wdGlvbnMsIGhhbmRsZXIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb21wb25lbnRPcHRpb25zLndhdGNoICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgY29tcG9uZW50T3B0aW9ucy53YXRjaCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdhdGNoID0gY29tcG9uZW50T3B0aW9ucy53YXRjaDtcbiAgICAgICAgaWYgKHR5cGVvZiB3YXRjaFtwYXRoXSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkod2F0Y2hbcGF0aF0pKSB7XG4gICAgICAgICAgICB3YXRjaFtwYXRoXSA9IFt3YXRjaFtwYXRoXV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHdhdGNoW3BhdGhdID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgd2F0Y2hbcGF0aF0gPSBbXTtcbiAgICAgICAgfVxuICAgICAgICB3YXRjaFtwYXRoXS5wdXNoKHsgaGFuZGxlcjogaGFuZGxlciwgZGVlcDogZGVlcCwgaW1tZWRpYXRlOiBpbW1lZGlhdGUgfSk7XG4gICAgfSk7XG59XG4iLCIvKiogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1jbGFzcy1jb21wb25lbnQvYmxvYi9tYXN0ZXIvc3JjL3JlZmxlY3QudHN9ICovXG52YXIgcmVmbGVjdE1ldGFkYXRhSXNTdXBwb3J0ZWQgPSB0eXBlb2YgUmVmbGVjdCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIFJlZmxlY3QuZ2V0TWV0YWRhdGEgIT09ICd1bmRlZmluZWQnO1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5TWV0YWRhdGEob3B0aW9ucywgdGFyZ2V0LCBrZXkpIHtcbiAgICBpZiAocmVmbGVjdE1ldGFkYXRhSXNTdXBwb3J0ZWQpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9wdGlvbnMpICYmXG4gICAgICAgICAgICB0eXBlb2Ygb3B0aW9ucyAhPT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICAgICAgIW9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ3R5cGUnKSAmJlxuICAgICAgICAgICAgdHlwZW9mIG9wdGlvbnMudHlwZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHZhciB0eXBlID0gUmVmbGVjdC5nZXRNZXRhZGF0YSgnZGVzaWduOnR5cGUnLCB0YXJnZXQsIGtleSk7XG4gICAgICAgICAgICBpZiAodHlwZSAhPT0gT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlID0gdHlwZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBuZWVkVG9Qcm9kdWNlUHJvdmlkZShvcmlnaW5hbCkge1xuICAgIHJldHVybiAodHlwZW9mIG9yaWdpbmFsICE9PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgICghb3JpZ2luYWwubWFuYWdlZCAmJiAhb3JpZ2luYWwubWFuYWdlZFJlYWN0aXZlKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcHJvZHVjZVByb3ZpZGUob3JpZ2luYWwpIHtcbiAgICB2YXIgcHJvdmlkZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIHJ2ID0gdHlwZW9mIG9yaWdpbmFsID09PSAnZnVuY3Rpb24nID8gb3JpZ2luYWwuY2FsbCh0aGlzKSA6IG9yaWdpbmFsO1xuICAgICAgICBydiA9IE9iamVjdC5jcmVhdGUocnYgfHwgbnVsbCk7XG4gICAgICAgIC8vIHNldCByZWFjdGl2ZSBzZXJ2aWNlcyAocHJvcGFnYXRlcyBwcmV2aW91cyBzZXJ2aWNlcyBpZiBuZWNlc3NhcnkpXG4gICAgICAgIHJ2W3JlYWN0aXZlSW5qZWN0S2V5XSA9IE9iamVjdC5jcmVhdGUodGhpc1tyZWFjdGl2ZUluamVjdEtleV0gfHwge30pO1xuICAgICAgICBmb3IgKHZhciBpIGluIHByb3ZpZGUubWFuYWdlZCkge1xuICAgICAgICAgICAgcnZbcHJvdmlkZS5tYW5hZ2VkW2ldXSA9IHRoaXNbaV07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgICAgcnZbcHJvdmlkZS5tYW5hZ2VkUmVhY3RpdmVbaV1dID0gdGhpc18xW2ldOyAvLyBEdXBsaWNhdGVzIHRoZSBiZWhhdmlvciBvZiBgQFByb3ZpZGVgXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocnZbcmVhY3RpdmVJbmplY3RLZXldLCBwcm92aWRlLm1hbmFnZWRSZWFjdGl2ZVtpXSwge1xuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXNbaV07IH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHRoaXNfMSA9IHRoaXM7XG4gICAgICAgIGZvciAodmFyIGkgaW4gcHJvdmlkZS5tYW5hZ2VkUmVhY3RpdmUpIHtcbiAgICAgICAgICAgIF9sb29wXzEoaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJ2O1xuICAgIH07XG4gICAgcHJvdmlkZS5tYW5hZ2VkID0ge307XG4gICAgcHJvdmlkZS5tYW5hZ2VkUmVhY3RpdmUgPSB7fTtcbiAgICByZXR1cm4gcHJvdmlkZTtcbn1cbi8qKiBVc2VkIGZvciBrZXlpbmcgcmVhY3RpdmUgcHJvdmlkZS9pbmplY3QgcHJvcGVydGllcyAqL1xuZXhwb3J0IHZhciByZWFjdGl2ZUluamVjdEtleSA9ICdfX3JlYWN0aXZlSW5qZWN0X18nO1xuZXhwb3J0IGZ1bmN0aW9uIGluaGVyaXRJbmplY3RlZChjb21wb25lbnRPcHRpb25zKSB7XG4gICAgLy8gaW5qZWN0IHBhcmVudCByZWFjdGl2ZSBzZXJ2aWNlcyAoaWYgYW55KVxuICAgIGlmICghQXJyYXkuaXNBcnJheShjb21wb25lbnRPcHRpb25zLmluamVjdCkpIHtcbiAgICAgICAgY29tcG9uZW50T3B0aW9ucy5pbmplY3QgPSBjb21wb25lbnRPcHRpb25zLmluamVjdCB8fCB7fTtcbiAgICAgICAgY29tcG9uZW50T3B0aW9ucy5pbmplY3RbcmVhY3RpdmVJbmplY3RLZXldID0ge1xuICAgICAgICAgICAgZnJvbTogcmVhY3RpdmVJbmplY3RLZXksXG4gICAgICAgICAgICBkZWZhdWx0OiB7fSxcbiAgICAgICAgfTtcbiAgICB9XG59XG4iLCIvKiogdnVlLXByb3BlcnR5LWRlY29yYXRvciB2ZXJzb24gOS4xLjIgTUlUIExJQ0VOU0UgY29weXJpZ2h0IDIwMjAga2FvcnVuMzQzICovXG4vLy8gPHJlZmVyZW5jZSB0eXBlcz0ncmVmbGVjdC1tZXRhZGF0YScvPlxuaW1wb3J0IFZ1ZSBmcm9tICd2dWUnO1xuaW1wb3J0IENvbXBvbmVudCwgeyBtaXhpbnMgfSBmcm9tICd2dWUtY2xhc3MtY29tcG9uZW50JztcbmV4cG9ydCB7IENvbXBvbmVudCwgVnVlLCBtaXhpbnMgYXMgTWl4aW5zIH07XG5leHBvcnQgeyBFbWl0IH0gZnJvbSAnLi9kZWNvcmF0b3JzL0VtaXQnO1xuZXhwb3J0IHsgSW5qZWN0IH0gZnJvbSAnLi9kZWNvcmF0b3JzL0luamVjdCc7XG5leHBvcnQgeyBJbmplY3RSZWFjdGl2ZSB9IGZyb20gJy4vZGVjb3JhdG9ycy9JbmplY3RSZWFjdGl2ZSc7XG5leHBvcnQgeyBNb2RlbCB9IGZyb20gJy4vZGVjb3JhdG9ycy9Nb2RlbCc7XG5leHBvcnQgeyBNb2RlbFN5bmMgfSBmcm9tICcuL2RlY29yYXRvcnMvTW9kZWxTeW5jJztcbmV4cG9ydCB7IFByb3AgfSBmcm9tICcuL2RlY29yYXRvcnMvUHJvcCc7XG5leHBvcnQgeyBQcm9wU3luYyB9IGZyb20gJy4vZGVjb3JhdG9ycy9Qcm9wU3luYyc7XG5leHBvcnQgeyBQcm92aWRlIH0gZnJvbSAnLi9kZWNvcmF0b3JzL1Byb3ZpZGUnO1xuZXhwb3J0IHsgUHJvdmlkZVJlYWN0aXZlIH0gZnJvbSAnLi9kZWNvcmF0b3JzL1Byb3ZpZGVSZWFjdGl2ZSc7XG5leHBvcnQgeyBSZWYgfSBmcm9tICcuL2RlY29yYXRvcnMvUmVmJztcbmV4cG9ydCB7IFZNb2RlbCB9IGZyb20gJy4vZGVjb3JhdG9ycy9WTW9kZWwnO1xuZXhwb3J0IHsgV2F0Y2ggfSBmcm9tICcuL2RlY29yYXRvcnMvV2F0Y2gnO1xuIiwiaW1wb3J0IHsgc2V0dGluZ3MgfSBmcm9tIFwiLi4vc2V0dGluZ3NcIjtcclxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi9iYXNlXCI7XHJcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSBcIi4uL2pzb25vYmplY3RcIjtcclxuXHJcbi8qKlxyXG4gKiBEZWZpbmVzIGFuIGluZGl2aWR1YWwgYWN0aW9uLiBBY3Rpb24gaXRlbXMgY2FuIGJlIGRpc3BsYXllZCBpbiBjZXJ0YWluIHN1cnZleSBlbGVtZW50cyAtIGluIFRvb2xiYXIgKG9yIGFjdGlvbiBiYXIpLCBpbiB0aXRsZXMgKG9mIHBhZ2VzLCBwYW5lbHMsIHF1ZXN0aW9ucyksIGluIG1hdHJpeCByb3dzIChhcyAnZXhwYW5kIGRldGFpbHMnIG9yICdyZW1vdmUgcm93JyBidXR0b25zKSwgYW5kIGV0Yy5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUFjdGlvbiB7XHJcbiAgLyoqXHJcbiAgICogVW5pcXVlIHN0cmluZyBpZFxyXG4gICAqL1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgLyoqXHJcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gZmFsc2UgdG8gbWFrZSB0aGUgdG9vbGJhciBpdGVtIGludmlzaWJsZS5cclxuICAgKi9cclxuICB2aXNpYmxlPzogYm9vbGVhbjtcclxuICAvKipcclxuICAgKiBUb29sYmFyIGl0ZW0gdGl0bGVcclxuICAgKi9cclxuICB0aXRsZT86IHN0cmluZztcclxuICAvKipcclxuICAgKiBUb29sYmFyIGl0ZW0gdG9vbHRpcFxyXG4gICAqL1xyXG4gIHRvb2x0aXA/OiBzdHJpbmc7XHJcbiAgLyoqXHJcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gZmFsc2UgdG8gZGlzYWJsZSB0aGUgdG9vbGJhciBpdGVtLlxyXG4gICAqL1xyXG4gIGVuYWJsZWQ/OiBib29sZWFuO1xyXG4gIC8qKlxyXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGZhbHNlIHRvIGhpZGUgdGhlIHRvb2xiYXIgaXRlbSB0aXRsZS5cclxuICAgKi9cclxuICBzaG93VGl0bGU/OiBib29sZWFuO1xyXG4gIC8qKlxyXG4gICAqIEEgY2FsbGJhY2sgdGhhdCBjYWxscyBvbiB0b29sYmFyIGl0ZW0gY2xpY2suXHJcbiAgICovXHJcbiAgYWN0aW9uPzogKGNvbnRleHQ/OiBhbnkpID0+IHZvaWQ7XHJcbiAgLyoqXHJcbiAgICogVG9vbGJhciBpdGVtIGNzcyBjbGFzc1xyXG4gICAqL1xyXG4gIGNzcz86IHN0cmluZztcclxuICAvKipcclxuICAgKiBUb29sYmFyIGlubmVyIGVsZW1lbnQgY3NzIGNsYXNzXHJcbiAgICovXHJcbiAgaW5uZXJDc3M/OiBzdHJpbmc7XHJcbiAgLyoqXHJcbiAgICogVG9vbGJhciBpdGVtIGRhdGEgb2JqZWN0LiBVc2VkIGFzIGRhdGEgZm9yIGN1c3RvbSB0ZW1wbGF0ZSBvciBjb21wb25lbnQgcmVuZGVyaW5nXHJcbiAgICovXHJcbiAgZGF0YT86IGFueTtcclxuICBwb3B1cE1vZGVsPzogYW55OyAvL1RPRE86IHRlbXAsIHVzZSBkYXRhIGluc3RlYWRcclxuICBuZWVkU2VwYXJhdG9yPzogYm9vbGVhbjsgLy9UT0RPOiB0ZW1wXHJcbiAgLyoqXHJcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gdHJ1ZSB0byBhY3RpdmF0ZSB0aGUgdG9vbGJhciBpdGVtIChwYWdlKVxyXG4gICAqL1xyXG4gIGFjdGl2ZT86IGJvb2xlYW47XHJcbiAgLyoqXHJcbiAgICogVG9vbGJhciBpdGVtIHRlbXBsYXRlIG5hbWVcclxuICAgKi9cclxuICB0ZW1wbGF0ZT86IHN0cmluZztcclxuICAvKipcclxuICAgKiBUb29sYmFyIGl0ZW0gY29tcG9uZW50IG5hbWVcclxuICAgKi9cclxuICBjb21wb25lbnQ/OiBzdHJpbmc7XHJcbiAgLyoqXHJcbiAgICogVG9vbGJhciBpdGVtIGljb24gbmFtZVxyXG4gICAqL1xyXG4gIGljb25OYW1lPzogc3RyaW5nO1xyXG4gIC8qKlxyXG4gICAqIFRvb2xiYXIgaXRlbSBjaGlsZCBpdGVtcy4gQ2FuIGJlIHVzZWQgYXMgY29udGlhbmVyIGZvciBvcHRpb25zXHJcbiAgICovXHJcbiAgaXRlbXM/OiBhbnk7XHJcbiAgLyoqXHJcbiAgICogR2V0cyBvciBzZXRzIGFuIGFjdGlvbidzIGxvY2F0aW9uIGluIGEgbWF0cml4IHF1ZXN0aW9uJ3Mgcm93LlxyXG4gICAqXHJcbiAgICogVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhdmFpbGFibGU6XHJcbiAgICpcclxuICAgKiAtIGBzdGFydGAgLSBBbiBhY3Rpb24gaXMgbG9jYXRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgcm93LlxyXG4gICAqIC0gYGVuZGAgLSBBbiBhY3Rpb24gaXMgbG9jYXRlZCBhdCB0aGUgZW5kIG9mIGEgcm93LlxyXG4gICAqL1xyXG4gIGxvY2F0aW9uPzogc3RyaW5nO1xyXG4gIC8qKlxyXG4gICAqIFNldCBpdCB0byB0cnVlIHRvIG1ha2UgdGhlIHRhYkluZGV4IC0xIHRvIGRpc2FibGUga2V5Ym9hcmQgbmF2aWdhdGlvbiB0byB0aGlzIGl0ZW1cclxuICAgKi9cclxuICBkaXNhYmxlVGFiU3RvcD86IGJvb2xlYW47XHJcbiAgdmlzaWJsZUluZGV4PzogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQWN0aW9uIGV4dGVuZHMgQmFzZSBpbXBsZW1lbnRzIElBY3Rpb24ge1xyXG4gIGNvbnN0cnVjdG9yKGl0ZW06IElBY3Rpb24pIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIGl0ZW0pO1xyXG4gIH1cclxuICBsb2NhdGlvbj86IHN0cmluZztcclxuICBAcHJvcGVydHkoKSBpZDogc3RyaW5nO1xyXG4gIEBwcm9wZXJ0eSgpIGljb25OYW1lOiBzdHJpbmc7XHJcbiAgQHByb3BlcnR5KCkgdmlzaWJsZTogYm9vbGVhbjtcclxuICBAcHJvcGVydHkoKSB0aXRsZTogc3RyaW5nO1xyXG4gIEBwcm9wZXJ0eSgpIHRvb2x0aXA6IHN0cmluZztcclxuICBAcHJvcGVydHkoKSBlbmFibGVkOiBib29sZWFuO1xyXG4gIEBwcm9wZXJ0eSgpIHNob3dUaXRsZTogYm9vbGVhbjtcclxuICBAcHJvcGVydHkoKSBhY3Rpb246IChjb250ZXh0PzogYW55KSA9PiB2b2lkO1xyXG4gIEBwcm9wZXJ0eSgpIGNzczogc3RyaW5nO1xyXG4gIEBwcm9wZXJ0eSgpIGlubmVyQ3NzOiBzdHJpbmc7XHJcbiAgQHByb3BlcnR5KCkgZGF0YTogYW55O1xyXG4gIEBwcm9wZXJ0eSgpIHBvcHVwTW9kZWw6IGFueTtcclxuICBAcHJvcGVydHkoKSBuZWVkU2VwYXJhdG9yOiBib29sZWFuO1xyXG4gIEBwcm9wZXJ0eSgpIGFjdGl2ZTogYm9vbGVhbjtcclxuICBAcHJvcGVydHkoKSB0ZW1wbGF0ZTogc3RyaW5nO1xyXG4gIEBwcm9wZXJ0eSgpIGNvbXBvbmVudDogc3RyaW5nO1xyXG4gIEBwcm9wZXJ0eSgpIGl0ZW1zOiBhbnk7XHJcbiAgQHByb3BlcnR5KCkgdmlzaWJsZUluZGV4OiBudW1iZXI7XHJcbiAgQHByb3BlcnR5KHsgZGVmYXVsdFZhbHVlOiBcImxhcmdlXCIgfSkgbW9kZTogXCJsYXJnZVwiIHwgXCJzbWFsbFwiIHwgXCJwb3B1cFwiO1xyXG4gIEBwcm9wZXJ0eSgpIGRpc2FibGVUYWJTdG9wOiBib29sZWFuO1xyXG5cclxuICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZW5hYmxlZCAhPT0gdW5kZWZpbmVkICYmICF0aGlzLmVuYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGhhc1RpdGxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgKCh0aGlzLm1vZGUgIT0gXCJzbWFsbFwiICYmXHJcbiAgICAgICAgKHRoaXMuc2hvd1RpdGxlIHx8IHRoaXMuc2hvd1RpdGxlID09PSB1bmRlZmluZWQpKSB8fFxyXG4gICAgICAgICF0aGlzLmljb25OYW1lKSAmJlxyXG4gICAgICAhIXRoaXMudGl0bGVcclxuICAgICk7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgaXNWaXNpYmxlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubW9kZSAhPT0gXCJwb3B1cFwiO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGNhblNocmluaygpIHtcclxuICAgIHJldHVybiAhIXRoaXMuaWNvbk5hbWU7XHJcbiAgfVxyXG5cclxuICBtaW5EaW1lbnNpb246IG51bWJlcjtcclxuICBtYXhEaW1lbnNpb246IG51bWJlcjtcclxufVxyXG4iLCJpbXBvcnQgeyBMaXN0TW9kZWwgfSBmcm9tIFwiLi4vbGlzdFwiO1xyXG5pbXBvcnQgeyBQb3B1cE1vZGVsIH0gZnJvbSBcIi4uL3BvcHVwXCI7XHJcbmltcG9ydCB7IEFjdGlvbiwgSUFjdGlvbiB9IGZyb20gXCIuL2FjdGlvblwiO1xyXG5pbXBvcnQgeyBBY3Rpb25Db250YWluZXIgfSBmcm9tIFwiLi9jb250YWluZXJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lcjxUIGV4dGVuZHMgQWN0aW9uID0gQWN0aW9uLCBWIGV4dGVuZHMgSUFjdGlvbiA9IElBY3Rpb24+IGV4dGVuZHMgQWN0aW9uQ29udGFpbmVyPFQ+IHtcclxuICBwcm90ZWN0ZWQgZG90c0l0ZW06IEFjdGlvbjsgLy8gKC4uLikgYnV0dG9uXHJcbiAgcHVibGljIGRvdHNJdGVtUG9wdXBNb2RlbDogUG9wdXBNb2RlbDtcclxuXHJcbiAgcHVibGljIGdldCB2aXNpYmxlSXRlbXMoKTogQXJyYXk8QWN0aW9uPiB7XHJcbiAgICByZXR1cm4gdGhpcy5hY3Rpb25zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5tb2RlICE9PSBcInBvcHVwXCIpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldEl0ZW1zKGl0ZW1zOiBBcnJheTxWPiwgc29ydEJ5VmlzaWJsZUluZGV4ID0gdHJ1ZSkge1xyXG4gICAgY29uc3QgYWN0aW9uczogQXJyYXk8VD4gPSA8YW55Pml0ZW1zLm1hcCgoaXRlbSkgPT4gKGl0ZW0gaW5zdGFuY2VvZiBBY3Rpb24gPyBpdGVtIDogbmV3IEFjdGlvbihpdGVtKSkpO1xyXG4gICAgaWYgKHNvcnRCeVZpc2libGVJbmRleCkge1xyXG4gICAgICB0aGlzLmFjdGlvbnMgPSB0aGlzLnNvcnRJdGVtcyhhY3Rpb25zKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWN0aW9ucyA9IGFjdGlvbnM7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuICBwcml2YXRlIHNvcnRJdGVtcyhpdGVtczogQXJyYXk8VD4pIHtcclxuICAgIHJldHVybiBbXVxyXG4gICAgICAuY29uY2F0KGl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS52aXNpYmxlSW5kZXggPj0gMCB8fCBpdGVtLnZpc2libGVJbmRleCA9PT0gdW5kZWZpbmVkKSlcclxuICAgICAgLnNvcnQoKGZpcnN0SXRlbSwgc2Vjb25kSXRlbSkgPT4ge1xyXG4gICAgICAgIHJldHVybiBmaXJzdEl0ZW0udmlzaWJsZUluZGV4IC0gc2Vjb25kSXRlbS52aXNpYmxlSW5kZXg7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5kb3RzSXRlbVBvcHVwTW9kZWwgPSBuZXcgUG9wdXBNb2RlbChcInN2LWxpc3RcIiwge1xyXG4gICAgICBtb2RlbDogdGhpcy5pbnZpc2libGVJdGVtc0xpc3RNb2RlbFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmRvdHNJdGVtID0gbmV3IEFjdGlvbih7XHJcbiAgICAgIGlkOiBcImRvdHNJdGVtLWlkXCIsXHJcbiAgICAgIGNvbXBvbmVudDogXCJzdi1hY3Rpb24tYmFyLWl0ZW0tZHJvcGRvd25cIixcclxuICAgICAgY3NzOiBcInN2LWRvdHNcIixcclxuICAgICAgaW5uZXJDc3M6IFwic3YtZG90c19faXRlbVwiLFxyXG4gICAgICBpY29uTmFtZTogXCJpY29uLWRvdHNcIixcclxuICAgICAgLy8gc2hvd1RpdGxlOiB0cnVlLFxyXG4gICAgICAvLyB0aXRsZTogXCIuLi5cIixcclxuICAgICAgYWN0aW9uOiAoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5kb3RzSXRlbVBvcHVwTW9kZWwudG9nZ2xlVmlzaWJpbGl0eSgpO1xyXG4gICAgICB9LFxyXG4gICAgICBwb3B1cE1vZGVsOiB0aGlzLmRvdHNJdGVtUG9wdXBNb2RlbFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGhhc0l0ZW1zKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICh0aGlzLmFjdGlvbnMgfHwgW10pLmxlbmd0aCA+IDA7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaW52aXNpYmxlSXRlbVNlbGVjdGVkKGl0ZW06IFQpOiB2b2lkIHtcclxuICAgIGlmICghIWl0ZW0gJiYgdHlwZW9mIGl0ZW0uYWN0aW9uID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgaXRlbS5hY3Rpb24oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBpbnZpc2libGVJdGVtc0xpc3RNb2RlbDogTGlzdE1vZGVsID0gbmV3IExpc3RNb2RlbChcclxuICAgIFtdLFxyXG4gICAgKGl0ZW06IFQpID0+IHtcclxuICAgICAgdGhpcy5pbnZpc2libGVJdGVtU2VsZWN0ZWQoaXRlbSk7XHJcbiAgICAgIHRoaXMuZG90c0l0ZW1Qb3B1cE1vZGVsLnRvZ2dsZVZpc2liaWxpdHkoKTtcclxuICAgIH0sXHJcbiAgICBmYWxzZVxyXG4gICk7XHJcblxyXG4gIHB1YmxpYyBzaG93Rmlyc3ROKHZpc2libGVJdGVtc0NvdW50OiBudW1iZXIpIHtcclxuICAgIGxldCBsZWZ0SXRlbXNUb1Nob3cgPSB2aXNpYmxlSXRlbXNDb3VudDtcclxuICAgIGNvbnN0IGludmlzaWJsZUl0ZW1zOiBBY3Rpb25bXSA9IFtdO1xyXG4gICAgdGhpcy5hY3Rpb25zLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaWYgKGl0ZW0gPT09IHRoaXMuZG90c0l0ZW0pIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGxlZnRJdGVtc1RvU2hvdyA8PSAwKSB7XHJcbiAgICAgICAgaXRlbS5tb2RlID0gXCJwb3B1cFwiO1xyXG4gICAgICAgIGludmlzaWJsZUl0ZW1zLnB1c2goaXRlbSk7XHJcbiAgICAgIH1cclxuICAgICAgbGVmdEl0ZW1zVG9TaG93LS07XHJcbiAgICB9KTtcclxuICAgIHRoaXMuaW52aXNpYmxlSXRlbXNMaXN0TW9kZWwuaXRlbXMgPSBpbnZpc2libGVJdGVtcztcclxuICAgIHRoaXMuYWRkRG90c0J1dHRvbih2aXNpYmxlSXRlbXNDb3VudCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlRG90c0J1dHRvbigpIHtcclxuICAgIHZhciBpbmRleCA9IHRoaXMuYWN0aW9ucy5pbmRleE9mKDxhbnk+dGhpcy5kb3RzSXRlbSk7XHJcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XHJcbiAgICAgIHRoaXMuYWN0aW9ucy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGREb3RzQnV0dG9uKG5ld0luZGV4OiBudW1iZXIpIHtcclxuICAgIGlmIChuZXdJbmRleCA8IHRoaXMuYWN0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5hY3Rpb25zLnNwbGljZShuZXdJbmRleCwgMCwgPGFueT50aGlzLmRvdHNJdGVtKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgcHJvcGVydHlBcnJheSB9IGZyb20gXCIuLi9qc29ub2JqZWN0XCI7XHJcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vYmFzZVwiO1xyXG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tIFwiLi9hY3Rpb25cIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBBY3Rpb25Db250YWluZXI8VCBleHRlbmRzIEFjdGlvbj4gZXh0ZW5kcyBCYXNlIHtcclxuICAgIEBwcm9wZXJ0eUFycmF5KCkgYWN0aW9uczogQXJyYXk8VD47XHJcblxyXG4gICAgcHVibGljIGdldCBoYXNJdGVtcygpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuYWN0aW9ucyB8fCBbXSkubGVuZ3RoID4gMDtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBJTG9jYWxpemFibGVPd25lciwgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuaW1wb3J0IHsgSGVscGVycyB9IGZyb20gXCIuL2hlbHBlcnNcIjtcbmltcG9ydCB7XG4gIEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLFxuICBKc29uT2JqZWN0LFxuICBKc29uT2JqZWN0UHJvcGVydHksXG4gIFNlcmlhbGl6ZXIsXG59IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcbmltcG9ydCB7IEl0ZW1WYWx1ZSB9IGZyb20gXCIuL2l0ZW12YWx1ZVwiO1xuaW1wb3J0IHsgSUZpbmRFbGVtZW50LCBJUHJvZ3Jlc3NJbmZvLCBJU3VydmV5IH0gZnJvbSBcIi4vYmFzZS1pbnRlcmZhY2VzXCI7XG5cbmV4cG9ydCBjbGFzcyBCaW5kaW5ncyB7XG4gIHByaXZhdGUgcHJvcGVydGllczogQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5PiA9IG51bGw7XG4gIHByaXZhdGUgdmFsdWVzOiBhbnkgPSBudWxsO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG9iajogQmFzZSkge31cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJiaW5kaW5nc1wiO1xuICB9XG4gIHB1YmxpYyBnZXROYW1lcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICB2YXIgcmVzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgdGhpcy5maWxsUHJvcGVydGllcygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5wcm9wZXJ0aWVzW2ldLmlzVmlzaWJsZShcIlwiLCB0aGlzLm9iaikpIHtcbiAgICAgICAgcmVzLnB1c2godGhpcy5wcm9wZXJ0aWVzW2ldLm5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBnZXRQcm9wZXJ0aWVzKCk6IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4ge1xuICAgIHZhciByZXM6IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4gPSBbXTtcbiAgICB0aGlzLmZpbGxQcm9wZXJ0aWVzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlcy5wdXNoKHRoaXMucHJvcGVydGllc1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIHNldEJpbmRpbmcocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlTmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLnZhbHVlcykgdGhpcy52YWx1ZXMgPSB7fTtcbiAgICBpZiAoISF2YWx1ZU5hbWUpIHtcbiAgICAgIHRoaXMudmFsdWVzW3Byb3BlcnR5TmFtZV0gPSB2YWx1ZU5hbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB0aGlzLnZhbHVlc1twcm9wZXJ0eU5hbWVdO1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMudmFsdWVzKS5sZW5ndGggPT0gMCkge1xuICAgICAgICB0aGlzLnZhbHVlcyA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyBjbGVhckJpbmRpbmcocHJvcGVydHlOYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldEJpbmRpbmcocHJvcGVydHlOYW1lLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMudmFsdWVzO1xuICB9XG4gIHB1YmxpYyBnZXRWYWx1ZU5hbWVCeVByb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLnZhbHVlcykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXNbcHJvcGVydHlOYW1lXTtcbiAgfVxuICBwdWJsaWMgZ2V0UHJvcGVydGllc0J5VmFsdWVOYW1lKHZhbHVlTmFtZTogc3RyaW5nKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgaWYgKCF0aGlzLnZhbHVlcykgcmV0dXJuIFtdO1xuICAgIHZhciByZXM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy52YWx1ZXMpIHtcbiAgICAgIGlmICh0aGlzLnZhbHVlc1trZXldID09IHZhbHVlTmFtZSkge1xuICAgICAgICByZXMucHVzaChrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBnZXRKc29uKCk6IGFueSB7XG4gICAgaWYgKHRoaXMuaXNFbXB0eSgpKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgcmVzOiBhbnkgPSB7fTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy52YWx1ZXMpIHtcbiAgICAgIHJlc1trZXldID0gdGhpcy52YWx1ZXNba2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgc2V0SnNvbih2YWx1ZTogYW55KSB7XG4gICAgdGhpcy52YWx1ZXMgPSBudWxsO1xuICAgIGlmICghdmFsdWUpIHJldHVybjtcbiAgICB0aGlzLnZhbHVlcyA9IHt9O1xuICAgIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgICAgdGhpcy52YWx1ZXNba2V5XSA9IHZhbHVlW2tleV07XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZmlsbFByb3BlcnRpZXMoKSB7XG4gICAgaWYgKHRoaXMucHJvcGVydGllcyAhPT0gbnVsbCkgcmV0dXJuO1xuICAgIHRoaXMucHJvcGVydGllcyA9IFtdO1xuICAgIHZhciBvYmpQcm9wZXJ0aWVzID0gU2VyaWFsaXplci5nZXRQcm9wZXJ0aWVzQnlPYmoodGhpcy5vYmopO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqUHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKG9ialByb3BlcnRpZXNbaV0uaXNCaW5kYWJsZSkge1xuICAgICAgICB0aGlzLnByb3BlcnRpZXMucHVzaChvYmpQcm9wZXJ0aWVzW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbi8qKlxuICogVGhlIGJhc2UgY2xhc3MgZm9yIFN1cnZleUpTIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBCYXNlIHtcbiAgcHVibGljIHN0YXRpYyBnZXQgY29tbWVudFByZWZpeCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBzZXR0aW5ncy5jb21tZW50UHJlZml4O1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgc2V0IGNvbW1lbnRQcmVmaXgodmFsOiBzdHJpbmcpIHtcbiAgICBzZXR0aW5ncy5jb21tZW50UHJlZml4ID0gdmFsO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlSXRlbVZhbHVlOiAoaXRlbTogYW55LCB0eXBlPzogc3RyaW5nKSA9PiBhbnk7XG4gIHB1YmxpYyBzdGF0aWMgaXRlbVZhbHVlTG9jU3RyQ2hhbmdlZDogKGFycjogQXJyYXk8YW55PikgPT4gdm9pZDtcbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBhIHZhbHVlIHVuZGVmaW5lZCwgbnVsbCwgZW1wdHkgc3RyaW5nIG9yIGVtcHR5IGFycmF5LlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWVcbiAgICogQHBhcmFtIHRyaW1TdHJpbmcgYSBib29sZWFuIHBhcmFtZXRlciwgZGVmYXVsdCB2YWx1ZSB0cnVlLiBJZiB0cnVlIHRoZW4gaXQgdHJpbXMgdGhlIHN0cmluZyBhbmQgZnVuY3Rpb25zIHJldHVybnMgdHJ1ZSBmb3IgYSBzdHJpbmcgdGhhdCBjb250YWlucyB3aGl0ZSBzcGFjZXMgb25seS5cbiAgICovXG4gIHB1YmxpYyBpc1ZhbHVlRW1wdHkodmFsdWU6IGFueSwgdHJpbVN0cmluZzogYm9vbGVhbiA9IHRydWUpOiBib29sZWFuIHtcbiAgICBpZiAodHJpbVN0cmluZykge1xuICAgICAgdmFsdWUgPSB0aGlzLnRyaW1WYWx1ZSh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBIZWxwZXJzLmlzVmFsdWVFbXB0eSh2YWx1ZSk7XG4gIH1cbiAgcHJvdGVjdGVkIHRyaW1WYWx1ZSh2YWx1ZTogYW55KTogYW55IHtcbiAgICBpZiAoISF2YWx1ZSAmJiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nKSlcbiAgICAgIHJldHVybiB2YWx1ZS50cmltKCk7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBJc1Byb3BlcnR5RW1wdHkodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YWx1ZSAhPT0gXCJcIiAmJiB0aGlzLmlzVmFsdWVFbXB0eSh2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIHByb3BlcnR5SGFzaDogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gIHByaXZhdGUgbG9jYWxpemFibGVTdHJpbmdzOiB7IFtpbmRleDogc3RyaW5nXTogTG9jYWxpemFibGVTdHJpbmcgfTtcbiAgcHJpdmF0ZSBhcnJheXNJbmZvOiB7IFtpbmRleDogc3RyaW5nXTogYW55IH07XG4gIHByaXZhdGUgZXZlbnRMaXN0OiBBcnJheTxFdmVudEJhc2U8YW55Pj4gPSBbXTtcbiAgcHJpdmF0ZSBiaW5kaW5nc1ZhbHVlOiBCaW5kaW5ncztcbiAgcHJpdmF0ZSBpc0Rpc3Bvc2VkVmFsdWU6IGJvb2xlYW47XG4gIHByaXZhdGUgb25Qcm9wQ2hhbmdlRnVuY3Rpb25zOiBBcnJheTx7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGZ1bmM6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZDtcbiAgICBrZXk6IHN0cmluZztcbiAgfT47XG4gIHByb3RlY3RlZCBpc0xvYWRpbmdGcm9tSnNvblZhbHVlOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBsb2FkaW5nT3duZXI6IEJhc2UgPSBudWxsO1xuICAvKipcbiAgICogRXZlbnQgdGhhdCByYWlzZSBvbiBwcm9wZXJ0eSBjaGFuZ2Ugb2YgdGhlIHNlbmRlciBvYmplY3RcbiAgICogc2VuZGVyIC0gdGhlIG9iamVjdCB0aGF0IG93bnMgdGhlIHByb3BlcnR5XG4gICAqIG9wdGlvbnMubmFtZSAtIHRoZSBwcm9wZXJ0eSBuYW1lIHRoYXQgaGFzIGJlZW4gY2hhbmdlZFxuICAgKiBvcHRpb25zLm9sZFZhbHVlIC0gb2xkIHZhbHVlLiBQbGVhc2Ugbm90ZSwgaXQgZXF1YWxzIHRvIG9wdGlvbnMubmV3VmFsdWUgaWYgcHJvcGVydHkgaXMgYW4gYXJyYXlcbiAgICogb3B0aW9ucy5uZXdWYWx1ZSAtIG5ldyB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyBvblByb3BlcnR5Q2hhbmdlZDogRXZlbnRCYXNlPEJhc2U+ID0gdGhpcy5hZGRFdmVudDxCYXNlPigpO1xuICAvKipcbiAgICogRXZlbnQgdGhhdCByYWlzZWQgb24gY2hhbmdpbmcgcHJvcGVydHkgb2YgdGhlIEl0ZW1WYWx1ZSBvYmplY3QuXG4gICAqIHNlbmRlciAtIHRoZSBvYmplY3QgdGhhdCBvd25zIHRoZSBwcm9wZXJ0eVxuICAgKiBvcHRpb25zLnByb3BlcnR5TmFtZSAtIHRoZSBwcm9wZXJ0eSBuYW1lIHRvIHdoaWNoIEl0ZW1WYWx1ZSBhcnJheSBpcyBiZWxvbmcuIEl0IGNhbiBiZSBcImNob2ljZXNcIiBmb3IgZHJvcGRvd24gcXVlc3Rpb25cbiAgICogb3B0aW9ucy5vYmogLSB0aGUgaW5zdGFuY2Ugb2YgSXRlbVZhbHVlIG9iamVjdCB3aGljaCBwcm9wZXJ0eSBoYXMgYmVlbiBjaGFuZ2VkXG4gICAqIG9wdGlvbnMubmFtZSAtIHRoZSBwcm9wZXJ0eSBvZiBJdGVtT2JqZWN0IHRoYXQgaGFzIGJlZW4gY2hhbmdlZFxuICAgKiBvcHRpb25zLm9sZFZhbHVlIC0gb2xkIHZhbHVlXG4gICAqIG9wdGlvbnMubmV3VmFsdWUgLSBuZXcgdmFsdWVcbiAgICovXG4gIHB1YmxpYyBvbkl0ZW1WYWx1ZVByb3BlcnR5Q2hhbmdlZDogRXZlbnQ8XG4gICAgKHNlbmRlcjogQmFzZSwgb3B0aW9uczogYW55KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSB0aGlzLmFkZEV2ZW50PEJhc2U+KCk7XG5cbiAgZ2V0UHJvcGVydHlWYWx1ZUNvcmVIYW5kbGVyOiAocHJvcGVydGllc0hhc2g6IGFueSwgbmFtZTogc3RyaW5nKSA9PiBhbnk7XG5cbiAgc2V0UHJvcGVydHlWYWx1ZUNvcmVIYW5kbGVyOiAoXG4gICAgcHJvcGVydGllc0hhc2g6IGFueSxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgdmFsOiBhbnlcbiAgKSA9PiB2b2lkO1xuICBjcmVhdGVBcnJheUNvcmVIYW5kbGVyOiAocHJvcGVydGllc0hhc2g6IGFueSwgbmFtZTogc3RyaW5nKSA9PiBBcnJheTxhbnk+O1xuICBzdXJ2ZXlDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XG5cbiAgcHJpdmF0ZSBpc0NyZWF0aW5nID0gdHJ1ZTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5iaW5kaW5nc1ZhbHVlID0gbmV3IEJpbmRpbmdzKHRoaXMpO1xuICAgIEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLmNyZWF0ZVByb3BlcnRpZXModGhpcyk7XG4gICAgdGhpcy5vbkJhc2VDcmVhdGluZygpO1xuICAgIHRoaXMuaXNDcmVhdGluZyA9IGZhbHNlO1xuICB9XG4gIHB1YmxpYyBkaXNwb3NlKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ldmVudExpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuZXZlbnRMaXN0W2ldLmNsZWFyKCk7XG4gICAgfVxuICAgIHRoaXMuaXNEaXNwb3NlZFZhbHVlID0gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzRGlzcG9zZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNEaXNwb3NlZFZhbHVlID09PSB0cnVlO1xuICB9XG4gIHByb3RlY3RlZCBhZGRFdmVudDxUPigpOiBFdmVudEJhc2U8VD4ge1xuICAgIHZhciByZXMgPSBuZXcgRXZlbnRCYXNlPFQ+KCk7XG4gICAgdGhpcy5ldmVudExpc3QucHVzaChyZXMpO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJvdGVjdGVkIG9uQmFzZUNyZWF0aW5nKCkge31cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHR5cGUgb2YgdGhlIG9iamVjdCBhcyBhIHN0cmluZyBhcyBpdCByZXByZXNlbnRzIGluIHRoZSBqc29uLiBJdCBzaG91bGQgYmUgaW4gbG93Y2FzZS5cbiAgICovXG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiYmFzZVwiO1xuICB9XG4gIHB1YmxpYyBnZXRTdXJ2ZXkoaXNMaXZlOiBib29sZWFuID0gZmFsc2UpOiBJU3VydmV5IHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBvYmplY3QgaXMgaW5sdWRlZCBpbnRvIHN1cnZleSwgb3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGluU3VydmV5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuZ2V0U3VydmV5KHRydWUpO1xuICB9XG4gIHB1YmxpYyBnZXQgYmluZGluZ3MoKTogQmluZGluZ3Mge1xuICAgIHJldHVybiB0aGlzLmJpbmRpbmdzVmFsdWU7XG4gIH1cbiAgY2hlY2tCaW5kaW5ncyh2YWx1ZU5hbWU6IHN0cmluZywgdmFsdWU6IGFueSkge31cbiAgcHJvdGVjdGVkIHVwZGF0ZUJpbmRpbmdzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgdmFyIHZhbHVlTmFtZSA9IHRoaXMuYmluZGluZ3MuZ2V0VmFsdWVOYW1lQnlQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lKTtcbiAgICBpZiAoISF2YWx1ZU5hbWUpIHtcbiAgICAgIHRoaXMudXBkYXRlQmluZGluZ1ZhbHVlKHZhbHVlTmFtZSwgdmFsdWUpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgdXBkYXRlQmluZGluZ1ZhbHVlKHZhbHVlTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSB7fVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZWxlbWVudCB0ZW1wbGF0ZSBuYW1lIHdpdGhvdXQgcHJlZml4LiBUeXBpY2FsbHkgaXQgZXF1YWxzIHRvIGdldFR5cGUoKS5cbiAgICogQHNlZSBnZXRUeXBlXG4gICAqL1xuICBwdWJsaWMgZ2V0VGVtcGxhdGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUeXBlKCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGxvYWRpbmcgZnJvbSBKc29uIGF0IHRoZSBjdXJyZW50IG1vbWVudC5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXNMb2FkaW5nRnJvbUpzb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXNMb2FkaW5nRnJvbUpzb24oKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0SXNMb2FkaW5nRnJvbUpzb24oKTogYm9vbGVhbiB7XG4gICAgaWYgKCEhdGhpcy5sb2FkaW5nT3duZXIgJiYgdGhpcy5sb2FkaW5nT3duZXIuaXNMb2FkaW5nRnJvbUpzb24pIHJldHVybiB0cnVlO1xuICAgIHJldHVybiB0aGlzLmlzTG9hZGluZ0Zyb21Kc29uVmFsdWU7XG4gIH1cblxuICBzdGFydExvYWRpbmdGcm9tSnNvbigpIHtcbiAgICB0aGlzLmlzTG9hZGluZ0Zyb21Kc29uVmFsdWUgPSB0cnVlO1xuICB9XG4gIGVuZExvYWRpbmdGcm9tSnNvbigpIHtcbiAgICB0aGlzLmlzTG9hZGluZ0Zyb21Kc29uVmFsdWUgPSBmYWxzZTtcbiAgfVxuICAvKipcbiAgICogRGVzZXJpYWxpemVkIHRoZSBjdXJyZW50IG9iamVjdCBpbnRvIEpTT05cbiAgICogQHNlZSBmcm9tSlNPTlxuICAgKi9cbiAgcHVibGljIHRvSlNPTigpOiBhbnkge1xuICAgIHJldHVybiBuZXcgSnNvbk9iamVjdCgpLnRvSnNvbk9iamVjdCh0aGlzKTtcbiAgfVxuICAvKipcbiAgICogTG9hZCBvYmplY3QgcHJvcGVydGllcyBhbmQgZWxlbWVudHMuIEl0IGRvZXNuJ3QgcmVzZXQgcHJvcGVydGllcyB0aGF0IHdhcyBjaGFuZ2VkIGJlZm9yZSBhbmQgdGhleSBhcmUgbm90IGRlZmluZWQgaW4gdGhlIGpzb24gcGFyYW1ldGVyLlxuICAgKiBAcGFyYW0ganNvbiB0aGUgb2JqZWN0IEpTT04gZGVmaW5pdGlvblxuICAgKiBAc2VlIHRvSlNPTlxuICAgKi9cbiAgcHVibGljIGZyb21KU09OKGpzb246IGFueSkge1xuICAgIHJldHVybiBuZXcgSnNvbk9iamVjdCgpLnRvT2JqZWN0KGpzb24sIHRoaXMpO1xuICB9XG4gIC8qKlxuICAgKiBNYWtlIGEgY2xvbmUgb2YgdGhlIGV4aXN0aW5nIG9iamVjdC4gQ3JlYXRlIGEgbmV3IG9iamVjdCBvZiB0aGUgc2FtZSB0eXBlIGFuZCBsb2FkIGFsbCBwcm9wZXJ0aWVzIGludG8gaXQuXG4gICAqL1xuICBwdWJsaWMgY2xvbmUoKTogQmFzZSB7XG4gICAgdmFyIGNsb25lZE9iaiA9IDxCYXNlPlNlcmlhbGl6ZXIuY3JlYXRlQ2xhc3ModGhpcy5nZXRUeXBlKCkpO1xuICAgIGNsb25lZE9iai5mcm9tSlNPTih0aGlzLnRvSlNPTigpKTtcbiAgICByZXR1cm4gY2xvbmVkT2JqO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzZXJpYWxpemFibGUgcHJvcGVydHkgdGhhdCBiZWxvbmdzIHRvIHRoaXMgaW5zdGFuY2UgYnkgcHJvcGVydHkgbmFtZS4gSXQgcmV0dXJucyBudWxsIGlmIHRoZSBwcm9wZXJ0eSBpcyBub3QgZXhpc3RzLlxuICAgKiBAcGFyYW0gcHJvcE5hbWUgcHJvcGVydHkgbmFtZVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHVibGljIGdldFByb3BlcnR5QnlOYW1lKHByb3BOYW1lOiBzdHJpbmcpOiBKc29uT2JqZWN0UHJvcGVydHkge1xuICAgIHJldHVybiBTZXJpYWxpemVyLmZpbmRQcm9wZXJ0eSh0aGlzLmdldFR5cGUoKSwgcHJvcE5hbWUpO1xuICB9XG4gIHB1YmxpYyBpc1Byb3BlcnR5VmlzaWJsZShwcm9wTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcHJvcCA9IHRoaXMuZ2V0UHJvcGVydHlCeU5hbWUocHJvcE5hbWUpO1xuICAgIHJldHVybiAhIXByb3AgPyBwcm9wLmlzVmlzaWJsZShcIlwiLCB0aGlzKSA6IGZhbHNlO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlUHJvZ3Jlc3NJbmZvKCk6IElQcm9ncmVzc0luZm8ge1xuICAgIHJldHVybiB7XG4gICAgICBxdWVzdGlvbkNvdW50OiAwLFxuICAgICAgYW5zd2VyZWRRdWVzdGlvbkNvdW50OiAwLFxuICAgICAgcmVxdWlyZWRRdWVzdGlvbkNvdW50OiAwLFxuICAgICAgcmVxdWlyZWRBbnN3ZXJlZFF1ZXN0aW9uQ291bnQ6IDAsXG4gICAgfTtcbiAgfVxuICBwdWJsaWMgZ2V0UHJvZ3Jlc3NJbmZvKCk6IElQcm9ncmVzc0luZm8ge1xuICAgIHJldHVybiBCYXNlLmNyZWF0ZVByb2dyZXNzSW5mbygpO1xuICB9XG4gIHB1YmxpYyBsb2NhbGVDaGFuZ2VkKCkge31cbiAgcHVibGljIGxvY1N0cnNDaGFuZ2VkKCkge1xuICAgIGlmICghIXRoaXMuYXJyYXlzSW5mbykge1xuICAgICAgZm9yIChsZXQga2V5IGluIHRoaXMuYXJyYXlzSW5mbykge1xuICAgICAgICBsZXQgaXRlbSA9IHRoaXMuYXJyYXlzSW5mb1trZXldO1xuICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLmlzSXRlbVZhbHVlcykge1xuICAgICAgICAgIHZhciBhcnIgPSB0aGlzLmdldFByb3BlcnR5VmFsdWUoa2V5KTtcbiAgICAgICAgICBpZiAoYXJyICYmICEhQmFzZS5pdGVtVmFsdWVMb2NTdHJDaGFuZ2VkKVxuICAgICAgICAgICAgQmFzZS5pdGVtVmFsdWVMb2NTdHJDaGFuZ2VkKGFycik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCEhdGhpcy5sb2NhbGl6YWJsZVN0cmluZ3MpIHtcbiAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzLmxvY2FsaXphYmxlU3RyaW5ncykge1xuICAgICAgICBsZXQgaXRlbSA9IHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoa2V5KTtcbiAgICAgICAgaWYgKGl0ZW0pIGl0ZW0uc3RyQ2hhbmdlZCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUgYnkgbmFtZVxuICAgKiBAcGFyYW0gbmFtZSBwcm9wZXJ0eSBuYW1lXG4gICAqL1xuICBwdWJsaWMgZ2V0UHJvcGVydHlWYWx1ZShuYW1lOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogYW55ID0gbnVsbCk6IGFueSB7XG4gICAgdmFyIHJlcyA9IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZUNvcmUodGhpcy5wcm9wZXJ0eUhhc2gsIG5hbWUpO1xuICAgIGlmICh0aGlzLklzUHJvcGVydHlFbXB0eShyZXMpKSB7XG4gICAgICBpZiAoZGVmYXVsdFZhbHVlICE9IG51bGwpIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgICB2YXIgcHJvcCA9IFNlcmlhbGl6ZXIuZmluZFByb3BlcnR5KHRoaXMuZ2V0VHlwZSgpLCBuYW1lKTtcbiAgICAgIGlmICghIXByb3AgJiYgKCFwcm9wLmlzQ3VzdG9tIHx8ICF0aGlzLmlzQ3JlYXRpbmcpKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhdGhpcy5Jc1Byb3BlcnR5RW1wdHkocHJvcC5kZWZhdWx0VmFsdWUpICYmXG4gICAgICAgICAgIUFycmF5LmlzQXJyYXkocHJvcC5kZWZhdWx0VmFsdWUpXG4gICAgICAgIClcbiAgICAgICAgICByZXR1cm4gcHJvcC5kZWZhdWx0VmFsdWU7XG4gICAgICAgIGlmIChwcm9wLnR5cGUgPT0gXCJib29sZWFuXCIgfHwgcHJvcC50eXBlID09IFwic3dpdGNoXCIpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKHByb3AuaXNDdXN0b20gJiYgISFwcm9wLm9uR2V0VmFsdWUpIHJldHVybiBwcm9wLm9uR2V0VmFsdWUodGhpcyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFByb3BlcnR5VmFsdWVDb3JlKHByb3BlcnRpZXNIYXNoOiBhbnksIG5hbWU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmdldFByb3BlcnR5VmFsdWVDb3JlSGFuZGxlcilcbiAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWVDb3JlSGFuZGxlcihwcm9wZXJ0aWVzSGFzaCwgbmFtZSk7XG4gICAgZWxzZSByZXR1cm4gcHJvcGVydGllc0hhc2hbbmFtZV07XG4gIH1cbiAgcHVibGljIGdlVmFsdWVGcm9tSGFzaCgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnR5SGFzaFtcInZhbHVlXCJdO1xuICB9XG4gIHByb3RlY3RlZCBzZXRQcm9wZXJ0eVZhbHVlQ29yZShwcm9wZXJ0aWVzSGFzaDogYW55LCBuYW1lOiBzdHJpbmcsIHZhbDogYW55KSB7XG4gICAgaWYgKHRoaXMuc2V0UHJvcGVydHlWYWx1ZUNvcmVIYW5kbGVyICYmICF0aGlzLmlzRGlzcG9zZWRWYWx1ZSlcbiAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZUNvcmVIYW5kbGVyKHByb3BlcnRpZXNIYXNoLCBuYW1lLCB2YWwpO1xuICAgIGVsc2UgcHJvcGVydGllc0hhc2hbbmFtZV0gPSB2YWw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpc0VkaXRpbmdTdXJ2ZXlFbGVtZW50KCk6IGJvb2xlYW4ge1xuICAgIHZhciBzdXJ2ZXkgPSB0aGlzLmdldFN1cnZleSgpO1xuICAgIHJldHVybiAhIXN1cnZleSAmJiBzdXJ2ZXkuaXNFZGl0aW5nU3VydmV5RWxlbWVudDtcbiAgfVxuICBwdWJsaWMgaXRlcmF0ZVByb3BlcnRpZXNIYXNoKGZ1bmM6IChoYXNoOiBhbnksIGtleTogYW55KSA9PiB2b2lkKSB7XG4gICAgdmFyIGtleXM6IGFueVtdID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMucHJvcGVydHlIYXNoKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGtleSA9PT0gXCJ2YWx1ZVwiICYmXG4gICAgICAgIHRoaXMuaXNFZGl0aW5nU3VydmV5RWxlbWVudCAmJlxuICAgICAgICBBcnJheS5pc0FycmF5KCg8YW55PnRoaXMpLnZhbHVlKVxuICAgICAgKVxuICAgICAgICBjb250aW51ZTtcblxuICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiBmdW5jKHRoaXMucHJvcGVydHlIYXNoLCBrZXkpKTtcbiAgfVxuICAvKipcbiAgICogc2V0IHByb3BlcnR5IHZhbHVlXG4gICAqIEBwYXJhbSBuYW1lIHByb3BlcnR5IG5hbWVcbiAgICogQHBhcmFtIHZhbCBuZXcgcHJvcGVydHkgdmFsdWVcbiAgICovXG4gIHB1YmxpYyBzZXRQcm9wZXJ0eVZhbHVlKG5hbWU6IHN0cmluZywgdmFsOiBhbnkpIHtcbiAgICB2YXIgb2xkVmFsdWUgPSB0aGlzLmdldFByb3BlcnR5VmFsdWUobmFtZSk7XG4gICAgaWYgKG9sZFZhbHVlICYmIEFycmF5LmlzQXJyYXkob2xkVmFsdWUpKSB7XG4gICAgICBpZiAodGhpcy5pc1R3b1ZhbHVlRXF1YWxzKG9sZFZhbHVlLCB2YWwpKSByZXR1cm47XG4gICAgICB2YXIgYXJyYXlJbmZvID0gdGhpcy5hcnJheXNJbmZvW25hbWVdO1xuICAgICAgdGhpcy5zZXRBcnJheShcbiAgICAgICAgbmFtZSxcbiAgICAgICAgb2xkVmFsdWUsXG4gICAgICAgIHZhbCxcbiAgICAgICAgYXJyYXlJbmZvID8gYXJyYXlJbmZvLmlzSXRlbVZhbHVlcyA6IGZhbHNlLFxuICAgICAgICBhcnJheUluZm8gPyBhcnJheUluZm8ub25QdXNoIDogbnVsbFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlQ29yZSh0aGlzLnByb3BlcnR5SGFzaCwgbmFtZSwgdmFsKTtcbiAgICAgIGlmICghdGhpcy5pc0Rpc3Bvc2VkVmFsdWUgJiYgIXRoaXMuaXNUd29WYWx1ZUVxdWFscyhvbGRWYWx1ZSwgdmFsKSkge1xuICAgICAgICB0aGlzLnByb3BlcnR5VmFsdWVDaGFuZ2VkKG5hbWUsIG9sZFZhbHVlLCB2YWwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY2xlYXJQcm9wZXJ0eVZhbHVlKG5hbWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZUNvcmUodGhpcy5wcm9wZXJ0eUhhc2gsIG5hbWUsIG51bGwpO1xuICAgIGRlbGV0ZSB0aGlzLnByb3BlcnR5SGFzaFtuYW1lXTtcbiAgfVxuICBwdWJsaWMgb25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZENhbGxiYWNrKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBvbGRWYWx1ZTogYW55LFxuICAgIG5ld1ZhbHVlOiBhbnksXG4gICAgc2VuZGVyOiBCYXNlLFxuICAgIGFycmF5Q2hhbmdlczogQXJyYXlDaGFuZ2VzXG4gICkge31cbiAgcHVibGljIGl0ZW1WYWx1ZVByb3BlcnR5Q2hhbmdlZChcbiAgICBpdGVtOiBJdGVtVmFsdWUsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG9sZFZhbHVlOiBhbnksXG4gICAgbmV3VmFsdWU6IGFueVxuICApIHtcbiAgICB0aGlzLm9uSXRlbVZhbHVlUHJvcGVydHlDaGFuZ2VkLmZpcmUodGhpcywge1xuICAgICAgb2JqOiBpdGVtLFxuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIG9sZFZhbHVlOiBvbGRWYWx1ZSxcbiAgICAgIG5ld1ZhbHVlOiBuZXdWYWx1ZSxcbiAgICAgIHByb3BlcnR5TmFtZTogaXRlbS5vd25lclByb3BlcnR5TmFtZSxcbiAgICB9KTtcbiAgfVxuICBwcm90ZWN0ZWQgb25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgb2xkVmFsdWU6IGFueSxcbiAgICBuZXdWYWx1ZTogYW55XG4gICkge31cbiAgcHJvdGVjdGVkIHByb3BlcnR5VmFsdWVDaGFuZ2VkKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBvbGRWYWx1ZTogYW55LFxuICAgIG5ld1ZhbHVlOiBhbnksXG4gICAgYXJyYXlDaGFuZ2VzPzogQXJyYXlDaGFuZ2VzLFxuICAgIHRhcmdldD86IEJhc2VcbiAgKSB7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHJldHVybjtcbiAgICB0aGlzLnVwZGF0ZUJpbmRpbmdzKG5hbWUsIG5ld1ZhbHVlKTtcbiAgICB0aGlzLm9uUHJvcGVydHlWYWx1ZUNoYW5nZWQobmFtZSwgb2xkVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICB0aGlzLm9uUHJvcGVydHlDaGFuZ2VkLmZpcmUodGhpcywge1xuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIG9sZFZhbHVlOiBvbGRWYWx1ZSxcbiAgICAgIG5ld1ZhbHVlOiBuZXdWYWx1ZSxcbiAgICB9KTtcblxuICAgIHRoaXMuZG9Qcm9wZXJ0eVZhbHVlQ2hhbmdlZENhbGxiYWNrKFxuICAgICAgbmFtZSxcbiAgICAgIG9sZFZhbHVlLFxuICAgICAgbmV3VmFsdWUsXG4gICAgICBhcnJheUNoYW5nZXMsXG4gICAgICB0aGlzXG4gICAgKTtcblxuICAgIGlmICghdGhpcy5vblByb3BDaGFuZ2VGdW5jdGlvbnMpIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub25Qcm9wQ2hhbmdlRnVuY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5vblByb3BDaGFuZ2VGdW5jdGlvbnNbaV0ubmFtZSA9PSBuYW1lKVxuICAgICAgICB0aGlzLm9uUHJvcENoYW5nZUZ1bmN0aW9uc1tpXS5mdW5jKG5ld1ZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpc0ludGVybmFsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwcml2YXRlIGRvUHJvcGVydHlWYWx1ZUNoYW5nZWRDYWxsYmFjayhcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgb2xkVmFsdWU6IGFueSxcbiAgICBuZXdWYWx1ZTogYW55LFxuICAgIGFycmF5Q2hhbmdlcz86IEFycmF5Q2hhbmdlcyxcbiAgICB0YXJnZXQ/OiBCYXNlXG4gICkge1xuICAgIGlmICh0aGlzLmlzSW50ZXJuYWwpIHJldHVybjtcbiAgICBpZiAoIXRhcmdldCkgdGFyZ2V0ID0gdGhpcztcbiAgICB2YXIgbm90aWZpZXI6IGFueSA9IHRoaXMuZ2V0U3VydmV5KCk7XG4gICAgaWYgKCFub3RpZmllcikgbm90aWZpZXIgPSB0aGlzO1xuICAgIGlmICghIW5vdGlmaWVyLmRvUHJvcGVydHlWYWx1ZUNoYW5nZWRDYWxsYmFjaykge1xuICAgICAgbm90aWZpZXIub25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZENhbGxiYWNrKFxuICAgICAgICBuYW1lLFxuICAgICAgICBvbGRWYWx1ZSxcbiAgICAgICAgbmV3VmFsdWUsXG4gICAgICAgIHRhcmdldCxcbiAgICAgICAgYXJyYXlDaGFuZ2VzXG4gICAgICApO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmVnaXN0ZXIgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIGEgcHJvcGVydHkgdmFsdWUgY2hhbmdlZC5cbiAgICogQHBhcmFtIG5hbWUgdGhlIHByb3BlcnR5IG5hbWVcbiAgICogQHBhcmFtIGZ1bmMgdGhlIGZ1bmN0aW9uIHdpdGggbm8gcGFyYW1ldGVycyB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIHByb3BlcnR5IGNoYW5nZWQuXG4gICAqIEBwYXJhbSBrZXkgYW4gb3B0aW9uYWwgcGFyYW1ldGVyLiBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgcmVnaXN0ZXJlZCBmdW5jdGlvbiBmb3IgdGhpcyBwcm9wZXJ0eSB3aXRoIHRoZSBzYW1lIGtleSwgaXQgd2lsbCBiZSBvdmVyd3JpdHRlbi5cbiAgICovXG4gIHB1YmxpYyByZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgZnVuYzogYW55LFxuICAgIGtleTogc3RyaW5nID0gbnVsbFxuICApIHtcbiAgICBpZiAoIXRoaXMub25Qcm9wQ2hhbmdlRnVuY3Rpb25zKSB7XG4gICAgICB0aGlzLm9uUHJvcENoYW5nZUZ1bmN0aW9ucyA9IFtdO1xuICAgIH1cbiAgICBpZiAoa2V5KSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub25Qcm9wQ2hhbmdlRnVuY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBpdGVtID0gdGhpcy5vblByb3BDaGFuZ2VGdW5jdGlvbnNbaV07XG4gICAgICAgIGlmIChpdGVtLm5hbWUgPT0gbmFtZSAmJiBpdGVtLmtleSA9PSBrZXkpIHtcbiAgICAgICAgICBpdGVtLmZ1bmMgPSBmdW5jO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm9uUHJvcENoYW5nZUZ1bmN0aW9ucy5wdXNoKHsgbmFtZTogbmFtZSwgZnVuYzogZnVuYywga2V5OiBrZXkgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBvbiBhIHByb3BlcnR5IHZhbHVlIGNoYW5nZWQgZnJvbSB0aGUgbmFtZXMgbGlzdC5cbiAgICogQHBhcmFtIG5hbWVzIHRoZSBsaXN0IG9mIHByb3BlcnRpZXMgbmFtZXNcbiAgICogQHBhcmFtIGZ1bmMgdGhlIGZ1bmN0aW9uIHdpdGggbm8gcGFyYW1ldGVycyB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIHByb3BlcnR5IGNoYW5nZWQuXG4gICAqIEBwYXJhbSBrZXkgYW4gb3B0aW9uYWwgcGFyYW1ldGVyLiBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgcmVnaXN0ZXJlZCBmdW5jdGlvbiBmb3IgdGhpcyBwcm9wZXJ0eSB3aXRoIHRoZSBzYW1lIGtleSwgaXQgd2lsbCBiZSBvdmVyd3JpdHRlbi5cbiAgICovXG4gIHB1YmxpYyByZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0aWVzVmFsdWVDaGFuZ2VkKFxuICAgIG5hbWVzOiBBcnJheTxzdHJpbmc+LFxuICAgIGZ1bmM6IGFueSxcbiAgICBrZXk6IHN0cmluZyA9IG51bGxcbiAgKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChuYW1lc1tpXSwgZnVuYywga2V5KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFVucmVnaXN0ZXIgbm90aWZpY2F0aW9uIG9uIHByb3BlcnR5IHZhbHVlIGNoYW5nZWRcbiAgICogQHBhcmFtIG5hbWUgdGhlIHByb3BlcnR5IG5hbWVcbiAgICogQHBhcmFtIGtleSB0aGUga2V5IHdpdGggd2hpY2ggeW91IGhhdmUgcmVnaXN0ZXJlZCB0aGUgbm90aWZpY2F0aW9uIGZvciB0aGlzIHByb3BlcnR5LiBJdCBjYW4gYmUgbnVsbC5cbiAgICovXG4gIHB1YmxpYyB1blJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBrZXk6IHN0cmluZyA9IG51bGxcbiAgKSB7XG4gICAgaWYgKCF0aGlzLm9uUHJvcENoYW5nZUZ1bmN0aW9ucykgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5vblByb3BDaGFuZ2VGdW5jdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpdGVtID0gdGhpcy5vblByb3BDaGFuZ2VGdW5jdGlvbnNbaV07XG4gICAgICBpZiAoaXRlbS5uYW1lID09IG5hbWUgJiYgaXRlbS5rZXkgPT0ga2V5KSB7XG4gICAgICAgIHRoaXMub25Qcm9wQ2hhbmdlRnVuY3Rpb25zLnNwbGljZShpLCAxKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogVW5yZWdpc3RlciBub3RpZmljYXRpb24gb24gcHJvcGVydHkgdmFsdWUgY2hhbmdlZCBmb3IgYWxsIHByb3BlcnRpZXMgaW4gdGhlIG5hbWVzIGxpc3QuXG4gICAqIEBwYXJhbSBuYW1lcyB0aGUgbGlzdCBvZiBwcm9wZXJ0aWVzIG5hbWVzXG4gICAqIEBwYXJhbSBrZXkgdGhlIGtleSB3aXRoIHdoaWNoIHlvdSBoYXZlIHJlZ2lzdGVyZWQgdGhlIG5vdGlmaWNhdGlvbiBmb3IgdGhpcyBwcm9wZXJ0eS4gSXQgY2FuIGJlIG51bGwuXG4gICAqL1xuICBwdWJsaWMgdW5SZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0aWVzVmFsdWVDaGFuZ2VkKFxuICAgIG5hbWVzOiBBcnJheTxzdHJpbmc+LFxuICAgIGtleTogc3RyaW5nID0gbnVsbFxuICApIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnVuUmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQobmFtZXNbaV0sIGtleSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBjcmVhdGVDdXN0b21Mb2NhbGl6YWJsZU9iaihuYW1lOiBzdHJpbmcpIHtcbiAgICB2YXIgbG9jU3RyID0gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhuYW1lKTtcbiAgICBpZiAobG9jU3RyIHx8ICEoPGFueT50aGlzKS5nZXRMb2NhbGUpIHJldHVybjtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKG5hbWUsIDxJTG9jYWxpemFibGVPd25lcj4oPGFueT50aGlzKSk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBvd25lcjogSUxvY2FsaXphYmxlT3duZXIsXG4gICAgdXNlTWFya0Rvd246IGJvb2xlYW4gPSBmYWxzZVxuICApOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgdmFyIGxvY1N0ciA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyhvd25lciwgdXNlTWFya0Rvd24sIG5hbWUpO1xuICAgIGxvY1N0ci5vblN0ckNoYW5nZWQgPSAob2xkVmFsdWU6IHN0cmluZywgbmV3VmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgdGhpcy5wcm9wZXJ0eVZhbHVlQ2hhbmdlZChuYW1lLCBvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuICAgIH07XG4gICAgaWYgKCF0aGlzLmxvY2FsaXphYmxlU3RyaW5ncykge1xuICAgICAgdGhpcy5sb2NhbGl6YWJsZVN0cmluZ3MgPSB7fTtcbiAgICB9XG4gICAgdGhpcy5sb2NhbGl6YWJsZVN0cmluZ3NbbmFtZV0gPSBsb2NTdHI7XG4gICAgcmV0dXJuIGxvY1N0cjtcbiAgfVxuICBwdWJsaWMgZ2V0TG9jYWxpemFibGVTdHJpbmcobmFtZTogc3RyaW5nKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiAhIXRoaXMubG9jYWxpemFibGVTdHJpbmdzID8gdGhpcy5sb2NhbGl6YWJsZVN0cmluZ3NbbmFtZV0gOiBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGRlZmF1bHRTdHI6IHN0cmluZyA9IFwiXCJcbiAgKTogc3RyaW5nIHtcbiAgICB2YXIgbG9jU3RyID0gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhuYW1lKTtcbiAgICBpZiAoIWxvY1N0cikgcmV0dXJuIFwiXCI7XG4gICAgdmFyIHJlcyA9IGxvY1N0ci50ZXh0O1xuICAgIHJldHVybiByZXMgPyByZXMgOiBkZWZhdWx0U3RyO1xuICB9XG4gIHB1YmxpYyBzZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgdmFyIGxvY1N0ciA9IHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcobmFtZSk7XG4gICAgaWYgKCFsb2NTdHIpIHJldHVybjtcbiAgICBsb2NTdHIudGV4dCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyBhZGRVc2VkTG9jYWxlcyhsb2NhbGVzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgaWYgKCEhdGhpcy5sb2NhbGl6YWJsZVN0cmluZ3MpIHtcbiAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzLmxvY2FsaXphYmxlU3RyaW5ncykge1xuICAgICAgICBsZXQgaXRlbSA9IHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoa2V5KTtcbiAgICAgICAgaWYgKGl0ZW0pIHRoaXMuQWRkTG9jU3RyaW5nVG9Vc2VkTG9jYWxlcyhpdGVtLCBsb2NhbGVzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCEhdGhpcy5hcnJheXNJbmZvKSB7XG4gICAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5hcnJheXNJbmZvKSB7XG4gICAgICAgIGxldCBpdGVtcyA9IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShrZXkpO1xuICAgICAgICBpZiAoIWl0ZW1zIHx8ICFpdGVtcy5sZW5ndGgpIGNvbnRpbnVlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgbGV0IGl0ZW0gPSBpdGVtc1tpXTtcbiAgICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLmFkZFVzZWRMb2NhbGVzKSB7XG4gICAgICAgICAgICBpdGVtLmFkZFVzZWRMb2NhbGVzKGxvY2FsZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBwdWJsaWMgc2VhcmNoVGV4dCh0ZXh0OiBzdHJpbmcsIGZvdW5kZWQ6IEFycmF5PElGaW5kRWxlbWVudD4pIHtcbiAgICB2YXIgc3RyczogQXJyYXk8TG9jYWxpemFibGVTdHJpbmc+ID0gW107XG4gICAgdGhpcy5nZXRTZWFyY2hhYmxlTG9jYWxpemVkU3RyaW5ncyhzdHJzKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChzdHJzW2ldLnNldEZpbmRUZXh0KHRleHQpKSB7XG4gICAgICAgIGZvdW5kZWQucHVzaCh7IGVsZW1lbnQ6IHRoaXMsIHN0cjogc3Ryc1tpXSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBnZXRTZWFyY2hhYmxlTG9jYWxpemVkU3RyaW5ncyhhcnI6IEFycmF5PExvY2FsaXphYmxlU3RyaW5nPikge1xuICAgIGlmICghIXRoaXMubG9jYWxpemFibGVTdHJpbmdzKSB7XG4gICAgICBsZXQga2V5czogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgICAgdGhpcy5nZXRTZWFyY2hhYmxlTG9jS2V5cyhrZXlzKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgaXRlbSA9IHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoa2V5c1tpXSk7XG4gICAgICAgIGlmIChpdGVtKSBhcnIucHVzaChpdGVtKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCF0aGlzLmFycmF5c0luZm8pIHJldHVybjtcbiAgICBsZXQga2V5czogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgIHRoaXMuZ2V0U2VhcmNoYWJsZUl0ZW1WYWx1ZUtleXMoa2V5cyk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbXMgPSB0aGlzLmdldFByb3BlcnR5VmFsdWUoa2V5c1tpXSk7XG4gICAgICBpZiAoIWl0ZW1zKSBjb250aW51ZTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaXRlbXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgYXJyLnB1c2goaXRlbXNbal0ubG9jVGV4dCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBnZXRTZWFyY2hhYmxlTG9jS2V5cyhrZXlzOiBBcnJheTxzdHJpbmc+KSB7fVxuICBwcm90ZWN0ZWQgZ2V0U2VhcmNoYWJsZUl0ZW1WYWx1ZUtleXMoa2V5czogQXJyYXk8c3RyaW5nPikge31cbiAgcHJvdGVjdGVkIEFkZExvY1N0cmluZ1RvVXNlZExvY2FsZXMoXG4gICAgbG9jU3RyOiBMb2NhbGl6YWJsZVN0cmluZyxcbiAgICBsb2NhbGVzOiBBcnJheTxzdHJpbmc+XG4gICkge1xuICAgIHZhciBsb2NzID0gbG9jU3RyLmdldExvY2FsZXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxvY3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChsb2NhbGVzLmluZGV4T2YobG9jc1tpXSkgPCAwKSB7XG4gICAgICAgIGxvY2FsZXMucHVzaChsb2NzW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZUl0ZW1WYWx1ZXMobmFtZTogc3RyaW5nKTogQXJyYXk8YW55PiB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciByZXN1bHQgPSB0aGlzLmNyZWF0ZU5ld0FycmF5KG5hbWUsIGZ1bmN0aW9uKGl0ZW06IGFueSkge1xuICAgICAgaXRlbS5sb2NPd25lciA9IHNlbGY7XG4gICAgICBpdGVtLm93bmVyUHJvcGVydHlOYW1lID0gbmFtZTtcbiAgICB9KTtcbiAgICB0aGlzLmFycmF5c0luZm9bbmFtZV0uaXNJdGVtVmFsdWVzID0gdHJ1ZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHByaXZhdGUgbm90aWZ5QXJyYXlDaGFuZ2VkKGFyOiBhbnksIGFycmF5Q2hhbmdlczogQXJyYXlDaGFuZ2VzKSB7XG4gICAgISFhci5vbkFycmF5Q2hhbmdlZCAmJiBhci5vbkFycmF5Q2hhbmdlZChhcnJheUNoYW5nZXMpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVOZXdBcnJheUNvcmUobmFtZTogc3RyaW5nKTogQXJyYXk8YW55PiB7XG4gICAgdmFyIHJlcyA9IG51bGw7XG4gICAgaWYgKCEhdGhpcy5jcmVhdGVBcnJheUNvcmVIYW5kbGVyKSB7XG4gICAgICByZXMgPSB0aGlzLmNyZWF0ZUFycmF5Q29yZUhhbmRsZXIodGhpcy5wcm9wZXJ0eUhhc2gsIG5hbWUpO1xuICAgIH1cbiAgICBpZiAoIXJlcykge1xuICAgICAgcmVzID0gbmV3IEFycmF5PGFueT4oKTtcbiAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZUNvcmUodGhpcy5wcm9wZXJ0eUhhc2gsIG5hbWUsIHJlcyk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJvdGVjdGVkIGVuc3VyZUFycmF5KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBvblB1c2g6IGFueSA9IG51bGwsXG4gICAgb25SZW1vdmU6IGFueSA9IG51bGxcbiAgKSB7XG4gICAgaWYgKHRoaXMuYXJyYXlzSW5mbyAmJiB0aGlzLmFycmF5c0luZm9bbmFtZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jcmVhdGVOZXdBcnJheShuYW1lLCBvblB1c2gsIG9uUmVtb3ZlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVOZXdBcnJheShcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgb25QdXNoOiBhbnkgPSBudWxsLFxuICAgIG9uUmVtb3ZlOiBhbnkgPSBudWxsXG4gICk6IEFycmF5PGFueT4ge1xuICAgIHZhciBuZXdBcnJheSA9IHRoaXMuY3JlYXRlTmV3QXJyYXlDb3JlKG5hbWUpO1xuICAgIGlmICghdGhpcy5hcnJheXNJbmZvKSB7XG4gICAgICB0aGlzLmFycmF5c0luZm8gPSB7fTtcbiAgICB9XG4gICAgdGhpcy5hcnJheXNJbmZvW25hbWVdID0geyBvblB1c2g6IG9uUHVzaCwgaXNJdGVtVmFsdWVzOiBmYWxzZSB9O1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBuZXdBcnJheS5wdXNoID0gZnVuY3Rpb24odmFsdWUpOiBudW1iZXIge1xuICAgICAgdmFyIHJlc3VsdCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXdBcnJheSkucHVzaC5jYWxsKG5ld0FycmF5LCB2YWx1ZSk7XG4gICAgICBpZiAoIXNlbGYuaXNEaXNwb3NlZFZhbHVlKSB7XG4gICAgICAgIGlmIChvblB1c2gpIG9uUHVzaCh2YWx1ZSwgbmV3QXJyYXkubGVuZ3RoIC0gMSk7XG4gICAgICAgIGNvbnN0IGFycmF5Q2hhbmdlcyA9IG5ldyBBcnJheUNoYW5nZXMoXG4gICAgICAgICAgbmV3QXJyYXkubGVuZ3RoIC0gMSxcbiAgICAgICAgICAwLFxuICAgICAgICAgIFt2YWx1ZV0sXG4gICAgICAgICAgW11cbiAgICAgICAgKTtcbiAgICAgICAgc2VsZi5wcm9wZXJ0eVZhbHVlQ2hhbmdlZChuYW1lLCBuZXdBcnJheSwgbmV3QXJyYXksIGFycmF5Q2hhbmdlcyk7XG4gICAgICAgIHNlbGYubm90aWZ5QXJyYXlDaGFuZ2VkKG5ld0FycmF5LCBhcnJheUNoYW5nZXMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIG5ld0FycmF5LnVuc2hpZnQgPSBmdW5jdGlvbih2YWx1ZSk6IG51bWJlciB7XG4gICAgICB2YXIgcmVzdWx0ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ld0FycmF5KS51bnNoaWZ0LmNhbGwoXG4gICAgICAgIG5ld0FycmF5LFxuICAgICAgICB2YWx1ZVxuICAgICAgKTtcbiAgICAgIGlmICghc2VsZi5pc0Rpc3Bvc2VkVmFsdWUpIHtcbiAgICAgICAgaWYgKG9uUHVzaCkgb25QdXNoKHZhbHVlLCBuZXdBcnJheS5sZW5ndGggLSAxKTtcbiAgICAgICAgY29uc3QgYXJyYXlDaGFuZ2VzID0gbmV3IEFycmF5Q2hhbmdlcygwLCAwLCBbdmFsdWVdLCBbXSk7XG4gICAgICAgIHNlbGYucHJvcGVydHlWYWx1ZUNoYW5nZWQobmFtZSwgbmV3QXJyYXksIG5ld0FycmF5LCBhcnJheUNoYW5nZXMpO1xuICAgICAgICBzZWxmLm5vdGlmeUFycmF5Q2hhbmdlZChuZXdBcnJheSwgYXJyYXlDaGFuZ2VzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICBuZXdBcnJheS5wb3AgPSBmdW5jdGlvbigpOiBudW1iZXIge1xuICAgICAgdmFyIHJlc3VsdCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXdBcnJheSkucG9wLmNhbGwobmV3QXJyYXkpO1xuICAgICAgaWYgKCFzZWxmLmlzRGlzcG9zZWRWYWx1ZSkge1xuICAgICAgICBpZiAob25SZW1vdmUpIG9uUmVtb3ZlKHJlc3VsdCk7XG4gICAgICAgIGNvbnN0IGFycmF5Q2hhbmdlcyA9IG5ldyBBcnJheUNoYW5nZXMobmV3QXJyYXkubGVuZ3RoIC0gMSwgMSwgW10sIFtdKTtcbiAgICAgICAgc2VsZi5wcm9wZXJ0eVZhbHVlQ2hhbmdlZChuYW1lLCBuZXdBcnJheSwgbmV3QXJyYXksIGFycmF5Q2hhbmdlcyk7XG4gICAgICAgIHNlbGYubm90aWZ5QXJyYXlDaGFuZ2VkKG5ld0FycmF5LCBhcnJheUNoYW5nZXMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIG5ld0FycmF5LnNwbGljZSA9IGZ1bmN0aW9uKFxuICAgICAgc3RhcnQ/OiBudW1iZXIsXG4gICAgICBkZWxldGVDb3VudD86IG51bWJlcixcbiAgICAgIC4uLml0ZW1zOiBhbnlbXVxuICAgICk6IGFueVtdIHtcbiAgICAgIGlmICghc3RhcnQpIHN0YXJ0ID0gMDtcbiAgICAgIGlmICghZGVsZXRlQ291bnQpIGRlbGV0ZUNvdW50ID0gMDtcbiAgICAgIHZhciByZXN1bHQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3QXJyYXkpLnNwbGljZS5jYWxsKFxuICAgICAgICBuZXdBcnJheSxcbiAgICAgICAgc3RhcnQsXG4gICAgICAgIGRlbGV0ZUNvdW50LFxuICAgICAgICAuLi5pdGVtc1xuICAgICAgKTtcbiAgICAgIGlmICghaXRlbXMpIGl0ZW1zID0gW107XG4gICAgICBpZiAoIXNlbGYuaXNEaXNwb3NlZFZhbHVlKSB7XG4gICAgICAgIGlmIChvblJlbW92ZSAmJiByZXN1bHQpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgb25SZW1vdmUocmVzdWx0W2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9uUHVzaCkge1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIG9uUHVzaChpdGVtc1tpXSwgc3RhcnQgKyBpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXJyYXlDaGFuZ2VzID0gbmV3IEFycmF5Q2hhbmdlcyhcbiAgICAgICAgICBzdGFydCxcbiAgICAgICAgICBkZWxldGVDb3VudCxcbiAgICAgICAgICBpdGVtcyxcbiAgICAgICAgICByZXN1bHRcbiAgICAgICAgKTtcbiAgICAgICAgc2VsZi5wcm9wZXJ0eVZhbHVlQ2hhbmdlZChuYW1lLCBuZXdBcnJheSwgbmV3QXJyYXksIGFycmF5Q2hhbmdlcyk7XG4gICAgICAgIHNlbGYubm90aWZ5QXJyYXlDaGFuZ2VkKG5ld0FycmF5LCBhcnJheUNoYW5nZXMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ld0FycmF5O1xuICB9XG4gIHByb3RlY3RlZCBnZXRJdGVtVmFsdWVUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0QXJyYXkoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHNyYzogYW55W10sXG4gICAgZGVzdDogYW55W10sXG4gICAgaXNJdGVtVmFsdWVzOiBib29sZWFuLFxuICAgIG9uUHVzaDogYW55XG4gICkge1xuICAgIHZhciBkZWxldGVkSXRlbXMgPSBbXS5jb25jYXQoc3JjKTtcbiAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc3JjKS5zcGxpY2UuY2FsbChzcmMsIDAsIHNyYy5sZW5ndGgpO1xuICAgIGlmICghIWRlc3QpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgaXRlbSA9IGRlc3RbaV07XG4gICAgICAgIGlmIChpc0l0ZW1WYWx1ZXMpIHtcbiAgICAgICAgICBpZiAoISFCYXNlLmNyZWF0ZUl0ZW1WYWx1ZSkge1xuICAgICAgICAgICAgaXRlbSA9IEJhc2UuY3JlYXRlSXRlbVZhbHVlKGl0ZW0sIHRoaXMuZ2V0SXRlbVZhbHVlVHlwZSgpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKHNyYykucHVzaC5jYWxsKHNyYywgaXRlbSk7XG4gICAgICAgIGlmIChvblB1c2gpIG9uUHVzaChzcmNbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBhcnJheUNoYW5nZXMgPSBuZXcgQXJyYXlDaGFuZ2VzKFxuICAgICAgMCxcbiAgICAgIGRlbGV0ZWRJdGVtcy5sZW5ndGgsXG4gICAgICBzcmMsXG4gICAgICBkZWxldGVkSXRlbXNcbiAgICApO1xuICAgIHRoaXMucHJvcGVydHlWYWx1ZUNoYW5nZWQobmFtZSwgZGVsZXRlZEl0ZW1zLCBzcmMsIGFycmF5Q2hhbmdlcyk7XG4gICAgdGhpcy5ub3RpZnlBcnJheUNoYW5nZWQoc3JjLCBhcnJheUNoYW5nZXMpO1xuICB9XG4gIHByb3RlY3RlZCBpc1R3b1ZhbHVlRXF1YWxzKFxuICAgIHg6IGFueSxcbiAgICB5OiBhbnksXG4gICAgY2FzZUluU2Vuc2l0aXZlOiBib29sZWFuID0gZmFsc2UsXG4gICAgdHJpbVN0cmluZzogYm9vbGVhbiA9IGZhbHNlXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmIChjYXNlSW5TZW5zaXRpdmUpIHtcbiAgICAgIHggPSB0aGlzLmdldFZhbHVlSW5Mb3dDYXNlKHgpO1xuICAgICAgeSA9IHRoaXMuZ2V0VmFsdWVJbkxvd0Nhc2UoeSk7XG4gICAgfVxuICAgIGlmICh0cmltU3RyaW5nKSB7XG4gICAgICB4ID0gdGhpcy50cmltVmFsdWUoeCk7XG4gICAgICB5ID0gdGhpcy50cmltVmFsdWUoeSk7XG4gICAgfVxuICAgIHJldHVybiBIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMoeCwgeSk7XG4gIH1cbiAgcHJpdmF0ZSBzdGF0aWMgY29weU9iamVjdChkc3Q6IGFueSwgc3JjOiBhbnkpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gc3JjKSB7XG4gICAgICB2YXIgc291cmNlID0gc3JjW2tleV07XG4gICAgICBpZiAodHlwZW9mIHNvdXJjZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBzb3VyY2UgPSB7fTtcbiAgICAgICAgdGhpcy5jb3B5T2JqZWN0KHNvdXJjZSwgc3JjW2tleV0pO1xuICAgICAgfVxuICAgICAgZHN0W2tleV0gPSBzb3VyY2U7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBjb3B5Q3NzQ2xhc3NlcyhkZXN0OiBhbnksIHNvdXJjZTogYW55KSB7XG4gICAgaWYgKCFzb3VyY2UpIHJldHVybjtcbiAgICBpZiAodHlwZW9mIHNvdXJjZSA9PT0gXCJzdHJpbmdcIiB8fCBzb3VyY2UgaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICAgIGRlc3RbXCJyb290XCJdID0gc291cmNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBCYXNlLmNvcHlPYmplY3QoZGVzdCwgc291cmNlKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBnZXRWYWx1ZUluTG93Q2FzZSh2YWw6IGFueSk6IGFueSB7XG4gICAgaWYgKCEhdmFsICYmIHR5cGVvZiB2YWwgPT0gXCJzdHJpbmdcIikgcmV0dXJuIHZhbC50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiB2YWw7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFycmF5Q2hhbmdlcyB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBpbmRleDogbnVtYmVyLFxuICAgIHB1YmxpYyBkZWxldGVDb3VudDogbnVtYmVyLFxuICAgIHB1YmxpYyBpdGVtc1RvQWRkOiBhbnlbXSxcbiAgICBwdWJsaWMgZGVsZXRlZEl0ZW1zOiBhbnlbXVxuICApIHt9XG59XG5cbmV4cG9ydCBjbGFzcyBFdmVudDxUIGV4dGVuZHMgRnVuY3Rpb24sIE9wdGlvbnM+IHtcbiAgcHVibGljIG9uQ2FsbGJhY2tzQ2hhbmdlZDogKCkgPT4gdm9pZDtcbiAgcHJvdGVjdGVkIGNhbGxiYWNrczogQXJyYXk8VD47XG4gIHB1YmxpYyBnZXQgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuY2FsbGJhY2tzIHx8IHRoaXMuY2FsbGJhY2tzLmxlbmd0aCA9PSAwO1xuICB9XG4gIHB1YmxpYyBmaXJlKHNlbmRlcjogYW55LCBvcHRpb25zOiBPcHRpb25zKSB7XG4gICAgaWYgKCF0aGlzLmNhbGxiYWNrcykgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuY2FsbGJhY2tzW2ldKHNlbmRlciwgb3B0aW9ucyk7XG4gICAgICBpZiAoIXRoaXMuY2FsbGJhY2tzKSByZXR1cm47XG4gICAgfVxuICB9XG4gIHB1YmxpYyBjbGVhcigpIHtcbiAgICB0aGlzLmNhbGxiYWNrcyA9IHVuZGVmaW5lZDtcbiAgfVxuICBwdWJsaWMgYWRkKGZ1bmM6IFQpIHtcbiAgICBpZiAodGhpcy5oYXNGdW5jKGZ1bmMpKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmNhbGxiYWNrcykge1xuICAgICAgdGhpcy5jYWxsYmFja3MgPSBuZXcgQXJyYXk8VD4oKTtcbiAgICB9XG4gICAgdGhpcy5jYWxsYmFja3MucHVzaChmdW5jKTtcbiAgICB0aGlzLmZpcmVDYWxsYmFja0NoYW5nZWQoKTtcbiAgfVxuICBwdWJsaWMgcmVtb3ZlKGZ1bmM6IFQpIHtcbiAgICBpZiAodGhpcy5oYXNGdW5jKGZ1bmMpKSB7XG4gICAgICB2YXIgaW5kZXggPSB0aGlzLmNhbGxiYWNrcy5pbmRleE9mKGZ1bmMsIDApO1xuICAgICAgdGhpcy5jYWxsYmFja3Muc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIHRoaXMuZmlyZUNhbGxiYWNrQ2hhbmdlZCgpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgaGFzRnVuYyhmdW5jOiBUKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuY2FsbGJhY2tzID09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5jYWxsYmFja3MuaW5kZXhPZihmdW5jLCAwKSA+IC0xO1xuICB9XG4gIHByaXZhdGUgZmlyZUNhbGxiYWNrQ2hhbmdlZCgpIHtcbiAgICBpZiAoISF0aGlzLm9uQ2FsbGJhY2tzQ2hhbmdlZCkge1xuICAgICAgdGhpcy5vbkNhbGxiYWNrc0NoYW5nZWQoKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEV2ZW50QmFzZTxUPiBleHRlbmRzIEV2ZW50PFxuICAoc2VuZGVyOiBULCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgYW55XG4+IHt9XG4iLCJpbXBvcnQgeyBIYXNoVGFibGUsIEhlbHBlcnMgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZVwiO1xuaW1wb3J0IHsgSVN1cnZleSwgSVN1cnZleURhdGEgfSBmcm9tIFwiLi9iYXNlLWludGVyZmFjZXNcIjtcbmltcG9ydCB7IEV4cHJlc3Npb25SdW5uZXIgfSBmcm9tIFwiLi9jb25kaXRpb25zXCI7XG5pbXBvcnQgeyBTZXJpYWxpemVyIH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuXG4vKipcbiAqIFRoZSBjYWxjdWxhdGVkIHZhbHVlIGlzIGEgd2F5IHRvIGRlZmluZSB0aGUgdmFyaWFibGUgaW4gU3VydmV5IENyZWF0b3IuXG4gKiBJdCBoYXMgdHdvIG1haW4gcHJvcGVydGllczogbmFtZSBhbmQgZXhwcmVzc2lvbi4gQmFzZWQgb24gZXhwcmVzc2lvbiB0aGUgdmFsdWUgcmVhZC1vbmx5IHByb3BlcnR5IGlzIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlZC5cbiAqIFRoZSBuYW1lIHByb3BlcnR5IHNob3VsZCBiZSB1bmlxdWUgdGhvdWdoIGFsbCBjYWxjdWxhdGVkIHZhbHVlcy5cbiAqIEl0IHVzZXMgc3VydmV5LmdldFZhcmlhYmxlL3NlcnV2ZXkuc2V0VmFyaWFibGUgZnVuY3Rpb25zIHRvIGdldC9zZXQgaXRzIHZhbHVlLiBUaGUgY2xhc3MgZG8gbm90IHN0b3JlIGl0cyB2YWx1ZSBpbnRlcm5hbGx5LlxuICogWW91IG1heSBzZXQgaW5jbHVkZUludG9SZXN1bHQgcHJvcGVydHkgdG8gdHJ1ZSB0byBzdG9yZSB0aGlzIGNhbGN1bGF0ZWQgdmFsdWUgaW50byBzdXJ2ZXkgcmVzdWx0LlxuICovXG5leHBvcnQgY2xhc3MgQ2FsY3VsYXRlZFZhbHVlIGV4dGVuZHMgQmFzZSB7XG4gIHByaXZhdGUgZGF0YTogSVN1cnZleURhdGE7XG4gIHByaXZhdGUgZXhwcmVzc2lvbklzUnVubmluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGV4cHJlc3Npb25SdW5uZXI6IEV4cHJlc3Npb25SdW5uZXI7XG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZyA9IG51bGwsIGV4cHJlc3Npb246IHN0cmluZyA9IG51bGwpIHtcbiAgICBzdXBlcigpO1xuICAgIGlmICghIW5hbWUpIHtcbiAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgfVxuICAgIGlmICghIWV4cHJlc3Npb24pIHtcbiAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247XG4gICAgfVxuICB9XG4gIHB1YmxpYyBzZXRPd25lcihkYXRhOiBJU3VydmV5RGF0YSkge1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgdGhpcy5yZXJ1bkV4cHJlc3Npb24oKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImNhbGN1bGF0ZWR2YWx1ZVwiO1xuICB9XG4gIHB1YmxpYyBnZXRTdXJ2ZXkobGl2ZTogYm9vbGVhbiA9IGZhbHNlKTogSVN1cnZleSB7XG4gICAgcmV0dXJuICEhdGhpcy5kYXRhICYmICEhKDxhbnk+dGhpcy5kYXRhKVtcImdldFN1cnZleVwiXVxuICAgICAgPyAoPGFueT50aGlzLmRhdGEpLmdldFN1cnZleSgpXG4gICAgICA6IG51bGw7XG4gIH1cbiAgcHVibGljIGdldCBvd25lcigpOiBJU3VydmV5RGF0YSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YTtcbiAgfVxuICAvKipcbiAgICogVGhlIGNhbGN1bGF0ZWQgdmFsdWUgbmFtZS4gSXQgc2hvdWxkIGJlIG5vbiBlbXB0eSBhbmQgdW5pcXVlLlxuICAgKi9cbiAgcHVibGljIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm5hbWVcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBuYW1lKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibmFtZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byB0cnVlIHRvIGluY2x1ZGUgdGhlIG5vbi1lbXB0eSBjYWxjdWxhdGVkIHZhbHVlIGludG8gc3VydmV5IHJlc3VsdCwgc3VydmV5LmRhdGEgcHJvcGVydHkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGluY2x1ZGVJbnRvUmVzdWx0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpbmNsdWRlSW50b1Jlc3VsdFwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBpbmNsdWRlSW50b1Jlc3VsdCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpbmNsdWRlSW50b1Jlc3VsdFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgRXhwcmVzc2lvbiB0aGF0IHVzZWQgdG8gY2FsY3VsYXRlIHRoZSB2YWx1ZS4gWW91IG1heSB1c2Ugc3RhbmRhcmQgb3BlcmF0b3JzIGxpa2UgKywgLSwgKiBhbmQgLywgc3F1YXJlcyAoKS4gSGVyZSBpcyB0aGUgZXhhbXBsZSBvZiBhY2Nlc3NpbmcgdGhlIHF1ZXN0aW9uIHZhbHVlIHtxdWVzdGlvbm5hbWV9LlxuICAgKiA8YnIvPkV4YW1wbGU6IFwiKHtxdWFudGl0eX0gKiB7cHJpY2V9KSAqICgxMDAgLSB7ZGlzY291bnR9KSAvIDEwMFwiXG4gICAqL1xuICBwdWJsaWMgZ2V0IGV4cHJlc3Npb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZXhwcmVzc2lvblwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGV4cHJlc3Npb24odmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJleHByZXNzaW9uXCIsIHZhbCk7XG4gICAgdGhpcy5yZXJ1bkV4cHJlc3Npb24oKTtcbiAgfVxuICBwdWJsaWMgbG9jQ2FsY3VsYXRpb24oKSB7XG4gICAgdGhpcy5leHByZXNzaW9uSXNSdW5uaW5nID0gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgdW5sb2NDYWxjdWxhdGlvbigpIHtcbiAgICB0aGlzLmV4cHJlc3Npb25Jc1J1bm5pbmcgPSBmYWxzZTtcbiAgfVxuICBwcml2YXRlIGlzQ2FsY3VsYXRlZCA9IGZhbHNlO1xuICBwdWJsaWMgcmVzZXRDYWxjdWxhdGlvbigpIHtcbiAgICB0aGlzLmlzQ2FsY3VsYXRlZCA9IGZhbHNlO1xuICB9XG4gIHB1YmxpYyBkb0NhbGN1bGF0aW9uKFxuICAgIGNhbGN1bGF0ZWRWYWx1ZXM6IEFycmF5PENhbGN1bGF0ZWRWYWx1ZT4sXG4gICAgdmFsdWVzOiBIYXNoVGFibGU8YW55PixcbiAgICBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PlxuICApIHtcbiAgICBpZiAodGhpcy5pc0NhbGN1bGF0ZWQpIHJldHVybjtcbiAgICB0aGlzLnJ1bkV4cHJlc3Npb25Db3JlKGNhbGN1bGF0ZWRWYWx1ZXMsIHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgdGhpcy5pc0NhbGN1bGF0ZWQgPSB0cnVlO1xuICB9XG4gIHB1YmxpYyBydW5FeHByZXNzaW9uKHZhbHVlczogSGFzaFRhYmxlPGFueT4sIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+KSB7XG4gICAgdGhpcy5ydW5FeHByZXNzaW9uQ29yZShudWxsLCB2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICB9XG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogYW55IHtcbiAgICBpZiAoIXRoaXMuZGF0YSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmdldFZhcmlhYmxlKHRoaXMubmFtZSk7XG4gIH1cbiAgcHJvdGVjdGVkIHNldFZhbHVlKHZhbDogYW55KSB7XG4gICAgaWYgKCF0aGlzLmRhdGEpIHJldHVybjtcbiAgICB0aGlzLmRhdGEuc2V0VmFyaWFibGUodGhpcy5uYW1lLCB2YWwpO1xuICB9XG4gIHByaXZhdGUgZ2V0IGNhblJ1bkV4cHJlc3Npb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICEhdGhpcy5kYXRhICYmXG4gICAgICAhdGhpcy5pc0xvYWRpbmdGcm9tSnNvbiAmJlxuICAgICAgISF0aGlzLmV4cHJlc3Npb24gJiZcbiAgICAgICF0aGlzLmV4cHJlc3Npb25Jc1J1bm5pbmcgJiZcbiAgICAgICEhdGhpcy5uYW1lXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHJlcnVuRXhwcmVzc2lvbigpIHtcbiAgICBpZiAoIXRoaXMuY2FuUnVuRXhwcmVzc2lvbikgcmV0dXJuO1xuICAgIHRoaXMucnVuRXhwcmVzc2lvbihcbiAgICAgIHRoaXMuZGF0YS5nZXRGaWx0ZXJlZFZhbHVlcygpLFxuICAgICAgdGhpcy5kYXRhLmdldEZpbHRlcmVkUHJvcGVydGllcygpXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHJ1bkV4cHJlc3Npb25Db3JlKFxuICAgIGNhbGN1bGF0ZWRWYWx1ZXM6IEFycmF5PENhbGN1bGF0ZWRWYWx1ZT4sXG4gICAgdmFsdWVzOiBIYXNoVGFibGU8YW55PixcbiAgICBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PlxuICApIHtcbiAgICBpZiAoIXRoaXMuY2FuUnVuRXhwcmVzc2lvbikgcmV0dXJuO1xuICAgIHRoaXMuZW5zdXJlRXhwcmVzc2lvbih2YWx1ZXMpO1xuICAgIHRoaXMubG9jQ2FsY3VsYXRpb24oKTtcbiAgICBpZiAoISFjYWxjdWxhdGVkVmFsdWVzKSB7XG4gICAgICB0aGlzLnJ1bkRlcGVuZGVudEV4cHJlc3Npb25zKGNhbGN1bGF0ZWRWYWx1ZXMsIHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgfVxuICAgIHRoaXMuZXhwcmVzc2lvblJ1bm5lci5ydW4odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgfVxuICBwcml2YXRlIHJ1bkRlcGVuZGVudEV4cHJlc3Npb25zKFxuICAgIGNhbGN1bGF0ZWRWYWx1ZXM6IEFycmF5PENhbGN1bGF0ZWRWYWx1ZT4sXG4gICAgdmFsdWVzOiBIYXNoVGFibGU8YW55PixcbiAgICBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PlxuICApIHtcbiAgICB2YXIgdmFyaWFibGVzID0gdGhpcy5leHByZXNzaW9uUnVubmVyLmdldFZhcmlhYmxlcygpO1xuICAgIGlmICghdmFyaWFibGVzKSByZXR1cm47XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWxjdWxhdGVkVmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2FsY0l0ZW0gPSBjYWxjdWxhdGVkVmFsdWVzW2ldO1xuICAgICAgaWYgKGNhbGNJdGVtID09PSB0aGlzIHx8IHZhcmlhYmxlcy5pbmRleE9mKGNhbGNJdGVtLm5hbWUpIDwgMCkgY29udGludWU7XG4gICAgICBjYWxjSXRlbS5kb0NhbGN1bGF0aW9uKGNhbGN1bGF0ZWRWYWx1ZXMsIHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgICB2YWx1ZXNbY2FsY0l0ZW0ubmFtZV0gPSBjYWxjSXRlbS52YWx1ZTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBlbnN1cmVFeHByZXNzaW9uKHZhbHVlczogSGFzaFRhYmxlPGFueT4pIHtcbiAgICBpZiAoISF0aGlzLmV4cHJlc3Npb25SdW5uZXIpIHJldHVybjtcbiAgICB0aGlzLmV4cHJlc3Npb25SdW5uZXIgPSBuZXcgRXhwcmVzc2lvblJ1bm5lcih0aGlzLmV4cHJlc3Npb24pO1xuICAgIHRoaXMuZXhwcmVzc2lvblJ1bm5lci5vblJ1bkNvbXBsZXRlID0gbmV3VmFsdWUgPT4ge1xuICAgICAgaWYgKCFIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMobmV3VmFsdWUsIHRoaXMudmFsdWUpKSB7XG4gICAgICAgIHRoaXMuc2V0VmFsdWUobmV3VmFsdWUpO1xuICAgICAgfVxuICAgICAgdGhpcy51bmxvY0NhbGN1bGF0aW9uKCk7XG4gICAgfTtcbiAgfVxufVxuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcImNhbGN1bGF0ZWR2YWx1ZVwiLFxuICBbXG4gICAgeyBuYW1lOiBcIiFuYW1lXCIsIGlzVW5pcXVlOiB0cnVlIH0sXG4gICAgXCJleHByZXNzaW9uOmV4cHJlc3Npb25cIixcbiAgICBcImluY2x1ZGVJbnRvUmVzdWx0OmJvb2xlYW5cIixcbiAgXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBDYWxjdWxhdGVkVmFsdWUoKTtcbiAgfSxcbiAgXCJiYXNlXCJcbik7XG4iLCJpbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZVwiO1xuaW1wb3J0IHsgSVRleHRQcm9jZXNzb3IsIElRdWVzdGlvbiwgSVN1cnZleSB9IGZyb20gXCIuL2Jhc2UtaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcIi4vaXRlbXZhbHVlXCI7XG5pbXBvcnQgeyBTZXJpYWxpemVyLCBKc29uT2JqZWN0UHJvcGVydHkgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBXZWJSZXF1ZXN0RXJyb3IsIFdlYlJlcXVlc3RFbXB0eUVycm9yIH0gZnJvbSBcIi4vZXJyb3JcIjtcbmltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcbmltcG9ydCB7IFN1cnZleUVycm9yIH0gZnJvbSBcIi4vc3VydmV5LWVycm9yXCI7XG5cbmNsYXNzIFhtbFBhcnNlciB7XG4gIHByaXZhdGUgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICBwdWJsaWMgYXNzaWduVmFsdWUodGFyZ2V0OiBhbnksIG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHRhcmdldFtuYW1lXSkpIHtcbiAgICAgIHRhcmdldFtuYW1lXS5wdXNoKHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHRhcmdldFtuYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0YXJnZXRbbmFtZV0gPSBbdGFyZ2V0W25hbWVdXS5jb25jYXQodmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPT09IDEgJiZcbiAgICAgIE9iamVjdC5rZXlzKHZhbHVlKVswXSA9PT0gbmFtZVxuICAgICkge1xuICAgICAgdGFyZ2V0W25hbWVdID0gdmFsdWVbbmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhcmdldFtuYW1lXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgeG1sMkpzb24oeG1sTm9kZTogYW55LCByZXN1bHQ6IGFueSkge1xuICAgIGlmICh4bWxOb2RlLmNoaWxkcmVuICYmIHhtbE5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB4bWxOb2RlLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBjaGlsZE5vZGUgPSB4bWxOb2RlLmNoaWxkcmVuW2ldO1xuICAgICAgICBsZXQgY2hpbGRPYmplY3QgPSB7fTtcbiAgICAgICAgdGhpcy54bWwySnNvbihjaGlsZE5vZGUsIGNoaWxkT2JqZWN0KTtcbiAgICAgICAgdGhpcy5hc3NpZ25WYWx1ZShyZXN1bHQsIGNoaWxkTm9kZS5ub2RlTmFtZSwgY2hpbGRPYmplY3QpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFzc2lnblZhbHVlKHJlc3VsdCwgeG1sTm9kZS5ub2RlTmFtZSwgeG1sTm9kZS50ZXh0Q29udGVudCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBwYXJzZVhtbFN0cmluZyh4bWxTdHJpbmc6IHN0cmluZykge1xuICAgIGxldCB4bWxSb290ID0gdGhpcy5wYXJzZXIucGFyc2VGcm9tU3RyaW5nKHhtbFN0cmluZywgXCJ0ZXh0L3htbFwiKTtcbiAgICBsZXQganNvbiA9IHt9O1xuICAgIHRoaXMueG1sMkpzb24oeG1sUm9vdCwganNvbik7XG4gICAgcmV0dXJuIGpzb247XG4gIH1cbn1cblxuLyoqXG4gKiBBIGRlZmluaXRpb24gZm9yIGZpbGxpbmcgY2hvaWNlcyBmb3IgY2hlY2tib3gsIGRyb3Bkb3duIGFuZCByYWRpb2dyb3VwIHF1ZXN0aW9ucyBmcm9tIHJlc2Z1bGwgc2VydmljZXMuXG4gKiBUaGUgcnVuIG1ldGhvZCBjYWxsIGEgcmVzdGZ1bCBzZXJ2aWNlIGFuZCByZXN1bHRzIGNhbiBiZSBnZXQgb24gZ2V0UmVzdWx0Q2FsbGJhY2suXG4gKi9cbmV4cG9ydCBjbGFzcyBDaG9pY2VzUmVzdGZ1bCBleHRlbmRzIEJhc2Uge1xuICBwcml2YXRlIHN0YXRpYyBjYWNoZVRleHQgPSBcIntDQUNIRX1cIjtcbiAgcHJpdmF0ZSBzdGF0aWMgbm9DYWNoZVRleHQgPSBcIntOT0NBQ0hFfVwiO1xuICBwdWJsaWMgc3RhdGljIGdldCBFbmNvZGVQYXJhbWV0ZXJzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzZXR0aW5ncy53ZWJzZXJ2aWNlRW5jb2RlUGFyYW1ldGVycztcbiAgfVxuICBwdWJsaWMgc3RhdGljIHNldCBFbmNvZGVQYXJhbWV0ZXJzKHZhbDogYm9vbGVhbikge1xuICAgIHNldHRpbmdzLndlYnNlcnZpY2VFbmNvZGVQYXJhbWV0ZXJzID0gdmFsO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgY2xlYXJDYWNoZSgpIHtcbiAgICBDaG9pY2VzUmVzdGZ1bC5pdGVtc1Jlc3VsdCA9IHt9O1xuICAgIENob2ljZXNSZXN0ZnVsLnNlbmRpbmdTYW1lUmVxdWVzdHMgPSB7fTtcbiAgfVxuICBwcml2YXRlIHN0YXRpYyBpdGVtc1Jlc3VsdDogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gIHByaXZhdGUgc3RhdGljIHNlbmRpbmdTYW1lUmVxdWVzdHM6IHtcbiAgICBbaW5kZXg6IHN0cmluZ106IEFycmF5PENob2ljZXNSZXN0ZnVsPjtcbiAgfSA9IHt9O1xuICBwcml2YXRlIHN0YXRpYyBhZGRTYW1lUmVxdWVzdChvYmo6IENob2ljZXNSZXN0ZnVsKTogYm9vbGVhbiB7XG4gICAgaWYgKCFvYmouaXNVc2luZ0NhY2hlKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIGhhc2ggPSBvYmoub2JqSGFzaDtcbiAgICB2YXIgcmVzID0gQ2hvaWNlc1Jlc3RmdWwuc2VuZGluZ1NhbWVSZXF1ZXN0c1toYXNoXTtcbiAgICBpZiAoIXJlcykge1xuICAgICAgQ2hvaWNlc1Jlc3RmdWwuc2VuZGluZ1NhbWVSZXF1ZXN0c1tvYmoub2JqSGFzaF0gPSBbXTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmVzLnB1c2gob2JqKTtcbiAgICBvYmouaXNSdW5uaW5nVmFsdWUgPSB0cnVlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByaXZhdGUgc3RhdGljIHVucmVnaXN0ZXJTYW1lUmVxdWVzdHMob2JqOiBDaG9pY2VzUmVzdGZ1bCwgaXRlbXM6IGFueSkge1xuICAgIGlmICghb2JqLmlzVXNpbmdDYWNoZSkgcmV0dXJuO1xuICAgIHZhciByZXMgPSBDaG9pY2VzUmVzdGZ1bC5zZW5kaW5nU2FtZVJlcXVlc3RzW29iai5vYmpIYXNoXTtcbiAgICBkZWxldGUgQ2hvaWNlc1Jlc3RmdWwuc2VuZGluZ1NhbWVSZXF1ZXN0c1tvYmoub2JqSGFzaF07XG4gICAgaWYgKCFyZXMpIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzW2ldLmlzUnVubmluZ1ZhbHVlID0gZmFsc2U7XG4gICAgICBpZiAoISFyZXNbaV0uZ2V0UmVzdWx0Q2FsbGJhY2spIHtcbiAgICAgICAgcmVzW2ldLmdldFJlc3VsdENhbGxiYWNrKGl0ZW1zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHVibGljIHN0YXRpYyBvbkJlZm9yZVNlbmRSZXF1ZXN0OiAoXG4gICAgc2VuZGVyOiBDaG9pY2VzUmVzdGZ1bCxcbiAgICBvcHRpb25zOiB7IHJlcXVlc3Q6IFhNTEh0dHBSZXF1ZXN0IH1cbiAgKSA9PiB2b2lkO1xuICBwcml2YXRlIHN0YXRpYyBnZXRDYWNoZWRJdGVtc1Jlc3VsdChvYmo6IENob2ljZXNSZXN0ZnVsKTogYm9vbGVhbiB7XG4gICAgdmFyIGhhc2ggPSBvYmoub2JqSGFzaDtcbiAgICB2YXIgcmVzID0gQ2hvaWNlc1Jlc3RmdWwuaXRlbXNSZXN1bHRbaGFzaF07XG4gICAgaWYgKCFyZXMpIHJldHVybiBmYWxzZTtcbiAgICBpZiAob2JqLmdldFJlc3VsdENhbGxiYWNrKSB7XG4gICAgICBvYmouZ2V0UmVzdWx0Q2FsbGJhY2socmVzKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJpdmF0ZSBsYXN0T2JqSGFzaDogc3RyaW5nID0gXCJcIjtcbiAgcHJpdmF0ZSBpc1J1bm5pbmdWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgcHJvY2Vzc2VkVXJsOiBzdHJpbmcgPSBcIlwiO1xuICBwcm90ZWN0ZWQgcHJvY2Vzc2VkUGF0aDogc3RyaW5nID0gXCJcIjtcbiAgcHJpdmF0ZSBpc1VzaW5nQ2FjaGVGcm9tVXJsOiBib29sZWFuID0gdW5kZWZpbmVkO1xuICBwdWJsaWMgb25Qcm9jZXNzZWRVcmxDYWxsYmFjazogKHVybDogc3RyaW5nLCBwYXRoOiBzdHJpbmcpID0+IHZvaWQ7XG4gIHB1YmxpYyBnZXRSZXN1bHRDYWxsYmFjazogKGl0ZW1zOiBBcnJheTxJdGVtVmFsdWU+KSA9PiB2b2lkO1xuICBwdWJsaWMgYmVmb3JlU2VuZFJlcXVlc3RDYWxsYmFjazogKCkgPT4gdm9pZDtcbiAgcHVibGljIHVwZGF0ZVJlc3VsdENhbGxiYWNrOiAoXG4gICAgaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4sXG4gICAgc2VydmVyUmVzdWx0OiBhbnlcbiAgKSA9PiBBcnJheTxJdGVtVmFsdWU+O1xuICBwdWJsaWMgZ2V0SXRlbVZhbHVlQ2FsbGJhY2s6IChpdGVtOiBhbnkpID0+IGFueTtcbiAgcHVibGljIGVycm9yOiBTdXJ2ZXlFcnJvciA9IG51bGw7XG4gIHB1YmxpYyBvd25lcjogSVF1ZXN0aW9uO1xuICBwdWJsaWMgY3JlYXRlSXRlbVZhbHVlID0gKHZhbHVlOiBhbnkpID0+IHtcbiAgICByZXR1cm4gbmV3IEl0ZW1WYWx1ZSh2YWx1ZSk7XG4gIH07XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbiAgcHVibGljIGdldFN1cnZleShsaXZlOiBib29sZWFuID0gZmFsc2UpOiBJU3VydmV5IHtcbiAgICByZXR1cm4gISF0aGlzLm93bmVyID8gdGhpcy5vd25lci5zdXJ2ZXkgOiBudWxsO1xuICB9XG4gIHB1YmxpYyBydW4odGV4dFByb2Nlc3NvcjogSVRleHRQcm9jZXNzb3IgPSBudWxsKSB7XG4gICAgaWYgKCF0aGlzLnVybCB8fCAhdGhpcy5nZXRSZXN1bHRDYWxsYmFjaykgcmV0dXJuO1xuICAgIHRoaXMucHJvY2Vzc2VkVGV4dCh0ZXh0UHJvY2Vzc29yKTtcbiAgICBpZiAoIXRoaXMucHJvY2Vzc2VkVXJsKSB7XG4gICAgICB0aGlzLmRvRW1wdHlSZXN1bHRDYWxsYmFjayh7fSk7XG4gICAgICB0aGlzLmxhc3RPYmpIYXNoID0gdGhpcy5vYmpIYXNoO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5sYXN0T2JqSGFzaCA9PT0gdGhpcy5vYmpIYXNoKSByZXR1cm47XG4gICAgdGhpcy5sYXN0T2JqSGFzaCA9IHRoaXMub2JqSGFzaDtcbiAgICB0aGlzLmVycm9yID0gbnVsbDtcbiAgICBpZiAodGhpcy51c2VDaGFuZ2VkSXRlbXNSZXN1bHRzKCkpIHJldHVybjtcbiAgICBpZiAoQ2hvaWNlc1Jlc3RmdWwuYWRkU2FtZVJlcXVlc3QodGhpcykpIHJldHVybjtcbiAgICB0aGlzLnNlbmRSZXF1ZXN0KCk7XG4gIH1cbiAgcHVibGljIGdldCBpc1VzaW5nQ2FjaGUoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNVc2luZ0NhY2hlRnJvbVVybCA9PT0gdHJ1ZSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKHRoaXMuaXNVc2luZ0NhY2hlRnJvbVVybCA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gc2V0dGluZ3MudXNlQ2FjaGluZ0ZvckNob2ljZXNSZXN0ZnVsO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNSdW5uaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldElzUnVubmluZygpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRJc1J1bm5pbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNSdW5uaW5nVmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzV2FpdGluZ0ZvclBhcmFtZXRlcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudXJsICYmICF0aGlzLnByb2Nlc3NlZFVybDtcbiAgfVxuICBwcm90ZWN0ZWQgdXNlQ2hhbmdlZEl0ZW1zUmVzdWx0cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQ2hvaWNlc1Jlc3RmdWwuZ2V0Q2FjaGVkSXRlbXNSZXN1bHQodGhpcyk7XG4gIH1cbiAgcHJpdmF0ZSBkb0VtcHR5UmVzdWx0Q2FsbGJhY2soc2VydmVyUmVzdWx0OiBhbnkpIHtcbiAgICB2YXIgaXRlbXM6IEFycmF5PGFueT4gPSBbXTtcbiAgICBpZiAodGhpcy51cGRhdGVSZXN1bHRDYWxsYmFjaykge1xuICAgICAgaXRlbXMgPSB0aGlzLnVwZGF0ZVJlc3VsdENhbGxiYWNrKGl0ZW1zLCBzZXJ2ZXJSZXN1bHQpO1xuICAgIH1cbiAgICB0aGlzLmdldFJlc3VsdENhbGxiYWNrKGl0ZW1zKTtcbiAgfVxuICBwcml2YXRlIHByb2Nlc3NlZFRleHQodGV4dFByb2Nlc3NvcjogSVRleHRQcm9jZXNzb3IpIHtcbiAgICB2YXIgdXJsVGV4dCA9IHRoaXMudXJsO1xuICAgIGlmICghIXVybFRleHQpIHtcbiAgICAgIHVybFRleHQgPSB1cmxUZXh0XG4gICAgICAgIC5yZXBsYWNlKENob2ljZXNSZXN0ZnVsLmNhY2hlVGV4dCwgXCJcIilcbiAgICAgICAgLnJlcGxhY2UoQ2hvaWNlc1Jlc3RmdWwubm9DYWNoZVRleHQsIFwiXCIpO1xuICAgIH1cbiAgICBpZiAodGV4dFByb2Nlc3Nvcikge1xuICAgICAgdmFyIHBVcmwgPSB0ZXh0UHJvY2Vzc29yLnByb2Nlc3NUZXh0RXgoXG4gICAgICAgIHVybFRleHQsXG4gICAgICAgIGZhbHNlLFxuICAgICAgICBzZXR0aW5ncy53ZWJzZXJ2aWNlRW5jb2RlUGFyYW1ldGVyc1xuICAgICAgKTtcbiAgICAgIHZhciBwUGF0aCA9IHRleHRQcm9jZXNzb3IucHJvY2Vzc1RleHRFeChcbiAgICAgICAgdGhpcy5wYXRoLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgc2V0dGluZ3Mud2Vic2VydmljZUVuY29kZVBhcmFtZXRlcnNcbiAgICAgICk7XG4gICAgICBpZiAoIXBVcmwuaGFzQWxsVmFsdWVzT25MYXN0UnVuIHx8ICFwUGF0aC5oYXNBbGxWYWx1ZXNPbkxhc3RSdW4pIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzZWRVcmwgPSBcIlwiO1xuICAgICAgICB0aGlzLnByb2Nlc3NlZFBhdGggPSBcIlwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzZWRVcmwgPSBwVXJsLnRleHQ7XG4gICAgICAgIHRoaXMucHJvY2Vzc2VkUGF0aCA9IHBQYXRoLnRleHQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJvY2Vzc2VkVXJsID0gdXJsVGV4dDtcbiAgICAgIHRoaXMucHJvY2Vzc2VkUGF0aCA9IHRoaXMucGF0aDtcbiAgICB9XG4gICAgaWYgKHRoaXMub25Qcm9jZXNzZWRVcmxDYWxsYmFjaykge1xuICAgICAgdGhpcy5vblByb2Nlc3NlZFVybENhbGxiYWNrKHRoaXMucHJvY2Vzc2VkVXJsLCB0aGlzLnByb2Nlc3NlZFBhdGgpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgcGFyc2VSZXNwb25zZShyZXNwb25zZTogYW55KSB7XG4gICAgbGV0IHBhcnNlZFJlc3BvbnNlO1xuICAgIGlmIChcbiAgICAgICEhcmVzcG9uc2UgJiZcbiAgICAgIHR5cGVvZiByZXNwb25zZS5pbmRleE9mID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgIHJlc3BvbnNlLmluZGV4T2YoXCI8XCIpID09PSAwXG4gICAgKSB7XG4gICAgICB2YXIgcGFyc2VyID0gbmV3IFhtbFBhcnNlcigpO1xuICAgICAgcGFyc2VkUmVzcG9uc2UgPSBwYXJzZXIucGFyc2VYbWxTdHJpbmcocmVzcG9uc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0cnkge1xuICAgICAgICBwYXJzZWRSZXNwb25zZSA9IEpTT04ucGFyc2UocmVzcG9uc2UpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHBhcnNlZFJlc3BvbnNlID0gKHJlc3BvbnNlIHx8IFwiXCIpXG4gICAgICAgICAgLnNwbGl0KFwiXFxuXCIpXG4gICAgICAgICAgLm1hcCgoczogYW55KSA9PiBzLnRyaW0oXCIgXCIpKVxuICAgICAgICAgIC5maWx0ZXIoKHM6IGFueSkgPT4gISFzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZFJlc3BvbnNlO1xuICB9XG4gIHByb3RlY3RlZCBzZW5kUmVxdWVzdCgpIHtcbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgeGhyLm9wZW4oXCJHRVRcIiwgdGhpcy5wcm9jZXNzZWRVcmwpO1xuICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgbG9hZGluZ09iakhhc2ggPSB0aGlzLm9iakhhc2g7XG4gICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2VsZi5iZWZvcmVMb2FkUmVxdWVzdCgpO1xuICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICBzZWxmLm9uTG9hZChzZWxmLnBhcnNlUmVzcG9uc2UoeGhyLnJlc3BvbnNlKSwgbG9hZGluZ09iakhhc2gpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZi5vbkVycm9yKHhoci5zdGF0dXNUZXh0LCB4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHZhciBvcHRpb25zID0geyByZXF1ZXN0OiB4aHIgfTtcbiAgICBpZiAoISFDaG9pY2VzUmVzdGZ1bC5vbkJlZm9yZVNlbmRSZXF1ZXN0KSB7XG4gICAgICBDaG9pY2VzUmVzdGZ1bC5vbkJlZm9yZVNlbmRSZXF1ZXN0KHRoaXMsIG9wdGlvbnMpO1xuICAgIH1cbiAgICB0aGlzLmJlZm9yZVNlbmRSZXF1ZXN0KCk7XG4gICAgb3B0aW9ucy5yZXF1ZXN0LnNlbmQoKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImNob2ljZXNCeVVybFwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgIXRoaXMudXJsICYmXG4gICAgICAhdGhpcy5wYXRoICYmXG4gICAgICAhdGhpcy52YWx1ZU5hbWUgJiZcbiAgICAgICF0aGlzLnRpdGxlTmFtZSAmJlxuICAgICAgIXRoaXMuaW1hZ2VMaW5rTmFtZVxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldEN1c3RvbVByb3BlcnRpZXNOYW1lcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMuZ2V0Q3VzdG9tUHJvcGVydGllcygpO1xuICAgIHZhciByZXMgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzLnB1c2godGhpcy5nZXRDdXN0b21Qcm9wZXJ0eU5hbWUocHJvcGVydGllc1tpXS5uYW1lKSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSBnZXRDdXN0b21Qcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBwcm9wZXJ0eU5hbWUgKyBcIk5hbWVcIjtcbiAgfVxuICBwcml2YXRlIGdldEN1c3RvbVByb3BlcnRpZXMoKTogQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5PiB7XG4gICAgdmFyIHByb3BlcnRpZXMgPSBTZXJpYWxpemVyLmdldFByb3BlcnRpZXModGhpcy5pdGVtVmFsdWVUeXBlKTtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHByb3BlcnRpZXNbaV0ubmFtZSA9PT0gXCJ2YWx1ZVwiIHx8XG4gICAgICAgIHByb3BlcnRpZXNbaV0ubmFtZSA9PT0gXCJ0ZXh0XCIgfHxcbiAgICAgICAgcHJvcGVydGllc1tpXS5uYW1lID09PSBcInZpc2libGVJZlwiIHx8XG4gICAgICAgIHByb3BlcnRpZXNbaV0ubmFtZSA9PT0gXCJlbmFibGVJZlwiXG4gICAgICApXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgcmVzLnB1c2gocHJvcGVydGllc1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIHNldERhdGEoanNvbjogYW55KSB7XG4gICAgdGhpcy5jbGVhcigpO1xuICAgIGlmIChqc29uLnVybCkgdGhpcy51cmwgPSBqc29uLnVybDtcbiAgICBpZiAoanNvbi5wYXRoKSB0aGlzLnBhdGggPSBqc29uLnBhdGg7XG4gICAgaWYgKGpzb24udmFsdWVOYW1lKSB0aGlzLnZhbHVlTmFtZSA9IGpzb24udmFsdWVOYW1lO1xuICAgIGlmIChqc29uLnRpdGxlTmFtZSkgdGhpcy50aXRsZU5hbWUgPSBqc29uLnRpdGxlTmFtZTtcbiAgICBpZiAoanNvbi5pbWFnZUxpbmtOYW1lKSB0aGlzLmltYWdlTGlua05hbWUgPSBqc29uLmltYWdlTGlua05hbWU7XG4gICAgaWYgKGpzb24uYWxsb3dFbXB0eVJlc3BvbnNlICE9PSB1bmRlZmluZWQpXG4gICAgICB0aGlzLmFsbG93RW1wdHlSZXNwb25zZSA9IGpzb24uYWxsb3dFbXB0eVJlc3BvbnNlO1xuICAgIGlmIChqc29uLmF0dGFjaE9yaWdpbmFsSXRlbXMgIT09IHVuZGVmaW5lZClcbiAgICAgIHRoaXMuYXR0YWNoT3JpZ2luYWxJdGVtcyA9IGpzb24uYXR0YWNoT3JpZ2luYWxJdGVtcztcbiAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMuZ2V0Q3VzdG9tUHJvcGVydGllc05hbWVzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoanNvbltwcm9wZXJ0aWVzW2ldXSkgKDxhbnk+dGhpcylbcHJvcGVydGllc1tpXV0gPSBqc29uW3Byb3BlcnRpZXNbaV1dO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0RGF0YSgpOiBhbnkge1xuICAgIGlmICh0aGlzLmlzRW1wdHkpIHJldHVybiBudWxsO1xuICAgIHZhciByZXM6IGFueSA9IHt9O1xuICAgIGlmICh0aGlzLnVybCkgcmVzW1widXJsXCJdID0gdGhpcy51cmw7XG4gICAgaWYgKHRoaXMucGF0aCkgcmVzW1wicGF0aFwiXSA9IHRoaXMucGF0aDtcbiAgICBpZiAodGhpcy52YWx1ZU5hbWUpIHJlc1tcInZhbHVlTmFtZVwiXSA9IHRoaXMudmFsdWVOYW1lO1xuICAgIGlmICh0aGlzLnRpdGxlTmFtZSkgcmVzW1widGl0bGVOYW1lXCJdID0gdGhpcy50aXRsZU5hbWU7XG4gICAgaWYgKHRoaXMuaW1hZ2VMaW5rTmFtZSkgcmVzW1wiaW1hZ2VMaW5rTmFtZVwiXSA9IHRoaXMuaW1hZ2VMaW5rTmFtZTtcbiAgICBpZiAodGhpcy5hbGxvd0VtcHR5UmVzcG9uc2UpXG4gICAgICByZXNbXCJhbGxvd0VtcHR5UmVzcG9uc2VcIl0gPSB0aGlzLmFsbG93RW1wdHlSZXNwb25zZTtcbiAgICBpZiAodGhpcy5hdHRhY2hPcmlnaW5hbEl0ZW1zKVxuICAgICAgcmVzW1wiYXR0YWNoT3JpZ2luYWxJdGVtc1wiXSA9IHRoaXMuYXR0YWNoT3JpZ2luYWxJdGVtcztcbiAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMuZ2V0Q3VzdG9tUHJvcGVydGllc05hbWVzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoKDxhbnk+dGhpcylbcHJvcGVydGllc1tpXV0pXG4gICAgICAgIHJlc1twcm9wZXJ0aWVzW2ldXSA9ICg8YW55PnRoaXMpW3Byb3BlcnRpZXNbaV1dO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSBsaW5rIHRvIGEgd2ViIHNlcnZpY2UuIFlvdSBjYW4gdXNlIHRleHQgcHJlcHJvY2Vzc2luZyBoZXJlLlxuICAgKiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyB1cmw6IF9odHRwczovL3Jlc3Rjb3VudHJpZXMuZXUvcmVzdC92Mi9yZWdpb24ve3JlZ2lvbn1fIGlzIGNoYW5nZWQgYmFzZWQgb24gdGhlIF9yZWdpb25fIHF1ZXN0aW9uJ3MgdmFsdWUuXG4gICAqIFN1cnZleUpTIGF1dG9tYXRpY2FsbHkgZ2V0cyBkYXRhIGZyb20gdGhlIHdlYiBzZXJ2aWNlIHdoZW4gdGhlIHZhbHVlIG9mIHRoZSBfcmVnaW9uXyBxdWVzdGlvbiBjaGFuZ2VzLlxuICAgKiBAc2VlIHBhdGhcbiAgICogQHNlZSB2YWx1ZU5hbWVcbiAgICogQHNlZSB0aXRsZU5hbWVcbiAgICogQHNlZSBbRXhhbXBsZTogUkVTVGZ1bCBEcm9wZG93bl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9FeGFtcGxlcy9MaWJyYXJ5Lz9pZD1xdWVzdGlvbnR5cGUtZHJvcGRvd25yZXN0ZnVsbClcbiAgICogQHNlZSBbRG9jczogRmlsbCBDaG9pY2VzIGZyb20gYSBSRVNUZnVsIFNlcnZpY2VdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5Lz9pZD1MaWJyYXJ5T3ZlcnZpZXcjZmlsbC10aGUtY2hvaWNlcy1mcm9tLWEtcmVzdGZ1bC1zZXJ2aWNlKVxuICAgKi9cbiAgcHVibGljIGdldCB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidXJsXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdXJsKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidXJsXCIsIHZhbCk7XG4gICAgdGhpcy5pc1VzaW5nQ2FjaGVGcm9tVXJsID0gdW5kZWZpbmVkO1xuICAgIGlmICghdmFsKSByZXR1cm47XG4gICAgaWYgKHZhbC5pbmRleE9mKENob2ljZXNSZXN0ZnVsLmNhY2hlVGV4dCkgPiAtMSkge1xuICAgICAgdGhpcy5pc1VzaW5nQ2FjaGVGcm9tVXJsID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHZhbC5pbmRleE9mKENob2ljZXNSZXN0ZnVsLm5vQ2FjaGVUZXh0KSA+IC0xKSB7XG4gICAgICAgIHRoaXMuaXNVc2luZ0NhY2hlRnJvbVVybCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHksIGlmIGEgd2ViIHNlcnZpY2UgcmV0dXJucyBhIGxvdCBvZiBpbmZvcm1hdGlvbiBhbmQgeW91IG5lZWQgb25seSBhIHBhcnQgb2YgaXQuXG4gICAqIEZvciBleGFtcGxlLCBhIHdlYiBzZXJ2aWNlIHJldHVybnMgYSBsaXN0IG9mIGNvdW50cmllcyBhbmQgYSBsaXN0IG9mIGNhcGl0YWxzLlxuICAgKiBJZiB5b3UgbmVlZCBhIGxpc3Qgb2YgY291bnRyaWVzLCBzZXQgYSBjb3JyZWN0IHBhdGggZnJvbSB3aGljaCBTdXJ2ZXlKUyBvYnRhaW5zIHRoZSBkYXRhLCBsaWtlOiBfRGF0YUxpc3QxXFxEYXRhTGlzdDJfXG4gICAqIEBzZWUgdXJsXG4gICAqIEBzZWUgdmFsdWVOYW1lXG4gICAqIEBzZWUgdGl0bGVOYW1lXG4gICAqIEBzZWUgW0V4YW1wbGU6IFJFU1RmdWwgRHJvcGRvd25dKGh0dHBzOi8vc3VydmV5anMuaW8vRXhhbXBsZXMvTGlicmFyeS8/aWQ9cXVlc3Rpb250eXBlLWRyb3Bkb3ducmVzdGZ1bGwpXG4gICAqIEBzZWUgW0RvY3M6IEZpbGwgQ2hvaWNlcyBmcm9tIGEgUkVTVGZ1bCBTZXJ2aWNlXShodHRwczovL3N1cnZleWpzLmlvL0RvY3VtZW50YXRpb24vTGlicmFyeS8/aWQ9TGlicmFyeU92ZXJ2aWV3I2ZpbGwtdGhlLWNob2ljZXMtZnJvbS1hLXJlc3RmdWwtc2VydmljZSlcbiAgICovXG5cbiAgcHVibGljIGdldCBwYXRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInBhdGhcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBwYXRoKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicGF0aFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGhlIG5hbWUgb2YgYSBwcm9wZXJ0eSAoaW4gdGhlIG9idGFpbmVkIGRhdGEgb2JqZWN0KSB0byB3aGljaCBTdXJ2ZXlKUyBiaW5kcyB0byBwcm92aWRlIHZhbHVlcyBmb3IgY2hvaWNlIGl0ZW1zLlxuICAgKiBAc2VlIHVybFxuICAgKiBAc2VlIHBhdGhcbiAgICogQHNlZSB0aXRsZU5hbWVcbiAgICogQHNlZSBbRXhhbXBsZTogUkVTVGZ1bCBEcm9wZG93bl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9FeGFtcGxlcy9MaWJyYXJ5Lz9pZD1xdWVzdGlvbnR5cGUtZHJvcGRvd25yZXN0ZnVsbClcbiAgICogQHNlZSBbRG9jczogRmlsbCBDaG9pY2VzIGZyb20gYSBSRVNUZnVsIFNlcnZpY2VdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5Lz9pZD1MaWJyYXJ5T3ZlcnZpZXcjZmlsbC10aGUtY2hvaWNlcy1mcm9tLWEtcmVzdGZ1bC1zZXJ2aWNlKVxuICAgKi9cblxuICBwdWJsaWMgZ2V0IHZhbHVlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ2YWx1ZU5hbWVcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCB2YWx1ZU5hbWUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ2YWx1ZU5hbWVcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHRoZSBuYW1lIG9mIGEgcHJvcGVydHkgKGluIHRoZSBvYnRhaW5lZCBkYXRhIG9iamVjdCkgdG8gd2hpY2ggU3VydmV5SlMgYmluZHMgdG8gcHJvdmlkZSBkaXNwbGF5IHRleHRzIGZvciBjaG9pY2UgaXRlbXMuXG4gICAqIEBzZWUgdXJsXG4gICAqIEBzZWUgcGF0aFxuICAgKiBAc2VlIHZhbHVlZU5hbWVcbiAgICogQHNlZSBbRXhhbXBsZTogUkVTVGZ1bCBEcm9wZG93bl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9FeGFtcGxlcy9MaWJyYXJ5Lz9pZD1xdWVzdGlvbnR5cGUtZHJvcGRvd25yZXN0ZnVsbClcbiAgICogQHNlZSBbRG9jczogRmlsbCBDaG9pY2VzIGZyb20gYSBSRVNUZnVsIFNlcnZpY2VdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5Lz9pZD1MaWJyYXJ5T3ZlcnZpZXcjZmlsbC10aGUtY2hvaWNlcy1mcm9tLWEtcmVzdGZ1bC1zZXJ2aWNlKVxuICAgKi9cblxuICBwdWJsaWMgZ2V0IHRpdGxlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ0aXRsZU5hbWVcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCB0aXRsZU5hbWUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ0aXRsZU5hbWVcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGltYWdlTGlua05hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaW1hZ2VMaW5rTmFtZVwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGltYWdlTGlua05hbWUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpbWFnZUxpbmtOYW1lXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBhbGxvd0VtcHR5UmVzcG9uc2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImFsbG93RW1wdHlSZXNwb25zZVwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBhbGxvd0VtcHR5UmVzcG9uc2UodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dFbXB0eVJlc3BvbnNlXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBhdHRhY2hPcmlnaW5hbEl0ZW1zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJhdHRhY2hPcmlnaW5hbEl0ZW1zXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGF0dGFjaE9yaWdpbmFsSXRlbXModmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYXR0YWNoT3JpZ2luYWxJdGVtc1wiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgaXRlbVZhbHVlVHlwZSgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5vd25lcikgcmV0dXJuIFwiaXRlbXZhbHVlXCI7XG4gICAgdmFyIHByb3AgPSBTZXJpYWxpemVyLmZpbmRQcm9wZXJ0eSh0aGlzLm93bmVyLmdldFR5cGUoKSwgXCJjaG9pY2VzXCIpO1xuICAgIGlmICghcHJvcCkgcmV0dXJuIFwiaXRlbXZhbHVlXCI7XG4gICAgaWYgKHByb3AudHlwZSA9PSBcIml0ZW12YWx1ZVtdXCIpIHJldHVybiBcIml0ZW12YWx1ZVwiO1xuICAgIHJldHVybiBwcm9wLnR5cGU7XG4gIH1cbiAgcHVibGljIGNsZWFyKCkge1xuICAgIHRoaXMudXJsID0gXCJcIjtcbiAgICB0aGlzLnBhdGggPSBcIlwiO1xuICAgIHRoaXMudmFsdWVOYW1lID0gXCJcIjtcbiAgICB0aGlzLnRpdGxlTmFtZSA9IFwiXCI7XG4gICAgdGhpcy5pbWFnZUxpbmtOYW1lID0gXCJcIjtcbiAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMuZ2V0Q3VzdG9tUHJvcGVydGllc05hbWVzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoKDxhbnk+dGhpcylbcHJvcGVydGllc1tpXV0pICg8YW55PnRoaXMpW3Byb3BlcnRpZXNbaV1dID0gXCJcIjtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGJlZm9yZVNlbmRSZXF1ZXN0KCkge1xuICAgIHRoaXMuaXNSdW5uaW5nVmFsdWUgPSB0cnVlO1xuICAgIGlmICghIXRoaXMuYmVmb3JlU2VuZFJlcXVlc3RDYWxsYmFjaykge1xuICAgICAgdGhpcy5iZWZvcmVTZW5kUmVxdWVzdENhbGxiYWNrKCk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBiZWZvcmVMb2FkUmVxdWVzdCgpIHtcbiAgICB0aGlzLmlzUnVubmluZ1ZhbHVlID0gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIG9uTG9hZChyZXN1bHQ6IGFueSwgbG9hZGluZ09iakhhc2g6IHN0cmluZyA9IG51bGwpIHtcbiAgICBpZiAoIWxvYWRpbmdPYmpIYXNoKSB7XG4gICAgICBsb2FkaW5nT2JqSGFzaCA9IHRoaXMub2JqSGFzaDtcbiAgICB9XG4gICAgdmFyIGl0ZW1zID0gbmV3IEFycmF5PEl0ZW1WYWx1ZT4oKTtcbiAgICB2YXIgdXBkYXRlZFJlc3VsdCA9IHRoaXMuZ2V0UmVzdWx0QWZ0ZXJQYXRoKHJlc3VsdCk7XG4gICAgaWYgKHVwZGF0ZWRSZXN1bHQgJiYgdXBkYXRlZFJlc3VsdFtcImxlbmd0aFwiXSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1cGRhdGVkUmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBpdGVtVmFsdWUgPSB1cGRhdGVkUmVzdWx0W2ldO1xuICAgICAgICBpZiAoIWl0ZW1WYWx1ZSkgY29udGludWU7XG4gICAgICAgIHZhciB2YWx1ZSA9ICEhdGhpcy5nZXRJdGVtVmFsdWVDYWxsYmFja1xuICAgICAgICAgID8gdGhpcy5nZXRJdGVtVmFsdWVDYWxsYmFjayhpdGVtVmFsdWUpXG4gICAgICAgICAgOiB0aGlzLmdldFZhbHVlKGl0ZW1WYWx1ZSk7XG4gICAgICAgIHZhciBpdGVtID0gdGhpcy5jcmVhdGVJdGVtVmFsdWUodmFsdWUpO1xuICAgICAgICB0aGlzLnNldFRpdGxlKGl0ZW0sIGl0ZW1WYWx1ZSk7XG4gICAgICAgIHRoaXMuc2V0Q3VzdG9tUHJvcGVydGllcyhpdGVtLCBpdGVtVmFsdWUpO1xuICAgICAgICBpZiAodGhpcy5hdHRhY2hPcmlnaW5hbEl0ZW1zKSB7XG4gICAgICAgICAgaXRlbS5vcmlnaW5hbEl0ZW0gPSBpdGVtVmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGltYWdlTGluayA9IHRoaXMuZ2V0SW1hZ2VMaW5rKGl0ZW1WYWx1ZSk7XG4gICAgICAgIGlmICghIWltYWdlTGluaykge1xuICAgICAgICAgIGl0ZW0uaW1hZ2VMaW5rID0gaW1hZ2VMaW5rO1xuICAgICAgICB9XG4gICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghdGhpcy5hbGxvd0VtcHR5UmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBXZWJSZXF1ZXN0RW1wdHlFcnJvcihudWxsLCB0aGlzLm93bmVyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMudXBkYXRlUmVzdWx0Q2FsbGJhY2spIHtcbiAgICAgIGl0ZW1zID0gdGhpcy51cGRhdGVSZXN1bHRDYWxsYmFjayhpdGVtcywgcmVzdWx0KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNVc2luZ0NhY2hlKSB7XG4gICAgICBDaG9pY2VzUmVzdGZ1bC5pdGVtc1Jlc3VsdFtsb2FkaW5nT2JqSGFzaF0gPSBpdGVtcztcbiAgICB9XG4gICAgdGhpcy5jYWxsUmVzdWx0Q2FsbGJhY2soaXRlbXMsIGxvYWRpbmdPYmpIYXNoKTtcbiAgICBDaG9pY2VzUmVzdGZ1bC51bnJlZ2lzdGVyU2FtZVJlcXVlc3RzKHRoaXMsIGl0ZW1zKTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FsbFJlc3VsdENhbGxiYWNrKFxuICAgIGl0ZW1zOiBBcnJheTxJdGVtVmFsdWU+LFxuICAgIGxvYWRpbmdPYmpIYXNoOiBzdHJpbmdcbiAgKSB7XG4gICAgaWYgKGxvYWRpbmdPYmpIYXNoICE9IHRoaXMub2JqSGFzaCkgcmV0dXJuO1xuICAgIHRoaXMuZ2V0UmVzdWx0Q2FsbGJhY2soaXRlbXMpO1xuICB9XG4gIHByaXZhdGUgc2V0Q3VzdG9tUHJvcGVydGllcyhpdGVtOiBJdGVtVmFsdWUsIGl0ZW1WYWx1ZTogYW55KSB7XG4gICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLmdldEN1c3RvbVByb3BlcnRpZXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwcm9wID0gcHJvcGVydGllc1tpXTtcbiAgICAgIHZhciB2YWwgPSB0aGlzLmdldFZhbHVlQ29yZShcbiAgICAgICAgaXRlbVZhbHVlLFxuICAgICAgICB0aGlzLmdldFByb3BlcnR5QmluZGluZyhwcm9wLm5hbWUpXG4gICAgICApO1xuICAgICAgaWYgKCF0aGlzLmlzVmFsdWVFbXB0eSh2YWwpKSB7XG4gICAgICAgICg8YW55Pml0ZW0pW3Byb3AubmFtZV0gPSB2YWw7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0UHJvcGVydHlCaW5kaW5nKHByb3BlcnR5TmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKCg8YW55PnRoaXMpW3RoaXMuZ2V0Q3VzdG9tUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZSldKVxuICAgICAgcmV0dXJuICg8YW55PnRoaXMpW3RoaXMuZ2V0Q3VzdG9tUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZSldO1xuICAgIGlmICgoPGFueT50aGlzKVtwcm9wZXJ0eU5hbWVdKSByZXR1cm4gKDxhbnk+dGhpcylbcHJvcGVydHlOYW1lXTtcbiAgICByZXR1cm4gcHJvcGVydHlOYW1lO1xuICB9XG4gIHByaXZhdGUgb25FcnJvcihzdGF0dXM6IHN0cmluZywgcmVzcG9uc2U6IHN0cmluZykge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgV2ViUmVxdWVzdEVycm9yKHN0YXR1cywgcmVzcG9uc2UsIHRoaXMub3duZXIpO1xuICAgIHRoaXMuZG9FbXB0eVJlc3VsdENhbGxiYWNrKHJlc3BvbnNlKTtcbiAgICBDaG9pY2VzUmVzdGZ1bC51bnJlZ2lzdGVyU2FtZVJlcXVlc3RzKHRoaXMsIFtdKTtcbiAgfVxuICBwcml2YXRlIGdldFJlc3VsdEFmdGVyUGF0aChyZXN1bHQ6IGFueSkge1xuICAgIGlmICghcmVzdWx0KSByZXR1cm4gcmVzdWx0O1xuICAgIGlmICghdGhpcy5wcm9jZXNzZWRQYXRoKSByZXR1cm4gcmVzdWx0O1xuICAgIHZhciBwYXRoZXMgPSB0aGlzLmdldFBhdGhlcygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHRbcGF0aGVzW2ldXTtcbiAgICAgIGlmICghcmVzdWx0KSByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBwcml2YXRlIGdldFBhdGhlcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICB2YXIgcGF0aGVzID0gW107XG4gICAgaWYgKHRoaXMucHJvY2Vzc2VkUGF0aC5pbmRleE9mKFwiO1wiKSA+IC0xKSB7XG4gICAgICBwYXRoZXMgPSB0aGlzLnBhdGguc3BsaXQoXCI7XCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXRoZXMgPSB0aGlzLnByb2Nlc3NlZFBhdGguc3BsaXQoXCIsXCIpO1xuICAgIH1cbiAgICBpZiAocGF0aGVzLmxlbmd0aCA9PSAwKSBwYXRoZXMucHVzaCh0aGlzLnByb2Nlc3NlZFBhdGgpO1xuICAgIHJldHVybiBwYXRoZXM7XG4gIH1cbiAgcHJpdmF0ZSBnZXRWYWx1ZShpdGVtOiBhbnkpOiBhbnkge1xuICAgIGlmICghaXRlbSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKHRoaXMudmFsdWVOYW1lKSByZXR1cm4gdGhpcy5nZXRWYWx1ZUNvcmUoaXRlbSwgdGhpcy52YWx1ZU5hbWUpO1xuICAgIGlmICghKGl0ZW0gaW5zdGFuY2VvZiBPYmplY3QpKSByZXR1cm4gaXRlbTtcbiAgICB2YXIgbGVuID0gT2JqZWN0LmtleXMoaXRlbSkubGVuZ3RoO1xuICAgIGlmIChsZW4gPCAxKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gaXRlbVtPYmplY3Qua2V5cyhpdGVtKVswXV07XG4gIH1cbiAgcHJpdmF0ZSBzZXRUaXRsZShpdGVtOiBJdGVtVmFsdWUsIGl0ZW1WYWx1ZTogYW55KTogYW55IHtcbiAgICB2YXIgdGl0bGUgPSB0aGlzLnRpdGxlTmFtZSA/IHRoaXMudGl0bGVOYW1lIDogXCJ0aXRsZVwiO1xuICAgIHZhciB2YWwgPSB0aGlzLmdldFZhbHVlQ29yZShpdGVtVmFsdWUsIHRpdGxlKTtcbiAgICBpZiAoIXZhbCkgcmV0dXJuO1xuICAgIGlmICh0eXBlb2YgdmFsID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBpdGVtLnRleHQgPSB2YWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW0ubG9jVGV4dC5zZXRKc29uKHZhbCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0SW1hZ2VMaW5rKGl0ZW06IGFueSk6IGFueSB7XG4gICAgdmFyIGltYWdlTGluayA9IHRoaXMuaW1hZ2VMaW5rTmFtZSA/IHRoaXMuaW1hZ2VMaW5rTmFtZSA6IFwiaW1hZ2VMaW5rXCI7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWVDb3JlKGl0ZW0sIGltYWdlTGluayk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRWYWx1ZUNvcmUoaXRlbTogYW55LCBwcm9wZXJ0eTogc3RyaW5nKTogYW55IHtcbiAgICBpZiAoIWl0ZW0pIHJldHVybiBudWxsO1xuICAgIGlmIChwcm9wZXJ0eS5pbmRleE9mKFwiLlwiKSA8IDApIHJldHVybiBpdGVtW3Byb3BlcnR5XTtcbiAgICB2YXIgcHJvcGVydGllcyA9IHByb3BlcnR5LnNwbGl0KFwiLlwiKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGl0ZW0gPSBpdGVtW3Byb3BlcnRpZXNbaV1dO1xuICAgICAgaWYgKCFpdGVtKSByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW07XG4gIH1cbiAgcHJpdmF0ZSBnZXQgb2JqSGFzaCgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5wcm9jZXNzZWRVcmwgK1xuICAgICAgXCI7XCIgK1xuICAgICAgdGhpcy5wcm9jZXNzZWRQYXRoICtcbiAgICAgIFwiO1wiICtcbiAgICAgIHRoaXMudmFsdWVOYW1lICtcbiAgICAgIFwiO1wiICtcbiAgICAgIHRoaXMudGl0bGVOYW1lICtcbiAgICAgIFwiO1wiICtcbiAgICAgIHRoaXMuaW1hZ2VMaW5rTmFtZVxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBPYnNvbGV0ZSwgcGxlYXNlIHVzZSBDaG9pY2VzUmVzdGZ1bFxuICovXG5leHBvcnQgY2xhc3MgQ2hvaWNlc1Jlc3RmdWxsIGV4dGVuZHMgQ2hvaWNlc1Jlc3RmdWwge1xuICBwdWJsaWMgc3RhdGljIGdldCBFbmNvZGVQYXJhbWV0ZXJzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBDaG9pY2VzUmVzdGZ1bC5FbmNvZGVQYXJhbWV0ZXJzO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgc2V0IEVuY29kZVBhcmFtZXRlcnModmFsOiBib29sZWFuKSB7XG4gICAgQ2hvaWNlc1Jlc3RmdWwuRW5jb2RlUGFyYW1ldGVycyA9IHZhbDtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGNsZWFyQ2FjaGUoKSB7XG4gICAgQ2hvaWNlc1Jlc3RmdWwuY2xlYXJDYWNoZSgpO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgZ2V0IG9uQmVmb3JlU2VuZFJlcXVlc3QoKTogKFxuICAgIHNlbmRlcjogQ2hvaWNlc1Jlc3RmdWwsXG4gICAgb3B0aW9uczogeyByZXF1ZXN0OiBYTUxIdHRwUmVxdWVzdCB9XG4gICkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIENob2ljZXNSZXN0ZnVsLm9uQmVmb3JlU2VuZFJlcXVlc3Q7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBzZXQgb25CZWZvcmVTZW5kUmVxdWVzdChcbiAgICB2YWw6IChzZW5kZXI6IENob2ljZXNSZXN0ZnVsLCBvcHRpb25zOiB7IHJlcXVlc3Q6IFhNTEh0dHBSZXF1ZXN0IH0pID0+IHZvaWRcbiAgKSB7XG4gICAgQ2hvaWNlc1Jlc3RmdWwub25CZWZvcmVTZW5kUmVxdWVzdCA9IHZhbDtcbiAgfVxufVxuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcImNob2ljZXNCeVVybFwiLFxuICBbXG4gICAgXCJ1cmxcIixcbiAgICBcInBhdGhcIixcbiAgICBcInZhbHVlTmFtZVwiLFxuICAgIFwidGl0bGVOYW1lXCIsXG4gICAge1xuICAgICAgbmFtZTogXCJpbWFnZUxpbmtOYW1lXCIsXG4gICAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uKG9iajogYW55KSB7XG4gICAgICAgIHJldHVybiAhIW9iaiAmJiAhIW9iai5vd25lciAmJiBvYmoub3duZXIuZ2V0VHlwZSgpID09IFwiaW1hZ2VwaWNrZXJcIjtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7IG5hbWU6IFwiYWxsb3dFbXB0eVJlc3BvbnNlOmJvb2xlYW5cIiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwiYXR0YWNoT3JpZ2luYWxJdGVtczpib29sZWFuXCIsIGRlZmF1bHQ6IGZhbHNlLCB2aXNpYmxlOiBmYWxzZSB9LFxuICBdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IENob2ljZXNSZXN0ZnVsKCk7XG4gIH1cbik7XG4iLCJpbXBvcnQgeyBIZWxwZXJzLCBIYXNoVGFibGUgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5cbmV4cG9ydCBjbGFzcyBQcm9jZXNzVmFsdWUge1xuICBwdWJsaWMgdmFsdWVzOiBIYXNoVGFibGU8YW55PiA9IG51bGw7XG4gIHB1YmxpYyBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PiA9IG51bGw7XG4gIGNvbnN0cnVjdG9yKCkge31cbiAgcHVibGljIGdldEZpcnN0TmFtZSh0ZXh0OiBzdHJpbmcsIG9iajogYW55ID0gbnVsbCk6IHN0cmluZyB7XG4gICAgaWYgKCF0ZXh0KSByZXR1cm4gdGV4dDtcbiAgICB2YXIgcmVzID0gXCJcIjtcbiAgICBpZiAoISFvYmopIHtcbiAgICAgIHJlcyA9IHRoaXMuZ2V0Rmlyc3RQcm9wZXJ0eU5hbWUodGV4dCwgb2JqKTtcbiAgICAgIGlmICghIXJlcykgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2ggPSB0ZXh0W2ldO1xuICAgICAgaWYgKGNoID09IFwiLlwiIHx8IGNoID09IFwiW1wiKSBicmVhaztcbiAgICAgIHJlcyArPSBjaDtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgaGFzVmFsdWUodGV4dDogc3RyaW5nLCB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+ID0gbnVsbCk6IGJvb2xlYW4ge1xuICAgIGlmICghdmFsdWVzKSB2YWx1ZXMgPSB0aGlzLnZhbHVlcztcbiAgICB2YXIgcmVzID0gdGhpcy5nZXRWYWx1ZUNvcmUodGV4dCwgdmFsdWVzKTtcbiAgICByZXR1cm4gcmVzLmhhc1ZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXRWYWx1ZSh0ZXh0OiBzdHJpbmcsIHZhbHVlczogSGFzaFRhYmxlPGFueT4gPSBudWxsKTogYW55IHtcbiAgICBpZiAoIXZhbHVlcykgdmFsdWVzID0gdGhpcy52YWx1ZXM7XG4gICAgdmFyIHJlcyA9IHRoaXMuZ2V0VmFsdWVDb3JlKHRleHQsIHZhbHVlcyk7XG4gICAgcmV0dXJuIHJlcy52YWx1ZTtcbiAgfVxuICBwdWJsaWMgc2V0VmFsdWUob2JqOiBhbnksIHRleHQ6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIGlmICghdGV4dCkgcmV0dXJuO1xuICAgIHZhciBub25OZXN0ZWRPYmogPSB0aGlzLmdldE5vbk5lc3RlZE9iamVjdChvYmosIHRleHQsIHRydWUpO1xuICAgIGlmICghbm9uTmVzdGVkT2JqKSByZXR1cm47XG4gICAgb2JqID0gbm9uTmVzdGVkT2JqLnZhbHVlO1xuICAgIHRleHQgPSBub25OZXN0ZWRPYmoudGV4dDtcbiAgICBpZiAoISFvYmogJiYgISF0ZXh0KSB7XG4gICAgICBvYmpbdGV4dF0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldFZhbHVlSW5mbyh2YWx1ZUluZm86IGFueSkge1xuICAgIGlmICghIXZhbHVlSW5mby5wYXRoKSB7XG4gICAgICB2YWx1ZUluZm8udmFsdWUgPSB0aGlzLmdldFZhbHVlRnJvbVBhdGgodmFsdWVJbmZvLnBhdGgsIHRoaXMudmFsdWVzKTtcbiAgICAgIHZhbHVlSW5mby5oYXNWYWx1ZSA9XG4gICAgICAgIHZhbHVlSW5mby52YWx1ZSAhPT0gbnVsbCAmJiAhSGVscGVycy5pc1ZhbHVlRW1wdHkodmFsdWVJbmZvLnZhbHVlKTtcbiAgICAgIGlmIChcbiAgICAgICAgIXZhbHVlSW5mby5oYXNWYWx1ZSAmJlxuICAgICAgICB2YWx1ZUluZm8ucGF0aC5sZW5ndGggPiAxICYmXG4gICAgICAgIHZhbHVlSW5mby5wYXRoW3ZhbHVlSW5mby5wYXRoLmxlbmd0aCAtIDFdID09IFwibGVuZ3RoXCJcbiAgICAgICkge1xuICAgICAgICB2YWx1ZUluZm8uaGFzVmFsdWUgPSB0cnVlO1xuICAgICAgICB2YWx1ZUluZm8udmFsdWUgPSAwO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgcmVzID0gdGhpcy5nZXRWYWx1ZUNvcmUodmFsdWVJbmZvLm5hbWUsIHRoaXMudmFsdWVzKTtcbiAgICB2YWx1ZUluZm8udmFsdWUgPSByZXMudmFsdWU7XG4gICAgdmFsdWVJbmZvLmhhc1ZhbHVlID0gcmVzLmhhc1ZhbHVlO1xuICAgIHZhbHVlSW5mby5wYXRoID0gcmVzLmhhc1ZhbHVlID8gcmVzLnBhdGggOiBudWxsO1xuICB9XG4gIHByaXZhdGUgZ2V0VmFsdWVGcm9tUGF0aChwYXRoOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+LCB2YWx1ZXM6IGFueSk6IGFueSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB3aGlsZSAoISF2YWx1ZXMgJiYgaW5kZXggPCBwYXRoLmxlbmd0aCkge1xuICAgICAgdmFyIGluZF9uYW1lID0gcGF0aFtpbmRleF07XG4gICAgICBpZiAoXG4gICAgICAgIEhlbHBlcnMuaXNOdW1iZXIoaW5kX25hbWUpICYmXG4gICAgICAgIEFycmF5LmlzQXJyYXkodmFsdWVzKSAmJlxuICAgICAgICBpbmRfbmFtZSA+PSB2YWx1ZXMubGVuZ3RoXG4gICAgICApXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgdmFsdWVzID0gdmFsdWVzW2luZF9uYW1lXTtcbiAgICAgIGluZGV4Kys7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZXM7XG4gIH1cbiAgcHJpdmF0ZSBnZXRWYWx1ZUNvcmUodGV4dDogc3RyaW5nLCB2YWx1ZXM6IGFueSk6IGFueSB7XG4gICAgdmFyIHJlczogYW55ID0geyBoYXNWYWx1ZTogZmFsc2UsIHZhbHVlOiBudWxsLCBwYXRoOiBudWxsIH07XG4gICAgdmFyIGN1clZhbHVlID0gdmFsdWVzO1xuICAgIGlmICghY3VyVmFsdWUgJiYgY3VyVmFsdWUgIT09IDAgJiYgY3VyVmFsdWUgIT09IGZhbHNlKSByZXR1cm4gcmVzO1xuICAgIGlmIChcbiAgICAgIHRleHQgJiZcbiAgICAgIHRleHQubGFzdEluZGV4T2YoXCIubGVuZ3RoXCIpID4gLTEgJiZcbiAgICAgIHRleHQubGFzdEluZGV4T2YoXCIubGVuZ3RoXCIpID09PSB0ZXh0Lmxlbmd0aCAtIFwiLmxlbmd0aFwiLmxlbmd0aFxuICAgICkge1xuICAgICAgcmVzLnZhbHVlID0gMDtcbiAgICAgIHJlcy5oYXNWYWx1ZSA9IHRydWU7XG4gICAgfVxuICAgIHZhciBub25OZXN0ZWRPYmogPSB0aGlzLmdldE5vbk5lc3RlZE9iamVjdChjdXJWYWx1ZSwgdGV4dCwgZmFsc2UpO1xuICAgIGlmICghbm9uTmVzdGVkT2JqKSByZXR1cm4gcmVzO1xuICAgIHJlcy5wYXRoID0gbm9uTmVzdGVkT2JqLnBhdGg7XG4gICAgcmVzLnZhbHVlID0gISFub25OZXN0ZWRPYmoudGV4dFxuICAgICAgPyB0aGlzLmdldE9iamVjdFZhbHVlKG5vbk5lc3RlZE9iai52YWx1ZSwgbm9uTmVzdGVkT2JqLnRleHQpXG4gICAgICA6IG5vbk5lc3RlZE9iai52YWx1ZTtcbiAgICByZXMuaGFzVmFsdWUgPSAhSGVscGVycy5pc1ZhbHVlRW1wdHkocmVzLnZhbHVlKTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByaXZhdGUgZ2V0Tm9uTmVzdGVkT2JqZWN0KG9iajogYW55LCB0ZXh0OiBzdHJpbmcsIGNyZWF0ZVBhdGg6IGJvb2xlYW4pOiBhbnkge1xuICAgIHZhciBjdXJOYW1lID0gdGhpcy5nZXRGaXJzdFByb3BlcnR5TmFtZSh0ZXh0LCBvYmosIGNyZWF0ZVBhdGgpO1xuICAgIHZhciBwYXRoID0gISFjdXJOYW1lID8gW2N1ck5hbWVdIDogbnVsbDtcbiAgICB3aGlsZSAodGV4dCAhPSBjdXJOYW1lICYmICEhb2JqKSB7XG4gICAgICB2YXIgaXNBcnJheSA9IHRleHRbMF0gPT0gXCJbXCI7XG4gICAgICBpZiAoIWlzQXJyYXkpIHtcbiAgICAgICAgaWYgKCFjdXJOYW1lICYmIHRleHQgPT0gdGhpcy5nZXRGaXJzdE5hbWUodGV4dCkpXG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG9iaiwgdGV4dDogdGV4dCwgcGF0aDogcGF0aCB9O1xuICAgICAgICBvYmogPSB0aGlzLmdldE9iamVjdFZhbHVlKG9iaiwgY3VyTmFtZSk7XG4gICAgICAgIGlmIChIZWxwZXJzLmlzVmFsdWVFbXB0eShvYmopICYmICFjcmVhdGVQYXRoKSByZXR1cm4gbnVsbDtcbiAgICAgICAgdGV4dCA9IHRleHQuc3Vic3RyKGN1ck5hbWUubGVuZ3RoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBvYmpJbkFycmF5ID0gdGhpcy5nZXRPYmpJbkFycmF5KG9iaiwgdGV4dCk7XG4gICAgICAgIGlmICghb2JqSW5BcnJheSkgcmV0dXJuIG51bGw7XG4gICAgICAgIG9iaiA9IG9iakluQXJyYXkudmFsdWU7XG4gICAgICAgIHRleHQgPSBvYmpJbkFycmF5LnRleHQ7XG4gICAgICAgIHBhdGgucHVzaChvYmpJbkFycmF5LmluZGV4KTtcbiAgICAgIH1cbiAgICAgIGlmICghIXRleHQgJiYgdGV4dFswXSA9PSBcIi5cIikge1xuICAgICAgICB0ZXh0ID0gdGV4dC5zdWJzdHIoMSk7XG4gICAgICB9XG4gICAgICBjdXJOYW1lID0gdGhpcy5nZXRGaXJzdFByb3BlcnR5TmFtZSh0ZXh0LCBvYmosIGNyZWF0ZVBhdGgpO1xuICAgICAgaWYgKCEhY3VyTmFtZSkge1xuICAgICAgICBwYXRoLnB1c2goY3VyTmFtZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IHZhbHVlOiBvYmosIHRleHQ6IHRleHQsIHBhdGg6IHBhdGggfTtcbiAgfVxuICBwcml2YXRlIGdldE9iakluQXJyYXkoY3VyVmFsdWU6IGFueSwgdGV4dDogc3RyaW5nKTogYW55IHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY3VyVmFsdWUpKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgaW5kZXggPSAxO1xuICAgIHZhciBzdHIgPSBcIlwiO1xuICAgIHdoaWxlIChpbmRleCA8IHRleHQubGVuZ3RoICYmIHRleHRbaW5kZXhdICE9IFwiXVwiKSB7XG4gICAgICBzdHIgKz0gdGV4dFtpbmRleF07XG4gICAgICBpbmRleCsrO1xuICAgIH1cbiAgICB0ZXh0ID0gaW5kZXggPCB0ZXh0Lmxlbmd0aCA/IHRleHQuc3Vic3RyKGluZGV4ICsgMSkgOiBcIlwiO1xuICAgIGluZGV4ID0gdGhpcy5nZXRJbnRWYWx1ZShzdHIpO1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gY3VyVmFsdWUubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4geyB2YWx1ZTogY3VyVmFsdWVbaW5kZXhdLCB0ZXh0OiB0ZXh0LCBpbmRleDogaW5kZXggfTtcbiAgfVxuICBwcml2YXRlIGdldEZpcnN0UHJvcGVydHlOYW1lKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBvYmo6IGFueSxcbiAgICBjcmVhdGVQcm9wOiBib29sZWFuID0gZmFsc2VcbiAgKTogc3RyaW5nIHtcbiAgICBpZiAoIW5hbWUpIHJldHVybiBuYW1lO1xuICAgIGlmICghb2JqKSBvYmogPSB7fTtcbiAgICBpZiAob2JqLmhhc093blByb3BlcnR5KG5hbWUpKSByZXR1cm4gbmFtZTtcbiAgICB2YXIgbmFtZUluTG93ID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciBBID0gbmFtZUluTG93WzBdO1xuICAgIHZhciBhID0gQS50b1VwcGVyQ2FzZSgpO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIHZhciBmaXJzdCA9IGtleVswXTtcbiAgICAgIGlmIChmaXJzdCA9PT0gYSB8fCBmaXJzdCA9PT0gQSkge1xuICAgICAgICB2YXIga2V5TmFtZSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoa2V5TmFtZSA9PSBuYW1lSW5Mb3cpIHJldHVybiBrZXk7XG4gICAgICAgIGlmIChuYW1lSW5Mb3cubGVuZ3RoIDw9IGtleU5hbWUubGVuZ3RoKSBjb250aW51ZTtcbiAgICAgICAgdmFyIGNoID0gbmFtZUluTG93W2tleU5hbWUubGVuZ3RoXTtcbiAgICAgICAgaWYgKGNoICE9IFwiLlwiICYmIGNoICE9IFwiW1wiKSBjb250aW51ZTtcbiAgICAgICAgaWYgKGtleU5hbWUgPT0gbmFtZUluTG93LnN1YnN0cigwLCBrZXlOYW1lLmxlbmd0aCkpIHJldHVybiBrZXk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjcmVhdGVQcm9wICYmIG5hbWVbMF0gIT09IFwiW1wiKSB7XG4gICAgICB2YXIgaW5kID0gbmFtZS5pbmRleE9mKFwiLlwiKTtcbiAgICAgIGlmIChpbmQgPiAtMSkge1xuICAgICAgICBuYW1lID0gbmFtZS5zdWJzdHIoMCwgaW5kKTtcbiAgICAgICAgb2JqW25hbWVdID0ge307XG4gICAgICB9XG4gICAgICByZXR1cm4gbmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbiAgcHJpdmF0ZSBnZXRPYmplY3RWYWx1ZShvYmo6IGFueSwgbmFtZTogc3RyaW5nKTogYW55IHtcbiAgICBpZiAoIW5hbWUpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBvYmpbbmFtZV07XG4gIH1cbiAgcHJpdmF0ZSBnZXRJbnRWYWx1ZShzdHI6IGFueSkge1xuICAgIGlmIChzdHIgPT0gXCIwXCIgfHwgKChzdHIgfCAwKSA+IDAgJiYgc3RyICUgMSA9PSAwKSkgcmV0dXJuIE51bWJlcihzdHIpO1xuICAgIHJldHVybiAtMTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSGFzaFRhYmxlIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuaW1wb3J0IHsgUHJvY2Vzc1ZhbHVlIH0gZnJvbSBcIi4vY29uZGl0aW9uUHJvY2Vzc1ZhbHVlXCI7XG5cbmltcG9ydCB7IE9wZXJhbmQsIEZ1bmN0aW9uT3BlcmFuZCB9IGZyb20gXCIuL2V4cHJlc3Npb25zL2V4cHJlc3Npb25zXCI7XG5pbXBvcnQgeyBDb25kaXRpb25zUGFyc2VyIH0gZnJvbSBcIi4vY29uZGl0aW9uc1BhcnNlclwiO1xuXG5leHBvcnQgY2xhc3MgRXhwcmVzc2lvblJ1bm5lckJhc2Uge1xuICBwcml2YXRlIGV4cHJlc3Npb25WYWx1ZTogc3RyaW5nO1xuICBwcml2YXRlIG9wZXJhbmQ6IE9wZXJhbmQ7XG4gIHByaXZhdGUgcHJvY2Vzc1ZhbHVlID0gbmV3IFByb2Nlc3NWYWx1ZSgpO1xuICBwcml2YXRlIHBhcnNlciA9IG5ldyBDb25kaXRpb25zUGFyc2VyKCk7XG4gIHByaXZhdGUgaXNBc3luY1ZhbHVlOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgaGFzRnVuY3Rpb25WYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGFzeW5jRnVuY0xpc3Q6IEFycmF5PEZ1bmN0aW9uT3BlcmFuZD47XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKGV4cHJlc3Npb246IHN0cmluZykge1xuICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247XG4gIH1cblxuICBwdWJsaWMgZ2V0IGV4cHJlc3Npb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5leHByZXNzaW9uVmFsdWU7XG4gIH1cblxuICBwdWJsaWMgc2V0IGV4cHJlc3Npb24odmFsdWU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmV4cHJlc3Npb24gPT09IHZhbHVlKSByZXR1cm47XG4gICAgdGhpcy5leHByZXNzaW9uVmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLm9wZXJhbmQgPSB0aGlzLnBhcnNlci5wYXJzZUV4cHJlc3Npb24odmFsdWUpO1xuICAgIHRoaXMuaGFzRnVuY3Rpb25WYWx1ZSA9IHRoaXMuY2FuUnVuKCkgPyB0aGlzLm9wZXJhbmQuaGFzRnVuY3Rpb24oKSA6IGZhbHNlO1xuICAgIHRoaXMuaXNBc3luY1ZhbHVlID0gdGhpcy5oYXNGdW5jdGlvbigpXG4gICAgICA/IHRoaXMub3BlcmFuZC5oYXNBc3luY0Z1bmN0aW9uKClcbiAgICAgIDogZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgZ2V0VmFyaWFibGVzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIGlmICghdGhpcy5vcGVyYW5kKSByZXR1cm4gW107XG5cbiAgICB2YXIgdmFyaWFibGVzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgdGhpcy5vcGVyYW5kLnNldFZhcmlhYmxlcyh2YXJpYWJsZXMpO1xuICAgIHJldHVybiB2YXJpYWJsZXM7XG4gIH1cblxuICBwdWJsaWMgaGFzRnVuY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzRnVuY3Rpb25WYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzQXN5bmMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNBc3luY1ZhbHVlO1xuICB9XG5cbiAgcHVibGljIGNhblJ1bigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLm9wZXJhbmQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgcnVuQ29yZShcbiAgICB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+ID0gbnVsbFxuICApOiBhbnkge1xuICAgIGlmICghdGhpcy5vcGVyYW5kKSByZXR1cm4gbnVsbDtcblxuICAgIHRoaXMucHJvY2Vzc1ZhbHVlLnZhbHVlcyA9IHZhbHVlcztcbiAgICB0aGlzLnByb2Nlc3NWYWx1ZS5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgICBpZiAoIXRoaXMuaXNBc3luYykgcmV0dXJuIHRoaXMucnVuVmFsdWVzKCk7XG4gICAgdGhpcy5hc3luY0Z1bmNMaXN0ID0gW107XG4gICAgdGhpcy5vcGVyYW5kLmFkZFRvQXN5bmNMaXN0KHRoaXMuYXN5bmNGdW5jTGlzdCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmFzeW5jRnVuY0xpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuYXN5bmNGdW5jTGlzdFtpXS5vbkFzeW5jUmVhZHkgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuZG9Bc3luY0Z1bmN0aW9uUmVhZHkoKTtcbiAgICAgIH07XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hc3luY0Z1bmNMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmFzeW5jRnVuY0xpc3RbaV0uZXZhbHVhdGVBc3luYyh0aGlzLnByb2Nlc3NWYWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwcml2YXRlIGRvQXN5bmNGdW5jdGlvblJlYWR5KCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hc3luY0Z1bmNMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIXRoaXMuYXN5bmNGdW5jTGlzdFtpXS5pc1JlYWR5KSByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucnVuVmFsdWVzKCk7XG4gIH1cbiAgcHJpdmF0ZSBydW5WYWx1ZXMoKTogYW55IHtcbiAgICB2YXIgcmVzID0gdGhpcy5vcGVyYW5kLmV2YWx1YXRlKHRoaXMucHJvY2Vzc1ZhbHVlKTtcbiAgICB0aGlzLmRvT25Db21wbGV0ZShyZXMpO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJvdGVjdGVkIGRvT25Db21wbGV0ZShyZXM6IGFueSkge31cbn1cblxuZXhwb3J0IGNsYXNzIENvbmRpdGlvblJ1bm5lciBleHRlbmRzIEV4cHJlc3Npb25SdW5uZXJCYXNlIHtcbiAgcHVibGljIG9uUnVuQ29tcGxldGU6IChyZXN1bHQ6IGJvb2xlYW4pID0+IHZvaWQ7XG4gIHB1YmxpYyBydW4oXG4gICAgdmFsdWVzOiBIYXNoVGFibGU8YW55PixcbiAgICBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PiA9IG51bGxcbiAgKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucnVuQ29yZSh2YWx1ZXMsIHByb3BlcnRpZXMpID09IHRydWU7XG4gIH1cbiAgcHJvdGVjdGVkIGRvT25Db21wbGV0ZShyZXM6IGFueSkge1xuICAgIGlmICghIXRoaXMub25SdW5Db21wbGV0ZSkgdGhpcy5vblJ1bkNvbXBsZXRlKHJlcyA9PSB0cnVlKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRXhwcmVzc2lvblJ1bm5lciBleHRlbmRzIEV4cHJlc3Npb25SdW5uZXJCYXNlIHtcbiAgcHVibGljIG9uUnVuQ29tcGxldGU6IChyZXN1bHQ6IGFueSkgPT4gdm9pZDtcbiAgcHVibGljIHJ1bih2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PiA9IG51bGwpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnJ1bkNvcmUodmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZG9PbkNvbXBsZXRlKHJlczogYW55KSB7XG4gICAgaWYgKCEhdGhpcy5vblJ1bkNvbXBsZXRlKSB0aGlzLm9uUnVuQ29tcGxldGUocmVzKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgT3BlcmFuZCwgQ29uc3QgfSBmcm9tIFwiLi9leHByZXNzaW9ucy9leHByZXNzaW9uc1wiO1xuaW1wb3J0IHsgU3ludGF4RXJyb3IsIHBhcnNlIH0gZnJvbSBcIi4vZXhwcmVzc2lvbnMvZXhwcmVzc2lvblBhcnNlclwiO1xuXG5leHBvcnQgY2xhc3MgQ29uZGl0aW9uc1BhcnNlckVycm9yIHtcbiAgY29uc3RydWN0b3IocHVibGljIGF0OiBudW1iZXIsIHB1YmxpYyBjb2RlOiBzdHJpbmcpIHt9XG59XG5cbmV4cG9ydCBjbGFzcyBDb25kaXRpb25zUGFyc2VyIHtcbiAgcHJpdmF0ZSBjb25kaXRpb25FcnJvcjogQ29uZGl0aW9uc1BhcnNlckVycm9yO1xuICBwcml2YXRlIHN0YXRpYyBwYXJzZXJDYWNoZTogeyBbaW5kZXg6IHN0cmluZ106IE9wZXJhbmQgfSA9IHt9O1xuXG4gIHByaXZhdGUgcGF0Y2hFeHByZXNzaW9uKHRleHQ6IHN0cmluZykge1xuICAgIHJldHVybiB0ZXh0XG4gICAgICAucmVwbGFjZSgvPT4vZywgXCI+PVwiKVxuICAgICAgLnJlcGxhY2UoLz08L2csIFwiPD1cIilcbiAgICAgIC5yZXBsYWNlKC88Pi9nLCBcIiE9XCIpXG4gICAgICAucmVwbGFjZSgvPT0vZywgXCI9IFwiKVxuICAgICAgLnJlcGxhY2UoL2VxdWFscy9nLCBcImVxdWFsIFwiKVxuICAgICAgLnJlcGxhY2UoL25vdGVxdWFscy9nLCBcIm5vdGVxdWFsIFwiKTtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVDb25kaXRpb24odGV4dDogc3RyaW5nKTogT3BlcmFuZCB7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VFeHByZXNzaW9uKHRleHQpO1xuICB9XG5cbiAgcHVibGljIHBhcnNlRXhwcmVzc2lvbih0ZXh0OiBzdHJpbmcpOiBPcGVyYW5kIHtcbiAgICB0cnkge1xuICAgICAgdmFyIHJlc3VsdCA9IENvbmRpdGlvbnNQYXJzZXIucGFyc2VyQ2FjaGVbdGV4dF07XG4gICAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVzdWx0ID0gcGFyc2UodGhpcy5wYXRjaEV4cHJlc3Npb24odGV4dCkpO1xuICAgICAgICBpZiAoIXJlc3VsdC5oYXNBc3luY0Z1bmN0aW9uKCkpIHtcbiAgICAgICAgICBDb25kaXRpb25zUGFyc2VyLnBhcnNlckNhY2hlW3RleHRdID0gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHtcbiAgICAgICAgdGhpcy5jb25kaXRpb25FcnJvciA9IG5ldyBDb25kaXRpb25zUGFyc2VyRXJyb3IoXG4gICAgICAgICAgZS5sb2NhdGlvbi5zdGFydC5vZmZzZXQsXG4gICAgICAgICAgZS5tZXNzYWdlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBlcnJvcigpOiBDb25kaXRpb25zUGFyc2VyRXJyb3Ige1xuICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbkVycm9yO1xuICB9XG59XG4iLCJpbXBvcnQgeyBzdXJ2ZXlDc3MgfSBmcm9tIFwiLi9jc3NzdGFuZGFyZFwiO1xuXG5leHBvcnQgdmFyIGRlZmF1bHRCb290c3RyYXBDc3MgPSB7XG4gIHJvb3Q6IFwic3ZfbWFpbiBzdl9ib290c3RyYXBfY3NzXCIsXG4gIGNvbnRhaW5lcjogXCJzdl9jb250YWluZXJcIixcbiAgaGVhZGVyOiBcInBhbmVsLWhlYWRpbmcgY2FyZC1oZWFkZXJcIixcbiAgYm9keTogXCJwYW5lbC1ib2R5IGNhcmQtYmxvY2sgbXQtNFwiLFxuICBib2R5RW1wdHk6IFwicGFuZWwtYm9keSBjYXJkLWJsb2NrIG10LTQgc3ZfYm9keV9lbXB0eVwiLFxuICBmb290ZXI6IFwicGFuZWwtZm9vdGVyIGNhcmQtZm9vdGVyXCIsXG4gIHRpdGxlOiBcIlwiLFxuICBkZXNjcmlwdGlvbjogXCJcIixcbiAgbG9nbzogXCJzdl9sb2dvXCIsXG4gIGxvZ29JbWFnZTogXCJzdl9sb2dvX19pbWFnZVwiLFxuICBoZWFkZXJUZXh0OiBcInN2X2hlYWRlcl9fdGV4dFwiLFxuICBuYXZpZ2F0aW9uQnV0dG9uOiBcIlwiLFxuICBjb21wbGV0ZWRQYWdlOiBcIlwiLFxuICBuYXZpZ2F0aW9uOiB7XG4gICAgY29tcGxldGU6IFwiYnRuIHN2X2NvbXBsZXRlX2J0blwiLFxuICAgIHByZXY6IFwiYnRuIHN2X3ByZXZfYnRuXCIsXG4gICAgbmV4dDogXCJidG4gc3ZfbmV4dF9idG5cIixcbiAgICBzdGFydDogXCJidG4gc3Zfc3RhcnRfYnRuXCIsXG4gICAgcHJldmlldzogXCJidG4gc3ZfcHJldmlld19idG5cIixcbiAgICBlZGl0OiBcImJ0biBzdl9lZGl0X2J0blwiLFxuICB9LFxuICBwcm9ncmVzczogXCJwcm9ncmVzcyBjZW50ZXItYmxvY2sgbXgtYXV0byBtYi00XCIsXG4gIHByb2dyZXNzQmFyOiBcInByb2dyZXNzLWJhclwiLFxuICBwcm9ncmVzc1RleHRVbmRlckJhcjogXCJzdi1oaWRkZW5cIixcbiAgcHJvZ3Jlc3NCdXR0b25zQ29udGFpbmVyQ2VudGVyOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2NvbnRhaW5lci1jZW50ZXJcIixcbiAgcHJvZ3Jlc3NCdXR0b25zQ29udGFpbmVyOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2NvbnRhaW5lclwiLFxuICBwcm9ncmVzc0J1dHRvbnNJbWFnZUJ1dHRvbkxlZnQ6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19faW1hZ2UtYnV0dG9uLWxlZnRcIixcbiAgcHJvZ3Jlc3NCdXR0b25zSW1hZ2VCdXR0b25SaWdodDogXCJzdl9wcm9ncmVzcy1idXR0b25zX19pbWFnZS1idXR0b24tcmlnaHRcIixcbiAgcHJvZ3Jlc3NCdXR0b25zSW1hZ2VCdXR0b25IaWRkZW46IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19faW1hZ2UtYnV0dG9uLS1oaWRkZW5cIixcbiAgcHJvZ3Jlc3NCdXR0b25zTGlzdENvbnRhaW5lcjogXCJzdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWNvbnRhaW5lclwiLFxuICBwcm9ncmVzc0J1dHRvbnNMaXN0OiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3RcIixcbiAgcHJvZ3Jlc3NCdXR0b25zTGlzdEVsZW1lbnRQYXNzZWQ6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdC1lbGVtZW50LS1wYXNzZWRcIixcbiAgcHJvZ3Jlc3NCdXR0b25zTGlzdEVsZW1lbnRDdXJyZW50OlxuICAgIFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdC1lbGVtZW50LS1jdXJyZW50XCIsXG4gIHByb2dyZXNzQnV0dG9uc0xpc3RFbGVtZW50Tm9uQ2xpY2thYmxlOlxuICAgIFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdC1lbGVtZW50LS1ub25jbGlja2FibGVcIixcbiAgcHJvZ3Jlc3NCdXR0b25zUGFnZVRpdGxlOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX3BhZ2UtdGl0bGVcIixcbiAgcHJvZ3Jlc3NCdXR0b25zUGFnZURlc2NyaXB0aW9uOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX3BhZ2UtZGVzY3JpcHRpb25cIixcbiAgcGFnZToge1xuICAgIHJvb3Q6IFwiXCIsXG4gICAgdGl0bGU6IFwiXCIsXG4gICAgZGVzY3JpcHRpb246IFwic21hbGxcIixcbiAgfSxcbiAgcGFnZVRpdGxlOiBcIlwiLFxuICBwYWdlRGVzY3JpcHRpb246IFwic21hbGxcIixcbiAgcm93OiBcInN2X3Jvd1wiLFxuICBxdWVzdGlvbjoge1xuICAgIG1haW5Sb290OiBcInN2X3FzdG5cIixcbiAgICBmbG93Um9vdDogXCJzdl9xX2Zsb3cgc3ZfcXN0blwiLFxuICAgIGhlYWRlcjogXCJcIixcbiAgICBoZWFkZXJMZWZ0OiBcInRpdGxlLWxlZnRcIixcbiAgICBjb250ZW50OiBcIlwiLFxuICAgIGNvbnRlbnRMZWZ0OiBcImNvbnRlbnQtbGVmdFwiLFxuICAgIHRpdGxlTGVmdFJvb3Q6IFwic3ZfcXN0bl9sZWZ0XCIsXG4gICAgdGl0bGU6IFwiXCIsXG4gICAgdGl0bGVFeHBhbmRhYmxlOiBcInN2X3FfdGl0bGVfZXhwYW5kYWJsZVwiLFxuICAgIG51bWJlcjogXCJzdl9xX251bVwiLFxuICAgIGRlc2NyaXB0aW9uOiBcInNtYWxsXCIsXG4gICAgZGVzY3JpcHRpb25VbmRlcklucHV0OiBcInNtYWxsXCIsXG4gICAgcmVxdWlyZWRUZXh0OiBcInN2X3FfcmVxdWlyZWRfdGV4dFwiLFxuICAgIGNvbW1lbnQ6IFwiZm9ybS1jb250cm9sXCIsXG4gICAgcmVxdWlyZWQ6IFwiXCIsXG4gICAgdGl0bGVSZXF1aXJlZDogXCJcIixcbiAgICBoYXNFcnJvcjogXCJoYXMtZXJyb3JcIixcbiAgICBpbmRlbnQ6IDIwLFxuICAgIGZvcm1Hcm91cDogXCJmb3JtLWdyb3VwXCIsXG4gIH0sXG4gIHBhbmVsOiB7XG4gICAgdGl0bGU6IFwic3ZfcF90aXRsZVwiLFxuICAgIHRpdGxlRXhwYW5kYWJsZTogXCJzdl9wX3RpdGxlX2V4cGFuZGFibGVcIixcbiAgICB0aXRsZU9uRXJyb3I6IFwiXCIsXG4gICAgaWNvbjogXCJzdl9wYW5lbF9pY29uXCIsXG4gICAgaWNvbkV4cGFuZGVkOiBcInN2X2V4cGFuZGVkXCIsXG4gICAgZGVzY3JpcHRpb246IFwic21hbGwgc3ZfcF9kZXNjcmlwdGlvblwiLFxuICAgIGNvbnRhaW5lcjogXCJzdl9wX2NvbnRhaW5lclwiLFxuICAgIGZvb3RlcjogXCJzdl9wX2Zvb3RlclwiLFxuICAgIG51bWJlcjogXCJzdl9xX251bVwiLFxuICAgIHJlcXVpcmVkVGV4dDogXCJzdl9xX3JlcXVpcmVkX3RleHRcIixcbiAgfSxcbiAgZXJyb3I6IHtcbiAgICByb290OiBcImFsZXJ0IGFsZXJ0LWRhbmdlclwiLFxuICAgIGljb246IFwiZ2x5cGhpY29uIGdseXBoaWNvbi1leGNsYW1hdGlvbi1zaWduXCIsXG4gICAgaXRlbTogXCJcIixcbiAgICBsb2NhdGlvblRvcDogXCJzdl9xc3RuX2Vycm9yX3RvcFwiLFxuICAgIGxvY2F0aW9uQm90dG9tOiBcInN2X3FzdG5fZXJyb3JfYm90dG9tXCIsXG4gIH0sXG4gIGJvb2xlYW46IHtcbiAgICByb290OiBcInN2X3FibG4gZm9ybS1pbmxpbmUgY2hlY2tib3hcIixcbiAgICBpdGVtOiBcInN2LWJvb2xlYW5cIixcbiAgICBjb250cm9sOiBcInN2LXZpc3VhbGx5aGlkZGVuXCIsXG4gICAgaXRlbUNoZWNrZWQ6IFwic3YtYm9vbGVhbi0tY2hlY2tlZCBjaGVja2VkXCIsXG4gICAgaXRlbUluZGV0ZXJtaW5hdGU6IFwic3YtYm9vbGVhbi0taW5kZXRlcm1pbmF0ZVwiLFxuICAgIGl0ZW1EaXNhYmxlZDogXCJzdi1ib29sZWFuLS1kaXNhYmxlZFwiLFxuICAgIHN3aXRjaDogXCJzdi1ib29sZWFuX19zd2l0Y2hcIixcbiAgICBzbGlkZXI6IFwic3YtYm9vbGVhbl9fc2xpZGVyXCIsXG4gICAgc2xpZGVyVGV4dDogXCJzdi1oaWRkZW5cIixcbiAgICBsYWJlbDogXCJzdi1ib29sZWFuX19sYWJlbCBcIixcbiAgICBkaXNhYmxlZExhYmVsOiBcInN2LWJvb2xlYW5fX2xhYmVsLS1kaXNhYmxlZFwiLFxuICAgIG1hdGVyaWFsRGVjb3JhdG9yOiBcInN2LWl0ZW1fX2RlY29yYXRvciBzdi1ib29sZWFuX19kZWNvcmF0b3IgXCIsXG4gICAgaXRlbURlY29yYXRvcjogXCJzdi1pdGVtX19zdmcgIHN2LWJvb2xlYW5fX3N2Z1wiLFxuICAgIGNoZWNrZWRQYXRoOiBcInN2LWJvb2xlYW5fX2NoZWNrZWQtcGF0aFwiLFxuICAgIHVuY2hlY2tlZFBhdGg6IFwic3YtYm9vbGVhbl9fdW5jaGVja2VkLXBhdGhcIixcbiAgICBpbmRldGVybWluYXRlUGF0aDogXCJzdi1ib29sZWFuX19pbmRldGVybWluYXRlLXBhdGhcIixcbiAgfSxcbiAgY2hlY2tib3g6IHtcbiAgICByb290OiBcInN2X3FjYmMgc3ZfcWNieCBmb3JtLWlubGluZVwiLFxuICAgIGl0ZW06IFwiY2hlY2tib3hcIixcbiAgICBpdGVtQ2hlY2tlZDogXCJjaGVja2VkXCIsXG4gICAgaXRlbVNlbGVjdEFsbDogXCJzdl9xX2NoZWNrYm94X3NlbGVjdGFsbFwiLFxuICAgIGl0ZW1Ob25lOiBcInN2X3FfY2hlY2tib3hfbm9uZVwiLFxuICAgIGl0ZW1JbmxpbmU6IFwic3ZfcV9jaGVja2JveF9pbmxpbmVcIixcbiAgICBpdGVtQ29udHJvbDogXCJcIixcbiAgICBpdGVtRGVjb3JhdG9yOiBcInN2LWhpZGRlblwiLFxuICAgIGxhYmVsOiBcIlwiLFxuICAgIGxhYmVsQ2hlY2tlZDogXCJcIixcbiAgICBjb250cm9sTGFiZWw6IFwiXCIsXG4gICAgbWF0ZXJpYWxEZWNvcmF0b3I6IFwiY2hlY2tib3gtbWF0ZXJpYWxcIixcbiAgICBvdGhlcjogXCJzdl9xX2NoZWNrYm94X290aGVyIGZvcm0tY29udHJvbFwiLFxuICAgIGNvbHVtbjogXCJzdl9xX3NlbGVjdF9jb2x1bW5cIixcbiAgfSxcbiAgcmFua2luZzoge1xuICAgIHJvb3Q6IFwic3YtcmFua2luZ1wiLFxuICAgIHJvb3RNb2JpbGVNb2Q6IFwic3YtcmFua2luZy0tbW9iaWxlXCIsXG4gICAgcm9vdERyYWdNb2Q6IFwic3YtcmFua2luZy0tZHJhZ1wiLFxuICAgIGl0ZW06IFwic3YtcmFua2luZy1pdGVtXCIsXG4gICAgaXRlbUNvbnRlbnQ6IFwic3YtcmFua2luZy1pdGVtX19jb250ZW50XCIsXG4gICAgaXRlbUluZGV4OiBcInN2LXJhbmtpbmctaXRlbV9faW5kZXhcIixcbiAgICAvLyBpdGVtVGV4dDogXCJzdi1yYW5raW5nLWl0ZW1fX3RleHRcIixcbiAgICBjb250cm9sTGFiZWw6IFwic3YtcmFua2luZy1pdGVtX190ZXh0XCIsXG4gICAgaXRlbUdob3N0Tm9kZTogXCJzdi1yYW5raW5nLWl0ZW1fX2dob3N0XCIsXG4gICAgaXRlbUljb25Db250YWluZXI6IFwic3YtcmFua2luZy1pdGVtX19pY29uLWNvbnRhaW5lclwiLFxuICAgIGl0ZW1JY29uOiBcInN2LXJhbmtpbmctaXRlbV9faWNvblwiLFxuICAgIGl0ZW1JY29uSG92ZXJNb2Q6IFwic3YtcmFua2luZy1pdGVtX19pY29uLS1ob3ZlclwiLFxuICAgIGl0ZW1JY29uRm9jdXNNb2Q6IFwic3YtcmFua2luZy1pdGVtX19pY29uLS1mb2N1c1wiLFxuICAgIGl0ZW1HaG9zdE1vZDogXCJzdi1yYW5raW5nLWl0ZW0tLWdob3N0XCIsXG4gICAgaXRlbURyYWdNb2Q6IFwic3YtcmFua2luZy1pdGVtLS1kcmFnXCIsXG4gIH0sXG4gIGNvbW1lbnQ6IFwiZm9ybS1jb250cm9sXCIsXG4gIGRyb3Bkb3duOiB7XG4gICAgcm9vdDogXCJcIixcbiAgICBjb250cm9sOiBcImZvcm0tY29udHJvbFwiLFxuICAgIG90aGVyOiBcInN2X3FfZGRfb3RoZXIgZm9ybS1jb250cm9sXCIsXG4gIH0sXG4gIGh0bWw6IHsgcm9vdDogXCJcIiB9LFxuICBpbWFnZTogeyByb290OiBcInN2X3FfaW1hZ2VcIiwgaW1hZ2U6IFwic3ZfaW1hZ2VfaW1hZ2VcIiB9LFxuICBtYXRyaXg6IHtcbiAgICByb290OiBcInRhYmxlIHN2X3FfbWF0cml4XCIsXG4gICAgbGFiZWw6IFwic3ZfcV9tX2xhYmVsXCIsXG4gICAgaXRlbUNoZWNrZWQ6IFwiY2hlY2tlZFwiLFxuICAgIGl0ZW1EZWNvcmF0b3I6IFwic3YtaGlkZGVuXCIsXG4gICAgY2VsbFRleHQ6IFwic3ZfcV9tX2NlbGxfdGV4dFwiLFxuICAgIGNlbGxUZXh0U2VsZWN0ZWQ6IFwic3ZfcV9tX2NlbGxfc2VsZWN0ZWQgYmctcHJpbWFyeVwiLFxuICAgIGNlbGxMYWJlbDogXCJzdl9xX21fY2VsbF9sYWJlbFwiLFxuICB9LFxuICBtYXRyaXhkcm9wZG93bjoge1xuICAgIHJvb3Q6IFwidGFibGVcIixcbiAgICBjZWxsOiBcInN2X21hdHJpeF9jZWxsXCIsXG4gICAgaGVhZGVyQ2VsbDogXCJzdl9tYXRyaXhfY2VsbF9oZWFkZXJcIixcbiAgICByb3c6IFwic3ZfbWF0cml4X3Jvd1wiLFxuICAgIGRldGFpbFJvdzogXCJzdl9tYXRyaXhfZGV0YWlsX3Jvd1wiLFxuICAgIGRldGFpbFJvd1RleHQ6IFwic3ZfbWF0cml4X2NlbGxfZGV0YWlsX3Jvd3RleHRcIixcbiAgICBkZXRhaWxDZWxsOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbFwiLFxuICAgIGRldGFpbEJ1dHRvbjogXCJzdl9tYXRyaXhfY2VsbF9kZXRhaWxfYnV0dG9uXCIsXG4gICAgZGV0YWlsQnV0dG9uRXhwYW5kZWQ6IFwic3ZfbWF0cml4X2NlbGxfZGV0YWlsX2J1dHRvbl9leHBhbmRlZFwiLFxuICAgIGRldGFpbEljb246IFwic3ZfZGV0YWlsX3BhbmVsX2ljb25cIixcbiAgICBkZXRhaWxJY29uRXhwYW5kZWQ6IFwic3ZfZGV0YWlsX2V4cGFuZGVkXCIsXG4gICAgZGV0YWlsUGFuZWxDZWxsOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbF9wYW5lbFwiLFxuICAgIGFjdGlvbnNDZWxsOiBcInN2X21hdHJpeF9jZWxsIHN2X21hdHJpeF9jZWxsX2FjdGlvbnNcIixcbiAgfSxcbiAgbWF0cml4ZHluYW1pYzoge1xuICAgIHJvb3Q6IFwidGFibGVcIixcbiAgICBidXR0b246IFwiYnV0dG9uXCIsXG4gICAgYnV0dG9uQWRkOiBcIlwiLFxuICAgIGJ1dHRvblJlbW92ZTogXCJcIixcbiAgICBpY29uQWRkOiBcIlwiLFxuICAgIGljb25SZW1vdmU6IFwiXCIsXG4gICAgaWNvbkRyYWc6IFwic3YtbWF0cml4ZHluYW1pY19fZHJhZy1pY29uXCIsXG4gICAgaGVhZGVyQ2VsbDogXCJzdl9tYXRyaXhfY2VsbF9oZWFkZXJcIixcbiAgICByb3c6IFwic3ZfbWF0cml4X3Jvd1wiLFxuICAgIGRldGFpbFJvdzogXCJzdl9tYXRyaXhfZGV0YWlsX3Jvd1wiLFxuICAgIGRldGFpbENlbGw6IFwic3ZfbWF0cml4X2NlbGxfZGV0YWlsXCIsXG4gICAgZGV0YWlsQnV0dG9uOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbF9idXR0b25cIixcbiAgICBkZXRhaWxCdXR0b25FeHBhbmRlZDogXCJzdl9tYXRyaXhfY2VsbF9kZXRhaWxfYnV0dG9uX2V4cGFuZGVkXCIsXG4gICAgZGV0YWlsSWNvbjogXCJzdl9kZXRhaWxfcGFuZWxfaWNvblwiLFxuICAgIGRldGFpbEljb25FeHBhbmRlZDogXCJzdl9kZXRhaWxfZXhwYW5kZWRcIixcbiAgICBkZXRhaWxQYW5lbENlbGw6IFwic3ZfbWF0cml4X2NlbGxfZGV0YWlsX3BhbmVsXCIsXG4gICAgYWN0aW9uc0NlbGw6IFwic3ZfbWF0cml4X2NlbGwgc3ZfbWF0cml4X2NlbGxfYWN0aW9uc1wiLFxuICAgIGVtcHR5Um93c1NlY3Rpb246IFwic3ZfbWF0cml4X2VtcHR5X3Jvd3Nfc2VjdGlvblwiLFxuICAgIGVtcHR5Um93c1RleHQ6IFwic3ZfbWF0cml4X2VtcHR5X3Jvd3NfdGV4dFwiLFxuICAgIGVtcHR5Um93c0J1dHRvbjogXCJcIixcbiAgfSxcbiAgcGFuZWxkeW5hbWljOiB7XG4gICAgcm9vdDogXCJcIixcbiAgICBuYXZpZ2F0aW9uOiBcInN2LXBhbmVsZHluYW1pY19fbmF2aWdhdGlvblwiLFxuICAgIHByb2dyZXNzVG9wOiBcInN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3Mgc3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy0tdG9wXCIsXG4gICAgcHJvZ3Jlc3NCb3R0b206XG4gICAgICBcInN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3Mgc3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy0tYm90dG9tXCIsXG4gICAgdGl0bGU6IFwic3YtdGl0bGUgc3YtcXVlc3Rpb25fX3RpdGxlXCIsXG4gICAgYnV0dG9uOiBcImJ1dHRvblwiLFxuICAgIGJ1dHRvbkFkZDogXCJidXR0b24gc3YtcGFuZWxkeW5hbWljX19hZGQtYnRuXCIsXG4gICAgYnV0dG9uUmVtb3ZlOiBcInN2X3BfcmVtb3ZlX2J0blwiLFxuICAgIGJ1dHRvblJlbW92ZVJpZ2h0OiBcImJ1dHRvbiBzdi1wYW5lbGR5bmFtaWNfX3JlbW92ZS1idG4tLXJpZ2h0XCIsXG4gICAgYnV0dG9uUHJldjogXCJzdi1wYW5lbGR5bmFtaWNfX3ByZXYtYnRuXCIsXG4gICAgYnV0dG9uTmV4dDogXCJzdi1wYW5lbGR5bmFtaWNfX25leHQtYnRuXCIsXG4gICAgcHJvZ3Jlc3NDb250YWluZXI6IFwic3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy1jb250YWluZXJcIixcbiAgICBwcm9ncmVzczogXCJzdi1wcm9ncmVzc1wiLFxuICAgIHByb2dyZXNzQmFyOiBcInN2LXByb2dyZXNzX19iYXJcIixcbiAgICBwcm9ncmVzc1RleHQ6IFwic3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy10ZXh0XCIsXG4gICAgcGFuZWxXcmFwcGVyOiBcInN2X3Bfd3JhcHBlclwiLFxuICAgIHBhbmVsV3JhcHBlckluUm93OiBcInN2X3Bfd3JhcHBlcl9pbl9yb3dcIixcbiAgfSxcbiAgbXVsdGlwbGV0ZXh0OiB7XG4gICAgcm9vdDogXCJ0YWJsZVwiLFxuICAgIGl0ZW1UaXRsZTogXCJcIixcbiAgICBpdGVtVmFsdWU6IFwic3ZfcV9tdF9pdGVtX3ZhbHVlIGZvcm0tY29udHJvbFwiLFxuICB9LFxuICByYWRpb2dyb3VwOiB7XG4gICAgcm9vdDogXCJzdl9xY2JjIGZvcm0taW5saW5lXCIsXG4gICAgaXRlbTogXCJyYWRpb1wiLFxuICAgIGl0ZW1DaGVja2VkOiBcImNoZWNrZWRcIixcbiAgICBpdGVtSW5saW5lOiBcInN2X3FfcmFkaW9ncm91cF9pbmxpbmVcIixcbiAgICBsYWJlbDogXCJcIixcbiAgICBsYWJlbENoZWNrZWQ6IFwiXCIsXG4gICAgaXRlbUNvbnRyb2w6IFwiXCIsXG4gICAgaXRlbURlY29yYXRvcjogXCJzdi1oaWRkZW5cIixcbiAgICBjb250cm9sTGFiZWw6IFwiXCIsXG4gICAgbWF0ZXJpYWxEZWNvcmF0b3I6IFwiY2lyY2xlXCIsXG4gICAgb3RoZXI6IFwic3ZfcV9yYWRpb2dyb3VwX290aGVyIGZvcm0tY29udHJvbFwiLFxuICAgIGNsZWFyQnV0dG9uOiBcInN2X3FfcmFkaW9ncm91cF9jbGVhciBidXR0b25cIixcbiAgICBjb2x1bW46IFwic3ZfcV9zZWxlY3RfY29sdW1uXCIsXG4gIH0sXG4gIGJ1dHRvbmdyb3VwOiB7XG4gICAgcm9vdDogXCJzdi1idXR0b24tZ3JvdXBcIixcbiAgICBpdGVtOiBcInN2LWJ1dHRvbi1ncm91cF9faXRlbVwiLFxuICAgIGl0ZW1JY29uOiBcInN2LWJ1dHRvbi1ncm91cF9faXRlbS1pY29uXCIsXG4gICAgaXRlbURlY29yYXRvcjogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW0tZGVjb3JhdG9yXCIsXG4gICAgaXRlbUNhcHRpb246IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLWNhcHRpb25cIixcbiAgICBpdGVtSG92ZXI6IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLS1ob3ZlclwiLFxuICAgIGl0ZW1TZWxlY3RlZDogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW0tLXNlbGVjdGVkXCIsXG4gICAgaXRlbURpc2FibGVkOiBcInN2LWJ1dHRvbi1ncm91cF9faXRlbS0tZGlzYWJsZWRcIixcbiAgICBpdGVtQ29udHJvbDogXCJzdi12aXN1YWxseWhpZGRlblwiLFxuICB9LFxuICBpbWFnZXBpY2tlcjoge1xuICAgIHJvb3Q6IFwic3ZfaW1nc2VsXCIsXG4gICAgaXRlbTogXCJzdl9xX2ltZ3NlbFwiLFxuICAgIGl0ZW1DaGVja2VkOiBcImNoZWNrZWRcIixcbiAgICBpdGVtSW5saW5lOiBcInN2X3FfaW1hZ2VwaWNrZXJfaW5saW5lXCIsXG4gICAgbGFiZWw6IFwic3ZfcV9pbWdzZWxfbGFiZWxcIixcbiAgICBpdGVtQ29udHJvbDogXCJzdl9xX2ltZ3NlbF9jb250cm9sX2l0ZW1cIixcbiAgICBpbWFnZTogXCJzdl9xX2ltZ3NlbF9pbWFnZVwiLFxuICAgIGl0ZW1UZXh0OiBcInN2X3FfaW1nc2VsX3RleHRcIixcbiAgICBjbGVhckJ1dHRvbjogXCJzdl9xX3JhZGlvZ3JvdXBfY2xlYXJcIixcbiAgfSxcbiAgcmF0aW5nOiB7XG4gICAgcm9vdDogXCJidG4tZ3JvdXBcIixcbiAgICBpdGVtOiBcImJ0biBidG4tZGVmYXVsdCBidG4tc2Vjb25kYXJ5XCIsXG4gICAgc2VsZWN0ZWQ6IFwiYWN0aXZlXCIsXG4gICAgbWluVGV4dDogXCJzdl9xX3JhdGluZ19taW5fdGV4dFwiLFxuICAgIGl0ZW1UZXh0OiBcInN2X3FfcmF0aW5nX2l0ZW1fdGV4dFwiLFxuICAgIG1heFRleHQ6IFwic3ZfcV9yYXRpbmdfbWF4X3RleHRcIixcbiAgICBkaXNhYmxlZDogXCJcIixcbiAgfSxcbiAgdGV4dDogXCJmb3JtLWNvbnRyb2xcIixcbiAgZXhwcmVzc2lvbjogXCJmb3JtLWNvbnRyb2xcIixcbiAgZmlsZToge1xuICAgIHJvb3Q6IFwic3ZfcV9maWxlXCIsXG4gICAgcGxhY2Vob2xkZXJJbnB1dDogXCJzdl9xX2ZpbGVfcGxhY2Vob2xkZXJcIixcbiAgICBwcmV2aWV3OiBcInN2X3FfZmlsZV9wcmV2aWV3XCIsXG4gICAgcmVtb3ZlQnV0dG9uOiBcInN2X3FfZmlsZV9yZW1vdmVfYnV0dG9uXCIsXG4gICAgZmlsZUlucHV0OiBcInN2X3FfZmlsZV9pbnB1dFwiLFxuICAgIHJlbW92ZUZpbGU6IFwic3ZfcV9maWxlX3JlbW92ZVwiLFxuICAgIHJlbW92ZUZpbGVTdmc6IFwic3YtaGlkZGVuXCIsXG4gICAgZmlsZURlY29yYXRvcjogXCJzdi1oaWRkZW5cIixcbiAgICBmaWxlU2lnbkJvdHRvbTogXCJzdi1oaWRkZW5cIixcbiAgICByZW1vdmVCdXR0b25Cb3R0b206IFwic3YtaGlkZGVuXCIsXG4gIH0sXG4gIHNpZ25hdHVyZXBhZDoge1xuICAgIHJvb3Q6IFwic3ZfcV9zaWduYXR1cmVwYWQgc2pzX3NwX2NvbnRhaW5lclwiLFxuICAgIGNvbnRyb2xzOiBcInNqc19zcF9jb250cm9sc1wiLFxuICAgIHBsYWNlaG9sZGVyOiBcInNqc19zcF9wbGFjZWhvbGRlclwiLFxuICAgIGNsZWFyQnV0dG9uOiBcInNqc19zcF9jbGVhclwiLFxuICB9LFxuICBzYXZlRGF0YToge1xuICAgIHJvb3Q6IFwiXCIsXG4gICAgc2F2aW5nOiBcImFsZXJ0IGFsZXJ0LWluZm9cIixcbiAgICBlcnJvcjogXCJhbGVydCBhbGVydC1kYW5nZXJcIixcbiAgICBzdWNjZXNzOiBcImFsZXJ0IGFsZXJ0LXN1Y2Nlc3NcIixcbiAgICBzYXZlQWdhaW5CdXR0b246IFwiXCIsXG4gIH0sXG4gIHdpbmRvdzoge1xuICAgIHJvb3Q6IFwibW9kYWwtY29udGVudFwiLFxuICAgIGJvZHk6IFwibW9kYWwtYm9keVwiLFxuICAgIGhlYWRlcjoge1xuICAgICAgcm9vdDogXCJtb2RhbC1oZWFkZXIgcGFuZWwtdGl0bGVcIixcbiAgICAgIHRpdGxlOiBcInB1bGwtbGVmdFwiLFxuICAgICAgYnV0dG9uOiBcImdseXBoaWNvbiBwdWxsLXJpZ2h0XCIsXG4gICAgICBidXR0b25FeHBhbmRlZDogXCJnbHlwaGljb24gcHVsbC1yaWdodCBnbHlwaGljb24tY2hldnJvbi11cFwiLFxuICAgICAgYnV0dG9uQ29sbGFwc2VkOiBcImdseXBoaWNvbiBwdWxsLXJpZ2h0IGdseXBoaWNvbi1jaGV2cm9uLWRvd25cIixcbiAgICB9LFxuICB9LFxufTtcbig8YW55PnN1cnZleUNzcylbXCJib290c3RyYXBcIl0gPSBkZWZhdWx0Qm9vdHN0cmFwQ3NzO1xuIiwiaW1wb3J0IHsgc3VydmV5Q3NzIH0gZnJvbSBcIi4vY3Nzc3RhbmRhcmRcIjtcblxuZXhwb3J0IHZhciBkZWZhdWx0Qm9vdHN0cmFwTWF0ZXJpYWxDc3MgPSB7XG4gIHJvb3Q6IFwic3ZfbWFpbiBzdl9ib290c3RyYXBtYXRlcmlhbF9jc3NcIixcbiAgY29udGFpbmVyOiBcInN2X2NvbnRhaW5lclwiLFxuICBoZWFkZXI6IFwiY2FyZC1oZWFkaW5nXCIsXG4gIGJvZHk6IFwiY2FyZC1ib2R5XCIsXG4gIGJvZHlFbXB0eTogXCJjYXJkLWJvZHkgc3ZfYm9keV9lbXB0eVwiLFxuICBmb290ZXI6IFwiY2FyZC1mb290ZXJcIixcbiAgdGl0bGU6IFwiXCIsXG4gIGRlc2NyaXB0aW9uOiBcIlwiLFxuICBsb2dvOiBcInN2X2xvZ29cIixcbiAgbG9nb0ltYWdlOiBcInN2X2xvZ29fX2ltYWdlXCIsXG4gIGhlYWRlclRleHQ6IFwic3ZfaGVhZGVyX190ZXh0XCIsXG4gIG5hdmlnYXRpb25CdXR0b246IFwiXCIsXG4gIGNvbXBsZXRlZFBhZ2U6IFwiXCIsXG4gIG5hdmlnYXRpb246IHtcbiAgICBjb21wbGV0ZTogXCJidG4gc3ZfY29tcGxldGVfYnRuIGJ0bi1wcmltYXJ5XCIsXG4gICAgcHJldjogXCJidG4gc3ZfcHJldl9idG4gYnRuLXByaW1hcnlcIixcbiAgICBuZXh0OiBcImJ0biBzdl9uZXh0X2J0biBidG4tcHJpbWFyeVwiLFxuICAgIHN0YXJ0OiBcImJ0biBzdl9zdGFydF9idG4gYnRuLXByaW1hcnlcIixcbiAgICBwcmV2aWV3OiBcImJ0biBzdl9wcmV2aWV3X2J0biBidG4tcHJpbWFyeVwiLFxuICAgIGVkaXQ6IFwiYnRuIHN2X2VkaXRfYnRuIGJ0bi1wcmltYXJ5XCIsXG4gIH0sXG4gIHByb2dyZXNzOiBcInByb2dyZXNzIGNlbnRlci1ibG9jayBteC1hdXRvIG1iLTRcIixcbiAgcHJvZ3Jlc3NCYXI6IFwicHJvZ3Jlc3MtYmFyXCIsXG4gIHByb2dyZXNzVGV4dFVuZGVyQmFyOiBcInN2LWhpZGRlblwiLFxuICBwcm9ncmVzc0J1dHRvbnNDb250YWluZXJDZW50ZXI6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fY29udGFpbmVyLWNlbnRlclwiLFxuICBwcm9ncmVzc0J1dHRvbnNDb250YWluZXI6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fY29udGFpbmVyXCIsXG4gIHByb2dyZXNzQnV0dG9uc0ltYWdlQnV0dG9uTGVmdDogXCJzdl9wcm9ncmVzcy1idXR0b25zX19pbWFnZS1idXR0b24tbGVmdFwiLFxuICBwcm9ncmVzc0J1dHRvbnNJbWFnZUJ1dHRvblJpZ2h0OiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2ltYWdlLWJ1dHRvbi1yaWdodFwiLFxuICBwcm9ncmVzc0J1dHRvbnNJbWFnZUJ1dHRvbkhpZGRlbjogXCJzdl9wcm9ncmVzcy1idXR0b25zX19pbWFnZS1idXR0b24tLWhpZGRlblwiLFxuICBwcm9ncmVzc0J1dHRvbnNMaXN0Q29udGFpbmVyOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QtY29udGFpbmVyXCIsXG4gIHByb2dyZXNzQnV0dG9uc0xpc3Q6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdFwiLFxuICBwcm9ncmVzc0J1dHRvbnNMaXN0RWxlbWVudFBhc3NlZDogXCJzdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLXBhc3NlZFwiLFxuICBwcm9ncmVzc0J1dHRvbnNMaXN0RWxlbWVudEN1cnJlbnQ6XG4gICAgXCJzdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLWN1cnJlbnRcIixcbiAgcHJvZ3Jlc3NCdXR0b25zTGlzdEVsZW1lbnROb25DbGlja2FibGU6XG4gICAgXCJzdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLW5vbmNsaWNrYWJsZVwiLFxuICBwcm9ncmVzc0J1dHRvbnNQYWdlVGl0bGU6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fcGFnZS10aXRsZVwiLFxuICBwcm9ncmVzc0J1dHRvbnNQYWdlRGVzY3JpcHRpb246IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fcGFnZS1kZXNjcmlwdGlvblwiLFxuICBwYWdlOiB7XG4gICAgcm9vdDogXCJcIixcbiAgICB0aXRsZTogXCJcIixcbiAgICBkZXNjcmlwdGlvbjogXCJzbWFsbFwiLFxuICB9LFxuICBwYWdlVGl0bGU6IFwiXCIsXG4gIHBhZ2VEZXNjcmlwdGlvbjogXCJzbWFsbFwiLFxuICByb3c6IFwic3Zfcm93XCIsXG4gIHF1ZXN0aW9uOiB7XG4gICAgbWFpblJvb3Q6IFwic3ZfcXN0biBmb3JtLWdyb3VwIGJtZC1mb3JtLWdyb3VwXCIsXG4gICAgZmxvd1Jvb3Q6IFwic3ZfcV9mbG93IGZvcm0tZ3JvdXAgYm1kLWZvcm0tZ3JvdXBcIixcbiAgICBoZWFkZXI6IFwiXCIsXG4gICAgaGVhZGVyTGVmdDogXCJ0aXRsZS1sZWZ0XCIsXG4gICAgY29udGVudDogXCJcIixcbiAgICBjb250ZW50TGVmdDogXCJjb250ZW50LWxlZnRcIixcbiAgICB0aXRsZUxlZnRSb290OiBcInN2X3FzdG5fbGVmdFwiLFxuICAgIHJlcXVpcmVkVGV4dDogXCJzdl9xX3JlcXVpcmVkX3RleHRcIixcbiAgICB0aXRsZTogXCJcIixcbiAgICB0aXRsZUV4cGFuZGFibGU6IFwic3ZfcV90aXRsZV9leHBhbmRhYmxlXCIsXG4gICAgbnVtYmVyOiBcInN2X3FfbnVtXCIsXG4gICAgZGVzY3JpcHRpb246IFwic21hbGxcIixcbiAgICBkZXNjcmlwdGlvblVuZGVySW5wdXQ6IFwic21hbGxcIixcbiAgICBjb21tZW50OiBcImZvcm0tY29udHJvbFwiLFxuICAgIHJlcXVpcmVkOiBcIlwiLFxuICAgIHRpdGxlUmVxdWlyZWQ6IFwiXCIsXG4gICAgaGFzRXJyb3I6IFwiaGFzLWVycm9yXCIsXG4gICAgaW5kZW50OiAyMCxcbiAgICBmb3JtR3JvdXA6IFwiZm9ybS1ncm91cCBibWQtZm9ybS1ncm91cFwiLFxuICB9LFxuICBwYW5lbDoge1xuICAgIHRpdGxlOiBcInN2X3BfdGl0bGVcIixcbiAgICB0aXRsZUV4cGFuZGFibGU6IFwic3ZfcF90aXRsZV9leHBhbmRhYmxlXCIsXG4gICAgdGl0bGVPbkVycm9yOiBcIlwiLFxuICAgIGljb246IFwic3ZfcGFuZWxfaWNvblwiLFxuICAgIGljb25FeHBhbmRlZDogXCJzdl9leHBhbmRlZFwiLFxuICAgIGRlc2NyaXB0aW9uOiBcInNtYWxsIHN2X3BfZGVzY3JpcHRpb25cIixcbiAgICBjb250YWluZXI6IFwic3ZfcF9jb250YWluZXJcIixcbiAgICBmb290ZXI6IFwic3ZfcF9mb290ZXJcIixcbiAgICBudW1iZXI6IFwic3ZfcV9udW1cIixcbiAgICByZXF1aXJlZFRleHQ6IFwic3ZfcV9yZXF1aXJlZF90ZXh0XCIsXG4gIH0sXG4gIGVycm9yOiB7XG4gICAgcm9vdDogXCJhbGVydCBhbGVydC1kYW5nZXJcIixcbiAgICBpY29uOiBcImdseXBoaWNvbiBnbHlwaGljb24tZXhjbGFtYXRpb24tc2lnblwiLFxuICAgIGl0ZW06IFwiXCIsXG4gICAgbG9jYXRpb25Ub3A6IFwic3ZfcXN0bl9lcnJvcl90b3BcIixcbiAgICBsb2NhdGlvbkJvdHRvbTogXCJzdl9xc3RuX2Vycm9yX2JvdHRvbVwiLFxuICB9LFxuXG4gIGJvb2xlYW46IHtcbiAgICByb290OiBcInN2X3FibG4gY2hlY2tib3hcIixcbiAgICBpdGVtOiBcInN2LWJvb2xlYW5cIixcbiAgICBjb250cm9sOiBcInN2LXZpc3VhbGx5aGlkZGVuXCIsXG4gICAgaXRlbUNoZWNrZWQ6IFwic3YtYm9vbGVhbi0tY2hlY2tlZCBjaGVja2VkXCIsXG4gICAgaXRlbUluZGV0ZXJtaW5hdGU6IFwic3YtYm9vbGVhbi0taW5kZXRlcm1pbmF0ZVwiLFxuICAgIGl0ZW1EaXNhYmxlZDogXCJzdi1ib29sZWFuLS1kaXNhYmxlZFwiLFxuICAgIHN3aXRjaDogXCJzdi1ib29sZWFuX19zd2l0Y2hcIixcbiAgICBzbGlkZXI6IFwic3YtYm9vbGVhbl9fc2xpZGVyXCIsXG4gICAgc2xpZGVyVGV4dDogXCJzdi1oaWRkZW5cIixcbiAgICBsYWJlbDogXCJzdi1ib29sZWFuX19sYWJlbCBcIixcbiAgICBkaXNhYmxlZExhYmVsOiBcInN2LWJvb2xlYW5fX2xhYmVsLS1kaXNhYmxlZFwiLFxuICAgIG1hdGVyaWFsRGVjb3JhdG9yOiBcInN2LWl0ZW1fX2RlY29yYXRvciBzdi1ib29sZWFuX19kZWNvcmF0b3IgXCIsXG4gICAgaXRlbURlY29yYXRvcjogXCJzdi1pdGVtX19zdmcgIHN2LWJvb2xlYW5fX3N2Z1wiLFxuICAgIGNoZWNrZWRQYXRoOiBcInN2LWJvb2xlYW5fX2NoZWNrZWQtcGF0aFwiLFxuICAgIHVuY2hlY2tlZFBhdGg6IFwic3YtYm9vbGVhbl9fdW5jaGVja2VkLXBhdGhcIixcbiAgICBpbmRldGVybWluYXRlUGF0aDogXCJzdi1ib29sZWFuX19pbmRldGVybWluYXRlLXBhdGhcIixcbiAgfSxcbiAgY2hlY2tib3g6IHtcbiAgICByb290OiBcInN2X3FjYnhcIixcbiAgICBpdGVtOiBcImNoZWNrYm94XCIsXG4gICAgaXRlbUNoZWNrZWQ6IFwiY2hlY2tlZFwiLFxuICAgIGl0ZW1TZWxlY3RBbGw6IFwic3ZfcV9jaGVja2JveF9zZWxlY3RhbGxcIixcbiAgICBpdGVtTm9uZTogXCJzdl9xX2NoZWNrYm94X25vbmVcIixcbiAgICBpdGVtSW5saW5lOiBcInN2X3FfY2hlY2tib3hfaW5saW5lXCIsXG4gICAgaXRlbURlY29yYXRvcjogXCJzdi1oaWRkZW5cIixcbiAgICBpdGVtQ29udHJvbDogXCJcIixcbiAgICBsYWJlbDogXCJcIixcbiAgICBsYWJlbENoZWNrZWQ6IFwiXCIsXG4gICAgY29udHJvbExhYmVsOiBcIlwiLFxuICAgIG1hdGVyaWFsRGVjb3JhdG9yOiBcImNoZWNrYm94LWRlY29yYXRvclwiLFxuICAgIG90aGVyOiBcInN2X3FfY2hlY2tib3hfb3RoZXIgZm9ybS1jb250cm9sXCIsXG4gICAgY29sdW1uOiBcInN2X3Ffc2VsZWN0X2NvbHVtblwiLFxuICB9LFxuICByYW5raW5nOiB7XG4gICAgcm9vdDogXCJzdi1yYW5raW5nXCIsXG4gICAgcm9vdE1vYmlsZU1vZDogXCJzdi1yYW5raW5nLS1tb2JpbGVcIixcbiAgICByb290RHJhZ01vZDogXCJzdi1yYW5raW5nLS1kcmFnXCIsXG4gICAgaXRlbTogXCJzdi1yYW5raW5nLWl0ZW1cIixcbiAgICBpdGVtQ29udGVudDogXCJzdi1yYW5raW5nLWl0ZW1fX2NvbnRlbnRcIixcbiAgICBpdGVtSW5kZXg6IFwic3YtcmFua2luZy1pdGVtX19pbmRleFwiLFxuICAgIC8vIGl0ZW1UZXh0OiBcInN2LXJhbmtpbmctaXRlbV9fdGV4dFwiLFxuICAgIGNvbnRyb2xMYWJlbDogXCJzdi1yYW5raW5nLWl0ZW1fX3RleHRcIixcbiAgICBpdGVtR2hvc3ROb2RlOiBcInN2LXJhbmtpbmctaXRlbV9fZ2hvc3RcIixcbiAgICBpdGVtSWNvbkNvbnRhaW5lcjogXCJzdi1yYW5raW5nLWl0ZW1fX2ljb24tY29udGFpbmVyXCIsXG4gICAgaXRlbUljb246IFwic3YtcmFua2luZy1pdGVtX19pY29uXCIsXG4gICAgaXRlbUljb25Ib3Zlck1vZDogXCJzdi1yYW5raW5nLWl0ZW1fX2ljb24tLWhvdmVyXCIsXG4gICAgaXRlbUljb25Gb2N1c01vZDogXCJzdi1yYW5raW5nLWl0ZW1fX2ljb24tLWZvY3VzXCIsXG4gICAgaXRlbUdob3N0TW9kOiBcInN2LXJhbmtpbmctaXRlbS0tZ2hvc3RcIixcbiAgICBpdGVtRHJhZ01vZDogXCJzdi1yYW5raW5nLWl0ZW0tLWRyYWdcIixcbiAgfSxcbiAgY29tbWVudDogXCJmb3JtLWNvbnRyb2xcIixcbiAgZHJvcGRvd246IHtcbiAgICByb290OiBcIlwiLFxuICAgIGNvbnRyb2w6IFwiZm9ybS1jb250cm9sXCIsXG4gICAgb3RoZXI6IFwic3ZfcV9kZF9vdGhlciBmb3JtLWNvbnRyb2xcIixcbiAgfSxcbiAgaHRtbDogeyByb290OiBcIlwiIH0sXG4gIGltYWdlOiB7IHJvb3Q6IFwic3ZfcV9pbWFnZVwiLCBpbWFnZTogXCJzdl9pbWFnZV9pbWFnZVwiIH0sXG4gIG1hdHJpeDoge1xuICAgIHJvb3Q6IFwidGFibGUgc3ZfcV9tYXRyaXhcIixcbiAgICByb3c6IFwiZm9ybS1ncm91cCBibWQtZm9ybS1ncm91cFwiLFxuICAgIGxhYmVsOiBcInN2X3FfbV9sYWJlbCByYWRpby1pbmxpbmVcIixcbiAgICBjZWxsVGV4dDogXCJzdl9xX21fY2VsbF90ZXh0XCIsXG4gICAgY2VsbFRleHRTZWxlY3RlZDogXCJzdl9xX21fY2VsbF9zZWxlY3RlZCBiZy1wcmltYXJ5XCIsXG4gICAgY2VsbExhYmVsOiBcInN2X3FfbV9jZWxsX2xhYmVsXCIsXG4gICAgaXRlbVZhbHVlOiBcImZvcm0tY29udHJvbFwiLFxuICAgIGl0ZW1DaGVja2VkOiBcImNoZWNrZWRcIixcbiAgICBpdGVtRGVjb3JhdG9yOiBcInN2LWhpZGRlblwiLFxuICAgIG1hdGVyaWFsRGVjb3JhdG9yOiBcImJtZC1yYWRpb1wiLFxuICB9LFxuICBtYXRyaXhkcm9wZG93bjoge1xuICAgIHJvb3Q6IFwidGFibGVcIixcbiAgICBpdGVtVmFsdWU6IFwiZm9ybS1ncm91cCBibWQtZm9ybS1ncm91cFwiLFxuICAgIGhlYWRlckNlbGw6IFwic3ZfbWF0cml4X2NlbGxfaGVhZGVyXCIsXG4gICAgcm93OiBcInN2X21hdHJpeF9yb3dcIixcbiAgICBkZXRhaWxSb3c6IFwic3ZfbWF0cml4X2RldGFpbF9yb3dcIixcbiAgICBkZXRhaWxSb3dUZXh0OiBcInN2X21hdHJpeF9jZWxsX2RldGFpbF9yb3d0ZXh0XCIsXG4gICAgZGV0YWlsQ2VsbDogXCJzdl9tYXRyaXhfY2VsbF9kZXRhaWxcIixcbiAgICBkZXRhaWxCdXR0b246IFwic3ZfbWF0cml4X2NlbGxfZGV0YWlsX2J1dHRvblwiLFxuICAgIGRldGFpbEJ1dHRvbkV4cGFuZGVkOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbF9idXR0b25fZXhwYW5kZWRcIixcbiAgICBkZXRhaWxJY29uOiBcInN2X2RldGFpbF9wYW5lbF9pY29uXCIsXG4gICAgZGV0YWlsSWNvbkV4cGFuZGVkOiBcInN2X2RldGFpbF9leHBhbmRlZFwiLFxuICAgIGRldGFpbFBhbmVsQ2VsbDogXCJzdl9tYXRyaXhfY2VsbF9kZXRhaWxfcGFuZWxcIixcbiAgICBhY3Rpb25zQ2VsbDogXCJzdl9tYXRyaXhfY2VsbCBzdl9tYXRyaXhfY2VsbF9hY3Rpb25zXCIsXG4gIH0sXG4gIG1hdHJpeGR5bmFtaWM6IHtcbiAgICBtYWluUm9vdDogXCJzdl9xc3RuXCIsXG4gICAgZmxvd1Jvb3Q6IFwic3ZfcV9mbG93XCIsXG4gICAgcm9vdDogXCJ0YWJsZVwiLFxuICAgIGJ1dHRvbjogXCJidG4gYnRuLXByaW1hcnlcIixcbiAgICBpdGVtVmFsdWU6IFwiZm9ybS1ncm91cCBibWQtZm9ybS1ncm91cFwiLFxuICAgIGJ1dHRvbkFkZDogXCJcIixcbiAgICBidXR0b25SZW1vdmU6IFwiXCIsXG4gICAgaWNvbkFkZDogXCJcIixcbiAgICBpY29uUmVtb3ZlOiBcIlwiLFxuICAgIGljb25EcmFnOiBcInN2LW1hdHJpeGR5bmFtaWNfX2RyYWctaWNvblwiLFxuICAgIGhlYWRlckNlbGw6IFwic3ZfbWF0cml4X2NlbGxfaGVhZGVyXCIsXG4gICAgcm93OiBcInN2X21hdHJpeF9yb3dcIixcbiAgICBkZXRhaWxSb3c6IFwic3ZfbWF0cml4X2RldGFpbF9yb3dcIixcbiAgICBkZXRhaWxDZWxsOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbFwiLFxuICAgIGRldGFpbEJ1dHRvbjogXCJzdl9tYXRyaXhfY2VsbF9kZXRhaWxfYnV0dG9uXCIsXG4gICAgZGV0YWlsQnV0dG9uRXhwYW5kZWQ6IFwic3ZfbWF0cml4X2NlbGxfZGV0YWlsX2J1dHRvbl9leHBhbmRlZFwiLFxuICAgIGRldGFpbEljb246IFwic3ZfZGV0YWlsX3BhbmVsX2ljb25cIixcbiAgICBkZXRhaWxJY29uRXhwYW5kZWQ6IFwic3ZfZGV0YWlsX2V4cGFuZGVkXCIsXG4gICAgZGV0YWlsUGFuZWxDZWxsOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbF9wYW5lbFwiLFxuICAgIGFjdGlvbnNDZWxsOiBcInN2X21hdHJpeF9jZWxsIHN2X21hdHJpeF9jZWxsX2FjdGlvbnNcIixcbiAgICBlbXB0eVJvd3NTZWN0aW9uOiBcInN2X21hdHJpeF9lbXB0eV9yb3dzX3NlY3Rpb25cIixcbiAgICBlbXB0eVJvd3NUZXh0OiBcInN2X21hdHJpeF9lbXB0eV9yb3dzX3RleHRcIixcbiAgICBlbXB0eVJvd3NCdXR0b246IFwiXCIsXG4gIH0sXG4gIHBhbmVsZHluYW1pYzoge1xuICAgIHJvb3Q6IFwiXCIsXG4gICAgbmF2aWdhdGlvbjogXCJzdi1wYW5lbGR5bmFtaWNfX25hdmlnYXRpb25cIixcbiAgICBwcm9ncmVzc1RvcDogXCJzdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzIHN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3MtLXRvcFwiLFxuICAgIHByb2dyZXNzQm90dG9tOlxuICAgICAgXCJzdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzIHN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3MtLWJvdHRvbVwiLFxuICAgIHRpdGxlOiBcInN2LXRpdGxlIHN2LXF1ZXN0aW9uX190aXRsZVwiLFxuICAgIGJ1dHRvbjogXCJidXR0b25cIixcbiAgICBidXR0b25BZGQ6IFwiYnV0dG9uIHN2LXBhbmVsZHluYW1pY19fYWRkLWJ0biBidG4gYnRuLXByaW1hcnlcIixcbiAgICBidXR0b25SZW1vdmU6IFwiYnV0dG9uIHN2LXBhbmVsZHluYW1pY19fcmVtb3ZlLWJ0biBidG4gYnRuLXByaW1hcnlcIixcbiAgICBidXR0b25SZW1vdmVSaWdodDogXCJzdi1wYW5lbGR5bmFtaWNfX3JlbW92ZS1idG4tLXJpZ2h0XCIsXG4gICAgYnV0dG9uUHJldjogXCJzdi1wYW5lbGR5bmFtaWNfX3ByZXYtYnRuXCIsXG4gICAgYnV0dG9uTmV4dDogXCJzdi1wYW5lbGR5bmFtaWNfX25leHQtYnRuXCIsXG4gICAgcHJvZ3Jlc3NDb250YWluZXI6IFwic3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy1jb250YWluZXJcIixcbiAgICBwcm9ncmVzczogXCJzdi1wcm9ncmVzc1wiLFxuICAgIHByb2dyZXNzQmFyOiBcInN2LXByb2dyZXNzX19iYXJcIixcbiAgICBwcm9ncmVzc1RleHQ6IFwic3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy10ZXh0XCIsXG4gICAgcGFuZWxXcmFwcGVyOiBcInN2X3Bfd3JhcHBlclwiLFxuICAgIHBhbmVsV3JhcHBlckluUm93OiBcInN2X3Bfd3JhcHBlcl9pbl9yb3dcIixcbiAgfSxcbiAgbXVsdGlwbGV0ZXh0OiB7XG4gICAgcm9vdDogXCJ0YWJsZVwiLFxuICAgIGl0ZW1UaXRsZTogXCJcIixcbiAgICByb3c6IFwiZm9ybS1ncm91cCBibWQtZm9ybS1ncm91cFwiLFxuICAgIGl0ZW1WYWx1ZTogXCJzdl9xX210X2l0ZW1fdmFsdWUgZm9ybS1jb250cm9sXCIsXG4gIH0sXG4gIHJhZGlvZ3JvdXA6IHtcbiAgICByb290OiBcIlwiLFxuICAgIGl0ZW06IFwicmFkaW9cIixcbiAgICBpdGVtQ2hlY2tlZDogXCJjaGVja2VkXCIsXG4gICAgaXRlbUlubGluZTogXCJzdl9xX3JhZGlvZ3JvdXBfaW5saW5lXCIsXG4gICAgaXRlbURlY29yYXRvcjogXCJzdi1oaWRkZW5cIixcbiAgICBsYWJlbDogXCJcIixcbiAgICBsYWJlbENoZWNrZWQ6IFwiXCIsXG4gICAgaXRlbUNvbnRyb2w6IFwiXCIsXG4gICAgY29udHJvbExhYmVsOiBcInN2X3FfcmFkaW9ncm91cF9jb250cm9sX2xhYmVsXCIsXG4gICAgbWF0ZXJpYWxEZWNvcmF0b3I6IFwiYm1kLXJhZGlvXCIsXG4gICAgb3RoZXI6IFwic3ZfcV9yYWRpb2dyb3VwX290aGVyIGZvcm0tY29udHJvbFwiLFxuICAgIGNsZWFyQnV0dG9uOiBcInN2X3FfcmFkaW9ncm91cF9jbGVhciBidXR0b24gYnRuIGJ0bi1wcmltYXJ5XCIsXG4gICAgY29sdW1uOiBcInN2X3Ffc2VsZWN0X2NvbHVtblwiLFxuICB9LFxuICBidXR0b25ncm91cDoge1xuICAgIHJvb3Q6IFwic3YtYnV0dG9uLWdyb3VwXCIsXG4gICAgaXRlbTogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW1cIixcbiAgICBpdGVtSWNvbjogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW0taWNvblwiLFxuICAgIGl0ZW1EZWNvcmF0b3I6IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLWRlY29yYXRvclwiLFxuICAgIGl0ZW1DYXB0aW9uOiBcInN2LWJ1dHRvbi1ncm91cF9faXRlbS1jYXB0aW9uXCIsXG4gICAgaXRlbVNlbGVjdGVkOiBcInN2LWJ1dHRvbi1ncm91cF9faXRlbS0tc2VsZWN0ZWRcIixcbiAgICBpdGVtSG92ZXI6IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLS1ob3ZlclwiLFxuICAgIGl0ZW1EaXNhYmxlZDogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW0tLWRpc2FibGVkXCIsXG4gICAgaXRlbUNvbnRyb2w6IFwic3YtdmlzdWFsbHloaWRkZW5cIixcbiAgfSxcbiAgaW1hZ2VwaWNrZXI6IHtcbiAgICByb290OiBcInN2X2ltZ3NlbFwiLFxuICAgIGl0ZW06IFwic3ZfcV9pbWdzZWxcIixcbiAgICBpdGVtQ2hlY2tlZDogXCJjaGVja2VkXCIsXG4gICAgaXRlbUlubGluZTogXCJzdl9xX2ltYWdlcGlja2VyX2lubGluZVwiLFxuICAgIGxhYmVsOiBcInN2X3FfaW1nc2VsX2xhYmVsXCIsXG4gICAgaXRlbUNvbnRyb2w6IFwic3ZfcV9pbWdzZWxfY29udHJvbF9pdGVtXCIsXG4gICAgaW1hZ2U6IFwic3ZfcV9pbWdzZWxfaW1hZ2VcIixcbiAgICBpdGVtVGV4dDogXCJzdl9xX2ltZ3NlbF90ZXh0XCIsXG4gICAgY2xlYXJCdXR0b246IFwic3ZfcV9yYWRpb2dyb3VwX2NsZWFyXCIsXG4gIH0sXG4gIHJhdGluZzoge1xuICAgIHJvb3Q6IFwiYnRuLWdyb3VwXCIsXG4gICAgaXRlbTogXCJidG4gYnRuLWRlZmF1bHQgYnRuLXNlY29uZGFyeVwiLFxuICAgIHNlbGVjdGVkOiBcImFjdGl2ZVwiLFxuICAgIG1pblRleHQ6IFwic3ZfcV9yYXRpbmdfbWluX3RleHRcIixcbiAgICBpdGVtVGV4dDogXCJzdl9xX3JhdGluZ19pdGVtX3RleHRcIixcbiAgICBtYXhUZXh0OiBcInN2X3FfcmF0aW5nX21heF90ZXh0XCIsXG4gICAgZGlzYWJsZWQ6IFwiXCIsXG4gIH0sXG4gIHRleHQ6IFwiZm9ybS1jb250cm9sXCIsXG4gIGV4cHJlc3Npb246IFwiZm9ybS1jb250cm9sXCIsXG4gIGZpbGU6IHtcbiAgICByb290OiBcImZvcm0tZ3JvdXAgYm1kLWZvcm0tZ3JvdXAgaXMtZmlsZWlucHV0IHN2X3FfZmlsZVwiLFxuICAgIHBsYWNlaG9sZGVySW5wdXQ6IFwiXCIsXG4gICAgcHJldmlldzogXCJzdl9xX2ZpbGVfcHJldmlld1wiLFxuICAgIHJlbW92ZUJ1dHRvbjogXCJzdl9xX2ZpbGVfcmVtb3ZlX2J1dHRvblwiLFxuICAgIGZpbGVJbnB1dDogXCJzdl9xX2ZpbGVfaW5wdXRcIixcbiAgICByZW1vdmVGaWxlOiBcInN2X3FfZmlsZV9yZW1vdmVcIixcbiAgICByZW1vdmVGaWxlU3ZnOiBcInN2LWhpZGRlblwiLFxuICAgIGZpbGVEZWNvcmF0b3I6IFwic3YtaGlkZGVuXCIsXG4gICAgZmlsZVNpZ25Cb3R0b206IFwic3YtaGlkZGVuXCIsXG4gICAgcmVtb3ZlQnV0dG9uQm90dG9tOiBcInN2LWhpZGRlblwiLFxuICB9LFxuICBzaWduYXR1cmVwYWQ6IHtcbiAgICByb290OiBcInN2X3Ffc2lnbmF0dXJlcGFkIHNqc19zcF9jb250YWluZXJcIixcbiAgICBjb250cm9sczogXCJzanNfc3BfY29udHJvbHNcIixcbiAgICBwbGFjZWhvbGRlcjogXCJzanNfc3BfcGxhY2Vob2xkZXJcIixcbiAgICBjbGVhckJ1dHRvbjogXCJzanNfc3BfY2xlYXJcIixcbiAgfSxcbiAgc2F2ZURhdGE6IHtcbiAgICByb290OiBcIlwiLFxuICAgIHNhdmluZzogXCJhbGVydCBhbGVydC1pbmZvXCIsXG4gICAgZXJyb3I6IFwiYWxlcnQgYWxlcnQtZGFuZ2VyXCIsXG4gICAgc3VjY2VzczogXCJhbGVydCBhbGVydC1zdWNjZXNzXCIsXG4gICAgc2F2ZUFnYWluQnV0dG9uOiBcIlwiLFxuICB9LFxuICB3aW5kb3c6IHtcbiAgICByb290OiBcIm1vZGFsLWNvbnRlbnRcIixcbiAgICBib2R5OiBcIm1vZGFsLWJvZHlcIixcbiAgICBoZWFkZXI6IHtcbiAgICAgIHJvb3Q6IFwibW9kYWwtaGVhZGVyIGNhcmQtdGl0bGVcIixcbiAgICAgIHRpdGxlOiBcInB1bGwtbGVmdFwiLFxuICAgICAgYnV0dG9uOiBcImdseXBoaWNvbiBwdWxsLXJpZ2h0XCIsXG4gICAgICBidXR0b25FeHBhbmRlZDogXCJnbHlwaGljb24gcHVsbC1yaWdodCBnbHlwaGljb24tY2hldnJvbi11cFwiLFxuICAgICAgYnV0dG9uQ29sbGFwc2VkOiBcImdseXBoaWNvbiBwdWxsLXJpZ2h0IGdseXBoaWNvbi1jaGV2cm9uLWRvd25cIixcbiAgICB9LFxuICB9LFxufTtcbig8YW55PnN1cnZleUNzcylbXCJib290c3RyYXBtYXRlcmlhbFwiXSA9IGRlZmF1bHRCb290c3RyYXBNYXRlcmlhbENzcztcbiIsImltcG9ydCB7IHN1cnZleUNzcyB9IGZyb20gXCIuL2Nzc3N0YW5kYXJkXCI7XG5leHBvcnQgdmFyIG1vZGVybkNzcyA9IHtcbiAgcm9vdDogXCJzdi1yb290LW1vZGVyblwiLFxuICBjb250YWluZXI6IFwic3YtY29udGFpbmVyLW1vZGVyblwiLFxuICBoZWFkZXI6IFwic3YtdGl0bGUgc3YtY29udGFpbmVyLW1vZGVybl9fdGl0bGVcIixcbiAgYm9keTogXCJzdi1ib2R5XCIsXG4gIGJvZHlFbXB0eTogXCJzdi1ib2R5IHN2LWJvZHktLWVtcHR5XCIsXG4gIGZvb3RlcjogXCJzdi1mb290ZXIgc3YtYm9keV9fZm9vdGVyIHN2LWNsZWFyZml4XCIsXG4gIHRpdGxlOiBcIlwiLFxuICBkZXNjcmlwdGlvbjogXCJcIixcbiAgbG9nbzogXCJzdi1sb2dvXCIsXG4gIGxvZ29JbWFnZTogXCJzdi1sb2dvX19pbWFnZVwiLFxuICBoZWFkZXJUZXh0OiBcInN2LWhlYWRlcl9fdGV4dFwiLFxuICBuYXZpZ2F0aW9uQnV0dG9uOiBcIlwiLFxuICBjb21wbGV0ZWRQYWdlOiBcInN2LWNvbXBsZXRlZHBhZ2VcIixcbiAgbmF2aWdhdGlvbjoge1xuICAgIGNvbXBsZXRlOiBcInN2LWJ0biBzdi1mb290ZXJfX2NvbXBsZXRlLWJ0blwiLFxuICAgIHByZXY6IFwic3YtYnRuIHN2LWZvb3Rlcl9fcHJldi1idG5cIixcbiAgICBuZXh0OiBcInN2LWJ0biBzdi1mb290ZXJfX25leHQtYnRuXCIsXG4gICAgc3RhcnQ6IFwic3YtYnRuIHN2LWZvb3Rlcl9fc3RhcnQtYnRuXCIsXG4gICAgcHJldmlldzogXCJzdi1idG4gc3YtZm9vdGVyX19wcmV2aWV3LWJ0blwiLFxuICAgIGVkaXQ6IFwic3YtYnRuIHN2LWZvb3Rlcl9fZWRpdC1idG5cIixcbiAgfSxcbiAgcGFuZWw6IHtcbiAgICB0aXRsZTogXCJzdi10aXRsZSBzdi1wYW5lbF9fdGl0bGVcIixcbiAgICB0aXRsZUV4cGFuZGFibGU6IFwic3YtcGFuZWxfX3RpdGxlLS1leHBhbmRhYmxlXCIsXG4gICAgdGl0bGVPbkVycm9yOiBcInN2LXBhbmVsX190aXRsZS0tZXJyb3JcIixcbiAgICBkZXNjcmlwdGlvbjogXCJzdi1kZXNjcmlwdGlvbiBzdi1wYW5lbF9fZGVzY3JpcHRpb25cIixcbiAgICBjb250YWluZXI6IFwic3YtcGFuZWwgc3Ytcm93X19wYW5lbFwiLFxuICAgIGNvbnRlbnQ6IFwic3YtcGFuZWxfX2NvbnRlbnRcIixcbiAgICBpY29uOiBcInN2LXBhbmVsX19pY29uXCIsXG4gICAgaWNvbkV4cGFuZGVkOiBcInN2LXBhbmVsX19pY29uLS1leHBhbmRlZFwiLFxuICAgIGZvb3RlcjogXCJzdi1wYW5lbF9fZm9vdGVyXCIsXG4gICAgcmVxdWlyZWRUZXh0OiBcInN2LXBhbmVsX19yZXF1aXJlZC10ZXh0XCIsXG4gICAgbnVtYmVyOiBcInN2LXF1ZXN0aW9uX19udW1cIixcbiAgfSxcbiAgcGFuZWxkeW5hbWljOiB7XG4gICAgcm9vdDogXCJzdi1wYW5lbGR5bmFtaWNcIixcbiAgICBuYXZpZ2F0aW9uOiBcInN2LXBhbmVsZHluYW1pY19fbmF2aWdhdGlvblwiLFxuICAgIHRpdGxlOiBcInN2LXRpdGxlIHN2LXF1ZXN0aW9uX190aXRsZVwiLFxuICAgIGJ1dHRvbjogXCJzdi1idG5cIixcbiAgICBidXR0b25SZW1vdmU6IFwic3YtcGFuZWxkeW5hbWljX19yZW1vdmUtYnRuXCIsXG4gICAgYnV0dG9uUmVtb3ZlUmlnaHQ6IFwic3YtcGFuZWxkeW5hbWljX19yZW1vdmUtYnRuLS1yaWdodFwiLFxuICAgIGJ1dHRvbkFkZDogXCJzdi1wYW5lbGR5bmFtaWNfX2FkZC1idG5cIixcbiAgICBwcm9ncmVzc1RvcDogXCJzdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzIHN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3MtLXRvcFwiLFxuICAgIHByb2dyZXNzQm90dG9tOlxuICAgICAgXCJzdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzIHN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3MtLWJvdHRvbVwiLFxuICAgIGJ1dHRvblByZXY6IFwic3YtcGFuZWxkeW5hbWljX19wcmV2LWJ0blwiLFxuICAgIGJ1dHRvbk5leHQ6IFwic3YtcGFuZWxkeW5hbWljX19uZXh0LWJ0blwiLFxuICAgIHByb2dyZXNzQ29udGFpbmVyOiBcInN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3MtY29udGFpbmVyXCIsXG4gICAgcHJvZ3Jlc3M6IFwic3YtcHJvZ3Jlc3NcIixcbiAgICBwcm9ncmVzc0JhcjogXCJzdi1wcm9ncmVzc19fYmFyXCIsXG4gICAgcHJvZ3Jlc3NUZXh0OiBcInN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3MtdGV4dFwiLFxuICAgIHNlcGFyYXRvcjogXCJzdi1wYW5lbGR5bmFtaWNfX3NlcGFyYXRvclwiLFxuICAgIHBhbmVsV3JhcHBlcjogXCJzdi1wYW5lbGR5bmFtaWNfX3BhbmVsLXdyYXBwZXJcIixcbiAgICBwYW5lbFdyYXBwZXJJblJvdzogXCJzdi1wYW5lbGR5bmFtaWNfX3BhbmVsLXdyYXBwZXItLWluLXJvd1wiLFxuICB9LFxuICBwcm9ncmVzczogXCJzdi1wcm9ncmVzcyBzdi1ib2R5X19wcm9ncmVzc1wiLFxuICBwcm9ncmVzc0JhcjogXCJzdi1wcm9ncmVzc19fYmFyXCIsXG4gIHByb2dyZXNzVGV4dDogXCJzdi1wcm9ncmVzc19fdGV4dFwiLFxuICBwcm9ncmVzc1RleHRJbkJhcjogXCJzdi1oaWRkZW5cIixcbiAgcHJvZ3Jlc3NCdXR0b25zQ29udGFpbmVyQ2VudGVyOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2NvbnRhaW5lci1jZW50ZXJcIixcbiAgcHJvZ3Jlc3NCdXR0b25zQ29udGFpbmVyOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2NvbnRhaW5lclwiLFxuICBwcm9ncmVzc0J1dHRvbnNJbWFnZUJ1dHRvbkxlZnQ6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19faW1hZ2UtYnV0dG9uLWxlZnRcIixcbiAgcHJvZ3Jlc3NCdXR0b25zSW1hZ2VCdXR0b25SaWdodDogXCJzdl9wcm9ncmVzcy1idXR0b25zX19pbWFnZS1idXR0b24tcmlnaHRcIixcbiAgcHJvZ3Jlc3NCdXR0b25zSW1hZ2VCdXR0b25IaWRkZW46IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19faW1hZ2UtYnV0dG9uLS1oaWRkZW5cIixcbiAgcHJvZ3Jlc3NCdXR0b25zTGlzdENvbnRhaW5lcjogXCJzdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWNvbnRhaW5lclwiLFxuICBwcm9ncmVzc0J1dHRvbnNMaXN0OiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3RcIixcbiAgcHJvZ3Jlc3NCdXR0b25zTGlzdEVsZW1lbnRQYXNzZWQ6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdC1lbGVtZW50LS1wYXNzZWRcIixcbiAgcHJvZ3Jlc3NCdXR0b25zTGlzdEVsZW1lbnRDdXJyZW50OlxuICAgIFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdC1lbGVtZW50LS1jdXJyZW50XCIsXG4gIHByb2dyZXNzQnV0dG9uc0xpc3RFbGVtZW50Tm9uQ2xpY2thYmxlOlxuICAgIFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdC1lbGVtZW50LS1ub25jbGlja2FibGVcIixcbiAgcHJvZ3Jlc3NCdXR0b25zUGFnZVRpdGxlOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX3BhZ2UtdGl0bGVcIixcbiAgcHJvZ3Jlc3NCdXR0b25zUGFnZURlc2NyaXB0aW9uOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX3BhZ2UtZGVzY3JpcHRpb25cIixcbiAgcGFnZToge1xuICAgIHJvb3Q6IFwic3YtcGFnZSBzdi1ib2R5X19wYWdlXCIsXG4gICAgdGl0bGU6IFwic3YtdGl0bGUgc3YtcGFnZV9fdGl0bGVcIixcbiAgICBkZXNjcmlwdGlvbjogXCJzdi1kZXNjcmlwdGlvbiBzdi1wYWdlX19kZXNjcmlwdGlvblwiLFxuICB9LFxuICBwYWdlVGl0bGU6IFwic3YtdGl0bGUgc3YtcGFnZV9fdGl0bGVcIixcbiAgcGFnZURlc2NyaXB0aW9uOiBcInN2LWRlc2NyaXB0aW9uIHN2LXBhZ2VfX2Rlc2NyaXB0aW9uXCIsXG4gIHJvdzogXCJzdi1yb3cgc3YtY2xlYXJmaXhcIixcbiAgcXVlc3Rpb246IHtcbiAgICBtYWluUm9vdDogXCJzdi1xdWVzdGlvbiBzdi1yb3dfX3F1ZXN0aW9uXCIsXG4gICAgZmxvd1Jvb3Q6IFwic3YtcXVlc3Rpb24gc3Ytcm93X19xdWVzdGlvbiBzdi1yb3dfX3F1ZXN0aW9uLS1mbG93XCIsXG4gICAgYXNDZWxsOiBcInN2LXRhYmxlX19jZWxsXCIsXG4gICAgaGVhZGVyOiBcInN2LXF1ZXN0aW9uX19oZWFkZXJcIixcbiAgICBoZWFkZXJMZWZ0OiBcInN2LXF1ZXN0aW9uX19oZWFkZXItLWxvY2F0aW9uLS1sZWZ0XCIsXG4gICAgaGVhZGVyVG9wOiBcInN2LXF1ZXN0aW9uX19oZWFkZXItLWxvY2F0aW9uLS10b3BcIixcbiAgICBoZWFkZXJCb3R0b206IFwic3YtcXVlc3Rpb25fX2hlYWRlci0tbG9jYXRpb24tLWJvdHRvbVwiLFxuICAgIGNvbnRlbnQ6IFwic3YtcXVlc3Rpb25fX2NvbnRlbnRcIixcbiAgICBjb250ZW50TGVmdDogXCJzdi1xdWVzdGlvbl9fY29udGVudC0tbGVmdFwiLFxuICAgIHRpdGxlTGVmdFJvb3Q6IFwiXCIsXG4gICAgdGl0bGVPbkFuc3dlcjogXCJzdi1xdWVzdGlvbl9fdGl0bGUtLWFuc3dlclwiLFxuICAgIHRpdGxlT25FcnJvcjogXCJzdi1xdWVzdGlvbl9fdGl0bGUtLWVycm9yXCIsXG4gICAgdGl0bGU6IFwic3YtdGl0bGUgc3YtcXVlc3Rpb25fX3RpdGxlXCIsXG4gICAgdGl0bGVFeHBhbmRhYmxlOiBcInN2LXF1ZXN0aW9uX190aXRsZS0tZXhwYW5kYWJsZVwiLFxuICAgIGljb246IFwic3YtcXVlc3Rpb25fX2ljb25cIixcbiAgICBpY29uRXhwYW5kZWQ6IFwic3YtcXVlc3Rpb25fX2ljb24tLWV4cGFuZGVkXCIsXG4gICAgcmVxdWlyZWRUZXh0OiBcInN2LXF1ZXN0aW9uX19yZXF1aXJlZC10ZXh0XCIsXG4gICAgbnVtYmVyOiBcInN2LXF1ZXN0aW9uX19udW1cIixcbiAgICBkZXNjcmlwdGlvbjogXCJzdi1kZXNjcmlwdGlvbiBzdi1xdWVzdGlvbl9fZGVzY3JpcHRpb25cIixcbiAgICBkZXNjcmlwdGlvblVuZGVySW5wdXQ6IFwic3YtZGVzY3JpcHRpb24gc3YtcXVlc3Rpb25fX2Rlc2NyaXB0aW9uXCIsXG4gICAgY29tbWVudDogXCJzdi1jb21tZW50XCIsXG4gICAgcmVxdWlyZWQ6IFwic3YtcXVlc3Rpb24tLXJlcXVpcmVkXCIsXG4gICAgdGl0bGVSZXF1aXJlZDogXCJzdi1xdWVzdGlvbl9fdGl0bGUtLXJlcXVpcmVkXCIsXG4gICAgaW5kZW50OiAyMCxcbiAgICBmb290ZXI6IFwic3YtcXVlc3Rpb25fX2Zvb3RlclwiLFxuICAgIGZvcm1Hcm91cDogXCJzdi1xdWVzdGlvbl9fZm9ybS1ncm91cFwiLFxuICAgIGhhc0Vycm9yOiBcIlwiLFxuICAgIGRpc2FibGVkOiBcInN2LXF1ZXN0aW9uLS1kaXNhYmxlZFwiLFxuICB9LFxuICBpbWFnZTogeyByb290OiBcInN2LWltYWdlXCIsIGltYWdlOiBcInN2X2ltYWdlX2ltYWdlXCIgfSxcbiAgZXJyb3I6IHtcbiAgICByb290OiBcInN2LXF1ZXN0aW9uX19lcmJveFwiLFxuICAgIGljb246IFwiXCIsXG4gICAgaXRlbTogXCJcIixcbiAgICBsb2NhdGlvblRvcDogXCJzdi1xdWVzdGlvbl9fZXJib3gtLWxvY2F0aW9uLS10b3BcIixcbiAgICBsb2NhdGlvbkJvdHRvbTogXCJzdi1xdWVzdGlvbl9fZXJib3gtLWxvY2F0aW9uLS1ib3R0b21cIixcbiAgfSxcbiAgY2hlY2tib3g6IHtcbiAgICByb290OiBcInN2LXNlbGVjdGJhc2VcIixcbiAgICBpdGVtOiBcInN2LWl0ZW0gc3YtY2hlY2tib3ggc3Ytc2VsZWN0YmFzZV9faXRlbVwiLFxuICAgIGl0ZW1TZWxlY3RBbGw6IFwic3YtY2hlY2tib3gtLXNlbGVjdGFsbFwiLFxuICAgIGl0ZW1Ob25lOiBcInN2LWNoZWNrYm94LS1ub25lXCIsXG4gICAgaXRlbURpc2FibGVkOiBcInN2LWl0ZW0tLWRpc2FibGVkIHN2LWNoZWNrYm94LS1kaXNhYmxlZFwiLFxuICAgIGl0ZW1DaGVja2VkOiBcInN2LWNoZWNrYm94LS1jaGVja2VkXCIsXG4gICAgaXRlbUhvdmVyOiBcInN2LWNoZWNrYm94LS1hbGxvd2hvdmVyXCIsXG4gICAgaXRlbUlubGluZTogXCJzdi1zZWxlY3RiYXNlX19pdGVtLS1pbmxpbmVcIixcbiAgICBsYWJlbDogXCJzdi1zZWxlY3RiYXNlX19sYWJlbFwiLFxuICAgIGxhYmVsQ2hlY2tlZDogXCJcIixcbiAgICBpdGVtQ29udHJvbDogXCJzdi12aXN1YWxseWhpZGRlbiBzdi1pdGVtX19jb250cm9sXCIsXG4gICAgaXRlbURlY29yYXRvcjogXCJzdi1pdGVtX19zdmcgc3YtY2hlY2tib3hfX3N2Z1wiLFxuICAgIGNvbnRyb2xMYWJlbDogXCJzdi1pdGVtX19jb250cm9sLWxhYmVsXCIsXG4gICAgbWF0ZXJpYWxEZWNvcmF0b3I6IFwic3YtaXRlbV9fZGVjb3JhdG9yIHN2LWNoZWNrYm94X19kZWNvcmF0b3JcIixcbiAgICBvdGhlcjogXCJzdi1jb21tZW50IHN2LXF1ZXN0aW9uX19vdGhlclwiLFxuICAgIGNvbHVtbjogXCJzdi1zZWxlY3RiYXNlX19jb2x1bW5cIixcbiAgfSxcbiAgcmFua2luZzoge1xuICAgIHJvb3Q6IFwic3YtcmFua2luZ1wiLFxuICAgIHJvb3RNb2JpbGVNb2Q6IFwic3YtcmFua2luZy0tbW9iaWxlXCIsXG4gICAgcm9vdERyYWdNb2Q6IFwic3YtcmFua2luZy0tZHJhZ1wiLFxuICAgIGl0ZW06IFwic3YtcmFua2luZy1pdGVtXCIsXG4gICAgaXRlbUNvbnRlbnQ6IFwic3YtcmFua2luZy1pdGVtX19jb250ZW50XCIsXG4gICAgaXRlbUluZGV4OiBcInN2LXJhbmtpbmctaXRlbV9faW5kZXhcIixcbiAgICAvLyBpdGVtVGV4dDogXCJzdi1yYW5raW5nLWl0ZW1fX3RleHRcIixcbiAgICBjb250cm9sTGFiZWw6IFwic3YtcmFua2luZy1pdGVtX190ZXh0XCIsXG4gICAgaXRlbUdob3N0Tm9kZTogXCJzdi1yYW5raW5nLWl0ZW1fX2dob3N0XCIsXG4gICAgaXRlbUljb25Db250YWluZXI6IFwic3YtcmFua2luZy1pdGVtX19pY29uLWNvbnRhaW5lclwiLFxuICAgIGl0ZW1JY29uOiBcInN2LXJhbmtpbmctaXRlbV9faWNvblwiLFxuICAgIGl0ZW1JY29uSG92ZXJNb2Q6IFwic3YtcmFua2luZy1pdGVtX19pY29uLS1ob3ZlclwiLFxuICAgIGl0ZW1JY29uRm9jdXNNb2Q6IFwic3YtcmFua2luZy1pdGVtX19pY29uLS1mb2N1c1wiLFxuICAgIGl0ZW1HaG9zdE1vZDogXCJzdi1yYW5raW5nLWl0ZW0tLWdob3N0XCIsXG4gICAgaXRlbURyYWdNb2Q6IFwic3YtcmFua2luZy1pdGVtLS1kcmFnXCIsXG4gIH0sXG4gIHJhZGlvZ3JvdXA6IHtcbiAgICByb290OiBcInN2LXNlbGVjdGJhc2VcIixcbiAgICBpdGVtOiBcInN2LWl0ZW0gc3YtcmFkaW8gc3Ytc2VsZWN0YmFzZV9faXRlbVwiLFxuICAgIGl0ZW1JbmxpbmU6IFwic3Ytc2VsZWN0YmFzZV9faXRlbS0taW5saW5lXCIsXG4gICAgbGFiZWw6IFwic3Ytc2VsZWN0YmFzZV9fbGFiZWxcIixcbiAgICBsYWJlbENoZWNrZWQ6IFwiXCIsXG4gICAgaXRlbURpc2FibGVkOiBcInN2LWl0ZW0tLWRpc2FibGVkIHN2LXJhZGlvLS1kaXNhYmxlZFwiLFxuICAgIGl0ZW1DaGVja2VkOiBcInN2LXJhZGlvLS1jaGVja2VkXCIsXG4gICAgaXRlbUhvdmVyOiBcInN2LXJhZGlvLS1hbGxvd2hvdmVyXCIsXG4gICAgaXRlbUNvbnRyb2w6IFwic3YtdmlzdWFsbHloaWRkZW4gc3YtaXRlbV9fY29udHJvbFwiLFxuICAgIGl0ZW1EZWNvcmF0b3I6IFwic3YtaXRlbV9fc3ZnIHN2LXJhZGlvX19zdmdcIixcbiAgICBjb250cm9sTGFiZWw6IFwic3YtaXRlbV9fY29udHJvbC1sYWJlbFwiLFxuICAgIG1hdGVyaWFsRGVjb3JhdG9yOiBcInN2LWl0ZW1fX2RlY29yYXRvciBzdi1yYWRpb19fZGVjb3JhdG9yXCIsXG4gICAgb3RoZXI6IFwic3YtY29tbWVudCBzdi1xdWVzdGlvbl9fb3RoZXJcIixcbiAgICBjbGVhckJ1dHRvbjogXCJzdi1idG4gc3Ytc2VsZWN0YmFzZV9fY2xlYXItYnRuXCIsXG4gICAgY29sdW1uOiBcInN2LXNlbGVjdGJhc2VfX2NvbHVtblwiLFxuICB9LFxuICBidXR0b25ncm91cDoge1xuICAgIHJvb3Q6IFwic3YtYnV0dG9uLWdyb3VwXCIsXG4gICAgaXRlbTogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW1cIixcbiAgICBpdGVtSWNvbjogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW0taWNvblwiLFxuICAgIGl0ZW1EZWNvcmF0b3I6IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLWRlY29yYXRvclwiLFxuICAgIGl0ZW1DYXB0aW9uOiBcInN2LWJ1dHRvbi1ncm91cF9faXRlbS1jYXB0aW9uXCIsXG4gICAgaXRlbVNlbGVjdGVkOiBcInN2LWJ1dHRvbi1ncm91cF9faXRlbS0tc2VsZWN0ZWRcIixcbiAgICBpdGVtSG92ZXI6IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLS1ob3ZlclwiLFxuICAgIGl0ZW1EaXNhYmxlZDogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW0tLWRpc2FibGVkXCIsXG4gICAgaXRlbUNvbnRyb2w6IFwic3YtdmlzdWFsbHloaWRkZW5cIixcbiAgfSxcbiAgYm9vbGVhbjoge1xuICAgIHJvb3Q6IFwic3ZfcWJsblwiLFxuICAgIHNtYWxsOiBcInN2LXJvd19fcXVlc3Rpb24tLXNtYWxsXCIsXG4gICAgaXRlbTogXCJzdi1ib29sZWFuIHN2LWl0ZW1cIixcbiAgICBjb250cm9sOiBcInN2LXZpc3VhbGx5aGlkZGVuXCIsXG4gICAgaXRlbUNoZWNrZWQ6IFwic3YtYm9vbGVhbi0tY2hlY2tlZFwiLFxuICAgIGl0ZW1JbmRldGVybWluYXRlOiBcInN2LWJvb2xlYW4tLWluZGV0ZXJtaW5hdGVcIixcbiAgICBpdGVtRGlzYWJsZWQ6IFwic3YtaXRlbS0tZGlzYWJsZWQgc3YtYm9vbGVhbi0tZGlzYWJsZWRcIixcbiAgICBzd2l0Y2g6IFwic3YtYm9vbGVhbl9fc3dpdGNoXCIsXG4gICAgc2xpZGVyOiBcInN2LWJvb2xlYW5fX3NsaWRlclwiLFxuICAgIHNsaWRlclRleHQ6IFwic3YtaGlkZGVuXCIsXG4gICAgbGFiZWw6IFwic3YtYm9vbGVhbl9fbGFiZWwgXCIsXG4gICAgZGlzYWJsZWRMYWJlbDogXCJzdi1ib29sZWFuX19sYWJlbC0tZGlzYWJsZWRcIixcbiAgICBtYXRlcmlhbERlY29yYXRvcjogXCJzdi1pdGVtX19kZWNvcmF0b3Igc3YtYm9vbGVhbl9fZGVjb3JhdG9yIFwiLFxuICAgIGl0ZW1EZWNvcmF0b3I6IFwic3YtaXRlbV9fc3ZnICBzdi1ib29sZWFuX19zdmdcIixcbiAgICBjaGVja2VkUGF0aDogXCJzdi1ib29sZWFuX19jaGVja2VkLXBhdGhcIixcbiAgICB1bmNoZWNrZWRQYXRoOiBcInN2LWJvb2xlYW5fX3VuY2hlY2tlZC1wYXRoXCIsXG4gICAgaW5kZXRlcm1pbmF0ZVBhdGg6IFwic3YtYm9vbGVhbl9faW5kZXRlcm1pbmF0ZS1wYXRoXCIsXG4gIH0sXG4gIHRleHQ6IHtcbiAgICByb290OiBcInN2LXRleHRcIixcbiAgICBzbWFsbDogXCJzdi1yb3dfX3F1ZXN0aW9uLS1zbWFsbFwiLFxuICAgIG9uRXJyb3I6IFwic3YtdGV4dC0tZXJyb3JcIixcbiAgfSxcbiAgbXVsdGlwbGV0ZXh0OiB7XG4gICAgcm9vdDogXCJzdi1tdWx0aXBsZXRleHRcIixcbiAgICBpdGVtOiBcInN2LW11bHRpcGxldGV4dF9faXRlbVwiLFxuICAgIGl0ZW1UaXRsZTogXCJzdi1tdWx0aXBsZXRleHRfX2l0ZW0tdGl0bGVcIixcbiAgICByb3c6IFwic3YtbXVsdGlwbGV0ZXh0X19yb3dcIixcbiAgICBjZWxsOiBcInN2LW11bHRpcGxldGV4dF9fY2VsbFwiLFxuICB9LFxuICBkcm9wZG93bjoge1xuICAgIHJvb3Q6IFwiXCIsXG4gICAgc21hbGw6IFwic3Ytcm93X19xdWVzdGlvbi0tc21hbGxcIixcbiAgICBjb250cm9sOiBcInN2LWRyb3Bkb3duXCIsXG4gICAgc2VsZWN0V3JhcHBlcjogXCJcIixcbiAgICBvdGhlcjogXCJzdi1jb21tZW50IHN2LXF1ZXN0aW9uX19vdGhlclwiLFxuICAgIG9uRXJyb3I6IFwic3YtZHJvcGRvd24tLWVycm9yXCIsXG4gIH0sXG4gIGltYWdlcGlja2VyOiB7XG4gICAgcm9vdDogXCJzdi1pbWFnZXBpY2tlclwiLFxuICAgIGl0ZW06IFwic3YtaW1hZ2VwaWNrZXJfX2l0ZW1cIixcbiAgICBpdGVtSW5saW5lOiBcInN2LWltYWdlcGlja2VyX19pdGVtLS1pbmxpbmVcIixcbiAgICBpdGVtQ2hlY2tlZDogXCJzdi1pbWFnZXBpY2tlcl9faXRlbS0tY2hlY2tlZFwiLFxuICAgIGl0ZW1EaXNhYmxlZDogXCJzdi1pbWFnZXBpY2tlcl9faXRlbS0tZGlzYWJsZWRcIixcbiAgICBpdGVtSG92ZXI6IFwic3YtaW1hZ2VwaWNrZXJfX2l0ZW0tLWFsbG93aG92ZXJcIixcbiAgICBsYWJlbDogXCJzdi1pbWFnZXBpY2tlcl9fbGFiZWxcIixcbiAgICBpdGVtQ29udHJvbDogXCJzdi1pbWFnZXBpY2tlcl9fY29udHJvbFwiLFxuICAgIGltYWdlOiBcInN2LWltYWdlcGlja2VyX19pbWFnZVwiLFxuICAgIGl0ZW1UZXh0OiBcInN2LWltYWdlcGlja2VyX190ZXh0XCIsXG4gICAgY2xlYXJCdXR0b246IFwic3YtYnRuXCIsXG4gICAgb3RoZXI6IFwic3YtY29tbWVudCBzdi1xdWVzdGlvbl9fb3RoZXJcIixcbiAgfSxcbiAgbWF0cml4OiB7XG4gICAgdGFibGVXcmFwcGVyOiBcInN2LW1hdHJpeFwiLFxuICAgIHJvb3Q6IFwic3YtdGFibGUgc3YtbWF0cml4LXJvb3RcIixcbiAgICByb3dFcnJvcjogXCJzdi1tYXRyaXhfX3Jvdy0tZXJyb3JcIixcbiAgICBjZWxsOiBcInN2LXRhYmxlX19jZWxsIHN2LW1hdHJpeF9fY2VsbFwiLFxuICAgIGhlYWRlckNlbGw6IFwic3YtdGFibGVfX2NlbGwgc3YtdGFibGVfX2NlbGwtLWhlYWRlclwiLFxuICAgIGxhYmVsOiBcInN2LWl0ZW0gc3YtcmFkaW8gc3YtbWF0cml4X19sYWJlbFwiLFxuICAgIGl0ZW1WYWx1ZTogXCJzdi12aXN1YWxseWhpZGRlbiBzdi1pdGVtX19jb250cm9sIHN2LXJhZGlvX19jb250cm9sXCIsXG4gICAgaXRlbUNoZWNrZWQ6IFwic3YtcmFkaW8tLWNoZWNrZWRcIixcbiAgICBpdGVtRGlzYWJsZWQ6IFwic3YtaXRlbS0tZGlzYWJsZWQgc3YtcmFkaW8tLWRpc2FibGVkXCIsXG4gICAgaXRlbUhvdmVyOiBcInN2LXJhZGlvLS1hbGxvd2hvdmVyXCIsXG4gICAgbWF0ZXJpYWxEZWNvcmF0b3I6IFwic3YtaXRlbV9fZGVjb3JhdG9yIHN2LXJhZGlvX19kZWNvcmF0b3JcIixcbiAgICBpdGVtRGVjb3JhdG9yOiBcInN2LWl0ZW1fX3N2ZyBzdi1yYWRpb19fc3ZnXCIsXG4gICAgY2VsbFRleHQ6IFwic3YtbWF0cml4X190ZXh0XCIsXG4gICAgY2VsbFRleHRTZWxlY3RlZDogXCJzdi1tYXRyaXhfX3RleHQtLWNoZWNrZWRcIixcbiAgICBjZWxsVGV4dERpc2FibGVkOiBcInN2LW1hdHJpeF9fdGV4dC0tZGlzYWJsZWRcIixcbiAgfSxcbiAgbWF0cml4ZHJvcGRvd246IHtcbiAgICByb290OiBcInN2LXRhYmxlIHN2LW1hdHJpeGRyb3Bkb3duXCIsXG4gICAgY2VsbDogXCJzdi10YWJsZV9fY2VsbFwiLFxuICAgIGhlYWRlckNlbGw6IFwic3YtdGFibGVfX2NlbGwgc3YtdGFibGVfX2NlbGwtLWhlYWRlclwiLFxuICAgIHJvdzogXCJzdi10YWJsZV9fcm93XCIsXG4gICAgZGV0YWlsUm93OiBcInN2LXRhYmxlX19yb3cgc3YtdGFibGVfX3Jvdy0tZGV0YWlsXCIsXG4gICAgZGV0YWlsUm93VGV4dDogXCJzdi10YWJsZV9fY2VsbC0tZGV0YWlsLXJvd3RleHRcIixcbiAgICBkZXRhaWxDZWxsOiBcInN2LXRhYmxlX19jZWxsLS1kZXRhaWxcIixcbiAgICBjaG9pY2VDZWxsOiBcInN2LXRhYmxlX19jZWxsLS1jaG9pY2VcIixcbiAgICBkZXRhaWxCdXR0b246IFwic3YtdGFibGVfX2NlbGwtLWRldGFpbC1idXR0b25cIixcbiAgICBkZXRhaWxCdXR0b25FeHBhbmRlZDogXCJzdi10YWJsZV9fY2VsbC0tZGV0YWlsLWJ1dHRvbi0tZXhwYW5kZWRcIixcbiAgICBkZXRhaWxJY29uOiBcInN2LWRldGFpbC1wYW5lbF9faWNvblwiLFxuICAgIGRldGFpbEljb25FeHBhbmRlZDogXCJzdi1kZXRhaWwtcGFuZWxfX2ljb24tLWV4cGFuZGVkXCIsXG4gICAgZGV0YWlsUGFuZWxDZWxsOiBcInN2LXRhYmxlX19jZWxsLS1kZXRhaWwtcGFuZWxcIixcbiAgICBhY3Rpb25zQ2VsbDogXCJzdi10YWJsZV9fY2VsbCBzdi10YWJsZV9fY2VsbC0tYWN0aW9uc1wiLFxuICB9LFxuICBtYXRyaXhkeW5hbWljOiB7XG4gICAgcm9vdDogXCJzdi10YWJsZSBzdi1tYXRyaXhkeW5hbWljXCIsXG4gICAgY2VsbDogXCJzdi10YWJsZV9fY2VsbFwiLFxuICAgIGhlYWRlckNlbGw6IFwic3YtdGFibGVfX2NlbGwgc3YtdGFibGVfX2NlbGwtLWhlYWRlclwiLFxuICAgIGJ1dHRvbjogXCJzdi1idG5cIixcbiAgICBidXR0b25BZGQ6IFwic3YtbWF0cml4ZHluYW1pY19fYWRkLWJ0blwiLFxuICAgIGJ1dHRvblJlbW92ZTogXCJzdi1tYXRyaXhkeW5hbWljX19yZW1vdmUtYnRuXCIsXG4gICAgaWNvbkFkZDogXCJcIixcbiAgICBpY29uUmVtb3ZlOiBcIlwiLFxuICAgIGljb25EcmFnOiBcInN2LW1hdHJpeGR5bmFtaWNfX2RyYWctaWNvblwiLFxuICAgIHJvdzogXCJzdi10YWJsZV9fcm93XCIsXG4gICAgZGV0YWlsUm93OiBcInN2LXRhYmxlX19yb3cgc3YtdGFibGVfX3Jvdy0tZGV0YWlsXCIsXG4gICAgZGV0YWlsQ2VsbDogXCJzdi10YWJsZV9fY2VsbC0tZGV0YWlsXCIsXG4gICAgY2hvaWNlQ2VsbDogXCJzdi10YWJsZV9fY2VsbC0tY2hvaWNlXCIsXG4gICAgZGV0YWlsQnV0dG9uOiBcInN2LXRhYmxlX19jZWxsLS1kZXRhaWwtYnV0dG9uXCIsXG4gICAgZGV0YWlsQnV0dG9uRXhwYW5kZWQ6IFwic3YtdGFibGVfX2NlbGwtLWRldGFpbC1idXR0b24tLWV4cGFuZGVkXCIsXG4gICAgZGV0YWlsSWNvbjogXCJzdi1kZXRhaWwtcGFuZWxfX2ljb25cIixcbiAgICBkZXRhaWxJY29uRXhwYW5kZWQ6IFwic3YtZGV0YWlsLXBhbmVsX19pY29uLS1leHBhbmRlZFwiLFxuICAgIGRldGFpbFBhbmVsQ2VsbDogXCJzdi10YWJsZV9fY2VsbC0tZGV0YWlsLXBhbmVsXCIsXG4gICAgYWN0aW9uc0NlbGw6IFwic3YtdGFibGVfX2NlbGwgc3YtdGFibGVfX2NlbGwtLWFjdGlvbnNcIixcbiAgICBlbXB0eVJvd3NTZWN0aW9uOiBcInN2LXRhYmxlX19lbXB0eS0tcm93cy0tc2VjdGlvblwiLFxuICAgIGVtcHR5Um93c1RleHQ6IFwic3YtdGFibGVfX2VtcHR5LS1yb3dzLS10ZXh0XCIsXG4gICAgZW1wdHlSb3dzQnV0dG9uOiBcIlwiLFxuICB9LFxuICByYXRpbmc6IHtcbiAgICByb290OiBcInN2LXJhdGluZ1wiLFxuICAgIGl0ZW06IFwic3YtcmF0aW5nX19pdGVtXCIsXG4gICAgc2VsZWN0ZWQ6IFwic3YtcmF0aW5nX19pdGVtLS1zZWxlY3RlZFwiLFxuICAgIG1pblRleHQ6IFwic3YtcmF0aW5nX19taW4tdGV4dFwiLFxuICAgIGl0ZW1UZXh0OiBcInN2LXJhdGluZ19faXRlbS10ZXh0XCIsXG4gICAgbWF4VGV4dDogXCJzdi1yYXRpbmdfX21heC10ZXh0XCIsXG4gICAgaXRlbURpc2FibGVkOiBcInN2LXJhdGluZy0tZGlzYWJsZWRcIixcbiAgfSxcbiAgY29tbWVudDoge1xuICAgIHJvb3Q6IFwic3YtY29tbWVudFwiLFxuICAgIHNtYWxsOiBcInN2LXJvd19fcXVlc3Rpb24tLXNtYWxsXCIsXG4gIH0sXG4gIGV4cHJlc3Npb246IFwiXCIsXG4gIGZpbGU6IHtcbiAgICByb290OiBcInN2LWZpbGVcIixcbiAgICBvdGhlcjogXCJzdi1jb21tZW50IHN2LXF1ZXN0aW9uX19vdGhlclwiLFxuICAgIHBsYWNlaG9sZGVySW5wdXQ6IFwic3YtdmlzdWFsbHloaWRkZW5cIixcbiAgICBwcmV2aWV3OiBcInN2LWZpbGVfX3ByZXZpZXdcIixcbiAgICBmaWxlU2lnbjogXCJzdi1oaWRkZW5cIixcbiAgICBmaWxlU2lnbkJvdHRvbTogXCJzdi1maWxlX19zaWduXCIsXG4gICAgZmlsZURlY29yYXRvcjogXCJzdi1maWxlX19kZWNvcmF0b3JcIixcbiAgICBmaWxlSW5wdXQ6IFwic3YtdmlzdWFsbHloaWRkZW5cIixcbiAgICBub0ZpbGVDaG9zZW46IFwic3YtZGVzY3JpcHRpb24gc3YtZmlsZV9fbm8tZmlsZS1jaG9zZW5cIixcbiAgICBjaG9vc2VGaWxlOiBcInN2LWJ0biBzdi1maWxlX19jaG9vc2UtYnRuXCIsXG4gICAgY29udHJvbERpc2FibGVkOiBcInN2LWZpbGVfX2Nob29zZS1idG4tLWRpc2FibGVkXCIsXG4gICAgcmVtb3ZlQnV0dG9uOiBcInN2LWhpZGRlblwiLFxuICAgIHJlbW92ZUJ1dHRvbkJvdHRvbTogXCJzdi1idG4gc3YtZmlsZV9fY2xlYW4tYnRuXCIsXG4gICAgcmVtb3ZlRmlsZTogXCJzdi1oaWRkZW5cIixcbiAgICByZW1vdmVGaWxlU3ZnOiBcInN2LWZpbGVfX3JlbW92ZS1zdmdcIixcbiAgICB3cmFwcGVyOiBcInN2LWZpbGVfX3dyYXBwZXJcIixcbiAgfSxcbiAgc2lnbmF0dXJlcGFkOiB7XG4gICAgcm9vdDogXCJzdi1zaWduYXR1cmVwYWQgc2pzX3NwX2NvbnRhaW5lclwiLFxuICAgIHNtYWxsOiBcInN2LXJvd19fcXVlc3Rpb24tLXNtYWxsXCIsXG4gICAgY29udHJvbHM6IFwic2pzX3NwX2NvbnRyb2xzXCIsXG4gICAgcGxhY2Vob2xkZXI6IFwic2pzX3NwX3BsYWNlaG9sZGVyXCIsXG4gICAgY2xlYXJCdXR0b246IFwic2pzX3NwX2NsZWFyXCIsXG4gIH0sXG4gIHNhdmVEYXRhOiB7XG4gICAgcm9vdDogXCJcIixcbiAgICBzYXZpbmc6IFwiXCIsXG4gICAgZXJyb3I6IFwiXCIsXG4gICAgc3VjY2VzczogXCJcIixcbiAgICBzYXZlQWdhaW5CdXR0b246IFwiXCIsXG4gIH0sXG4gIHdpbmRvdzoge1xuICAgIHJvb3Q6IFwic3Zfd2luZG93XCIsXG4gICAgYm9keTogXCJzdl93aW5kb3dfY29udGVudFwiLFxuICAgIGhlYWRlcjoge1xuICAgICAgcm9vdDogXCJzdl93aW5kb3dfdGl0bGVcIixcbiAgICAgIHRpdGxlOiBcIlwiLFxuICAgICAgYnV0dG9uOiBcIlwiLFxuICAgICAgYnV0dG9uRXhwYW5kZWQ6IFwiXCIsXG4gICAgICBidXR0b25Db2xsYXBzZWQ6IFwiXCIsXG4gICAgfSxcbiAgfSxcbn07XG5cbnN1cnZleUNzc1tcIm1vZGVyblwiXSA9IG1vZGVybkNzcztcbiIsImV4cG9ydCB2YXIgc3VydmV5Q3NzOiBhbnkgPSB7XHJcbiAgY3VycmVudFR5cGU6IFwiXCIsXHJcbiAgZ2V0Q3NzOiBmdW5jdGlvbigpIHtcclxuICAgIHZhciBsb2MgPSB0aGlzLmN1cnJlbnRUeXBlID8gdGhpc1t0aGlzLmN1cnJlbnRUeXBlXSA6IGRlZmF1bHRTdGFuZGFyZENzcztcclxuICAgIGlmICghbG9jKSBsb2MgPSBkZWZhdWx0U3RhbmRhcmRDc3M7XHJcbiAgICByZXR1cm4gbG9jO1xyXG4gIH0sXHJcbn07XHJcblxyXG5leHBvcnQgdmFyIGRlZmF1bHRTdGFuZGFyZENzcyA9IHtcclxuICByb290OiBcInN2X21haW4gc3ZfZGVmYXVsdF9jc3NcIixcclxuICBjb250YWluZXI6IFwic3ZfY29udGFpbmVyXCIsXHJcbiAgaGVhZGVyOiBcInN2X2hlYWRlclwiLFxyXG4gIGJvZHk6IFwic3ZfYm9keVwiLFxyXG4gIGJvZHlFbXB0eTogXCJzdl9ib2R5IHN2X2JvZHlfZW1wdHlcIixcclxuICBmb290ZXI6IFwic3ZfbmF2XCIsXHJcbiAgdGl0bGU6IFwiXCIsXHJcbiAgZGVzY3JpcHRpb246IFwiXCIsXHJcbiAgbG9nbzogXCJzdl9sb2dvXCIsXHJcbiAgbG9nb0ltYWdlOiBcInN2X2xvZ29fX2ltYWdlXCIsXHJcbiAgaGVhZGVyVGV4dDogXCJzdl9oZWFkZXJfX3RleHRcIixcclxuICBuYXZpZ2F0aW9uQnV0dG9uOiBcIlwiLFxyXG4gIGNvbXBsZXRlZFBhZ2U6IFwic3ZfY29tcGxldGVkX3BhZ2VcIixcclxuICBuYXZpZ2F0aW9uOiB7XHJcbiAgICBjb21wbGV0ZTogXCJzdl9jb21wbGV0ZV9idG5cIixcclxuICAgIHByZXY6IFwic3ZfcHJldl9idG5cIixcclxuICAgIG5leHQ6IFwic3ZfbmV4dF9idG5cIixcclxuICAgIHN0YXJ0OiBcInN2X3N0YXJ0X2J0blwiLFxyXG4gICAgcHJldmlldzogXCJzdl9wcmV2aWV3X2J0blwiLFxyXG4gICAgZWRpdDogXCJzdl9lZGl0X2J0blwiLFxyXG4gIH0sXHJcbiAgcHJvZ3Jlc3M6IFwic3ZfcHJvZ3Jlc3NcIixcclxuICBwcm9ncmVzc0JhcjogXCJzdl9wcm9ncmVzc19iYXJcIixcclxuICBwcm9ncmVzc1RleHRJbkJhcjogXCJzdi1oaWRkZW5cIixcclxuICBwcm9ncmVzc0J1dHRvbnNDb250YWluZXJDZW50ZXI6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fY29udGFpbmVyLWNlbnRlclwiLFxyXG4gIHByb2dyZXNzQnV0dG9uc0NvbnRhaW5lcjogXCJzdl9wcm9ncmVzcy1idXR0b25zX19jb250YWluZXJcIixcclxuICBwcm9ncmVzc0J1dHRvbnNJbWFnZUJ1dHRvbkxlZnQ6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19faW1hZ2UtYnV0dG9uLWxlZnRcIixcclxuICBwcm9ncmVzc0J1dHRvbnNJbWFnZUJ1dHRvblJpZ2h0OiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2ltYWdlLWJ1dHRvbi1yaWdodFwiLFxyXG4gIHByb2dyZXNzQnV0dG9uc0ltYWdlQnV0dG9uSGlkZGVuOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2ltYWdlLWJ1dHRvbi0taGlkZGVuXCIsXHJcbiAgcHJvZ3Jlc3NCdXR0b25zTGlzdENvbnRhaW5lcjogXCJzdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWNvbnRhaW5lclwiLFxyXG4gIHByb2dyZXNzQnV0dG9uc0xpc3Q6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdFwiLFxyXG4gIHByb2dyZXNzQnV0dG9uc0xpc3RFbGVtZW50UGFzc2VkOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QtZWxlbWVudC0tcGFzc2VkXCIsXHJcbiAgcHJvZ3Jlc3NCdXR0b25zTGlzdEVsZW1lbnRDdXJyZW50OlxyXG4gICAgXCJzdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLWN1cnJlbnRcIixcclxuICBwcm9ncmVzc0J1dHRvbnNMaXN0RWxlbWVudE5vbkNsaWNrYWJsZTpcclxuICAgIFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdC1lbGVtZW50LS1ub25jbGlja2FibGVcIixcclxuICBwcm9ncmVzc0J1dHRvbnNQYWdlVGl0bGU6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fcGFnZS10aXRsZVwiLFxyXG4gIHByb2dyZXNzQnV0dG9uc1BhZ2VEZXNjcmlwdGlvbjogXCJzdl9wcm9ncmVzcy1idXR0b25zX19wYWdlLWRlc2NyaXB0aW9uXCIsXHJcbiAgcGFnZToge1xyXG4gICAgcm9vdDogXCJzdl9wX3Jvb3RcIixcclxuICAgIHRpdGxlOiBcInN2X3BhZ2VfdGl0bGVcIixcclxuICAgIGRlc2NyaXB0aW9uOiBcIlwiLFxyXG4gIH0sXHJcbiAgLy8gVE9ETzogbW92ZSB0byB0aGUgcGFnZSBvYmplY3RcclxuICBwYWdlVGl0bGU6IFwic3ZfcGFnZV90aXRsZVwiLFxyXG4gIHBhZ2VEZXNjcmlwdGlvbjogXCJcIixcclxuICByb3c6IFwic3Zfcm93XCIsXHJcbiAgcXVlc3Rpb246IHtcclxuICAgIG1haW5Sb290OiBcInN2X3Egc3ZfcXN0blwiLFxyXG4gICAgZmxvd1Jvb3Q6IFwic3ZfcV9mbG93IHN2X3FzdG5cIixcclxuICAgIGhlYWRlcjogXCJcIixcclxuICAgIGhlYWRlckxlZnQ6IFwidGl0bGUtbGVmdFwiLFxyXG4gICAgY29udGVudDogXCJcIixcclxuICAgIGNvbnRlbnRMZWZ0OiBcImNvbnRlbnQtbGVmdFwiLFxyXG4gICAgdGl0bGVMZWZ0Um9vdDogXCJzdl9xc3RuX2xlZnRcIixcclxuICAgIHJlcXVpcmVkVGV4dDogXCJzdl9xX3JlcXVpcmVkX3RleHRcIixcclxuICAgIHRpdGxlOiBcInN2X3FfdGl0bGVcIixcclxuICAgIHRpdGxlRXhwYW5kYWJsZTogXCJzdl9xX3RpdGxlX2V4cGFuZGFibGVcIixcclxuICAgIG51bWJlcjogXCJzdl9xX251bVwiLFxyXG4gICAgZGVzY3JpcHRpb246IFwic3ZfcV9kZXNjcmlwdGlvblwiLFxyXG4gICAgY29tbWVudDogXCJcIixcclxuICAgIHJlcXVpcmVkOiBcIlwiLFxyXG4gICAgdGl0bGVSZXF1aXJlZDogXCJcIixcclxuICAgIGhhc0Vycm9yOiBcIlwiLFxyXG4gICAgaW5kZW50OiAyMCxcclxuICAgIGZvb3RlcjogXCJzdl9xX2Zvb3RlclwiLFxyXG4gICAgZm9ybUdyb3VwOiBcImZvcm0tZ3JvdXBcIixcclxuICAgIGFzQ2VsbDogXCJzdl9tYXRyaXhfY2VsbFwiLFxyXG4gICAgaWNvbjogXCJzdl9xdWVzdGlvbl9pY29uXCIsXHJcbiAgICBpY29uRXhwYW5kZWQ6IFwic3ZfZXhwYW5kZWRcIixcclxuICAgIGRpc2FibGVkOiBcInN2X3EtLWRpc2FibGVkXCIsXHJcbiAgfSxcclxuICBwYW5lbDoge1xyXG4gICAgdGl0bGU6IFwic3ZfcF90aXRsZVwiLFxyXG4gICAgdGl0bGVFeHBhbmRhYmxlOiBcInN2X3BfdGl0bGVfZXhwYW5kYWJsZVwiLFxyXG4gICAgdGl0bGVPbkVycm9yOiBcIlwiLFxyXG4gICAgaWNvbjogXCJzdl9wYW5lbF9pY29uXCIsXHJcbiAgICBpY29uRXhwYW5kZWQ6IFwic3ZfZXhwYW5kZWRcIixcclxuICAgIGRlc2NyaXB0aW9uOiBcInN2X3BfZGVzY3JpcHRpb25cIixcclxuICAgIGNvbnRhaW5lcjogXCJzdl9wX2NvbnRhaW5lclwiLFxyXG4gICAgZm9vdGVyOiBcInN2X3BfZm9vdGVyXCIsXHJcbiAgICBudW1iZXI6IFwic3ZfcV9udW1cIixcclxuICAgIHJlcXVpcmVkVGV4dDogXCJzdl9xX3JlcXVpcmVkX3RleHRcIixcclxuICB9LFxyXG4gIGVycm9yOiB7XHJcbiAgICByb290OiBcInN2X3FfZXJib3hcIixcclxuICAgIGljb246IFwiXCIsXHJcbiAgICBpdGVtOiBcIlwiLFxyXG4gICAgbG9jYXRpb25Ub3A6IFwic3ZfcXN0bl9lcnJvcl90b3BcIixcclxuICAgIGxvY2F0aW9uQm90dG9tOiBcInN2X3FzdG5fZXJyb3JfYm90dG9tXCIsXHJcbiAgfSxcclxuXHJcbiAgYm9vbGVhbjoge1xyXG4gICAgcm9vdDogXCJzdl9xY2JjIHN2X3FibG5cIixcclxuICAgIGl0ZW06IFwic3YtYm9vbGVhblwiLFxyXG4gICAgY29udHJvbDogXCJzdi12aXN1YWxseWhpZGRlblwiLFxyXG4gICAgaXRlbUNoZWNrZWQ6IFwic3YtYm9vbGVhbi0tY2hlY2tlZCBjaGVja2VkXCIsXHJcbiAgICBpdGVtSW5kZXRlcm1pbmF0ZTogXCJzdi1ib29sZWFuLS1pbmRldGVybWluYXRlXCIsXHJcbiAgICBpdGVtRGlzYWJsZWQ6IFwic3YtYm9vbGVhbi0tZGlzYWJsZWRcIixcclxuICAgIHN3aXRjaDogXCJzdi1ib29sZWFuX19zd2l0Y2hcIixcclxuICAgIHNsaWRlcjogXCJzdi1ib29sZWFuX19zbGlkZXJcIixcclxuICAgIHNsaWRlclRleHQ6IFwic3YtaGlkZGVuXCIsXHJcbiAgICBsYWJlbDogXCJzdi1ib29sZWFuX19sYWJlbCBcIixcclxuICAgIGRpc2FibGVkTGFiZWw6IFwic3YtYm9vbGVhbl9fbGFiZWwtLWRpc2FibGVkXCIsXHJcbiAgICBtYXRlcmlhbERlY29yYXRvcjogXCJzdi1pdGVtX19kZWNvcmF0b3Igc3YtYm9vbGVhbl9fZGVjb3JhdG9yIFwiLFxyXG4gICAgaXRlbURlY29yYXRvcjogXCJzdi1pdGVtX19zdmcgIHN2LWJvb2xlYW5fX3N2Z1wiLFxyXG4gICAgY2hlY2tlZFBhdGg6IFwic3YtYm9vbGVhbl9fY2hlY2tlZC1wYXRoXCIsXHJcbiAgICB1bmNoZWNrZWRQYXRoOiBcInN2LWJvb2xlYW5fX3VuY2hlY2tlZC1wYXRoXCIsXHJcbiAgICBpbmRldGVybWluYXRlUGF0aDogXCJzdi1ib29sZWFuX19pbmRldGVybWluYXRlLXBhdGhcIixcclxuICB9LFxyXG4gIGNoZWNrYm94OiB7XHJcbiAgICByb290OiBcInN2X3FjYmMgc3ZfcWNieFwiLFxyXG4gICAgaXRlbTogXCJzdl9xX2NoZWNrYm94XCIsXHJcbiAgICBpdGVtU2VsZWN0QWxsOiBcInN2X3FfY2hlY2tib3hfc2VsZWN0YWxsXCIsXHJcbiAgICBpdGVtTm9uZTogXCJzdl9xX2NoZWNrYm94X25vbmVcIixcclxuICAgIGl0ZW1DaGVja2VkOiBcImNoZWNrZWRcIixcclxuICAgIGl0ZW1JbmxpbmU6IFwic3ZfcV9jaGVja2JveF9pbmxpbmVcIixcclxuICAgIGxhYmVsOiBcInN2X3FfY2hlY2tib3hfbGFiZWxcIixcclxuICAgIGxhYmVsQ2hlY2tlZDogXCJcIixcclxuICAgIGl0ZW1Db250cm9sOiBcInN2X3FfY2hlY2tib3hfY29udHJvbF9pdGVtXCIsXHJcbiAgICBpdGVtRGVjb3JhdG9yOiBcInN2LWhpZGRlblwiLFxyXG4gICAgY29udHJvbExhYmVsOiBcInN2X3FfY2hlY2tib3hfY29udHJvbF9sYWJlbFwiLFxyXG4gICAgbWF0ZXJpYWxEZWNvcmF0b3I6IFwiY2hlY2tib3gtbWF0ZXJpYWxcIixcclxuICAgIG90aGVyOiBcInN2X3Ffb3RoZXIgc3ZfcV9jaGVja2JveF9vdGhlclwiLFxyXG4gICAgY29sdW1uOiBcInN2X3Ffc2VsZWN0X2NvbHVtblwiLFxyXG4gIH0sXHJcbiAgcmFua2luZzoge1xyXG4gICAgcm9vdDogXCJzdi1yYW5raW5nXCIsXHJcbiAgICByb290TW9iaWxlTW9kOiBcInN2LXJhbmtpbmctLW1vYmlsZVwiLFxyXG4gICAgcm9vdERyYWdNb2Q6IFwic3YtcmFua2luZy0tZHJhZ1wiLFxyXG4gICAgaXRlbTogXCJzdi1yYW5raW5nLWl0ZW1cIixcclxuICAgIGl0ZW1Db250ZW50OiBcInN2LXJhbmtpbmctaXRlbV9fY29udGVudFwiLFxyXG4gICAgaXRlbUluZGV4OiBcInN2LXJhbmtpbmctaXRlbV9faW5kZXhcIixcclxuICAgIC8vIGl0ZW1UZXh0OiBcInN2LXJhbmtpbmctaXRlbV9fdGV4dFwiLFxyXG4gICAgY29udHJvbExhYmVsOiBcInN2LXJhbmtpbmctaXRlbV9fdGV4dFwiLFxyXG4gICAgaXRlbUdob3N0Tm9kZTogXCJzdi1yYW5raW5nLWl0ZW1fX2dob3N0XCIsXHJcbiAgICBpdGVtSWNvbkNvbnRhaW5lcjogXCJzdi1yYW5raW5nLWl0ZW1fX2ljb24tY29udGFpbmVyXCIsXHJcbiAgICBpdGVtSWNvbjogXCJzdi1yYW5raW5nLWl0ZW1fX2ljb25cIixcclxuICAgIGl0ZW1JY29uSG92ZXJNb2Q6IFwic3YtcmFua2luZy1pdGVtX19pY29uLS1ob3ZlclwiLFxyXG4gICAgaXRlbUljb25Gb2N1c01vZDogXCJzdi1yYW5raW5nLWl0ZW1fX2ljb24tLWZvY3VzXCIsXHJcbiAgICBpdGVtR2hvc3RNb2Q6IFwic3YtcmFua2luZy1pdGVtLS1naG9zdFwiLFxyXG4gICAgaXRlbURyYWdNb2Q6IFwic3YtcmFua2luZy1pdGVtLS1kcmFnXCIsXHJcbiAgfSxcclxuICBjb21tZW50OiBcIlwiLFxyXG4gIGRyb3Bkb3duOiB7XHJcbiAgICByb290OiBcIlwiLFxyXG4gICAgY29udHJvbDogXCJzdl9xX2Ryb3Bkb3duX2NvbnRyb2xcIixcclxuICAgIHNlbGVjdFdyYXBwZXI6IFwic3Zfc2VsZWN0X3dyYXBwZXJcIixcclxuICAgIG90aGVyOiBcInN2X3FfZGRfb3RoZXJcIixcclxuICB9LFxyXG4gIGh0bWw6IHsgcm9vdDogXCJcIiB9LFxyXG4gIGltYWdlOiB7IHJvb3Q6IFwic3ZfcV9pbWFnZVwiLCBpbWFnZTogXCJzdl9pbWFnZV9pbWFnZVwiIH0sXHJcbiAgbWF0cml4OiB7XHJcbiAgICByb290OiBcInN2X3FfbWF0cml4XCIsXHJcbiAgICBsYWJlbDogXCJzdl9xX21fbGFiZWxcIixcclxuICAgIGl0ZW1DaGVja2VkOiBcImNoZWNrZWRcIixcclxuICAgIGl0ZW1EZWNvcmF0b3I6IFwic3YtaGlkZGVuXCIsXHJcbiAgICBjZWxsOiBcInN2X3FfbV9jZWxsXCIsXHJcbiAgICBjZWxsVGV4dDogXCJzdl9xX21fY2VsbF90ZXh0XCIsXHJcbiAgICBjZWxsVGV4dFNlbGVjdGVkOiBcInN2X3FfbV9jZWxsX3NlbGVjdGVkXCIsXHJcbiAgICBjZWxsTGFiZWw6IFwic3ZfcV9tX2NlbGxfbGFiZWxcIixcclxuICB9LFxyXG4gIG1hdHJpeGRyb3Bkb3duOiB7XHJcbiAgICByb290OiBcInN2X3FfbWF0cml4X2Ryb3Bkb3duXCIsXHJcbiAgICBjZWxsOiBcInN2X21hdHJpeF9jZWxsXCIsXHJcbiAgICBoZWFkZXJDZWxsOiBcInN2X21hdHJpeF9jZWxsX2hlYWRlclwiLFxyXG4gICAgcm93OiBcInN2X21hdHJpeF9yb3dcIixcclxuICAgIGRldGFpbFJvdzogXCJzdl9tYXRyaXhfZGV0YWlsX3Jvd1wiLFxyXG4gICAgZGV0YWlsUm93VGV4dDogXCJzdl9tYXRyaXhfY2VsbF9kZXRhaWxfcm93dGV4dFwiLFxyXG4gICAgZGV0YWlsQ2VsbDogXCJzdl9tYXRyaXhfY2VsbF9kZXRhaWxcIixcclxuICAgIGNob2ljZUNlbGw6IFwic3YtdGFibGVfX2NlbGwtLWNob2ljZVwiLFxyXG4gICAgZGV0YWlsQnV0dG9uOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbF9idXR0b25cIixcclxuICAgIGRldGFpbEJ1dHRvbkV4cGFuZGVkOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbF9idXR0b25fZXhwYW5kZWRcIixcclxuICAgIGRldGFpbEljb246IFwic3ZfZGV0YWlsX3BhbmVsX2ljb25cIixcclxuICAgIGRldGFpbEljb25FeHBhbmRlZDogXCJzdl9kZXRhaWxfZXhwYW5kZWRcIixcclxuICAgIGRldGFpbFBhbmVsQ2VsbDogXCJzdl9tYXRyaXhfY2VsbF9kZXRhaWxfcGFuZWxcIixcclxuICAgIGFjdGlvbnNDZWxsOiBcInN2X21hdHJpeF9jZWxsIHN2X21hdHJpeF9jZWxsX2FjdGlvbnNcIixcclxuICB9LFxyXG4gIG1hdHJpeGR5bmFtaWM6IHtcclxuICAgIHJvb3Q6IFwic3ZfcV9tYXRyaXhfZHluYW1pY1wiLFxyXG4gICAgYnV0dG9uOiBcInN2X21hdHJpeF9keW5hbWljX2J1dHRvblwiLFxyXG4gICAgYnV0dG9uQWRkOiBcIlwiLFxyXG4gICAgYnV0dG9uUmVtb3ZlOiBcIlwiLFxyXG4gICAgaWNvbkFkZDogXCJcIixcclxuICAgIGljb25SZW1vdmU6IFwiXCIsXHJcbiAgICBpY29uRHJhZzogXCJzdi1tYXRyaXhkeW5hbWljX19kcmFnLWljb25cIixcclxuICAgIGNlbGw6IFwic3ZfbWF0cml4X2NlbGxcIixcclxuICAgIGhlYWRlckNlbGw6IFwic3ZfbWF0cml4X2NlbGxfaGVhZGVyXCIsXHJcbiAgICByb3c6IFwic3ZfbWF0cml4X3Jvd1wiLFxyXG4gICAgZGV0YWlsUm93OiBcInN2X21hdHJpeF9kZXRhaWxfcm93XCIsXHJcbiAgICBkZXRhaWxDZWxsOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbFwiLFxyXG4gICAgY2hvaWNlQ2VsbDogXCJzdi10YWJsZV9fY2VsbC0tY2hvaWNlXCIsXHJcbiAgICBkZXRhaWxCdXR0b246IFwic3ZfbWF0cml4X2NlbGxfZGV0YWlsX2J1dHRvblwiLFxyXG4gICAgZGV0YWlsQnV0dG9uRXhwYW5kZWQ6IFwic3ZfbWF0cml4X2NlbGxfZGV0YWlsX2J1dHRvbl9leHBhbmRlZFwiLFxyXG4gICAgZGV0YWlsSWNvbjogXCJzdl9kZXRhaWxfcGFuZWxfaWNvblwiLFxyXG4gICAgZGV0YWlsSWNvbkV4cGFuZGVkOiBcInN2X2RldGFpbF9leHBhbmRlZFwiLFxyXG4gICAgZGV0YWlsUGFuZWxDZWxsOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbF9wYW5lbFwiLFxyXG4gICAgYWN0aW9uc0NlbGw6IFwic3ZfbWF0cml4X2NlbGwgc3ZfbWF0cml4X2NlbGxfYWN0aW9uc1wiLFxyXG4gICAgZW1wdHlSb3dzU2VjdGlvbjogXCJzdl9tYXRyaXhfZW1wdHlfcm93c19zZWN0aW9uXCIsXHJcbiAgICBlbXB0eVJvd3NUZXh0OiBcInN2X21hdHJpeF9lbXB0eV9yb3dzX3RleHRcIixcclxuICAgIGVtcHR5Um93c0J1dHRvbjogXCJcIixcclxuICB9LFxyXG4gIHBhbmVsZHluYW1pYzoge1xyXG4gICAgcm9vdDogXCJzdl9wYW5lbF9keW5hbWljXCIsXHJcbiAgICB0aXRsZTogXCJzdl9wX3RpdGxlXCIsXHJcbiAgICBidXR0b246IFwiXCIsXHJcbiAgICBidXR0b25BZGQ6IFwic3YtcGFuZWxkeW5hbWljX19hZGQtYnRuXCIsXHJcbiAgICBidXR0b25SZW1vdmU6IFwic3ZfcF9yZW1vdmVfYnRuXCIsXHJcbiAgICBidXR0b25SZW1vdmVSaWdodDogXCJzdl9wX3JlbW92ZV9idG5fcmlnaHRcIixcclxuICAgIGJ1dHRvblByZXY6IFwic3YtcGFuZWxkeW5hbWljX19wcmV2LWJ0blwiLFxyXG4gICAgYnV0dG9uTmV4dDogXCJzdi1wYW5lbGR5bmFtaWNfX25leHQtYnRuXCIsXHJcbiAgICBwcm9ncmVzc0NvbnRhaW5lcjogXCJzdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzLWNvbnRhaW5lclwiLFxyXG4gICAgcHJvZ3Jlc3M6IFwic3YtcHJvZ3Jlc3NcIixcclxuICAgIHByb2dyZXNzQmFyOiBcInN2LXByb2dyZXNzX19iYXJcIixcclxuICAgIHByb2dyZXNzVGV4dDogXCJzdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzLXRleHRcIixcclxuICAgIHBhbmVsV3JhcHBlcjogXCJzdl9wX3dyYXBwZXJcIixcclxuICAgIHBhbmVsV3JhcHBlckluUm93OiBcInN2X3Bfd3JhcHBlcl9pbl9yb3dcIixcclxuICB9LFxyXG4gIG11bHRpcGxldGV4dDoge1xyXG4gICAgcm9vdDogXCJzdl9xX210XCIsXHJcbiAgICBpdGVtVGl0bGU6IFwic3ZfcV9tdF90aXRsZVwiLFxyXG4gICAgcm93OiBcInN2X3FfbXRfcm93XCIsXHJcbiAgICBpdGVtVmFsdWU6IFwic3ZfcV9tdF9pdGVtX3ZhbHVlIHN2X3FfdGV4dF9yb290XCIsXHJcbiAgfSxcclxuICByYWRpb2dyb3VwOiB7XHJcbiAgICByb290OiBcInN2X3FjYmNcIixcclxuICAgIGl0ZW06IFwic3ZfcV9yYWRpb2dyb3VwXCIsXHJcbiAgICBpdGVtQ2hlY2tlZDogXCJjaGVja2VkXCIsXHJcbiAgICBpdGVtSW5saW5lOiBcInN2X3FfcmFkaW9ncm91cF9pbmxpbmVcIixcclxuICAgIGl0ZW1EZWNvcmF0b3I6IFwic3YtaGlkZGVuXCIsXHJcbiAgICBsYWJlbDogXCJzdl9xX3JhZGlvZ3JvdXBfbGFiZWxcIixcclxuICAgIGxhYmVsQ2hlY2tlZDogXCJcIixcclxuICAgIGl0ZW1Db250cm9sOiBcInN2X3FfcmFkaW9ncm91cF9jb250cm9sX2l0ZW1cIixcclxuICAgIGNvbnRyb2xMYWJlbDogXCJcIixcclxuICAgIG1hdGVyaWFsRGVjb3JhdG9yOiBcImNpcmNsZVwiLFxyXG4gICAgb3RoZXI6IFwic3ZfcV9vdGhlciBzdl9xX3JhZGlvZ3JvdXBfb3RoZXJcIixcclxuICAgIGNsZWFyQnV0dG9uOiBcInN2X3FfcmFkaW9ncm91cF9jbGVhclwiLFxyXG4gICAgY29sdW1uOiBcInN2X3Ffc2VsZWN0X2NvbHVtblwiLFxyXG4gIH0sXHJcbiAgYnV0dG9uZ3JvdXA6IHtcclxuICAgIHJvb3Q6IFwic3YtYnV0dG9uLWdyb3VwXCIsXHJcbiAgICBpdGVtOiBcInN2LWJ1dHRvbi1ncm91cF9faXRlbVwiLFxyXG4gICAgaXRlbUljb246IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLWljb25cIixcclxuICAgIGl0ZW1EZWNvcmF0b3I6IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLWRlY29yYXRvclwiLFxyXG4gICAgaXRlbUNhcHRpb246IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLWNhcHRpb25cIixcclxuICAgIGl0ZW1Ib3ZlcjogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW0tLWhvdmVyXCIsXHJcbiAgICBpdGVtU2VsZWN0ZWQ6IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLS1zZWxlY3RlZFwiLFxyXG4gICAgaXRlbURpc2FibGVkOiBcInN2LWJ1dHRvbi1ncm91cF9faXRlbS0tZGlzYWJsZWRcIixcclxuICAgIGl0ZW1Db250cm9sOiBcInN2LXZpc3VhbGx5aGlkZGVuXCIsXHJcbiAgfSxcclxuICBpbWFnZXBpY2tlcjoge1xyXG4gICAgcm9vdDogXCJzdl9pbWdzZWxcIixcclxuICAgIGl0ZW06IFwic3ZfcV9pbWdzZWxcIixcclxuICAgIGl0ZW1DaGVja2VkOiBcImNoZWNrZWRcIixcclxuICAgIGxhYmVsOiBcInN2X3FfaW1nc2VsX2xhYmVsXCIsXHJcbiAgICBpdGVtQ29udHJvbDogXCJzdl9xX2ltZ3NlbF9jb250cm9sX2l0ZW1cIixcclxuICAgIGltYWdlOiBcInN2X3FfaW1nc2VsX2ltYWdlXCIsXHJcbiAgICBpdGVtSW5saW5lOiBcInN2X3FfaW1hZ2VwaWNrZXJfaW5saW5lXCIsXHJcbiAgICBpdGVtVGV4dDogXCJzdl9xX2ltZ3NlbF90ZXh0XCIsXHJcbiAgICBjbGVhckJ1dHRvbjogXCJzdl9xX3JhZGlvZ3JvdXBfY2xlYXJcIixcclxuICB9LFxyXG4gIHJhdGluZzoge1xyXG4gICAgcm9vdDogXCJzdl9xX3JhdGluZ1wiLFxyXG4gICAgaXRlbTogXCJzdl9xX3JhdGluZ19pdGVtXCIsXHJcbiAgICBzZWxlY3RlZDogXCJhY3RpdmVcIixcclxuICAgIG1pblRleHQ6IFwic3ZfcV9yYXRpbmdfbWluX3RleHRcIixcclxuICAgIGl0ZW1UZXh0OiBcInN2X3FfcmF0aW5nX2l0ZW1fdGV4dFwiLFxyXG4gICAgbWF4VGV4dDogXCJzdl9xX3JhdGluZ19tYXhfdGV4dFwiLFxyXG4gIH0sXHJcbiAgdGV4dDogXCJzdl9xX3RleHRfcm9vdFwiLFxyXG4gIGV4cHJlc3Npb246IFwiXCIsXHJcbiAgZmlsZToge1xyXG4gICAgcm9vdDogXCJzdl9xX2ZpbGVcIixcclxuICAgIHBsYWNlaG9sZGVySW5wdXQ6IFwic3YtdmlzdWFsbHloaWRkZW5cIixcclxuICAgIHByZXZpZXc6IFwic3ZfcV9maWxlX3ByZXZpZXdcIixcclxuICAgIHJlbW92ZUJ1dHRvbjogXCJzdl9xX2ZpbGVfcmVtb3ZlX2J1dHRvblwiLFxyXG4gICAgZmlsZUlucHV0OiBcInN2LXZpc3VhbGx5aGlkZGVuXCIsXHJcbiAgICByZW1vdmVGaWxlOiBcInN2X3FfZmlsZV9yZW1vdmVcIixcclxuICAgIHJlbW92ZUZpbGVTdmc6IFwic3YtaGlkZGVuXCIsXHJcbiAgICBmaWxlRGVjb3JhdG9yOiBcInN2LWZpbGVfX2RlY29yYXRvclwiLFxyXG4gICAgZmlsZVNpZ25Cb3R0b206IFwic3YtaGlkZGVuXCIsXHJcbiAgICByZW1vdmVCdXR0b25Cb3R0b206IFwic3YtaGlkZGVuXCIsXHJcbiAgICBjaG9vc2VGaWxlOiBcInN2X3FfZmlsZV9jaG9vc2VfYnV0dG9uXCIsXHJcbiAgICBub0ZpbGVDaG9zZW46IFwic3ZfcV9maWxlX3BsYWNlaG9sZGVyXCIsXHJcbiAgfSxcclxuICBzaWduYXR1cmVwYWQ6IHtcclxuICAgIHJvb3Q6IFwic3ZfcV9zaWduYXR1cmVwYWQgc2pzX3NwX2NvbnRhaW5lclwiLFxyXG4gICAgY29udHJvbHM6IFwic2pzX3NwX2NvbnRyb2xzXCIsXHJcbiAgICBwbGFjZWhvbGRlcjogXCJzanNfc3BfcGxhY2Vob2xkZXJcIixcclxuICAgIGNsZWFyQnV0dG9uOiBcInNqc19zcF9jbGVhclwiLFxyXG4gIH0sXHJcbiAgc2F2ZURhdGE6IHtcclxuICAgIHJvb3Q6IFwiXCIsXHJcbiAgICBzYXZpbmc6IFwiXCIsXHJcbiAgICBlcnJvcjogXCJcIixcclxuICAgIHN1Y2Nlc3M6IFwiXCIsXHJcbiAgICBzYXZlQWdhaW5CdXR0b246IFwiXCIsXHJcbiAgfSxcclxuICB3aW5kb3c6IHtcclxuICAgIHJvb3Q6IFwic3Zfd2luZG93XCIsXHJcbiAgICBib2R5OiBcInN2X3dpbmRvd19jb250ZW50XCIsXHJcbiAgICBoZWFkZXI6IHtcclxuICAgICAgcm9vdDogXCJzdl93aW5kb3dfdGl0bGVcIixcclxuICAgICAgdGl0bGU6IFwiXCIsXHJcbiAgICAgIGJ1dHRvbjogXCJcIixcclxuICAgICAgYnV0dG9uRXhwYW5kZWQ6IFwiXCIsXHJcbiAgICAgIGJ1dHRvbkNvbGxhcHNlZDogXCJcIixcclxuICAgIH0sXHJcbiAgfSxcclxufTtcclxuXHJcbnN1cnZleUNzc1tcInN0YW5kYXJkXCJdID0gZGVmYXVsdFN0YW5kYXJkQ3NzO1xyXG4iLCJpbXBvcnQgeyBCYXNlLCBFdmVudEJhc2UgfSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQgeyBJRWxlbWVudCB9IGZyb20gXCIuL2Jhc2UtaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcIi4vaXRlbXZhbHVlXCI7XG5pbXBvcnQgeyBKc29uT2JqZWN0LCBwcm9wZXJ0eSwgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFBhZ2VNb2RlbCB9IGZyb20gXCIuL3BhZ2VcIjtcbmltcG9ydCB7IFF1ZXN0aW9uU2VsZWN0QmFzZSB9IGZyb20gXCIuL3F1ZXN0aW9uX2Jhc2VzZWxlY3RcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcIi4vc3VydmV5XCI7XG5cbmV4cG9ydCBjbGFzcyBEcmFnRHJvcEhlbHBlciBleHRlbmRzIEJhc2Uge1xuICBwdWJsaWMgb25CZWZvcmVEcm9wOiBFdmVudEJhc2U8RHJhZ0Ryb3BIZWxwZXI+ID0gbmV3IEV2ZW50QmFzZSgpO1xuICBwdWJsaWMgb25BZnRlckRyb3A6IEV2ZW50QmFzZTxEcmFnRHJvcEhlbHBlcj4gPSBuZXcgRXZlbnRCYXNlKCk7XG5cbiAgcHVibGljIHN0YXRpYyByZXN0cmljdERyYWdRdWVzdGlvbkJldHdlZW5QYWdlczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHB1YmxpYyBzdGF0aWMgZWRnZUhlaWdodDogbnVtYmVyID0gMzA7XG4gIHB1YmxpYyBzdGF0aWMgbmVzdGVkUGFuZWxEZXB0aDogbnVtYmVyID0gLTE7XG4gIHB1YmxpYyBzdGF0aWMgcHJldkV2ZW50OiBhbnkgPSB7XG4gICAgZWxlbWVudDogbnVsbCxcbiAgICB4OiAtMSxcbiAgICB5OiAtMSxcbiAgfTtcbiAgcHVibGljIHN0YXRpYyBuZXdHaG9zdFBhZ2U6IFBhZ2VNb2RlbCA9IG51bGw7XG4gIHB1YmxpYyBzdGF0aWMgZ2hvc3RTdXJ2ZXlFbGVtZW50TmFtZSA9XG4gICAgXCJzdmMtZHJhZy1kcm9wLWdob3N0LXN1cnZleS1lbGVtZW50LW5hbWVcIjsgLy8gYmVmb3JlIHJlbmFtaW5nIHVzZSBnbG9iYSBzZWFyY2ggKHdlIGhhdmUgYWxzbyBjc3Mgc2VsZWN0b3JzKVxuXG4gIHByaXZhdGUgZHJhZ2dlZFN1cnZleUVsZW1lbnQ6IElFbGVtZW50ID0gbnVsbDtcbiAgQHByb3BlcnR5KCkgZHJvcFRhcmdldFN1cnZleUVsZW1lbnQ6IElFbGVtZW50ID0gbnVsbDtcblxuICBwcml2YXRlIGRyYWdnZWRFbGVtZW50U2hvcnRjdXQ6IEhUTUxFbGVtZW50ID0gbnVsbDtcbiAgcHJpdmF0ZSBzY3JvbGxJbnRlcnZhbElkOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiA9IG51bGw7XG4gIHByaXZhdGUgZ2hvc3RTdXJ2ZXlFbGVtZW50OiBJRWxlbWVudCA9IG51bGw7XG4gIEBwcm9wZXJ0eSgpIGlzQm90dG9tOiBib29sZWFuID0gbnVsbDtcbiAgcHJpdmF0ZSBpc0VkZ2U6IGJvb2xlYW4gPSBudWxsO1xuICBwcml2YXRlIHBhZ2VPclBhbmVsOiBQYWdlTW9kZWwgPSBudWxsO1xuICBwcml2YXRlIGl0ZW1WYWx1ZVBhcmVudFF1ZXN0aW9uOiBRdWVzdGlvblNlbGVjdEJhc2UgPSBudWxsO1xuXG4gIHByb3RlY3RlZCBpc0l0ZW1WYWx1ZUJlaW5nRHJhZ2dlZCgpIHtcbiAgICByZXR1cm4gU2VyaWFsaXplci5pc0Rlc2NlbmRhbnRPZihcbiAgICAgIHRoaXMuZHJhZ2dlZFN1cnZleUVsZW1lbnQuZ2V0VHlwZSgpLFxuICAgICAgXCJpdGVtdmFsdWVcIlxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IGRyb3BUYXJnZXREYXRhQXR0cmlidXRlTmFtZSgpIHtcbiAgICBpZiAodGhpcy5pc0l0ZW1WYWx1ZUJlaW5nRHJhZ2dlZCgpKSB7XG4gICAgICByZXR1cm4gXCJbZGF0YS1zdmMtZHJvcC10YXJnZXQtaXRlbS12YWx1ZV1cIjtcbiAgICB9XG4gICAgcmV0dXJuIFwiW2RhdGEtc3ZjLWRyb3AtdGFyZ2V0LWVsZW1lbnQtbmFtZV1cIjtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc3VydmV5VmFsdWU/OiBTdXJ2ZXlNb2RlbCwgcHJpdmF0ZSBjcmVhdG9yPzogYW55KSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3VydmV5KCkge1xuICAgIHJldHVybiB0aGlzLnN1cnZleVZhbHVlIHx8IHRoaXMuY3JlYXRvci5zdXJ2ZXk7XG4gIH1cblxuICBwdWJsaWMgc3RhcnREcmFnVG9vbGJveEl0ZW0oXG4gICAgZXZlbnQ6IFBvaW50ZXJFdmVudCxcbiAgICBkcmFnZ2VkRWxlbWVudEpzb246IEpzb25PYmplY3RcbiAgKSB7XG4gICAgY29uc3QgZHJhZ2dlZEVsZW1lbnQgPSB0aGlzLmNyZWF0ZUVsZW1lbnRGcm9tSnNvbihkcmFnZ2VkRWxlbWVudEpzb24pO1xuICAgIHRoaXMuc3RhcnREcmFnU3VydmV5RWxlbWVudChldmVudCwgZHJhZ2dlZEVsZW1lbnQpO1xuICB9XG5cbiAgcHVibGljIHN0YXJ0RHJhZ1N1cnZleUVsZW1lbnQoZXZlbnQ6IFBvaW50ZXJFdmVudCwgZHJhZ2dlZEVsZW1lbnQ6IElFbGVtZW50KSB7XG4gICAgdGhpcy5zdGFydERyYWcoZXZlbnQsIGRyYWdnZWRFbGVtZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGFydERyYWdJdGVtVmFsdWUoXG4gICAgZXZlbnQ6IFBvaW50ZXJFdmVudCxcbiAgICBxdWVzdGlvbjogUXVlc3Rpb25TZWxlY3RCYXNlLFxuICAgIGl0ZW06IEl0ZW1WYWx1ZVxuICApIHtcbiAgICBjb25zdCBkcmFnZ2VkRWxlbWVudCA9IDxhbnk+aXRlbTtcbiAgICB0aGlzLml0ZW1WYWx1ZVBhcmVudFF1ZXN0aW9uID0gcXVlc3Rpb247XG4gICAgdGhpcy5zdGFydERyYWcoZXZlbnQsIGRyYWdnZWRFbGVtZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGFydERyYWcoZXZlbnQ6IFBvaW50ZXJFdmVudCwgZHJhZ2dlZEVsZW1lbnQ6IElFbGVtZW50KSB7XG4gICAgdGhpcy5kcmFnZ2VkU3VydmV5RWxlbWVudCA9IGRyYWdnZWRFbGVtZW50O1xuICAgIHRoaXMuZ2hvc3RTdXJ2ZXlFbGVtZW50ID0gdGhpcy5jcmVhdGVHaG9zdFN1cnZleUVsZW1lbnQoKTtcbiAgICB0aGlzLmRyYWdnZWRFbGVtZW50U2hvcnRjdXQgPSB0aGlzLmNyZWF0ZURyYWdnZWRFbGVtZW50U2hvcnRjdXQoKTtcblxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKHRoaXMuZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dCk7XG4gICAgdGhpcy5tb3ZlU2hvcnRjdXRFbGVtZW50KGV2ZW50KTtcblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCB0aGlzLm1vdmVEcmFnZ2VkRWxlbWVudCk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5oYW5kbGVFc2NhcGVCdXR0b24pO1xuICAgIHRoaXMuZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dC5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsIHRoaXMuZHJvcCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0SXRlbVZhbHVlR2hvc3RQb3NpdGlvbihpdGVtOiBhbnkpIHtcbiAgICBpZiAodGhpcy5kcm9wVGFyZ2V0U3VydmV5RWxlbWVudCAhPT0gaXRlbSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKHRoaXMuaXNCb3R0b20pIHJldHVybiBcImJvdHRvbVwiO1xuICAgIHJldHVybiBcInRvcFwiO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVHaG9zdFN1cnZleUVsZW1lbnQoKTogYW55IHtcbiAgICBjb25zdCBzdGFydFdpdGhOZXdMaW5lID0gdGhpcy5kcmFnZ2VkU3VydmV5RWxlbWVudC5zdGFydFdpdGhOZXdMaW5lO1xuICAgIGxldCBjbGFzc05hbWUgPSBcInN2Yy1kcmFnLWRyb3AtZ2hvc3RcIjtcblxuICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICB0eXBlOiBcImh0bWxcIixcbiAgICAgIG5hbWU6IERyYWdEcm9wSGVscGVyLmdob3N0U3VydmV5RWxlbWVudE5hbWUsXG4gICAgICBodG1sOiBgPGRpdiBjbGFzcz1cIiR7Y2xhc3NOYW1lfVwiPjwvZGl2PmAsXG4gICAgfTtcblxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmNyZWF0ZUVsZW1lbnRGcm9tSnNvbihqc29uKTtcbiAgICBlbGVtZW50LnN0YXJ0V2l0aE5ld0xpbmUgPSBzdGFydFdpdGhOZXdMaW5lO1xuXG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZURyYWdnZWRFbGVtZW50U2hvcnRjdXQoKSB7XG4gICAgY29uc3QgZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgY29uc3QgZHJhZ2dlZEVsZW1lbnQ6IGFueSA9IHRoaXMuZHJhZ2dlZFN1cnZleUVsZW1lbnQ7XG4gICAgZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dC5pbm5lclRleHQgPVxuICAgICAgZHJhZ2dlZEVsZW1lbnRbXCJ0aXRsZVwiXSB8fFxuICAgICAgZHJhZ2dlZEVsZW1lbnRbXCJ0ZXh0XCJdIHx8XG4gICAgICBkcmFnZ2VkRWxlbWVudFtcIm5hbWVcIl07XG4gICAgZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dC5jbGFzc05hbWUgPSBcInN2Yy1kcmFnLXNob3J0Y3V0XCI7XG4gICAgcmV0dXJuIGRyYWdnZWRFbGVtZW50U2hvcnRjdXQ7XG4gIH1cblxuICBwcml2YXRlIG1vdmVEcmFnZ2VkRWxlbWVudCA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgdGhpcy5tb3ZlU2hvcnRjdXRFbGVtZW50KGV2ZW50KTtcblxuICAgIGlmICh0aGlzLmlzSXRlbVZhbHVlQmVpbmdEcmFnZ2VkKCkpIHtcbiAgICAgIHRoaXMuaGFuZGxlSXRlbVZhbHVlRHJhZ092ZXIoZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhhbmRsZVN1cnZleUVsZW1lbnREcmFnT3ZlcihldmVudCk7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgaGFuZGxlRXNjYXBlQnV0dG9uID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50LmtleUNvZGUgPT0gMjcpIHtcbiAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSBtb3ZlU2hvcnRjdXRFbGVtZW50KGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcbiAgICB0aGlzLmRvU2Nyb2xsKGV2ZW50LmNsaWVudFksIGV2ZW50LmNsaWVudFgpO1xuXG4gICAgY29uc3Qgc2hvcnRjdXRIZWlnaHQgPSB0aGlzLmRyYWdnZWRFbGVtZW50U2hvcnRjdXQub2Zmc2V0SGVpZ2h0O1xuICAgIGNvbnN0IHNob3J0Y3V0V2lkdGggPSB0aGlzLmRyYWdnZWRFbGVtZW50U2hvcnRjdXQub2Zmc2V0V2lkdGg7XG4gICAgY29uc3Qgc2hvcnRjdXRYQ2VudGVyID0gc2hvcnRjdXRXaWR0aCAvIDI7XG4gICAgY29uc3Qgc2hvcnRjdXRZQ2VudGVyID0gc2hvcnRjdXRIZWlnaHQgLyAyO1xuXG4gICAgY29uc3QgZG9jdW1lbnRDbGllbnRIZWlnaHQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgIGNvbnN0IGRvY3VtZW50Q2xpZW50V2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7XG5cbiAgICBpZiAoZXZlbnQuY2xpZW50WCArIHNob3J0Y3V0WENlbnRlciA+PSBkb2N1bWVudENsaWVudFdpZHRoKSB7XG4gICAgICB0aGlzLmRyYWdnZWRFbGVtZW50U2hvcnRjdXQuc3R5bGUubGVmdCA9XG4gICAgICAgIGV2ZW50LnBhZ2VYIC1cbiAgICAgICAgZXZlbnQuY2xpZW50WCArXG4gICAgICAgIGRvY3VtZW50Q2xpZW50V2lkdGggLVxuICAgICAgICBzaG9ydGN1dFdpZHRoICtcbiAgICAgICAgXCJweFwiO1xuICAgICAgdGhpcy5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0LnN0eWxlLnRvcCA9XG4gICAgICAgIGV2ZW50LnBhZ2VZIC0gc2hvcnRjdXRZQ2VudGVyICsgXCJweFwiO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC5jbGllbnRYIC0gc2hvcnRjdXRYQ2VudGVyIDw9IDApIHtcbiAgICAgIHRoaXMuZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dC5zdHlsZS5sZWZ0ID1cbiAgICAgICAgZXZlbnQucGFnZVggLSBldmVudC5jbGllbnRYICsgXCJweFwiO1xuICAgICAgdGhpcy5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0LnN0eWxlLnRvcCA9XG4gICAgICAgIGV2ZW50LnBhZ2VZIC0gc2hvcnRjdXRZQ2VudGVyICsgXCJweFwiO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC5jbGllbnRZICsgc2hvcnRjdXRZQ2VudGVyID49IGRvY3VtZW50Q2xpZW50SGVpZ2h0KSB7XG4gICAgICB0aGlzLmRyYWdnZWRFbGVtZW50U2hvcnRjdXQuc3R5bGUubGVmdCA9XG4gICAgICAgIGV2ZW50LnBhZ2VYIC0gc2hvcnRjdXRYQ2VudGVyICsgXCJweFwiO1xuICAgICAgdGhpcy5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0LnN0eWxlLnRvcCA9XG4gICAgICAgIGV2ZW50LnBhZ2VZIC1cbiAgICAgICAgZXZlbnQuY2xpZW50WSArXG4gICAgICAgIGRvY3VtZW50Q2xpZW50SGVpZ2h0IC1cbiAgICAgICAgc2hvcnRjdXRIZWlnaHQgK1xuICAgICAgICBcInB4XCI7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LmNsaWVudFkgLSBzaG9ydGN1dFlDZW50ZXIgPD0gMCkge1xuICAgICAgdGhpcy5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0LnN0eWxlLmxlZnQgPVxuICAgICAgICBldmVudC5wYWdlWCAtIHNob3J0Y3V0WENlbnRlciArIFwicHhcIjtcbiAgICAgIHRoaXMuZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dC5zdHlsZS50b3AgPVxuICAgICAgICBldmVudC5wYWdlWSAtIGV2ZW50LmNsaWVudFkgKyBcInB4XCI7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0LnN0eWxlLmxlZnQgPVxuICAgICAgZXZlbnQucGFnZVggLSBzaG9ydGN1dFhDZW50ZXIgKyBcInB4XCI7XG4gICAgdGhpcy5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0LnN0eWxlLnRvcCA9XG4gICAgICBldmVudC5wYWdlWSAtIHNob3J0Y3V0WUNlbnRlciArIFwicHhcIjtcbiAgfVxuXG4gIHByaXZhdGUgZG9TY3JvbGwoY2xpZW50WTogbnVtYmVyLCBjbGllbnRYOiBudW1iZXIpIHtcbiAgICBjbGVhckludGVydmFsKHRoaXMuc2Nyb2xsSW50ZXJ2YWxJZCk7XG4gICAgY29uc3Qgc3RhcnRTY3JvbGxCb3VuZGFyeSA9IDUwO1xuXG4gICAgLy8gbmVlZCB0byBpbXBvcnQgZ2V0U2Nyb2xsYWJsZVBhcmVudCBtZXRob2RcbiAgICAvLyBsZXQgc2Nyb2xsYWJsZVBhcmVudEVsZW1lbnQgPSBnZXRTY3JvbGxhYmxlUGFyZW50KGRyb3Bab25lRWxlbWVudClcbiAgICAvLyAgIC5wYXJlbnROb2RlO1xuICAgIGxldCBzY3JvbGxhYmxlUGFyZW50RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICBcIi5zdmMtdGFiLWRlc2lnbmVyLnNkLXJvb3QtbW9kZXJuXCJcbiAgICApO1xuXG4gICAgbGV0IHRvcCA9IHNjcm9sbGFibGVQYXJlbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcbiAgICBsZXQgYm90dG9tID0gc2Nyb2xsYWJsZVBhcmVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tO1xuICAgIGxldCBsZWZ0ID0gc2Nyb2xsYWJsZVBhcmVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICBsZXQgcmlnaHQgPSBzY3JvbGxhYmxlUGFyZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodDtcblxuICAgIGlmIChjbGllbnRZIC0gdG9wIDw9IHN0YXJ0U2Nyb2xsQm91bmRhcnkpIHtcbiAgICAgIHRoaXMuc2Nyb2xsSW50ZXJ2YWxJZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgc2Nyb2xsYWJsZVBhcmVudEVsZW1lbnQuc2Nyb2xsVG9wIC09IDU7XG4gICAgICB9LCAxMCk7XG4gICAgfSBlbHNlIGlmIChib3R0b20gLSBjbGllbnRZIDw9IHN0YXJ0U2Nyb2xsQm91bmRhcnkpIHtcbiAgICAgIHRoaXMuc2Nyb2xsSW50ZXJ2YWxJZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgc2Nyb2xsYWJsZVBhcmVudEVsZW1lbnQuc2Nyb2xsVG9wICs9IDU7XG4gICAgICB9LCAxMCk7XG4gICAgfSBlbHNlIGlmIChyaWdodCAtIGNsaWVudFggPD0gc3RhcnRTY3JvbGxCb3VuZGFyeSkge1xuICAgICAgdGhpcy5zY3JvbGxJbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICBzY3JvbGxhYmxlUGFyZW50RWxlbWVudC5zY3JvbGxMZWZ0ICs9IDU7XG4gICAgICB9LCAxMCk7XG4gICAgfSBlbHNlIGlmIChjbGllbnRYIC0gbGVmdCA8PSBzdGFydFNjcm9sbEJvdW5kYXJ5KSB7XG4gICAgICB0aGlzLnNjcm9sbEludGVydmFsSWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIHNjcm9sbGFibGVQYXJlbnRFbGVtZW50LnNjcm9sbExlZnQgLT0gNTtcbiAgICAgIH0sIDEwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUl0ZW1WYWx1ZURyYWdPdmVyKGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcbiAgICB0aGlzLmRyYWdnZWRFbGVtZW50U2hvcnRjdXQuc3R5bGUuY3Vyc29yID0gXCJncmFiYmluZ1wiO1xuXG4gICAgY29uc3QgZHJhZ0luZm8gPSB0aGlzLmdldERyYWdJbmZvKGV2ZW50KTtcbiAgICBsZXQgZHJvcFRhcmdldFN1cnZleUVsZW1lbnQgPSBkcmFnSW5mby5kcm9wVGFyZ2V0U3VydmV5RWxlbWVudDtcbiAgICBsZXQgaXNFZGdlID0gZHJhZ0luZm8uaXNFZGdlO1xuICAgIGxldCBpc0JvdHRvbSA9IGRyYWdJbmZvLmlzQm90dG9tO1xuXG4gICAgY29uc3QgY2hvaWNlcyA9IHRoaXMuaXRlbVZhbHVlUGFyZW50UXVlc3Rpb24uY2hvaWNlcztcblxuICAgIC8vIHNob3VsZG4ndCBhbGxvdyB0byBkcm9wIG9uIFwiYWRvcm5lcnNcIiAoc2VsZWN0YWxsLCBub25lLCBvdGhlcilcbiAgICBpZiAoY2hvaWNlcy5pbmRleE9mKGRyb3BUYXJnZXRTdXJ2ZXlFbGVtZW50KSA9PT0gLTEpIHtcbiAgICAgIHRoaXMuYmFuRHJvcEhlcmUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvL2RyYWcgb3ZlciBuZXh0IGl0ZW1cbiAgICBpZiAoXG4gICAgICBjaG9pY2VzLmluZGV4T2YoZHJvcFRhcmdldFN1cnZleUVsZW1lbnQpIC1cbiAgICAgICAgY2hvaWNlcy5pbmRleE9mKHRoaXMuZHJhZ2dlZFN1cnZleUVsZW1lbnQpID09PVxuICAgICAgMVxuICAgICkge1xuICAgICAgaXNCb3R0b20gPSB0cnVlO1xuICAgIH1cblxuICAgIC8vZHJhZyBvdmVyIHByZXYgaXRlbVxuICAgIGlmIChcbiAgICAgIGNob2ljZXMuaW5kZXhPZih0aGlzLmRyYWdnZWRTdXJ2ZXlFbGVtZW50KSAtXG4gICAgICAgIGNob2ljZXMuaW5kZXhPZihkcm9wVGFyZ2V0U3VydmV5RWxlbWVudCkgPT09XG4gICAgICAxXG4gICAgKSB7XG4gICAgICBpc0JvdHRvbSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChkcm9wVGFyZ2V0U3VydmV5RWxlbWVudCA9PT0gdGhpcy5kcmFnZ2VkU3VydmV5RWxlbWVudCkge1xuICAgICAgdGhpcy5iYW5Ecm9wSGVyZSgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgZHJvcFRhcmdldFN1cnZleUVsZW1lbnQgPT09IHRoaXMuZHJvcFRhcmdldFN1cnZleUVsZW1lbnQgJiZcbiAgICAgIGlzRWRnZSA9PT0gdGhpcy5pc0VkZ2UgJiZcbiAgICAgIGlzQm90dG9tID09PSB0aGlzLmlzQm90dG9tXG4gICAgKVxuICAgICAgcmV0dXJuO1xuXG4gICAgdGhpcy5kcm9wVGFyZ2V0U3VydmV5RWxlbWVudCA9IGRyb3BUYXJnZXRTdXJ2ZXlFbGVtZW50O1xuICAgIHRoaXMuaXNFZGdlID0gaXNFZGdlO1xuICAgIHRoaXMuaXNCb3R0b20gPSBpc0JvdHRvbTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU3VydmV5RWxlbWVudERyYWdPdmVyKGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcbiAgICB0aGlzLmRyYWdnZWRFbGVtZW50U2hvcnRjdXQuc3R5bGUuY3Vyc29yID0gXCJncmFiYmluZ1wiO1xuXG4gICAgY29uc3QgZHJhZ0luZm8gPSB0aGlzLmdldERyYWdJbmZvKGV2ZW50KTtcbiAgICBsZXQgZHJvcFRhcmdldFN1cnZleUVsZW1lbnQgPSBkcmFnSW5mby5kcm9wVGFyZ2V0U3VydmV5RWxlbWVudDtcbiAgICBsZXQgaXNFZGdlID0gZHJhZ0luZm8uaXNFZGdlO1xuICAgIGxldCBpc0JvdHRvbSA9IGRyYWdJbmZvLmlzQm90dG9tO1xuXG4gICAgaWYgKCFkcm9wVGFyZ2V0U3VydmV5RWxlbWVudCkge1xuICAgICAgdGhpcy5iYW5Ecm9wU3VydmV5RWxlbWVudCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIERyYWdEcm9wSGVscGVyLnJlc3RyaWN0RHJhZ1F1ZXN0aW9uQmV0d2VlblBhZ2VzICYmXG4gICAgICBkcm9wVGFyZ2V0U3VydmV5RWxlbWVudFtcInBhZ2VcIl0gIT09XG4gICAgICAgICg8YW55PnRoaXMuZHJhZ2dlZFN1cnZleUVsZW1lbnQpW1wicGFnZVwiXVxuICAgICkge1xuICAgICAgdGhpcy5iYW5Ecm9wU3VydmV5RWxlbWVudCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkcm9wVGFyZ2V0U3VydmV5RWxlbWVudCA9PT0gdGhpcy5naG9zdFN1cnZleUVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBkcm9wVGFyZ2V0U3VydmV5RWxlbWVudCA9PT0gdGhpcy5kcm9wVGFyZ2V0U3VydmV5RWxlbWVudCAmJlxuICAgICAgaXNFZGdlID09PSB0aGlzLmlzRWRnZSAmJlxuICAgICAgaXNCb3R0b20gPT09IHRoaXMuaXNCb3R0b21cbiAgICApXG4gICAgICByZXR1cm47XG5cbiAgICB0aGlzLmlzRWRnZSA9IGlzRWRnZTtcbiAgICB0aGlzLmlzQm90dG9tID0gaXNCb3R0b207XG4gICAgdGhpcy5kcm9wVGFyZ2V0U3VydmV5RWxlbWVudCA9IGRyb3BUYXJnZXRTdXJ2ZXlFbGVtZW50O1xuICAgIHRoaXMuaW5zZXJ0R2hvc3RFbGVtZW50SW50b1N1cnZleSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREcmFnSW5mbyhldmVudDogUG9pbnRlckV2ZW50KSB7XG4gICAgbGV0IGRyb3BUYXJnZXRIVE1MRWxlbWVudCA9IHRoaXMuZmluZERyb3BUYXJnZXRIVE1MRWxlbWVudEZyb21Qb2ludChcbiAgICAgIGV2ZW50LmNsaWVudFgsXG4gICAgICBldmVudC5jbGllbnRZXG4gICAgKTtcblxuICAgIGlmICghZHJvcFRhcmdldEhUTUxFbGVtZW50KSB7XG4gICAgICByZXR1cm4geyBkcm9wVGFyZ2V0U3VydmV5RWxlbWVudDogbnVsbCwgaXNFZGdlOiB0cnVlLCBpc0JvdHRvbTogdHJ1ZSB9O1xuICAgIH1cblxuICAgIGxldCBkcm9wVGFyZ2V0U3VydmV5RWxlbWVudCA9IHRoaXMuZ2V0RHJvcFRhcmdldFN1cnZleUVsZW1lbnRGcm9tSFRNTEVsZW1lbnQoXG4gICAgICBkcm9wVGFyZ2V0SFRNTEVsZW1lbnRcbiAgICApO1xuXG4gICAgbGV0IGlzRWRnZSA9IHRydWU7XG5cbiAgICBpZiAoIXRoaXMuaXNJdGVtVmFsdWVCZWluZ0RyYWdnZWQoKSkge1xuICAgICAgaWYgKGRyb3BUYXJnZXRTdXJ2ZXlFbGVtZW50LmlzUGFuZWwpIHtcbiAgICAgICAgY29uc3QgcGFuZWxEcmFnSW5mbyA9IHRoaXMuZ2V0UGFuZWxEcmFnSW5mbyhcbiAgICAgICAgICBkcm9wVGFyZ2V0SFRNTEVsZW1lbnQsXG4gICAgICAgICAgZHJvcFRhcmdldFN1cnZleUVsZW1lbnQsXG4gICAgICAgICAgZXZlbnRcbiAgICAgICAgKTtcbiAgICAgICAgZHJvcFRhcmdldFN1cnZleUVsZW1lbnQgPSBwYW5lbERyYWdJbmZvLmRyb3BUYXJnZXRTdXJ2ZXlFbGVtZW50O1xuICAgICAgICBpc0VkZ2UgPSBwYW5lbERyYWdJbmZvLmlzRWRnZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZHJvcFRhcmdldFN1cnZleUVsZW1lbnQgPT09IHRoaXMuZHJhZ2dlZFN1cnZleUVsZW1lbnQpIHtcbiAgICAgIGRyb3BUYXJnZXRTdXJ2ZXlFbGVtZW50ID0gbnVsbDtcbiAgICB9XG5cbiAgICBsZXQgaXNCb3R0b20gPSB0aGlzLmNhbGN1bGF0ZUlzQm90dG9tKGRyb3BUYXJnZXRIVE1MRWxlbWVudCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICBpZiAoXG4gICAgICAvLyBUT0RPIHdlIGNhbid0IGRyb3Agb24gbm90IGVtcHR5IHBhZ2UgZGlyZWN0bHkgZm9yIG5vd1xuICAgICAgZHJvcFRhcmdldFN1cnZleUVsZW1lbnQgJiZcbiAgICAgIGRyb3BUYXJnZXRTdXJ2ZXlFbGVtZW50LmdldFR5cGUoKSA9PT0gXCJwYWdlXCIgJiZcbiAgICAgIGRyb3BUYXJnZXRTdXJ2ZXlFbGVtZW50LmVsZW1lbnRzLmxlbmd0aCAhPT0gMFxuICAgICkge1xuICAgICAgY29uc3QgZWxlbWVudHMgPSBkcm9wVGFyZ2V0U3VydmV5RWxlbWVudC5lbGVtZW50cztcbiAgICAgIGRyb3BUYXJnZXRTdXJ2ZXlFbGVtZW50ID0gaXNCb3R0b21cbiAgICAgICAgPyBlbGVtZW50c1tlbGVtZW50cy5sZW5ndGggLSAxXVxuICAgICAgICA6IGVsZW1lbnRzWzBdO1xuICAgIH1cblxuICAgIHJldHVybiB7IGRyb3BUYXJnZXRTdXJ2ZXlFbGVtZW50LCBpc0VkZ2UsIGlzQm90dG9tIH07XG4gIH1cblxuICBwcml2YXRlIGdldFBhbmVsRHJhZ0luZm8oXG4gICAgSFRNTEVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICAgIHN1cnZleUVsZW1lbnQ6IElFbGVtZW50LFxuICAgIGV2ZW50OiBQb2ludGVyRXZlbnRcbiAgKSB7XG4gICAgbGV0IGlzRWRnZSA9IHRoaXMuY2FsY3VsYXRlSXNFZGdlKEhUTUxFbGVtZW50LCBldmVudC5jbGllbnRZKTtcbiAgICBsZXQgZHJvcFRhcmdldFN1cnZleUVsZW1lbnQgPSBzdXJ2ZXlFbGVtZW50O1xuXG4gICAgaWYgKCFpc0VkZ2UpIHtcbiAgICAgIEhUTUxFbGVtZW50ID0gdGhpcy5maW5kRGVlcGVzdERyb3BUYXJnZXRDaGlsZChIVE1MRWxlbWVudCk7XG5cbiAgICAgIGRyb3BUYXJnZXRTdXJ2ZXlFbGVtZW50ID0gdGhpcy5nZXREcm9wVGFyZ2V0U3VydmV5RWxlbWVudEZyb21IVE1MRWxlbWVudChcbiAgICAgICAgSFRNTEVsZW1lbnRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgZHJvcFRhcmdldFN1cnZleUVsZW1lbnQsIGlzRWRnZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBiYW5Ecm9wSGVyZSA9ICgpID0+IHtcbiAgICB0aGlzLmRyb3BUYXJnZXRTdXJ2ZXlFbGVtZW50ID0gbnVsbDtcbiAgICB0aGlzLmlzQm90dG9tID0gbnVsbDtcbiAgICB0aGlzLmlzRWRnZSA9IG51bGw7XG4gICAgdGhpcy5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0LnN0eWxlLmN1cnNvciA9IFwibm90LWFsbG93ZWRcIjtcbiAgfTtcblxuICBwcml2YXRlIGJhbkRyb3BTdXJ2ZXlFbGVtZW50ID0gKCkgPT4ge1xuICAgIHRoaXMucmVtb3ZlR2hvc3RFbGVtZW50RnJvbVN1cnZleSgpO1xuICAgIHRoaXMuYmFuRHJvcEhlcmUoKTtcbiAgfTtcblxuICBwcml2YXRlIGdldERyb3BUYXJnZXRTdXJ2ZXlFbGVtZW50TmFtZShlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgIGxldCBkcm9wVGFyZ2V0U3VydmV5RWxlbWVudE5hbWUgPSBlbGVtZW50LmRhdGFzZXQuc3ZjRHJvcFRhcmdldEVsZW1lbnROYW1lO1xuICAgIGlmICghZHJvcFRhcmdldFN1cnZleUVsZW1lbnROYW1lKSB7XG4gICAgICBkcm9wVGFyZ2V0U3VydmV5RWxlbWVudE5hbWUgPSBlbGVtZW50LmRhdGFzZXQuc3ZjRHJvcFRhcmdldEl0ZW1WYWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGRyb3BUYXJnZXRTdXJ2ZXlFbGVtZW50TmFtZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RHJvcFRhcmdldFN1cnZleUVsZW1lbnRGcm9tSFRNTEVsZW1lbnQoZWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICBsZXQgcmVzdWx0ID0gdW5kZWZpbmVkO1xuICAgIGxldCBkcm9wVGFyZ2V0TmFtZSA9IHRoaXMuZ2V0RHJvcFRhcmdldFN1cnZleUVsZW1lbnROYW1lKGVsZW1lbnQpO1xuICAgIGxldCBpc0RyYWdPdmVySW5uZXJQYW5lbCA9IGZhbHNlO1xuICAgIGlmICghZHJvcFRhcmdldE5hbWUpIHtcbiAgICAgIGNvbnN0IG5lYXJlc3REcm9wVGFyZ2V0RWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudC5jbG9zZXN0PFxuICAgICAgICBIVE1MRWxlbWVudFxuICAgICAgPih0aGlzLmRyb3BUYXJnZXREYXRhQXR0cmlidXRlTmFtZSk7XG4gICAgICBkcm9wVGFyZ2V0TmFtZSA9IHRoaXMuZ2V0RHJvcFRhcmdldFN1cnZleUVsZW1lbnROYW1lKFxuICAgICAgICBuZWFyZXN0RHJvcFRhcmdldEVsZW1lbnRcbiAgICAgICk7XG4gICAgICBpc0RyYWdPdmVySW5uZXJQYW5lbCA9XG4gICAgICAgIG5lYXJlc3REcm9wVGFyZ2V0RWxlbWVudCAhPT0gZWxlbWVudCAmJiAhIWRyb3BUYXJnZXROYW1lO1xuICAgIH1cbiAgICBpZiAoIWRyb3BUYXJnZXROYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBmaW5kIGRyb3AgdGFyZ2V0IHN1cnZleSBlbGVtZW50IG5hbWVcIik7XG4gICAgfVxuXG4gICAgaWYgKGRyb3BUYXJnZXROYW1lID09PSBEcmFnRHJvcEhlbHBlci5naG9zdFN1cnZleUVsZW1lbnROYW1lKSB7XG4gICAgICByZXR1cm4gdGhpcy5naG9zdFN1cnZleUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLy8gZHJvcCB0byBwYWdlXG4gICAgaWYgKGRyb3BUYXJnZXROYW1lID09PSBcIm5ld0dob3N0UGFnZVwiKSB7XG4gICAgICByZXN1bHQgPSBEcmFnRHJvcEhlbHBlci5uZXdHaG9zdFBhZ2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMuc3VydmV5LmdldFBhZ2VCeU5hbWUoZHJvcFRhcmdldE5hbWUpO1xuICAgIH1cblxuICAgIC8vIGRyb3AgdG8gZWxlbWVudCAocXVlc3Rpb24gb3IgcGFuZWwpXG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgIGxldCBlbGVtZW50O1xuICAgICAgdGhpcy5zdXJ2ZXkucGFnZXMuZm9yRWFjaCgocGFnZTogUGFnZU1vZGVsKSA9PiB7XG4gICAgICAgIGVsZW1lbnQgPSBwYWdlLmdldEVsZW1lbnRCeU5hbWUoZHJvcFRhcmdldE5hbWUpO1xuICAgICAgICBpZiAoZWxlbWVudCkgcmVzdWx0ID0gZWxlbWVudDtcbiAgICAgIH0pO1xuICAgICAgaWYgKFxuICAgICAgICAhIXJlc3VsdCAmJlxuICAgICAgICByZXN1bHQuZ2V0VHlwZSgpID09PSBcInBhbmVsZHluYW1pY1wiICYmXG4gICAgICAgIGlzRHJhZ092ZXJJbm5lclBhbmVsXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgcGFnZSA9ICg8YW55PnJlc3VsdCkucGFnZTtcbiAgICAgICAgcmVzdWx0ID0gKDxhbnk+cmVzdWx0KS50ZW1wbGF0ZTtcbiAgICAgICAgcmVzdWx0LnBhZ2UgPSBwYWdlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRyb3AgdG8gaXRlbS12YWx1ZVxuICAgIGlmICghcmVzdWx0KSB7XG4gICAgICByZXN1bHQgPSB0aGlzLml0ZW1WYWx1ZVBhcmVudFF1ZXN0aW9uLmNob2ljZXMuZmlsdGVyKFxuICAgICAgICAoY2hvaWNlKSA9PiBjaG9pY2UudmFsdWUgPT09IGRyb3BUYXJnZXROYW1lXG4gICAgICApWzBdO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIGNhbGN1bGF0ZU1pZGRsZU9mSFRNTEVsZW1lbnQoSFRNTEVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgY29uc3QgcmVjdCA9IEhUTUxFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHJldHVybiByZWN0LnkgKyByZWN0LmhlaWdodCAvIDI7XG4gIH1cblxuICBwcml2YXRlIGNhbGN1bGF0ZUlzQm90dG9tKEhUTUxFbGVtZW50OiBIVE1MRWxlbWVudCwgY2xpZW50WTogbnVtYmVyKSB7XG4gICAgY29uc3QgbWlkZGxlID0gdGhpcy5jYWxjdWxhdGVNaWRkbGVPZkhUTUxFbGVtZW50KEhUTUxFbGVtZW50KTtcbiAgICByZXR1cm4gY2xpZW50WSA+PSBtaWRkbGU7XG4gIH1cblxuICBwcml2YXRlIGNhbGN1bGF0ZUlzRWRnZShIVE1MRWxlbWVudDogSFRNTEVsZW1lbnQsIGNsaWVudFk6IG51bWJlcikge1xuICAgIGNvbnN0IG1pZGRsZSA9IHRoaXMuY2FsY3VsYXRlTWlkZGxlT2ZIVE1MRWxlbWVudChIVE1MRWxlbWVudCk7XG4gICAgcmV0dXJuIE1hdGguYWJzKGNsaWVudFkgLSBtaWRkbGUpID49IERyYWdEcm9wSGVscGVyLmVkZ2VIZWlnaHQ7XG4gIH1cblxuICBwcml2YXRlIGZpbmREcm9wVGFyZ2V0SFRNTEVsZW1lbnQoZHJhZ2dlZE92ZXJOb2RlOiBFbGVtZW50KTogSFRNTEVsZW1lbnQge1xuICAgIGlmICghZHJhZ2dlZE92ZXJOb2RlKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IHNlbGVjdG9yID0gdGhpcy5kcm9wVGFyZ2V0RGF0YUF0dHJpYnV0ZU5hbWU7XG4gICAgbGV0IGRyb3BUYXJnZXRIVE1MRWxlbWVudCA9XG4gICAgICBkcmFnZ2VkT3Zlck5vZGUucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oc2VsZWN0b3IpIHx8XG4gICAgICBkcmFnZ2VkT3Zlck5vZGUuY2xvc2VzdDxIVE1MRWxlbWVudD4oc2VsZWN0b3IpO1xuXG4gICAgcmV0dXJuIGRyb3BUYXJnZXRIVE1MRWxlbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgZmluZERyb3BUYXJnZXRIVE1MRWxlbWVudEZyb21Qb2ludChcbiAgICBjbGllbnRYOiBudW1iZXIsXG4gICAgY2xpZW50WTogbnVtYmVyXG4gICk6IEhUTUxFbGVtZW50IHtcbiAgICB0aGlzLmRyYWdnZWRFbGVtZW50U2hvcnRjdXQuaGlkZGVuID0gdHJ1ZTtcbiAgICBsZXQgZHJhZ2dlZE92ZXJOb2RlID0gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChjbGllbnRYLCBjbGllbnRZKTtcbiAgICB0aGlzLmRyYWdnZWRFbGVtZW50U2hvcnRjdXQuaGlkZGVuID0gZmFsc2U7XG5cbiAgICByZXR1cm4gdGhpcy5maW5kRHJvcFRhcmdldEhUTUxFbGVtZW50KGRyYWdnZWRPdmVyTm9kZSk7XG4gIH1cblxuICBwcml2YXRlIGZpbmREZWVwZXN0RHJvcFRhcmdldENoaWxkKHBhcmVudDogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3Qgc2VsZWN0b3IgPSBcIltkYXRhLXN2Yy1kcm9wLXRhcmdldC1lbGVtZW50LW5hbWVdXCI7XG5cbiAgICBsZXQgcmVzdWx0ID0gcGFyZW50O1xuICAgIHdoaWxlICghIXBhcmVudCkge1xuICAgICAgcmVzdWx0ID0gcGFyZW50O1xuICAgICAgcGFyZW50ID0gcGFyZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgIH1cblxuICAgIHJldHVybiA8SFRNTEVsZW1lbnQ+cmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBpbnNlcnRHaG9zdEVsZW1lbnRJbnRvU3VydmV5KCk6IGJvb2xlYW4ge1xuICAgIHRoaXMucmVtb3ZlR2hvc3RFbGVtZW50RnJvbVN1cnZleSgpO1xuXG4gICAgdGhpcy5naG9zdFN1cnZleUVsZW1lbnQubmFtZSA9IERyYWdEcm9wSGVscGVyLmdob3N0U3VydmV5RWxlbWVudE5hbWU7IC8vVE9ETyB3aHkgZG8gd2UgbmVlZCBzZXR1cCBpdCBtYW51YWxseSBzZWUgY3JlYXRlR2hvc3RTdXJ2ZXlFbGVtZW50IG1ldGhvZFxuXG4gICAgdGhpcy5wYWdlT3JQYW5lbCA9IHRoaXMuZHJvcFRhcmdldFN1cnZleUVsZW1lbnQuaXNQYWdlXG4gICAgICA/IHRoaXMuZHJvcFRhcmdldFN1cnZleUVsZW1lbnRcbiAgICAgIDogKDxhbnk+dGhpcy5kcm9wVGFyZ2V0U3VydmV5RWxlbWVudClbXCJwYWdlXCJdO1xuXG4gICAgdGhpcy5wYWdlT3JQYW5lbC5kcmFnRHJvcFN0YXJ0KFxuICAgICAgdGhpcy5kcmFnZ2VkU3VydmV5RWxlbWVudCxcbiAgICAgIHRoaXMuZ2hvc3RTdXJ2ZXlFbGVtZW50LFxuICAgICAgRHJhZ0Ryb3BIZWxwZXIubmVzdGVkUGFuZWxEZXB0aFxuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5wYWdlT3JQYW5lbC5kcmFnRHJvcE1vdmVUbyhcbiAgICAgIHRoaXMuZHJvcFRhcmdldFN1cnZleUVsZW1lbnQsXG4gICAgICB0aGlzLmlzQm90dG9tLFxuICAgICAgdGhpcy5pc0VkZ2VcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpbnNlcnRSZWFsRWxlbWVudEludG9TdXJ2ZXkoKSB7XG4gICAgdGhpcy5yZW1vdmVHaG9zdEVsZW1lbnRGcm9tU3VydmV5KCk7XG5cbiAgICAvLyBnaG9zdCBuZXcgcGFnZVxuICAgIGlmIChcbiAgICAgIHRoaXMuZHJvcFRhcmdldFN1cnZleUVsZW1lbnQuaXNQYWdlICYmXG4gICAgICAoPGFueT50aGlzLmRyb3BUYXJnZXRTdXJ2ZXlFbGVtZW50KVtcIl9pc0dob3N0XCJdXG4gICAgKSB7XG4gICAgICAoPGFueT50aGlzLmRyb3BUYXJnZXRTdXJ2ZXlFbGVtZW50KVtcIl9hZGRHaG9zdFBhZ2VWaWV3TW9iZWxcIl0oKTtcbiAgICB9XG4gICAgLy8gRU8gZ2hvc3QgbmV3IHBhZ2VcblxuICAgIC8vIGZha2UgdGFyZ2V0IGVsZW1lbnQgKG5lZWQgb25seSBmb3IgXCJzdGFydFdpdGhOZXdMaW5lOmZhbHNlXCIgZmVhdHVyZSlcbiAgICAvL1RPRE8gbmVlZCBmb3IgZHJhZ0Ryb3AgaGVscGVyIGluIGxpYnJhcnlcbiAgICBjb25zdCBqc29uID0gbmV3IEpzb25PYmplY3QoKS50b0pzb25PYmplY3QodGhpcy5kcmFnZ2VkU3VydmV5RWxlbWVudCk7XG4gICAganNvbltcInR5cGVcIl0gPSB0aGlzLmRyYWdnZWRTdXJ2ZXlFbGVtZW50LmdldFR5cGUoKTtcbiAgICBjb25zdCBmYWtlVGFyZ2V0RWxlbWVudCA9IHRoaXMuY3JlYXRlRmFrZVRhcmdldEVsZW1lbnQoXG4gICAgICB0aGlzLmRyYWdnZWRTdXJ2ZXlFbGVtZW50Lm5hbWUsXG4gICAgICBqc29uXG4gICAgKTtcbiAgICAvLyBFTyBmYWtlIHRhcmdldCBlbGVtZW50XG5cbiAgICB0aGlzLnBhZ2VPclBhbmVsLmRyYWdEcm9wU3RhcnQoXG4gICAgICB0aGlzLmRyYWdnZWRTdXJ2ZXlFbGVtZW50LFxuICAgICAgZmFrZVRhcmdldEVsZW1lbnQsXG4gICAgICBEcmFnRHJvcEhlbHBlci5uZXN0ZWRQYW5lbERlcHRoXG4gICAgKTtcblxuICAgIHRoaXMucGFnZU9yUGFuZWwuZHJhZ0Ryb3BNb3ZlVG8oXG4gICAgICB0aGlzLmRyb3BUYXJnZXRTdXJ2ZXlFbGVtZW50LFxuICAgICAgdGhpcy5pc0JvdHRvbSxcbiAgICAgIHRoaXMuaXNFZGdlXG4gICAgKTtcblxuICAgIHRoaXMub25CZWZvcmVEcm9wLmZpcmUodGhpcywgbnVsbCk7XG4gICAgY29uc3QgbmV3RWxlbWVudCA9IHRoaXMucGFnZU9yUGFuZWwuZHJhZ0Ryb3BGaW5pc2goKTtcbiAgICB0aGlzLm9uQWZ0ZXJEcm9wLmZpcmUodGhpcywgeyBkcmFnZ2VkRWxlbWVudDogbmV3RWxlbWVudCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlR2hvc3RFbGVtZW50RnJvbVN1cnZleSgpIHtcbiAgICBpZiAoISF0aGlzLnBhZ2VPclBhbmVsKSB0aGlzLnBhZ2VPclBhbmVsLmRyYWdEcm9wRmluaXNoKHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVFbGVtZW50RnJvbUpzb24oanNvbjogb2JqZWN0KSB7XG4gICAgY29uc3QgZWxlbWVudDogYW55ID0gdGhpcy5jcmVhdGVOZXdFbGVtZW50KGpzb24pO1xuICAgIGlmIChlbGVtZW50W1wic2V0U3VydmV5SW1wbFwiXSkge1xuICAgICAgZWxlbWVudFtcInNldFN1cnZleUltcGxcIl0odGhpcy5zdXJ2ZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbGVtZW50W1wic2V0RGF0YVwiXSh0aGlzLnN1cnZleSk7XG4gICAgfVxuICAgIGVsZW1lbnQucmVuZGVyV2lkdGggPSBcIjEwMCVcIjtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTmV3RWxlbWVudChqc29uOiBhbnkpOiBJRWxlbWVudCB7XG4gICAgdmFyIG5ld0VsZW1lbnQgPSBTZXJpYWxpemVyLmNyZWF0ZUNsYXNzKGpzb25bXCJ0eXBlXCJdKTtcbiAgICBuZXcgSnNvbk9iamVjdCgpLnRvT2JqZWN0KGpzb24sIG5ld0VsZW1lbnQpO1xuICAgIHJldHVybiBuZXdFbGVtZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVGYWtlVGFyZ2V0RWxlbWVudChlbGVtZW50TmFtZTogc3RyaW5nLCBqc29uOiBhbnkpOiBhbnkge1xuICAgIGlmICghZWxlbWVudE5hbWUgfHwgIWpzb24pIHJldHVybiBudWxsO1xuICAgIHZhciB0YXJnZXRFbGVtZW50ID0gbnVsbDtcbiAgICB0YXJnZXRFbGVtZW50ID0gU2VyaWFsaXplci5jcmVhdGVDbGFzcyhqc29uW1widHlwZVwiXSk7XG4gICAgbmV3IEpzb25PYmplY3QoKS50b09iamVjdChqc29uLCB0YXJnZXRFbGVtZW50KTtcbiAgICB0YXJnZXRFbGVtZW50Lm5hbWUgPSBlbGVtZW50TmFtZTtcbiAgICBpZiAodGFyZ2V0RWxlbWVudFtcInNldFN1cnZleUltcGxcIl0pIHtcbiAgICAgIHRhcmdldEVsZW1lbnRbXCJzZXRTdXJ2ZXlJbXBsXCJdKHRoaXMuc3VydmV5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFyZ2V0RWxlbWVudFtcInNldERhdGFcIl0odGhpcy5zdXJ2ZXkpO1xuICAgIH1cbiAgICB0YXJnZXRFbGVtZW50LnJlbmRlcldpZHRoID0gXCIxMDAlXCI7XG4gICAgcmV0dXJuIHRhcmdldEVsZW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIGRyb3AgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuaXNJdGVtVmFsdWVCZWluZ0RyYWdnZWQoKSkge1xuICAgICAgdGhpcy5kb0Ryb3BJdGVtVmFsdWUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kb0Ryb3BTdXJ2ZXlFbGVtZW50KCk7XG4gICAgfVxuICAgIHRoaXMuY2xlYXIoKTtcbiAgfTtcblxuICBwcml2YXRlIGRvRHJvcFN1cnZleUVsZW1lbnQoKSB7XG4gICAgaWYgKHRoaXMuZHJvcFRhcmdldFN1cnZleUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuaW5zZXJ0UmVhbEVsZW1lbnRJbnRvU3VydmV5KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkb0Ryb3BJdGVtVmFsdWUgPSAoKSA9PiB7XG4gICAgY29uc3QgaXNUb3AgPSAhdGhpcy5pc0JvdHRvbTtcbiAgICBjb25zdCBjaG9pY2VzID0gdGhpcy5pdGVtVmFsdWVQYXJlbnRRdWVzdGlvbi5jaG9pY2VzO1xuICAgIGNvbnN0IG9sZEluZGV4ID0gY2hvaWNlcy5pbmRleE9mKHRoaXMuZHJhZ2dlZFN1cnZleUVsZW1lbnQpO1xuICAgIGxldCBuZXdJbmRleCA9IGNob2ljZXMuaW5kZXhPZih0aGlzLmRyb3BUYXJnZXRTdXJ2ZXlFbGVtZW50KTtcblxuICAgIGlmIChvbGRJbmRleCA8IG5ld0luZGV4ICYmIGlzVG9wKSB7XG4gICAgICBuZXdJbmRleC0tO1xuICAgIH0gZWxzZSBpZiAob2xkSW5kZXggPiBuZXdJbmRleCAmJiB0aGlzLmlzQm90dG9tKSB7XG4gICAgICBuZXdJbmRleCsrO1xuICAgIH1cblxuICAgIHRoaXMub25CZWZvcmVEcm9wLmZpcmUodGhpcywgbnVsbCk7XG4gICAgY2hvaWNlcy5zcGxpY2Uob2xkSW5kZXgsIDEpO1xuICAgIGNob2ljZXMuc3BsaWNlKG5ld0luZGV4LCAwLCB0aGlzLmRyYWdnZWRTdXJ2ZXlFbGVtZW50KTtcbiAgICB0aGlzLm9uQWZ0ZXJEcm9wLmZpcmUodGhpcywge1xuICAgICAgZHJhZ2dlZEVsZW1lbnQ6IHRoaXMuaXRlbVZhbHVlUGFyZW50UXVlc3Rpb24sXG4gICAgfSk7XG4gIH07XG5cbiAgcHJpdmF0ZSBjbGVhciA9ICgpID0+IHtcbiAgICBjbGVhckludGVydmFsKHRoaXMuc2Nyb2xsSW50ZXJ2YWxJZCk7XG5cbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcm1vdmVcIiwgdGhpcy5tb3ZlRHJhZ2dlZEVsZW1lbnQpO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMuaGFuZGxlRXNjYXBlQnV0dG9uKTtcbiAgICB0aGlzLmRyYWdnZWRFbGVtZW50U2hvcnRjdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCB0aGlzLmRyb3ApO1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0KTtcblxuICAgIHRoaXMucmVtb3ZlR2hvc3RFbGVtZW50RnJvbVN1cnZleSgpO1xuXG4gICAgY29uc3QgcHJldkV2ZW50ID0gRHJhZ0Ryb3BIZWxwZXIucHJldkV2ZW50O1xuICAgIHByZXZFdmVudC5lbGVtZW50ID0gbnVsbDtcbiAgICBwcmV2RXZlbnQueCA9IC0xO1xuICAgIHByZXZFdmVudC55ID0gLTE7XG5cbiAgICB0aGlzLmRyb3BUYXJnZXRTdXJ2ZXlFbGVtZW50ID0gbnVsbDtcbiAgICB0aGlzLmRyYWdnZWRFbGVtZW50U2hvcnRjdXQgPSBudWxsO1xuICAgIHRoaXMuZ2hvc3RTdXJ2ZXlFbGVtZW50ID0gbnVsbDtcbiAgICB0aGlzLmRyYWdnZWRTdXJ2ZXlFbGVtZW50ID0gbnVsbDtcbiAgICB0aGlzLnBhZ2VPclBhbmVsID0gbnVsbDtcbiAgICB0aGlzLml0ZW1WYWx1ZVBhcmVudFF1ZXN0aW9uID0gbnVsbDtcbiAgICB0aGlzLmlzQm90dG9tID0gbnVsbDtcbiAgICB0aGlzLmlzRWRnZSA9IG51bGw7XG4gICAgdGhpcy5zY3JvbGxJbnRlcnZhbElkID0gbnVsbDtcbiAgfTtcbn1cbiIsImltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcbi8qKlxuICogVGhlIGNsYXNzIGNvbnRhaW5zIG1ldGhvZHMgdG8gd29yayB3aXRoIGFwaS5zdXJ2ZXlqcy5pbyBzZXJ2aWNlLlxuICovXG5leHBvcnQgY2xhc3MgZHhTdXJ2ZXlTZXJ2aWNlIHtcbiAgcHVibGljIHN0YXRpYyBnZXQgc2VydmljZVVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBzZXR0aW5ncy5zdXJ2ZXlTZXJ2aWNlVXJsO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgc2V0IHNlcnZpY2VVcmwodmFsOiBzdHJpbmcpIHtcbiAgICBzZXR0aW5ncy5zdXJ2ZXlTZXJ2aWNlVXJsID0gdmFsO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge31cbiAgcHVibGljIGxvYWRTdXJ2ZXkoXG4gICAgc3VydmV5SWQ6IHN0cmluZyxcbiAgICBvbkxvYWQ6IChzdWNjZXNzOiBib29sZWFuLCByZXN1bHQ6IHN0cmluZywgcmVzcG9uc2U6IGFueSkgPT4gdm9pZFxuICApIHtcbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgeGhyLm9wZW4oXG4gICAgICBcIkdFVFwiLFxuICAgICAgZHhTdXJ2ZXlTZXJ2aWNlLnNlcnZpY2VVcmwgKyBcIi9nZXRTdXJ2ZXk/c3VydmV5SWQ9XCIgKyBzdXJ2ZXlJZFxuICAgICk7XG4gICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIik7XG4gICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciByZXN1bHQgPSBKU09OLnBhcnNlKHhoci5yZXNwb25zZSk7XG4gICAgICBvbkxvYWQoeGhyLnN0YXR1cyA9PSAyMDAsIHJlc3VsdCwgeGhyLnJlc3BvbnNlKTtcbiAgICB9O1xuICAgIHhoci5zZW5kKCk7XG4gIH1cbiAgcHVibGljIGdldFN1cnZleUpzb25BbmRJc0NvbXBsZXRlZChcbiAgICBzdXJ2ZXlJZDogc3RyaW5nLFxuICAgIGNsaWVudElkOiBzdHJpbmcsXG4gICAgb25Mb2FkOiAoXG4gICAgICBzdWNjZXNzOiBib29sZWFuLFxuICAgICAgc3VydmV5SnNvbjogYW55LFxuICAgICAgcmVzdWx0OiBzdHJpbmcsXG4gICAgICByZXNwb25zZTogYW55XG4gICAgKSA9PiB2b2lkXG4gICkge1xuICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICB4aHIub3BlbihcbiAgICAgIFwiR0VUXCIsXG4gICAgICBkeFN1cnZleVNlcnZpY2Uuc2VydmljZVVybCArXG4gICAgICAgIFwiL2dldFN1cnZleUFuZElzQ29tcGxldGVkP3N1cnZleUlkPVwiICtcbiAgICAgICAgc3VydmV5SWQgK1xuICAgICAgICBcIiZjbGllbnRJZD1cIiArXG4gICAgICAgIGNsaWVudElkXG4gICAgKTtcbiAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKTtcbiAgICB4aHIub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHJlc3VsdCA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlKTtcbiAgICAgIHZhciBzdXJ2ZXlKc29uID0gcmVzdWx0ID8gcmVzdWx0LnN1cnZleSA6IG51bGw7XG4gICAgICB2YXIgaXNDb21wbGV0ZWQgPSByZXN1bHQgPyByZXN1bHQuaXNDb21wbGV0ZWQgOiBudWxsO1xuICAgICAgb25Mb2FkKHhoci5zdGF0dXMgPT0gMjAwLCBzdXJ2ZXlKc29uLCBpc0NvbXBsZXRlZCwgeGhyLnJlc3BvbnNlKTtcbiAgICB9O1xuICAgIHhoci5zZW5kKCk7XG4gIH1cbiAgcHVibGljIHNlbmRSZXN1bHQoXG4gICAgcG9zdElkOiBzdHJpbmcsXG4gICAgcmVzdWx0OiBKU09OLFxuICAgIG9uU2VuZFJlc3VsdDogKHN1Y2Nlc3M6IGJvb2xlYW4sIHJlc3BvbnNlOiBhbnksIHJlcXVlc3Q/OiBhbnkpID0+IHZvaWQsXG4gICAgY2xpZW50SWQ6IHN0cmluZyA9IG51bGwsXG4gICAgaXNQYXJ0aWFsQ29tcGxldGVkOiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgIHhoci5vcGVuKFwiUE9TVFwiLCBkeFN1cnZleVNlcnZpY2Uuc2VydmljZVVybCArIFwiL3Bvc3QvXCIpO1xuICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiKTtcbiAgICB2YXIgZGF0YSA9IHsgcG9zdElkOiBwb3N0SWQsIHN1cnZleVJlc3VsdDogSlNPTi5zdHJpbmdpZnkocmVzdWx0KSB9O1xuICAgIGlmIChjbGllbnRJZCkgKDxhbnk+ZGF0YSlbXCJjbGllbnRJZFwiXSA9IGNsaWVudElkO1xuICAgIGlmIChpc1BhcnRpYWxDb21wbGV0ZWQpICg8YW55PmRhdGEpW1wiaXNQYXJ0aWFsQ29tcGxldGVkXCJdID0gdHJ1ZTtcbiAgICB2YXIgZGF0YVN0cmluZ2lmeTogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHhoci5vbmxvYWQgPSB4aHIub25lcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghb25TZW5kUmVzdWx0KSByZXR1cm47XG4gICAgICBvblNlbmRSZXN1bHQoeGhyLnN0YXR1cyA9PT0gMjAwLCB4aHIucmVzcG9uc2UsIHhocik7XG4gICAgfTtcbiAgICB4aHIuc2VuZChkYXRhU3RyaW5naWZ5KTtcbiAgfVxuICBwdWJsaWMgc2VuZEZpbGUoXG4gICAgcG9zdElkOiBzdHJpbmcsXG4gICAgZmlsZTogRmlsZSxcbiAgICBvblNlbmRGaWxlOiAoc3VjY2VzczogYm9vbGVhbiwgcmVzcG9uc2U6IGFueSkgPT4gdm9pZFxuICApIHtcbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgeGhyLm9ubG9hZCA9IHhoci5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFvblNlbmRGaWxlKSByZXR1cm47XG4gICAgICBvblNlbmRGaWxlKHhoci5zdGF0dXMgPT0gMjAwLCBKU09OLnBhcnNlKHhoci5yZXNwb25zZSkpO1xuICAgIH07XG4gICAgeGhyLm9wZW4oXCJQT1NUXCIsIGR4U3VydmV5U2VydmljZS5zZXJ2aWNlVXJsICsgXCIvdXBsb2FkL1wiLCB0cnVlKTtcbiAgICB2YXIgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBmb3JtRGF0YS5hcHBlbmQoXCJmaWxlXCIsIGZpbGUpO1xuICAgIGZvcm1EYXRhLmFwcGVuZChcInBvc3RJZFwiLCBwb3N0SWQpO1xuICAgIHhoci5zZW5kKGZvcm1EYXRhKTtcbiAgfVxuICBwdWJsaWMgZ2V0UmVzdWx0KFxuICAgIHJlc3VsdElkOiBzdHJpbmcsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG9uR2V0UmVzdWx0OiAoXG4gICAgICBzdWNjZXNzOiBib29sZWFuLFxuICAgICAgZGF0YTogYW55LFxuICAgICAgZGF0YUxpc3Q6IEFycmF5PGFueT4sXG4gICAgICByZXNwb25zZTogYW55XG4gICAgKSA9PiB2b2lkXG4gICkge1xuICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICB2YXIgZGF0YSA9IFwicmVzdWx0SWQ9XCIgKyByZXN1bHRJZCArIFwiJm5hbWU9XCIgKyBuYW1lO1xuICAgIHhoci5vcGVuKFwiR0VUXCIsIGR4U3VydmV5U2VydmljZS5zZXJ2aWNlVXJsICsgXCIvZ2V0UmVzdWx0P1wiICsgZGF0YSk7XG4gICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIik7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbnVsbDtcbiAgICAgIHZhciBsaXN0ID0gbnVsbDtcbiAgICAgIGlmICh4aHIuc3RhdHVzID09IDIwMCkge1xuICAgICAgICByZXN1bHQgPSBKU09OLnBhcnNlKHhoci5yZXNwb25zZSk7XG4gICAgICAgIGxpc3QgPSBbXTtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHJlc3VsdC5RdWVzdGlvblJlc3VsdCkge1xuICAgICAgICAgIHZhciBlbCA9IHsgbmFtZToga2V5LCB2YWx1ZTogcmVzdWx0LlF1ZXN0aW9uUmVzdWx0W2tleV0gfTtcbiAgICAgICAgICBsaXN0LnB1c2goZWwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBvbkdldFJlc3VsdCh4aHIuc3RhdHVzID09IDIwMCwgcmVzdWx0LCBsaXN0LCB4aHIucmVzcG9uc2UpO1xuICAgIH07XG4gICAgeGhyLnNlbmQoKTtcbiAgfVxuICBwdWJsaWMgaXNDb21wbGV0ZWQoXG4gICAgcmVzdWx0SWQ6IHN0cmluZyxcbiAgICBjbGllbnRJZDogc3RyaW5nLFxuICAgIG9uSXNDb21wbGV0ZWQ6IChzdWNjZXNzOiBib29sZWFuLCByZXN1bHQ6IHN0cmluZywgcmVzcG9uc2U6IGFueSkgPT4gdm9pZFxuICApIHtcbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgdmFyIGRhdGEgPSBcInJlc3VsdElkPVwiICsgcmVzdWx0SWQgKyBcIiZjbGllbnRJZD1cIiArIGNsaWVudElkO1xuICAgIHhoci5vcGVuKFwiR0VUXCIsIGR4U3VydmV5U2VydmljZS5zZXJ2aWNlVXJsICsgXCIvaXNDb21wbGV0ZWQ/XCIgKyBkYXRhKTtcbiAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciByZXN1bHQgPSBudWxsO1xuICAgICAgaWYgKHhoci5zdGF0dXMgPT0gMjAwKSB7XG4gICAgICAgIHJlc3VsdCA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlKTtcbiAgICAgIH1cbiAgICAgIG9uSXNDb21wbGV0ZWQoeGhyLnN0YXR1cyA9PSAyMDAsIHJlc3VsdCwgeGhyLnJlc3BvbnNlKTtcbiAgICB9O1xuICAgIHhoci5zZW5kKCk7XG4gIH1cbn1cbiIsImltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9hcmFiaWNcIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9iYXNxdWVcIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9idWxnYXJpYW5cIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9jYXRhbGFuXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vY3JvYXRpYW5cIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9jemVjaFwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL2RhbmlzaFwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL2R1dGNoXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vZXN0b25pYW5cIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9maW5uaXNoXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vZnJlbmNoXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vZ2VvcmdpYW5cIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9nZXJtYW5cIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9ncmVla1wiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL2hlYnJld1wiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL2hpbmRpXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vaHVuZ2FyaWFuXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vaWNlbGFuZGljXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vaW5kb25lc2lhblwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL2l0YWxpYW5cIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9qYXBhbmVzZVwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL2themFraFwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL2tvcmVhblwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL2xhdHZpYW5cIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9saXRodWFuaWFuXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vbWFjZWRvbmlhblwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL25vcndlZ2lhblwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL3BlcnNpYW5cIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9wb2xpc2hcIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9wb3J0dWd1ZXNlXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vcG9ydHVndWVzZS1iclwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL3JvbWFuaWFuXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vcnVzc2lhblwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL3NlcmJpYW5cIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9zaW1wbGlmaWVkLWNoaW5lc2VcIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9zcGFuaXNoXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vc3dhaGlsaVwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL3N3ZWRpc2hcIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi90YWppa1wiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL3RoYWlcIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi90cmFkaXRpb25hbC1jaGluZXNlXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vdHVya2lzaFwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL3VrcmFpbmlhblwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL3ZpZXRuYW1lc2VcIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi93ZWxzaFwiO1xuIiwiLy8gc3R5bGVzXG5pbXBvcnQgXCIuLi8uLi9tYWluLnNjc3NcIjtcbi8vaW1wb3J0IFwiLi4vLi4vbW9kZXJuLnNjc3NcIjtcblxuZXhwb3J0IHZhciBWZXJzaW9uOiBzdHJpbmc7XG5WZXJzaW9uID0gYCR7cHJvY2Vzcy5lbnYuVkVSU0lPTn1gO1xuXG5leHBvcnQgeyBzZXR0aW5ncyB9IGZyb20gXCIuLi8uLi9zZXR0aW5nc1wiO1xuZXhwb3J0IHsgSGVscGVycywgSGFzaFRhYmxlIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnNcIjtcbmV4cG9ydCB7XG4gIEFuc3dlckNvdW50VmFsaWRhdG9yLFxuICBFbWFpbFZhbGlkYXRvcixcbiAgTnVtZXJpY1ZhbGlkYXRvcixcbiAgUmVnZXhWYWxpZGF0b3IsXG4gIFN1cnZleVZhbGlkYXRvcixcbiAgVGV4dFZhbGlkYXRvcixcbiAgVmFsaWRhdG9yUmVzdWx0LFxuICBFeHByZXNzaW9uVmFsaWRhdG9yLFxuICBWYWxpZGF0b3JSdW5uZXIsXG59IGZyb20gXCIuLi8uLi92YWxpZGF0b3JcIjtcbmV4cG9ydCB7IEl0ZW1WYWx1ZSB9IGZyb20gXCIuLi8uLi9pdGVtdmFsdWVcIjtcbmV4cG9ydCB7IEJhc2UsIEV2ZW50LCBBcnJheUNoYW5nZXMgfSBmcm9tIFwiLi4vLi4vYmFzZVwiO1xuZXhwb3J0IHtcbiAgSVN1cnZleSxcbiAgSVN1cnZleUVsZW1lbnQsXG4gIElFbGVtZW50LFxuICBJUGFnZSxcbiAgSVRpdGxlT3duZXIsXG59IGZyb20gXCIuLi8uLi9iYXNlLWludGVyZmFjZXNcIjtcbmV4cG9ydCB7IFN1cnZleUVycm9yIH0gZnJvbSBcIi4uLy4uL3N1cnZleS1lcnJvclwiO1xuZXhwb3J0IHsgU3VydmV5RWxlbWVudCB9IGZyb20gXCIuLi8uLi9zdXJ2ZXktZWxlbWVudFwiO1xuZXhwb3J0IHsgQ2FsY3VsYXRlZFZhbHVlIH0gZnJvbSBcIi4uLy4uL2NhbGN1bGF0ZWRWYWx1ZVwiO1xuZXhwb3J0IHtcbiAgQ3VzdG9tRXJyb3IsXG4gIEFuc3dlclJlcXVpcmVkRXJyb3IsXG4gIE9uZUFuc3dlclJlcXVpcmVkRXJyb3IsXG4gIFJlcXVyZU51bWVyaWNFcnJvcixcbiAgRXhjZWVkU2l6ZUVycm9yLFxufSBmcm9tIFwiLi4vLi4vZXJyb3JcIjtcbmV4cG9ydCB7XG4gIElMb2NhbGl6YWJsZU93bmVyLFxuICBJTG9jYWxpemFibGVTdHJpbmcsXG4gIExvY2FsaXphYmxlU3RyaW5nLFxuICBMb2NhbGl6YWJsZVN0cmluZ3MsXG59IGZyb20gXCIuLi8uLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuZXhwb3J0IHsgSHRtbENvbmRpdGlvbkl0ZW0sIFVybENvbmRpdGlvbkl0ZW0gfSBmcm9tIFwiLi4vLi4vZXhwcmVzc2lvbkl0ZW1zXCI7XG5leHBvcnQgeyBDaG9pY2VzUmVzdGZ1bCwgQ2hvaWNlc1Jlc3RmdWxsIH0gZnJvbSBcIi4uLy4uL2Nob2ljZXNSZXN0ZnVsXCI7XG5leHBvcnQgeyBGdW5jdGlvbkZhY3RvcnksIHJlZ2lzdGVyRnVuY3Rpb24gfSBmcm9tIFwiLi4vLi4vZnVuY3Rpb25zZmFjdG9yeVwiO1xuZXhwb3J0IHsgQ29uZGl0aW9uUnVubmVyLCBFeHByZXNzaW9uUnVubmVyIH0gZnJvbSBcIi4uLy4uL2NvbmRpdGlvbnNcIjtcbmV4cG9ydCB7XG4gIE9wZXJhbmQsXG4gIENvbnN0LFxuICBCaW5hcnlPcGVyYW5kLFxuICBWYXJpYWJsZSxcbiAgRnVuY3Rpb25PcGVyYW5kLFxuICBBcnJheU9wZXJhbmQsXG59IGZyb20gXCIuLi8uLi9leHByZXNzaW9ucy9leHByZXNzaW9uc1wiO1xuZXhwb3J0IHsgQ29uZGl0aW9uc1BhcnNlciB9IGZyb20gXCIuLi8uLi9jb25kaXRpb25zUGFyc2VyXCI7XG5leHBvcnQgeyBQcm9jZXNzVmFsdWUgfSBmcm9tIFwiLi4vLi4vY29uZGl0aW9uUHJvY2Vzc1ZhbHVlXCI7XG5leHBvcnQge1xuICBKc29uRXJyb3IsXG4gIEpzb25JbmNvcnJlY3RUeXBlRXJyb3IsXG4gIEpzb25NZXRhZGF0YSxcbiAgSnNvbk1ldGFkYXRhQ2xhc3MsXG4gIEpzb25NaXNzaW5nVHlwZUVycm9yLFxuICBKc29uTWlzc2luZ1R5cGVFcnJvckJhc2UsXG4gIEpzb25PYmplY3QsXG4gIEpzb25PYmplY3RQcm9wZXJ0eSxcbiAgSnNvblJlcXVpcmVkUHJvcGVydHlFcnJvcixcbiAgSnNvblVua25vd25Qcm9wZXJ0eUVycm9yLFxuICBTZXJpYWxpemVyLFxuICBwcm9wZXJ0eSxcbiAgcHJvcGVydHlBcnJheSxcbn0gZnJvbSBcIi4uLy4uL2pzb25vYmplY3RcIjtcbmV4cG9ydCB7XG4gIE1hdHJpeERyb3Bkb3duQ2VsbCxcbiAgTWF0cml4RHJvcGRvd25Db2x1bW4sXG4gIG1hdHJpeERyb3Bkb3duQ29sdW1uVHlwZXMsXG4gIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLFxuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsLFxuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3csXG4gIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFRhYmxlLFxufSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlXCI7XG5leHBvcnQge1xuICBNYXRyaXhEcm9wZG93blJvd01vZGVsLFxuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWwsXG59IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9tYXRyaXhkcm9wZG93blwiO1xuZXhwb3J0IHtcbiAgTWF0cml4RHluYW1pY1Jvd01vZGVsLFxuICBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbCxcbn0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX21hdHJpeGR5bmFtaWNcIjtcbmV4cG9ydCB7XG4gIE1hdHJpeFJvd01vZGVsLFxuICBNYXRyaXhDZWxscyxcbiAgUXVlc3Rpb25NYXRyaXhNb2RlbCxcbiAgSU1hdHJpeERhdGEsXG59IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9tYXRyaXhcIjtcbmV4cG9ydCB7XG4gIE11bHRpcGxlVGV4dEl0ZW1Nb2RlbCxcbiAgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbCxcbn0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX211bHRpcGxldGV4dFwiO1xuZXhwb3J0IHsgUGFuZWxNb2RlbCwgUGFuZWxNb2RlbEJhc2UsIFF1ZXN0aW9uUm93TW9kZWwgfSBmcm9tIFwiLi4vLi4vcGFuZWxcIjtcbmV4cG9ydCB7IEZsb3dQYW5lbE1vZGVsIH0gZnJvbSBcIi4uLy4uL2Zsb3dwYW5lbFwiO1xuZXhwb3J0IHsgUGFnZU1vZGVsIH0gZnJvbSBcIi4uLy4uL3BhZ2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi8uLi90ZW1wbGF0ZS1yZW5kZXJlclwiO1xuZXhwb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25cIjtcbmV4cG9ydCB7IFF1ZXN0aW9uTm9uVmFsdWUgfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25ub252YWx1ZVwiO1xuZXhwb3J0IHsgUXVlc3Rpb25FbXB0eU1vZGVsIH0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX2VtcHR5XCI7XG5leHBvcnQge1xuICBRdWVzdGlvbkNoZWNrYm94QmFzZSxcbiAgUXVlc3Rpb25TZWxlY3RCYXNlLFxufSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fYmFzZXNlbGVjdFwiO1xuZXhwb3J0IHsgUXVlc3Rpb25DaGVja2JveE1vZGVsIH0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX2NoZWNrYm94XCI7XG5leHBvcnQgeyBRdWVzdGlvblJhbmtpbmdNb2RlbCB9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9yYW5raW5nXCI7XG5leHBvcnQgeyBRdWVzdGlvbkNvbW1lbnRNb2RlbCB9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9jb21tZW50XCI7XG5leHBvcnQgeyBRdWVzdGlvbkRyb3Bkb3duTW9kZWwgfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fZHJvcGRvd25cIjtcbmV4cG9ydCB7IFF1ZXN0aW9uRmFjdG9yeSwgRWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25mYWN0b3J5XCI7XG5leHBvcnQgeyBRdWVzdGlvbkZpbGVNb2RlbCB9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9maWxlXCI7XG5leHBvcnQgeyBRdWVzdGlvbkh0bWxNb2RlbCB9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9odG1sXCI7XG5leHBvcnQgeyBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbCB9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9yYWRpb2dyb3VwXCI7XG5leHBvcnQgeyBRdWVzdGlvblJhdGluZ01vZGVsIH0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX3JhdGluZ1wiO1xuZXhwb3J0IHsgUXVlc3Rpb25FeHByZXNzaW9uTW9kZWwgfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fZXhwcmVzc2lvblwiO1xuZXhwb3J0IHsgUXVlc3Rpb25UZXh0TW9kZWwgfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fdGV4dFwiO1xuZXhwb3J0IHsgUXVlc3Rpb25Cb29sZWFuTW9kZWwgfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fYm9vbGVhblwiO1xuZXhwb3J0IHtcbiAgUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsLFxuICBJbWFnZUl0ZW1WYWx1ZSxcbn0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX2ltYWdlcGlja2VyXCI7XG5leHBvcnQgeyBRdWVzdGlvbkltYWdlTW9kZWwgfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25faW1hZ2VcIjtcbmV4cG9ydCB7IFF1ZXN0aW9uU2lnbmF0dXJlUGFkTW9kZWwgfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fc2lnbmF0dXJlcGFkXCI7XG5leHBvcnQge1xuICBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLFxuICBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0sXG59IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9wYW5lbGR5bmFtaWNcIjtcbmV4cG9ydCB7IFN1cnZleVRpbWVyIH0gZnJvbSBcIi4uLy4uL3N1cnZleXRpbWVyXCI7XG5leHBvcnQgeyBTdXJ2ZXlQcm9ncmVzc0J1dHRvbnNNb2RlbCB9IGZyb20gXCIuLi8uLi9zdXJ2ZXlQcm9ncmVzc0J1dHRvbnNcIjtcbmV4cG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcIi4uLy4uL3N1cnZleVwiO1xuZXhwb3J0IHtcbiAgU3VydmV5VHJpZ2dlcixcbiAgU3VydmV5VHJpZ2dlckNvbXBsZXRlLFxuICBTdXJ2ZXlUcmlnZ2VyU2V0VmFsdWUsXG4gIFN1cnZleVRyaWdnZXJWaXNpYmxlLFxuICBTdXJ2ZXlUcmlnZ2VyQ29weVZhbHVlLFxuICBTdXJ2ZXlUcmlnZ2VyUnVuRXhwcmVzc2lvbixcbiAgVHJpZ2dlcixcbn0gZnJvbSBcIi4uLy4uL3RyaWdnZXJcIjtcbmV4cG9ydCB7IFN1cnZleVdpbmRvd01vZGVsIH0gZnJvbSBcIi4uLy4uL3N1cnZleVdpbmRvd1wiO1xuZXhwb3J0IHsgVGV4dFByZVByb2Nlc3NvciB9IGZyb20gXCIuLi8uLi90ZXh0UHJlUHJvY2Vzc29yXCI7XG5cbmV4cG9ydCB7IGR4U3VydmV5U2VydmljZSB9IGZyb20gXCIuLi8uLi9keFN1cnZleVNlcnZpY2VcIjtcbmV4cG9ydCB7IGVuZ2xpc2hTdHJpbmdzIH0gZnJvbSBcIi4uLy4uL2xvY2FsaXphdGlvbi9lbmdsaXNoXCI7XG5leHBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24sIHN1cnZleVN0cmluZ3MgfSBmcm9tIFwiLi4vLi4vc3VydmV5U3RyaW5nc1wiO1xuLy8gZXhwb3J0IHsgY3VsdHVyZUluZm8gfSBmcm9tIFwiLi4vLi4vY3VsdHVyZUluZm9cIjtcbmV4cG9ydCB7XG4gIFF1ZXN0aW9uQ3VzdG9tV2lkZ2V0LFxuICBDdXN0b21XaWRnZXRDb2xsZWN0aW9uLFxufSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25DdXN0b21XaWRnZXRzXCI7XG5leHBvcnQge1xuICBRdWVzdGlvbkN1c3RvbU1vZGVsLFxuICBRdWVzdGlvbkNvbXBvc2l0ZU1vZGVsLFxuICBDb21wb25lbnRRdWVzdGlvbkpTT04sXG4gIENvbXBvbmVudENvbGxlY3Rpb24sXG59IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9jdXN0b21cIjtcblxuZXhwb3J0IHsgU3R5bGVzTWFuYWdlciB9IGZyb20gXCIuLi8uLi9zdHlsZXNtYW5hZ2VyXCI7XG5leHBvcnQgeyBMaXN0TW9kZWwgfSBmcm9tIFwiLi4vLi4vbGlzdFwiO1xuZXhwb3J0IHsgUG9wdXBNb2RlbCwgUG9wdXBCYXNlVmlld01vZGVsIH0gZnJvbSBcIi4uLy4uL3BvcHVwXCI7XG5leHBvcnQge1xuICBRdWVzdGlvbkJ1dHRvbkdyb3VwTW9kZWwsXG4gIEJ1dHRvbkdyb3VwSXRlbU1vZGVsLFxuICBCdXR0b25Hcm91cEl0ZW1WYWx1ZSxcbn0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX2J1dHRvbmdyb3VwXCI7XG5leHBvcnQgeyBJc01vYmlsZSB9IGZyb20gXCIuLi8uLi91dGlscy9pcy1tb2JpbGVcIjtcbmV4cG9ydCB7XG4gIGNvbmZpcm1BY3Rpb24sXG4gIGRldGVjdElFT3JFZGdlLFxuICBkb0tleTJDbGljayxcbiAgbG9hZEZpbGVGcm9tQmFzZTY0LFxuICBjcmVhdGVTdmcsXG59IGZyb20gXCIuLi8uLi91dGlscy91dGlsc1wiO1xuXG5leHBvcnQgeyBzdXJ2ZXlDc3MgfSBmcm9tIFwiLi4vLi4vZGVmYXVsdENzcy9jc3NzdGFuZGFyZFwiO1xuLy9VbmNvbW1lbnQgdG8gaW5jbHVkZSB0aGUgXCJkYXRlXCIgcXVlc3Rpb24gdHlwZS5cbi8vZXhwb3J0IHtkZWZhdWx0IGFzIFF1ZXN0aW9uRGF0ZU1vZGVsfSBmcm9tIFwiLi4vLi4vcGx1Z2lucy9xdWVzdGlvbl9kYXRlXCI7XG5cbmV4cG9ydCB7IERyYWdEcm9wSGVscGVyIH0gZnJvbSBcIi4uLy4uL2RyYWdkcm9waGVscGVyXCI7XG4iLCIvLyBtb2RlbFxuZXhwb3J0ICogZnJvbSBcIi4vY2h1bmtzL21vZGVsXCI7XG5cbi8vIGxvY2FsaXphdGlvblxuaW1wb3J0IFwiLi9jaHVua3MvbG9jYWxpemF0aW9uXCI7XG5cbi8vIGNzcyBzdGFuZGFyZCBjbGFzc2VzXG5leHBvcnQgeyBkZWZhdWx0U3RhbmRhcmRDc3MgfSBmcm9tIFwiLi4vZGVmYXVsdENzcy9jc3NzdGFuZGFyZFwiO1xuLy8gY3NzIGJvb3RzdHJhcCBjbGFzc2VzXG5leHBvcnQgeyBkZWZhdWx0Qm9vdHN0cmFwQ3NzIH0gZnJvbSBcIi4uL2RlZmF1bHRDc3MvY3NzYm9vdHN0cmFwXCI7XG4vLyBjc3MgYm9vdHN0cmFwICsgbWF0ZXJpYWwgY2xhc3Nlc1xuZXhwb3J0IHsgZGVmYXVsdEJvb3RzdHJhcE1hdGVyaWFsQ3NzIH0gZnJvbSBcIi4uL2RlZmF1bHRDc3MvY3NzYm9vdHN0cmFwbWF0ZXJpYWxcIjtcbi8vIGNzcyBtb2Rlcm4gY2xhc3Nlc1xuZXhwb3J0IHsgbW9kZXJuQ3NzIH0gZnJvbSBcIi4uL2RlZmF1bHRDc3MvY3NzbW9kZXJuXCI7XG5cbi8vIHV0aWxzXG5leHBvcnQgKiBmcm9tIFwiLi4vcmVuZGVyZXJGYWN0b3J5XCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdXRpbHMvcmVzcG9uc2l2aXR5LW1hbmFnZXJcIjtcbmV4cG9ydCB7IHVud3JhcCB9IGZyb20gXCIuLi91dGlscy91dGlsc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2FjdGlvbnMvYWN0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWN0aW9ucy9hZGFwdGl2ZS1jb250YWluZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hY3Rpb25zL2NvbnRhaW5lclwiO1xuIiwiaW1wb3J0IHsgVnVlU3VydmV5TW9kZWwgfSBmcm9tIFwiLi4vdnVlL3N1cnZleU1vZGVsXCI7XG5leHBvcnQgeyBWdWVTdXJ2ZXlNb2RlbCBhcyBNb2RlbCB9O1xuaW1wb3J0IHsgVnVlU3VydmV5V2luZG93TW9kZWwgfSBmcm9tIFwiLi4vdnVlL3N1cnZleU1vZGVsXCI7XG5leHBvcnQgeyBWdWVTdXJ2ZXlXaW5kb3dNb2RlbCBhcyBXaW5kb3dNb2RlbCB9O1xuZXhwb3J0IHsgU3VydmV5IH0gZnJvbSBcIi4uL3Z1ZS9zdXJ2ZXkudnVlXCI7XG5leHBvcnQgeyBDdXN0b21XaWRnZXQgfSBmcm9tIFwiLi4vdnVlL2N1c3RvbXdpZGdldC52dWVcIjtcbmV4cG9ydCB7IFN1cnZleVN0cmluZyB9IGZyb20gXCIuLi92dWUvc3RyaW5nLnZ1ZVwiO1xuZXhwb3J0IHsgU3VydmV5U3RyaW5nVmlld2VyIH0gZnJvbSBcIi4uL3Z1ZS9zdHJpbmctdmlld2VyLnZ1ZVwiO1xuZXhwb3J0IHsgU3VydmV5U3RyaW5nRWRpdG9yIH0gZnJvbSBcIi4uL3Z1ZS9zdHJpbmctZWRpdG9yLnZ1ZVwiO1xuZXhwb3J0IHsgU3VydmV5RWxlbWVudFZ1ZSB9IGZyb20gXCIuLi92dWUvZWxlbWVudC52dWVcIjtcbmV4cG9ydCB7IFdpbmRvdyB9IGZyb20gXCIuLi92dWUvd2luZG93LnZ1ZVwiO1xuZXhwb3J0IHsgUGFnZSB9IGZyb20gXCIuLi92dWUvcGFnZS52dWVcIjtcbmV4cG9ydCB7IFJhZGlvZ3JvdXAgfSBmcm9tIFwiLi4vdnVlL3JhZGlvZ3JvdXAudnVlXCI7XG5leHBvcnQgeyBSYWRpb2dyb3VwSXRlbSB9IGZyb20gXCIuLi92dWUvcmFkaW9ncm91cGl0ZW0udnVlXCI7XG5leHBvcnQgeyBPdGhlckNob2ljZSB9IGZyb20gXCIuLi92dWUvb3RoZXJDaG9pY2UudnVlXCI7XG5leHBvcnQgeyBSYXRpbmcgfSBmcm9tIFwiLi4vdnVlL3JhdGluZy52dWVcIjtcbmV4cG9ydCB7IENvbW1lbnQgfSBmcm9tIFwiLi4vdnVlL2NvbW1lbnQudnVlXCI7XG5leHBvcnQgeyBSYW5raW5nIH0gZnJvbSBcIi4uL3Z1ZS9yYW5raW5nL3JhbmtpbmcudnVlXCI7XG5leHBvcnQgeyBSYW5raW5nSXRlbSB9IGZyb20gXCIuLi92dWUvcmFua2luZy9yYW5raW5nLWl0ZW0udnVlXCI7XG5leHBvcnQgeyBDaGVja2JveCB9IGZyb20gXCIuLi92dWUvY2hlY2tib3gudnVlXCI7XG5leHBvcnQgeyBDaGVja2JveEl0ZW0gfSBmcm9tIFwiLi4vdnVlL2NoZWNrYm94aXRlbS52dWVcIjtcbmV4cG9ydCB7IEJ1dHRvbkdyb3VwIH0gZnJvbSBcIi4uL3Z1ZS9idXR0b25ncm91cC52dWVcIjtcbmV4cG9ydCB7IEJ1dHRvbkdyb3VwSXRlbSB9IGZyb20gXCIuLi92dWUvYnV0dG9uZ3JvdXBpdGVtLnZ1ZVwiO1xuZXhwb3J0IHsgUXVlc3Rpb25UZXh0IH0gZnJvbSBcIi4uL3Z1ZS90ZXh0LnZ1ZVwiO1xuZXhwb3J0IHsgQm9vbGVhbiB9IGZyb20gXCIuLi92dWUvYm9vbGVhblwiO1xuZXhwb3J0IHsgQm9vbGVhblN3aXRjaCB9IGZyb20gXCIuLi92dWUvYm9vbGVhbi1zd2l0Y2gudnVlXCI7XG5leHBvcnQgeyBCb29sZWFuQ2hlY2tib3ggfSBmcm9tIFwiLi4vdnVlL2Jvb2xlYW4tY2hlY2tib3gudnVlXCI7XG5leHBvcnQgeyBFbXB0eSB9IGZyb20gXCIuLi92dWUvZW1wdHkudnVlXCI7XG5leHBvcnQgeyBNdWx0aXBsZVRleHQgfSBmcm9tIFwiLi4vdnVlL211bHRpcGxldGV4dC52dWVcIjtcbmV4cG9ydCB7IE1hdHJpeCB9IGZyb20gXCIuLi92dWUvbWF0cml4LnZ1ZVwiO1xuZXhwb3J0IHsgRHJvcGRvd24gfSBmcm9tIFwiLi4vdnVlL2Ryb3Bkb3duLnZ1ZVwiO1xuZXhwb3J0IHsgRmlsZSB9IGZyb20gXCIuLi92dWUvZmlsZS52dWVcIjtcbmV4cG9ydCB7IE1hdHJpeENlbGwgfSBmcm9tIFwiLi4vdnVlL21hdHJpeGNlbGwudnVlXCI7XG5leHBvcnQgeyBNYXRyaXhUYWJsZSB9IGZyb20gXCIuLi92dWUvbWF0cml4dGFibGUudnVlXCI7XG5leHBvcnQgeyBNYXRyaXhEcm9wZG93biB9IGZyb20gXCIuLi92dWUvbWF0cml4ZHJvcGRvd24udnVlXCI7XG5leHBvcnQgeyBNYXRyaXhEeW5hbWljIH0gZnJvbSBcIi4uL3Z1ZS9tYXRyaXhkeW5hbWljLnZ1ZVwiO1xuZXhwb3J0IHsgRXJyb3JzIH0gZnJvbSBcIi4uL3Z1ZS9lcnJvcnMudnVlXCI7XG5leHBvcnQgeyBIdG1sIH0gZnJvbSBcIi4uL3Z1ZS9odG1sLnZ1ZVwiO1xuZXhwb3J0IHsgRXhwcmVzc2lvbiB9IGZyb20gXCIuLi92dWUvZXhwcmVzc2lvbi52dWVcIjtcbmV4cG9ydCB7IEltYWdlUGlja2VyIH0gZnJvbSBcIi4uL3Z1ZS9pbWFnZXBpY2tlci52dWVcIjtcbmV4cG9ydCB7IFBhbmVsRHluYW1pYyB9IGZyb20gXCIuLi92dWUvcGFuZWxkeW5hbWljLnZ1ZVwiO1xuZXhwb3J0IHsgUGFuZWxEeW5hbWljUmVtb3ZlIH0gZnJvbSBcIi4uL3Z1ZS9wYW5lbGR5bmFtaWNyZW1vdmUudnVlXCI7XG5leHBvcnQgeyBQYW5lbER5bmFtaWNQcm9ncmVzcyB9IGZyb20gXCIuLi92dWUvcGFuZWxkeW5hbWljcHJvZ3Jlc3MudnVlXCI7XG5leHBvcnQgeyBOYXZpZ2F0aW9uIH0gZnJvbSBcIi4uL3Z1ZS9uYXZpZ2F0aW9uLnZ1ZVwiO1xuZXhwb3J0IHsgUHJvZ3Jlc3MgfSBmcm9tIFwiLi4vdnVlL3Byb2dyZXNzLnZ1ZVwiO1xuZXhwb3J0IHsgUHJvZ3Jlc3NCdXR0b25zIH0gZnJvbSBcIi4uL3Z1ZS9wcm9ncmVzc0J1dHRvbnMudnVlXCI7XG5leHBvcnQgeyBUaW1lclBhbmVsIH0gZnJvbSBcIi4uL3Z1ZS90aW1lcnBhbmVsLnZ1ZVwiO1xuZXhwb3J0IHsgUGFuZWwgfSBmcm9tIFwiLi4vdnVlL3BhbmVsLnZ1ZVwiO1xuZXhwb3J0IHsgRmxvd1BhbmVsIH0gZnJvbSBcIi4uL3Z1ZS9mbG93cGFuZWwudnVlXCI7XG5leHBvcnQgeyBGbG93UGFuZWxFbGVtZW50IH0gZnJvbSBcIi4uL3Z1ZS9mbG93cGFuZWxlbGVtZW50LnZ1ZVwiO1xuZXhwb3J0IHsgUm93IH0gZnJvbSBcIi4uL3Z1ZS9yb3cudnVlXCI7XG5leHBvcnQgeyBFbGVtZW50SGVhZGVyIH0gZnJvbSBcIi4uL3Z1ZS9lbGVtZW50aGVhZGVyLnZ1ZVwiO1xuZXhwb3J0IHsgUXVlc3Rpb25JbWFnZSB9IGZyb20gXCIuLi92dWUvaW1hZ2UudnVlXCI7XG5leHBvcnQgeyBTaWduYXR1cmVQYWQgfSBmcm9tIFwiLi4vdnVlL3NpZ25hdHVyZXBhZC52dWVcIjtcbmV4cG9ydCB7IFN1cnZleUhlYWRlciB9IGZyb20gXCIuLi92dWUvaGVhZGVyLnZ1ZVwiO1xuZXhwb3J0IHsgQ3VzdG9tIH0gZnJvbSBcIi4uL3Z1ZS9jdXN0b20udnVlXCI7XG5leHBvcnQgeyBDb21wb3NpdGUgfSBmcm9tIFwiLi4vdnVlL2NvbXBvc2l0ZS52dWVcIjtcblxuZXhwb3J0IHsgVGl0bGVDb250ZW50IH0gZnJvbSBcIi4uL3Z1ZS90aXRsZWNvbnRlbnQudnVlXCI7XG5leHBvcnQgeyBUaXRsZUFjdGlvbnMgfSBmcm9tIFwiLi4vdnVlL2NvbXBvbmVudHMvdGl0bGUtYWN0aW9ucy90aXRsZS1hY3Rpb25zLnZ1ZVwiO1xuZXhwb3J0IHsgRGVmYXVsdFRpdGxlIH0gZnJvbSBcIi4uL3Z1ZS9jb21wb25lbnRzL2RlZmF1bHQtdGl0bGUvZGVmYXVsdC10aXRsZS52dWVcIjtcbmV4cG9ydCB7IEFjdGlvbkJhclZpZXdNb2RlbCB9IGZyb20gXCIuLi92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXIudnVlXCI7XG5leHBvcnQgeyBTdmdJY29uIH0gZnJvbSBcIi4uL3Z1ZS9jb21wb25lbnRzL3N2Zy1pY29uL3N2Zy1pY29uLnZ1ZVwiO1xuZXhwb3J0IHsgUG9wdXAgfSBmcm9tIFwiLi4vdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAudnVlXCI7XG5leHBvcnQgeyBMaXN0IH0gZnJvbSBcIi4uL3Z1ZS9jb21wb25lbnRzL2xpc3QvbGlzdC52dWVcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY1JlbW92ZUJ1dHRvbiB9IGZyb20gXCIuLi92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9yZW1vdmUtYnV0dG9uL3JlbW92ZS1idXR0b24udnVlXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeERldGFpbEJ1dHRvbiB9IGZyb20gXCIuLi92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9kZXRhaWwtYnV0dG9uL2RldGFpbC1idXR0b24udnVlXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNEcmFnRHJvcEljb24gfSBmcm9tIFwiLi4vdnVlL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZHJhZy1kcm9wLWljb24vZHJhZy1kcm9wLWljb24udnVlXCI7XG4iLCJleHBvcnQgKiBmcm9tIFwiLi9jb3JlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi92dWUtdWlcIjtcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcbmltcG9ydCB7IFN1cnZleUVycm9yIH0gZnJvbSBcIi4vc3VydmV5LWVycm9yXCI7XG5pbXBvcnQgeyBJU3VydmV5RXJyb3JPd25lciB9IGZyb20gXCIuL2Jhc2UtaW50ZXJmYWNlc1wiO1xuXG5leHBvcnQgY2xhc3MgQW5zd2VyUmVxdWlyZWRFcnJvciBleHRlbmRzIFN1cnZleUVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHRleHQ6IHN0cmluZyA9IG51bGwsXG4gICAgZXJyb3JPd25lcjogSVN1cnZleUVycm9yT3duZXIgPSBudWxsXG4gICkge1xuICAgIHN1cGVyKHRleHQsIGVycm9yT3duZXIpO1xuICB9XG4gIHB1YmxpYyBnZXRFcnJvclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJyZXF1aXJlZFwiO1xuICB9XG4gIHByb3RlY3RlZCBnZXREZWZhdWx0VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicmVxdWlyZWRFcnJvclwiKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIE9uZUFuc3dlclJlcXVpcmVkRXJyb3IgZXh0ZW5kcyBTdXJ2ZXlFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyB0ZXh0OiBzdHJpbmcgPSBudWxsLFxuICAgIGVycm9yT3duZXI6IElTdXJ2ZXlFcnJvck93bmVyID0gbnVsbFxuICApIHtcbiAgICBzdXBlcih0ZXh0LCBlcnJvck93bmVyKTtcbiAgfVxuICBwdWJsaWMgZ2V0RXJyb3JUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwicmVxdWlyZW9uZWFuc3dlclwiO1xuICB9XG4gIHByb3RlY3RlZCBnZXREZWZhdWx0VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicmVxdWlyZWRFcnJvckluUGFuZWxcIik7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBSZXF1cmVOdW1lcmljRXJyb3IgZXh0ZW5kcyBTdXJ2ZXlFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyB0ZXh0OiBzdHJpbmcgPSBudWxsLFxuICAgIGVycm9yT3duZXI6IElTdXJ2ZXlFcnJvck93bmVyID0gbnVsbFxuICApIHtcbiAgICBzdXBlcih0ZXh0LCBlcnJvck93bmVyKTtcbiAgfVxuICBwdWJsaWMgZ2V0RXJyb3JUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwicmVxdWlyZW51bWVyaWNcIjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm51bWVyaWNFcnJvclwiKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEV4Y2VlZFNpemVFcnJvciBleHRlbmRzIFN1cnZleUVycm9yIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBtYXhTaXplOiBudW1iZXIsIGVycm9yT3duZXI6IElTdXJ2ZXlFcnJvck93bmVyID0gbnVsbCkge1xuICAgIHN1cGVyKG51bGwsIGVycm9yT3duZXIpO1xuICAgIHRoaXMubG9jVGV4dC50ZXh0ID0gdGhpcy5nZXRUZXh0KCk7XG4gIH1cbiAgcHVibGljIGdldEVycm9yVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImV4Y2VlZHNpemVcIjtcbiAgfVxuICBwdWJsaWMgZ2V0RGVmYXVsdFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uXG4gICAgICAuZ2V0U3RyaW5nKFwiZXhjZWVkTWF4U2l6ZVwiKVxuICAgICAgW1wiZm9ybWF0XCJdKHRoaXMuZ2V0VGV4dFNpemUoKSk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRUZXh0U2l6ZSgpIHtcbiAgICB2YXIgc2l6ZXMgPSBbXCJCeXRlc1wiLCBcIktCXCIsIFwiTUJcIiwgXCJHQlwiLCBcIlRCXCJdO1xuICAgIHZhciBmaXhlZCA9IFswLCAwLCAyLCAzLCAzXTtcbiAgICBpZiAodGhpcy5tYXhTaXplID09PSAwKSB7XG4gICAgICByZXR1cm4gXCIwIEJ5dGVcIjtcbiAgICB9XG4gICAgdmFyIGkgPSBNYXRoLmZsb29yKE1hdGgubG9nKHRoaXMubWF4U2l6ZSkgLyBNYXRoLmxvZygxMDI0KSk7XG4gICAgdmFyIHZhbHVlID0gdGhpcy5tYXhTaXplIC8gTWF0aC5wb3coMTAyNCwgaSk7XG4gICAgcmV0dXJuIHZhbHVlLnRvRml4ZWQoZml4ZWRbaV0pICsgXCIgXCIgKyBzaXplc1tpXTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIFdlYlJlcXVlc3RFcnJvciBleHRlbmRzIFN1cnZleUVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHN0YXR1czogc3RyaW5nLFxuICAgIHB1YmxpYyByZXNwb25zZTogc3RyaW5nLFxuICAgIGVycm9yT3duZXI6IElTdXJ2ZXlFcnJvck93bmVyID0gbnVsbFxuICApIHtcbiAgICBzdXBlcihudWxsLCBlcnJvck93bmVyKTtcbiAgfVxuICBwdWJsaWMgZ2V0RXJyb3JUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwid2VicmVxdWVzdFwiO1xuICB9XG4gIHByb3RlY3RlZCBnZXREZWZhdWx0VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb25cbiAgICAgIC5nZXRTdHJpbmcoXCJ1cmxSZXF1ZXN0RXJyb3JcIilcbiAgICAgIFtcImZvcm1hdFwiXSh0aGlzLnN0YXR1cywgdGhpcy5yZXNwb25zZSk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBXZWJSZXF1ZXN0RW1wdHlFcnJvciBleHRlbmRzIFN1cnZleUVycm9yIHtcbiAgY29uc3RydWN0b3IocHVibGljIHRleHQ6IHN0cmluZywgZXJyb3JPd25lcjogSVN1cnZleUVycm9yT3duZXIgPSBudWxsKSB7XG4gICAgc3VwZXIodGV4dCwgZXJyb3JPd25lcik7XG4gIH1cbiAgcHVibGljIGdldEVycm9yVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIndlYnJlcXVlc3RlbXB0eVwiO1xuICB9XG4gIHByb3RlY3RlZCBnZXREZWZhdWx0VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwidXJsR2V0Q2hvaWNlc0Vycm9yXCIpO1xuICB9XG59XG5leHBvcnQgY2xhc3MgT3RoZXJFbXB0eUVycm9yIGV4dGVuZHMgU3VydmV5RXJyb3Ige1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGV4dDogc3RyaW5nLCBlcnJvck93bmVyOiBJU3VydmV5RXJyb3JPd25lciA9IG51bGwpIHtcbiAgICBzdXBlcih0ZXh0LCBlcnJvck93bmVyKTtcbiAgfVxuICBwdWJsaWMgZ2V0RXJyb3JUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwib3RoZXJlbXB0eVwiO1xuICB9XG4gIHByb3RlY3RlZCBnZXREZWZhdWx0VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwib3RoZXJSZXF1aXJlZEVycm9yXCIpO1xuICB9XG59XG5leHBvcnQgY2xhc3MgVXBsb2FkaW5nRmlsZUVycm9yIGV4dGVuZHMgU3VydmV5RXJyb3Ige1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGV4dDogc3RyaW5nLCBlcnJvck93bmVyOiBJU3VydmV5RXJyb3JPd25lciA9IG51bGwpIHtcbiAgICBzdXBlcih0ZXh0LCBlcnJvck93bmVyKTtcbiAgfVxuICBwdWJsaWMgZ2V0RXJyb3JUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwidXBsb2FkaW5nZmlsZVwiO1xuICB9XG4gIHByb3RlY3RlZCBnZXREZWZhdWx0VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwidXBsb2FkaW5nRmlsZVwiKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIFJlcXVpcmVkSW5BbGxSb3dzRXJyb3IgZXh0ZW5kcyBTdXJ2ZXlFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZXh0OiBzdHJpbmcsIGVycm9yT3duZXI6IElTdXJ2ZXlFcnJvck93bmVyID0gbnVsbCkge1xuICAgIHN1cGVyKHRleHQsIGVycm9yT3duZXIpO1xuICB9XG4gIHB1YmxpYyBnZXRFcnJvclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJyZXF1aXJlZGluYWxscm93c2Vycm9yXCI7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERlZmF1bHRUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJyZXF1aXJlZEluQWxsUm93c0Vycm9yXCIpO1xuICB9XG59XG5leHBvcnQgY2xhc3MgTWluUm93Q291bnRFcnJvciBleHRlbmRzIFN1cnZleUVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG1pblJvd0NvdW50OiBudW1iZXIsXG4gICAgZXJyb3JPd25lcjogSVN1cnZleUVycm9yT3duZXIgPSBudWxsXG4gICkge1xuICAgIHN1cGVyKG51bGwsIGVycm9yT3duZXIpO1xuICB9XG4gIHB1YmxpYyBnZXRFcnJvclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJtaW5yb3djb3VudGVycm9yXCI7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERlZmF1bHRUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvblxuICAgICAgLmdldFN0cmluZyhcIm1pblJvd0NvdW50RXJyb3JcIilcbiAgICAgIFtcImZvcm1hdFwiXSh0aGlzLm1pblJvd0NvdW50KTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEtleUR1cGxpY2F0aW9uRXJyb3IgZXh0ZW5kcyBTdXJ2ZXlFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZXh0OiBzdHJpbmcsIGVycm9yT3duZXI6IElTdXJ2ZXlFcnJvck93bmVyID0gbnVsbCkge1xuICAgIHN1cGVyKHRleHQsIGVycm9yT3duZXIpO1xuICB9XG4gIHB1YmxpYyBnZXRFcnJvclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJrZXlkdXBsaWNhdGlvbmVycm9yXCI7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERlZmF1bHRUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJrZXlEdXBsaWNhdGlvbkVycm9yXCIpO1xuICB9XG59XG5leHBvcnQgY2xhc3MgQ3VzdG9tRXJyb3IgZXh0ZW5kcyBTdXJ2ZXlFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZXh0OiBzdHJpbmcsIGVycm9yT3duZXI6IElTdXJ2ZXlFcnJvck93bmVyID0gbnVsbCkge1xuICAgIHN1cGVyKHRleHQsIGVycm9yT3duZXIpO1xuICB9XG4gIHB1YmxpYyBnZXRFcnJvclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJjdXN0b21cIjtcbiAgfVxufVxuIiwiaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQgeyBJTG9jYWxpemFibGVPd25lciwgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuaW1wb3J0IHsgQ29uZGl0aW9uUnVubmVyIH0gZnJvbSBcIi4vY29uZGl0aW9uc1wiO1xuXG5leHBvcnQgY2xhc3MgRXhwcmVzc2lvbkl0ZW0gZXh0ZW5kcyBCYXNlIGltcGxlbWVudHMgSUxvY2FsaXphYmxlT3duZXIge1xuICBwdWJsaWMgbG9jT3duZXI6IElMb2NhbGl6YWJsZU93bmVyO1xuICBjb25zdHJ1Y3RvcihleHByZXNzaW9uOiBzdHJpbmcgPSBudWxsKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwiaHRtbFwiLCB0aGlzKTtcbiAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiZXhwcmVzc2lvbml0ZW1cIjtcbiAgfVxuICBwdWJsaWMgcnVuQ29uZGl0aW9uKHZhbHVlczogYW55LCBwcm9wZXJ0aWVzOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuZXhwcmVzc2lvbikgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBuZXcgQ29uZGl0aW9uUnVubmVyKHRoaXMuZXhwcmVzc2lvbikucnVuKHZhbHVlcywgcHJvcGVydGllcyk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBleHByZXNzaW9uIHByb3BlcnR5LiBJZiB0aGlzIGV4cHJlc3Npb24gcmV0dXJucyB0cnVlLCB0aGVuIHN1cnZleSB3aWxsIHVzZSBodG1sIHByb3BlcnR5IHRvIHNob3cgb24gY29tcGxldGUgcGFnZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgZXhwcmVzc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJleHByZXNzaW9uXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgZXhwcmVzc2lvbih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImV4cHJlc3Npb25cIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jSHRtbCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJodG1sXCIpO1xuICB9XG5cbiAgcHVibGljIGdldExvY2FsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAhIXRoaXMubG9jT3duZXIgPyB0aGlzLmxvY093bmVyLmdldExvY2FsZSgpIDogXCJcIjtcbiAgfVxuICBwdWJsaWMgZ2V0TWFya2Rvd25IdG1sKHRleHQ6IHN0cmluZywgbmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gISF0aGlzLmxvY093bmVyID8gdGhpcy5sb2NPd25lci5nZXRNYXJrZG93bkh0bWwodGV4dCwgbmFtZSkgOiBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXRSZW5kZXJlcihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiAhIXRoaXMubG9jT3duZXIgPyB0aGlzLmxvY093bmVyLmdldFJlbmRlcmVyKG5hbWUpIDogbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0UHJvY2Vzc2VkVGV4dCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmxvY093bmVyID8gdGhpcy5sb2NPd25lci5nZXRQcm9jZXNzZWRUZXh0KHRleHQpIDogdGV4dDtcbiAgfVxufVxuXG4vKipcbiAqIEEgY2xhc3MgdGhhdCBjb250YWlucyBleHByZXNzaW9uIGFuZCBodG1sIHByb3BldGllcy4gSXQgdXNlcyBpbiBzdXJ2ZXkuY29tcGxldGVkSHRtbE9uQ29uZGl0aW9uIGFycmF5LlxuICogSWYgdGhlIGV4cHJlc3Npb24gcmV0dXJucyB0cnVlIHRoZW4gaHRtbCBvZiB0aGlzIGl0ZW0gdXNlcyBpbnN0ZWFkIG9mIHN1cnZleS5jb21wbGV0ZWRIdG1sIHByb3BlcnR5XG4gKiBAc2VlIFN1cnZleU1vZGVsLmNvbXBsZXRlZEh0bWxPbkNvbmRpdGlvblxuICogQHNlZSBTdXJ2ZXlNb2RlbC5jb21wbGV0ZWRIdG1sXG4gKi9cbmV4cG9ydCBjbGFzcyBIdG1sQ29uZGl0aW9uSXRlbSBleHRlbmRzIEV4cHJlc3Npb25JdGVtIHtcbiAgY29uc3RydWN0b3IoZXhwcmVzc2lvbjogc3RyaW5nID0gbnVsbCwgaHRtbDogc3RyaW5nID0gbnVsbCkge1xuICAgIHN1cGVyKGV4cHJlc3Npb24pO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJodG1sXCIsIHRoaXMpO1xuICAgIHRoaXMuaHRtbCA9IGh0bWw7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJodG1sY29uZGl0aW9uaXRlbVwiO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgaHRtbCB0aGF0IHNob3dzIG9uIGNvbXBsZXRlZCAoJ1RoYW5rIHlvdScpIHBhZ2UuIFRoZSBleHByZXNzaW9uIHNob3VsZCByZXR1cm4gdHJ1ZVxuICAgKiBAc2VlIGV4cHJlc3Npb25cbiAgICovXG4gIHB1YmxpYyBnZXQgaHRtbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImh0bWxcIik7XG4gIH1cbiAgcHVibGljIHNldCBodG1sKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImh0bWxcIiwgdmFsdWUpO1xuICB9XG4gIGdldCBsb2NIdG1sKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImh0bWxcIik7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGNsYXNzIHRoYXQgY29udGFpbnMgZXhwcmVzc2lvbiBhbmQgdXJsIHByb3BldGllcy4gSXQgdXNlcyBpbiBzdXJ2ZXkubmF2aWdhdGVUb1VybE9uQ29uZGl0aW9uIGFycmF5LlxuICogSWYgdGhlIGV4cHJlc3Npb24gcmV0dXJucyB0cnVlIHRoZW4gdXJsIG9mIHRoaXMgaXRlbSB1c2VzIGluc3RlYWQgb2Ygc3VydmV5Lm5hdmlnYXRlVG9VcmwgcHJvcGVydHlcbiAqIEBzZWUgU3VydmV5TW9kZWwubmF2aWdhdGVUb1VybFxuICovXG5leHBvcnQgY2xhc3MgVXJsQ29uZGl0aW9uSXRlbSBleHRlbmRzIEV4cHJlc3Npb25JdGVtIHtcbiAgY29uc3RydWN0b3IoZXhwcmVzc2lvbjogc3RyaW5nID0gbnVsbCwgdXJsOiBzdHJpbmcgPSBudWxsKSB7XG4gICAgc3VwZXIoZXhwcmVzc2lvbik7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInVybFwiLCB0aGlzKTtcbiAgICB0aGlzLnVybCA9IHVybDtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInVybGNvbmRpdGlvbml0ZW1cIjtcbiAgfVxuICAvKipcbiAgICogVGhlIHVybCB0aGF0IHN1cnZleSBuYXZpZ2F0ZXMgdG8gb24gY29tcGxldGluZyB0aGUgc3VydmV5LiBUaGUgZXhwcmVzc2lvbiBzaG91bGQgcmV0dXJuIHRydWVcbiAgICogQHNlZSBleHByZXNzaW9uXG4gICAqL1xuICBwdWJsaWMgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInVybFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHVybCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJ1cmxcIiwgdmFsdWUpO1xuICB9XG4gIGdldCBsb2NVcmwoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwidXJsXCIpO1xuICB9XG59XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwiZXhwcmVzc2lvbml0ZW1cIixcbiAgW1wiZXhwcmVzc2lvbjpjb25kaXRpb25cIl0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbkl0ZW0oKTtcbiAgfSxcbiAgXCJiYXNlXCJcbik7XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwiaHRtbGNvbmRpdGlvbml0ZW1cIixcbiAgW3sgbmFtZTogXCJodG1sOmh0bWxcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0h0bWxcIiB9XSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBIdG1sQ29uZGl0aW9uSXRlbSgpO1xuICB9LFxuICBcImV4cHJlc3Npb25pdGVtXCJcbik7XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwidXJsY29uZGl0aW9uaXRlbVwiLFxuICBbeyBuYW1lOiBcInVybDpzdHJpbmdcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1VybFwiIH1dLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFVybENvbmRpdGlvbkl0ZW0oKTtcbiAgfSxcbiAgXCJleHByZXNzaW9uaXRlbVwiXG4pO1xuIiwiaW1wb3J0IHtcbkNvbnN0LFxuQmluYXJ5T3BlcmFuZCxcblZhcmlhYmxlLFxuT3BlcmFuZCxcblVuYXJ5T3BlcmFuZCxcbkZ1bmN0aW9uT3BlcmFuZCxcbkFycmF5T3BlcmFuZFxufSBmcm9tIFwiLi9leHByZXNzaW9uc1wiO1xuXG4vLyBHZW5lcmF0ZWQgYnkgUEVHLmpzIHYuIDAuMTAuMCAodHMtcGVnanMgcGx1Z2luIHYuIDAuMy4xIClcbi8vXG4vLyBodHRwczovL3BlZ2pzLm9yZy8gICBodHRwczovL2dpdGh1Yi5jb20vbWV0YWRldnByby90cy1wZWdqc1xuXG5cInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJRmlsZVBvc2l0aW9uIHtcbiAgb2Zmc2V0OiBudW1iZXI7XG4gIGxpbmU6IG51bWJlcjtcbiAgY29sdW1uOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUZpbGVSYW5nZSB7XG4gIHN0YXJ0OiBJRmlsZVBvc2l0aW9uO1xuICBlbmQ6IElGaWxlUG9zaXRpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxpdGVyYWxFeHBlY3RhdGlvbiB7XG4gIHR5cGU6IFwibGl0ZXJhbFwiO1xuICB0ZXh0OiBzdHJpbmc7XG4gIGlnbm9yZUNhc2U6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNsYXNzUGFydHMgZXh0ZW5kcyBBcnJheTxzdHJpbmcgfCBJQ2xhc3NQYXJ0cz4ge31cblxuZXhwb3J0IGludGVyZmFjZSBJQ2xhc3NFeHBlY3RhdGlvbiB7XG4gIHR5cGU6IFwiY2xhc3NcIjtcbiAgcGFydHM6IElDbGFzc1BhcnRzO1xuICBpbnZlcnRlZDogYm9vbGVhbjtcbiAgaWdub3JlQ2FzZTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQW55RXhwZWN0YXRpb24ge1xuICB0eXBlOiBcImFueVwiO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElFbmRFeHBlY3RhdGlvbiB7XG4gIHR5cGU6IFwiZW5kXCI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU90aGVyRXhwZWN0YXRpb24ge1xuICB0eXBlOiBcIm90aGVyXCI7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIEV4cGVjdGF0aW9uID0gSUxpdGVyYWxFeHBlY3RhdGlvbiB8IElDbGFzc0V4cGVjdGF0aW9uIHwgSUFueUV4cGVjdGF0aW9uIHwgSUVuZEV4cGVjdGF0aW9uIHwgSU90aGVyRXhwZWN0YXRpb247XG5cbmV4cG9ydCBjbGFzcyBTeW50YXhFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcHVibGljIHN0YXRpYyBidWlsZE1lc3NhZ2UoZXhwZWN0ZWQ6IEV4cGVjdGF0aW9uW10sIGZvdW5kOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgZnVuY3Rpb24gaGV4KGNoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIGNoLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGl0ZXJhbEVzY2FwZShzOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHNcbiAgICAgICAgLnJlcGxhY2UoL1xcXFwvZywgXCJcXFxcXFxcXFwiKVxuICAgICAgICAucmVwbGFjZSgvXCIvZywgIFwiXFxcXFxcXCJcIilcbiAgICAgICAgLnJlcGxhY2UoL1xcMC9nLCBcIlxcXFwwXCIpXG4gICAgICAgIC5yZXBsYWNlKC9cXHQvZywgXCJcXFxcdFwiKVxuICAgICAgICAucmVwbGFjZSgvXFxuL2csIFwiXFxcXG5cIilcbiAgICAgICAgLnJlcGxhY2UoL1xcci9nLCBcIlxcXFxyXCIpXG4gICAgICAgIC5yZXBsYWNlKC9bXFx4MDAtXFx4MEZdL2csICAgICAgICAgICAgKGNoKSA9PiBcIlxcXFx4MFwiICsgaGV4KGNoKSApXG4gICAgICAgIC5yZXBsYWNlKC9bXFx4MTAtXFx4MUZcXHg3Ri1cXHg5Rl0vZywgKGNoKSA9PiBcIlxcXFx4XCIgICsgaGV4KGNoKSApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsYXNzRXNjYXBlKHM6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gc1xuICAgICAgICAucmVwbGFjZSgvXFxcXC9nLCBcIlxcXFxcXFxcXCIpXG4gICAgICAgIC5yZXBsYWNlKC9cXF0vZywgXCJcXFxcXVwiKVxuICAgICAgICAucmVwbGFjZSgvXFxeL2csIFwiXFxcXF5cIilcbiAgICAgICAgLnJlcGxhY2UoLy0vZywgIFwiXFxcXC1cIilcbiAgICAgICAgLnJlcGxhY2UoL1xcMC9nLCBcIlxcXFwwXCIpXG4gICAgICAgIC5yZXBsYWNlKC9cXHQvZywgXCJcXFxcdFwiKVxuICAgICAgICAucmVwbGFjZSgvXFxuL2csIFwiXFxcXG5cIilcbiAgICAgICAgLnJlcGxhY2UoL1xcci9nLCBcIlxcXFxyXCIpXG4gICAgICAgIC5yZXBsYWNlKC9bXFx4MDAtXFx4MEZdL2csICAgICAgICAgICAgKGNoKSA9PiBcIlxcXFx4MFwiICsgaGV4KGNoKSApXG4gICAgICAgIC5yZXBsYWNlKC9bXFx4MTAtXFx4MUZcXHg3Ri1cXHg5Rl0vZywgKGNoKSA9PiBcIlxcXFx4XCIgICsgaGV4KGNoKSApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlRXhwZWN0YXRpb24oZXhwZWN0YXRpb246IEV4cGVjdGF0aW9uKSB7XG4gICAgICBzd2l0Y2ggKGV4cGVjdGF0aW9uLnR5cGUpIHtcbiAgICAgICAgY2FzZSBcImxpdGVyYWxcIjpcbiAgICAgICAgICByZXR1cm4gXCJcXFwiXCIgKyBsaXRlcmFsRXNjYXBlKGV4cGVjdGF0aW9uLnRleHQpICsgXCJcXFwiXCI7XG4gICAgICAgIGNhc2UgXCJjbGFzc1wiOlxuICAgICAgICAgIGNvbnN0IGVzY2FwZWRQYXJ0cyA9IGV4cGVjdGF0aW9uLnBhcnRzLm1hcCgocGFydCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocGFydClcbiAgICAgICAgICAgICAgPyBjbGFzc0VzY2FwZShwYXJ0WzBdIGFzIHN0cmluZykgKyBcIi1cIiArIGNsYXNzRXNjYXBlKHBhcnRbMV0gYXMgc3RyaW5nKVxuICAgICAgICAgICAgICA6IGNsYXNzRXNjYXBlKHBhcnQpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuIFwiW1wiICsgKGV4cGVjdGF0aW9uLmludmVydGVkID8gXCJeXCIgOiBcIlwiKSArIGVzY2FwZWRQYXJ0cyArIFwiXVwiO1xuICAgICAgICBjYXNlIFwiYW55XCI6XG4gICAgICAgICAgcmV0dXJuIFwiYW55IGNoYXJhY3RlclwiO1xuICAgICAgICBjYXNlIFwiZW5kXCI6XG4gICAgICAgICAgcmV0dXJuIFwiZW5kIG9mIGlucHV0XCI7XG4gICAgICAgIGNhc2UgXCJvdGhlclwiOlxuICAgICAgICAgIHJldHVybiBleHBlY3RhdGlvbi5kZXNjcmlwdGlvbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZXNjcmliZUV4cGVjdGVkKGV4cGVjdGVkMTogRXhwZWN0YXRpb25bXSkge1xuICAgICAgY29uc3QgZGVzY3JpcHRpb25zID0gZXhwZWN0ZWQxLm1hcChkZXNjcmliZUV4cGVjdGF0aW9uKTtcbiAgICAgIGxldCBpOiBudW1iZXI7XG4gICAgICBsZXQgajogbnVtYmVyO1xuXG4gICAgICBkZXNjcmlwdGlvbnMuc29ydCgpO1xuXG4gICAgICBpZiAoZGVzY3JpcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZm9yIChpID0gMSwgaiA9IDE7IGkgPCBkZXNjcmlwdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoZGVzY3JpcHRpb25zW2kgLSAxXSAhPT0gZGVzY3JpcHRpb25zW2ldKSB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbnNbal0gPSBkZXNjcmlwdGlvbnNbaV07XG4gICAgICAgICAgICBqKys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRlc2NyaXB0aW9ucy5sZW5ndGggPSBqO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGRlc2NyaXB0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiBkZXNjcmlwdGlvbnNbMF07XG5cbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHJldHVybiBkZXNjcmlwdGlvbnNbMF0gKyBcIiBvciBcIiArIGRlc2NyaXB0aW9uc1sxXTtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBkZXNjcmlwdGlvbnMuc2xpY2UoMCwgLTEpLmpvaW4oXCIsIFwiKVxuICAgICAgICAgICAgKyBcIiwgb3IgXCJcbiAgICAgICAgICAgICsgZGVzY3JpcHRpb25zW2Rlc2NyaXB0aW9ucy5sZW5ndGggLSAxXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZXNjcmliZUZvdW5kKGZvdW5kMTogc3RyaW5nIHwgbnVsbCkge1xuICAgICAgcmV0dXJuIGZvdW5kMSA/IFwiXFxcIlwiICsgbGl0ZXJhbEVzY2FwZShmb3VuZDEpICsgXCJcXFwiXCIgOiBcImVuZCBvZiBpbnB1dFwiO1xuICAgIH1cblxuICAgIHJldHVybiBcIkV4cGVjdGVkIFwiICsgZGVzY3JpYmVFeHBlY3RlZChleHBlY3RlZCkgKyBcIiBidXQgXCIgKyBkZXNjcmliZUZvdW5kKGZvdW5kKSArIFwiIGZvdW5kLlwiO1xuICB9XG5cbiAgcHVibGljIG1lc3NhZ2U6IHN0cmluZztcbiAgcHVibGljIGV4cGVjdGVkOiBFeHBlY3RhdGlvbltdO1xuICBwdWJsaWMgZm91bmQ6IHN0cmluZyB8IG51bGw7XG4gIHB1YmxpYyBsb2NhdGlvbjogSUZpbGVSYW5nZTtcbiAgcHVibGljIG5hbWU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIGV4cGVjdGVkOiBFeHBlY3RhdGlvbltdLCBmb3VuZDogc3RyaW5nIHwgbnVsbCwgbG9jYXRpb246IElGaWxlUmFuZ2UpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgdGhpcy5leHBlY3RlZCA9IGV4cGVjdGVkO1xuICAgIHRoaXMuZm91bmQgPSBmb3VuZDtcbiAgICB0aGlzLmxvY2F0aW9uID0gbG9jYXRpb247XG4gICAgdGhpcy5uYW1lID0gXCJTeW50YXhFcnJvclwiO1xuXG4gICAgaWYgKHR5cGVvZiAoRXJyb3IgYXMgYW55KS5jYXB0dXJlU3RhY2tUcmFjZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAoRXJyb3IgYXMgYW55KS5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBTeW50YXhFcnJvcik7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNhY2hlZCB7XG4gIG5leHRQb3M6IG51bWJlcjtcbiAgcmVzdWx0OiBhbnk7XG59XG5cbmZ1bmN0aW9uIHBlZyRwYXJzZShpbnB1dDogc3RyaW5nLCBvcHRpb25zPzogSVBhcnNlT3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucyA6IHt9O1xuXG4gIGNvbnN0IHBlZyRGQUlMRUQ6IFJlYWRvbmx5PGFueT4gPSB7fTtcblxuICBjb25zdCBwZWckc3RhcnRSdWxlRnVuY3Rpb25zOiB7W2lkOiBzdHJpbmddOiBhbnl9ID0geyBFeHByZXNzaW9uOiBwZWckcGFyc2VFeHByZXNzaW9uIH07XG4gIGxldCBwZWckc3RhcnRSdWxlRnVuY3Rpb246ICgpID0+IGFueSA9IHBlZyRwYXJzZUV4cHJlc3Npb247XG5cbiAgY29uc3QgcGVnJGMwID0gZnVuY3Rpb24oaGVhZDogYW55LCB0YWlsOiBhbnkpOiBhbnkge1xuICAgICAgcmV0dXJuIGJ1aWxkQmluYXJ5T3BlcmFuZChoZWFkLCB0YWlsLCB0cnVlKTtcbiAgICB9O1xuICBjb25zdCBwZWckYzEgPSBcInx8XCI7XG4gIGNvbnN0IHBlZyRjMiA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJ8fFwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMyA9IFwib3JcIjtcbiAgY29uc3QgcGVnJGM0ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIm9yXCIsIHRydWUpO1xuICBjb25zdCBwZWckYzUgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gXCJvclwiOyB9O1xuICBjb25zdCBwZWckYzYgPSBcIiYmXCI7XG4gIGNvbnN0IHBlZyRjNyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCImJlwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjOCA9IFwiYW5kXCI7XG4gIGNvbnN0IHBlZyRjOSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJhbmRcIiwgdHJ1ZSk7XG4gIGNvbnN0IHBlZyRjMTAgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gXCJhbmRcIjsgfTtcbiAgY29uc3QgcGVnJGMxMSA9IGZ1bmN0aW9uKGhlYWQ6IGFueSwgdGFpbDogYW55KTogYW55IHtcbiAgICAgIHJldHVybiBidWlsZEJpbmFyeU9wZXJhbmQoaGVhZCwgdGFpbCk7XG4gICAgfTtcbiAgY29uc3QgcGVnJGMxMiA9IFwiPD1cIjtcbiAgY29uc3QgcGVnJGMxMyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCI8PVwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMTQgPSBcImxlc3NvcmVxdWFsXCI7XG4gIGNvbnN0IHBlZyRjMTUgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwibGVzc29yZXF1YWxcIiwgdHJ1ZSk7XG4gIGNvbnN0IHBlZyRjMTYgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gXCJsZXNzb3JlcXVhbFwiOyB9O1xuICBjb25zdCBwZWckYzE3ID0gXCI+PVwiO1xuICBjb25zdCBwZWckYzE4ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIj49XCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxOSA9IFwiZ3JlYXRlcm9yZXF1YWxcIjtcbiAgY29uc3QgcGVnJGMyMCA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJncmVhdGVyb3JlcXVhbFwiLCB0cnVlKTtcbiAgY29uc3QgcGVnJGMyMSA9IGZ1bmN0aW9uKCk6IGFueSB7IHJldHVybiBcImdyZWF0ZXJvcmVxdWFsXCI7IH07XG4gIGNvbnN0IHBlZyRjMjIgPSBcIj1cIjtcbiAgY29uc3QgcGVnJGMyMyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCI9XCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMyNCA9IFwiZXF1YWxcIjtcbiAgY29uc3QgcGVnJGMyNSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJlcXVhbFwiLCB0cnVlKTtcbiAgY29uc3QgcGVnJGMyNiA9IGZ1bmN0aW9uKCk6IGFueSB7IHJldHVybiBcImVxdWFsXCI7IH07XG4gIGNvbnN0IHBlZyRjMjcgPSBcIiE9XCI7XG4gIGNvbnN0IHBlZyRjMjggPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiIT1cIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzI5ID0gXCJub3RlcXVhbFwiO1xuICBjb25zdCBwZWckYzMwID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIm5vdGVxdWFsXCIsIHRydWUpO1xuICBjb25zdCBwZWckYzMxID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIFwibm90ZXF1YWxcIjsgfTtcbiAgY29uc3QgcGVnJGMzMiA9IFwiPFwiO1xuICBjb25zdCBwZWckYzMzID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIjxcIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzM0ID0gXCJsZXNzXCI7XG4gIGNvbnN0IHBlZyRjMzUgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwibGVzc1wiLCB0cnVlKTtcbiAgY29uc3QgcGVnJGMzNiA9IGZ1bmN0aW9uKCk6IGFueSB7IHJldHVybiBcImxlc3NcIjsgfTtcbiAgY29uc3QgcGVnJGMzNyA9IFwiPlwiO1xuICBjb25zdCBwZWckYzM4ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIj5cIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzM5ID0gXCJncmVhdGVyXCI7XG4gIGNvbnN0IHBlZyRjNDAgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiZ3JlYXRlclwiLCB0cnVlKTtcbiAgY29uc3QgcGVnJGM0MSA9IGZ1bmN0aW9uKCk6IGFueSB7IHJldHVybiBcImdyZWF0ZXJcIjsgfTtcbiAgY29uc3QgcGVnJGM0MiA9IFwiK1wiO1xuICBjb25zdCBwZWckYzQzID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIitcIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzQ0ID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIFwicGx1c1wiOyAgfTtcbiAgY29uc3QgcGVnJGM0NSA9IFwiLVwiO1xuICBjb25zdCBwZWckYzQ2ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIi1cIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzQ3ID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIFwibWludXNcIjsgfTtcbiAgY29uc3QgcGVnJGM0OCA9IFwiKlwiO1xuICBjb25zdCBwZWckYzQ5ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIipcIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzUwID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIFwibXVsXCI7IH07XG4gIGNvbnN0IHBlZyRjNTEgPSBcIi9cIjtcbiAgY29uc3QgcGVnJGM1MiA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCIvXCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGM1MyA9IGZ1bmN0aW9uKCk6IGFueSB7IHJldHVybiBcImRpdlwiOyB9O1xuICBjb25zdCBwZWckYzU0ID0gXCIlXCI7XG4gIGNvbnN0IHBlZyRjNTUgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiJVwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjNTYgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gXCJtb2RcIjsgfTtcbiAgY29uc3QgcGVnJGM1NyA9IFwiXlwiO1xuICBjb25zdCBwZWckYzU4ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIl5cIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzU5ID0gXCJwb3dlclwiO1xuICBjb25zdCBwZWckYzYwID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcInBvd2VyXCIsIHRydWUpO1xuICBjb25zdCBwZWckYzYxID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIFwicG93ZXJcIjsgfTtcbiAgY29uc3QgcGVnJGM2MiA9IFwiKj1cIjtcbiAgY29uc3QgcGVnJGM2MyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCIqPVwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjNjQgPSBcImNvbnRhaW5zXCI7XG4gIGNvbnN0IHBlZyRjNjUgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiY29udGFpbnNcIiwgdHJ1ZSk7XG4gIGNvbnN0IHBlZyRjNjYgPSBcImNvbnRhaW5cIjtcbiAgY29uc3QgcGVnJGM2NyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJjb250YWluXCIsIHRydWUpO1xuICBjb25zdCBwZWckYzY4ID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIFwiY29udGFpbnNcIjsgfTtcbiAgY29uc3QgcGVnJGM2OSA9IFwibm90Y29udGFpbnNcIjtcbiAgY29uc3QgcGVnJGM3MCA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJub3Rjb250YWluc1wiLCB0cnVlKTtcbiAgY29uc3QgcGVnJGM3MSA9IFwibm90Y29udGFpblwiO1xuICBjb25zdCBwZWckYzcyID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIm5vdGNvbnRhaW5cIiwgdHJ1ZSk7XG4gIGNvbnN0IHBlZyRjNzMgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gXCJub3Rjb250YWluc1wiOyB9O1xuICBjb25zdCBwZWckYzc0ID0gXCJhbnlvZlwiO1xuICBjb25zdCBwZWckYzc1ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcImFueW9mXCIsIHRydWUpO1xuICBjb25zdCBwZWckYzc2ID0gZnVuY3Rpb24oKTogYW55IHtyZXR1cm4gXCJhbnlvZlwiOyB9O1xuICBjb25zdCBwZWckYzc3ID0gXCJhbGxvZlwiO1xuICBjb25zdCBwZWckYzc4ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcImFsbG9mXCIsIHRydWUpO1xuICBjb25zdCBwZWckYzc5ID0gZnVuY3Rpb24oKTogYW55IHtyZXR1cm4gXCJhbGxvZlwiOyB9O1xuICBjb25zdCBwZWckYzgwID0gXCIoXCI7XG4gIGNvbnN0IHBlZyRjODEgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiKFwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjODIgPSBcIilcIjtcbiAgY29uc3QgcGVnJGM4MyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCIpXCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGM4NCA9IGZ1bmN0aW9uKGV4cHI6IGFueSk6IGFueSB7IHJldHVybiBleHByOyB9O1xuICBjb25zdCBwZWckYzg1ID0gZnVuY3Rpb24obmFtZTogYW55LCBwYXJhbXM6IGFueSk6IGFueSB7IHJldHVybiBuZXcgRnVuY3Rpb25PcGVyYW5kKG5hbWUsIHBhcmFtcyk7IH07XG4gIGNvbnN0IHBlZyRjODYgPSBcIiFcIjtcbiAgY29uc3QgcGVnJGM4NyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCIhXCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGM4OCA9IFwibmVnYXRlXCI7XG4gIGNvbnN0IHBlZyRjODkgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwibmVnYXRlXCIsIHRydWUpO1xuICBjb25zdCBwZWckYzkwID0gZnVuY3Rpb24oZXhwcjogYW55KTogYW55IHsgcmV0dXJuIG5ldyBVbmFyeU9wZXJhbmQoZXhwciwgXCJuZWdhdGVcIik7IH07XG4gIGNvbnN0IHBlZyRjOTEgPSBmdW5jdGlvbihleHByOiBhbnksIG9wOiBhbnkpOiBhbnkgeyByZXR1cm4gbmV3IFVuYXJ5T3BlcmFuZChleHByLCBvcCk7IH07XG4gIGNvbnN0IHBlZyRjOTIgPSBcImVtcHR5XCI7XG4gIGNvbnN0IHBlZyRjOTMgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiZW1wdHlcIiwgdHJ1ZSk7XG4gIGNvbnN0IHBlZyRjOTQgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gXCJlbXB0eVwiOyB9O1xuICBjb25zdCBwZWckYzk1ID0gXCJub3RlbXB0eVwiO1xuICBjb25zdCBwZWckYzk2ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIm5vdGVtcHR5XCIsIHRydWUpO1xuICBjb25zdCBwZWckYzk3ID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIFwibm90ZW1wdHlcIjsgfTtcbiAgY29uc3QgcGVnJGM5OCA9IFwidW5kZWZpbmVkXCI7XG4gIGNvbnN0IHBlZyRjOTkgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwidW5kZWZpbmVkXCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxMDAgPSBcIm51bGxcIjtcbiAgY29uc3QgcGVnJGMxMDEgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwibnVsbFwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMTAyID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIG51bGw7IH07XG4gIGNvbnN0IHBlZyRjMTAzID0gZnVuY3Rpb24odmFsdWU6IGFueSk6IGFueSB7IHJldHVybiBuZXcgQ29uc3QodmFsdWUpOyB9O1xuICBjb25zdCBwZWckYzEwNCA9IFwie1wiO1xuICBjb25zdCBwZWckYzEwNSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJ7XCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxMDYgPSBcIn1cIjtcbiAgY29uc3QgcGVnJGMxMDcgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwifVwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMTA4ID0gZnVuY3Rpb24odmFsdWU6IGFueSk6IGFueSB7IHJldHVybiBuZXcgVmFyaWFibGUodmFsdWUpOyB9O1xuICBjb25zdCBwZWckYzEwOSA9IGZ1bmN0aW9uKHZhbHVlOiBhbnkpOiBhbnkgeyByZXR1cm4gdmFsdWU7IH07XG4gIGNvbnN0IHBlZyRjMTEwID0gXCInJ1wiO1xuICBjb25zdCBwZWckYzExMSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCInJ1wiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMTEyID0gZnVuY3Rpb24oKTogYW55IHtyZXR1cm4gXCJcIjsgfTtcbiAgY29uc3QgcGVnJGMxMTMgPSBcIlxcXCJcXFwiXCI7XG4gIGNvbnN0IHBlZyRjMTE0ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIlxcXCJcXFwiXCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxMTUgPSBcIidcIjtcbiAgY29uc3QgcGVnJGMxMTYgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiJ1wiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMTE3ID0gZnVuY3Rpb24odmFsdWU6IGFueSk6IGFueSB7IHJldHVybiBcIidcIiArIHZhbHVlICsgXCInXCI7IH07XG4gIGNvbnN0IHBlZyRjMTE4ID0gXCJcXFwiXCI7XG4gIGNvbnN0IHBlZyRjMTE5ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIlxcXCJcIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzEyMCA9IFwiW1wiO1xuICBjb25zdCBwZWckYzEyMSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJbXCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxMjIgPSBcIl1cIjtcbiAgY29uc3QgcGVnJGMxMjMgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiXVwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMTI0ID0gZnVuY3Rpb24oc2VxdWVuY2U6IGFueSk6IGFueSB7IHJldHVybiBzZXF1ZW5jZTsgfTtcbiAgY29uc3QgcGVnJGMxMjUgPSBcIixcIjtcbiAgY29uc3QgcGVnJGMxMjYgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiLFwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMTI3ID0gZnVuY3Rpb24oZXhwcjogYW55LCB0YWlsOiBhbnkpOiBhbnkge1xuICAgICAgaWYgKGV4cHIgPT0gbnVsbClcbiAgICAgICAgcmV0dXJuIG5ldyBBcnJheU9wZXJhbmQoW10pO1xuXG4gICAgICB2YXIgYXJyYXkgPSBbZXhwcl07XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0YWlsKSkge1xuICAgICAgICB2YXIgZmxhdHRlbiA9IGZsYXR0ZW5BcnJheSh0YWlsKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDM7IGkgPCBmbGF0dGVuLmxlbmd0aDsgaSArPSA0KSB7XG4gICAgICAgICAgYXJyYXkucHVzaChmbGF0dGVuW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IEFycmF5T3BlcmFuZChhcnJheSk7XG4gICAgfTtcbiAgY29uc3QgcGVnJGMxMjggPSBcInRydWVcIjtcbiAgY29uc3QgcGVnJGMxMjkgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwidHJ1ZVwiLCB0cnVlKTtcbiAgY29uc3QgcGVnJGMxMzAgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gdHJ1ZTsgfTtcbiAgY29uc3QgcGVnJGMxMzEgPSBcImZhbHNlXCI7XG4gIGNvbnN0IHBlZyRjMTMyID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcImZhbHNlXCIsIHRydWUpO1xuICBjb25zdCBwZWckYzEzMyA9IGZ1bmN0aW9uKCk6IGFueSB7IHJldHVybiBmYWxzZTsgfTtcbiAgY29uc3QgcGVnJGMxMzQgPSBcIjB4XCI7XG4gIGNvbnN0IHBlZyRjMTM1ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIjB4XCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxMzYgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gcGFyc2VJbnQodGV4dCgpLCAxNik7IH07XG4gIGNvbnN0IHBlZyRjMTM3ID0gL15bXFwtXS87XG4gIGNvbnN0IHBlZyRjMTM4ID0gcGVnJGNsYXNzRXhwZWN0YXRpb24oW1wiLVwiXSwgZmFsc2UsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxMzkgPSBmdW5jdGlvbihzaWduOiBhbnksIG51bTogYW55KTogYW55IHsgcmV0dXJuIHNpZ24gPT0gbnVsbCA/IG51bSA6IC1udW07IH07XG4gIGNvbnN0IHBlZyRjMTQwID0gXCIuXCI7XG4gIGNvbnN0IHBlZyRjMTQxID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIi5cIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzE0MiA9IGZ1bmN0aW9uKCk6IGFueSB7IHJldHVybiBwYXJzZUZsb2F0KHRleHQoKSk7IH07XG4gIGNvbnN0IHBlZyRjMTQzID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIHBhcnNlSW50KHRleHQoKSwgMTApOyB9O1xuICBjb25zdCBwZWckYzE0NCA9IFwiMFwiO1xuICBjb25zdCBwZWckYzE0NSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCIwXCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxNDYgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gMDsgfTtcbiAgY29uc3QgcGVnJGMxNDcgPSBmdW5jdGlvbihjaGFyczogYW55KTogYW55IHsgcmV0dXJuIGNoYXJzLmpvaW4oXCJcIik7IH07XG4gIGNvbnN0IHBlZyRjMTQ4ID0gXCJcXFxcJ1wiO1xuICBjb25zdCBwZWckYzE0OSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJcXFxcJ1wiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMTUwID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIFwiJ1wiOyB9O1xuICBjb25zdCBwZWckYzE1MSA9IFwiXFxcXFxcXCJcIjtcbiAgY29uc3QgcGVnJGMxNTIgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiXFxcXFxcXCJcIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzE1MyA9IGZ1bmN0aW9uKCk6IGFueSB7IHJldHVybiBcIlxcXCJcIjsgfTtcbiAgY29uc3QgcGVnJGMxNTQgPSAvXlteXCInXS87XG4gIGNvbnN0IHBlZyRjMTU1ID0gcGVnJGNsYXNzRXhwZWN0YXRpb24oW1wiXFxcIlwiLCBcIidcIl0sIHRydWUsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxNTYgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gdGV4dCgpOyB9O1xuICBjb25zdCBwZWckYzE1NyA9IC9eW157fV0vO1xuICBjb25zdCBwZWckYzE1OCA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtcIntcIiwgXCJ9XCJdLCB0cnVlLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMTU5ID0gL15bMC05XS87XG4gIGNvbnN0IHBlZyRjMTYwID0gcGVnJGNsYXNzRXhwZWN0YXRpb24oW1tcIjBcIiwgXCI5XCJdXSwgZmFsc2UsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxNjEgPSAvXlsxLTldLztcbiAgY29uc3QgcGVnJGMxNjIgPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbW1wiMVwiLCBcIjlcIl1dLCBmYWxzZSwgZmFsc2UpO1xuICBjb25zdCBwZWckYzE2MyA9IC9eW2EtekEtWl0vO1xuICBjb25zdCBwZWckYzE2NCA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtbXCJhXCIsIFwielwiXSwgW1wiQVwiLCBcIlpcIl1dLCBmYWxzZSwgZmFsc2UpO1xuICBjb25zdCBwZWckYzE2NSA9IHBlZyRvdGhlckV4cGVjdGF0aW9uKFwid2hpdGVzcGFjZVwiKTtcbiAgY29uc3QgcGVnJGMxNjYgPSAvXlsgXFx0XFxuXFxyXS87XG4gIGNvbnN0IHBlZyRjMTY3ID0gcGVnJGNsYXNzRXhwZWN0YXRpb24oW1wiIFwiLCBcIlxcdFwiLCBcIlxcblwiLCBcIlxcclwiXSwgZmFsc2UsIGZhbHNlKTtcblxuICBsZXQgcGVnJGN1cnJQb3MgPSAwO1xuICBsZXQgcGVnJHNhdmVkUG9zID0gMDtcbiAgY29uc3QgcGVnJHBvc0RldGFpbHNDYWNoZSA9IFt7IGxpbmU6IDEsIGNvbHVtbjogMSB9XTtcbiAgbGV0IHBlZyRtYXhGYWlsUG9zID0gMDtcbiAgbGV0IHBlZyRtYXhGYWlsRXhwZWN0ZWQ6IEV4cGVjdGF0aW9uW10gPSBbXTtcbiAgbGV0IHBlZyRzaWxlbnRGYWlscyA9IDA7XG5cbiAgY29uc3QgcGVnJHJlc3VsdHNDYWNoZToge1tpZDogbnVtYmVyXTogSUNhY2hlZH0gPSB7fTtcblxuICBsZXQgcGVnJHJlc3VsdDtcblxuICBpZiAob3B0aW9ucy5zdGFydFJ1bGUgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICghKG9wdGlvbnMuc3RhcnRSdWxlIGluIHBlZyRzdGFydFJ1bGVGdW5jdGlvbnMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBzdGFydCBwYXJzaW5nIGZyb20gcnVsZSBcXFwiXCIgKyBvcHRpb25zLnN0YXJ0UnVsZSArIFwiXFxcIi5cIik7XG4gICAgfVxuXG4gICAgcGVnJHN0YXJ0UnVsZUZ1bmN0aW9uID0gcGVnJHN0YXJ0UnVsZUZ1bmN0aW9uc1tvcHRpb25zLnN0YXJ0UnVsZV07XG4gIH1cblxuICBmdW5jdGlvbiB0ZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGlucHV0LnN1YnN0cmluZyhwZWckc2F2ZWRQb3MsIHBlZyRjdXJyUG9zKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxvY2F0aW9uKCk6IElGaWxlUmFuZ2Uge1xuICAgIHJldHVybiBwZWckY29tcHV0ZUxvY2F0aW9uKHBlZyRzYXZlZFBvcywgcGVnJGN1cnJQb3MpO1xuICB9XG5cbiAgZnVuY3Rpb24gZXhwZWN0ZWQoZGVzY3JpcHRpb246IHN0cmluZywgbG9jYXRpb24xPzogSUZpbGVSYW5nZSkge1xuICAgIGxvY2F0aW9uMSA9IGxvY2F0aW9uMSAhPT0gdW5kZWZpbmVkXG4gICAgICA/IGxvY2F0aW9uMVxuICAgICAgOiBwZWckY29tcHV0ZUxvY2F0aW9uKHBlZyRzYXZlZFBvcywgcGVnJGN1cnJQb3MpO1xuXG4gICAgdGhyb3cgcGVnJGJ1aWxkU3RydWN0dXJlZEVycm9yKFxuICAgICAgW3BlZyRvdGhlckV4cGVjdGF0aW9uKGRlc2NyaXB0aW9uKV0sXG4gICAgICBpbnB1dC5zdWJzdHJpbmcocGVnJHNhdmVkUG9zLCBwZWckY3VyclBvcyksXG4gICAgICBsb2NhdGlvbjFcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gZXJyb3IobWVzc2FnZTogc3RyaW5nLCBsb2NhdGlvbjE/OiBJRmlsZVJhbmdlKSB7XG4gICAgbG9jYXRpb24xID0gbG9jYXRpb24xICE9PSB1bmRlZmluZWRcbiAgICAgID8gbG9jYXRpb24xXG4gICAgICA6IHBlZyRjb21wdXRlTG9jYXRpb24ocGVnJHNhdmVkUG9zLCBwZWckY3VyclBvcyk7XG5cbiAgICB0aHJvdyBwZWckYnVpbGRTaW1wbGVFcnJvcihtZXNzYWdlLCBsb2NhdGlvbjEpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbih0ZXh0MTogc3RyaW5nLCBpZ25vcmVDYXNlOiBib29sZWFuKTogSUxpdGVyYWxFeHBlY3RhdGlvbiB7XG4gICAgcmV0dXJuIHsgdHlwZTogXCJsaXRlcmFsXCIsIHRleHQ6IHRleHQxLCBpZ25vcmVDYXNlOiBpZ25vcmVDYXNlIH07XG4gIH1cblxuICBmdW5jdGlvbiBwZWckY2xhc3NFeHBlY3RhdGlvbihwYXJ0czogSUNsYXNzUGFydHMsIGludmVydGVkOiBib29sZWFuLCBpZ25vcmVDYXNlOiBib29sZWFuKTogSUNsYXNzRXhwZWN0YXRpb24ge1xuICAgIHJldHVybiB7IHR5cGU6IFwiY2xhc3NcIiwgcGFydHM6IHBhcnRzLCBpbnZlcnRlZDogaW52ZXJ0ZWQsIGlnbm9yZUNhc2U6IGlnbm9yZUNhc2UgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRhbnlFeHBlY3RhdGlvbigpOiBJQW55RXhwZWN0YXRpb24ge1xuICAgIHJldHVybiB7IHR5cGU6IFwiYW55XCIgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRlbmRFeHBlY3RhdGlvbigpOiBJRW5kRXhwZWN0YXRpb24ge1xuICAgIHJldHVybiB7IHR5cGU6IFwiZW5kXCIgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRvdGhlckV4cGVjdGF0aW9uKGRlc2NyaXB0aW9uOiBzdHJpbmcpOiBJT3RoZXJFeHBlY3RhdGlvbiB7XG4gICAgcmV0dXJuIHsgdHlwZTogXCJvdGhlclwiLCBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24gfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRjb21wdXRlUG9zRGV0YWlscyhwb3M6IG51bWJlcikge1xuICAgIGxldCBkZXRhaWxzID0gcGVnJHBvc0RldGFpbHNDYWNoZVtwb3NdO1xuICAgIGxldCBwO1xuXG4gICAgaWYgKGRldGFpbHMpIHtcbiAgICAgIHJldHVybiBkZXRhaWxzO1xuICAgIH0gZWxzZSB7XG4gICAgICBwID0gcG9zIC0gMTtcbiAgICAgIHdoaWxlICghcGVnJHBvc0RldGFpbHNDYWNoZVtwXSkge1xuICAgICAgICBwLS07XG4gICAgICB9XG5cbiAgICAgIGRldGFpbHMgPSBwZWckcG9zRGV0YWlsc0NhY2hlW3BdO1xuICAgICAgZGV0YWlscyA9IHtcbiAgICAgICAgbGluZTogZGV0YWlscy5saW5lLFxuICAgICAgICBjb2x1bW46IGRldGFpbHMuY29sdW1uXG4gICAgICB9O1xuXG4gICAgICB3aGlsZSAocCA8IHBvcykge1xuICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwKSA9PT0gMTApIHtcbiAgICAgICAgICBkZXRhaWxzLmxpbmUrKztcbiAgICAgICAgICBkZXRhaWxzLmNvbHVtbiA9IDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGV0YWlscy5jb2x1bW4rKztcbiAgICAgICAgfVxuXG4gICAgICAgIHArKztcbiAgICAgIH1cblxuICAgICAgcGVnJHBvc0RldGFpbHNDYWNoZVtwb3NdID0gZGV0YWlscztcblxuICAgICAgcmV0dXJuIGRldGFpbHM7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGVnJGNvbXB1dGVMb2NhdGlvbihzdGFydFBvczogbnVtYmVyLCBlbmRQb3M6IG51bWJlcik6IElGaWxlUmFuZ2Uge1xuICAgIGNvbnN0IHN0YXJ0UG9zRGV0YWlscyA9IHBlZyRjb21wdXRlUG9zRGV0YWlscyhzdGFydFBvcyk7XG4gICAgY29uc3QgZW5kUG9zRGV0YWlscyA9IHBlZyRjb21wdXRlUG9zRGV0YWlscyhlbmRQb3MpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0OiB7XG4gICAgICAgIG9mZnNldDogc3RhcnRQb3MsXG4gICAgICAgIGxpbmU6IHN0YXJ0UG9zRGV0YWlscy5saW5lLFxuICAgICAgICBjb2x1bW46IHN0YXJ0UG9zRGV0YWlscy5jb2x1bW5cbiAgICAgIH0sXG4gICAgICBlbmQ6IHtcbiAgICAgICAgb2Zmc2V0OiBlbmRQb3MsXG4gICAgICAgIGxpbmU6IGVuZFBvc0RldGFpbHMubGluZSxcbiAgICAgICAgY29sdW1uOiBlbmRQb3NEZXRhaWxzLmNvbHVtblxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBwZWckZmFpbChleHBlY3RlZDE6IEV4cGVjdGF0aW9uKSB7XG4gICAgaWYgKHBlZyRjdXJyUG9zIDwgcGVnJG1heEZhaWxQb3MpIHsgcmV0dXJuOyB9XG5cbiAgICBpZiAocGVnJGN1cnJQb3MgPiBwZWckbWF4RmFpbFBvcykge1xuICAgICAgcGVnJG1heEZhaWxQb3MgPSBwZWckY3VyclBvcztcbiAgICAgIHBlZyRtYXhGYWlsRXhwZWN0ZWQgPSBbXTtcbiAgICB9XG5cbiAgICBwZWckbWF4RmFpbEV4cGVjdGVkLnB1c2goZXhwZWN0ZWQxKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRidWlsZFNpbXBsZUVycm9yKG1lc3NhZ2U6IHN0cmluZywgbG9jYXRpb24xOiBJRmlsZVJhbmdlKSB7XG4gICAgcmV0dXJuIG5ldyBTeW50YXhFcnJvcihtZXNzYWdlLCBbXSwgXCJcIiwgbG9jYXRpb24xKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRidWlsZFN0cnVjdHVyZWRFcnJvcihleHBlY3RlZDE6IEV4cGVjdGF0aW9uW10sIGZvdW5kOiBzdHJpbmcgfCBudWxsLCBsb2NhdGlvbjE6IElGaWxlUmFuZ2UpIHtcbiAgICByZXR1cm4gbmV3IFN5bnRheEVycm9yKFxuICAgICAgU3ludGF4RXJyb3IuYnVpbGRNZXNzYWdlKGV4cGVjdGVkMSwgZm91bmQpLFxuICAgICAgZXhwZWN0ZWQxLFxuICAgICAgZm91bmQsXG4gICAgICBsb2NhdGlvbjFcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlRXhwcmVzc2lvbigpOiBPcGVyYW5kIHtcbiAgICBsZXQgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczYsIHM3LCBzODtcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAwO1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckcGFyc2VfKCk7XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IHBlZyRwYXJzZUxvZ2ljT3IoKTtcbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMyA9IFtdO1xuICAgICAgICBzNCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBzNSA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczYgPSBwZWckcGFyc2VPclNpZ24oKTtcbiAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM4ID0gcGVnJHBhcnNlTG9naWNPcigpO1xuICAgICAgICAgICAgICBpZiAoczggIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzNSA9IFtzNSwgczYsIHM3LCBzOF07XG4gICAgICAgICAgICAgICAgczQgPSBzNTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHM0O1xuICAgICAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzNDtcbiAgICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHM0O1xuICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHM0O1xuICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMy5wdXNoKHM0KTtcbiAgICAgICAgICBzNCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgIHM1ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczYgPSBwZWckcGFyc2VPclNpZ24oKTtcbiAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNyA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczggPSBwZWckcGFyc2VMb2dpY09yKCk7XG4gICAgICAgICAgICAgICAgaWYgKHM4ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICBzNSA9IFtzNSwgczYsIHM3LCBzOF07XG4gICAgICAgICAgICAgICAgICBzNCA9IHM1O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHM0O1xuICAgICAgICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHM0O1xuICAgICAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzNDtcbiAgICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHM0O1xuICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNCA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgczEgPSBwZWckYzAoczIsIHMzKTtcbiAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlT3JTaWduKCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMTtcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAxO1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMikgPT09IHBlZyRjMSkge1xuICAgICAgczEgPSBwZWckYzE7XG4gICAgICBwZWckY3VyclBvcyArPSAyO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMik7IH1cbiAgICB9XG4gICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAyKS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzMpIHtcbiAgICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDIpO1xuICAgICAgICBwZWckY3VyclBvcyArPSAyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNCk7IH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgIHMxID0gcGVnJGM1KCk7XG4gICAgfVxuICAgIHMwID0gczE7XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VMb2dpY09yKCk6IEJpbmFyeU9wZXJhbmQge1xuICAgIGxldCBzMCwgczEsIHMyLCBzMywgczQsIHM1LCBzNiwgczc7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMjtcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIHMxID0gcGVnJHBhcnNlTG9naWNBbmQoKTtcbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gW107XG4gICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgczQgPSBwZWckcGFyc2VfKCk7XG4gICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczUgPSBwZWckcGFyc2VBbmRTaWduKCk7XG4gICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM2ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczcgPSBwZWckcGFyc2VMb2dpY0FuZCgpO1xuICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM0ID0gW3M0LCBzNSwgczYsIHM3XTtcbiAgICAgICAgICAgICAgczMgPSBzNDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMi5wdXNoKHMzKTtcbiAgICAgICAgczMgPSBwZWckY3VyclBvcztcbiAgICAgICAgczQgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM1ID0gcGVnJHBhcnNlQW5kU2lnbigpO1xuICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczYgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczcgPSBwZWckcGFyc2VMb2dpY0FuZCgpO1xuICAgICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzNCA9IFtzNCwgczUsIHM2LCBzN107XG4gICAgICAgICAgICAgICAgczMgPSBzNDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICBzMSA9IHBlZyRjMChzMSwgczIpO1xuICAgICAgICBzMCA9IHMxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUFuZFNpZ24oKTogYW55IHtcbiAgICBsZXQgczAsIHMxO1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDM7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAyKSA9PT0gcGVnJGM2KSB7XG4gICAgICBzMSA9IHBlZyRjNjtcbiAgICAgIHBlZyRjdXJyUG9zICs9IDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM3KTsgfVxuICAgIH1cbiAgICBpZiAoczEgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDMpLnRvTG93ZXJDYXNlKCkgPT09IHBlZyRjOCkge1xuICAgICAgICBzMSA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMyk7XG4gICAgICAgIHBlZyRjdXJyUG9zICs9IDM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM5KTsgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgczEgPSBwZWckYzEwKCk7XG4gICAgfVxuICAgIHMwID0gczE7XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VMb2dpY0FuZCgpOiBCaW5hcnlPcGVyYW5kIHtcbiAgICBsZXQgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczYsIHM3O1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDQ7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IHBlZyRwYXJzZUNvbXBPcHMoKTtcbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gW107XG4gICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgczQgPSBwZWckcGFyc2VfKCk7XG4gICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczUgPSBwZWckcGFyc2VDb21wYXJhYmxlT3BlcmF0b3JzKCk7XG4gICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM2ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczcgPSBwZWckcGFyc2VDb21wT3BzKCk7XG4gICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczQgPSBbczQsIHM1LCBzNiwgczddO1xuICAgICAgICAgICAgICBzMyA9IHM0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgICAgd2hpbGUgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyLnB1c2goczMpO1xuICAgICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBzNCA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczUgPSBwZWckcGFyc2VDb21wYXJhYmxlT3BlcmF0b3JzKCk7XG4gICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNiA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNyA9IHBlZyRwYXJzZUNvbXBPcHMoKTtcbiAgICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczQgPSBbczQsIHM1LCBzNiwgczddO1xuICAgICAgICAgICAgICAgIHMzID0gczQ7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgczEgPSBwZWckYzExKHMxLCBzMik7XG4gICAgICAgIHMwID0gczE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlQ29tcGFyYWJsZU9wZXJhdG9ycygpOiBhbnkge1xuICAgIGxldCBzMCwgczE7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgNTtcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDIpID09PSBwZWckYzEyKSB7XG4gICAgICBzMSA9IHBlZyRjMTI7XG4gICAgICBwZWckY3VyclBvcyArPSAyO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTMpOyB9XG4gICAgfVxuICAgIGlmIChzMSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMTEpLnRvTG93ZXJDYXNlKCkgPT09IHBlZyRjMTQpIHtcbiAgICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDExKTtcbiAgICAgICAgcGVnJGN1cnJQb3MgKz0gMTE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNSk7IH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgIHMxID0gcGVnJGMxNigpO1xuICAgIH1cbiAgICBzMCA9IHMxO1xuICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDIpID09PSBwZWckYzE3KSB7XG4gICAgICAgIHMxID0gcGVnJGMxNztcbiAgICAgICAgcGVnJGN1cnJQb3MgKz0gMjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE4KTsgfVxuICAgICAgfVxuICAgICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDE0KS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzE5KSB7XG4gICAgICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDE0KTtcbiAgICAgICAgICBwZWckY3VyclBvcyArPSAxNDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzIwKTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgIHMxID0gcGVnJGMyMSgpO1xuICAgICAgfVxuICAgICAgczAgPSBzMTtcbiAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDYxKSB7XG4gICAgICAgICAgczEgPSBwZWckYzIyO1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMyMyk7IH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoczEgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA1KS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzI0KSB7XG4gICAgICAgICAgICBzMSA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNSk7XG4gICAgICAgICAgICBwZWckY3VyclBvcyArPSA1O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjUpOyB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgIHMxID0gcGVnJGMyNigpO1xuICAgICAgICB9XG4gICAgICAgIHMwID0gczE7XG4gICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMikgPT09IHBlZyRjMjcpIHtcbiAgICAgICAgICAgIHMxID0gcGVnJGMyNztcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMyOCk7IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA4KS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzI5KSB7XG4gICAgICAgICAgICAgIHMxID0gaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA4KTtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gODtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzMwKTsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgczEgPSBwZWckYzMxKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA2MCkge1xuICAgICAgICAgICAgICBzMSA9IHBlZyRjMzI7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMzMyk7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzMSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA0KS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzM0KSB7XG4gICAgICAgICAgICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDQpO1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDQ7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMzNSk7IH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICBzMSA9IHBlZyRjMzYoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA2Mikge1xuICAgICAgICAgICAgICAgIHMxID0gcGVnJGMzNztcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMzgpOyB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNykudG9Mb3dlckNhc2UoKSA9PT0gcGVnJGMzOSkge1xuICAgICAgICAgICAgICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDcpO1xuICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzQwKTsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICBzMSA9IHBlZyRjNDEoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUNvbXBPcHMoKTogQmluYXJ5T3BlcmFuZCB7XG4gICAgbGV0IHMwLCBzMSwgczIsIHMzLCBzNCwgczUsIHM2LCBzNztcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyA2O1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckcGFyc2VQbHVzTWludXNPcHMoKTtcbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gW107XG4gICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgczQgPSBwZWckcGFyc2VfKCk7XG4gICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczUgPSBwZWckcGFyc2VQbHVzTWludXNTaWducygpO1xuICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNiA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlUGx1c01pbnVzT3BzKCk7XG4gICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczQgPSBbczQsIHM1LCBzNiwgczddO1xuICAgICAgICAgICAgICBzMyA9IHM0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgICAgd2hpbGUgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyLnB1c2goczMpO1xuICAgICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBzNCA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczUgPSBwZWckcGFyc2VQbHVzTWludXNTaWducygpO1xuICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczYgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczcgPSBwZWckcGFyc2VQbHVzTWludXNPcHMoKTtcbiAgICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczQgPSBbczQsIHM1LCBzNiwgczddO1xuICAgICAgICAgICAgICAgIHMzID0gczQ7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgczEgPSBwZWckYzAoczEsIHMyKTtcbiAgICAgICAgczAgPSBzMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VQbHVzTWludXNTaWducygpOiBhbnkge1xuICAgIGxldCBzMCwgczE7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgNztcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNDMpIHtcbiAgICAgIHMxID0gcGVnJGM0MjtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM0Myk7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgIHMxID0gcGVnJGM0NCgpO1xuICAgIH1cbiAgICBzMCA9IHMxO1xuICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNDUpIHtcbiAgICAgICAgczEgPSBwZWckYzQ1O1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNDYpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgIHMxID0gcGVnJGM0NygpO1xuICAgICAgfVxuICAgICAgczAgPSBzMTtcbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VQbHVzTWludXNPcHMoKTogQmluYXJ5T3BlcmFuZCB7XG4gICAgbGV0IHMwLCBzMSwgczIsIHMzLCBzNCwgczUsIHM2LCBzNztcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyA4O1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckcGFyc2VNdWxEaXZPcHMoKTtcbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gW107XG4gICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgczQgPSBwZWckcGFyc2VfKCk7XG4gICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczUgPSBwZWckcGFyc2VNdWxEaXZTaWducygpO1xuICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNiA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlTXVsRGl2T3BzKCk7XG4gICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczQgPSBbczQsIHM1LCBzNiwgczddO1xuICAgICAgICAgICAgICBzMyA9IHM0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgICAgd2hpbGUgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyLnB1c2goczMpO1xuICAgICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBzNCA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczUgPSBwZWckcGFyc2VNdWxEaXZTaWducygpO1xuICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczYgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczcgPSBwZWckcGFyc2VNdWxEaXZPcHMoKTtcbiAgICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczQgPSBbczQsIHM1LCBzNiwgczddO1xuICAgICAgICAgICAgICAgIHMzID0gczQ7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgczEgPSBwZWckYzAoczEsIHMyKTtcbiAgICAgICAgczAgPSBzMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VNdWxEaXZTaWducygpOiBhbnkge1xuICAgIGxldCBzMCwgczE7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgOTtcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNDIpIHtcbiAgICAgIHMxID0gcGVnJGM0ODtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM0OSk7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgIHMxID0gcGVnJGM1MCgpO1xuICAgIH1cbiAgICBzMCA9IHMxO1xuICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNDcpIHtcbiAgICAgICAgczEgPSBwZWckYzUxO1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNTIpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgIHMxID0gcGVnJGM1MygpO1xuICAgICAgfVxuICAgICAgczAgPSBzMTtcbiAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDM3KSB7XG4gICAgICAgICAgczEgPSBwZWckYzU0O1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM1NSk7IH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICBzMSA9IHBlZyRjNTYoKTtcbiAgICAgICAgfVxuICAgICAgICBzMCA9IHMxO1xuICAgICAgfVxuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZU11bERpdk9wcygpOiBCaW5hcnlPcGVyYW5kIHtcbiAgICBsZXQgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczYsIHM3O1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDEwO1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckcGFyc2VCaW5hcnlGdW5jT3AoKTtcbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gW107XG4gICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgczQgPSBwZWckcGFyc2VfKCk7XG4gICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczUgPSBwZWckcGFyc2VQb3dlclNpZ25zKCk7XG4gICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM2ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczcgPSBwZWckcGFyc2VCaW5hcnlGdW5jT3AoKTtcbiAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNCA9IFtzNCwgczUsIHM2LCBzN107XG4gICAgICAgICAgICAgIHMzID0gczQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgICB3aGlsZSAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIucHVzaChzMyk7XG4gICAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIHM0ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNSA9IHBlZyRwYXJzZVBvd2VyU2lnbnMoKTtcbiAgICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM2ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlQmluYXJ5RnVuY09wKCk7XG4gICAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHM0ID0gW3M0LCBzNSwgczYsIHM3XTtcbiAgICAgICAgICAgICAgICBzMyA9IHM0O1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgIHMxID0gcGVnJGMwKHMxLCBzMik7XG4gICAgICAgIHMwID0gczE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlUG93ZXJTaWducygpOiBhbnkge1xuICAgIGxldCBzMCwgczE7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMTE7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDk0KSB7XG4gICAgICBzMSA9IHBlZyRjNTc7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNTgpOyB9XG4gICAgfVxuICAgIGlmIChzMSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNSkudG9Mb3dlckNhc2UoKSA9PT0gcGVnJGM1OSkge1xuICAgICAgICBzMSA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNSk7XG4gICAgICAgIHBlZyRjdXJyUG9zICs9IDU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM2MCk7IH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgIHMxID0gcGVnJGM2MSgpO1xuICAgIH1cbiAgICBzMCA9IHMxO1xuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlQmluYXJ5RnVuY09wKCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMSwgczIsIHMzLCBzNCwgczUsIHM2LCBzNztcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAxMjtcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIHMxID0gcGVnJHBhcnNlRmFjdG9yKCk7XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IFtdO1xuICAgICAgczMgPSBwZWckY3VyclBvcztcbiAgICAgIHM0ID0gcGVnJHBhcnNlXygpO1xuICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHM1ID0gcGVnJHBhcnNlQmluRnVuY3Rpb25zKCk7XG4gICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM2ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczcgPSBwZWckcGFyc2VGYWN0b3IoKTtcbiAgICAgICAgICAgIGlmIChzNyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNyA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczQgPSBbczQsIHM1LCBzNiwgczddO1xuICAgICAgICAgICAgICBzMyA9IHM0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgICAgd2hpbGUgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyLnB1c2goczMpO1xuICAgICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBzNCA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczUgPSBwZWckcGFyc2VCaW5GdW5jdGlvbnMoKTtcbiAgICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM2ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlRmFjdG9yKCk7XG4gICAgICAgICAgICAgIGlmIChzNyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHM3ID0gbnVsbDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzNCA9IFtzNCwgczUsIHM2LCBzN107XG4gICAgICAgICAgICAgICAgczMgPSBzNDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICBzMSA9IHBlZyRjMTEoczEsIHMyKTtcbiAgICAgICAgczAgPSBzMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VCaW5GdW5jdGlvbnMoKTogYW55IHtcbiAgICBsZXQgczAsIHMxO1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDEzO1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMikgPT09IHBlZyRjNjIpIHtcbiAgICAgIHMxID0gcGVnJGM2MjtcbiAgICAgIHBlZyRjdXJyUG9zICs9IDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM2Myk7IH1cbiAgICB9XG4gICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA4KS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzY0KSB7XG4gICAgICAgIHMxID0gaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA4KTtcbiAgICAgICAgcGVnJGN1cnJQb3MgKz0gODtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzY1KTsgfVxuICAgICAgfVxuICAgICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDcpLnRvTG93ZXJDYXNlKCkgPT09IHBlZyRjNjYpIHtcbiAgICAgICAgICBzMSA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNyk7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzY3KTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICBzMSA9IHBlZyRjNjgoKTtcbiAgICB9XG4gICAgczAgPSBzMTtcbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAxMSkudG9Mb3dlckNhc2UoKSA9PT0gcGVnJGM2OSkge1xuICAgICAgICBzMSA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMTEpO1xuICAgICAgICBwZWckY3VyclBvcyArPSAxMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzcwKTsgfVxuICAgICAgfVxuICAgICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDEwKS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzcxKSB7XG4gICAgICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDEwKTtcbiAgICAgICAgICBwZWckY3VyclBvcyArPSAxMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzcyKTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgIHMxID0gcGVnJGM3MygpO1xuICAgICAgfVxuICAgICAgczAgPSBzMTtcbiAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA1KS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzc0KSB7XG4gICAgICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDUpO1xuICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM3NSk7IH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICBzMSA9IHBlZyRjNzYoKTtcbiAgICAgICAgfVxuICAgICAgICBzMCA9IHMxO1xuICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDUpLnRvTG93ZXJDYXNlKCkgPT09IHBlZyRjNzcpIHtcbiAgICAgICAgICAgIHMxID0gaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA1KTtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM3OCk7IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgIHMxID0gcGVnJGM3OSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlRmFjdG9yKCk6IE9wZXJhbmQge1xuICAgIGxldCBzMCwgczEsIHMyLCBzMywgczQsIHM1O1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDE0O1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0MCkge1xuICAgICAgczEgPSBwZWckYzgwO1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzgxKTsgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gcGVnJHBhcnNlXygpO1xuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMzID0gcGVnJHBhcnNlRXhwcmVzc2lvbigpO1xuICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNCA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNDEpIHtcbiAgICAgICAgICAgICAgczUgPSBwZWckYzgyO1xuICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjODMpOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoczUgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczUgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICBzMSA9IHBlZyRjODQoczMpO1xuICAgICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMwID0gcGVnJHBhcnNlRnVuY3Rpb25PcCgpO1xuICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMwID0gcGVnJHBhcnNlVW5hcnlGdW5jdGlvbk9wKCk7XG4gICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMwID0gcGVnJHBhcnNlQXRvbSgpO1xuICAgICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczAgPSBwZWckcGFyc2VBcnJheU9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlRnVuY3Rpb25PcCgpOiBhbnkge1xuICAgIGxldCBzMCwgczEsIHMyLCBzMywgczQ7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMTU7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IHBlZyRwYXJzZUxldHRlcnNBbmREaWdpdHMoKTtcbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNDApIHtcbiAgICAgICAgczIgPSBwZWckYzgwO1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjODEpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczMgPSBwZWckcGFyc2VTZXF1ZW5jZSgpO1xuICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDQxKSB7XG4gICAgICAgICAgICBzNCA9IHBlZyRjODI7XG4gICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjODMpOyB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzNCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczQgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgczEgPSBwZWckYzg1KHMxLCBzMyk7XG4gICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZVVuYXJ5RnVuY3Rpb25PcCgpOiBhbnkge1xuICAgIGxldCBzMCwgczEsIHMyLCBzMztcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAxNjtcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMzMpIHtcbiAgICAgIHMxID0gcGVnJGM4NjtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM4Nyk7IH1cbiAgICB9XG4gICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA2KS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzg4KSB7XG4gICAgICAgIHMxID0gaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA2KTtcbiAgICAgICAgcGVnJGN1cnJQb3MgKz0gNjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzg5KTsgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gcGVnJHBhcnNlXygpO1xuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMzID0gcGVnJHBhcnNlRXhwcmVzc2lvbigpO1xuICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICBzMSA9IHBlZyRjOTAoczMpO1xuICAgICAgICAgIHMwID0gczE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgczEgPSBwZWckcGFyc2VBdG9tKCk7XG4gICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMzID0gcGVnJHBhcnNlVW5GdW5jdGlvbnMoKTtcbiAgICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgczEgPSBwZWckYzkxKHMxLCBzMyk7XG4gICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZVVuRnVuY3Rpb25zKCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMTtcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAxNztcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDUpLnRvTG93ZXJDYXNlKCkgPT09IHBlZyRjOTIpIHtcbiAgICAgIHMxID0gaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA1KTtcbiAgICAgIHBlZyRjdXJyUG9zICs9IDU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM5Myk7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgIHMxID0gcGVnJGM5NCgpO1xuICAgIH1cbiAgICBzMCA9IHMxO1xuICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDgpLnRvTG93ZXJDYXNlKCkgPT09IHBlZyRjOTUpIHtcbiAgICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDgpO1xuICAgICAgICBwZWckY3VyclBvcyArPSA4O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjOTYpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgIHMxID0gcGVnJGM5NygpO1xuICAgICAgfVxuICAgICAgczAgPSBzMTtcbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VBdG9tKCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMSwgczIsIHMzLCBzNDtcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAxODtcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIHMxID0gcGVnJHBhcnNlXygpO1xuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgOSkgPT09IHBlZyRjOTgpIHtcbiAgICAgICAgczIgPSBwZWckYzk4O1xuICAgICAgICBwZWckY3VyclBvcyArPSA5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjOTkpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczIgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNCkgPT09IHBlZyRjMTAwKSB7XG4gICAgICAgICAgczIgPSBwZWckYzEwMDtcbiAgICAgICAgICBwZWckY3VyclBvcyArPSA0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMyID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTAxKTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgIHMxID0gcGVnJGMxMDIoKTtcbiAgICAgICAgczAgPSBzMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgczEgPSBwZWckcGFyc2VfKCk7XG4gICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIgPSBwZWckcGFyc2VDb25zdFZhbHVlKCk7XG4gICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgIHMxID0gcGVnJGMxMDMoczIpO1xuICAgICAgICAgIHMwID0gczE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBzMSA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAxMjMpIHtcbiAgICAgICAgICAgIHMyID0gcGVnJGMxMDQ7XG4gICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzMiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTA1KTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHMzID0gcGVnJHBhcnNlVmFsdWVJbnB1dCgpO1xuICAgICAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMTI1KSB7XG4gICAgICAgICAgICAgICAgczQgPSBwZWckYzEwNjtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTA3KTsgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMxID0gcGVnJGMxMDgoczMpO1xuICAgICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VDb25zdFZhbHVlKCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMSwgczIsIHMzO1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDE5O1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckcGFyc2VMb2dpY1ZhbHVlKCk7XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgIHMxID0gcGVnJGMxMDkoczEpO1xuICAgIH1cbiAgICBzMCA9IHMxO1xuICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgIHMxID0gcGVnJHBhcnNlQXJpdGhtZXRpY1ZhbHVlKCk7XG4gICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgIHMxID0gcGVnJGMxMDkoczEpO1xuICAgICAgfVxuICAgICAgczAgPSBzMTtcbiAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBzMSA9IHBlZyRwYXJzZUxldHRlcnNBbmREaWdpdHMoKTtcbiAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgczEgPSBwZWckYzEwOShzMSk7XG4gICAgICAgIH1cbiAgICAgICAgczAgPSBzMTtcbiAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAyKSA9PT0gcGVnJGMxMTApIHtcbiAgICAgICAgICAgIHMxID0gcGVnJGMxMTA7XG4gICAgICAgICAgICBwZWckY3VyclBvcyArPSAyO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTExKTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgczEgPSBwZWckYzExMigpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDIpID09PSBwZWckYzExMykge1xuICAgICAgICAgICAgICBzMSA9IHBlZyRjMTEzO1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyArPSAyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTE0KTsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICBzMSA9IHBlZyRjMTEyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMzkpIHtcbiAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMTE1O1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMTYpOyB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczIgPSBwZWckcGFyc2VBbnlJbnB1dCgpO1xuICAgICAgICAgICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAzOSkge1xuICAgICAgICAgICAgICAgICAgICBzMyA9IHBlZyRjMTE1O1xuICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTE2KTsgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMTE3KHMyKTtcbiAgICAgICAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDM0KSB7XG4gICAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMTE4O1xuICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzExOSk7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICBzMiA9IHBlZyRwYXJzZUFueUlucHV0KCk7XG4gICAgICAgICAgICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAzNCkge1xuICAgICAgICAgICAgICAgICAgICAgIHMzID0gcGVnJGMxMTg7XG4gICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzExOSk7IH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMTE3KHMyKTtcbiAgICAgICAgICAgICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlQXJyYXlPcCgpOiBhbnkge1xuICAgIGxldCBzMCwgczEsIHMyLCBzMztcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAyMDtcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gOTEpIHtcbiAgICAgIHMxID0gcGVnJGMxMjA7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTIxKTsgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gcGVnJHBhcnNlU2VxdWVuY2UoKTtcbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDkzKSB7XG4gICAgICAgICAgczMgPSBwZWckYzEyMjtcbiAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTIzKTsgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgIHMxID0gcGVnJGMxMjQoczIpO1xuICAgICAgICAgIHMwID0gczE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VTZXF1ZW5jZSgpOiBBcnJheU9wZXJhbmQge1xuICAgIGxldCBzMCwgczEsIHMyLCBzMywgczQsIHM1LCBzNiwgczc7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMjE7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IHBlZyRwYXJzZUV4cHJlc3Npb24oKTtcbiAgICBpZiAoczEgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMxID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IFtdO1xuICAgICAgczMgPSBwZWckY3VyclBvcztcbiAgICAgIHM0ID0gcGVnJHBhcnNlXygpO1xuICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNDQpIHtcbiAgICAgICAgICBzNSA9IHBlZyRjMTI1O1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMjYpOyB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczYgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNyA9IHBlZyRwYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNCA9IFtzNCwgczUsIHM2LCBzN107XG4gICAgICAgICAgICAgIHMzID0gczQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgICB3aGlsZSAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIucHVzaChzMyk7XG4gICAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIHM0ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDQ0KSB7XG4gICAgICAgICAgICBzNSA9IHBlZyRjMTI1O1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzEyNik7IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNiA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNyA9IHBlZyRwYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczQgPSBbczQsIHM1LCBzNiwgczddO1xuICAgICAgICAgICAgICAgIHMzID0gczQ7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgczEgPSBwZWckYzEyNyhzMSwgczIpO1xuICAgICAgICBzMCA9IHMxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUxvZ2ljVmFsdWUoKTogYW55IHtcbiAgICBsZXQgczAsIHMxO1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDIyO1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNCkudG9Mb3dlckNhc2UoKSA9PT0gcGVnJGMxMjgpIHtcbiAgICAgIHMxID0gaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA0KTtcbiAgICAgIHBlZyRjdXJyUG9zICs9IDQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMjkpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICBzMSA9IHBlZyRjMTMwKCk7XG4gICAgfVxuICAgIHMwID0gczE7XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNSkudG9Mb3dlckNhc2UoKSA9PT0gcGVnJGMxMzEpIHtcbiAgICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDUpO1xuICAgICAgICBwZWckY3VyclBvcyArPSA1O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTMyKTsgfVxuICAgICAgfVxuICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICBzMSA9IHBlZyRjMTMzKCk7XG4gICAgICB9XG4gICAgICBzMCA9IHMxO1xuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUFyaXRobWV0aWNWYWx1ZSgpOiBhbnkge1xuICAgIGxldCBzMCwgczEsIHMyO1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDIzO1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMikgPT09IHBlZyRjMTM0KSB7XG4gICAgICBzMSA9IHBlZyRjMTM0O1xuICAgICAgcGVnJGN1cnJQb3MgKz0gMjtcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzEzNSk7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IHBlZyRwYXJzZURpZ2l0cygpO1xuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICBzMSA9IHBlZyRjMTM2KCk7XG4gICAgICAgIHMwID0gczE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgIGlmIChwZWckYzEzNy50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzEzOCk7IH1cbiAgICAgIH1cbiAgICAgIGlmIChzMSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMSA9IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIgPSBwZWckcGFyc2VOdW1iZXIoKTtcbiAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgczEgPSBwZWckYzEzOShzMSwgczIpO1xuICAgICAgICAgIHMwID0gczE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VOdW1iZXIoKTogYW55IHtcbiAgICBsZXQgczAsIHMxLCBzMiwgczM7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMjQ7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IHBlZyRwYXJzZURpZ2l0cygpO1xuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0Nikge1xuICAgICAgICBzMiA9IHBlZyRjMTQwO1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTQxKTsgfVxuICAgICAgfVxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMzID0gcGVnJHBhcnNlRGlnaXRzKCk7XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgIHMxID0gcGVnJGMxNDIoKTtcbiAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgIHMxID0gcGVnJHBhcnNlTm9uWmVyb0RpZ2l0cygpO1xuICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyID0gcGVnJHBhcnNlRGlnaXRzKCk7XG4gICAgICAgIGlmIChzMiA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMyID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICBzMSA9IHBlZyRjMTQzKCk7XG4gICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNDgpIHtcbiAgICAgICAgICBzMSA9IHBlZyRjMTQ0O1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNDUpOyB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgczEgPSBwZWckYzE0NigpO1xuICAgICAgICB9XG4gICAgICAgIHMwID0gczE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlVmFsdWVJbnB1dCgpOiBhbnkge1xuICAgIGxldCBzMCwgczEsIHMyO1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDI1O1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBbXTtcbiAgICBzMiA9IHBlZyRwYXJzZVZhbHVlQ2hhcmFjdGVycygpO1xuICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgd2hpbGUgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMxLnB1c2goczIpO1xuICAgICAgICBzMiA9IHBlZyRwYXJzZVZhbHVlQ2hhcmFjdGVycygpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICBzMSA9IHBlZyRjMTQ3KHMxKTtcbiAgICB9XG4gICAgczAgPSBzMTtcblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUFueUlucHV0KCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMSwgczI7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMjY7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IFtdO1xuICAgIHMyID0gcGVnJHBhcnNlQW55Q2hhcmFjdGVycygpO1xuICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgd2hpbGUgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMxLnB1c2goczIpO1xuICAgICAgICBzMiA9IHBlZyRwYXJzZUFueUNoYXJhY3RlcnMoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgczEgPSBwZWckYzE0NyhzMSk7XG4gICAgfVxuICAgIHMwID0gczE7XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VBbnlDaGFyYWN0ZXJzKCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMTtcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAyNztcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDIpID09PSBwZWckYzE0OCkge1xuICAgICAgczEgPSBwZWckYzE0ODtcbiAgICAgIHBlZyRjdXJyUG9zICs9IDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNDkpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICBzMSA9IHBlZyRjMTUwKCk7XG4gICAgfVxuICAgIHMwID0gczE7XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMikgPT09IHBlZyRjMTUxKSB7XG4gICAgICAgIHMxID0gcGVnJGMxNTE7XG4gICAgICAgIHBlZyRjdXJyUG9zICs9IDI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNTIpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgIHMxID0gcGVnJGMxNTMoKTtcbiAgICAgIH1cbiAgICAgIHMwID0gczE7XG4gICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgICAgaWYgKHBlZyRjMTU0LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICBzMSA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE1NSk7IH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICBzMSA9IHBlZyRjMTU2KCk7XG4gICAgICAgIH1cbiAgICAgICAgczAgPSBzMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VWYWx1ZUNoYXJhY3RlcnMoKTogYW55IHtcbiAgICBsZXQgczAsIHMxO1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDI4O1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKHBlZyRjMTU3LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNTgpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICBzMSA9IHBlZyRjMTU2KCk7XG4gICAgfVxuICAgIHMwID0gczE7XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VMZXR0ZXJzQW5kRGlnaXRzKCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMSwgczIsIHMzLCBzNCwgczUsIHM2O1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDI5O1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckcGFyc2VMZXR0ZXJzKCk7XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IFtdO1xuICAgICAgczMgPSBwZWckY3VyclBvcztcbiAgICAgIHM0ID0gcGVnJHBhcnNlRGlnaXRzKCk7XG4gICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczUgPSBbXTtcbiAgICAgICAgczYgPSBwZWckcGFyc2VMZXR0ZXJzKCk7XG4gICAgICAgIHdoaWxlIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM1LnB1c2goczYpO1xuICAgICAgICAgIHM2ID0gcGVnJHBhcnNlTGV0dGVycygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM0ID0gW3M0LCBzNV07XG4gICAgICAgICAgczMgPSBzNDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgICAgd2hpbGUgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyLnB1c2goczMpO1xuICAgICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBzNCA9IHBlZyRwYXJzZURpZ2l0cygpO1xuICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNSA9IFtdO1xuICAgICAgICAgIHM2ID0gcGVnJHBhcnNlTGV0dGVycygpO1xuICAgICAgICAgIHdoaWxlIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczUucHVzaChzNik7XG4gICAgICAgICAgICBzNiA9IHBlZyRwYXJzZUxldHRlcnMoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNCA9IFtzNCwgczVdO1xuICAgICAgICAgICAgczMgPSBzNDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgczEgPSBwZWckYzE1NigpO1xuICAgICAgICBzMCA9IHMxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZURpZ2l0cygpOiBhbnkge1xuICAgIGxldCBzMCwgczE7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMzA7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBbXTtcbiAgICBpZiAocGVnJGMxNTkudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgczEgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE2MCk7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICB3aGlsZSAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczAucHVzaChzMSk7XG4gICAgICAgIGlmIChwZWckYzE1OS50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgczEgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNjApOyB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZU5vblplcm9EaWdpdHMoKTogYW55IHtcbiAgICBsZXQgczAsIHMxO1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDMxO1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gW107XG4gICAgaWYgKHBlZyRjMTYxLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNjIpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgd2hpbGUgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMwLnB1c2goczEpO1xuICAgICAgICBpZiAocGVnJGMxNjEudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTYyKTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VMZXR0ZXJzKCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMTtcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAzMjtcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IFtdO1xuICAgIGlmIChwZWckYzE2My50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICBzMSA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTY0KTsgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHdoaWxlIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMC5wdXNoKHMxKTtcbiAgICAgICAgaWYgKHBlZyRjMTYzLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICBzMSA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE2NCk7IH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlXygpOiBhbnkge1xuICAgIGxldCBzMCwgczE7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMzM7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgcGVnJHNpbGVudEZhaWxzKys7XG4gICAgczAgPSBbXTtcbiAgICBpZiAocGVnJGMxNjYudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgczEgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE2Nyk7IH1cbiAgICB9XG4gICAgd2hpbGUgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMC5wdXNoKHMxKTtcbiAgICAgIGlmIChwZWckYzE2Ni50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE2Nyk7IH1cbiAgICAgIH1cbiAgICB9XG4gICAgcGVnJHNpbGVudEZhaWxzLS07XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTY1KTsgfVxuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZEJpbmFyeU9wZXJhbmQoaGVhZDogT3BlcmFuZCwgdGFpbDogQXJyYXk8YW55PiwgaXNBcml0aG1ldGljT3A6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgICAgcmV0dXJuIHRhaWwucmVkdWNlKFxuICAgICAgICBmdW5jdGlvbihyZXN1bHQsIGVsZW1lbnRzKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBCaW5hcnlPcGVyYW5kKGVsZW1lbnRzWzFdLCByZXN1bHQsIGVsZW1lbnRzWzNdLCBpc0FyaXRobWV0aWNPcCk7XG4gICAgICAgIH0sIFxuICAgICAgICBoZWFkKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmbGF0dGVuQXJyYXkoYXJyYXk6IEFycmF5PGFueT4pOiBBcnJheTxhbnk+IHtcbiAgICAgIHJldHVybiBbXS5jb25jYXQuYXBwbHkoW10sIGFycmF5KTtcbiAgICB9XG5cblxuICBwZWckcmVzdWx0ID0gcGVnJHN0YXJ0UnVsZUZ1bmN0aW9uKCk7XG5cbiAgaWYgKHBlZyRyZXN1bHQgIT09IHBlZyRGQUlMRUQgJiYgcGVnJGN1cnJQb3MgPT09IGlucHV0Lmxlbmd0aCkge1xuICAgIHJldHVybiBwZWckcmVzdWx0O1xuICB9IGVsc2Uge1xuICAgIGlmIChwZWckcmVzdWx0ICE9PSBwZWckRkFJTEVEICYmIHBlZyRjdXJyUG9zIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICBwZWckZmFpbChwZWckZW5kRXhwZWN0YXRpb24oKSk7XG4gICAgfVxuXG4gICAgdGhyb3cgcGVnJGJ1aWxkU3RydWN0dXJlZEVycm9yKFxuICAgICAgcGVnJG1heEZhaWxFeHBlY3RlZCxcbiAgICAgIHBlZyRtYXhGYWlsUG9zIDwgaW5wdXQubGVuZ3RoID8gaW5wdXQuY2hhckF0KHBlZyRtYXhGYWlsUG9zKSA6IG51bGwsXG4gICAgICBwZWckbWF4RmFpbFBvcyA8IGlucHV0Lmxlbmd0aFxuICAgICAgICA/IHBlZyRjb21wdXRlTG9jYXRpb24ocGVnJG1heEZhaWxQb3MsIHBlZyRtYXhGYWlsUG9zICsgMSlcbiAgICAgICAgOiBwZWckY29tcHV0ZUxvY2F0aW9uKHBlZyRtYXhGYWlsUG9zLCBwZWckbWF4RmFpbFBvcylcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBhcnNlT3B0aW9ucyB7XG4gIGZpbGVuYW1lPzogc3RyaW5nO1xuICBzdGFydFJ1bGU/OiBzdHJpbmc7XG4gIHRyYWNlcj86IGFueTtcbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuZXhwb3J0IHR5cGUgUGFyc2VGdW5jdGlvbiA9IChpbnB1dDogc3RyaW5nLCBvcHRpb25zPzogSVBhcnNlT3B0aW9ucykgPT4gYW55O1xuZXhwb3J0IGNvbnN0IHBhcnNlOiBQYXJzZUZ1bmN0aW9uID0gcGVnJHBhcnNlO1xuXG4iLCJpbXBvcnQgeyBIYXNoVGFibGUsIEhlbHBlcnMgfSBmcm9tIFwiLi4vaGVscGVyc1wiO1xuaW1wb3J0IHsgRnVuY3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4uL2Z1bmN0aW9uc2ZhY3RvcnlcIjtcbmltcG9ydCB7IFByb2Nlc3NWYWx1ZSB9IGZyb20gXCIuLi9jb25kaXRpb25Qcm9jZXNzVmFsdWVcIjtcbmltcG9ydCB7IGVxdWFsIH0gZnJvbSBcImFzc2VydFwiO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgT3BlcmFuZCB7XG4gIHB1YmxpYyB0b1N0cmluZyhmdW5jOiAob3A6IE9wZXJhbmQpID0+IHN0cmluZyA9IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbiAgcHVibGljIGFic3RyYWN0IGdldFR5cGUoKTogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgZXZhbHVhdGUocHJvY2Vzc1ZhbHVlPzogUHJvY2Vzc1ZhbHVlKTogYW55O1xuICBwdWJsaWMgYWJzdHJhY3Qgc2V0VmFyaWFibGVzKHZhcmlhYmxlczogQXJyYXk8c3RyaW5nPik6IGFueTtcbiAgcHVibGljIGhhc0Z1bmN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgaGFzQXN5bmNGdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGFkZFRvQXN5bmNMaXN0KGxpc3Q6IEFycmF5PEZ1bmN0aW9uT3BlcmFuZD4pOiB2b2lkIHt9XG59XG5cbmV4cG9ydCBjbGFzcyBCaW5hcnlPcGVyYW5kIGV4dGVuZHMgT3BlcmFuZCB7XG4gIHByaXZhdGUgY29uc3VtZXI6IEZ1bmN0aW9uO1xuICBwcml2YXRlIGlzQXJpdGhtZXRpY1ZhbHVlOiBib29sZWFuO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG9wZXJhdG9yTmFtZTogc3RyaW5nLFxuICAgIHByaXZhdGUgbGVmdDogYW55ID0gbnVsbCxcbiAgICBwcml2YXRlIHJpZ2h0OiBhbnkgPSBudWxsLFxuICAgIGlzQXJpdGhtZXRpY09wOiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmlzQXJpdGhtZXRpY1ZhbHVlID0gaXNBcml0aG1ldGljT3A7XG4gICAgaWYgKGlzQXJpdGhtZXRpY09wKSB7XG4gICAgICB0aGlzLmNvbnN1bWVyID0gT3BlcmFuZE1ha2VyLmJpbmFyeUZ1bmN0aW9uc1tcImFyaXRobWV0aWNPcFwiXShcbiAgICAgICAgb3BlcmF0b3JOYW1lXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbnN1bWVyID0gT3BlcmFuZE1ha2VyLmJpbmFyeUZ1bmN0aW9uc1tvcGVyYXRvck5hbWVdO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbnN1bWVyID09IG51bGwpIHtcbiAgICAgIE9wZXJhbmRNYWtlci50aHJvd0ludmFsaWRPcGVyYXRvckVycm9yKG9wZXJhdG9yTmFtZSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiYmluYXJ5XCI7XG4gIH1cbiAgcHVibGljIGdldCBpc0FyaXRobWV0aWMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNBcml0aG1ldGljVmFsdWU7XG4gIH1cbiAgcHVibGljIGdldCBpc0Nvbmp1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLm9wZXJhdG9yTmFtZSA9PSBcIm9yXCIgfHwgdGhpcy5vcGVyYXRvck5hbWUgPT0gXCJhbmRcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGNvbmp1bmN0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaXNDb25qdW5jdGlvbiA/IHRoaXMub3BlcmF0b3JOYW1lIDogXCJcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IG9wZXJhdG9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMub3BlcmF0b3JOYW1lO1xuICB9XG4gIHB1YmxpYyBnZXQgbGVmdE9wZXJhbmQoKSB7XG4gICAgcmV0dXJuIHRoaXMubGVmdDtcbiAgfVxuICBwdWJsaWMgZ2V0IHJpZ2h0T3BlcmFuZCgpIHtcbiAgICByZXR1cm4gdGhpcy5yaWdodDtcbiAgfVxuXG4gIHByaXZhdGUgZXZhbHVhdGVQYXJhbSh4OiBhbnksIHByb2Nlc3NWYWx1ZT86IFByb2Nlc3NWYWx1ZSk6IGFueSB7XG4gICAgcmV0dXJuIHggPT0gbnVsbCA/IG51bGwgOiB4LmV2YWx1YXRlKHByb2Nlc3NWYWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgZXZhbHVhdGUocHJvY2Vzc1ZhbHVlPzogUHJvY2Vzc1ZhbHVlKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5jb25zdW1lci5jYWxsKFxuICAgICAgdGhpcyxcbiAgICAgIHRoaXMuZXZhbHVhdGVQYXJhbSh0aGlzLmxlZnQsIHByb2Nlc3NWYWx1ZSksXG4gICAgICB0aGlzLmV2YWx1YXRlUGFyYW0odGhpcy5yaWdodCwgcHJvY2Vzc1ZhbHVlKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgdG9TdHJpbmcoZnVuYzogKG9wOiBPcGVyYW5kKSA9PiBzdHJpbmcgPSB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgIGlmICghIWZ1bmMpIHtcbiAgICAgIHZhciByZXMgPSBmdW5jKHRoaXMpO1xuICAgICAgaWYgKCEhcmVzKSByZXR1cm4gcmVzO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgXCIoXCIgK1xuICAgICAgT3BlcmFuZE1ha2VyLnNhZmVUb1N0cmluZyh0aGlzLmxlZnQsIGZ1bmMpICtcbiAgICAgIFwiIFwiICtcbiAgICAgIE9wZXJhbmRNYWtlci5vcGVyYXRvclRvU3RyaW5nKHRoaXMub3BlcmF0b3JOYW1lKSArXG4gICAgICBcIiBcIiArXG4gICAgICBPcGVyYW5kTWFrZXIuc2FmZVRvU3RyaW5nKHRoaXMucmlnaHQsIGZ1bmMpICtcbiAgICAgIFwiKVwiXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRWYXJpYWJsZXModmFyaWFibGVzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgaWYgKHRoaXMubGVmdCAhPSBudWxsKSB0aGlzLmxlZnQuc2V0VmFyaWFibGVzKHZhcmlhYmxlcyk7XG4gICAgaWYgKHRoaXMucmlnaHQgIT0gbnVsbCkgdGhpcy5yaWdodC5zZXRWYXJpYWJsZXModmFyaWFibGVzKTtcbiAgfVxuXG4gIHB1YmxpYyBoYXNGdW5jdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgKCEhdGhpcy5sZWZ0ICYmIHRoaXMubGVmdC5oYXNGdW5jdGlvbigpKSB8fFxuICAgICAgKCEhdGhpcy5yaWdodCAmJiB0aGlzLnJpZ2h0Lmhhc0Z1bmN0aW9uKCkpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgaGFzQXN5bmNGdW5jdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgKCEhdGhpcy5sZWZ0ICYmIHRoaXMubGVmdC5oYXNBc3luY0Z1bmN0aW9uKCkpIHx8XG4gICAgICAoISF0aGlzLnJpZ2h0ICYmIHRoaXMucmlnaHQuaGFzQXN5bmNGdW5jdGlvbigpKVxuICAgICk7XG4gIH1cbiAgcHVibGljIGFkZFRvQXN5bmNMaXN0KGxpc3Q6IEFycmF5PEZ1bmN0aW9uT3BlcmFuZD4pIHtcbiAgICBpZiAoISF0aGlzLmxlZnQpIHRoaXMubGVmdC5hZGRUb0FzeW5jTGlzdChsaXN0KTtcbiAgICBpZiAoISF0aGlzLnJpZ2h0KSB0aGlzLnJpZ2h0LmFkZFRvQXN5bmNMaXN0KGxpc3QpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbmFyeU9wZXJhbmQgZXh0ZW5kcyBPcGVyYW5kIHtcbiAgcHJpdmF0ZSBjb25zdW1lcjogRnVuY3Rpb247XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZXhwcmVzc2lvblZhbHVlOiBPcGVyYW5kLCBwcml2YXRlIG9wZXJhdG9yTmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmNvbnN1bWVyID0gT3BlcmFuZE1ha2VyLnVuYXJ5RnVuY3Rpb25zW29wZXJhdG9yTmFtZV07XG4gICAgaWYgKHRoaXMuY29uc3VtZXIgPT0gbnVsbCkge1xuICAgICAgT3BlcmFuZE1ha2VyLnRocm93SW52YWxpZE9wZXJhdG9yRXJyb3Iob3BlcmF0b3JOYW1lKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCBvcGVyYXRvcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm9wZXJhdG9yTmFtZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGV4cHJlc3Npb24oKTogT3BlcmFuZCB7XG4gICAgcmV0dXJuIHRoaXMuZXhwcmVzc2lvblZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwidW5hcnlcIjtcbiAgfVxuICBwdWJsaWMgdG9TdHJpbmcoZnVuYzogKG9wOiBPcGVyYW5kKSA9PiBzdHJpbmcgPSB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgIGlmICghIWZ1bmMpIHtcbiAgICAgIHZhciByZXMgPSBmdW5jKHRoaXMpO1xuICAgICAgaWYgKCEhcmVzKSByZXR1cm4gcmVzO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgT3BlcmFuZE1ha2VyLm9wZXJhdG9yVG9TdHJpbmcodGhpcy5vcGVyYXRvck5hbWUpICtcbiAgICAgIFwiIFwiICtcbiAgICAgIHRoaXMuZXhwcmVzc2lvbi50b1N0cmluZyhmdW5jKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZXZhbHVhdGUocHJvY2Vzc1ZhbHVlPzogUHJvY2Vzc1ZhbHVlKTogYm9vbGVhbiB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKHByb2Nlc3NWYWx1ZSk7XG4gICAgcmV0dXJuIHRoaXMuY29uc3VtZXIuY2FsbCh0aGlzLCB2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0VmFyaWFibGVzKHZhcmlhYmxlczogQXJyYXk8c3RyaW5nPikge1xuICAgIHRoaXMuZXhwcmVzc2lvbi5zZXRWYXJpYWJsZXModmFyaWFibGVzKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXJyYXlPcGVyYW5kIGV4dGVuZHMgT3BlcmFuZCB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB2YWx1ZXM6IEFycmF5PE9wZXJhbmQ+KSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImFycmF5XCI7XG4gIH1cbiAgcHVibGljIHRvU3RyaW5nKGZ1bmM6IChvcDogT3BlcmFuZCkgPT4gc3RyaW5nID0gdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICBpZiAoISFmdW5jKSB7XG4gICAgICB2YXIgcmVzID0gZnVuYyh0aGlzKTtcbiAgICAgIGlmICghIXJlcykgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIFwiW1wiICtcbiAgICAgIHRoaXMudmFsdWVzXG4gICAgICAgIC5tYXAoZnVuY3Rpb24oZWw6IE9wZXJhbmQpIHtcbiAgICAgICAgICByZXR1cm4gZWwudG9TdHJpbmcoZnVuYyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKFwiLCBcIikgK1xuICAgICAgXCJdXCJcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGV2YWx1YXRlKHByb2Nlc3NWYWx1ZT86IFByb2Nlc3NWYWx1ZSk6IEFycmF5PGFueT4ge1xuICAgIHJldHVybiB0aGlzLnZhbHVlcy5tYXAoZnVuY3Rpb24oZWw6IE9wZXJhbmQpIHtcbiAgICAgIHJldHVybiBlbC5ldmFsdWF0ZShwcm9jZXNzVmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNldFZhcmlhYmxlcyh2YXJpYWJsZXM6IEFycmF5PHN0cmluZz4pIHtcbiAgICB0aGlzLnZhbHVlcy5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgZWwuc2V0VmFyaWFibGVzKHZhcmlhYmxlcyk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgaGFzRnVuY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVzLnNvbWUoKG9wZXJhbmQpID0+IG9wZXJhbmQuaGFzRnVuY3Rpb24oKSk7XG4gIH1cbiAgcHVibGljIGhhc0FzeW5jRnVuY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVzLnNvbWUoKG9wZXJhbmQpID0+IG9wZXJhbmQuaGFzQXN5bmNGdW5jdGlvbigpKTtcbiAgfVxuICBwdWJsaWMgYWRkVG9Bc3luY0xpc3QobGlzdDogQXJyYXk8RnVuY3Rpb25PcGVyYW5kPikge1xuICAgIHRoaXMudmFsdWVzLmZvckVhY2goKG9wZXJhbmQpID0+IG9wZXJhbmQuYWRkVG9Bc3luY0xpc3QobGlzdCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb25zdCBleHRlbmRzIE9wZXJhbmQge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHZhbHVlOiBhbnkpIHtcbiAgICBzdXBlcigpO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiY29uc3RcIjtcbiAgfVxuICBwdWJsaWMgdG9TdHJpbmcoZnVuYzogKG9wOiBPcGVyYW5kKSA9PiBzdHJpbmcgPSB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgIGlmICghIWZ1bmMpIHtcbiAgICAgIHZhciByZXMgPSBmdW5jKHRoaXMpO1xuICAgICAgaWYgKCEhcmVzKSByZXR1cm4gcmVzO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy52YWx1ZS50b1N0cmluZygpO1xuICB9XG4gIHB1YmxpYyBnZXQgY29ycmVjdFZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q29ycmVjdFZhbHVlKHRoaXMudmFsdWUpO1xuICB9XG5cbiAgcHVibGljIGV2YWx1YXRlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q29ycmVjdFZhbHVlKHRoaXMudmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHNldFZhcmlhYmxlcyh2YXJpYWJsZXM6IEFycmF5PHN0cmluZz4pIHt9XG4gIHByb3RlY3RlZCBnZXRDb3JyZWN0VmFsdWUodmFsdWU6IGFueSk6IGFueSB7XG4gICAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT0gXCJzdHJpbmdcIikgcmV0dXJuIHZhbHVlO1xuICAgIGlmICh0aGlzLmlzQm9vbGVhblZhbHVlKHZhbHVlKSkgcmV0dXJuIHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09IFwidHJ1ZVwiO1xuICAgIGlmIChcbiAgICAgIHZhbHVlLmxlbmd0aCA+IDEgJiZcbiAgICAgIHRoaXMuaXNRdW90ZSh2YWx1ZVswXSkgJiZcbiAgICAgIHRoaXMuaXNRdW90ZSh2YWx1ZVt2YWx1ZS5sZW5ndGggLSAxXSlcbiAgICApXG4gICAgICByZXR1cm4gdmFsdWUuc3Vic3RyKDEsIHZhbHVlLmxlbmd0aCAtIDIpO1xuICAgIGlmIChPcGVyYW5kTWFrZXIuaXNOdW1lcmljKHZhbHVlKSkge1xuICAgICAgaWYgKHZhbHVlLmluZGV4T2YoXCIweFwiKSA9PSAwKSByZXR1cm4gcGFyc2VJbnQodmFsdWUpO1xuICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDEgJiYgdmFsdWVbMF0gPT0gXCIwXCIpIHJldHVybiB2YWx1ZTtcbiAgICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHByaXZhdGUgaXNRdW90ZShjaDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNoID09IFwiJ1wiIHx8IGNoID09ICdcIic7XG4gIH1cbiAgcHJpdmF0ZSBpc0Jvb2xlYW5WYWx1ZSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHZhbHVlICYmXG4gICAgICAodmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0cnVlXCIgfHwgdmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gXCJmYWxzZVwiKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFZhcmlhYmxlIGV4dGVuZHMgQ29uc3Qge1xuICBzdGF0aWMgRGlzYWJsZUNvbnZlcnNpb25DaGFyID0gXCIjXCI7XG4gIHByaXZhdGUgdmFsdWVJbmZvOiBhbnkgPSB7fTtcbiAgcHJpdmF0ZSB1c2VWYWx1ZUFzSXRJczogYm9vbGVhbiA9IGZhbHNlO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHZhcmlhYmxlTmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIodmFyaWFibGVOYW1lKTtcbiAgICBpZiAoXG4gICAgICAhIXRoaXMudmFyaWFibGVOYW1lICYmXG4gICAgICB0aGlzLnZhcmlhYmxlTmFtZS5sZW5ndGggPiAxICYmXG4gICAgICB0aGlzLnZhcmlhYmxlTmFtZVswXSA9PT0gVmFyaWFibGUuRGlzYWJsZUNvbnZlcnNpb25DaGFyXG4gICAgKSB7XG4gICAgICB0aGlzLnZhcmlhYmxlTmFtZSA9IHRoaXMudmFyaWFibGVOYW1lLnN1YnN0cigxKTtcbiAgICAgIHRoaXMudXNlVmFsdWVBc0l0SXMgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInZhcmlhYmxlXCI7XG4gIH1cbiAgcHVibGljIHRvU3RyaW5nKGZ1bmM6IChvcDogT3BlcmFuZCkgPT4gc3RyaW5nID0gdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICBpZiAoISFmdW5jKSB7XG4gICAgICB2YXIgcmVzID0gZnVuYyh0aGlzKTtcbiAgICAgIGlmICghIXJlcykgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgdmFyIHByZWZpeCA9IHRoaXMudXNlVmFsdWVBc0l0SXMgPyBWYXJpYWJsZS5EaXNhYmxlQ29udmVyc2lvbkNoYXIgOiBcIlwiO1xuICAgIHJldHVybiBcIntcIiArIHByZWZpeCArIHRoaXMudmFyaWFibGVOYW1lICsgXCJ9XCI7XG4gIH1cbiAgcHVibGljIGdldCB2YXJpYWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy52YXJpYWJsZU5hbWU7XG4gIH1cbiAgcHVibGljIGV2YWx1YXRlKHByb2Nlc3NWYWx1ZT86IFByb2Nlc3NWYWx1ZSk6IGFueSB7XG4gICAgdGhpcy52YWx1ZUluZm8ubmFtZSA9IHRoaXMudmFyaWFibGVOYW1lO1xuICAgIHByb2Nlc3NWYWx1ZS5nZXRWYWx1ZUluZm8odGhpcy52YWx1ZUluZm8pO1xuICAgIHJldHVybiB0aGlzLnZhbHVlSW5mby5oYXNWYWx1ZVxuICAgICAgPyB0aGlzLmdldENvcnJlY3RWYWx1ZSh0aGlzLnZhbHVlSW5mby52YWx1ZSlcbiAgICAgIDogbnVsbDtcbiAgfVxuICBwdWJsaWMgc2V0VmFyaWFibGVzKHZhcmlhYmxlczogQXJyYXk8c3RyaW5nPikge1xuICAgIHZhcmlhYmxlcy5wdXNoKHRoaXMudmFyaWFibGVOYW1lKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q29ycmVjdFZhbHVlKHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGlmICh0aGlzLnVzZVZhbHVlQXNJdElzKSByZXR1cm4gdmFsdWU7XG4gICAgcmV0dXJuIHN1cGVyLmdldENvcnJlY3RWYWx1ZSh2YWx1ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEZ1bmN0aW9uT3BlcmFuZCBleHRlbmRzIE9wZXJhbmQge1xuICBwcml2YXRlIGlzUmVhZHlWYWx1ZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBhc3luUmVzdWx0OiBhbnk7XG4gIHB1YmxpYyBvbkFzeW5jUmVhZHk6ICgpID0+IHZvaWQ7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgb3JpZ2luYWxWYWx1ZTogc3RyaW5nLCBwcml2YXRlIHBhcmFtZXRlcnM6IEFycmF5T3BlcmFuZCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5pc1JlYWR5VmFsdWUgPSBmYWxzZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJhbWV0ZXJzKSAmJiBwYXJhbWV0ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5wYXJhbWV0ZXJzID0gbmV3IEFycmF5T3BlcmFuZChbXSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiZnVuY3Rpb25cIjtcbiAgfVxuICBwdWJsaWMgZXZhbHVhdGVBc3luYyhwcm9jZXNzVmFsdWU6IFByb2Nlc3NWYWx1ZSkge1xuICAgIHRoaXMuaXNSZWFkeVZhbHVlID0gZmFsc2U7XG4gICAgdmFyIGFzeW5jUHJvY2Vzc1ZhbHVlID0gbmV3IFByb2Nlc3NWYWx1ZSgpO1xuICAgIGFzeW5jUHJvY2Vzc1ZhbHVlLnZhbHVlcyA9IEhlbHBlcnMuY3JlYXRlQ29weShwcm9jZXNzVmFsdWUudmFsdWVzKTtcbiAgICBhc3luY1Byb2Nlc3NWYWx1ZS5wcm9wZXJ0aWVzID0gSGVscGVycy5jcmVhdGVDb3B5KHByb2Nlc3NWYWx1ZS5wcm9wZXJ0aWVzKTtcbiAgICBhc3luY1Byb2Nlc3NWYWx1ZS5wcm9wZXJ0aWVzLnJldHVyblJlc3VsdCA9IChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgdGhpcy5hc3luUmVzdWx0ID0gcmVzdWx0O1xuICAgICAgdGhpcy5pc1JlYWR5VmFsdWUgPSB0cnVlO1xuICAgICAgdGhpcy5vbkFzeW5jUmVhZHkoKTtcbiAgICB9O1xuICAgIHRoaXMuZXZhbHVhdGVDb3JlKGFzeW5jUHJvY2Vzc1ZhbHVlKTtcbiAgfVxuICBwdWJsaWMgZXZhbHVhdGUocHJvY2Vzc1ZhbHVlPzogUHJvY2Vzc1ZhbHVlKTogYW55IHtcbiAgICBpZiAodGhpcy5pc1JlYWR5KSByZXR1cm4gdGhpcy5hc3luUmVzdWx0O1xuICAgIHJldHVybiB0aGlzLmV2YWx1YXRlQ29yZShwcm9jZXNzVmFsdWUpO1xuICB9XG4gIHByaXZhdGUgZXZhbHVhdGVDb3JlKHByb2Nlc3NWYWx1ZT86IFByb2Nlc3NWYWx1ZSk6IGFueSB7XG4gICAgcmV0dXJuIEZ1bmN0aW9uRmFjdG9yeS5JbnN0YW5jZS5ydW4oXG4gICAgICB0aGlzLm9yaWdpbmFsVmFsdWUsXG4gICAgICB0aGlzLnBhcmFtZXRlcnMuZXZhbHVhdGUocHJvY2Vzc1ZhbHVlKSxcbiAgICAgIHByb2Nlc3NWYWx1ZS5wcm9wZXJ0aWVzXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyB0b1N0cmluZyhmdW5jOiAob3A6IE9wZXJhbmQpID0+IHN0cmluZyA9IHVuZGVmaW5lZCkge1xuICAgIGlmICghIWZ1bmMpIHtcbiAgICAgIHZhciByZXMgPSBmdW5jKHRoaXMpO1xuICAgICAgaWYgKCEhcmVzKSByZXR1cm4gcmVzO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFZhbHVlICsgXCIoXCIgKyB0aGlzLnBhcmFtZXRlcnMudG9TdHJpbmcoZnVuYykgKyBcIilcIjtcbiAgfVxuXG4gIHB1YmxpYyBzZXRWYXJpYWJsZXModmFyaWFibGVzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgdGhpcy5wYXJhbWV0ZXJzLnNldFZhcmlhYmxlcyh2YXJpYWJsZXMpO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNSZWFkeSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1JlYWR5VmFsdWU7XG4gIH1cbiAgcHVibGljIGhhc0Z1bmN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHB1YmxpYyBoYXNBc3luY0Z1bmN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBGdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UuaXNBc3luY0Z1bmN0aW9uKHRoaXMub3JpZ2luYWxWYWx1ZSk7XG4gIH1cbiAgcHVibGljIGFkZFRvQXN5bmNMaXN0KGxpc3Q6IEFycmF5PEZ1bmN0aW9uT3BlcmFuZD4pIHtcbiAgICBpZiAodGhpcy5oYXNBc3luY0Z1bmN0aW9uKCkpIHtcbiAgICAgIGxpc3QucHVzaCh0aGlzKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE9wZXJhbmRNYWtlciB7XG4gIHN0YXRpYyB0aHJvd0ludmFsaWRPcGVyYXRvckVycm9yKG9wOiBzdHJpbmcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIG9wZXJhdG9yOiAnXCIgKyBvcCArIFwiJ1wiKTtcbiAgfVxuXG4gIHN0YXRpYyBzYWZlVG9TdHJpbmcob3BlcmFuZDogT3BlcmFuZCwgZnVuYzogKG9wOiBPcGVyYW5kKSA9PiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBvcGVyYW5kID09IG51bGwgPyBcIlwiIDogb3BlcmFuZC50b1N0cmluZyhmdW5jKTtcbiAgfVxuXG4gIHN0YXRpYyB0b09wZXJhbmRTdHJpbmcodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKFxuICAgICAgISF2YWx1ZSAmJlxuICAgICAgIU9wZXJhbmRNYWtlci5pc051bWVyaWModmFsdWUpICYmXG4gICAgICAhT3BlcmFuZE1ha2VyLmlzQm9vbGVhblZhbHVlKHZhbHVlKVxuICAgIClcbiAgICAgIHZhbHVlID0gXCInXCIgKyB2YWx1ZSArIFwiJ1wiO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHN0YXRpYyBpc1NwYWNlU3RyaW5nKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhc3RyICYmICFzdHIucmVwbGFjZShcIiBcIiwgXCJcIik7XG4gIH1cblxuICBzdGF0aWMgaXNOdW1lcmljKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoXG4gICAgICAhIXZhbHVlICYmXG4gICAgICAodmFsdWUuaW5kZXhPZihcIi1cIikgPiAtMSB8fFxuICAgICAgICB2YWx1ZS5pbmRleE9mKFwiK1wiKSA+IDEgfHxcbiAgICAgICAgdmFsdWUuaW5kZXhPZihcIipcIikgPiAtMSB8fFxuICAgICAgICB2YWx1ZS5pbmRleE9mKFwiXlwiKSA+IC0xIHx8XG4gICAgICAgIHZhbHVlLmluZGV4T2YoXCIvXCIpID4gLTEgfHxcbiAgICAgICAgdmFsdWUuaW5kZXhPZihcIiVcIikgPiAtMSlcbiAgICApXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgaWYgKE9wZXJhbmRNYWtlci5pc1NwYWNlU3RyaW5nKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBIZWxwZXJzLmlzTnVtYmVyKHZhbHVlKTtcbiAgfVxuXG4gIHN0YXRpYyBpc0Jvb2xlYW5WYWx1ZSh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICEhdmFsdWUgJiZcbiAgICAgICh2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSBcInRydWVcIiB8fCB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSBcImZhbHNlXCIpXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyB1bmFyeUZ1bmN0aW9uczogSGFzaFRhYmxlPEZ1bmN0aW9uPiA9IHtcbiAgICBlbXB0eTogZnVuY3Rpb24odmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIEhlbHBlcnMuaXNWYWx1ZUVtcHR5KHZhbHVlKTtcbiAgICB9LFxuICAgIG5vdGVtcHR5OiBmdW5jdGlvbih2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gIU9wZXJhbmRNYWtlci51bmFyeUZ1bmN0aW9ucy5lbXB0eSh2YWx1ZSk7XG4gICAgfSxcbiAgICBuZWdhdGU6IGZ1bmN0aW9uKHZhbHVlOiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gIXZhbHVlO1xuICAgIH0sXG4gIH07XG5cbiAgc3RhdGljIGJpbmFyeUZ1bmN0aW9uczogSGFzaFRhYmxlPEZ1bmN0aW9uPiA9IHtcbiAgICBhcml0aG1ldGljT3Aob3BlcmF0b3JOYW1lOiBzdHJpbmcpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihhOiBhbnksIGI6IGFueSk6IGFueSB7XG4gICAgICAgIGlmIChIZWxwZXJzLmlzVmFsdWVFbXB0eShhKSAmJiAhT3BlcmFuZE1ha2VyLmlzU3BhY2VTdHJpbmcoYSkpIHtcbiAgICAgICAgICBhID0gdHlwZW9mIGIgPT09IFwic3RyaW5nXCIgPyBcIlwiIDogMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoSGVscGVycy5pc1ZhbHVlRW1wdHkoYikgJiYgIU9wZXJhbmRNYWtlci5pc1NwYWNlU3RyaW5nKGIpKSB7XG4gICAgICAgICAgYiA9IHR5cGVvZiBhID09PSBcInN0cmluZ1wiID8gXCJcIiA6IDA7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY29uc3VtZXIgPSBPcGVyYW5kTWFrZXIuYmluYXJ5RnVuY3Rpb25zW29wZXJhdG9yTmFtZV07XG4gICAgICAgIHJldHVybiBjb25zdW1lciA9PSBudWxsID8gbnVsbCA6IGNvbnN1bWVyLmNhbGwodGhpcywgYSwgYik7XG4gICAgICB9O1xuICAgIH0sXG4gICAgYW5kOiBmdW5jdGlvbihhOiBib29sZWFuLCBiOiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gYSAmJiBiO1xuICAgIH0sXG4gICAgb3I6IGZ1bmN0aW9uKGE6IGJvb2xlYW4sIGI6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBhIHx8IGI7XG4gICAgfSxcbiAgICBwbHVzOiBmdW5jdGlvbihhOiBhbnksIGI6IGFueSk6IGFueSB7XG4gICAgICByZXR1cm4gYSArIGI7XG4gICAgfSxcbiAgICBtaW51czogZnVuY3Rpb24oYTogbnVtYmVyLCBiOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIGEgLSBiO1xuICAgIH0sXG4gICAgbXVsOiBmdW5jdGlvbihhOiBudW1iZXIsIGI6IG51bWJlcik6IG51bWJlciB7XG4gICAgICByZXR1cm4gYSAqIGI7XG4gICAgfSxcbiAgICBkaXY6IGZ1bmN0aW9uKGE6IG51bWJlciwgYjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgIGlmICghYikgcmV0dXJuIG51bGw7XG4gICAgICByZXR1cm4gYSAvIGI7XG4gICAgfSxcbiAgICBtb2Q6IGZ1bmN0aW9uKGE6IG51bWJlciwgYjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgIGlmICghYikgcmV0dXJuIG51bGw7XG4gICAgICByZXR1cm4gYSAlIGI7XG4gICAgfSxcbiAgICBwb3dlcjogZnVuY3Rpb24oYTogbnVtYmVyLCBiOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIE1hdGgucG93KGEsIGIpO1xuICAgIH0sXG4gICAgZ3JlYXRlcjogZnVuY3Rpb24obGVmdDogYW55LCByaWdodDogYW55KTogYm9vbGVhbiB7XG4gICAgICBpZiAobGVmdCA9PSBudWxsIHx8IHJpZ2h0ID09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiBsZWZ0ID4gcmlnaHQ7XG4gICAgfSxcbiAgICBsZXNzOiBmdW5jdGlvbihsZWZ0OiBhbnksIHJpZ2h0OiBhbnkpOiBib29sZWFuIHtcbiAgICAgIGlmIChsZWZ0ID09IG51bGwgfHwgcmlnaHQgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgICAgcmV0dXJuIGxlZnQgPCByaWdodDtcbiAgICB9LFxuICAgIGdyZWF0ZXJvcmVxdWFsOiBmdW5jdGlvbihsZWZ0OiBhbnksIHJpZ2h0OiBhbnkpOiBib29sZWFuIHtcbiAgICAgIGlmIChPcGVyYW5kTWFrZXIuYmluYXJ5RnVuY3Rpb25zLmVxdWFsKGxlZnQsIHJpZ2h0KSkgcmV0dXJuIHRydWU7XG4gICAgICByZXR1cm4gT3BlcmFuZE1ha2VyLmJpbmFyeUZ1bmN0aW9ucy5ncmVhdGVyKGxlZnQsIHJpZ2h0KTtcbiAgICB9LFxuICAgIGxlc3NvcmVxdWFsOiBmdW5jdGlvbihsZWZ0OiBhbnksIHJpZ2h0OiBhbnkpOiBib29sZWFuIHtcbiAgICAgIGlmIChPcGVyYW5kTWFrZXIuYmluYXJ5RnVuY3Rpb25zLmVxdWFsKGxlZnQsIHJpZ2h0KSkgcmV0dXJuIHRydWU7XG4gICAgICByZXR1cm4gT3BlcmFuZE1ha2VyLmJpbmFyeUZ1bmN0aW9ucy5sZXNzKGxlZnQsIHJpZ2h0KTtcbiAgICB9LFxuICAgIGVxdWFsOiBmdW5jdGlvbihsZWZ0OiBhbnksIHJpZ2h0OiBhbnkpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBPcGVyYW5kTWFrZXIuaXNUd29WYWx1ZUVxdWFscyhsZWZ0LCByaWdodCk7XG4gICAgfSxcbiAgICBub3RlcXVhbDogZnVuY3Rpb24obGVmdDogYW55LCByaWdodDogYW55KTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gIU9wZXJhbmRNYWtlci5iaW5hcnlGdW5jdGlvbnMuZXF1YWwobGVmdCwgcmlnaHQpO1xuICAgIH0sXG4gICAgY29udGFpbnM6IGZ1bmN0aW9uKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIE9wZXJhbmRNYWtlci5iaW5hcnlGdW5jdGlvbnMuY29udGFpbnNDb3JlKGxlZnQsIHJpZ2h0LCB0cnVlKTtcbiAgICB9LFxuICAgIG5vdGNvbnRhaW5zOiBmdW5jdGlvbihsZWZ0OiBhbnksIHJpZ2h0OiBhbnkpOiBib29sZWFuIHtcbiAgICAgIGlmICghbGVmdCAmJiAhSGVscGVycy5pc1ZhbHVlRW1wdHkocmlnaHQpKSByZXR1cm4gdHJ1ZTtcbiAgICAgIHJldHVybiBPcGVyYW5kTWFrZXIuYmluYXJ5RnVuY3Rpb25zLmNvbnRhaW5zQ29yZShsZWZ0LCByaWdodCwgZmFsc2UpO1xuICAgIH0sXG4gICAgYW55b2Y6IGZ1bmN0aW9uKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgaWYgKEhlbHBlcnMuaXNWYWx1ZUVtcHR5KGxlZnQpICYmIEhlbHBlcnMuaXNWYWx1ZUVtcHR5KHJpZ2h0KSlcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBpZiAoXG4gICAgICAgIEhlbHBlcnMuaXNWYWx1ZUVtcHR5KGxlZnQpIHx8XG4gICAgICAgICghQXJyYXkuaXNBcnJheShsZWZ0KSAmJiBsZWZ0Lmxlbmd0aCA9PT0gMClcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKEhlbHBlcnMuaXNWYWx1ZUVtcHR5KHJpZ2h0KSkgcmV0dXJuIHRydWU7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkobGVmdCkpXG4gICAgICAgIHJldHVybiBPcGVyYW5kTWFrZXIuYmluYXJ5RnVuY3Rpb25zLmNvbnRhaW5zKHJpZ2h0LCBsZWZ0KTtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShyaWdodCkpXG4gICAgICAgIHJldHVybiBPcGVyYW5kTWFrZXIuYmluYXJ5RnVuY3Rpb25zLmNvbnRhaW5zKGxlZnQsIHJpZ2h0KTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmlnaHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKE9wZXJhbmRNYWtlci5iaW5hcnlGdW5jdGlvbnMuY29udGFpbnMobGVmdCwgcmlnaHRbaV0pKSByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIGFsbG9mOiBmdW5jdGlvbihsZWZ0OiBhbnksIHJpZ2h0OiBhbnkpOiBib29sZWFuIHtcbiAgICAgIGlmICghbGVmdCAmJiAhSGVscGVycy5pc1ZhbHVlRW1wdHkocmlnaHQpKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmlnaHQpKVxuICAgICAgICByZXR1cm4gT3BlcmFuZE1ha2VyLmJpbmFyeUZ1bmN0aW9ucy5jb250YWlucyhsZWZ0LCByaWdodCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJpZ2h0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghT3BlcmFuZE1ha2VyLmJpbmFyeUZ1bmN0aW9ucy5jb250YWlucyhsZWZ0LCByaWdodFtpXSkpXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBjb250YWluc0NvcmU6IGZ1bmN0aW9uKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgaXNDb250YWluczogYW55KTogYm9vbGVhbiB7XG4gICAgICBpZiAoIWxlZnQgJiYgbGVmdCAhPT0gMCAmJiBsZWZ0ICE9PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKCFsZWZ0Lmxlbmd0aCkge1xuICAgICAgICBsZWZ0ID0gbGVmdC50b1N0cmluZygpO1xuICAgICAgICBpZiAodHlwZW9mIHJpZ2h0ID09PSBcInN0cmluZ1wiIHx8IHJpZ2h0IGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgICAgICAgbGVmdCA9IGxlZnQudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICByaWdodCA9IHJpZ2h0LnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgbGVmdCA9PT0gXCJzdHJpbmdcIiB8fCBsZWZ0IGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgICAgIGlmICghcmlnaHQpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmlnaHQgPSByaWdodC50b1N0cmluZygpO1xuICAgICAgICB2YXIgZm91bmQgPSBsZWZ0LmluZGV4T2YocmlnaHQpID4gLTE7XG4gICAgICAgIHJldHVybiBpc0NvbnRhaW5zID8gZm91bmQgOiAhZm91bmQ7XG4gICAgICB9XG4gICAgICB2YXIgcmlnaHRBcnJheSA9IEFycmF5LmlzQXJyYXkocmlnaHQpID8gcmlnaHQgOiBbcmlnaHRdO1xuICAgICAgZm9yICh2YXIgckluZGV4ID0gMDsgckluZGV4IDwgcmlnaHRBcnJheS5sZW5ndGg7IHJJbmRleCsrKSB7XG4gICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgcmlnaHQgPSByaWdodEFycmF5W3JJbmRleF07XG4gICAgICAgIGZvciAoOyBpIDwgbGVmdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChPcGVyYW5kTWFrZXIuaXNUd29WYWx1ZUVxdWFscyhsZWZ0W2ldLCByaWdodCkpIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpID09IGxlZnQubGVuZ3RoKSByZXR1cm4gIWlzQ29udGFpbnM7XG4gICAgICB9XG4gICAgICByZXR1cm4gaXNDb250YWlucztcbiAgICB9LFxuICB9O1xuXG4gIHN0YXRpYyBpc1R3b1ZhbHVlRXF1YWxzKHg6IGFueSwgeTogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKHggPT09IFwidW5kZWZpbmVkXCIpIHggPSB1bmRlZmluZWQ7XG4gICAgaWYgKHkgPT09IFwidW5kZWZpbmVkXCIpIHkgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIEhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyh4LCB5LCB0cnVlKTtcbiAgfVxuXG4gIHN0YXRpYyBvcGVyYXRvclRvU3RyaW5nKG9wZXJhdG9yTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgb3BTdHIgPSBPcGVyYW5kTWFrZXIuc2lnbnNbb3BlcmF0b3JOYW1lXTtcbiAgICByZXR1cm4gb3BTdHIgPT0gbnVsbCA/IG9wZXJhdG9yTmFtZSA6IG9wU3RyO1xuICB9XG5cbiAgc3RhdGljIHNpZ25zOiBIYXNoVGFibGU8c3RyaW5nPiA9IHtcbiAgICBsZXNzOiBcIjxcIixcbiAgICBsZXNzb3JlcXVhbDogXCI8PVwiLFxuICAgIGdyZWF0ZXI6IFwiPlwiLFxuICAgIGdyZWF0ZXJvcmVxdWFsOiBcIj49XCIsXG4gICAgZXF1YWw6IFwiPT1cIixcbiAgICBub3RlcXVhbDogXCIhPVwiLFxuICAgIHBsdXM6IFwiK1wiLFxuICAgIG1pbnVzOiBcIi1cIixcbiAgICBtdWw6IFwiKlwiLFxuICAgIGRpdjogXCIvXCIsXG4gICAgYW5kOiBcImFuZFwiLFxuICAgIG9yOiBcIm9yXCIsXG4gICAgcG93ZXI6IFwiXlwiLFxuICAgIG1vZDogXCIlXCIsXG4gICAgbmVnYXRlOiBcIiFcIixcbiAgfTtcbn1cbiIsImltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBJRWxlbWVudCwgSVF1ZXN0aW9uIH0gZnJvbSBcIi4vYmFzZS1pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBQYW5lbE1vZGVsIH0gZnJvbSBcIi4vcGFuZWxcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcblxuLyoqXG4gKiBUaGUgZmxvdyBwYW5lbCBvYmplY3QuIEl0IGlzIGEgY29udGFpbmVyIHdpdGggZmxvdyBsYXlvdXQgd2hlcmUgeW91IGNhbiBtaXggcXVlc3Rpb25zIHdpdGggbWFya2Rvd24gdGV4dC5cbiAqXG4gKi9cbmV4cG9ydCBjbGFzcyBGbG93UGFuZWxNb2RlbCBleHRlbmRzIFBhbmVsTW9kZWwge1xuICBzdGF0aWMgY29udGVudEVsZW1lbnROYW1lUHJlZml4ID0gXCJlbGVtZW50OlwiO1xuICBwdWJsaWMgY29udGVudENoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcbiAgcHVibGljIG9uR2V0SHRtbEZvclF1ZXN0aW9uOiAocXVlc3Rpb246IFF1ZXN0aW9uKSA9PiBzdHJpbmc7XG4gIHB1YmxpYyBvbkN1c3RvbUh0bWxQcm9kdWNpbmc6ICgpID0+IHN0cmluZztcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nID0gXCJcIikge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJjb250ZW50XCIsIHRoaXMsIHRydWUpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFwiY29udGVudFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLm9uQ29udGVudENoYW5nZWQoKTtcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImZsb3dwYW5lbFwiO1xuICB9XG4gIGdldENoaWxkcmVuTGF5b3V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImZsb3dcIjtcbiAgfVxuICBvblN1cnZleUxvYWQoKTogYW55IHtcbiAgICBzdXBlci5vblN1cnZleUxvYWQoKTtcbiAgICB0aGlzLm9uQ29udGVudENoYW5nZWQoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNvbnRlbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJjb250ZW50XCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY29udGVudCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiY29udGVudFwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgbG9jQ29udGVudCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJjb250ZW50XCIpO1xuICB9XG4gIHB1YmxpYyBnZXQgaHRtbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJodG1sXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgaHRtbCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImh0bWxcIiwgdmFsKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25Db250ZW50Q2hhbmdlZCgpOiBhbnkge1xuICAgIHZhciBodG1sID0gXCJcIjtcbiAgICBpZiAoISF0aGlzLm9uQ3VzdG9tSHRtbFByb2R1Y2luZykge1xuICAgICAgaHRtbCA9IHRoaXMub25DdXN0b21IdG1sUHJvZHVjaW5nKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGh0bWwgPSB0aGlzLnByb2R1Y2VIdG1sKCk7XG4gICAgfVxuICAgIHRoaXMuaHRtbCA9IGh0bWw7XG4gICAgaWYgKCEhdGhpcy5jb250ZW50Q2hhbmdlZENhbGxiYWNrKSB0aGlzLmNvbnRlbnRDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgfVxuICBwdWJsaWMgcHJvZHVjZUh0bWwoKTogc3RyaW5nIHtcbiAgICB2YXIgaHRtbCA9IFtdO1xuICAgIC8vY29udGVudEVsZW1lbnROYW1lUHJlZml4XG4gICAgdmFyIHJlZ0V4ID0gL3soLio/KGVsZW1lbnQ6KVteJF0uKj8pfS9nO1xuICAgIHZhciBzdHIgPSB0aGlzLmNvbnRlbnQ7XG4gICAgdmFyIHN0YXJ0SW5kZXggPSAwO1xuICAgIHZhciByZXMgPSBudWxsO1xuICAgIHdoaWxlICgocmVzID0gcmVnRXguZXhlYyhzdHIpKSAhPT0gbnVsbCkge1xuICAgICAgaWYgKHJlcy5pbmRleCA+IHN0YXJ0SW5kZXgpIHtcbiAgICAgICAgaHRtbC5wdXNoKHN0ci5zdWJzdHIoc3RhcnRJbmRleCwgcmVzLmluZGV4IC0gc3RhcnRJbmRleCkpO1xuICAgICAgICBzdGFydEluZGV4ID0gcmVzLmluZGV4O1xuICAgICAgfVxuICAgICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5nZXRRdWVzdGlvbkZyb21UZXh0KHJlc1swXSk7XG4gICAgICBpZiAoISFxdWVzdGlvbikge1xuICAgICAgICBodG1sLnB1c2godGhpcy5nZXRIdG1sRm9yUXVlc3Rpb24ocXVlc3Rpb24pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGh0bWwucHVzaChcbiAgICAgICAgICBzdHIuc3Vic3RyKHN0YXJ0SW5kZXgsIHJlcy5pbmRleCArIHJlc1swXS5sZW5ndGggLSBzdGFydEluZGV4KVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgc3RhcnRJbmRleCA9IHJlcy5pbmRleCArIHJlc1swXS5sZW5ndGg7XG4gICAgfVxuICAgIGlmIChzdGFydEluZGV4IDwgc3RyLmxlbmd0aCkge1xuICAgICAgaHRtbC5wdXNoKHN0ci5zdWJzdHIoc3RhcnRJbmRleCwgc3RyLmxlbmd0aCAtIHN0YXJ0SW5kZXgpKTtcbiAgICB9XG4gICAgcmV0dXJuIGh0bWwuam9pbihcIlwiKS5yZXBsYWNlKG5ldyBSZWdFeHAoXCI8YnI+XCIsIFwiZ1wiKSwgXCI8YnIvPlwiKTtcbiAgfVxuICBwdWJsaWMgZ2V0UXVlc3Rpb25Gcm9tVGV4dChzdHI6IHN0cmluZyk6IFF1ZXN0aW9uIHtcbiAgICBzdHIgPSBzdHIuc3Vic3RyKDEsIHN0ci5sZW5ndGggLSAyKTtcbiAgICBzdHIgPSBzdHIucmVwbGFjZShGbG93UGFuZWxNb2RlbC5jb250ZW50RWxlbWVudE5hbWVQcmVmaXgsIFwiXCIpLnRyaW0oKTtcbiAgICByZXR1cm4gdGhpcy5nZXRRdWVzdGlvbkJ5TmFtZShzdHIpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRIdG1sRm9yUXVlc3Rpb24ocXVlc3Rpb246IFF1ZXN0aW9uKTogc3RyaW5nIHtcbiAgICBpZiAoISF0aGlzLm9uR2V0SHRtbEZvclF1ZXN0aW9uKSByZXR1cm4gdGhpcy5vbkdldEh0bWxGb3JRdWVzdGlvbihxdWVzdGlvbik7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFF1ZXN0aW9uSHRtbElkKHF1ZXN0aW9uOiBRdWVzdGlvbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubmFtZSArIFwiX1wiICsgcXVlc3Rpb24uaWQ7XG4gIH1cbiAgcHJvdGVjdGVkIG9uQWRkRWxlbWVudChlbGVtZW50OiBJRWxlbWVudCwgaW5kZXg6IG51bWJlcikge1xuICAgIHN1cGVyLm9uQWRkRWxlbWVudChlbGVtZW50LCBpbmRleCk7XG4gICAgdGhpcy5hZGRFbGVtZW50VG9Db250ZW50KGVsZW1lbnQpO1xuICAgIGVsZW1lbnQucmVuZGVyV2lkdGggPSBcIlwiO1xuICB9XG4gIHByb3RlY3RlZCBvblJlbW92ZUVsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQpIHtcbiAgICB2YXIgc2VhcmNoU3RyID0gdGhpcy5nZXRFbGVtZW50Q29udGVudFRleHQoZWxlbWVudCk7XG4gICAgdGhpcy5jb250ZW50ID0gdGhpcy5jb250ZW50LnJlcGxhY2Uoc2VhcmNoU3RyLCBcIlwiKTtcbiAgICBzdXBlci5vblJlbW92ZUVsZW1lbnQoZWxlbWVudCk7XG4gIH1cbiAgZHJhZ0Ryb3BNb3ZlRWxlbWVudChzcmM6IElFbGVtZW50LCB0YXJnZXQ6IElFbGVtZW50LCB0YXJnZXRJbmRleDogbnVtYmVyKSB7fVxuICBwcml2YXRlIGFkZEVsZW1lbnRUb0NvbnRlbnQoZWxlbWVudDogSUVsZW1lbnQpIHtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbikgcmV0dXJuO1xuICAgIHZhciB0ZXh0ID0gdGhpcy5nZXRFbGVtZW50Q29udGVudFRleHQoZWxlbWVudCk7XG4gICAgaWYgKCF0aGlzLmluc2VydFRleHRBdEN1cnNvcih0ZXh0KSkge1xuICAgICAgdGhpcy5jb250ZW50ID0gdGhpcy5jb250ZW50ICsgdGV4dDtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBpbnNlcnRUZXh0QXRDdXJzb3IodGV4dDogc3RyaW5nLCBwcmV2TmFtZTogc3RyaW5nID0gbnVsbCk6IGJvb2xlYW4ge1xuICAgIGlmIChcbiAgICAgICF0aGlzLmlzRGVzaWduTW9kZSB8fFxuICAgICAgdHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiIHx8XG4gICAgICAhd2luZG93LmdldFNlbGVjdGlvblxuICAgIClcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBsZXQgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGlmIChzZWwuZ2V0UmFuZ2VBdCAmJiBzZWwucmFuZ2VDb3VudCkge1xuICAgICAgbGV0IHJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCk7XG4gICAgICByYW5nZS5kZWxldGVDb250ZW50cygpO1xuICAgICAgcmFuZ2UuaW5zZXJ0Tm9kZShkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KSk7XG4gICAgICB2YXIgc2VsZiA9IDxhbnk+dGhpcztcbiAgICAgIGlmIChzZWxmLmdldENvbnRlbnQpIHtcbiAgICAgICAgdmFyIHN0ciA9IHNlbGYuZ2V0Q29udGVudChwcmV2TmFtZSk7XG4gICAgICAgIHRoaXMuY29udGVudCA9IHN0cjtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGdldEVsZW1lbnRDb250ZW50VGV4dChlbGVtZW50OiBJRWxlbWVudCkge1xuICAgIHJldHVybiBcIntcIiArIEZsb3dQYW5lbE1vZGVsLmNvbnRlbnRFbGVtZW50TmFtZVByZWZpeCArIGVsZW1lbnQubmFtZSArIFwifVwiO1xuICB9XG59XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwiZmxvd3BhbmVsXCIsXG4gIFt7IG5hbWU6IFwiY29udGVudDpodG1sXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NDb250ZW50XCIgfV0sXG4gIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IEZsb3dQYW5lbE1vZGVsKCk7XG4gIH0sXG4gIFwicGFuZWxcIlxuKTtcbiIsImltcG9ydCB7IEhhc2hUYWJsZSwgSGVscGVycyB9IGZyb20gXCIuL2hlbHBlcnNcIjtcblxuZXhwb3J0IGNsYXNzIEZ1bmN0aW9uRmFjdG9yeSB7XG4gIHB1YmxpYyBzdGF0aWMgSW5zdGFuY2U6IEZ1bmN0aW9uRmFjdG9yeSA9IG5ldyBGdW5jdGlvbkZhY3RvcnkoKTtcbiAgcHJpdmF0ZSBmdW5jdGlvbkhhc2g6IEhhc2hUYWJsZTwocGFyYW1zOiBhbnlbXSkgPT4gYW55PiA9IHt9O1xuICBwcml2YXRlIGlzQXN5bmNIYXNoOiBIYXNoVGFibGU8Ym9vbGVhbj4gPSB7fTtcblxuICBwdWJsaWMgcmVnaXN0ZXIoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGZ1bmM6IChwYXJhbXM6IGFueVtdKSA9PiBhbnksXG4gICAgaXNBc3luYzogYm9vbGVhbiA9IGZhbHNlXG4gICkge1xuICAgIHRoaXMuZnVuY3Rpb25IYXNoW25hbWVdID0gZnVuYztcbiAgICBpZiAoaXNBc3luYykgdGhpcy5pc0FzeW5jSGFzaFtuYW1lXSA9IHRydWU7XG4gIH1cbiAgcHVibGljIHVucmVnaXN0ZXIobmFtZTogc3RyaW5nKSB7XG4gICAgZGVsZXRlIHRoaXMuZnVuY3Rpb25IYXNoW25hbWVdO1xuICAgIGRlbGV0ZSB0aGlzLmlzQXN5bmNIYXNoW25hbWVdO1xuICB9XG4gIHB1YmxpYyBoYXNGdW5jdGlvbihuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmZ1bmN0aW9uSGFzaFtuYW1lXTtcbiAgfVxuICBwdWJsaWMgaXNBc3luY0Z1bmN0aW9uKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuaXNBc3luY0hhc2hbbmFtZV07XG4gIH1cblxuICBwdWJsaWMgY2xlYXIoKSB7XG4gICAgdGhpcy5mdW5jdGlvbkhhc2ggPSB7fTtcbiAgfVxuICBwdWJsaWMgZ2V0QWxsKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5mdW5jdGlvbkhhc2gpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQuc29ydCgpO1xuICB9XG4gIHB1YmxpYyBydW4oXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHBhcmFtczogYW55W10sXG4gICAgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4gPSBudWxsXG4gICk6IGFueSB7XG4gICAgdmFyIGZ1bmMgPSB0aGlzLmZ1bmN0aW9uSGFzaFtuYW1lXTtcbiAgICBpZiAoIWZ1bmMpIHJldHVybiBudWxsO1xuICAgIGxldCBjbGFzc1J1bm5lciA9IHtcbiAgICAgIGZ1bmM6IGZ1bmMsXG4gICAgfTtcblxuICAgIGlmIChwcm9wZXJ0aWVzKSB7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcGVydGllcykge1xuICAgICAgICAoPGFueT5jbGFzc1J1bm5lcilba2V5XSA9IHByb3BlcnRpZXNba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNsYXNzUnVubmVyLmZ1bmMocGFyYW1zKTtcbiAgfVxufVxuXG5leHBvcnQgdmFyIHJlZ2lzdGVyRnVuY3Rpb24gPSBGdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXI7XG5cbmZ1bmN0aW9uIGdldFBhcmFtc0FzQXJyYXkodmFsdWU6IGFueSwgYXJyOiBhbnlbXSkge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuO1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBnZXRQYXJhbXNBc0FycmF5KHZhbHVlW2ldLCBhcnIpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoSGVscGVycy5pc051bWJlcih2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgfVxuICAgIGFyci5wdXNoKHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdW0ocGFyYW1zOiBhbnlbXSk6IGFueSB7XG4gIHZhciBhcnI6IGFueVtdID0gW107XG4gIGdldFBhcmFtc0FzQXJyYXkocGFyYW1zLCBhcnIpO1xuICB2YXIgcmVzID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICByZXMgKz0gYXJyW2ldO1xuICB9XG4gIHJldHVybiByZXM7XG59XG5GdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXIoXCJzdW1cIiwgc3VtKTtcblxuZnVuY3Rpb24gbWluX21heChwYXJhbXM6IGFueVtdLCBpc01pbjogYm9vbGVhbik6IGFueSB7XG4gIHZhciBhcnI6IGFueVtdID0gW107XG4gIGdldFBhcmFtc0FzQXJyYXkocGFyYW1zLCBhcnIpO1xuICB2YXIgcmVzID0gdW5kZWZpbmVkO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgIGlmIChyZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVzID0gYXJyW2ldO1xuICAgIH1cbiAgICBpZiAoaXNNaW4pIHtcbiAgICAgIGlmIChyZXMgPiBhcnJbaV0pIHJlcyA9IGFycltpXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHJlcyA8IGFycltpXSkgcmVzID0gYXJyW2ldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiBtaW4ocGFyYW1zOiBhbnlbXSk6IGFueSB7XG4gIHJldHVybiBtaW5fbWF4KHBhcmFtcywgdHJ1ZSk7XG59XG5GdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXIoXCJtaW5cIiwgbWluKTtcblxuZnVuY3Rpb24gbWF4KHBhcmFtczogYW55W10pOiBhbnkge1xuICByZXR1cm4gbWluX21heChwYXJhbXMsIGZhbHNlKTtcbn1cbkZ1bmN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlcihcIm1heFwiLCBtYXgpO1xuXG5mdW5jdGlvbiBjb3VudChwYXJhbXM6IGFueVtdKTogYW55IHtcbiAgdmFyIGFycjogYW55W10gPSBbXTtcbiAgZ2V0UGFyYW1zQXNBcnJheShwYXJhbXMsIGFycik7XG4gIHJldHVybiBhcnIubGVuZ3RoO1xufVxuRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyKFwiY291bnRcIiwgY291bnQpO1xuXG5mdW5jdGlvbiBhdmcocGFyYW1zOiBhbnlbXSk6IGFueSB7XG4gIHZhciBhcnI6IGFueVtdID0gW107XG4gIGdldFBhcmFtc0FzQXJyYXkocGFyYW1zLCBhcnIpO1xuICB2YXIgcmVzID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICByZXMgKz0gYXJyW2ldO1xuICB9XG4gIHJldHVybiBhcnIubGVuZ3RoID4gMCA/IHJlcyAvIGFyci5sZW5ndGggOiAwO1xufVxuRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyKFwiYXZnXCIsIGF2Zyk7XG5cbmZ1bmN0aW9uIGdldEluQXJyYXlQYXJhbXMocGFyYW1zOiBhbnlbXSk6IGFueSB7XG4gIGlmIChwYXJhbXMubGVuZ3RoICE9IDIpIHJldHVybiBudWxsO1xuICB2YXIgYXJyID0gcGFyYW1zWzBdO1xuICBpZiAoIWFycikgcmV0dXJuIG51bGw7XG4gIGlmICghQXJyYXkuaXNBcnJheShhcnIpICYmICFBcnJheS5pc0FycmF5KE9iamVjdC5rZXlzKGFycikpKSByZXR1cm4gbnVsbDtcbiAgdmFyIG5hbWUgPSBwYXJhbXNbMV07XG4gIGlmICh0eXBlb2YgbmFtZSAhPT0gXCJzdHJpbmdcIiAmJiAhKG5hbWUgaW5zdGFuY2VvZiBTdHJpbmcpKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIHsgZGF0YTogYXJyLCBuYW1lOiBuYW1lIH07XG59XG5cbmZ1bmN0aW9uIGNhbGNJbkFycmF5KFxuICBwYXJhbXM6IGFueVtdLFxuICBmdW5jOiAocmVzOiBudW1iZXIsIHZhbDogbnVtYmVyKSA9PiBudW1iZXJcbik6IGFueSB7XG4gIHZhciB2ID0gZ2V0SW5BcnJheVBhcmFtcyhwYXJhbXMpO1xuICBpZiAoIXYpIHJldHVybiB1bmRlZmluZWQ7XG4gIHZhciByZXMgPSB1bmRlZmluZWQ7XG4gIGlmIChBcnJheS5pc0FycmF5KHYuZGF0YSkpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHYuZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSB2LmRhdGFbaV07XG4gICAgICBpZiAoISFpdGVtICYmIGl0ZW1bPHN0cmluZz52Lm5hbWVdKSB7XG4gICAgICAgIHJlcyA9IGZ1bmMocmVzLCBpdGVtWzxzdHJpbmc+di5uYW1lXSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGtleSBpbiB2LmRhdGEpIHtcbiAgICAgIHZhciBpdGVtID0gdi5kYXRhW2tleV07XG4gICAgICBpZiAoISFpdGVtICYmIGl0ZW1bPHN0cmluZz52Lm5hbWVdKSB7XG4gICAgICAgIHJlcyA9IGZ1bmMocmVzLCBpdGVtWzxzdHJpbmc+di5uYW1lXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59XG5cbmZ1bmN0aW9uIHN1bUluQXJyYXkocGFyYW1zOiBhbnlbXSk6IGFueSB7XG4gIHZhciByZXMgPSBjYWxjSW5BcnJheShwYXJhbXMsIGZ1bmN0aW9uKHJlczogbnVtYmVyLCB2YWw6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKHJlcyA9PSB1bmRlZmluZWQpIHJlcyA9IDA7XG4gICAgcmV0dXJuICtyZXMgKyArdmFsO1xuICB9KTtcbiAgcmV0dXJuIHJlcyAhPT0gdW5kZWZpbmVkID8gcmVzIDogMDtcbn1cbkZ1bmN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlcihcInN1bUluQXJyYXlcIiwgc3VtSW5BcnJheSk7XG5cbmZ1bmN0aW9uIG1pbkluQXJyYXkocGFyYW1zOiBhbnlbXSk6IGFueSB7XG4gIHJldHVybiBjYWxjSW5BcnJheShwYXJhbXMsIGZ1bmN0aW9uKHJlczogbnVtYmVyLCB2YWw6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKHJlcyA9PSB1bmRlZmluZWQpIHJldHVybiB2YWw7XG4gICAgcmV0dXJuIHJlcyA8IHZhbCA/IHJlcyA6IHZhbDtcbiAgfSk7XG59XG5GdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXIoXCJtaW5JbkFycmF5XCIsIG1pbkluQXJyYXkpO1xuXG5mdW5jdGlvbiBtYXhJbkFycmF5KHBhcmFtczogYW55W10pOiBhbnkge1xuICByZXR1cm4gY2FsY0luQXJyYXkocGFyYW1zLCBmdW5jdGlvbihyZXM6IG51bWJlciwgdmFsOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmIChyZXMgPT0gdW5kZWZpbmVkKSByZXR1cm4gdmFsO1xuICAgIHJldHVybiByZXMgPiB2YWwgPyByZXMgOiB2YWw7XG4gIH0pO1xufVxuRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyKFwibWF4SW5BcnJheVwiLCBtYXhJbkFycmF5KTtcblxuZnVuY3Rpb24gY291bnRJbkFycmF5KHBhcmFtczogYW55W10pOiBhbnkge1xuICB2YXIgcmVzID0gY2FsY0luQXJyYXkocGFyYW1zLCBmdW5jdGlvbihyZXM6IG51bWJlciwgdmFsOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmIChyZXMgPT0gdW5kZWZpbmVkKSByZXMgPSAwO1xuICAgIHJldHVybiByZXMgKyAxO1xuICB9KTtcbiAgcmV0dXJuIHJlcyAhPT0gdW5kZWZpbmVkID8gcmVzIDogMDtcbn1cbkZ1bmN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlcihcImNvdW50SW5BcnJheVwiLCBjb3VudEluQXJyYXkpO1xuXG5mdW5jdGlvbiBhdmdJbkFycmF5KHBhcmFtczogYW55W10pOiBhbnkge1xuICB2YXIgY291bnQgPSBjb3VudEluQXJyYXkocGFyYW1zKTtcbiAgaWYgKGNvdW50ID09IDApIHJldHVybiAwO1xuICByZXR1cm4gc3VtSW5BcnJheShwYXJhbXMpIC8gY291bnQ7XG59XG5GdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXIoXCJhdmdJbkFycmF5XCIsIGF2Z0luQXJyYXkpO1xuXG5mdW5jdGlvbiBpaWYocGFyYW1zOiBhbnlbXSk6IGFueSB7XG4gIGlmICghcGFyYW1zICYmIHBhcmFtcy5sZW5ndGggIT09IDMpIHJldHVybiBcIlwiO1xuICByZXR1cm4gcGFyYW1zWzBdID8gcGFyYW1zWzFdIDogcGFyYW1zWzJdO1xufVxuRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyKFwiaWlmXCIsIGlpZik7XG5cbmZ1bmN0aW9uIGdldERhdGUocGFyYW1zOiBhbnlbXSk6IGFueSB7XG4gIGlmICghcGFyYW1zICYmIHBhcmFtcy5sZW5ndGggPCAxKSByZXR1cm4gbnVsbDtcbiAgaWYgKCFwYXJhbXNbMF0pIHJldHVybiBudWxsO1xuICByZXR1cm4gbmV3IERhdGUocGFyYW1zWzBdKTtcbn1cbkZ1bmN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlcihcImdldERhdGVcIiwgZ2V0RGF0ZSk7XG5cbmZ1bmN0aW9uIGFnZShwYXJhbXM6IGFueVtdKTogYW55IHtcbiAgaWYgKCFwYXJhbXMgJiYgcGFyYW1zLmxlbmd0aCA8IDEpIHJldHVybiBudWxsO1xuICBpZiAoIXBhcmFtc1swXSkgcmV0dXJuIG51bGw7XG4gIHZhciBiaXJ0aERhdGUgPSBuZXcgRGF0ZShwYXJhbXNbMF0pO1xuICB2YXIgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuICB2YXIgYWdlID0gdG9kYXkuZ2V0RnVsbFllYXIoKSAtIGJpcnRoRGF0ZS5nZXRGdWxsWWVhcigpO1xuICB2YXIgbSA9IHRvZGF5LmdldE1vbnRoKCkgLSBiaXJ0aERhdGUuZ2V0TW9udGgoKTtcbiAgaWYgKG0gPCAwIHx8IChtID09PSAwICYmIHRvZGF5LmdldERhdGUoKSA8IGJpcnRoRGF0ZS5nZXREYXRlKCkpKSB7XG4gICAgYWdlIC09IGFnZSA+IDAgPyAxIDogMDtcbiAgfVxuICByZXR1cm4gYWdlO1xufVxuRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyKFwiYWdlXCIsIGFnZSk7XG5cbmZ1bmN0aW9uIGlzQ29udGFpbmVyUmVhZHkocGFyYW1zOiBhbnlbXSk6IGFueSB7XG4gIGlmICghcGFyYW1zICYmIHBhcmFtcy5sZW5ndGggPCAxKSByZXR1cm4gZmFsc2U7XG4gIGlmICghcGFyYW1zWzBdIHx8ICF0aGlzLnN1cnZleSkgcmV0dXJuIGZhbHNlO1xuICB2YXIgbmFtZSA9IHBhcmFtc1swXTtcbiAgdmFyIGNvbnRhaW5lciA9IHRoaXMuc3VydmV5LmdldFBhZ2VCeU5hbWUobmFtZSk7XG4gIGlmICghY29udGFpbmVyKSBjb250YWluZXIgPSB0aGlzLnN1cnZleS5nZXRQYW5lbEJ5TmFtZShuYW1lKTtcbiAgaWYgKCFjb250YWluZXIpIHJldHVybiBmYWxzZTtcbiAgdmFyIHF1ZXN0aW9ucyA9IGNvbnRhaW5lci5xdWVzdGlvbnM7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHF1ZXN0aW9uc1tpXS5oYXNFcnJvcnMoZmFsc2UpKSByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5GdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXIoXCJpc0NvbnRhaW5lclJlYWR5XCIsIGlzQ29udGFpbmVyUmVhZHkpO1xuXG5mdW5jdGlvbiBpc0Rpc3BsYXlNb2RlKCkge1xuICByZXR1cm4gdGhpcy5zdXJ2ZXkgJiYgdGhpcy5zdXJ2ZXkuaXNEaXNwbGF5TW9kZTtcbn1cbkZ1bmN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlcihcImlzRGlzcGxheU1vZGVcIiwgaXNEaXNwbGF5TW9kZSk7XG5cbmZ1bmN0aW9uIGN1cnJlbnREYXRlKCkge1xuICByZXR1cm4gbmV3IERhdGUoKTtcbn1cbkZ1bmN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlcihcImN1cnJlbnREYXRlXCIsIGN1cnJlbnREYXRlKTtcblxuZnVuY3Rpb24gdG9kYXkocGFyYW1zOiBhbnlbXSkge1xuICB2YXIgcmVzID0gbmV3IERhdGUoKTtcbiAgaWYgKEFycmF5LmlzQXJyYXkocGFyYW1zKSAmJiBwYXJhbXMubGVuZ3RoID09IDEpIHtcbiAgICByZXMuc2V0RGF0ZShyZXMuZ2V0RGF0ZSgpICsgcGFyYW1zWzBdKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyKFwidG9kYXlcIiwgdG9kYXkpO1xuXG5mdW5jdGlvbiBkaWZmRGF5cyhwYXJhbXM6IGFueVtdKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShwYXJhbXMpIHx8IHBhcmFtcy5sZW5ndGggIT09IDIpIHJldHVybiAwO1xuICBpZiAoIXBhcmFtc1swXSB8fCAhcGFyYW1zWzFdKSByZXR1cm4gMDtcbiAgY29uc3QgZGF0ZTE6IGFueSA9IG5ldyBEYXRlKHBhcmFtc1swXSk7XG4gIGNvbnN0IGRhdGUyOiBhbnkgPSBuZXcgRGF0ZShwYXJhbXNbMV0pO1xuICBjb25zdCBkaWZmVGltZSA9IE1hdGguYWJzKGRhdGUyIC0gZGF0ZTEpO1xuICByZXR1cm4gTWF0aC5jZWlsKGRpZmZUaW1lIC8gKDEwMDAgKiA2MCAqIDYwICogMjQpKTtcbn1cbkZ1bmN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlcihcImRpZmZEYXlzXCIsIGRpZmZEYXlzKTtcbiIsImV4cG9ydCBpbnRlcmZhY2UgSGFzaFRhYmxlPFQ+IHtcbiAgW2tleTogc3RyaW5nXTogVDtcbn1cblxuZXhwb3J0IGNsYXNzIEhlbHBlcnMge1xuICAvKipcbiAgICogQSBzdGF0aWMgbWV0aG9kcyB0aGF0IHJldHVybnMgdHJ1ZSBpZiBhIHZhbHVlIHVuZGVmaW5lZCwgbnVsbCwgZW1wdHkgc3RyaW5nIG9yIGVtcHR5IGFycmF5LlxuICAgKiBAcGFyYW0gdmFsdWVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaXNWYWx1ZUVtcHR5KHZhbHVlOiBhbnkpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAwKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoISF2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUuY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xuICAgICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgICAgIGlmICghSGVscGVycy5pc1ZhbHVlRW1wdHkodmFsdWVba2V5XSkpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gIXZhbHVlICYmIHZhbHVlICE9PSAwICYmIHZhbHVlICE9PSBmYWxzZTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGlzQXJyYXlDb250YWluc0VxdWFsKHg6IGFueSwgeTogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHgpIHx8ICFBcnJheS5pc0FycmF5KHkpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHgubGVuZ3RoICE9PSB5Lmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGogPSAwO1xuICAgICAgZm9yICg7IGogPCB5Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMoeFtpXSwgeVtqXSkpIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKGogPT09IHkubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgaXNBcnJheXNFcXVhbChcbiAgICB4OiBhbnksXG4gICAgeTogYW55LFxuICAgIGlnbm9yZU9yZGVyOiBib29sZWFuID0gZmFsc2VcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHgpIHx8ICFBcnJheS5pc0FycmF5KHkpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHgubGVuZ3RoICE9PSB5Lmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChpZ25vcmVPcmRlcikge1xuICAgICAgdmFyIHhTb3J0ZWQgPSBbXTtcbiAgICAgIHZhciB5U29ydGVkID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgeFNvcnRlZC5wdXNoKHhbaV0pO1xuICAgICAgICB5U29ydGVkLnB1c2goeVtpXSk7XG4gICAgICB9XG4gICAgICB4U29ydGVkLnNvcnQoKTtcbiAgICAgIHlTb3J0ZWQuc29ydCgpO1xuICAgICAgeCA9IHhTb3J0ZWQ7XG4gICAgICB5ID0geVNvcnRlZDtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIUhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyh4W2ldLCB5W2ldKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGlzVHdvVmFsdWVFcXVhbHMoXG4gICAgeDogYW55LFxuICAgIHk6IGFueSxcbiAgICBpZ25vcmVPcmRlcjogYm9vbGVhbiA9IGZhbHNlXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmICh4ID09PSB5KSByZXR1cm4gdHJ1ZTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHgpICYmIHgubGVuZ3RoID09PSAwICYmIHR5cGVvZiB5ID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoeSkgJiYgeS5sZW5ndGggPT09IDAgJiYgdHlwZW9mIHggPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoKHggPT09IHVuZGVmaW5lZCB8fCB4ID09PSBudWxsKSAmJiB5ID09PSBcIlwiKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoKHkgPT09IHVuZGVmaW5lZCB8fCB5ID09PSBudWxsKSAmJiB4ID09PSBcIlwiKSByZXR1cm4gdHJ1ZTtcblxuICAgIGlmICh0eXBlb2YgeCA9PT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgeSA9PSBcInN0cmluZ1wiKSByZXR1cm4geCA9PSB5O1xuXG4gICAgaWYgKEhlbHBlcnMuaXNDb252ZXJ0aWJsZVRvTnVtYmVyKHgpICYmIEhlbHBlcnMuaXNDb252ZXJ0aWJsZVRvTnVtYmVyKHkpKSB7XG4gICAgICBpZiAocGFyc2VJbnQoeCkgPT09IHBhcnNlSW50KHkpICYmIHBhcnNlRmxvYXQoeCkgPT09IHBhcnNlRmxvYXQoeSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgKCFIZWxwZXJzLmlzVmFsdWVFbXB0eSh4KSAmJiBIZWxwZXJzLmlzVmFsdWVFbXB0eSh5KSkgfHxcbiAgICAgIChIZWxwZXJzLmlzVmFsdWVFbXB0eSh4KSAmJiAhSGVscGVycy5pc1ZhbHVlRW1wdHkoeSkpXG4gICAgKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmICgoeCA9PT0gdHJ1ZSB8fCB4ID09PSBmYWxzZSkgJiYgdHlwZW9mIHkgPT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHgudG9TdHJpbmcoKSA9PT0geS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICBpZiAoKHkgPT09IHRydWUgfHwgeSA9PT0gZmFsc2UpICYmIHR5cGVvZiB4ID09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiB5LnRvU3RyaW5nKCkgPT09IHgudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICB9XG4gICAgaWYgKCEoeCBpbnN0YW5jZW9mIE9iamVjdCkgJiYgISh5IGluc3RhbmNlb2YgT2JqZWN0KSkgcmV0dXJuIHggPT0geTtcbiAgICBpZiAoISh4IGluc3RhbmNlb2YgT2JqZWN0KSB8fCAhKHkgaW5zdGFuY2VvZiBPYmplY3QpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHhbXCJlcXVhbHNcIl0pIHJldHVybiB4LmVxdWFscyh5KTtcbiAgICBpZiAoISF4LnRvSlNPTiAmJiAhIXkudG9KU09OICYmICEheC5nZXRUeXBlICYmICEheS5nZXRUeXBlKSB7XG4gICAgICBpZiAoeC5pc0RpcG9zZWQgfHwgeS5pc0RpcG9zZWQpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmICh4LmdldFR5cGUoKSAhPT0geS5nZXRUeXBlKCkpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmICghIXgubmFtZSAmJiB4Lm5hbWUgIT09IHkubmFtZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgcmV0dXJuIHRoaXMuaXNUd29WYWx1ZUVxdWFscyh4LnRvSlNPTigpLCB5LnRvSlNPTigpKTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoeCkgJiYgQXJyYXkuaXNBcnJheSh5KSlcbiAgICAgIHJldHVybiBIZWxwZXJzLmlzQXJyYXlzRXF1YWwoeCwgeSwgaWdub3JlT3JkZXIpO1xuXG4gICAgZm9yICh2YXIgcCBpbiB4KSB7XG4gICAgICBpZiAoIXguaGFzT3duUHJvcGVydHkocCkpIGNvbnRpbnVlO1xuICAgICAgaWYgKCF5Lmhhc093blByb3BlcnR5KHApKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoeFtwXSA9PT0geVtwXSkgY29udGludWU7XG4gICAgICBpZiAodHlwZW9mIHhbcF0gIT09IFwib2JqZWN0XCIpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmICghdGhpcy5pc1R3b1ZhbHVlRXF1YWxzKHhbcF0sIHlbcF0pKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAocCBpbiB5KSB7XG4gICAgICBpZiAoeS5oYXNPd25Qcm9wZXJ0eShwKSAmJiAheC5oYXNPd25Qcm9wZXJ0eShwKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHJhbmRvbWl6ZUFycmF5PFQ+KGFycmF5OiBBcnJheTxUPik6IEFycmF5PFQ+IHtcbiAgICBmb3IgKHZhciBpID0gYXJyYXkubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkge1xuICAgICAgdmFyIGogPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAoaSArIDEpKTtcbiAgICAgIHZhciB0ZW1wID0gYXJyYXlbaV07XG4gICAgICBhcnJheVtpXSA9IGFycmF5W2pdO1xuICAgICAgYXJyYXlbal0gPSB0ZW1wO1xuICAgIH1cbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBnZXRVbmJpbmRWYWx1ZSh2YWx1ZTogYW55KTogYW55IHtcbiAgICBpZiAoISF2YWx1ZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgLy9kbyBub3QgcmV0dXJuIHRoZSBzYW1lIG9iamVjdCBpbnN0YW5jZSEhIVxuICAgICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlQ29weShvYmo6IGFueSkge1xuICAgIHZhciByZXM6IGFueSA9IHt9O1xuICAgIGlmICghb2JqKSByZXR1cm4gcmVzO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIHJlc1trZXldID0gb2JqW2tleV07XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBpc0NvbnZlcnRpYmxlVG9OdW1iZXIodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgIUFycmF5LmlzQXJyYXkodmFsdWUpICYmXG4gICAgICAhaXNOYU4odmFsdWUpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGlzTnVtYmVyKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoXG4gICAgICB0eXBlb2YgdmFsdWUgPT0gXCJzdHJpbmdcIiAmJlxuICAgICAgISF2YWx1ZSAmJlxuICAgICAgdmFsdWUuaW5kZXhPZihcIjB4XCIpID09IDAgJiZcbiAgICAgIHZhbHVlLmxlbmd0aCA+IDMyXG4gICAgKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAhaXNOYU4ocGFyc2VGbG9hdCh2YWx1ZSkpICYmIGlzRmluaXRlKHZhbHVlKTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGdldE1heExlbmd0aChtYXhMZW5ndGg6IG51bWJlciwgc3VydmV5TGVuZ3RoOiBudW1iZXIpOiBhbnkge1xuICAgIGlmIChtYXhMZW5ndGggPCAwKSB7XG4gICAgICBtYXhMZW5ndGggPSBzdXJ2ZXlMZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiBtYXhMZW5ndGggPiAwID8gbWF4TGVuZ3RoIDogbnVsbDtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGdldE51bWJlckJ5SW5kZXgoaW5kZXg6IG51bWJlciwgc3RhcnRJbmRleFN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoaW5kZXggPCAwKSByZXR1cm4gXCJcIjtcbiAgICB2YXIgc3RhcnRJbmRleCA9IDE7XG4gICAgdmFyIHByZWZpeCA9IFwiXCI7XG4gICAgdmFyIHBvc3RmaXggPSBcIi5cIjtcbiAgICB2YXIgaXNOdW1lcmljID0gdHJ1ZTtcbiAgICB2YXIgc3RySW5kZXggPSBcIkFcIjtcbiAgICB2YXIgc3RyID0gXCJcIjtcbiAgICBpZiAoISFzdGFydEluZGV4U3RyKSB7XG4gICAgICBzdHIgPSBzdGFydEluZGV4U3RyO1xuICAgICAgdmFyIGluZCA9IHN0ci5sZW5ndGggLSAxO1xuICAgICAgdmFyIGhhc0RpZ2l0ID0gZmFsc2U7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoSGVscGVycy5pc0NoYXJEaWdpdChzdHJbaV0pKSB7XG4gICAgICAgICAgaGFzRGlnaXQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgY2hlY2tMZXR0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAoaGFzRGlnaXQgJiYgIUhlbHBlcnMuaXNDaGFyRGlnaXQoc3RyW2luZF0pKSB8fFxuICAgICAgICAgIEhlbHBlcnMuaXNDaGFyTm90TGV0dGVyQW5kRGlnaXQoc3RyW2luZF0pXG4gICAgICAgICk7XG4gICAgICB9O1xuICAgICAgd2hpbGUgKGluZCA+PSAwICYmIGNoZWNrTGV0dGVyKCkpIGluZC0tO1xuICAgICAgdmFyIG5ld1Bvc3RmaXggPSBcIlwiO1xuICAgICAgaWYgKGluZCA8IHN0ci5sZW5ndGggLSAxKSB7XG4gICAgICAgIG5ld1Bvc3RmaXggPSBzdHIuc3Vic3RyKGluZCArIDEpO1xuICAgICAgICBzdHIgPSBzdHIuc3Vic3RyKDAsIGluZCArIDEpO1xuICAgICAgfVxuICAgICAgaW5kID0gc3RyLmxlbmd0aCAtIDE7XG4gICAgICB3aGlsZSAoaW5kID49IDApIHtcbiAgICAgICAgaWYgKGNoZWNrTGV0dGVyKCkpIGJyZWFrO1xuICAgICAgICBpbmQtLTtcbiAgICAgICAgaWYgKCFoYXNEaWdpdCkgYnJlYWs7XG4gICAgICB9XG4gICAgICBzdHJJbmRleCA9IHN0ci5zdWJzdHIoaW5kICsgMSk7XG4gICAgICBwcmVmaXggPSBzdHIuc3Vic3RyKDAsIGluZCArIDEpO1xuICAgICAgaWYgKHBhcnNlSW50KHN0ckluZGV4KSkgc3RhcnRJbmRleCA9IHBhcnNlSW50KHN0ckluZGV4KTtcbiAgICAgIGVsc2UgaWYgKHN0ckluZGV4Lmxlbmd0aCA9PSAxKSBpc051bWVyaWMgPSBmYWxzZTtcbiAgICAgIGlmICghIW5ld1Bvc3RmaXggfHwgISFwcmVmaXgpIHtcbiAgICAgICAgcG9zdGZpeCA9IG5ld1Bvc3RmaXg7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpc051bWVyaWMpIHJldHVybiBwcmVmaXggKyAoaW5kZXggKyBzdGFydEluZGV4KS50b1N0cmluZygpICsgcG9zdGZpeDtcbiAgICByZXR1cm4gKFxuICAgICAgcHJlZml4ICsgU3RyaW5nLmZyb21DaGFyQ29kZShzdHJJbmRleC5jaGFyQ29kZUF0KDApICsgaW5kZXgpICsgcG9zdGZpeFxuICAgICk7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBpc0NoYXJOb3RMZXR0ZXJBbmREaWdpdChjaDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNoLnRvVXBwZXJDYXNlKCkgPT0gY2gudG9Mb3dlckNhc2UoKSAmJiAhSGVscGVycy5pc0NoYXJEaWdpdChjaCk7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBpc0NoYXJEaWdpdChjaDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNoID49IFwiMFwiICYmIGNoIDw9IFwiOVwiO1xuICB9XG59XG5pZiAoISg8YW55PlN0cmluZy5wcm90b3R5cGUpW1wiZm9ybWF0XCJdKSB7XG4gICg8YW55PlN0cmluZy5wcm90b3R5cGUpW1wiZm9ybWF0XCJdID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgcmV0dXJuIHRoaXMucmVwbGFjZSgveyhcXGQrKX0vZywgZnVuY3Rpb24obWF0Y2g6IGFueSwgbnVtYmVyOiBhbnkpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgYXJnc1tudW1iZXJdICE9IFwidW5kZWZpbmVkXCIgPyBhcmdzW251bWJlcl0gOiBtYXRjaDtcbiAgICB9KTtcbiAgfTtcbn1cbiIsImltcG9ydCB7IElMb2NhbGl6YWJsZU93bmVyLCBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5pbXBvcnQge1xuICBKc29uT2JqZWN0LFxuICBKc29uT2JqZWN0UHJvcGVydHksXG4gIFNlcmlhbGl6ZXIsXG4gIEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLFxufSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBIZWxwZXJzIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuaW1wb3J0IHsgQ29uZGl0aW9uUnVubmVyIH0gZnJvbSBcIi4vY29uZGl0aW9uc1wiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB7IElTdXJ2ZXkgfSBmcm9tIFwiLi9iYXNlLWludGVyZmFjZXNcIjtcbmltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcblxuLyoqXG4gKiBBcnJheSBvZiBJdGVtVmFsdWUgaXMgdXNlZCBpbiBjaGVja294LCBkcm9wZG93biBhbmQgcmFkaW9ncm91cCBjaG9pY2VzLCBtYXRyaXggY29sdW1ucyBhbmQgcm93cy5cbiAqIEl0IGhhcyB0d28gbWFpbiBwcm9wZXJ0aWVzOiB2YWx1ZSBhbmQgdGV4dC4gSWYgdGV4dCBpcyBlbXB0eSwgdmFsdWUgaXMgdXNlZCBmb3IgZGlzcGxheWluZy5cbiAqIFRoZSB0ZXh0IHByb3BlcnR5IGlzIGxvY2FsaXphYmxlIGFuZCBzdXBwb3J0IG1hcmtkb3duLlxuICovXG5leHBvcnQgY2xhc3MgSXRlbVZhbHVlIGV4dGVuZHMgQmFzZSB7XG4gIFtpbmRleDogc3RyaW5nXTogYW55O1xuICBwdWJsaWMgc3RhdGljIGdldCBTZXBhcmF0b3IoKSB7XG4gICAgcmV0dXJuIHNldHRpbmdzLml0ZW1WYWx1ZVNlcGFyYXRvcjtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHNldCBTZXBhcmF0b3IodmFsOiBzdHJpbmcpIHtcbiAgICBzZXR0aW5ncy5pdGVtVmFsdWVTZXBhcmF0b3IgPSB2YWw7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBjcmVhdGVBcnJheShsb2NPd25lcjogSUxvY2FsaXphYmxlT3duZXIpOiBBcnJheTxJdGVtVmFsdWU+IHtcbiAgICB2YXIgaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4gPSBbXTtcbiAgICBJdGVtVmFsdWUuc2V0dXBBcnJheShpdGVtcywgbG9jT3duZXIpO1xuICAgIHJldHVybiBpdGVtcztcbiAgfVxuICBwdWJsaWMgc3RhdGljIHNldHVwQXJyYXkoXG4gICAgaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4sXG4gICAgbG9jT3duZXI6IElMb2NhbGl6YWJsZU93bmVyXG4gICkge1xuICAgIGl0ZW1zLnB1c2ggPSBmdW5jdGlvbih2YWx1ZSk6IG51bWJlciB7XG4gICAgICB2YXIgcmVzdWx0ID0gQXJyYXkucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLCB2YWx1ZSk7XG4gICAgICB2YWx1ZS5sb2NPd25lciA9IGxvY093bmVyO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIGl0ZW1zLnVuc2hpZnQgPSBmdW5jdGlvbih2YWx1ZSk6IG51bWJlciB7XG4gICAgICB2YXIgcmVzdWx0ID0gQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuY2FsbCh0aGlzLCB2YWx1ZSk7XG4gICAgICB2YWx1ZS5sb2NPd25lciA9IGxvY093bmVyO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIGl0ZW1zLnNwbGljZSA9IGZ1bmN0aW9uKFxuICAgICAgc3RhcnQ/OiBudW1iZXIsXG4gICAgICBkZWxldGVDb3VudD86IG51bWJlcixcbiAgICAgIC4uLml0ZW1zOiBJdGVtVmFsdWVbXVxuICAgICk6IEl0ZW1WYWx1ZVtdIHtcbiAgICAgIHZhciByZXN1bHQgPSBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmNhbGwoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIHN0YXJ0LFxuICAgICAgICBkZWxldGVDb3VudCxcbiAgICAgICAgLi4uaXRlbXNcbiAgICAgICk7XG4gICAgICBpZiAoIWl0ZW1zKSBpdGVtcyA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpdGVtc1tpXS5sb2NPd25lciA9IGxvY093bmVyO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgc2V0RGF0YShpdGVtczogQXJyYXk8SXRlbVZhbHVlPiwgdmFsdWVzOiBBcnJheTxhbnk+KSB7XG4gICAgaXRlbXMubGVuZ3RoID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gdmFsdWVzW2ldO1xuICAgICAgdmFyIGl0ZW06IEl0ZW1WYWx1ZTtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUuZ2V0VHlwZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGl0ZW0gPSBTZXJpYWxpemVyLmNyZWF0ZUNsYXNzKHZhbHVlLmdldFR5cGUoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpdGVtID0gbmV3IEl0ZW1WYWx1ZShudWxsKTtcbiAgICAgIH1cbiAgICAgIGl0ZW0uc2V0RGF0YSh2YWx1ZSk7XG4gICAgICBpZiAoISF2YWx1ZS5vcmlnaW5hbEl0ZW0pIHtcbiAgICAgICAgaXRlbS5vcmlnaW5hbEl0ZW0gPSB2YWx1ZS5vcmlnaW5hbEl0ZW07XG4gICAgICB9XG4gICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgc3RhdGljIGdldERhdGEoaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4pOiBhbnkge1xuICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXkoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXN1bHQucHVzaChpdGVtc1tpXS5nZXREYXRhKCkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgZ2V0SXRlbUJ5VmFsdWUoaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4sIHZhbDogYW55KTogSXRlbVZhbHVlIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaXRlbXMpKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCB2YWxJc0VtcHR5ID0gSGVscGVycy5pc1ZhbHVlRW1wdHkodmFsKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodmFsSXNFbXB0eSAmJiBIZWxwZXJzLmlzVmFsdWVFbXB0eShpdGVtc1tpXS52YWx1ZSkpIHJldHVybiBpdGVtc1tpXTtcbiAgICAgIGlmIChIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMoaXRlbXNbaV0udmFsdWUsIHZhbCkpIHJldHVybiBpdGVtc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBnZXRUZXh0T3JIdG1sQnlWYWx1ZShcbiAgICBpdGVtczogQXJyYXk8SXRlbVZhbHVlPixcbiAgICB2YWw6IGFueVxuICApOiBzdHJpbmcge1xuICAgIHZhciBpdGVtID0gSXRlbVZhbHVlLmdldEl0ZW1CeVZhbHVlKGl0ZW1zLCB2YWwpO1xuICAgIHJldHVybiBpdGVtICE9PSBudWxsID8gaXRlbS5sb2NUZXh0LnRleHRPckh0bWwgOiBcIlwiO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgbG9jU3Ryc0NoYW5nZWQoaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpdGVtc1tpXS5sb2NUZXh0LnN0ckNoYW5nZWQoKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIHN0YXRpYyBydW5Db25kaXRpb25zRm9ySXRlbXMoXG4gICAgaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4sXG4gICAgZmlsdGVyZWRJdGVtczogQXJyYXk8SXRlbVZhbHVlPixcbiAgICBydW5uZXI6IENvbmRpdGlvblJ1bm5lcixcbiAgICB2YWx1ZXM6IGFueSxcbiAgICBwcm9wZXJ0aWVzOiBhbnksXG4gICAgdXNlSXRlbUV4cHJlc3Npb246IGJvb2xlYW4gPSB0cnVlXG4gICk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBJdGVtVmFsdWUucnVuQ29uZGl0aW9uc0Zvckl0ZW1zQ29yZShcbiAgICAgIGl0ZW1zLFxuICAgICAgZmlsdGVyZWRJdGVtcyxcbiAgICAgIHJ1bm5lcixcbiAgICAgIHZhbHVlcyxcbiAgICAgIHByb3BlcnRpZXMsXG4gICAgICB0cnVlLFxuICAgICAgdXNlSXRlbUV4cHJlc3Npb25cbiAgICApO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgcnVuRW5hYmxlZENvbmRpdGlvbnNGb3JJdGVtcyhcbiAgICBpdGVtczogQXJyYXk8SXRlbVZhbHVlPixcbiAgICBydW5uZXI6IENvbmRpdGlvblJ1bm5lcixcbiAgICB2YWx1ZXM6IGFueSxcbiAgICBwcm9wZXJ0aWVzOiBhbnksXG4gICAgb25JdGVtQ2FsbEJhY2s/OiAoaXRlbTogSXRlbVZhbHVlKSA9PiBib29sZWFuXG4gICk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBJdGVtVmFsdWUucnVuQ29uZGl0aW9uc0Zvckl0ZW1zQ29yZShcbiAgICAgIGl0ZW1zLFxuICAgICAgbnVsbCxcbiAgICAgIHJ1bm5lcixcbiAgICAgIHZhbHVlcyxcbiAgICAgIHByb3BlcnRpZXMsXG4gICAgICBmYWxzZSxcbiAgICAgIHRydWUsXG4gICAgICBvbkl0ZW1DYWxsQmFja1xuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBzdGF0aWMgcnVuQ29uZGl0aW9uc0Zvckl0ZW1zQ29yZShcbiAgICBpdGVtczogQXJyYXk8SXRlbVZhbHVlPixcbiAgICBmaWx0ZXJlZEl0ZW1zOiBBcnJheTxJdGVtVmFsdWU+LFxuICAgIHJ1bm5lcjogQ29uZGl0aW9uUnVubmVyLFxuICAgIHZhbHVlczogYW55LFxuICAgIHByb3BlcnRpZXM6IGFueSxcbiAgICBpc1Zpc2libGU6IGJvb2xlYW4sXG4gICAgdXNlSXRlbUV4cHJlc3Npb246IGJvb2xlYW4gPSB0cnVlLFxuICAgIG9uSXRlbUNhbGxCYWNrPzogKGl0ZW06IEl0ZW1WYWx1ZSkgPT4gYm9vbGVhblxuICApOiBib29sZWFuIHtcbiAgICBpZiAoIXZhbHVlcykge1xuICAgICAgdmFsdWVzID0ge307XG4gICAgfVxuICAgIHZhciBpdGVtVmFsdWUgPSB2YWx1ZXNbXCJpdGVtXCJdO1xuICAgIHZhciBjaG9pY2VWYWx1ZSA9IHZhbHVlc1tcImNob2ljZVwiXTtcbiAgICB2YXIgaGFzQ2hhbmRlZCA9IGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpdGVtID0gaXRlbXNbaV07XG4gICAgICB2YWx1ZXNbXCJpdGVtXCJdID0gaXRlbS52YWx1ZTtcbiAgICAgIHZhbHVlc1tcImNob2ljZVwiXSA9IGl0ZW0udmFsdWU7XG4gICAgICB2YXIgaXRlbVJ1bm5lciA9XG4gICAgICAgIHVzZUl0ZW1FeHByZXNzaW9uICYmICEhaXRlbS5nZXRDb25kaXRpb25SdW5uZXJcbiAgICAgICAgICA/IGl0ZW0uZ2V0Q29uZGl0aW9uUnVubmVyKGlzVmlzaWJsZSlcbiAgICAgICAgICA6IGZhbHNlO1xuICAgICAgaWYgKCFpdGVtUnVubmVyKSB7XG4gICAgICAgIGl0ZW1SdW5uZXIgPSBydW5uZXI7XG4gICAgICB9XG4gICAgICB2YXIgbmV3VmFsdWUgPSB0cnVlO1xuICAgICAgaWYgKGl0ZW1SdW5uZXIpIHtcbiAgICAgICAgbmV3VmFsdWUgPSBpdGVtUnVubmVyLnJ1bih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgICAgfVxuICAgICAgaWYgKG5ld1ZhbHVlICYmICEhb25JdGVtQ2FsbEJhY2spIHtcbiAgICAgICAgbmV3VmFsdWUgPSBvbkl0ZW1DYWxsQmFjayhpdGVtKTtcbiAgICAgIH1cbiAgICAgIGlmICghIWZpbHRlcmVkSXRlbXMgJiYgbmV3VmFsdWUpIHtcbiAgICAgICAgZmlsdGVyZWRJdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgfVxuICAgICAgdmFyIG9sZFZhbHVlID0gaXNWaXNpYmxlID8gaXRlbS5pc1Zpc2libGUgOiBpdGVtLmlzRW5hYmxlZDtcbiAgICAgIGlmIChuZXdWYWx1ZSAhPSBvbGRWYWx1ZSkge1xuICAgICAgICBoYXNDaGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKGlzVmlzaWJsZSkge1xuICAgICAgICAgIGlmICghIWl0ZW0uc2V0SXNWaXNpYmxlKSBpdGVtLnNldElzVmlzaWJsZShuZXdWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCEhaXRlbS5zZXRJc0VuYWJsZWQpIGl0ZW0uc2V0SXNFbmFibGVkKG5ld1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXRlbVZhbHVlKSB7XG4gICAgICB2YWx1ZXNbXCJpdGVtXCJdID0gaXRlbVZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdmFsdWVzW1wiaXRlbVwiXTtcbiAgICB9XG4gICAgaWYgKGNob2ljZVZhbHVlKSB7XG4gICAgICB2YWx1ZXNbXCJjaG9pY2VcIl0gPSBjaG9pY2VWYWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHZhbHVlc1tcImNob2ljZVwiXTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc0NoYW5kZWQ7XG4gIH1cbiAgcHVibGljIG93bmVyUHJvcGVydHlOYW1lOiBzdHJpbmcgPSBcIlwiO1xuICAvL3ByaXZhdGUgaXRlbVZhbHVlOiBhbnk7XG4gIHByaXZhdGUgbG9jVGV4dFZhbHVlOiBMb2NhbGl6YWJsZVN0cmluZztcbiAgcHJpdmF0ZSBpc1Zpc2libGVWYWx1ZTogYm9vbGVhbiA9IHRydWU7XG4gIHByaXZhdGUgdmlzaWJsZUNvbmRpdGlvblJ1bm5lcjogQ29uZGl0aW9uUnVubmVyO1xuICBwcml2YXRlIGVuYWJsZUNvbmRpdGlvblJ1bm5lcjogQ29uZGl0aW9uUnVubmVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHZhbHVlOiBhbnksXG4gICAgdGV4dDogc3RyaW5nID0gbnVsbCxcbiAgICBwcm90ZWN0ZWQgdHlwZU5hbWUgPSBcIml0ZW12YWx1ZVwiXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5sb2NUZXh0VmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcobnVsbCwgdHJ1ZSk7XG4gICAgdGhpcy5sb2NUZXh0VmFsdWUub25TdHJDaGFuZ2VkID0gKG9sZFZhbHVlOiBzdHJpbmcsIG5ld1ZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChuZXdWYWx1ZSA9PSB0aGlzLnZhbHVlKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgdGhpcy5wcm9wZXJ0eVZhbHVlQ2hhbmdlZChcInRleHRcIiwgb2xkVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICB9O1xuICAgIHRoaXMubG9jVGV4dFZhbHVlLm9uR2V0VGV4dENhbGxiYWNrID0gKHR4dCkgPT4ge1xuICAgICAgcmV0dXJuIHR4dFxuICAgICAgICA/IHR4dFxuICAgICAgICA6ICFIZWxwZXJzLmlzVmFsdWVFbXB0eSh0aGlzLnZhbHVlKVxuICAgICAgICA/IHRoaXMudmFsdWUudG9TdHJpbmcoKVxuICAgICAgICA6IG51bGw7XG4gICAgfTtcbiAgICBpZiAodGV4dCkgdGhpcy5sb2NUZXh0LnRleHQgPSB0ZXh0O1xuICAgIGlmICghIXZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgdGhpcy5zZXREYXRhKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5nZXRUeXBlKCkgIT0gXCJpdGVtdmFsdWVcIikge1xuICAgICAgQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb24uY3JlYXRlUHJvcGVydGllcyh0aGlzKTtcbiAgICB9XG4gICAgdGhpcy5vbkNyZWF0aW5nKCk7XG4gIH1cblxuICBwdWJsaWMgb25DcmVhdGluZygpOiBhbnkge31cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gISF0aGlzLnR5cGVOYW1lID8gdGhpcy50eXBlTmFtZSA6IFwiaXRlbXZhbHVlXCI7XG4gIH1cbiAgcHVibGljIGdldFN1cnZleShsaXZlOiBib29sZWFuID0gZmFsc2UpOiBJU3VydmV5IHtcbiAgICByZXR1cm4gISF0aGlzLmxvY093bmVyICYmICEhKDxhbnk+dGhpcy5sb2NPd25lcilbXCJnZXRTdXJ2ZXlcIl1cbiAgICAgID8gKDxhbnk+dGhpcy5sb2NPd25lcikuZ2V0U3VydmV5KClcbiAgICAgIDogbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0TG9jYWxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh0aGlzLmxvY1RleHQgJiYgdGhpcy5sb2NUZXh0LmxvY2FsZSkgfHwgXCJcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGxvY1RleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmxvY1RleHRWYWx1ZTtcbiAgfVxuICBzZXRMb2NUZXh0KGxvY1RleHQ6IExvY2FsaXphYmxlU3RyaW5nKSB7XG4gICAgdGhpcy5sb2NUZXh0VmFsdWUgPSBsb2NUZXh0O1xuICB9XG4gIHB1YmxpYyBnZXQgbG9jT3duZXIoKTogSUxvY2FsaXphYmxlT3duZXIge1xuICAgIHJldHVybiB0aGlzLmxvY1RleHQub3duZXI7XG4gIH1cbiAgcHVibGljIHNldCBsb2NPd25lcih2YWx1ZTogSUxvY2FsaXphYmxlT3duZXIpIHtcbiAgICB0aGlzLmxvY1RleHQub3duZXIgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZhbHVlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdmFsdWUobmV3VmFsdWU6IGFueSkge1xuICAgIHZhciB0ZXh0OiBzdHJpbmcgPSB1bmRlZmluZWQ7XG4gICAgaWYgKCFIZWxwZXJzLmlzVmFsdWVFbXB0eShuZXdWYWx1ZSkpIHtcbiAgICAgIHZhciBzdHI6IHN0cmluZyA9IG5ld1ZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICB2YXIgaW5kZXggPSBzdHIuaW5kZXhPZihzZXR0aW5ncy5pdGVtVmFsdWVTZXBhcmF0b3IpO1xuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgbmV3VmFsdWUgPSBzdHIuc2xpY2UoMCwgaW5kZXgpO1xuICAgICAgICB0ZXh0ID0gc3RyLnNsaWNlKGluZGV4ICsgMSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInZhbHVlXCIsIG5ld1ZhbHVlKTtcbiAgICBpZiAoISF0ZXh0KSB7XG4gICAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0IGhhc1RleHQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubG9jVGV4dC5wdXJlVGV4dCA/IHRydWUgOiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgZ2V0IHB1cmVUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubG9jVGV4dC5wdXJlVGV4dDtcbiAgfVxuICBwdWJsaWMgc2V0IHB1cmVUZXh0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy50ZXh0ID0gdmFsO1xuICB9XG4gIHB1YmxpYyBnZXQgdGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmxvY1RleHQuY2FsY3VsYXRlZFRleHQ7IC8vVE9ETzogaXQgd2lsbCBiZSBjb3JyZWN0IHRvIHVzZSB0aGlzLmxvY1RleHQudGV4dCwgaG93ZXZlciBpdCB3b3VsZCByZXF1aXJlIGEgbG90IG9mIHJld3JpdGluZyBpbiBDcmVhdG9yXG4gIH1cbiAgcHVibGljIHNldCB0ZXh0KG5ld1RleHQ6IHN0cmluZykge1xuICAgIHRoaXMubG9jVGV4dC50ZXh0ID0gbmV3VGV4dDtcbiAgfVxuICBwdWJsaWMgZ2V0IGNhbGN1bGF0ZWRUZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmxvY1RleHQuY2FsY3VsYXRlZFRleHQ7XG4gIH1cbiAgcHVibGljIGdldERhdGEoKTogYW55IHtcbiAgICB2YXIganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgaWYgKCEhanNvbltcInZhbHVlXCJdICYmICEhanNvbltcInZhbHVlXCJdW1wicG9zXCJdKSB7XG4gICAgICBkZWxldGUganNvbltcInZhbHVlXCJdW1wicG9zXCJdO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LmtleXMoanNvbikubGVuZ3RoID09IDEgJiYgIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KGpzb25bXCJ2YWx1ZVwiXSkpXG4gICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICByZXR1cm4ganNvbjtcbiAgfVxuICBwdWJsaWMgdG9KU09OKCk6IGFueSB7XG4gICAgdmFyIHJlcyA9IHt9O1xuICAgIHZhciBwcm9wZXJ0aWVzID0gU2VyaWFsaXplci5nZXRQcm9wZXJ0aWVzKHRoaXMuZ2V0VHlwZSgpKTtcbiAgICBpZiAoIXByb3BlcnRpZXMgfHwgcHJvcGVydGllcy5sZW5ndGggPT0gMCkge1xuICAgICAgcHJvcGVydGllcyA9IFNlcmlhbGl6ZXIuZ2V0UHJvcGVydGllcyhcIml0ZW12YWx1ZVwiKTtcbiAgICB9XG4gICAgdmFyIGpzb09iaiA9IG5ldyBKc29uT2JqZWN0KCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBqc29PYmoudmFsdWVUb0pzb24odGhpcywgcmVzLCBwcm9wZXJ0aWVzW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgc2V0RGF0YSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKEhlbHBlcnMuaXNWYWx1ZUVtcHR5KHZhbHVlKSkgcmV0dXJuO1xuICAgIGlmICh0eXBlb2YgdmFsdWUudmFsdWUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHZhciBqc29uID0gdmFsdWU7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlLnRvSlNPTiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGpzb24gPSAoPEJhc2U+dmFsdWUpLnRvSlNPTigpO1xuICAgICAgfVxuICAgICAgbmV3IEpzb25PYmplY3QoKS50b09iamVjdChqc29uLCB0aGlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICB0aGlzLmxvY1RleHQuc3RyQ2hhbmdlZCgpO1xuICB9XG4gIHB1YmxpYyBnZXQgdmlzaWJsZUlmKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVJZlwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHZpc2libGVJZih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVJZlwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgZW5hYmxlSWYoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZW5hYmxlSWZcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBlbmFibGVJZih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImVuYWJsZUlmXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBpc1Zpc2libGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWaXNpYmxlVmFsdWU7XG4gIH1cbiAgcHVibGljIHNldElzVmlzaWJsZSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmlzVmlzaWJsZVZhbHVlID0gdmFsO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNFbmFibGVkKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc0VuYWJsZWRcIiwgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIHNldElzRW5hYmxlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc0VuYWJsZWRcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgYWRkVXNlZExvY2FsZXMobG9jYWxlczogQXJyYXk8c3RyaW5nPikge1xuICAgIHRoaXMuQWRkTG9jU3RyaW5nVG9Vc2VkTG9jYWxlcyh0aGlzLmxvY1RleHRWYWx1ZSwgbG9jYWxlcyk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uUHJvcGVydHlWYWx1ZUNoYW5nZWQobmFtZTogc3RyaW5nLCBvbGRWYWx1ZTogYW55LCBuZXdWYWx1ZTogYW55KSB7XG4gICAgaWYgKG5hbWUgPT09IFwidmFsdWVcIiAmJiAhdGhpcy5oYXNUZXh0KSB7XG4gICAgICB0aGlzLmxvY1RleHQub25DaGFuZ2VkKCk7XG4gICAgfVxuICAgIHZhciBmdW5jTmFtZSA9IFwiaXRlbVZhbHVlUHJvcGVydHlDaGFuZ2VkXCI7XG4gICAgaWYgKCF0aGlzLmxvY093bmVyIHx8ICEoPGFueT50aGlzLmxvY093bmVyKVtmdW5jTmFtZV0pIHJldHVybjtcbiAgICAoPGFueT50aGlzLmxvY093bmVyKVtmdW5jTmFtZV0odGhpcywgbmFtZSwgb2xkVmFsdWUsIG5ld1ZhbHVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q29uZGl0aW9uUnVubmVyKGlzVmlzaWJsZTogYm9vbGVhbikge1xuICAgIGlmIChpc1Zpc2libGUpIHJldHVybiB0aGlzLmdldFZpc2libGVDb25kaXRpb25SdW5uZXIoKTtcbiAgICByZXR1cm4gdGhpcy5nZXRFbmFibGVDb25kaXRpb25SdW5uZXIoKTtcbiAgfVxuICBwcml2YXRlIGdldFZpc2libGVDb25kaXRpb25SdW5uZXIoKTogQ29uZGl0aW9uUnVubmVyIHtcbiAgICBpZiAoIXRoaXMudmlzaWJsZUlmKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoIXRoaXMudmlzaWJsZUNvbmRpdGlvblJ1bm5lcilcbiAgICAgIHRoaXMudmlzaWJsZUNvbmRpdGlvblJ1bm5lciA9IG5ldyBDb25kaXRpb25SdW5uZXIodGhpcy52aXNpYmxlSWYpO1xuICAgIHRoaXMudmlzaWJsZUNvbmRpdGlvblJ1bm5lci5leHByZXNzaW9uID0gdGhpcy52aXNpYmxlSWY7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZUNvbmRpdGlvblJ1bm5lcjtcbiAgfVxuICBwcml2YXRlIGdldEVuYWJsZUNvbmRpdGlvblJ1bm5lcigpOiBDb25kaXRpb25SdW5uZXIge1xuICAgIGlmICghdGhpcy5lbmFibGVJZikgcmV0dXJuIG51bGw7XG4gICAgaWYgKCF0aGlzLmVuYWJsZUNvbmRpdGlvblJ1bm5lcilcbiAgICAgIHRoaXMuZW5hYmxlQ29uZGl0aW9uUnVubmVyID0gbmV3IENvbmRpdGlvblJ1bm5lcih0aGlzLmVuYWJsZUlmKTtcbiAgICB0aGlzLmVuYWJsZUNvbmRpdGlvblJ1bm5lci5leHByZXNzaW9uID0gdGhpcy5lbmFibGVJZjtcbiAgICByZXR1cm4gdGhpcy5lbmFibGVDb25kaXRpb25SdW5uZXI7XG4gIH1cbiAgcHVibGljIG9yaWdpbmFsSXRlbTogYW55O1xufVxuXG5CYXNlLmNyZWF0ZUl0ZW1WYWx1ZSA9IGZ1bmN0aW9uKHNvdXJjZTogYW55LCB0eXBlPzogc3RyaW5nKTogYW55IHtcbiAgdmFyIGl0ZW0gPSBudWxsO1xuICBpZiAoISF0eXBlKSB7XG4gICAgaXRlbSA9IEpzb25PYmplY3QubWV0YURhdGEuY3JlYXRlQ2xhc3ModHlwZSwge30pO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBzb3VyY2UuZ2V0VHlwZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgaXRlbSA9IG5ldyBJdGVtVmFsdWUobnVsbCwgdW5kZWZpbmVkLCBzb3VyY2UuZ2V0VHlwZSgpKTtcbiAgfSBlbHNlIHtcbiAgICBpdGVtID0gbmV3IEl0ZW1WYWx1ZShudWxsKTtcbiAgfVxuICBpdGVtLnNldERhdGEoc291cmNlKTtcbiAgcmV0dXJuIGl0ZW07XG59O1xuQmFzZS5pdGVtVmFsdWVMb2NTdHJDaGFuZ2VkID0gZnVuY3Rpb24oYXJyOiBBcnJheTxhbnk+KTogdm9pZCB7XG4gIEl0ZW1WYWx1ZS5sb2NTdHJzQ2hhbmdlZChhcnIpO1xufTtcbkpzb25PYmplY3RQcm9wZXJ0eS5nZXRJdGVtVmFsdWVzRGVmYXVsdFZhbHVlID0gZnVuY3Rpb24odmFsOiBhbnkpOiBhbnkge1xuICB2YXIgcmVzID0gbmV3IEFycmF5PEl0ZW1WYWx1ZT4oKTtcbiAgSXRlbVZhbHVlLnNldERhdGEocmVzLCB2YWwgfHwgW10pO1xuICByZXR1cm4gcmVzO1xufTtcblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJpdGVtdmFsdWVcIixcbiAgW1xuICAgIFwiIXZhbHVlXCIsXG4gICAge1xuICAgICAgbmFtZTogXCJ0ZXh0XCIsXG4gICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jVGV4dFwiLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcInZpc2libGVJZjpjb25kaXRpb25cIiwgc2hvd01vZGU6IFwiZm9ybVwiIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJlbmFibGVJZjpjb25kaXRpb25cIixcbiAgICAgIHNob3dNb2RlOiBcImZvcm1cIixcbiAgICAgIHZpc2libGVJZjogKG9iajogSXRlbVZhbHVlKTogYm9vbGVhbiA9PiB7XG4gICAgICAgIHJldHVybiAhb2JqIHx8IG9iai5vd25lclByb3BlcnR5TmFtZSAhPT0gXCJyYXRlVmFsdWVzXCI7XG4gICAgICB9LFxuICAgIH0sXG4gIF0sXG4gICh2YWx1ZTogYW55KSA9PiBuZXcgSXRlbVZhbHVlKHZhbHVlKVxuKTtcbiIsImltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IEhlbHBlcnMsIEhhc2hUYWJsZSB9IGZyb20gXCIuL2hlbHBlcnNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJUHJvcGVydHlEZWNvcmF0b3JPcHRpb25zIHtcbiAgZGVmYXVsdFZhbHVlPzogYW55O1xuICBkZWZhdWx0U291cmNlPzogc3RyaW5nO1xuICBsb2NhbGl6YWJsZT86XG4gICAgfCB7IG5hbWU6IHN0cmluZzsgb25HZXRUZXh0Q2FsbGJhY2s/OiAoc3RyOiBzdHJpbmcpID0+IHN0cmluZyB9XG4gICAgfCBib29sZWFuO1xuICBvblNldD86ICh2YWw6IGFueSwgdGFyZ2V0OiBhbnkpID0+IHZvaWQ7XG59XG5cbmZ1bmN0aW9uIGVuc3VyZUxvY1N0cmluZyhcbiAgdGFyZ2V0OiBhbnksXG4gIG9wdGlvbnM6IElQcm9wZXJ0eURlY29yYXRvck9wdGlvbnMsXG4gIGtleTogc3RyaW5nXG4pIHtcbiAgbGV0IGxvY1N0cmluZyA9IHRhcmdldC5nZXRMb2NhbGl6YWJsZVN0cmluZyhrZXkpO1xuICBpZiAoIWxvY1N0cmluZykge1xuICAgIGxvY1N0cmluZyA9IHRhcmdldC5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhrZXksIHRhcmdldCwgdHJ1ZSk7XG4gICAgaWYgKFxuICAgICAgdHlwZW9mIG9wdGlvbnMubG9jYWxpemFibGUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgIHR5cGVvZiBvcHRpb25zLmxvY2FsaXphYmxlLm9uR2V0VGV4dENhbGxiYWNrID09PSBcImZ1bmN0aW9uXCJcbiAgICApIHtcbiAgICAgIGxvY1N0cmluZy5vbkdldFRleHRDYWxsYmFjayA9IG9wdGlvbnMubG9jYWxpemFibGUub25HZXRUZXh0Q2FsbGJhY2s7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eShvcHRpb25zPzogSVByb3BlcnR5RGVjb3JhdG9yT3B0aW9ucykge1xuICByZXR1cm4gZnVuY3Rpb24odGFyZ2V0OiBhbnksIGtleTogc3RyaW5nKSB7XG4gICAgaWYgKCFvcHRpb25zIHx8ICFvcHRpb25zLmxvY2FsaXphYmxlKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShrZXkpO1xuICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKCEhb3B0aW9ucykge1xuICAgICAgICAgICAgaWYob3B0aW9ucy5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihvcHRpb25zLmRlZmF1bHRTb3VyY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpc1tvcHRpb25zLmRlZmF1bHRTb3VyY2VdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbDogYW55KSB7XG4gICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKGtleSwgdmFsKTtcbiAgICAgICAgICBpZiAoISFvcHRpb25zICYmIG9wdGlvbnMub25TZXQpIHtcbiAgICAgICAgICAgIG9wdGlvbnMub25TZXQodmFsLCB0aGlzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZW5zdXJlTG9jU3RyaW5nKHRoaXMsIG9wdGlvbnMsIGtleSk7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KGtleSkgfHxcbiAgICAgICAgICAgIG9wdGlvbnMuZGVmYXVsdFZhbHVlIHx8XG4gICAgICAgICAgICB0aGlzW29wdGlvbnMuZGVmYXVsdFNvdXJjZV1cbiAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbDogYW55KSB7XG4gICAgICAgICAgZW5zdXJlTG9jU3RyaW5nKHRoaXMsIG9wdGlvbnMsIGtleSk7XG4gICAgICAgICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoa2V5LCB2YWwpO1xuICAgICAgICAgIGlmICghIW9wdGlvbnMgJiYgb3B0aW9ucy5vblNldCkge1xuICAgICAgICAgICAgb3B0aW9ucy5vblNldCh2YWwsIHRoaXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAgICB0YXJnZXQsXG4gICAgICAgIG9wdGlvbnMubG9jYWxpemFibGUgPT09IHRydWVcbiAgICAgICAgICA/IFwibG9jXCIgKyBrZXkuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBrZXkuc2xpY2UoMSlcbiAgICAgICAgICA6IG9wdGlvbnMubG9jYWxpemFibGUubmFtZSxcbiAgICAgICAge1xuICAgICAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBlbnN1cmVMb2NTdHJpbmcodGhpcywgb3B0aW9ucywga2V5KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKGtleSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUFycmF5UHJvcGVydHlEZWNvcmF0b3JPcHRpb25zIHtcbiAgb25QdXNoPzogYW55O1xuICBvblJlbW92ZT86IGFueTtcbiAgb25TZXQ/OiAodmFsOiBhbnksIHRhcmdldDogYW55KSA9PiB2b2lkO1xufVxuXG5mdW5jdGlvbiBlbnN1cmVBcnJheShcbiAgdGFyZ2V0OiBhbnksXG4gIG9wdGlvbnM6IElBcnJheVByb3BlcnR5RGVjb3JhdG9yT3B0aW9ucyxcbiAga2V5OiBzdHJpbmdcbikge1xuICB0YXJnZXQuZW5zdXJlQXJyYXkoXG4gICAga2V5LFxuICAgICEhb3B0aW9ucyA/IG9wdGlvbnMub25QdXNoIDogbnVsbCxcbiAgICAhIW9wdGlvbnMgPyBvcHRpb25zLm9uUmVtb3ZlIDogbnVsbFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlBcnJheShvcHRpb25zPzogSUFycmF5UHJvcGVydHlEZWNvcmF0b3JPcHRpb25zKSB7XG4gIHJldHVybiBmdW5jdGlvbih0YXJnZXQ6IGFueSwga2V5OiBzdHJpbmcpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIGVuc3VyZUFycmF5KHRoaXMsIG9wdGlvbnMsIGtleSk7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoa2V5KTtcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uKHZhbDogYW55KSB7XG4gICAgICAgIGVuc3VyZUFycmF5KHRoaXMsIG9wdGlvbnMsIGtleSk7XG4gICAgICAgIGNvbnN0IGFyciA9IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShrZXkpO1xuICAgICAgICBpZiAodmFsID09PSBhcnIpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFycikge1xuICAgICAgICAgIGFyci5zcGxpY2UoMCwgYXJyLmxlbmd0aCwgLi4uKHZhbCB8fCBbXSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShrZXksIHZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEhb3B0aW9ucyAmJiBvcHRpb25zLm9uU2V0KSB7XG4gICAgICAgICAgb3B0aW9ucy5vblNldCh2YWwsIHRoaXMpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElPYmplY3Qge1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbi8qKlxuICogQ29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgYSBwcm9wZXJ0eSBvZiBhIHN1cnZleSBlbGVtZW50IChwYWdlLCBwYW5lbCwgcXVlc3Rpb25zLCBhbmQgZXRjKS5cbiAqIEBzZWUgYWRkUHJvcGVydHlcbiAqIEBzZWUgcmVtb3ZlUHJvcGVydHlcbiAqIEBzZWUgW0FkZCBQcm9wZXJ0aWVzXShodHRwczovL3N1cnZleWpzLmlvL0RvY3VtZW50YXRpb24vU3VydmV5LUNyZWF0b3IjYWRkcHJvcGVydGllcylcbiAqIEBzZWUgW1JlbW92ZSBQcm9wZXJ0aWVzXShodHRwczovL3N1cnZleWpzLmlvL0RvY3VtZW50YXRpb24vU3VydmV5LUNyZWF0b3IjcmVtb3ZlcHJvcGVydGllcylcbiAqL1xuZXhwb3J0IGNsYXNzIEpzb25PYmplY3RQcm9wZXJ0eSBpbXBsZW1lbnRzIElPYmplY3Qge1xuICBwdWJsaWMgc3RhdGljIGdldEl0ZW1WYWx1ZXNEZWZhdWx0VmFsdWU6ICh2YWw6IGFueSkgPT4gYW55O1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIHByaXZhdGUgc3RhdGljIEluZGV4ID0gMTtcbiAgcHJpdmF0ZSBzdGF0aWMgbWVyZ2FibGVWYWx1ZXMgPSBbXG4gICAgXCJ0eXBlVmFsdWVcIixcbiAgICBcImNob2ljZXNWYWx1ZVwiLFxuICAgIFwiYmFzZVZhbHVlXCIsXG4gICAgXCJyZWFkT25seVZhbHVlXCIsXG4gICAgXCJ2aXNpYmxlVmFsdWVcIixcbiAgICBcImlzU2VyaWFsaXphYmxlXCIsXG4gICAgXCJpc0xpZ2h0U2VyaWFsaXphYmxlXCIsXG4gICAgXCJpc0N1c3RvbVwiLFxuICAgIFwiaXNCaW5kYWJsZVwiLFxuICAgIFwiaXNVbmlxdWVcIixcbiAgICBcImlzRHluYW1pY0Nob2ljZXNcIixcbiAgICBcImlzTG9jYWxpemFibGVWYWx1ZVwiLFxuICAgIFwiY2xhc3NOYW1lXCIsXG4gICAgXCJhbHRlcm5hdGl2ZU5hbWVcIixcbiAgICBcImxheW91dFwiLFxuICAgIFwiY2xhc3NOYW1lUGFydFwiLFxuICAgIFwiYmFzZUNsYXNzTmFtZVwiLFxuICAgIFwiZGVmYXVsdFZhbHVlXCIsXG4gICAgXCJzZXJpYWxpemF0aW9uUHJvcGVydHlcIixcbiAgICBcIm9uR2V0VmFsdWVcIixcbiAgICBcIm9uU2V0VmFsdWVcIixcbiAgICBcImRpc3BsYXlOYW1lXCIsXG4gICAgXCJjYXRlZ29yeVwiLFxuICAgIFwiY2F0ZWdvcnlJbmRleFwiLFxuICAgIFwidmlzaWJsZUluZGV4XCIsXG4gICAgXCJuZXh0VG9Qcm9wZXJ0eVwiLFxuICAgIFwic2hvd01vZGVcIixcbiAgICBcImRlcGVuZGVkUHJvcGVydGllc1wiLFxuICAgIFwidmlzaWJsZUlmXCIsXG4gICAgXCJvblByb3BlcnR5RWRpdG9yVXBkYXRlXCIsXG4gICAgXCJtYXhMZW5ndGhcIixcbiAgICBcIm1heFZhbHVlXCIsXG4gICAgXCJtaW5WYWx1ZVwiLFxuICAgIFwiZGF0YUxpc3RWYWx1ZVwiLFxuICBdO1xuICBwcml2YXRlIGlkVmFsdWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBjbGFzc0luZm9WYWx1ZTogSnNvbk1ldGFkYXRhQ2xhc3M7XG4gIHByaXZhdGUgdHlwZVZhbHVlOiBzdHJpbmcgPSBudWxsO1xuICBwcml2YXRlIGNob2ljZXNWYWx1ZTogQXJyYXk8YW55PiA9IG51bGw7XG4gIHByaXZhdGUgYmFzZVZhbHVlOiBhbnkgPSBudWxsO1xuICBwcml2YXRlIGlzUmVxdWlyZWRWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGlzVW5pcXVlVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWFkT25seVZhbHVlOiBib29sZWFuIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgdmlzaWJsZVZhbHVlOiBib29sZWFuIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgaXNMb2NhbGl6YWJsZVZhbHVlOiBib29sZWFuIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY2hvaWNlc2Z1bmM6IChvYmo6IGFueSwgY2hvaWNlc0NhbGxiYWNrOiBhbnkpID0+IEFycmF5PGFueT4gPSBudWxsO1xuICBwcml2YXRlIGRlcGVuZGVkUHJvcGVydGllczogQXJyYXk8c3RyaW5nPiA9IG51bGw7XG4gIHB1YmxpYyBpc1NlcmlhbGl6YWJsZTogYm9vbGVhbiA9IHRydWU7XG4gIHB1YmxpYyBpc0xpZ2h0U2VyaWFsaXphYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgcHVibGljIGlzQ3VzdG9tOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBpc0R5bmFtaWNDaG9pY2VzOiBib29sZWFuID0gZmFsc2U7IC8vVE9ETyBvYnNvbGV0ZSwgdXNlIGRlcGVuZHNPbiBhdHRyaWJ1dGVcbiAgcHVibGljIGlzQmluZGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGNsYXNzTmFtZTogc3RyaW5nID0gbnVsbDtcbiAgcHVibGljIGFsdGVybmF0aXZlTmFtZTogc3RyaW5nID0gbnVsbDtcbiAgcHVibGljIGNsYXNzTmFtZVBhcnQ6IHN0cmluZyA9IG51bGw7XG4gIHB1YmxpYyBiYXNlQ2xhc3NOYW1lOiBzdHJpbmcgPSBudWxsO1xuICBwdWJsaWMgZGVmYXVsdFZhbHVlVmFsdWU6IGFueSA9IG51bGw7XG4gIHB1YmxpYyBzZXJpYWxpemF0aW9uUHJvcGVydHk6IHN0cmluZyA9IG51bGw7XG4gIHB1YmxpYyBkaXNwbGF5TmFtZTogc3RyaW5nID0gbnVsbDtcbiAgcHVibGljIGNhdGVnb3J5OiBzdHJpbmcgPSBcIlwiO1xuICBwdWJsaWMgY2F0ZWdvcnlJbmRleDogbnVtYmVyID0gLTE7XG4gIHB1YmxpYyB2aXNpYmxlSW5kZXg6IG51bWJlciA9IC0xO1xuICBwdWJsaWMgbmV4dFRvUHJvcGVydHk6IHN0cmluZyA9IG51bGw7XG4gIHB1YmxpYyBzaG93TW9kZTogc3RyaW5nID0gbnVsbDtcbiAgcHVibGljIG1heExlbmd0aDogbnVtYmVyID0gLTE7XG4gIHB1YmxpYyBtYXhWYWx1ZTogYW55O1xuICBwdWJsaWMgbWluVmFsdWU6IGFueTtcbiAgcHJpdmF0ZSBkYXRhTGlzdFZhbHVlOiBBcnJheTxzdHJpbmc+O1xuICBwdWJsaWMgbGF5b3V0OiBzdHJpbmcgPSBudWxsO1xuICBwdWJsaWMgb25HZXRWYWx1ZTogKG9iajogYW55KSA9PiBhbnkgPSBudWxsO1xuICBwdWJsaWMgb25TZXRWYWx1ZTogKG9iajogYW55LCB2YWx1ZTogYW55LCBqc29uQ29udjogSnNvbk9iamVjdCkgPT4gYW55ID0gbnVsbDtcbiAgcHVibGljIHZpc2libGVJZjogKG9iajogYW55KSA9PiBib29sZWFuID0gbnVsbDtcbiAgcHVibGljIG9uUHJvcGVydHlFZGl0b3JVcGRhdGU6IChvYmo6IGFueSwgcHJvcEVkaXRvcjogYW55KSA9PiBhbnk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgY2xhc3NJbmZvOiBKc29uTWV0YWRhdGFDbGFzcyxcbiAgICBwdWJsaWMgbmFtZTogc3RyaW5nLFxuICAgIGlzUmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZVxuICApIHtcbiAgICB0aGlzLmNsYXNzSW5mb1ZhbHVlID0gY2xhc3NJbmZvO1xuICAgIHRoaXMuaXNSZXF1aXJlZFZhbHVlID0gaXNSZXF1aXJlZDtcbiAgICB0aGlzLmlkVmFsdWUgPSBKc29uT2JqZWN0UHJvcGVydHkuSW5kZXgrKztcbiAgfVxuICBwdWJsaWMgZ2V0IGlkKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaWRWYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNsYXNzSW5mbygpOiBKc29uTWV0YWRhdGFDbGFzcyB7XG4gICAgcmV0dXJuIHRoaXMuY2xhc3NJbmZvVmFsdWU7XG4gIH1cbiAgcHVibGljIGdldCB0eXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudHlwZVZhbHVlID8gdGhpcy50eXBlVmFsdWUgOiBcInN0cmluZ1wiO1xuICB9XG4gIHB1YmxpYyBzZXQgdHlwZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlID09PSBcIml0ZW12YWx1ZXNcIikgdmFsdWUgPSBcIml0ZW12YWx1ZVtdXCI7XG4gICAgdGhpcy50eXBlVmFsdWUgPSB2YWx1ZTtcbiAgICBpZiAodGhpcy50eXBlVmFsdWUuaW5kZXhPZihcIltdXCIpID09PSB0aGlzLnR5cGVWYWx1ZS5sZW5ndGggLSAyKSB7XG4gICAgICB0aGlzLmlzQXJyYXkgPSB0cnVlO1xuICAgICAgdGhpcy5jbGFzc05hbWUgPSB0aGlzLnR5cGVWYWx1ZS5zdWJzdHIoMCwgdGhpcy50eXBlVmFsdWUubGVuZ3RoIC0gMik7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBpc0FycmF5ID0gZmFsc2U7XG4gIHB1YmxpYyBnZXQgaXNSZXF1aXJlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1JlcXVpcmVkVmFsdWU7XG4gIH1cbiAgcHVibGljIHNldCBpc1JlcXVpcmVkKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuaXNSZXF1aXJlZFZhbHVlID0gdmFsO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNVbmlxdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNVbmlxdWVWYWx1ZTtcbiAgfVxuICBwdWJsaWMgc2V0IGlzVW5pcXVlKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuaXNVbmlxdWVWYWx1ZSA9IHZhbDtcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc1RvVXNlR2V0VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMub25HZXRWYWx1ZSB8fCB0aGlzLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eTtcbiAgfVxuICBwdWJsaWMgZ2V0IGRlZmF1bHRWYWx1ZSgpIHtcbiAgICB2YXIgcmVzdWx0OiBhbnkgPSB0aGlzLmRlZmF1bHRWYWx1ZVZhbHVlO1xuICAgIGlmIChcbiAgICAgICEhSnNvbk9iamVjdFByb3BlcnR5LmdldEl0ZW1WYWx1ZXNEZWZhdWx0VmFsdWUgJiZcbiAgICAgIEpzb25PYmplY3QubWV0YURhdGEuaXNEZXNjZW5kYW50T2YodGhpcy5jbGFzc05hbWUsIFwiaXRlbXZhbHVlXCIpXG4gICAgKSB7XG4gICAgICByZXN1bHQgPSBKc29uT2JqZWN0UHJvcGVydHkuZ2V0SXRlbVZhbHVlc0RlZmF1bHRWYWx1ZShcbiAgICAgICAgdGhpcy5kZWZhdWx0VmFsdWVWYWx1ZSB8fCBbXVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBwdWJsaWMgc2V0IGRlZmF1bHRWYWx1ZShuZXdWYWx1ZSkge1xuICAgIHRoaXMuZGVmYXVsdFZhbHVlVmFsdWUgPSBuZXdWYWx1ZTtcbiAgfVxuICBwdWJsaWMgaXNEZWZhdWx0VmFsdWUodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghSGVscGVycy5pc1ZhbHVlRW1wdHkodGhpcy5kZWZhdWx0VmFsdWUpKVxuICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFZhbHVlID09IHZhbHVlO1xuICAgIHJldHVybiAoXG4gICAgICAodmFsdWUgPT09IGZhbHNlICYmICh0aGlzLnR5cGUgPT0gXCJib29sZWFuXCIgfHwgdGhpcy50eXBlID09IFwic3dpdGNoXCIpKSB8fFxuICAgICAgdmFsdWUgPT09IFwiXCIgfHxcbiAgICAgIEhlbHBlcnMuaXNWYWx1ZUVtcHR5KHZhbHVlKVxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldFZhbHVlKG9iajogYW55KTogYW55IHtcbiAgICBpZiAodGhpcy5vbkdldFZhbHVlKSByZXR1cm4gdGhpcy5vbkdldFZhbHVlKG9iaik7XG4gICAgaWYgKHRoaXMuc2VyaWFsaXphdGlvblByb3BlcnR5ICYmICEhb2JqW3RoaXMuc2VyaWFsaXphdGlvblByb3BlcnR5XSlcbiAgICAgIHJldHVybiBvYmpbdGhpcy5zZXJpYWxpemF0aW9uUHJvcGVydHldLmdldEpzb24oKTtcbiAgICByZXR1cm4gb2JqW3RoaXMubmFtZV07XG4gIH1cbiAgcHVibGljIGdldFByb3BlcnR5VmFsdWUob2JqOiBhbnkpOiBhbnkge1xuICAgIGlmICh0aGlzLmlzTG9jYWxpemFibGUpIHtcbiAgICAgIHJldHVybiAhIW9ialt0aGlzLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eV1cbiAgICAgICAgPyBvYmpbdGhpcy5zZXJpYWxpemF0aW9uUHJvcGVydHldLnRleHRcbiAgICAgICAgOiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZShvYmopO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzVG9Vc2VTZXRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5vblNldFZhbHVlIHx8IHRoaXMuc2VyaWFsaXphdGlvblByb3BlcnR5O1xuICB9XG4gIHB1YmxpYyBzZXRWYWx1ZShvYmo6IGFueSwgdmFsdWU6IGFueSwganNvbkNvbnY6IEpzb25PYmplY3QpIHtcbiAgICBpZiAodGhpcy5vblNldFZhbHVlKSB7XG4gICAgICB0aGlzLm9uU2V0VmFsdWUob2JqLCB2YWx1ZSwganNvbkNvbnYpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5zZXJpYWxpemF0aW9uUHJvcGVydHkgJiYgISFvYmpbdGhpcy5zZXJpYWxpemF0aW9uUHJvcGVydHldKVxuICAgICAgICBvYmpbdGhpcy5zZXJpYWxpemF0aW9uUHJvcGVydHldLnNldEpzb24odmFsdWUpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBpZiAodGhpcy50eXBlID09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy50eXBlID09IFwiYm9vbGVhblwiIHx8IHRoaXMudHlwZSA9PSBcInN3aXRjaFwiKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09IFwidHJ1ZVwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvYmpbdGhpcy5uYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0T2JqVHlwZShvYmpUeXBlOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuY2xhc3NOYW1lUGFydCkgcmV0dXJuIG9ialR5cGU7XG4gICAgcmV0dXJuIG9ialR5cGUucmVwbGFjZSh0aGlzLmNsYXNzTmFtZVBhcnQsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBnZXRDbGFzc05hbWUoY2xhc3NOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChjbGFzc05hbWUpIGNsYXNzTmFtZSA9IGNsYXNzTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiB0aGlzLmNsYXNzTmFtZVBhcnQgJiYgY2xhc3NOYW1lLmluZGV4T2YodGhpcy5jbGFzc05hbWVQYXJ0KSA8IDBcbiAgICAgID8gY2xhc3NOYW1lICsgdGhpcy5jbGFzc05hbWVQYXJ0XG4gICAgICA6IGNsYXNzTmFtZTtcbiAgfVxuICAvKipcbiAgICogRGVwcmljYXRlZCwgcGxlYXNlIHVzZSBnZXRDaG9pY2VzXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNob2ljZXMoKTogQXJyYXk8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2hvaWNlcyhudWxsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc0Nob2ljZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5jaG9pY2VzVmFsdWUgfHwgISF0aGlzLmNob2ljZXNmdW5jO1xuICB9XG4gIHB1YmxpYyBnZXRDaG9pY2VzKG9iajogYW55LCBjaG9pY2VzQ2FsbGJhY2s6IGFueSA9IG51bGwpOiBBcnJheTxhbnk+IHtcbiAgICBpZiAodGhpcy5jaG9pY2VzVmFsdWUgIT0gbnVsbCkgcmV0dXJuIHRoaXMuY2hvaWNlc1ZhbHVlO1xuICAgIGlmICh0aGlzLmNob2ljZXNmdW5jICE9IG51bGwpIHJldHVybiB0aGlzLmNob2ljZXNmdW5jKG9iaiwgY2hvaWNlc0NhbGxiYWNrKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwdWJsaWMgc2V0Q2hvaWNlcyhcbiAgICB2YWx1ZTogQXJyYXk8YW55PixcbiAgICB2YWx1ZUZ1bmM6IChvYmo6IGFueSkgPT4gQXJyYXk8YW55PiA9IG51bGxcbiAgKSB7XG4gICAgdGhpcy5jaG9pY2VzVmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmNob2ljZXNmdW5jID0gdmFsdWVGdW5jO1xuICB9XG4gIHB1YmxpYyBnZXRCYXNlVmFsdWUoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuYmFzZVZhbHVlKSByZXR1cm4gXCJcIjtcbiAgICBpZiAodHlwZW9mIHRoaXMuYmFzZVZhbHVlID09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRoaXMuYmFzZVZhbHVlKCk7XG4gICAgcmV0dXJuIHRoaXMuYmFzZVZhbHVlO1xuICB9XG4gIHB1YmxpYyBzZXRCYXNlVmFsdWUodmFsOiBhbnkpIHtcbiAgICB0aGlzLmJhc2VWYWx1ZSA9IHZhbDtcbiAgfVxuICBwdWJsaWMgZ2V0IHJlYWRPbmx5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJlYWRPbmx5VmFsdWUgIT0gbnVsbCA/IHRoaXMucmVhZE9ubHlWYWx1ZSA6IGZhbHNlO1xuICB9XG4gIHB1YmxpYyBzZXQgcmVhZE9ubHkodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5yZWFkT25seVZhbHVlID0gdmFsO1xuICB9XG4gIHB1YmxpYyBpc1Zpc2libGUobGF5b3V0OiBzdHJpbmcsIG9iajogYW55ID0gbnVsbCk6IGJvb2xlYW4ge1xuICAgIGxldCBpc0xheW91dCA9ICF0aGlzLmxheW91dCB8fCB0aGlzLmxheW91dCA9PSBsYXlvdXQ7XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgIWlzTGF5b3V0KSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCEhdGhpcy52aXNpYmxlSWYgJiYgISFvYmopIHJldHVybiB0aGlzLnZpc2libGVJZihvYmopO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHB1YmxpYyBnZXQgdmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy52aXNpYmxlVmFsdWUgIT0gbnVsbCA/IHRoaXMudmlzaWJsZVZhbHVlIDogdHJ1ZTtcbiAgfVxuICBwdWJsaWMgc2V0IHZpc2libGUodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy52aXNpYmxlVmFsdWUgPSB2YWw7XG4gIH1cbiAgcHVibGljIGdldCBpc0xvY2FsaXphYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzTG9jYWxpemFibGVWYWx1ZSAhPSBudWxsID8gdGhpcy5pc0xvY2FsaXphYmxlVmFsdWUgOiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgc2V0IGlzTG9jYWxpemFibGUodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5pc0xvY2FsaXphYmxlVmFsdWUgPSB2YWw7XG4gIH1cbiAgcHVibGljIGdldCBkYXRhTGlzdCgpOiBBcnJheTxzdHJpbmc+IHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLmRhdGFMaXN0VmFsdWUpID8gdGhpcy5kYXRhTGlzdFZhbHVlIDogW107XG4gIH1cbiAgcHVibGljIHNldCBkYXRhTGlzdCh2YWw6IEFycmF5PHN0cmluZz4pIHtcbiAgICB0aGlzLmRhdGFMaXN0VmFsdWUgPSB2YWw7XG4gIH1cbiAgcHVibGljIG1lcmdlV2l0aChwcm9wOiBKc29uT2JqZWN0UHJvcGVydHkpIHtcbiAgICB2YXIgdmFsdWVzTmFtZXMgPSBKc29uT2JqZWN0UHJvcGVydHkubWVyZ2FibGVWYWx1ZXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXNOYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5tZXJnZVZhbHVlKHByb3AsIHZhbHVlc05hbWVzW2ldKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGFkZERlcGVuZGVkUHJvcGVydHkobmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLmRlcGVuZGVkUHJvcGVydGllcykge1xuICAgICAgdGhpcy5kZXBlbmRlZFByb3BlcnRpZXMgPSBbXTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGVwZW5kZWRQcm9wZXJ0aWVzLmluZGV4T2YobmFtZSkgPCAwKSB7XG4gICAgICB0aGlzLmRlcGVuZGVkUHJvcGVydGllcy5wdXNoKG5hbWUpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0RGVwZW5kZWRQcm9wZXJ0aWVzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiAhIXRoaXMuZGVwZW5kZWRQcm9wZXJ0aWVzID8gdGhpcy5kZXBlbmRlZFByb3BlcnRpZXMgOiBbXTtcbiAgfVxuICBwdWJsaWMgc2NoZW1hVHlwZSgpOiBzdHJpbmcge1xuICAgIGlmICghIXRoaXMuY2xhc3NOYW1lKSByZXR1cm4gXCJhcnJheVwiO1xuICAgIGlmICghIXRoaXMuYmFzZUNsYXNzTmFtZSkgcmV0dXJuIFwiYXJyYXlcIjtcbiAgICBpZiAodGhpcy50eXBlID09IFwiYm9vbGVhblwiIHx8IHRoaXMudHlwZSA9PSBcIm51bWJlclwiKSByZXR1cm4gdGhpcy50eXBlO1xuICAgIHJldHVybiBcInN0cmluZ1wiO1xuICB9XG4gIHByaXZhdGUgbWVyZ2VWYWx1ZShwcm9wOiBKc29uT2JqZWN0UHJvcGVydHksIHZhbHVlTmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXNbdmFsdWVOYW1lXSA9PSBudWxsICYmIHByb3BbdmFsdWVOYW1lXSAhPSBudWxsKSB7XG4gICAgICB0aGlzW3ZhbHVlTmFtZV0gPSBwcm9wW3ZhbHVlTmFtZV07XG4gICAgfVxuICB9XG59XG5leHBvcnQgY2xhc3MgQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb24ge1xuICBwcml2YXRlIHN0YXRpYyBwcm9wZXJ0aWVzOiBJT2JqZWN0ID0ge307XG4gIHByaXZhdGUgc3RhdGljIHBhcmVudENsYXNzZXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgcHVibGljIHN0YXRpYyBhZGRQcm9wZXJ0eShjbGFzc05hbWU6IHN0cmluZywgcHJvcGVydHk6IGFueSkge1xuICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciBwcm9wcyA9IEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLnByb3BlcnRpZXM7XG4gICAgaWYgKCFwcm9wc1tjbGFzc05hbWVdKSB7XG4gICAgICBwcm9wc1tjbGFzc05hbWVdID0gW107XG4gICAgfVxuICAgIHByb3BzW2NsYXNzTmFtZV0ucHVzaChwcm9wZXJ0eSk7XG4gIH1cbiAgcHVibGljIHN0YXRpYyByZW1vdmVQcm9wZXJ0eShjbGFzc05hbWU6IHN0cmluZywgcHJvcGVydHlOYW1lOiBzdHJpbmcpIHtcbiAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgcHJvcHMgPSBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5wcm9wZXJ0aWVzO1xuICAgIGlmICghcHJvcHNbY2xhc3NOYW1lXSkgcmV0dXJuO1xuICAgIHZhciBwcm9wZXJ0aWVzID0gcHJvcHNbY2xhc3NOYW1lXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChwcm9wZXJ0aWVzW2ldLm5hbWUgPT0gcHJvcGVydHlOYW1lKSB7XG4gICAgICAgIHByb3BzW2NsYXNzTmFtZV0uc3BsaWNlKGksIDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHVibGljIHN0YXRpYyBhZGRDbGFzcyhjbGFzc05hbWU6IHN0cmluZywgcGFyZW50Q2xhc3NOYW1lOiBzdHJpbmcpIHtcbiAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAocGFyZW50Q2xhc3NOYW1lKSB7XG4gICAgICBwYXJlbnRDbGFzc05hbWUgPSBwYXJlbnRDbGFzc05hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gICAgQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb24ucGFyZW50Q2xhc3Nlc1tjbGFzc05hbWVdID0gcGFyZW50Q2xhc3NOYW1lO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgZ2V0UHJvcGVydGllcyhjbGFzc05hbWU6IHN0cmluZyk6IEFycmF5PGFueT4ge1xuICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgcHJvcHMgPSBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5wcm9wZXJ0aWVzO1xuICAgIHdoaWxlIChjbGFzc05hbWUpIHtcbiAgICAgIHZhciBwcm9wZXJ0aWVzID0gcHJvcHNbY2xhc3NOYW1lXTtcbiAgICAgIGlmIChwcm9wZXJ0aWVzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHJlcy5wdXNoKHByb3BlcnRpZXNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjbGFzc05hbWUgPSBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5wYXJlbnRDbGFzc2VzW2NsYXNzTmFtZV07XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBjcmVhdGVQcm9wZXJ0aWVzKG9iajogYW55KSB7XG4gICAgaWYgKCFvYmogfHwgIW9iai5nZXRUeXBlKSByZXR1cm47XG4gICAgQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb24uY3JlYXRlUHJvcGVydGllc0NvcmUob2JqLCBvYmouZ2V0VHlwZSgpKTtcbiAgfVxuICBwcml2YXRlIHN0YXRpYyBjcmVhdGVQcm9wZXJ0aWVzQ29yZShvYmo6IGFueSwgY2xhc3NOYW1lOiBzdHJpbmcpIHtcbiAgICB2YXIgcHJvcHMgPSBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5wcm9wZXJ0aWVzO1xuICAgIGlmIChwcm9wc1tjbGFzc05hbWVdKSB7XG4gICAgICBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5jcmVhdGVQcm9wZXJ0aWVzSW5PYmoob2JqLCBwcm9wc1tjbGFzc05hbWVdKTtcbiAgICB9XG4gICAgdmFyIHBhcmVudENsYXNzID0gQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb24ucGFyZW50Q2xhc3Nlc1tjbGFzc05hbWVdO1xuICAgIGlmIChwYXJlbnRDbGFzcykge1xuICAgICAgQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb24uY3JlYXRlUHJvcGVydGllc0NvcmUob2JqLCBwYXJlbnRDbGFzcyk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgc3RhdGljIGNyZWF0ZVByb3BlcnRpZXNJbk9iaihvYmo6IGFueSwgcHJvcGVydGllczogYW55W10pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLmNyZWF0ZVByb3BlcnR5SW5PYmoob2JqLCBwcm9wZXJ0aWVzW2ldKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBzdGF0aWMgY3JlYXRlUHJvcGVydHlJbk9iaihvYmo6IGFueSwgcHJvcDogSnNvbk9iamVjdFByb3BlcnR5KSB7XG4gICAgaWYgKG9ialtwcm9wLm5hbWVdIHx8IG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wLm5hbWUpKSByZXR1cm47XG4gICAgaWYgKFxuICAgICAgcHJvcC5pc0xvY2FsaXphYmxlICYmXG4gICAgICBwcm9wLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eSAmJlxuICAgICAgIW9ialtwcm9wLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eV0gJiZcbiAgICAgIG9iai5jcmVhdGVDdXN0b21Mb2NhbGl6YWJsZU9ialxuICAgICkge1xuICAgICAgb2JqLmNyZWF0ZUN1c3RvbUxvY2FsaXphYmxlT2JqKHByb3AubmFtZSk7XG4gICAgICB2YXIgbG9jRGVzYyA9IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gb2JqLmdldExvY2FsaXphYmxlU3RyaW5nKHByb3AubmFtZSk7XG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgcHJvcC5zZXJpYWxpemF0aW9uUHJvcGVydHksIGxvY0Rlc2MpO1xuICAgICAgdmFyIGRlc2MgPSB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIG9iai5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQocHJvcC5uYW1lLCBwcm9wLmRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24odjogYW55KSB7XG4gICAgICAgICAgb2JqLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChwcm9wLm5hbWUsIHYpO1xuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIHByb3AubmFtZSwgZGVzYyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBkZWZhdWx0VmFsdWUgPSBwcm9wLmRlZmF1bHRWYWx1ZTtcbiAgICAgIHZhciBpc0FycmF5UHJvcCA9IGZhbHNlO1xuICAgICAgaWYgKHR5cGVvZiBvYmouY3JlYXRlTmV3QXJyYXkgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBpZiAoSnNvbk9iamVjdC5tZXRhRGF0YS5pc0Rlc2NlbmRhbnRPZihwcm9wLmNsYXNzTmFtZSwgXCJpdGVtdmFsdWVcIikpIHtcbiAgICAgICAgICBvYmouY3JlYXRlTmV3QXJyYXkocHJvcC5uYW1lLCBmdW5jdGlvbihpdGVtOiBhbnkpIHtcbiAgICAgICAgICAgIGl0ZW0ubG9jT3duZXIgPSBvYmo7XG4gICAgICAgICAgICBpdGVtLm93bmVyUHJvcGVydHlOYW1lID0gcHJvcC5uYW1lO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlzQXJyYXlQcm9wID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvL0l0IGlzIGEgc2ltcGxlIGFycmF5IHByb3BlcnR5XG4gICAgICAgIGlmIChwcm9wLnR5cGUgPT09IFwibXVsdGlwbGV2YWx1ZXNcIikge1xuICAgICAgICAgIG9iai5jcmVhdGVOZXdBcnJheShwcm9wLm5hbWUpO1xuICAgICAgICAgIGlzQXJyYXlQcm9wID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBcnJheVByb3ApIHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkZWZhdWx0VmFsdWUpKSB7XG4gICAgICAgICAgICBvYmouc2V0UHJvcGVydHlWYWx1ZShwcm9wLm5hbWUsIGRlZmF1bHRWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghIW9iai5nZXRQcm9wZXJ0eVZhbHVlICYmICEhb2JqLnNldFByb3BlcnR5VmFsdWUpIHtcbiAgICAgICAgdmFyIGRlc2MgPSB7XG4gICAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoISFwcm9wLm9uR2V0VmFsdWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHByb3Aub25HZXRWYWx1ZShvYmopO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG9iai5nZXRQcm9wZXJ0eVZhbHVlKHByb3AubmFtZSwgZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNldDogZnVuY3Rpb24odjogYW55KSB7XG4gICAgICAgICAgICBpZiAoISFwcm9wLm9uU2V0VmFsdWUpIHtcbiAgICAgICAgICAgICAgcHJvcC5vblNldFZhbHVlKG9iaiwgdiwgbnVsbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvYmouc2V0UHJvcGVydHlWYWx1ZShwcm9wLm5hbWUsIHYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIHByb3AubmFtZSwgZGVzYyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBKc29uTWV0YWRhdGFDbGFzcyB7XG4gIHN0YXRpYyByZXF1aXJlZFN5bWJvbCA9IFwiIVwiO1xuICBzdGF0aWMgdHlwZVN5bWJvbCA9IFwiOlwiO1xuICBwcm9wZXJ0aWVzOiBBcnJheTxKc29uT2JqZWN0UHJvcGVydHk+ID0gbnVsbDtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG5hbWU6IHN0cmluZyxcbiAgICBwcm9wZXJ0aWVzOiBBcnJheTxhbnk+LFxuICAgIHB1YmxpYyBjcmVhdG9yOiAoanNvbj86IGFueSkgPT4gYW55ID0gbnVsbCxcbiAgICBwdWJsaWMgcGFyZW50TmFtZTogc3RyaW5nID0gbnVsbFxuICApIHtcbiAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICh0aGlzLnBhcmVudE5hbWUpIHtcbiAgICAgIHRoaXMucGFyZW50TmFtZSA9IHRoaXMucGFyZW50TmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb24uYWRkQ2xhc3MobmFtZSwgdGhpcy5wYXJlbnROYW1lKTtcbiAgICB9XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gbmV3IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4oKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwcm9wID0gdGhpcy5jcmVhdGVQcm9wZXJ0eShwcm9wZXJ0aWVzW2ldKTtcbiAgICAgIGlmIChwcm9wKSB7XG4gICAgICAgIHRoaXMucHJvcGVydGllcy5wdXNoKHByb3ApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwdWJsaWMgZmluZChuYW1lOiBzdHJpbmcpOiBKc29uT2JqZWN0UHJvcGVydHkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5wcm9wZXJ0aWVzW2ldLm5hbWUgPT0gbmFtZSkgcmV0dXJuIHRoaXMucHJvcGVydGllc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHVibGljIGNyZWF0ZVByb3BlcnR5KHByb3BJbmZvOiBhbnkpOiBKc29uT2JqZWN0UHJvcGVydHkge1xuICAgIHZhciBwcm9wZXJ0eU5hbWUgPSB0eXBlb2YgcHJvcEluZm8gPT09IFwic3RyaW5nXCIgPyBwcm9wSW5mbyA6IHByb3BJbmZvLm5hbWU7XG4gICAgaWYgKCFwcm9wZXJ0eU5hbWUpIHJldHVybjtcbiAgICB2YXIgcHJvcGVydHlUeXBlID0gbnVsbDtcbiAgICB2YXIgdHlwZUluZGV4ID0gcHJvcGVydHlOYW1lLmluZGV4T2YoSnNvbk1ldGFkYXRhQ2xhc3MudHlwZVN5bWJvbCk7XG4gICAgaWYgKHR5cGVJbmRleCA+IC0xKSB7XG4gICAgICBwcm9wZXJ0eVR5cGUgPSBwcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKHR5cGVJbmRleCArIDEpO1xuICAgICAgcHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lLnN1YnN0cmluZygwLCB0eXBlSW5kZXgpO1xuICAgIH1cbiAgICB2YXIgaXNSZXF1aXJlZCA9XG4gICAgICB0aGlzLmdldElzUHJvcGVydHlOYW1lUmVxdWlyZWQocHJvcGVydHlOYW1lKSB8fCAhIXByb3BJbmZvLmlzUmVxdWlyZWQ7XG4gICAgcHJvcGVydHlOYW1lID0gdGhpcy5nZXRQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lKTtcbiAgICB2YXIgcHJvcCA9IG5ldyBKc29uT2JqZWN0UHJvcGVydHkodGhpcywgcHJvcGVydHlOYW1lLCBpc1JlcXVpcmVkKTtcbiAgICBpZiAocHJvcGVydHlUeXBlKSB7XG4gICAgICBwcm9wLnR5cGUgPSBwcm9wZXJ0eVR5cGU7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcHJvcEluZm8gPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGlmIChwcm9wSW5mby50eXBlKSB7XG4gICAgICAgIHByb3AudHlwZSA9IHByb3BJbmZvLnR5cGU7XG4gICAgICB9XG4gICAgICBpZiAoIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHByb3BJbmZvLmRlZmF1bHQpKSB7XG4gICAgICAgIHByb3AuZGVmYXVsdFZhbHVlID0gcHJvcEluZm8uZGVmYXVsdDtcbiAgICAgIH1cbiAgICAgIGlmICghSGVscGVycy5pc1ZhbHVlRW1wdHkocHJvcEluZm8uaXNTZXJpYWxpemFibGUpKSB7XG4gICAgICAgIHByb3AuaXNTZXJpYWxpemFibGUgPSBwcm9wSW5mby5pc1NlcmlhbGl6YWJsZTtcbiAgICAgIH1cbiAgICAgIGlmICghSGVscGVycy5pc1ZhbHVlRW1wdHkocHJvcEluZm8uaXNMaWdodFNlcmlhbGl6YWJsZSkpIHtcbiAgICAgICAgcHJvcC5pc0xpZ2h0U2VyaWFsaXphYmxlID0gcHJvcEluZm8uaXNMaWdodFNlcmlhbGl6YWJsZTtcbiAgICAgIH1cbiAgICAgIGlmICghSGVscGVycy5pc1ZhbHVlRW1wdHkocHJvcEluZm8ubWF4TGVuZ3RoKSkge1xuICAgICAgICBwcm9wLm1heExlbmd0aCA9IHByb3BJbmZvLm1heExlbmd0aDtcbiAgICAgIH1cbiAgICAgIGlmICghSGVscGVycy5pc1ZhbHVlRW1wdHkocHJvcEluZm8uZGlzcGxheU5hbWUpKSB7XG4gICAgICAgIHByb3AuZGlzcGxheU5hbWUgPSBwcm9wSW5mby5kaXNwbGF5TmFtZTtcbiAgICAgIH1cbiAgICAgIGlmICghSGVscGVycy5pc1ZhbHVlRW1wdHkocHJvcEluZm8uY2F0ZWdvcnkpKSB7XG4gICAgICAgIHByb3AuY2F0ZWdvcnkgPSBwcm9wSW5mby5jYXRlZ29yeTtcbiAgICAgIH1cbiAgICAgIGlmICghSGVscGVycy5pc1ZhbHVlRW1wdHkocHJvcEluZm8uY2F0ZWdvcnlJbmRleCkpIHtcbiAgICAgICAgcHJvcC5jYXRlZ29yeUluZGV4ID0gcHJvcEluZm8uY2F0ZWdvcnlJbmRleDtcbiAgICAgIH1cbiAgICAgIGlmICghSGVscGVycy5pc1ZhbHVlRW1wdHkocHJvcEluZm8ubmV4dFRvUHJvcGVydHkpKSB7XG4gICAgICAgIHByb3AubmV4dFRvUHJvcGVydHkgPSBwcm9wSW5mby5uZXh0VG9Qcm9wZXJ0eTtcbiAgICAgIH1cbiAgICAgIGlmICghSGVscGVycy5pc1ZhbHVlRW1wdHkocHJvcEluZm8udmlzaWJsZUluZGV4KSkge1xuICAgICAgICBwcm9wLnZpc2libGVJbmRleCA9IHByb3BJbmZvLnZpc2libGVJbmRleDtcbiAgICAgIH1cbiAgICAgIGlmICghSGVscGVycy5pc1ZhbHVlRW1wdHkocHJvcEluZm8uc2hvd01vZGUpKSB7XG4gICAgICAgIHByb3Auc2hvd01vZGUgPSBwcm9wSW5mby5zaG93TW9kZTtcbiAgICAgIH1cbiAgICAgIGlmICghSGVscGVycy5pc1ZhbHVlRW1wdHkocHJvcEluZm8ubWF4VmFsdWUpKSB7XG4gICAgICAgIHByb3AubWF4VmFsdWUgPSBwcm9wSW5mby5tYXhWYWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmICghSGVscGVycy5pc1ZhbHVlRW1wdHkocHJvcEluZm8ubWluVmFsdWUpKSB7XG4gICAgICAgIHByb3AubWluVmFsdWUgPSBwcm9wSW5mby5taW5WYWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmICghSGVscGVycy5pc1ZhbHVlRW1wdHkocHJvcEluZm8uZGF0YUxpc3QpKSB7XG4gICAgICAgIHByb3AuZGF0YUxpc3QgPSBwcm9wSW5mby5kYXRhTGlzdDtcbiAgICAgIH1cbiAgICAgIGlmICghSGVscGVycy5pc1ZhbHVlRW1wdHkocHJvcEluZm8uaXNEeW5hbWljQ2hvaWNlcykpIHtcbiAgICAgICAgcHJvcC5pc0R5bmFtaWNDaG9pY2VzID0gcHJvcEluZm8uaXNEeW5hbWljQ2hvaWNlcztcbiAgICAgIH1cbiAgICAgIGlmICghSGVscGVycy5pc1ZhbHVlRW1wdHkocHJvcEluZm8uaXNCaW5kYWJsZSkpIHtcbiAgICAgICAgcHJvcC5pc0JpbmRhYmxlID0gcHJvcEluZm8uaXNCaW5kYWJsZTtcbiAgICAgIH1cbiAgICAgIGlmICghSGVscGVycy5pc1ZhbHVlRW1wdHkocHJvcEluZm8uaXNVbmlxdWUpKSB7XG4gICAgICAgIHByb3AuaXNVbmlxdWUgPSBwcm9wSW5mby5pc1VuaXF1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wSW5mby52aXNpYmxlID09PSB0cnVlIHx8IHByb3BJbmZvLnZpc2libGUgPT09IGZhbHNlKSB7XG4gICAgICAgIHByb3AudmlzaWJsZSA9IHByb3BJbmZvLnZpc2libGU7XG4gICAgICB9XG4gICAgICBpZiAoISFwcm9wSW5mby52aXNpYmxlSWYpIHtcbiAgICAgICAgcHJvcC52aXNpYmxlSWYgPSBwcm9wSW5mby52aXNpYmxlSWY7XG4gICAgICB9XG4gICAgICBpZiAoISFwcm9wSW5mby5vblByb3BlcnR5RWRpdG9yVXBkYXRlKSB7XG4gICAgICAgIHByb3Aub25Qcm9wZXJ0eUVkaXRvclVwZGF0ZSA9IHByb3BJbmZvLm9uUHJvcGVydHlFZGl0b3JVcGRhdGU7XG4gICAgICB9XG4gICAgICBpZiAocHJvcEluZm8ucmVhZE9ubHkgPT09IHRydWUpIHtcbiAgICAgICAgcHJvcC5yZWFkT25seSA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAocHJvcEluZm8uY2hvaWNlcykge1xuICAgICAgICB2YXIgY2hvaWNlc0Z1bmMgPVxuICAgICAgICAgIHR5cGVvZiBwcm9wSW5mby5jaG9pY2VzID09PSBcImZ1bmN0aW9uXCIgPyBwcm9wSW5mby5jaG9pY2VzIDogbnVsbDtcbiAgICAgICAgdmFyIGNob2ljZXNWYWx1ZSA9XG4gICAgICAgICAgdHlwZW9mIHByb3BJbmZvLmNob2ljZXMgIT09IFwiZnVuY3Rpb25cIiA/IHByb3BJbmZvLmNob2ljZXMgOiBudWxsO1xuICAgICAgICBwcm9wLnNldENob2ljZXMoY2hvaWNlc1ZhbHVlLCBjaG9pY2VzRnVuYyk7XG4gICAgICB9XG4gICAgICBpZiAoISFwcm9wSW5mby5iYXNlVmFsdWUpIHtcbiAgICAgICAgcHJvcC5zZXRCYXNlVmFsdWUocHJvcEluZm8uYmFzZVZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wSW5mby5vbkdldFZhbHVlKSB7XG4gICAgICAgIHByb3Aub25HZXRWYWx1ZSA9IHByb3BJbmZvLm9uR2V0VmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAocHJvcEluZm8ub25TZXRWYWx1ZSkge1xuICAgICAgICBwcm9wLm9uU2V0VmFsdWUgPSBwcm9wSW5mby5vblNldFZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BJbmZvLmlzTG9jYWxpemFibGUpIHtcbiAgICAgICAgcHJvcEluZm8uc2VyaWFsaXphdGlvblByb3BlcnR5ID0gXCJsb2NcIiArIHByb3AubmFtZTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wSW5mby5zZXJpYWxpemF0aW9uUHJvcGVydHkpIHtcbiAgICAgICAgcHJvcC5zZXJpYWxpemF0aW9uUHJvcGVydHkgPSBwcm9wSW5mby5zZXJpYWxpemF0aW9uUHJvcGVydHk7XG4gICAgICAgIHZhciBzOiBzdHJpbmc7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBwcm9wLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eSAmJlxuICAgICAgICAgIHByb3Auc2VyaWFsaXphdGlvblByb3BlcnR5LmluZGV4T2YoXCJsb2NcIikgPT0gMFxuICAgICAgICApIHtcbiAgICAgICAgICBwcm9wLmlzTG9jYWxpemFibGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocHJvcEluZm8uaXNMb2NhbGl6YWJsZSkge1xuICAgICAgICBwcm9wLmlzTG9jYWxpemFibGUgPSBwcm9wSW5mby5pc0xvY2FsaXphYmxlO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BJbmZvLmNsYXNzTmFtZSkge1xuICAgICAgICBwcm9wLmNsYXNzTmFtZSA9IHByb3BJbmZvLmNsYXNzTmFtZTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wSW5mby5iYXNlQ2xhc3NOYW1lKSB7XG4gICAgICAgIHByb3AuYmFzZUNsYXNzTmFtZSA9IHByb3BJbmZvLmJhc2VDbGFzc05hbWU7XG4gICAgICB9XG4gICAgICBpZiAocHJvcEluZm8uY2xhc3NOYW1lUGFydCkge1xuICAgICAgICBwcm9wLmNsYXNzTmFtZVBhcnQgPSBwcm9wSW5mby5jbGFzc05hbWVQYXJ0O1xuICAgICAgfVxuICAgICAgaWYgKHByb3BJbmZvLmFsdGVybmF0aXZlTmFtZSkge1xuICAgICAgICBwcm9wLmFsdGVybmF0aXZlTmFtZSA9IHByb3BJbmZvLmFsdGVybmF0aXZlTmFtZTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wSW5mby5sYXlvdXQpIHtcbiAgICAgICAgcHJvcC5sYXlvdXQgPSBwcm9wSW5mby5sYXlvdXQ7XG4gICAgICB9XG4gICAgICBpZiAocHJvcEluZm8uZGVwZW5kc09uKSB7XG4gICAgICAgIHRoaXMuYWRkRGVwZW5kc09uUHJvcGVydGllcyhwcm9wLCBwcm9wSW5mby5kZXBlbmRzT24pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJvcDtcbiAgfVxuICBwcml2YXRlIGFkZERlcGVuZHNPblByb3BlcnRpZXMocHJvcDogSnNvbk9iamVjdFByb3BlcnR5LCBkZXBlbmRzT246IGFueSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRlcGVuZHNPbikpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVwZW5kc09uLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMuYWRkRGVwZW5kc09uUHJvcGVydHkocHJvcCwgZGVwZW5kc09uW2ldKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hZGREZXBlbmRzT25Qcm9wZXJ0eShwcm9wLCBkZXBlbmRzT24pO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGFkZERlcGVuZHNPblByb3BlcnR5KHByb3A6IEpzb25PYmplY3RQcm9wZXJ0eSwgZGVwZW5kc09uOiBzdHJpbmcpIHtcbiAgICB2YXIgcHJvcGVydHkgPSB0aGlzLmZpbmQoZGVwZW5kc09uKTtcbiAgICBpZiAoIXByb3BlcnR5KSB7XG4gICAgICBwcm9wZXJ0eSA9IFNlcmlhbGl6ZXIuZmluZFByb3BlcnR5KHRoaXMucGFyZW50TmFtZSwgZGVwZW5kc09uKTtcbiAgICB9XG4gICAgaWYgKCFwcm9wZXJ0eSkgcmV0dXJuO1xuICAgIHByb3BlcnR5LmFkZERlcGVuZGVkUHJvcGVydHkocHJvcC5uYW1lKTtcbiAgfVxuICBwcml2YXRlIGdldElzUHJvcGVydHlOYW1lUmVxdWlyZWQocHJvcGVydHlOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgcHJvcGVydHlOYW1lLmxlbmd0aCA+IDAgJiZcbiAgICAgIHByb3BlcnR5TmFtZVswXSA9PSBKc29uTWV0YWRhdGFDbGFzcy5yZXF1aXJlZFN5bWJvbFxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5nZXRJc1Byb3BlcnR5TmFtZVJlcXVpcmVkKHByb3BlcnR5TmFtZSkpIHJldHVybiBwcm9wZXJ0eU5hbWU7XG4gICAgcHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lLnNsaWNlKDEpO1xuICAgIHJldHVybiBwcm9wZXJ0eU5hbWU7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgbWV0YWRhdGEgb2JqZWN0LiBJdCBjb250YWlucyBvYmplY3QgcHJvcGVydGllcycgcnVudGltZSBpbmZvcm1hdGlvbiBhbmQgYWxsb3dzIHlvdSB0byBtb2RpZnkgaXQuXG4gKi9cbmV4cG9ydCBjbGFzcyBKc29uTWV0YWRhdGEge1xuICBwcml2YXRlIGNsYXNzZXM6IEhhc2hUYWJsZTxKc29uTWV0YWRhdGFDbGFzcz4gPSB7fTtcbiAgcHJpdmF0ZSBhbHRlcm5hdGl2ZU5hbWVzOiBIYXNoVGFibGU8c3RyaW5nPiA9IHt9O1xuICBwcml2YXRlIGNoaWxkcmVuQ2xhc3NlczogSGFzaFRhYmxlPEFycmF5PEpzb25NZXRhZGF0YUNsYXNzPj4gPSB7fTtcbiAgcHJpdmF0ZSBjbGFzc1Byb3BlcnRpZXM6IEhhc2hUYWJsZTxBcnJheTxKc29uT2JqZWN0UHJvcGVydHk+PiA9IHt9O1xuICBwcml2YXRlIGNsYXNzSGFzaFByb3BlcnRpZXM6IEhhc2hUYWJsZTxIYXNoVGFibGU8SnNvbk9iamVjdFByb3BlcnR5Pj4gPSB7fTtcbiAgcHVibGljIGdldE9ialByb3BlcnR5VmFsdWUob2JqOiBhbnksIG5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgaWYgKHRoaXMuaXNPYmpXcmFwcGVyKG9iaikpIHtcbiAgICAgIHZhciBvcmlnbmFsT2JqID0gb2JqLmdldE9yaWdpbmFsT2JqKCk7XG4gICAgICB2YXIgcHJvcCA9IFNlcmlhbGl6ZXIuZmluZFByb3BlcnR5KG9yaWduYWxPYmouZ2V0VHlwZSgpLCBuYW1lKTtcbiAgICAgIGlmICghIXByb3ApIHJldHVybiB0aGlzLmdldE9ialByb3BlcnR5VmFsdWVDb3JlKG9yaWduYWxPYmosIHByb3ApO1xuICAgIH1cbiAgICB2YXIgcHJvcCA9IFNlcmlhbGl6ZXIuZmluZFByb3BlcnR5KG9iai5nZXRUeXBlKCksIG5hbWUpO1xuICAgIGlmICghcHJvcCkgcmV0dXJuIG9ialtuYW1lXTtcbiAgICByZXR1cm4gdGhpcy5nZXRPYmpQcm9wZXJ0eVZhbHVlQ29yZShvYmosIHByb3ApO1xuICB9XG4gIHB1YmxpYyBzZXRPYmpQcm9wZXJ0eVZhbHVlKG9iajogYW55LCBuYW1lOiBzdHJpbmcsIHZhbDogYW55KSB7XG4gICAgaWYgKG9ialtuYW1lXSA9PT0gdmFsKSByZXR1cm47XG4gICAgaWYgKCEhb2JqW25hbWVdICYmICEhb2JqW25hbWVdLnNldEpzb24pIHtcbiAgICAgIG9ialtuYW1lXS5zZXRKc29uKHZhbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9ialtuYW1lXSA9IHZhbDtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBnZXRPYmpQcm9wZXJ0eVZhbHVlQ29yZShvYmo6IGFueSwgcHJvcDogSnNvbk9iamVjdFByb3BlcnR5KTogYW55IHtcbiAgICBpZiAoIXByb3AuaXNTZXJpYWxpemFibGUpIHJldHVybiBvYmpbcHJvcC5uYW1lXTtcbiAgICBpZiAocHJvcC5pc0xvY2FsaXphYmxlKSB7XG4gICAgICBpZiAocHJvcC5pc0FycmF5KSByZXR1cm4gb2JqW3Byb3AubmFtZV07XG4gICAgICBpZiAoISFwcm9wLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eSlcbiAgICAgICAgcmV0dXJuIG9ialtwcm9wLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eV0udGV4dDtcbiAgICB9XG4gICAgcmV0dXJuIG9iai5nZXRQcm9wZXJ0eVZhbHVlKHByb3AubmFtZSk7XG4gIH1cbiAgcHJpdmF0ZSBpc09ialdyYXBwZXIob2JqOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFvYmouZ2V0T3JpZ2luYWxPYmogJiYgISFvYmouZ2V0T3JpZ2luYWxPYmooKTtcbiAgfVxuICBwdWJsaWMgYWRkQ2xhc3MoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHByb3BlcnRpZXM6IEFycmF5PGFueT4sXG4gICAgY3JlYXRvcjogKGpzb24/OiBhbnkpID0+IGFueSA9IG51bGwsXG4gICAgcGFyZW50TmFtZTogc3RyaW5nID0gbnVsbFxuICApOiBKc29uTWV0YWRhdGFDbGFzcyB7XG4gICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgbWV0YURhdGFDbGFzcyA9IG5ldyBKc29uTWV0YWRhdGFDbGFzcyhcbiAgICAgIG5hbWUsXG4gICAgICBwcm9wZXJ0aWVzLFxuICAgICAgY3JlYXRvcixcbiAgICAgIHBhcmVudE5hbWVcbiAgICApO1xuICAgIHRoaXMuY2xhc3Nlc1tuYW1lXSA9IG1ldGFEYXRhQ2xhc3M7XG4gICAgaWYgKHBhcmVudE5hbWUpIHtcbiAgICAgIHBhcmVudE5hbWUgPSBwYXJlbnROYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuQ2xhc3Nlc1twYXJlbnROYW1lXTtcbiAgICAgIGlmICghY2hpbGRyZW4pIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbkNsYXNzZXNbcGFyZW50TmFtZV0gPSBbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2hpbGRyZW5DbGFzc2VzW3BhcmVudE5hbWVdLnB1c2gobWV0YURhdGFDbGFzcyk7XG4gICAgfVxuICAgIHJldHVybiBtZXRhRGF0YUNsYXNzO1xuICB9XG4gIHB1YmxpYyByZW1vdmVDbGFzcyhuYW1lOiBzdHJpbmcpIHtcbiAgICB2YXIgbWV0YUNsYXNzID0gdGhpcy5maW5kQ2xhc3MobmFtZSk7XG4gICAgaWYgKCFtZXRhQ2xhc3MpIHJldHVybjtcbiAgICBkZWxldGUgdGhpcy5jbGFzc2VzW21ldGFDbGFzcy5uYW1lXTtcbiAgICBpZiAoISFtZXRhQ2xhc3MucGFyZW50TmFtZSkge1xuICAgICAgdmFyIGluZGV4ID0gdGhpcy5jaGlsZHJlbkNsYXNzZXNbbWV0YUNsYXNzLnBhcmVudE5hbWVdLmluZGV4T2YobWV0YUNsYXNzKTtcbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5DbGFzc2VzW21ldGFDbGFzcy5wYXJlbnROYW1lXS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwdWJsaWMgb3ZlcnJpZGVDbGFzc0NyZWF0b3JlKG5hbWU6IHN0cmluZywgY3JlYXRvcjogKCkgPT4gYW55KSB7XG4gICAgdGhpcy5vdmVycmlkZUNsYXNzQ3JlYXRvcihuYW1lLCBjcmVhdG9yKTtcbiAgfVxuICBwdWJsaWMgb3ZlcnJpZGVDbGFzc0NyZWF0b3IobmFtZTogc3RyaW5nLCBjcmVhdG9yOiAoKSA9PiBhbnkpIHtcbiAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciBtZXRhRGF0YUNsYXNzID0gdGhpcy5maW5kQ2xhc3MobmFtZSk7XG4gICAgaWYgKG1ldGFEYXRhQ2xhc3MpIHtcbiAgICAgIG1ldGFEYXRhQ2xhc3MuY3JlYXRvciA9IGNyZWF0b3I7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXRQcm9wZXJ0aWVzKGNsYXNzTmFtZTogc3RyaW5nKTogQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5PiB7XG4gICAgdmFyIG1ldGFDbGFzcyA9IHRoaXMuZmluZENsYXNzKGNsYXNzTmFtZSk7XG4gICAgaWYgKCFtZXRhQ2xhc3MpIHJldHVybiBbXTtcbiAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMuY2xhc3NQcm9wZXJ0aWVzW21ldGFDbGFzcy5uYW1lXTtcbiAgICBpZiAoISFwcm9wZXJ0aWVzKSByZXR1cm4gcHJvcGVydGllcztcbiAgICB0aGlzLmZpbGxQcm9wZXJ0aWVzRm9yQ2xhc3MobWV0YUNsYXNzLm5hbWUpO1xuICAgIHJldHVybiB0aGlzLmNsYXNzUHJvcGVydGllc1ttZXRhQ2xhc3MubmFtZV07XG4gIH1cbiAgcHJpdmF0ZSBnZXRIYXNoUHJvcGVydGllcyhjbGFzc05hbWU6IHN0cmluZyk6IEhhc2hUYWJsZTxKc29uT2JqZWN0UHJvcGVydHk+IHtcbiAgICB2YXIgbWV0YUNsYXNzID0gdGhpcy5maW5kQ2xhc3MoY2xhc3NOYW1lKTtcbiAgICBpZiAoIW1ldGFDbGFzcykgcmV0dXJuIHt9O1xuICAgIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5jbGFzc0hhc2hQcm9wZXJ0aWVzW21ldGFDbGFzcy5uYW1lXTtcbiAgICBpZiAoISFwcm9wZXJ0aWVzKSByZXR1cm4gcHJvcGVydGllcztcbiAgICB0aGlzLmZpbGxQcm9wZXJ0aWVzRm9yQ2xhc3MobWV0YUNsYXNzLm5hbWUpO1xuICAgIHJldHVybiB0aGlzLmNsYXNzSGFzaFByb3BlcnRpZXNbbWV0YUNsYXNzLm5hbWVdO1xuICB9XG4gIHByaXZhdGUgZmlsbFByb3BlcnRpZXNGb3JDbGFzcyhjbGFzc05hbWU6IHN0cmluZykge1xuICAgIHZhciBwcm9wZXJ0aWVzID0gbmV3IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4oKTtcbiAgICB2YXIgaGFzaFByb3BlcnRpZXMgPSB7fTtcbiAgICB0aGlzLmZpbGxQcm9wZXJ0aWVzKGNsYXNzTmFtZSwgcHJvcGVydGllcywgaGFzaFByb3BlcnRpZXMpO1xuICAgIHRoaXMuY2xhc3NQcm9wZXJ0aWVzW2NsYXNzTmFtZV0gPSBwcm9wZXJ0aWVzO1xuICAgIHRoaXMuY2xhc3NIYXNoUHJvcGVydGllc1tjbGFzc05hbWVdID0gaGFzaFByb3BlcnRpZXM7XG4gIH1cbiAgcHVibGljIGdldFByb3BlcnRpZXNCeU9iaihvYmo6IGFueSk6IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4ge1xuICAgIGlmICghb2JqIHx8ICFvYmouZ2V0VHlwZSkgcmV0dXJuIFtdO1xuICAgIHZhciByZXM6IGFueSA9IHt9O1xuICAgIHZhciBwcm9wcyA9IHRoaXMuZ2V0UHJvcGVydGllcyhvYmouZ2V0VHlwZSgpKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXNbcHJvcHNbaV0ubmFtZV0gPSBwcm9wc1tpXTtcbiAgICB9XG4gICAgdmFyIGR5bmFtaWNQcm9wcyA9ICEhb2JqLmdldER5bmFtaWNUeXBlXG4gICAgICA/IHRoaXMuZ2V0UHJvcGVydGllcyhvYmouZ2V0RHluYW1pY1R5cGUoKSlcbiAgICAgIDogbnVsbDtcbiAgICBpZiAoZHluYW1pY1Byb3BzICYmIGR5bmFtaWNQcm9wcy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGR5bmFtaWNQcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgZFByb3AgPSBkeW5hbWljUHJvcHNbaV07XG4gICAgICAgIGlmICghIXJlc1tkUHJvcC5uYW1lXSkgY29udGludWU7XG4gICAgICAgIHJlc1tkUHJvcC5uYW1lXSA9IGRQcm9wO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmtleXMocmVzKS5tYXAoKGtleSkgPT4gcmVzW2tleV0pO1xuICB9XG4gIHB1YmxpYyBnZXREeW5hbWljUHJvcGVydGllc0J5T2JqKFxuICAgIG9iajogYW55LFxuICAgIGR5bmFtaWNUeXBlOiBzdHJpbmcgPSBudWxsXG4gICk6IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4ge1xuICAgIGlmICghb2JqIHx8ICFvYmouZ2V0VHlwZSB8fCAoIW9iai5nZXREeW5hbWljVHlwZSAmJiAhZHluYW1pY1R5cGUpKVxuICAgICAgcmV0dXJuIFtdO1xuICAgIHZhciBkVHlwZSA9ICEhZHluYW1pY1R5cGUgPyBkeW5hbWljVHlwZSA6IG9iai5nZXREeW5hbWljVHlwZSgpO1xuICAgIGlmICghZFR5cGUpIHJldHVybiBbXTtcbiAgICB2YXIgZHluYW1pY1Byb3BzID0gdGhpcy5nZXRQcm9wZXJ0aWVzKGRUeXBlKTtcbiAgICBpZiAoIWR5bmFtaWNQcm9wcyB8fCBkeW5hbWljUHJvcHMubGVuZ3RoID09IDApIHJldHVybiBbXTtcbiAgICB2YXIgaGFzaDogYW55ID0ge307XG4gICAgdmFyIHByb3BzID0gdGhpcy5nZXRQcm9wZXJ0aWVzKG9iai5nZXRUeXBlKCkpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGhhc2hbcHJvcHNbaV0ubmFtZV0gPSBwcm9wc1tpXTtcbiAgICB9XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZHluYW1pY1Byb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgZFByb3AgPSBkeW5hbWljUHJvcHNbaV07XG4gICAgICBpZiAoIWhhc2hbZFByb3AubmFtZV0pIHtcbiAgICAgICAgcmVzLnB1c2goZFByb3ApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBoYXNPcmlnaW5hbFByb3BlcnR5KG9iajogQmFzZSwgcHJvcE5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuZ2V0T3JpZ2luYWxQcm9wZXJ0eShvYmosIHByb3BOYW1lKTtcbiAgfVxuICBwdWJsaWMgZ2V0T3JpZ2luYWxQcm9wZXJ0eShvYmo6IEJhc2UsIHByb3BOYW1lOiBzdHJpbmcpOiBKc29uT2JqZWN0UHJvcGVydHkge1xuICAgIHZhciByZXMgPSB0aGlzLmZpbmRQcm9wZXJ0eShvYmouZ2V0VHlwZSgpLCBwcm9wTmFtZSk7XG4gICAgaWYgKCEhcmVzKSByZXR1cm4gcmVzO1xuICAgIGlmICh0aGlzLmlzT2JqV3JhcHBlcihvYmopKVxuICAgICAgcmV0dXJuIHRoaXMuZmluZFByb3BlcnR5KCg8YW55Pm9iaikuZ2V0T3JpZ2luYWxPYmooKS5nZXRUeXBlKCksIHByb3BOYW1lKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwdWJsaWMgZmluZFByb3BlcnR5KFxuICAgIGNsYXNzTmFtZTogc3RyaW5nLFxuICAgIHByb3BlcnR5TmFtZTogc3RyaW5nXG4gICk6IEpzb25PYmplY3RQcm9wZXJ0eSB7XG4gICAgdmFyIGhhc2ggPSB0aGlzLmdldEhhc2hQcm9wZXJ0aWVzKGNsYXNzTmFtZSk7XG4gICAgdmFyIHJlcyA9IGhhc2hbcHJvcGVydHlOYW1lXTtcbiAgICByZXR1cm4gISFyZXMgPyByZXMgOiBudWxsO1xuICB9XG4gIHB1YmxpYyBmaW5kUHJvcGVydGllcyhcbiAgICBjbGFzc05hbWU6IHN0cmluZyxcbiAgICBwcm9wZXJ0eU5hbWVzOiBBcnJheTxzdHJpbmc+XG4gICk6IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4ge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgaGFzaCA9IHRoaXMuZ2V0SGFzaFByb3BlcnRpZXMoY2xhc3NOYW1lKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnR5TmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwcm9wID0gaGFzaFtwcm9wZXJ0eU5hbWVzW2ldXTtcbiAgICAgIGlmIChwcm9wKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHByb3ApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHB1YmxpYyBnZXRBbGxQcm9wZXJ0aWVzQnlOYW1lKFxuICAgIHByb3BlcnR5TmFtZTogc3RyaW5nXG4gICk6IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4ge1xuICAgIHZhciByZXMgPSBuZXcgQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5PigpO1xuICAgIHZhciBjbGFzc2VzID0gdGhpcy5nZXRBbGxDbGFzc2VzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2xhc3NJbmZvID0gdGhpcy5maW5kQ2xhc3MoY2xhc3Nlc1tpXSk7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNsYXNzSW5mby5wcm9wZXJ0aWVzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChjbGFzc0luZm8ucHJvcGVydGllc1tqXS5uYW1lID09IHByb3BlcnR5TmFtZSkge1xuICAgICAgICAgIHJlcy5wdXNoKGNsYXNzSW5mby5wcm9wZXJ0aWVzW2pdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBnZXRBbGxDbGFzc2VzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHZhciByZXMgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5jbGFzc2VzKSB7XG4gICAgICByZXMucHVzaChuYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgY3JlYXRlQ2xhc3MobmFtZTogc3RyaW5nLCBqc29uOiBhbnkgPSB1bmRlZmluZWQpOiBhbnkge1xuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIG1ldGFEYXRhQ2xhc3MgPSB0aGlzLmZpbmRDbGFzcyhuYW1lKTtcbiAgICBpZiAoIW1ldGFEYXRhQ2xhc3MpIHJldHVybiBudWxsO1xuICAgIGlmIChtZXRhRGF0YUNsYXNzLmNyZWF0b3IpIHJldHVybiBtZXRhRGF0YUNsYXNzLmNyZWF0b3IoanNvbik7XG4gICAgdmFyIHBhcmVudE5hbWUgPSBtZXRhRGF0YUNsYXNzLnBhcmVudE5hbWU7XG4gICAgd2hpbGUgKHBhcmVudE5hbWUpIHtcbiAgICAgIG1ldGFEYXRhQ2xhc3MgPSB0aGlzLmZpbmRDbGFzcyhwYXJlbnROYW1lKTtcbiAgICAgIGlmICghbWV0YURhdGFDbGFzcykgcmV0dXJuIG51bGw7XG4gICAgICBwYXJlbnROYW1lID0gbWV0YURhdGFDbGFzcy5wYXJlbnROYW1lO1xuICAgICAgaWYgKG1ldGFEYXRhQ2xhc3MuY3JlYXRvcilcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlQ3VzdG9tVHlwZShuYW1lLCBtZXRhRGF0YUNsYXNzLmNyZWF0b3IsIGpzb24pO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwcml2YXRlIGNyZWF0ZUN1c3RvbVR5cGUoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGNyZWF0b3I6IGFueSxcbiAgICBqc29uOiBhbnkgPSB1bmRlZmluZWRcbiAgKTogYW55IHtcbiAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciByZXMgPSBjcmVhdG9yKGpzb24pO1xuICAgIHZhciBjdXN0b21UeXBlTmFtZSA9IG5hbWU7XG4gICAgdmFyIGN1c3RvbVRlbXBsYXRlTmFtZSA9IHJlcy5nZXRUZW1wbGF0ZVxuICAgICAgPyByZXMuZ2V0VGVtcGxhdGUoKVxuICAgICAgOiByZXMuZ2V0VHlwZSgpO1xuICAgIHJlcy5nZXRUeXBlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gY3VzdG9tVHlwZU5hbWU7XG4gICAgfTtcbiAgICByZXMuZ2V0VGVtcGxhdGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBjdXN0b21UZW1wbGF0ZU5hbWU7XG4gICAgfTtcbiAgICBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5jcmVhdGVQcm9wZXJ0aWVzKHJlcyk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgZ2V0Q2hpbGRyZW5DbGFzc2VzKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBjYW5CZUNyZWF0ZWQ6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBBcnJheTxKc29uTWV0YWRhdGFDbGFzcz4ge1xuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIHJlc3VsdDogQXJyYXk8SnNvbk1ldGFkYXRhQ2xhc3M+ID0gW107XG4gICAgdGhpcy5maWxsQ2hpbGRyZW5DbGFzc2VzKG5hbWUsIGNhbkJlQ3JlYXRlZCwgcmVzdWx0KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHB1YmxpYyBnZXRSZXF1aXJlZFByb3BlcnRpZXMobmFtZTogc3RyaW5nKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLmdldFByb3BlcnRpZXMobmFtZSk7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHByb3BlcnRpZXNbaV0uaXNSZXF1aXJlZCkge1xuICAgICAgICByZXMucHVzaChwcm9wZXJ0aWVzW2ldLm5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBhZGRQcm9wZXJ0aWVzKGNsYXNzTmFtZTogc3RyaW5nLCBwcm9wZXJ0aWVzSW5mb3M6IEFycmF5PGFueT4pIHtcbiAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgbWV0YURhdGFDbGFzcyA9IHRoaXMuZmluZENsYXNzKGNsYXNzTmFtZSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzSW5mb3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuYWRkQ3VzdG9tUHJvcGVydHlDb3JlKG1ldGFEYXRhQ2xhc3MsIHByb3BlcnRpZXNJbmZvc1tpXSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBhZGRQcm9wZXJ0eShjbGFzc05hbWU6IHN0cmluZywgcHJvcGVydHlJbmZvOiBhbnkpOiBKc29uT2JqZWN0UHJvcGVydHkge1xuICAgIHJldHVybiB0aGlzLmFkZEN1c3RvbVByb3BlcnR5Q29yZSh0aGlzLmZpbmRDbGFzcyhjbGFzc05hbWUpLCBwcm9wZXJ0eUluZm8pO1xuICB9XG4gIHByaXZhdGUgYWRkQ3VzdG9tUHJvcGVydHlDb3JlKFxuICAgIG1ldGFEYXRhQ2xhc3M6IEpzb25NZXRhZGF0YUNsYXNzLFxuICAgIHByb3BlcnR5SW5mbzogYW55XG4gICk6IEpzb25PYmplY3RQcm9wZXJ0eSB7XG4gICAgaWYgKCFtZXRhRGF0YUNsYXNzKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgcHJvcGVydHkgPSBtZXRhRGF0YUNsYXNzLmNyZWF0ZVByb3BlcnR5KHByb3BlcnR5SW5mbyk7XG4gICAgaWYgKHByb3BlcnR5KSB7XG4gICAgICBwcm9wZXJ0eS5pc0N1c3RvbSA9IHRydWU7XG4gICAgICB0aGlzLmFkZFByb3BlcnR5VG9DbGFzcyhtZXRhRGF0YUNsYXNzLCBwcm9wZXJ0eSk7XG4gICAgICB0aGlzLmVtcHR5Q2xhc3NQcm9wZXJ0aWVzSGFzaChtZXRhRGF0YUNsYXNzKTtcbiAgICAgIEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLmFkZFByb3BlcnR5KG1ldGFEYXRhQ2xhc3MubmFtZSwgcHJvcGVydHkpO1xuICAgIH1cbiAgICByZXR1cm4gcHJvcGVydHk7XG4gIH1cbiAgcHVibGljIHJlbW92ZVByb3BlcnR5KGNsYXNzTmFtZTogc3RyaW5nLCBwcm9wZXJ0eU5hbWU6IHN0cmluZykge1xuICAgIHZhciBtZXRhRGF0YUNsYXNzID0gdGhpcy5maW5kQ2xhc3MoY2xhc3NOYW1lKTtcbiAgICBpZiAoIW1ldGFEYXRhQ2xhc3MpIHJldHVybiBmYWxzZTtcbiAgICB2YXIgcHJvcGVydHkgPSBtZXRhRGF0YUNsYXNzLmZpbmQocHJvcGVydHlOYW1lKTtcbiAgICBpZiAocHJvcGVydHkpIHtcbiAgICAgIHRoaXMucmVtb3ZlUHJvcGVydHlGcm9tQ2xhc3MobWV0YURhdGFDbGFzcywgcHJvcGVydHkpO1xuICAgICAgdGhpcy5lbXB0eUNsYXNzUHJvcGVydGllc0hhc2gobWV0YURhdGFDbGFzcyk7XG4gICAgICBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5yZW1vdmVQcm9wZXJ0eShcbiAgICAgICAgbWV0YURhdGFDbGFzcy5uYW1lLFxuICAgICAgICBwcm9wZXJ0eU5hbWVcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgYWRkUHJvcGVydHlUb0NsYXNzKFxuICAgIG1ldGFEYXRhQ2xhc3M6IEpzb25NZXRhZGF0YUNsYXNzLFxuICAgIHByb3BlcnR5OiBKc29uT2JqZWN0UHJvcGVydHlcbiAgKSB7XG4gICAgaWYgKG1ldGFEYXRhQ2xhc3MuZmluZChwcm9wZXJ0eS5uYW1lKSAhPSBudWxsKSByZXR1cm47XG4gICAgbWV0YURhdGFDbGFzcy5wcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpO1xuICB9XG4gIHByaXZhdGUgcmVtb3ZlUHJvcGVydHlGcm9tQ2xhc3MoXG4gICAgbWV0YURhdGFDbGFzczogSnNvbk1ldGFkYXRhQ2xhc3MsXG4gICAgcHJvcGVydHk6IEpzb25PYmplY3RQcm9wZXJ0eVxuICApIHtcbiAgICB2YXIgaW5kZXggPSBtZXRhRGF0YUNsYXNzLnByb3BlcnRpZXMuaW5kZXhPZihwcm9wZXJ0eSk7XG4gICAgaWYgKGluZGV4IDwgMCkgcmV0dXJuO1xuICAgIG1ldGFEYXRhQ2xhc3MucHJvcGVydGllcy5zcGxpY2UoaW5kZXgsIDEpO1xuICB9XG4gIHByaXZhdGUgZW1wdHlDbGFzc1Byb3BlcnRpZXNIYXNoKG1ldGFEYXRhQ2xhc3M6IEpzb25NZXRhZGF0YUNsYXNzKSB7XG4gICAgdGhpcy5jbGFzc1Byb3BlcnRpZXNbbWV0YURhdGFDbGFzcy5uYW1lXSA9IG51bGw7XG4gICAgdGhpcy5jbGFzc0hhc2hQcm9wZXJ0aWVzW21ldGFEYXRhQ2xhc3MubmFtZV0gPSBudWxsO1xuICAgIHZhciBjaGlsZENsYXNzZXMgPSB0aGlzLmdldENoaWxkcmVuQ2xhc3NlcyhtZXRhRGF0YUNsYXNzLm5hbWUpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRDbGFzc2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmNsYXNzUHJvcGVydGllc1tjaGlsZENsYXNzZXNbaV0ubmFtZV0gPSBudWxsO1xuICAgICAgdGhpcy5jbGFzc0hhc2hQcm9wZXJ0aWVzW2NoaWxkQ2xhc3Nlc1tpXS5uYW1lXSA9IG51bGw7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZmlsbENoaWxkcmVuQ2xhc3NlcyhcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgY2FuQmVDcmVhdGVkOiBib29sZWFuLFxuICAgIHJlc3VsdDogQXJyYXk8SnNvbk1ldGFkYXRhQ2xhc3M+XG4gICkge1xuICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW5DbGFzc2VzW25hbWVdO1xuICAgIGlmICghY2hpbGRyZW4pIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIWNhbkJlQ3JlYXRlZCB8fCBjaGlsZHJlbltpXS5jcmVhdG9yKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGNoaWxkcmVuW2ldKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZmlsbENoaWxkcmVuQ2xhc3NlcyhjaGlsZHJlbltpXS5uYW1lLCBjYW5CZUNyZWF0ZWQsIHJlc3VsdCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBmaW5kQ2xhc3MobmFtZTogc3RyaW5nKTogSnNvbk1ldGFkYXRhQ2xhc3Mge1xuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIHJlcyA9IHRoaXMuY2xhc3Nlc1tuYW1lXTtcbiAgICBpZiAoIXJlcykge1xuICAgICAgdmFyIG5ld05hbWUgPSB0aGlzLmFsdGVybmF0aXZlTmFtZXNbbmFtZV07XG4gICAgICBpZiAoISFuZXdOYW1lICYmIG5ld05hbWUgIT0gbmFtZSkgcmV0dXJuIHRoaXMuZmluZENsYXNzKG5ld05hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBpc0Rlc2NlbmRhbnRPZihjbGFzc05hbWU6IHN0cmluZywgYW5jZXN0b3JDbGFzc05hbWU6IHN0cmluZykge1xuICAgIGlmICghY2xhc3NOYW1lIHx8ICFhbmNlc3RvckNsYXNzTmFtZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBhbmNlc3RvckNsYXNzTmFtZSA9IGFuY2VzdG9yQ2xhc3NOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIGNsYXNzXyA9IHRoaXMuZmluZENsYXNzKGNsYXNzTmFtZSk7XG4gICAgaWYgKCFjbGFzc18pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIHBhcmVudENsYXNzID0gY2xhc3NfO1xuICAgIGRvIHtcbiAgICAgIGlmIChwYXJlbnRDbGFzcy5uYW1lID09PSBhbmNlc3RvckNsYXNzTmFtZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHBhcmVudENsYXNzID0gdGhpcy5jbGFzc2VzW3BhcmVudENsYXNzLnBhcmVudE5hbWVdO1xuICAgIH0gd2hpbGUgKCEhcGFyZW50Q2xhc3MpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgYWRkQWx0ZXJOYXRpdmVDbGFzc05hbWUobmFtZTogc3RyaW5nLCBhbHRlcm5hdGl2ZU5hbWU6IHN0cmluZykge1xuICAgIHRoaXMuYWx0ZXJuYXRpdmVOYW1lc1thbHRlcm5hdGl2ZU5hbWUudG9Mb3dlckNhc2UoKV0gPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gIH1cbiAgcHVibGljIGdlbmVyYXRlU2NoZW1hKGNsYXNzTmFtZTogc3RyaW5nID0gdW5kZWZpbmVkKTogYW55IHtcbiAgICBpZiAoIWNsYXNzTmFtZSkgY2xhc3NOYW1lID0gXCJzdXJ2ZXlcIjtcbiAgICB2YXIgY2xhc3NJbmZvID0gdGhpcy5maW5kQ2xhc3MoY2xhc3NOYW1lKTtcbiAgICBpZiAoIWNsYXNzSW5mbykgcmV0dXJuIG51bGw7XG4gICAgdmFyIHJlcyA9IHtcbiAgICAgICRzY2hlbWE6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWEjXCIsXG4gICAgICB0aXRsZTogXCJTdXJ2ZXlKUyBMaWJyYXJ5IGpzb24gc2NoZW1hXCIsXG4gICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgcHJvcGVydGllczoge30sXG4gICAgICBkZWZpbml0aW9uczoge30sXG4gICAgfTtcbiAgICB0aGlzLmdlbmVyYXRlU2NoZW1hUHJvcGVydGllcyhjbGFzc0luZm8sIHJlcy5wcm9wZXJ0aWVzLCByZXMuZGVmaW5pdGlvbnMpO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSBnZW5lcmF0ZVNjaGVtYVByb3BlcnRpZXMoXG4gICAgY2xhc3NJbmZvOiBKc29uTWV0YWRhdGFDbGFzcyxcbiAgICBzY2hlbWFQcm9wZXJ0aWVzOiBhbnksXG4gICAgc2NoZW1hRGVmOiBhbnlcbiAgKTogdm9pZCB7XG4gICAgaWYgKCFjbGFzc0luZm8pIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNsYXNzSW5mby5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcHJvcCA9IGNsYXNzSW5mby5wcm9wZXJ0aWVzW2ldO1xuICAgICAgc2NoZW1hUHJvcGVydGllc1twcm9wLm5hbWVdID0gdGhpcy5nZW5lcmF0ZVNjaGVtYVByb3BlcnR5KFxuICAgICAgICBwcm9wLFxuICAgICAgICBzY2hlbWFEZWZcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2VuZXJhdGVTY2hlbWFQcm9wZXJ0eShcbiAgICBwcm9wOiBKc29uT2JqZWN0UHJvcGVydHksXG4gICAgc2NoZW1hRGVmOiBhbnlcbiAgKTogYW55IHtcbiAgICB2YXIgcmVzOiBhbnkgPSB7IHR5cGU6IHByb3Auc2NoZW1hVHlwZSgpIH07XG4gICAgaWYgKHByb3AuaGFzQ2hvaWNlcykge1xuICAgICAgcmVzLmVudW0gPSBwcm9wLmdldENob2ljZXMobnVsbCk7XG4gICAgfVxuICAgIGlmICghIXByb3AuY2xhc3NOYW1lKSB7XG4gICAgICByZXMuaXRlbXMgPSB7ICRyZWY6IFwiI1wiICsgcHJvcC5jbGFzc05hbWUgfTtcbiAgICAgIHRoaXMuZ2VuZXJhdGVDaGVtYUNsYXNzKHByb3AuY2xhc3NOYW1lLCBzY2hlbWFEZWYpO1xuICAgIH1cbiAgICBpZiAoISFwcm9wLmJhc2VDbGFzc05hbWUpIHtcbiAgICAgIHZhciB1c2VkQ2xhc3NlcyA9IHRoaXMuZ2V0Q2hpbGRyZW5DbGFzc2VzKHByb3AuYmFzZUNsYXNzTmFtZSwgdHJ1ZSk7XG4gICAgICBpZiAocHJvcC5iYXNlQ2xhc3NOYW1lID09IFwicXVlc3Rpb25cIikge1xuICAgICAgICB1c2VkQ2xhc3Nlcy5wdXNoKHRoaXMuZmluZENsYXNzKFwicGFuZWxcIikpO1xuICAgICAgfVxuICAgICAgcmVzLml0ZW1zID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVzZWRDbGFzc2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjbGFzc05hbWUgPSB1c2VkQ2xhc3Nlc1tpXS5uYW1lO1xuICAgICAgICByZXMuaXRlbXMucHVzaCh7ICRyZWY6IFwiI1wiICsgY2xhc3NOYW1lIH0pO1xuICAgICAgICB0aGlzLmdlbmVyYXRlQ2hlbWFDbGFzcyhjbGFzc05hbWUsIHNjaGVtYURlZik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSBnZW5lcmF0ZUNoZW1hQ2xhc3MoY2xhc3NOYW1lOiBzdHJpbmcsIHNjaGVtYURlZjogYW55KSB7XG4gICAgaWYgKCEhc2NoZW1hRGVmW2NsYXNzTmFtZV0pIHJldHVybjtcbiAgICB2YXIgY2xhc3NJbmZvID0gdGhpcy5maW5kQ2xhc3MoY2xhc3NOYW1lKTtcbiAgICBpZiAoIWNsYXNzSW5mbykgcmV0dXJuO1xuICAgIHZhciBoYXNQYXJlbnQgPSAhIWNsYXNzSW5mby5wYXJlbnROYW1lICYmIGNsYXNzSW5mby5wYXJlbnROYW1lICE9IFwiYmFzZVwiO1xuICAgIGlmIChoYXNQYXJlbnQpIHtcbiAgICAgIHRoaXMuZ2VuZXJhdGVDaGVtYUNsYXNzKGNsYXNzSW5mby5wYXJlbnROYW1lLCBzY2hlbWFEZWYpO1xuICAgIH1cbiAgICB2YXIgcmVzOiBhbnkgPSB7IHR5cGU6IFwib2JqZWN0XCIsICRpZDogXCIjXCIgKyBjbGFzc05hbWUgfTtcbiAgICBzY2hlbWFEZWZbY2xhc3NOYW1lXSA9IHJlcztcbiAgICB2YXIgcHJvcHMgPSB7fTtcbiAgICB0aGlzLmdlbmVyYXRlU2NoZW1hUHJvcGVydGllcyhjbGFzc0luZm8sIHByb3BzLCBzY2hlbWFEZWYpO1xuICAgIGlmIChoYXNQYXJlbnQpIHtcbiAgICAgIHJlcy5hbGxPZmYgPSBbXG4gICAgICAgIHsgJHJlZjogXCIjXCIgKyBjbGFzc0luZm8ucGFyZW50TmFtZSB9LFxuICAgICAgICB7IHByb3BlcnRpZXM6IHByb3BzIH0sXG4gICAgICBdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMucHJvcGVydGllcyA9IHByb3BzO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGZpbGxQcm9wZXJ0aWVzKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBsaXN0OiBBcnJheTxKc29uT2JqZWN0UHJvcGVydHk+LFxuICAgIGhhc2g6IEhhc2hUYWJsZTxKc29uT2JqZWN0UHJvcGVydHk+XG4gICkge1xuICAgIHZhciBtZXRhRGF0YUNsYXNzID0gdGhpcy5maW5kQ2xhc3MobmFtZSk7XG4gICAgaWYgKCFtZXRhRGF0YUNsYXNzKSByZXR1cm47XG4gICAgaWYgKG1ldGFEYXRhQ2xhc3MucGFyZW50TmFtZSkge1xuICAgICAgdGhpcy5maWxsUHJvcGVydGllcyhtZXRhRGF0YUNsYXNzLnBhcmVudE5hbWUsIGxpc3QsIGhhc2gpO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1ldGFEYXRhQ2xhc3MucHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHByb3AgPSBtZXRhRGF0YUNsYXNzLnByb3BlcnRpZXNbaV07XG4gICAgICB0aGlzLmFkZFByb3BlcnR5Q29yZShwcm9wLCBsaXN0LCBoYXNoKTtcbiAgICAgIGhhc2hbcHJvcC5uYW1lXSA9IHByb3A7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgYWRkUHJvcGVydHlDb3JlKFxuICAgIHByb3BlcnR5OiBKc29uT2JqZWN0UHJvcGVydHksXG4gICAgbGlzdDogQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5PixcbiAgICBoYXNoOiBIYXNoVGFibGU8SnNvbk9iamVjdFByb3BlcnR5PlxuICApIHtcbiAgICBpZiAoIWhhc2hbcHJvcGVydHkubmFtZV0pIHtcbiAgICAgIGxpc3QucHVzaChwcm9wZXJ0eSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBpbmRleCA9IC0xO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGxpc3RbaV0ubmFtZSA9PSBwcm9wZXJ0eS5uYW1lKSB7XG4gICAgICAgIGluZGV4ID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHByb3BlcnR5Lm1lcmdlV2l0aChsaXN0W2luZGV4XSk7XG4gICAgbGlzdFtpbmRleF0gPSBwcm9wZXJ0eTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEpzb25FcnJvciB7XG4gIHB1YmxpYyBkZXNjcmlwdGlvbjogc3RyaW5nID0gXCJcIjtcbiAgcHVibGljIGF0OiBOdW1iZXIgPSAtMTtcbiAgY29uc3RydWN0b3IocHVibGljIHR5cGU6IHN0cmluZywgcHVibGljIG1lc3NhZ2U6IHN0cmluZykge31cbiAgcHVibGljIGdldEZ1bGxEZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2UgKyAodGhpcy5kZXNjcmlwdGlvbiA/IFwiXFxuXCIgKyB0aGlzLmRlc2NyaXB0aW9uIDogXCJcIik7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBKc29uVW5rbm93blByb3BlcnR5RXJyb3IgZXh0ZW5kcyBKc29uRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcHJvcGVydHlOYW1lOiBzdHJpbmcsIHB1YmxpYyBjbGFzc05hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKFxuICAgICAgXCJ1bmtub3ducHJvcGVydHlcIixcbiAgICAgIFwiVGhlIHByb3BlcnR5ICdcIiArXG4gICAgICAgIHByb3BlcnR5TmFtZSArXG4gICAgICAgIFwiJyBpbiBjbGFzcyAnXCIgK1xuICAgICAgICBjbGFzc05hbWUgK1xuICAgICAgICBcIicgaXMgdW5rbm93bi5cIlxuICAgICk7XG4gICAgdmFyIHByb3BlcnRpZXMgPSBKc29uT2JqZWN0Lm1ldGFEYXRhLmdldFByb3BlcnRpZXMoY2xhc3NOYW1lKTtcbiAgICBpZiAocHJvcGVydGllcykge1xuICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IFwiVGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHByb3BlcnRpZXMgYXJlOiBcIjtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaSA+IDApIHRoaXMuZGVzY3JpcHRpb24gKz0gXCIsIFwiO1xuICAgICAgICB0aGlzLmRlc2NyaXB0aW9uICs9IHByb3BlcnRpZXNbaV0ubmFtZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGVzY3JpcHRpb24gKz0gXCIuXCI7XG4gICAgfVxuICB9XG59XG5leHBvcnQgY2xhc3MgSnNvbk1pc3NpbmdUeXBlRXJyb3JCYXNlIGV4dGVuZHMgSnNvbkVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGJhc2VDbGFzc05hbWU6IHN0cmluZyxcbiAgICBwdWJsaWMgdHlwZTogc3RyaW5nLFxuICAgIHB1YmxpYyBtZXNzYWdlOiBzdHJpbmdcbiAgKSB7XG4gICAgc3VwZXIodHlwZSwgbWVzc2FnZSk7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IFwiVGhlIGZvbGxvd2luZyB0eXBlcyBhcmUgYXZhaWxhYmxlOiBcIjtcbiAgICB2YXIgdHlwZXMgPSBKc29uT2JqZWN0Lm1ldGFEYXRhLmdldENoaWxkcmVuQ2xhc3NlcyhiYXNlQ2xhc3NOYW1lLCB0cnVlKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoaSA+IDApIHRoaXMuZGVzY3JpcHRpb24gKz0gXCIsIFwiO1xuICAgICAgdGhpcy5kZXNjcmlwdGlvbiArPSBcIidcIiArIHR5cGVzW2ldLm5hbWUgKyBcIidcIjtcbiAgICB9XG4gICAgdGhpcy5kZXNjcmlwdGlvbiArPSBcIi5cIjtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEpzb25NaXNzaW5nVHlwZUVycm9yIGV4dGVuZHMgSnNvbk1pc3NpbmdUeXBlRXJyb3JCYXNlIHtcbiAgY29uc3RydWN0b3IocHVibGljIHByb3BlcnR5TmFtZTogc3RyaW5nLCBwdWJsaWMgYmFzZUNsYXNzTmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoXG4gICAgICBiYXNlQ2xhc3NOYW1lLFxuICAgICAgXCJtaXNzaW5ndHlwZXByb3BlcnR5XCIsXG4gICAgICBcIlRoZSBwcm9wZXJ0eSB0eXBlIGlzIG1pc3NpbmcgaW4gdGhlIG9iamVjdC4gUGxlYXNlIHRha2UgYSBsb29rIGF0IHByb3BlcnR5OiAnXCIgK1xuICAgICAgICBwcm9wZXJ0eU5hbWUgK1xuICAgICAgICBcIicuXCJcbiAgICApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgSnNvbkluY29ycmVjdFR5cGVFcnJvciBleHRlbmRzIEpzb25NaXNzaW5nVHlwZUVycm9yQmFzZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBwcm9wZXJ0eU5hbWU6IHN0cmluZywgcHVibGljIGJhc2VDbGFzc05hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKFxuICAgICAgYmFzZUNsYXNzTmFtZSxcbiAgICAgIFwiaW5jb3JyZWN0dHlwZXByb3BlcnR5XCIsXG4gICAgICBcIlRoZSBwcm9wZXJ0eSB0eXBlIGlzIGluY29ycmVjdCBpbiB0aGUgb2JqZWN0LiBQbGVhc2UgdGFrZSBhIGxvb2sgYXQgcHJvcGVydHk6ICdcIiArXG4gICAgICAgIHByb3BlcnR5TmFtZSArXG4gICAgICAgIFwiJy5cIlxuICAgICk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBKc29uUmVxdWlyZWRQcm9wZXJ0eUVycm9yIGV4dGVuZHMgSnNvbkVycm9yIHtcbiAgY29uc3RydWN0b3IocHVibGljIHByb3BlcnR5TmFtZTogc3RyaW5nLCBwdWJsaWMgY2xhc3NOYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihcbiAgICAgIFwicmVxdWlyZWRwcm9wZXJ0eVwiLFxuICAgICAgXCJUaGUgcHJvcGVydHkgJ1wiICtcbiAgICAgICAgcHJvcGVydHlOYW1lICtcbiAgICAgICAgXCInIGlzIHJlcXVpcmVkIGluIGNsYXNzICdcIiArXG4gICAgICAgIGNsYXNzTmFtZSArXG4gICAgICAgIFwiJy5cIlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEpzb25PYmplY3Qge1xuICBwcml2YXRlIHN0YXRpYyB0eXBlUHJvcGVydHlOYW1lID0gXCJ0eXBlXCI7XG4gIHByaXZhdGUgc3RhdGljIHBvc2l0aW9uUHJvcGVydHlOYW1lID0gXCJwb3NcIjtcbiAgcHJpdmF0ZSBzdGF0aWMgbWV0YURhdGFWYWx1ZSA9IG5ldyBKc29uTWV0YWRhdGEoKTtcbiAgcHVibGljIHN0YXRpYyBnZXQgbWV0YURhdGEoKSB7XG4gICAgcmV0dXJuIEpzb25PYmplY3QubWV0YURhdGFWYWx1ZTtcbiAgfVxuICBwdWJsaWMgZXJyb3JzID0gbmV3IEFycmF5PEpzb25FcnJvcj4oKTtcbiAgcHVibGljIGxpZ2h0U2VyaWFsaXppbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHRvSnNvbk9iamVjdChvYmo6IGFueSwgc3RvcmVEZWZhdWx0cyA9IGZhbHNlKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy50b0pzb25PYmplY3RDb3JlKG9iaiwgbnVsbCwgc3RvcmVEZWZhdWx0cyk7XG4gIH1cbiAgcHVibGljIHRvT2JqZWN0KGpzb25PYmo6IGFueSwgb2JqOiBhbnkpIHtcbiAgICB0aGlzLnRvT2JqZWN0Q29yZShqc29uT2JqLCBvYmopO1xuICAgIHZhciBlcnJvciA9IHRoaXMuZ2V0UmVxdWlyZWRFcnJvcihvYmosIGpzb25PYmopO1xuICAgIGlmICghIWVycm9yKSB7XG4gICAgICB0aGlzLmFkZE5ld0Vycm9yKGVycm9yLCBqc29uT2JqKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIHRvT2JqZWN0Q29yZShqc29uT2JqOiBhbnksIG9iajogYW55KSB7XG4gICAgaWYgKCFqc29uT2JqKSByZXR1cm47XG4gICAgdmFyIHByb3BlcnRpZXMgPSBudWxsO1xuICAgIHZhciBvYmpUeXBlID0gdW5kZWZpbmVkO1xuICAgIHZhciBuZWVkQWRkRXJyb3JzID0gdHJ1ZTtcbiAgICBpZiAob2JqLmdldFR5cGUpIHtcbiAgICAgIG9ialR5cGUgPSBvYmouZ2V0VHlwZSgpO1xuICAgICAgcHJvcGVydGllcyA9IEpzb25PYmplY3QubWV0YURhdGEuZ2V0UHJvcGVydGllcyhvYmpUeXBlKTtcbiAgICAgIG5lZWRBZGRFcnJvcnMgPVxuICAgICAgICAhIW9ialR5cGUgJiYgIUpzb25PYmplY3QubWV0YURhdGEuaXNEZXNjZW5kYW50T2Yob2JqVHlwZSwgXCJpdGVtdmFsdWVcIik7XG4gICAgfVxuICAgIGlmICghcHJvcGVydGllcykgcmV0dXJuO1xuICAgIGlmIChvYmouc3RhcnRMb2FkaW5nRnJvbUpzb24pIHtcbiAgICAgIG9iai5zdGFydExvYWRpbmdGcm9tSnNvbigpO1xuICAgIH1cbiAgICBwcm9wZXJ0aWVzID0gdGhpcy5hZGREeW5hbWljUHJvcGVydGllcyhvYmosIGpzb25PYmosIHByb3BlcnRpZXMpO1xuICAgIGZvciAodmFyIGtleSBpbiBqc29uT2JqKSB7XG4gICAgICBpZiAoa2V5ID09PSBKc29uT2JqZWN0LnR5cGVQcm9wZXJ0eU5hbWUpIGNvbnRpbnVlO1xuICAgICAgaWYgKGtleSA9PT0gSnNvbk9iamVjdC5wb3NpdGlvblByb3BlcnR5TmFtZSkge1xuICAgICAgICBvYmpba2V5XSA9IGpzb25PYmpba2V5XTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLmZpbmRQcm9wZXJ0eShwcm9wZXJ0aWVzLCBrZXkpO1xuICAgICAgaWYgKCFwcm9wZXJ0eSkge1xuICAgICAgICBpZiAobmVlZEFkZEVycm9ycykge1xuICAgICAgICAgIHRoaXMuYWRkTmV3RXJyb3IoXG4gICAgICAgICAgICBuZXcgSnNvblVua25vd25Qcm9wZXJ0eUVycm9yKGtleS50b1N0cmluZygpLCBvYmpUeXBlKSxcbiAgICAgICAgICAgIGpzb25PYmpcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdGhpcy52YWx1ZVRvT2JqKGpzb25PYmpba2V5XSwgb2JqLCBwcm9wZXJ0eSk7XG4gICAgfVxuICAgIGlmIChvYmouZW5kTG9hZGluZ0Zyb21Kc29uKSB7XG4gICAgICBvYmouZW5kTG9hZGluZ0Zyb21Kc29uKCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyB0b0pzb25PYmplY3RDb3JlKFxuICAgIG9iajogYW55LFxuICAgIHByb3BlcnR5OiBKc29uT2JqZWN0UHJvcGVydHksXG4gICAgc3RvcmVEZWZhdWx0cyA9IGZhbHNlXG4gICk6IGFueSB7XG4gICAgaWYgKCFvYmogfHwgIW9iai5nZXRUeXBlKSByZXR1cm4gb2JqO1xuICAgIGlmICh0eXBlb2Ygb2JqLmdldERhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIG9iai5nZXREYXRhKCk7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChwcm9wZXJ0eSAhPSBudWxsICYmICFwcm9wZXJ0eS5jbGFzc05hbWUpIHtcbiAgICAgICg8YW55PnJlc3VsdClbSnNvbk9iamVjdC50eXBlUHJvcGVydHlOYW1lXSA9IHByb3BlcnR5LmdldE9ialR5cGUoXG4gICAgICAgIG9iai5nZXRUeXBlKClcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMucHJvcGVydGllc1RvSnNvbihcbiAgICAgIG9iaixcbiAgICAgIEpzb25PYmplY3QubWV0YURhdGEuZ2V0UHJvcGVydGllcyhvYmouZ2V0VHlwZSgpKSxcbiAgICAgIHJlc3VsdCxcbiAgICAgIHN0b3JlRGVmYXVsdHNcbiAgICApO1xuICAgIHRoaXMucHJvcGVydGllc1RvSnNvbihcbiAgICAgIG9iaixcbiAgICAgIHRoaXMuZ2V0RHluYW1pY1Byb3BlcnRpZXMob2JqKSxcbiAgICAgIHJlc3VsdCxcbiAgICAgIHN0b3JlRGVmYXVsdHNcbiAgICApO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHJpdmF0ZSBnZXREeW5hbWljUHJvcGVydGllcyhvYmo6IGFueSk6IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4ge1xuICAgIHJldHVybiBTZXJpYWxpemVyLmdldER5bmFtaWNQcm9wZXJ0aWVzQnlPYmoob2JqKTtcbiAgfVxuICBwcml2YXRlIGFkZER5bmFtaWNQcm9wZXJ0aWVzKFxuICAgIG9iajogYW55LFxuICAgIGpzb25PYmo6IGFueSxcbiAgICBwcm9wZXJ0aWVzOiBBcnJheTxKc29uT2JqZWN0UHJvcGVydHk+XG4gICk6IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4ge1xuICAgIGlmICghb2JqLmdldER5bmFtaWNQcm9wZXJ0eU5hbWUpIHJldHVybiBwcm9wZXJ0aWVzO1xuICAgIHZhciBkeW5hbWljUHJvcE5hbWUgPSBvYmouZ2V0RHluYW1pY1Byb3BlcnR5TmFtZSgpO1xuICAgIGlmICghZHluYW1pY1Byb3BOYW1lKSByZXR1cm4gcHJvcGVydGllcztcbiAgICBpZiAoanNvbk9ialtkeW5hbWljUHJvcE5hbWVdKSB7XG4gICAgICBvYmpbZHluYW1pY1Byb3BOYW1lXSA9IGpzb25PYmpbZHluYW1pY1Byb3BOYW1lXTtcbiAgICB9XG4gICAgdmFyIGR5bmFtaWNQcm9wZXJ0aWVzID0gdGhpcy5nZXREeW5hbWljUHJvcGVydGllcyhvYmopO1xuICAgIHZhciByZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlcy5wdXNoKHByb3BlcnRpZXNbaV0pO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXMucHVzaChkeW5hbWljUHJvcGVydGllc1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSBwcm9wZXJ0aWVzVG9Kc29uKFxuICAgIG9iajogYW55LFxuICAgIHByb3BlcnRpZXM6IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4sXG4gICAganNvbjogYW55LFxuICAgIHN0b3JlRGVmYXVsdHMgPSBmYWxzZVxuICApIHtcbiAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy52YWx1ZVRvSnNvbihvYmosIGpzb24sIHByb3BlcnRpZXNbaV0sIHN0b3JlRGVmYXVsdHMpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgdmFsdWVUb0pzb24oXG4gICAgb2JqOiBhbnksXG4gICAgcmVzdWx0OiBhbnksXG4gICAgcHJvcGVydHk6IEpzb25PYmplY3RQcm9wZXJ0eSxcbiAgICBzdG9yZURlZmF1bHRzID0gZmFsc2VcbiAgKSB7XG4gICAgaWYgKFxuICAgICAgcHJvcGVydHkuaXNTZXJpYWxpemFibGUgPT09IGZhbHNlIHx8XG4gICAgICAocHJvcGVydHkuaXNMaWdodFNlcmlhbGl6YWJsZSA9PT0gZmFsc2UgJiYgdGhpcy5saWdodFNlcmlhbGl6aW5nKVxuICAgIClcbiAgICAgIHJldHVybjtcbiAgICB2YXIgdmFsdWUgPSBwcm9wZXJ0eS5nZXRWYWx1ZShvYmopO1xuICAgIGlmICghc3RvcmVEZWZhdWx0cyAmJiBwcm9wZXJ0eS5pc0RlZmF1bHRWYWx1ZSh2YWx1ZSkpIHJldHVybjtcbiAgICBpZiAodGhpcy5pc1ZhbHVlQXJyYXkodmFsdWUpKSB7XG4gICAgICB2YXIgYXJyVmFsdWUgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYXJyVmFsdWUucHVzaCh0aGlzLnRvSnNvbk9iamVjdENvcmUodmFsdWVbaV0sIHByb3BlcnR5LCBzdG9yZURlZmF1bHRzKSk7XG4gICAgICB9XG4gICAgICB2YWx1ZSA9IGFyclZhbHVlLmxlbmd0aCA+IDAgPyBhcnJWYWx1ZSA6IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gdGhpcy50b0pzb25PYmplY3RDb3JlKHZhbHVlLCBwcm9wZXJ0eSwgc3RvcmVEZWZhdWx0cyk7XG4gICAgfVxuICAgIHZhciBoYXNWYWx1ZSA9XG4gICAgICB0eXBlb2Ygb2JqW1wiZ2V0UHJvcGVydHlWYWx1ZVwiXSA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICBvYmpbXCJnZXRQcm9wZXJ0eVZhbHVlXCJdKHByb3BlcnR5Lm5hbWUsIG51bGwpICE9PSBudWxsO1xuICAgIGlmICgoc3RvcmVEZWZhdWx0cyAmJiBoYXNWYWx1ZSkgfHwgIXByb3BlcnR5LmlzRGVmYXVsdFZhbHVlKHZhbHVlKSkge1xuICAgICAgcmVzdWx0W3Byb3BlcnR5Lm5hbWVdID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHB1YmxpYyB2YWx1ZVRvT2JqKHZhbHVlOiBhbnksIG9iajogYW55LCBwcm9wZXJ0eTogSnNvbk9iamVjdFByb3BlcnR5KSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybjtcbiAgICB0aGlzLnJlbW92ZVBvcyhwcm9wZXJ0eSwgdmFsdWUpO1xuICAgIGlmIChwcm9wZXJ0eSAhPSBudWxsICYmIHByb3BlcnR5Lmhhc1RvVXNlU2V0VmFsdWUpIHtcbiAgICAgIHByb3BlcnR5LnNldFZhbHVlKG9iaiwgdmFsdWUsIHRoaXMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1ZhbHVlQXJyYXkodmFsdWUpKSB7XG4gICAgICB0aGlzLnZhbHVlVG9BcnJheSh2YWx1ZSwgb2JqLCBwcm9wZXJ0eS5uYW1lLCBwcm9wZXJ0eSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBuZXdPYmogPSB0aGlzLmNyZWF0ZU5ld09iaih2YWx1ZSwgcHJvcGVydHkpO1xuICAgIGlmIChuZXdPYmoubmV3T2JqKSB7XG4gICAgICB0aGlzLnRvT2JqZWN0Q29yZSh2YWx1ZSwgbmV3T2JqLm5ld09iaik7XG4gICAgICB2YWx1ZSA9IG5ld09iai5uZXdPYmo7XG4gICAgfVxuICAgIGlmICghbmV3T2JqLmVycm9yKSB7XG4gICAgICBpZiAocHJvcGVydHkgIT0gbnVsbCkge1xuICAgICAgICBwcm9wZXJ0eS5zZXRWYWx1ZShvYmosIHZhbHVlLCB0aGlzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9ialtwcm9wZXJ0eS5uYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIHJlbW92ZVBvcyhwcm9wZXJ0eTogSnNvbk9iamVjdFByb3BlcnR5LCB2YWx1ZTogYW55KSB7XG4gICAgaWYgKCFwcm9wZXJ0eSB8fCAhcHJvcGVydHkudHlwZSB8fCBwcm9wZXJ0eS50eXBlLmluZGV4T2YoXCJ2YWx1ZVwiKSA8IDApXG4gICAgICByZXR1cm47XG4gICAgdGhpcy5yZW1vdmVQb3NGcm9tT2JqKHZhbHVlKTtcbiAgfVxuICBwcml2YXRlIHJlbW92ZVBvc0Zyb21PYmoob2JqOiBhbnkpIHtcbiAgICBpZiAoIW9iaikgcmV0dXJuO1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlUG9zRnJvbU9iaihvYmpbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoISFvYmpbSnNvbk9iamVjdC5wb3NpdGlvblByb3BlcnR5TmFtZV0pIHtcbiAgICAgIGRlbGV0ZSBvYmpbSnNvbk9iamVjdC5wb3NpdGlvblByb3BlcnR5TmFtZV07XG4gICAgfVxuICB9XG4gIHByaXZhdGUgaXNWYWx1ZUFycmF5KHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVOZXdPYmoodmFsdWU6IGFueSwgcHJvcGVydHk6IEpzb25PYmplY3RQcm9wZXJ0eSk6IGFueSB7XG4gICAgdmFyIHJlc3VsdDogYW55ID0geyBuZXdPYmo6IG51bGwsIGVycm9yOiBudWxsIH07XG4gICAgdmFyIGNsYXNzTmFtZSA9IHZhbHVlW0pzb25PYmplY3QudHlwZVByb3BlcnR5TmFtZV07XG4gICAgaWYgKCFjbGFzc05hbWUgJiYgcHJvcGVydHkgIT0gbnVsbCAmJiBwcm9wZXJ0eS5jbGFzc05hbWUpIHtcbiAgICAgIGNsYXNzTmFtZSA9IHByb3BlcnR5LmNsYXNzTmFtZTtcbiAgICB9XG4gICAgY2xhc3NOYW1lID0gcHJvcGVydHkuZ2V0Q2xhc3NOYW1lKGNsYXNzTmFtZSk7XG4gICAgcmVzdWx0Lm5ld09iaiA9IGNsYXNzTmFtZVxuICAgICAgPyBKc29uT2JqZWN0Lm1ldGFEYXRhLmNyZWF0ZUNsYXNzKGNsYXNzTmFtZSwgdmFsdWUpXG4gICAgICA6IG51bGw7XG4gICAgcmVzdWx0LmVycm9yID0gdGhpcy5jaGVja05ld09iamVjdE9uRXJyb3JzKFxuICAgICAgcmVzdWx0Lm5ld09iaixcbiAgICAgIHZhbHVlLFxuICAgICAgcHJvcGVydHksXG4gICAgICBjbGFzc05hbWVcbiAgICApO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHJpdmF0ZSBjaGVja05ld09iamVjdE9uRXJyb3JzKFxuICAgIG5ld09iajogYW55LFxuICAgIHZhbHVlOiBhbnksXG4gICAgcHJvcGVydHk6IEpzb25PYmplY3RQcm9wZXJ0eSxcbiAgICBjbGFzc05hbWU6IHN0cmluZ1xuICApOiBKc29uRXJyb3Ige1xuICAgIHZhciBlcnJvciA9IG51bGw7XG4gICAgaWYgKG5ld09iaikge1xuICAgICAgZXJyb3IgPSB0aGlzLmdldFJlcXVpcmVkRXJyb3IobmV3T2JqLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwcm9wZXJ0eS5iYXNlQ2xhc3NOYW1lKSB7XG4gICAgICAgIGlmICghY2xhc3NOYW1lKSB7XG4gICAgICAgICAgZXJyb3IgPSBuZXcgSnNvbk1pc3NpbmdUeXBlRXJyb3IoXG4gICAgICAgICAgICBwcm9wZXJ0eS5uYW1lLFxuICAgICAgICAgICAgcHJvcGVydHkuYmFzZUNsYXNzTmFtZVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXJyb3IgPSBuZXcgSnNvbkluY29ycmVjdFR5cGVFcnJvcihcbiAgICAgICAgICAgIHByb3BlcnR5Lm5hbWUsXG4gICAgICAgICAgICBwcm9wZXJ0eS5iYXNlQ2xhc3NOYW1lXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIHRoaXMuYWRkTmV3RXJyb3IoZXJyb3IsIHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIGVycm9yO1xuICB9XG4gIHByaXZhdGUgZ2V0UmVxdWlyZWRFcnJvcihvYmo6IGFueSwganNvblZhbHVlOiBhbnkpOiBKc29uRXJyb3Ige1xuICAgIGlmICghb2JqLmdldFR5cGUgfHwgdHlwZW9mIG9iai5nZXREYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBudWxsO1xuICAgIHZhciBjbGFzc05hbWUgPSBvYmouZ2V0VHlwZSgpO1xuICAgIHZhciByZXF1aXJlZFByb3BlcnRpZXMgPSBKc29uT2JqZWN0Lm1ldGFEYXRhLmdldFJlcXVpcmVkUHJvcGVydGllcyhcbiAgICAgIGNsYXNzTmFtZVxuICAgICk7XG4gICAgaWYgKCFyZXF1aXJlZFByb3BlcnRpZXMpIHJldHVybiBudWxsO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVxdWlyZWRQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIWpzb25WYWx1ZVtyZXF1aXJlZFByb3BlcnRpZXNbaV1dKSB7XG4gICAgICAgIHJldHVybiBuZXcgSnNvblJlcXVpcmVkUHJvcGVydHlFcnJvcihyZXF1aXJlZFByb3BlcnRpZXNbaV0sIGNsYXNzTmFtZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByaXZhdGUgYWRkTmV3RXJyb3IoZXJyb3I6IEpzb25FcnJvciwganNvbk9iajogYW55KSB7XG4gICAgaWYgKGpzb25PYmogJiYganNvbk9ialtKc29uT2JqZWN0LnBvc2l0aW9uUHJvcGVydHlOYW1lXSkge1xuICAgICAgZXJyb3IuYXQgPSBqc29uT2JqW0pzb25PYmplY3QucG9zaXRpb25Qcm9wZXJ0eU5hbWVdLnN0YXJ0O1xuICAgIH1cbiAgICB0aGlzLmVycm9ycy5wdXNoKGVycm9yKTtcbiAgfVxuICBwcml2YXRlIHZhbHVlVG9BcnJheShcbiAgICB2YWx1ZTogQXJyYXk8YW55PixcbiAgICBvYmo6IGFueSxcbiAgICBrZXk6IGFueSxcbiAgICBwcm9wZXJ0eTogSnNvbk9iamVjdFByb3BlcnR5XG4gICkge1xuICAgIGlmIChvYmpba2V5XSAmJiB2YWx1ZS5sZW5ndGggPiAwKSBvYmpba2V5XS5zcGxpY2UoMCwgb2JqW2tleV0ubGVuZ3RoKTtcbiAgICB2YXIgdmFsdWVSZXMgPSBvYmpba2V5XSA/IG9ialtrZXldIDogW107XG4gICAgdGhpcy5hZGRWYWx1ZXNJbnRvQXJyYXkodmFsdWUsIHZhbHVlUmVzLCBwcm9wZXJ0eSk7XG4gICAgaWYgKCFvYmpba2V5XSkgb2JqW2tleV0gPSB2YWx1ZVJlcztcbiAgfVxuICBwcml2YXRlIGFkZFZhbHVlc0ludG9BcnJheShcbiAgICB2YWx1ZTogQXJyYXk8YW55PixcbiAgICByZXN1bHQ6IEFycmF5PGFueT4sXG4gICAgcHJvcGVydHk6IEpzb25PYmplY3RQcm9wZXJ0eVxuICApIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbmV3VmFsdWUgPSB0aGlzLmNyZWF0ZU5ld09iaih2YWx1ZVtpXSwgcHJvcGVydHkpO1xuICAgICAgaWYgKG5ld1ZhbHVlLm5ld09iaikge1xuICAgICAgICBpZiAoISF2YWx1ZVtpXS5uYW1lKSB7XG4gICAgICAgICAgbmV3VmFsdWUubmV3T2JqLm5hbWUgPSB2YWx1ZVtpXS5uYW1lO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5wdXNoKG5ld1ZhbHVlLm5ld09iaik7XG4gICAgICAgIHRoaXMudG9PYmplY3RDb3JlKHZhbHVlW2ldLCBuZXdWYWx1ZS5uZXdPYmopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFuZXdWYWx1ZS5lcnJvcikge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIGZpbmRQcm9wZXJ0eShcbiAgICBwcm9wZXJ0aWVzOiBBcnJheTxKc29uT2JqZWN0UHJvcGVydHk+LFxuICAgIGtleTogYW55XG4gICk6IEpzb25PYmplY3RQcm9wZXJ0eSB7XG4gICAgaWYgKCFwcm9wZXJ0aWVzKSByZXR1cm4gbnVsbDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwcm9wID0gcHJvcGVydGllc1tpXTtcbiAgICAgIGlmIChwcm9wLm5hbWUgPT0ga2V5IHx8IHByb3AuYWx0ZXJuYXRpdmVOYW1lID09IGtleSkgcmV0dXJuIHByb3A7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qKlxuICogQW4gYWxpYXMgZm9yIHRoZSBtZXRhZGF0YSBvYmplY3QuIEl0IGNvbnRhaW5zIG9iamVjdCBwcm9wZXJ0aWVzJyBydW50aW1lIGluZm9ybWF0aW9uIGFuZCBhbGxvd3MgeW91IHRvIG1vZGlmeSBpdC5cbiAqIEBzZWUgSnNvbk1ldGFkYXRhXG4gKi9cbmV4cG9ydCB2YXIgU2VyaWFsaXplciA9IEpzb25PYmplY3QubWV0YURhdGE7XG4iLCJpbXBvcnQgeyBJQWN0aW9uIH0gZnJvbSBcIi4vYWN0aW9ucy9hY3Rpb25cIjtcclxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2VcIjtcclxuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgTGlzdE1vZGVsIGV4dGVuZHMgQmFzZSB7XHJcbiAgQHByb3BlcnR5KHsgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KSBpc0V4cGFuZGVkOiBib29sZWFuO1xyXG4gIEBwcm9wZXJ0eSgpIHNlbGVjdGVkSXRlbTogSUFjdGlvbjtcclxuICBwdWJsaWMgc3RhdGljIElOREVOVDogbnVtYmVyID0gMTY7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgaXRlbXM6IEFycmF5PElBY3Rpb24+LFxyXG4gICAgcHVibGljIG9uSXRlbVNlbGVjdDogKGl0ZW06IElBY3Rpb24pID0+IHZvaWQsXHJcbiAgICBwdWJsaWMgYWxsb3dTZWxlY3Rpb246IGJvb2xlYW4sXHJcbiAgICBzZWxlY3RlZEl0ZW0/OiBJQWN0aW9uXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5jcmVhdGVOZXdBcnJheShcIml0ZW1zXCIpO1xyXG4gICAgdGhpcy5pdGVtcyA9IGl0ZW1zO1xyXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBzZWxlY3RlZEl0ZW07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGl0ZW1zKCk6IEFycmF5PElBY3Rpb24+IHtcclxuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpdGVtc1wiKTtcclxuICB9XHJcbiAgcHVibGljIHNldCBpdGVtcyh2YWx1ZTogQXJyYXk8SUFjdGlvbj4pIHtcclxuICAgIHRoaXMuaXRlbXMuc3BsaWNlKDAsIHRoaXMuaXRlbXMubGVuZ3RoLCAuLi4odmFsdWUgfHwgW10pKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWxlY3RJdGVtID0gKGl0ZW1WYWx1ZTogSUFjdGlvbikgPT4ge1xyXG4gICAgdGhpcy5pc0V4cGFuZGVkID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5hbGxvd1NlbGVjdGlvbikge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IGl0ZW1WYWx1ZTtcclxuICAgIH1cclxuICAgIGlmICghIXRoaXMub25JdGVtU2VsZWN0KSB7XHJcbiAgICAgIHRoaXMub25JdGVtU2VsZWN0KGl0ZW1WYWx1ZSk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgcHVibGljIGlzSXRlbURpc2FibGVkID0gKGl0ZW1WYWx1ZTogSUFjdGlvbikgPT4ge1xyXG4gICAgcmV0dXJuIGl0ZW1WYWx1ZS5lbmFibGVkICE9PSB1bmRlZmluZWQgJiYgIWl0ZW1WYWx1ZS5lbmFibGVkO1xyXG4gIH07XHJcblxyXG4gIHB1YmxpYyBpc0l0ZW1TZWxlY3RlZCA9IChpdGVtVmFsdWU6IElBY3Rpb24pID0+IHtcclxuICAgIHJldHVybiB0aGlzLmFsbG93U2VsZWN0aW9uICYmIHRoaXMuc2VsZWN0ZWRJdGVtID09IGl0ZW1WYWx1ZTtcclxuICB9O1xyXG5cclxuICBwdWJsaWMgZ2V0SXRlbUNsYXNzID0gKGl0ZW1WYWx1ZTogSUFjdGlvbikgPT4ge1xyXG4gICAgdmFyIGNsYXNzTmFtZSA9IFwic3YtbGlzdF9faXRlbVwiO1xyXG4gICAgaWYgKHRoaXMuaXNJdGVtRGlzYWJsZWQoaXRlbVZhbHVlKSkge1xyXG4gICAgICBjbGFzc05hbWUgKz0gXCIgc3YtbGlzdF9faXRlbS0tZGlzYWJsZWRcIjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmlzSXRlbVNlbGVjdGVkKGl0ZW1WYWx1ZSkpIHtcclxuICAgICAgY2xhc3NOYW1lICs9IFwiIHN2LWxpc3RfX2l0ZW0tLXNlbGVjdGVkXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2xhc3NOYW1lO1xyXG4gIH07XHJcblxyXG4gIHB1YmxpYyBnZXRJdGVtSW5kZW50ID0gKGl0ZW1WYWx1ZTogYW55KSA9PiB7XHJcbiAgICBjb25zdCBsZXZlbCA9IGl0ZW1WYWx1ZS5sZXZlbCB8fCAwO1xyXG4gICAgcmV0dXJuIChsZXZlbCArIDEpICogTGlzdE1vZGVsLklOREVOVCArIFwicHhcIjtcclxuICB9O1xyXG59XHJcbiIsImltcG9ydCB7IEhlbHBlcnMgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XG5pbXBvcnQgeyBzZXR0aW5ncyB9IGZyb20gXCIuL3NldHRpbmdzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxvY2FsaXphYmxlT3duZXIge1xuICBnZXRMb2NhbGUoKTogc3RyaW5nO1xuICBnZXRNYXJrZG93bkh0bWwodGV4dDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmc7XG4gIGdldFByb2Nlc3NlZFRleHQodGV4dDogc3RyaW5nKTogc3RyaW5nO1xuICBnZXRSZW5kZXJlcihuYW1lOiBzdHJpbmcpOiBzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIElMb2NhbGl6YWJsZVN0cmluZyB7XG4gIGdldExvY2FsZVRleHQobG9jOiBzdHJpbmcpOiBzdHJpbmc7XG4gIHNldExvY2FsZVRleHQobG9jOiBzdHJpbmcsIG5ld1ZhbHVlOiBzdHJpbmcpOiBhbnk7XG4gIGdldExvY2FsZXMoKTogQXJyYXk8c3RyaW5nPjtcbn1cbi8qKlxuICogVGhlIGNsYXNzIHJlcHJlc2VudHMgdGhlIHN0cmluZyB0aGF0IHN1cHBvcnRzIG11bHRpLWxhbmd1YWdlcyBhbmQgbWFya2Rvd24uXG4gKiBJdCB1c2VzIGluIGFsbCBvYmplY3RzIHdoZXJlIHN1cHBvcnQgZm9yIG11bHRpLWxhbmd1YWdlcyBhbmQgbWFya2Rvd24gaXMgcmVxdWlyZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBMb2NhbGl6YWJsZVN0cmluZyBpbXBsZW1lbnRzIElMb2NhbGl6YWJsZVN0cmluZyB7XG4gIHB1YmxpYyBzdGF0aWMgU2VyaWFsaXplQXNPYmplY3Q6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHN0YXRpYyBnZXQgZGVmYXVsdExvY2FsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBzZXR0aW5ncy5kZWZhdWx0TG9jYWxlTmFtZTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHNldCBkZWZhdWx0TG9jYWxlKHZhbDogc3RyaW5nKSB7XG4gICAgc2V0dGluZ3MuZGVmYXVsdExvY2FsZU5hbWUgPSB2YWw7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBkZWZhdWx0UmVuZGVyZXIgPSBcInN2LXN0cmluZy12aWV3ZXJcIjtcbiAgcHVibGljIHN0YXRpYyBlZGl0YWJsZVJlbmRlcmVyID0gXCJzdi1zdHJpbmctZWRpdG9yXCI7XG4gIHByaXZhdGUgdmFsdWVzID0ge307XG4gIHByaXZhdGUgaHRtbFZhbHVlcyA9IHt9O1xuICBwcml2YXRlIHJlbmRlcmVkVGV4dDogc3RyaW5nO1xuICBwcml2YXRlIGNhbGN1bGF0ZWRUZXh0VmFsdWU6IHN0cmluZztcbiAgcHVibGljIG9uR2V0VGV4dENhbGxiYWNrOiAoc3RyOiBzdHJpbmcpID0+IHN0cmluZztcbiAgcHVibGljIG9uU3RyQ2hhbmdlZDogKG9sZFZhbHVlOiBzdHJpbmcsIG5ld1ZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG4gIHB1YmxpYyBvblNlYXJjaENoYW5nZWQ6ICgpID0+IHZvaWQ7XG4gIHB1YmxpYyBzaGFyZWREYXRhOiBMb2NhbGl6YWJsZVN0cmluZztcbiAgcHVibGljIHNlYXJjaFRleHQ6IHN0cmluZztcbiAgcHVibGljIHNlYXJjaEluZGV4OiBudW1iZXI7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBvd25lcjogSUxvY2FsaXphYmxlT3duZXIsXG4gICAgcHVibGljIHVzZU1hcmtkb3duOiBib29sZWFuID0gZmFsc2UsXG4gICAgcHVibGljIG5hbWU/OiBzdHJpbmdcbiAgKSB7XG4gICAgdGhpcy5vbkNyZWF0aW5nKCk7XG4gIH1cbiAgcHVibGljIGdldCBsb2NhbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMub3duZXIgJiYgdGhpcy5vd25lci5nZXRMb2NhbGUgPyB0aGlzLm93bmVyLmdldExvY2FsZSgpIDogXCJcIjtcbiAgfVxuICBwdWJsaWMgc3RyQ2hhbmdlZCgpIHtcbiAgICB0aGlzLnNlYXJjaGFibGVUZXh0ID0gdW5kZWZpbmVkO1xuICAgIGlmICh0aGlzLnJlbmRlcmVkVGV4dCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgdGhpcy5jYWxjdWxhdGVkVGV4dFZhbHVlID0gdGhpcy5jYWxUZXh0KCk7XG4gICAgaWYgKHRoaXMucmVuZGVyZWRUZXh0ICE9PSB0aGlzLmNhbGN1bGF0ZWRUZXh0VmFsdWUpIHtcbiAgICAgIHRoaXMucmVuZGVyZWRUZXh0ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5jYWxjdWxhdGVkVGV4dFZhbHVlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLm9uQ2hhbmdlZCgpO1xuICB9XG4gIHB1YmxpYyBnZXQgdGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnB1cmVUZXh0O1xuICB9XG4gIHB1YmxpYyBnZXQgY2FsY3VsYXRlZFRleHQoKTogc3RyaW5nIHtcbiAgICB0aGlzLnJlbmRlcmVkVGV4dCA9XG4gICAgICB0aGlzLmNhbGN1bGF0ZWRUZXh0VmFsdWUgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHRoaXMuY2FsY3VsYXRlZFRleHRWYWx1ZVxuICAgICAgICA6IHRoaXMuY2FsVGV4dCgpO1xuICAgIHRoaXMuY2FsY3VsYXRlZFRleHRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJlZFRleHQ7XG4gIH1cbiAgcHJpdmF0ZSBjYWxUZXh0KCk6IHN0cmluZyB7XG4gICAgdmFyIHJlcyA9IHRoaXMucHVyZVRleHQ7XG4gICAgaWYgKFxuICAgICAgcmVzICYmXG4gICAgICB0aGlzLm93bmVyICYmXG4gICAgICB0aGlzLm93bmVyLmdldFByb2Nlc3NlZFRleHQgJiZcbiAgICAgIHJlcy5pbmRleE9mKFwie1wiKSA+IC0xXG4gICAgKSB7XG4gICAgICByZXMgPSB0aGlzLm93bmVyLmdldFByb2Nlc3NlZFRleHQocmVzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMub25HZXRUZXh0Q2FsbGJhY2spIHJlcyA9IHRoaXMub25HZXRUZXh0Q2FsbGJhY2socmVzKTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBnZXQgcHVyZVRleHQoKSB7XG4gICAgdmFyIGxvYyA9IHRoaXMubG9jYWxlO1xuICAgIGlmICghbG9jKSBsb2MgPSBzZXR0aW5ncy5kZWZhdWx0TG9jYWxlTmFtZTtcbiAgICB2YXIgcmVzID0gdGhpcy5nZXRWYWx1ZShsb2MpO1xuICAgIGlmICghcmVzICYmIGxvYyA9PSBzZXR0aW5ncy5kZWZhdWx0TG9jYWxlTmFtZSkge1xuICAgICAgcmVzID0gdGhpcy5nZXRWYWx1ZShzdXJ2ZXlMb2NhbGl6YXRpb24uZGVmYXVsdExvY2FsZSk7XG4gICAgfVxuICAgIGlmICghcmVzICYmIGxvYyAhPT0gc2V0dGluZ3MuZGVmYXVsdExvY2FsZU5hbWUpIHtcbiAgICAgIHJlcyA9IHRoaXMuZ2V0VmFsdWUoc2V0dGluZ3MuZGVmYXVsdExvY2FsZU5hbWUpO1xuICAgIH1cbiAgICBpZiAoIXJlcykgcmVzID0gXCJcIjtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzSHRtbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNIdG1sVmFsdWUoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGh0bWwoKSB7XG4gICAgaWYgKCF0aGlzLmhhc0h0bWwpIHJldHVybiBcIlwiO1xuICAgIHJldHVybiB0aGlzLmdldEh0bWxWYWx1ZSgpO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZXNLZXlzKCkubGVuZ3RoID09IDA7XG4gIH1cbiAgcHVibGljIGdldCB0ZXh0T3JIdG1sKCkge1xuICAgIHJldHVybiB0aGlzLmhhc0h0bWwgPyB0aGlzLmdldEh0bWxWYWx1ZSgpIDogdGhpcy5jYWxjdWxhdGVkVGV4dDtcbiAgfVxuICBwdWJsaWMgZ2V0IHJlbmRlcmVkSHRtbCgpIHtcbiAgICByZXR1cm4gdGhpcy50ZXh0T3JIdG1sO1xuICB9XG4gIHB1YmxpYyBzZXQgdGV4dCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGVUZXh0KHRoaXMubG9jYWxlLCB2YWx1ZSk7XG4gIH1cbiAgcHVibGljIGdldExvY2FsZVRleHQobG9jOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghbG9jKSBsb2MgPSBzZXR0aW5ncy5kZWZhdWx0TG9jYWxlTmFtZTtcbiAgICB2YXIgcmVzID0gdGhpcy5nZXRWYWx1ZShsb2MpO1xuICAgIHJldHVybiByZXMgPyByZXMgOiBcIlwiO1xuICB9XG4gIHB1YmxpYyBzZXRMb2NhbGVUZXh0KGxvYzogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlID09IHRoaXMuZ2V0TG9jYWxlVGV4dChsb2MpKSByZXR1cm47XG4gICAgaWYgKFxuICAgICAgdmFsdWUgJiZcbiAgICAgIGxvYyAmJlxuICAgICAgbG9jICE9IHNldHRpbmdzLmRlZmF1bHRMb2NhbGVOYW1lICYmXG4gICAgICAhdGhpcy5nZXRWYWx1ZShsb2MpICYmXG4gICAgICB2YWx1ZSA9PSB0aGlzLmdldExvY2FsZVRleHQoc2V0dGluZ3MuZGVmYXVsdExvY2FsZU5hbWUpXG4gICAgKVxuICAgICAgcmV0dXJuO1xuICAgIHZhciBjdXJMb2MgPSB0aGlzLmxvY2FsZTtcbiAgICBpZiAoIWxvYykgbG9jID0gc2V0dGluZ3MuZGVmYXVsdExvY2FsZU5hbWU7XG4gICAgaWYgKCFjdXJMb2MpIGN1ckxvYyA9IHNldHRpbmdzLmRlZmF1bHRMb2NhbGVOYW1lO1xuICAgIHZhciBoYXNPblN0ckNoYW5nZWQgPSB0aGlzLm9uU3RyQ2hhbmdlZCAmJiBsb2MgPT09IGN1ckxvYztcbiAgICB2YXIgb2xkVmFsdWUgPSBoYXNPblN0ckNoYW5nZWQgPyB0aGlzLnB1cmVUZXh0IDogdW5kZWZpbmVkO1xuXG4gICAgZGVsZXRlICg8YW55PnRoaXMpLmh0bWxWYWx1ZXNbbG9jXTtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICBpZiAodGhpcy5nZXRWYWx1ZShsb2MpKSB0aGlzLmRlbGV0ZVZhbHVlKGxvYyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGxvYyAhPSBzZXR0aW5ncy5kZWZhdWx0TG9jYWxlTmFtZSAmJlxuICAgICAgICAgIHZhbHVlID09IHRoaXMuZ2V0TG9jYWxlVGV4dChzZXR0aW5ncy5kZWZhdWx0TG9jYWxlTmFtZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5zZXRMb2NhbGVUZXh0KGxvYywgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXRWYWx1ZShsb2MsIHZhbHVlKTtcbiAgICAgICAgICBpZiAobG9jID09IHNldHRpbmdzLmRlZmF1bHRMb2NhbGVOYW1lKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZVZhbHVlc0VxdWFsc1RvRGVmYXVsdCh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3RyQ2hhbmdlZCgpO1xuICAgIGlmIChoYXNPblN0ckNoYW5nZWQpIHtcbiAgICAgIHRoaXMub25TdHJDaGFuZ2VkKG9sZFZhbHVlLCB2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBoYXNOb25EZWZhdWx0VGV4dCgpOiBib29sZWFuIHtcbiAgICB2YXIga2V5cyA9IHRoaXMuZ2V0VmFsdWVzS2V5cygpO1xuICAgIGlmIChrZXlzLmxlbmd0aCA9PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIGtleXMubGVuZ3RoID4gMSB8fCBrZXlzWzBdICE9IHNldHRpbmdzLmRlZmF1bHRMb2NhbGVOYW1lO1xuICB9XG4gIHB1YmxpYyBnZXRMb2NhbGVzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHZhciBrZXlzID0gdGhpcy5nZXRWYWx1ZXNLZXlzKCk7XG4gICAgaWYgKGtleXMubGVuZ3RoID09IDApIHJldHVybiBbXTtcbiAgICByZXR1cm4ga2V5cztcbiAgfVxuICBwdWJsaWMgZ2V0SnNvbigpOiBhbnkge1xuICAgIGlmICghIXRoaXMuc2hhcmVkRGF0YSkgcmV0dXJuIHRoaXMuc2hhcmVkRGF0YS5nZXRKc29uKCk7XG4gICAgdmFyIGtleXMgPSB0aGlzLmdldFZhbHVlc0tleXMoKTtcbiAgICBpZiAoa2V5cy5sZW5ndGggPT0gMCkgcmV0dXJuIG51bGw7XG4gICAgaWYgKFxuICAgICAga2V5cy5sZW5ndGggPT0gMSAmJlxuICAgICAga2V5c1swXSA9PSBzZXR0aW5ncy5kZWZhdWx0TG9jYWxlTmFtZSAmJlxuICAgICAgIXNldHRpbmdzLnNlcmlhbGl6ZUxvY2FsaXphYmxlU3RyaW5nQXNPYmplY3RcbiAgICApXG4gICAgICByZXR1cm4gKDxhbnk+dGhpcykudmFsdWVzW2tleXNbMF1dO1xuICAgIHJldHVybiB0aGlzLnZhbHVlcztcbiAgfVxuICBwdWJsaWMgc2V0SnNvbih2YWx1ZTogYW55KSB7XG4gICAgaWYgKCEhdGhpcy5zaGFyZWREYXRhKSB7XG4gICAgICB0aGlzLnNoYXJlZERhdGEuc2V0SnNvbih2YWx1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudmFsdWVzID0ge307XG4gICAgdGhpcy5odG1sVmFsdWVzID0ge307XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRoaXMuc2V0TG9jYWxlVGV4dChudWxsLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgICAgICB0aGlzLnNldExvY2FsZVRleHQoa2V5LCB2YWx1ZVtrZXldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zdHJDaGFuZ2VkKCk7XG4gIH1cbiAgcHVibGljIGdldCByZW5kZXJBcygpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5vd25lcikge1xuICAgICAgcmV0dXJuIExvY2FsaXphYmxlU3RyaW5nLmRlZmF1bHRSZW5kZXJlcjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB0aGlzLm93bmVyLmdldFJlbmRlcmVyICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHJldHVybiBMb2NhbGl6YWJsZVN0cmluZy5kZWZhdWx0UmVuZGVyZXI7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICB0aGlzLm93bmVyLmdldFJlbmRlcmVyKHRoaXMubmFtZSkgfHwgTG9jYWxpemFibGVTdHJpbmcuZGVmYXVsdFJlbmRlcmVyXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZXF1YWxzKG9iajogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCEhdGhpcy5zaGFyZWREYXRhKSByZXR1cm4gdGhpcy5zaGFyZWREYXRhLmVxdWFscyhvYmopO1xuICAgIGlmICghb2JqIHx8ICFvYmoudmFsdWVzKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIEhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyh0aGlzLnZhbHVlcywgb2JqLnZhbHVlcyk7XG4gIH1cbiAgcHJpdmF0ZSBzZWFyY2hhYmxlVGV4dDogc3RyaW5nO1xuICBwdWJsaWMgc2V0RmluZFRleHQodGV4dDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuc2VhcmNoVGV4dCA9PSB0ZXh0KSByZXR1cm47XG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gdGV4dDtcbiAgICBpZiAoIXRoaXMuc2VhcmNoYWJsZVRleHQpIHtcbiAgICAgIGxldCB0ZXh0T3JIdG1sID0gdGhpcy50ZXh0T3JIdG1sO1xuICAgICAgdGhpcy5zZWFyY2hhYmxlVGV4dCA9ICEhdGV4dE9ySHRtbCA/IHRleHRPckh0bWwudG9Mb3dlckNhc2UoKSA6IFwiXCI7XG4gICAgfVxuICAgIHZhciBzdHIgPSB0aGlzLnNlYXJjaGFibGVUZXh0O1xuICAgIHZhciBpbmRleCA9ICEhc3RyICYmICEhdGV4dCA/IHN0ci5pbmRleE9mKHRleHQpIDogdW5kZWZpbmVkO1xuICAgIGlmIChpbmRleCA8IDApIGluZGV4ID0gdW5kZWZpbmVkO1xuICAgIGlmIChpbmRleCAhPSB1bmRlZmluZWQgfHwgdGhpcy5zZWFyY2hJbmRleCAhPSBpbmRleCkge1xuICAgICAgdGhpcy5zZWFyY2hJbmRleCA9IGluZGV4O1xuICAgICAgaWYgKCEhdGhpcy5vblNlYXJjaENoYW5nZWQpIHtcbiAgICAgICAgdGhpcy5vblNlYXJjaENoYW5nZWQoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc2VhcmNoSW5kZXggIT0gdW5kZWZpbmVkO1xuICB9XG4gIHB1YmxpYyBvbkNoYW5nZWQoKSB7fVxuICBwcm90ZWN0ZWQgb25DcmVhdGluZygpIHt9XG4gIHByaXZhdGUgaGFzSHRtbFZhbHVlKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5vd25lciB8fCAhdGhpcy51c2VNYXJrZG93bikgcmV0dXJuIGZhbHNlO1xuICAgIHZhciByZW5kZXJlZFRleHQgPSB0aGlzLmNhbGN1bGF0ZWRUZXh0O1xuICAgIGlmICghcmVuZGVyZWRUZXh0KSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIGxvYyA9IHRoaXMubG9jYWxlO1xuICAgIGlmICghbG9jKSBsb2MgPSBzZXR0aW5ncy5kZWZhdWx0TG9jYWxlTmFtZTtcbiAgICAoPGFueT50aGlzKS5odG1sVmFsdWVzW2xvY10gPSB0aGlzLm93bmVyLmdldE1hcmtkb3duSHRtbChcbiAgICAgIHJlbmRlcmVkVGV4dCxcbiAgICAgIHRoaXMubmFtZVxuICAgICk7XG4gICAgcmV0dXJuICg8YW55PnRoaXMpLmh0bWxWYWx1ZXNbbG9jXSA/IHRydWUgOiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgZ2V0SHRtbFZhbHVlKCk6IHN0cmluZyB7XG4gICAgdmFyIGxvYyA9IHRoaXMubG9jYWxlO1xuICAgIGlmICghbG9jKSBsb2MgPSBzZXR0aW5ncy5kZWZhdWx0TG9jYWxlTmFtZTtcbiAgICByZXR1cm4gKDxhbnk+dGhpcykuaHRtbFZhbHVlc1tsb2NdO1xuICB9XG4gIHByaXZhdGUgZGVsZXRlVmFsdWVzRXF1YWxzVG9EZWZhdWx0KGRlZmF1bHRWYWx1ZTogc3RyaW5nKSB7XG4gICAgdmFyIGtleXMgPSB0aGlzLmdldFZhbHVlc0tleXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChrZXlzW2ldID09IHNldHRpbmdzLmRlZmF1bHRMb2NhbGVOYW1lKSBjb250aW51ZTtcbiAgICAgIGlmICh0aGlzLmdldFZhbHVlKGtleXNbaV0pID09IGRlZmF1bHRWYWx1ZSkge1xuICAgICAgICB0aGlzLmRlbGV0ZVZhbHVlKGtleXNbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIGdldFZhbHVlKGxvYzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoISF0aGlzLnNoYXJlZERhdGEpIHJldHVybiB0aGlzLnNoYXJlZERhdGEuZ2V0VmFsdWUobG9jKTtcbiAgICByZXR1cm4gKDxhbnk+dGhpcykudmFsdWVzW2xvY107XG4gIH1cbiAgcHJpdmF0ZSBzZXRWYWx1ZShsb2M6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIGlmICghIXRoaXMuc2hhcmVkRGF0YSkgdGhpcy5zaGFyZWREYXRhLnNldFZhbHVlKGxvYywgdmFsdWUpO1xuICAgIGVsc2UgKDxhbnk+dGhpcykudmFsdWVzW2xvY10gPSB2YWx1ZTtcbiAgfVxuICBwcml2YXRlIGRlbGV0ZVZhbHVlKGxvYzogc3RyaW5nKSB7XG4gICAgaWYgKCEhdGhpcy5zaGFyZWREYXRhKSB0aGlzLnNoYXJlZERhdGEuZGVsZXRlVmFsdWUobG9jKTtcbiAgICBlbHNlIGRlbGV0ZSAoPGFueT50aGlzKS52YWx1ZXNbbG9jXTtcbiAgfVxuICBwcml2YXRlIGdldFZhbHVlc0tleXMoKTogc3RyaW5nW10ge1xuICAgIGlmICghIXRoaXMuc2hhcmVkRGF0YSkgcmV0dXJuIHRoaXMuc2hhcmVkRGF0YS5nZXRWYWx1ZXNLZXlzKCk7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMudmFsdWVzKTtcbiAgfVxufVxuLyoqXG4gKiBUaGUgY2xhc3MgcmVwcmVzZW50cyB0aGUgbGlzdCBvZiBzdHJpbmdzIHRoYXQgc3VwcG9ydHMgbXVsdGktbGFuZ3VhZ2VzLlxuICovXG5leHBvcnQgY2xhc3MgTG9jYWxpemFibGVTdHJpbmdzIGltcGxlbWVudHMgSUxvY2FsaXphYmxlU3RyaW5nIHtcbiAgcHJpdmF0ZSB2YWx1ZXM6IGFueSA9IHt9O1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgb3duZXI6IElMb2NhbGl6YWJsZU93bmVyKSB7fVxuICBwdWJsaWMgZ2V0IGxvY2FsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5vd25lciAmJiB0aGlzLm93bmVyLmdldExvY2FsZSA/IHRoaXMub3duZXIuZ2V0TG9jYWxlKCkgOiBcIlwiO1xuICB9XG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWUoXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCB2YWx1ZSh2YWw6IEFycmF5PHN0cmluZz4pIHtcbiAgICB0aGlzLnNldFZhbHVlKFwiXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCB0ZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgPyB0aGlzLnZhbHVlLmpvaW4oXCJcXG5cIikgOiBcIlwiO1xuICB9XG4gIHB1YmxpYyBzZXQgdGV4dCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSAhIXZhbCA/IHZhbC5zcGxpdChcIlxcblwiKSA6IFtdO1xuICB9XG4gIHB1YmxpYyBnZXRMb2NhbGVUZXh0KGxvYzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB2YXIgcmVzID0gdGhpcy5nZXRWYWx1ZUNvcmUobG9jLCAhbG9jIHx8IGxvYyA9PT0gdGhpcy5sb2NhbGUpO1xuICAgIGlmICghcmVzIHx8ICFBcnJheS5pc0FycmF5KHJlcykgfHwgcmVzLmxlbmd0aCA9PSAwKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gcmVzLmpvaW4oXCJcXG5cIik7XG4gIH1cbiAgcHVibGljIHNldExvY2FsZVRleHQobG9jOiBzdHJpbmcsIG5ld1ZhbHVlOiBzdHJpbmcpOiBhbnkge1xuICAgIHZhciB2YWwgPSAhIW5ld1ZhbHVlID8gbmV3VmFsdWUuc3BsaXQoXCJcXG5cIikgOiBudWxsO1xuICAgIHRoaXMuc2V0VmFsdWUobG9jLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXRWYWx1ZShsb2M6IHN0cmluZyk6IEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmdldFZhbHVlQ29yZShsb2MpO1xuICB9XG4gIHByaXZhdGUgZ2V0VmFsdWVDb3JlKGxvYzogc3RyaW5nLCB1c2VEZWZhdWx0OiBib29sZWFuID0gdHJ1ZSk6IEFycmF5PHN0cmluZz4ge1xuICAgIGxvYyA9IHRoaXMuZ2V0TG9jYWxlKGxvYyk7XG4gICAgaWYgKHRoaXMudmFsdWVzW2xvY10pIHJldHVybiB0aGlzLnZhbHVlc1tsb2NdO1xuICAgIGlmICh1c2VEZWZhdWx0KSB7XG4gICAgICB2YXIgZGVmTG9jID0gc2V0dGluZ3MuZGVmYXVsdExvY2FsZU5hbWU7XG4gICAgICBpZiAobG9jICE9PSBkZWZMb2MpIHJldHVybiB0aGlzLnZhbHVlc1tkZWZMb2NdO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cbiAgcHVibGljIHNldFZhbHVlKGxvYzogc3RyaW5nLCB2YWw6IEFycmF5PHN0cmluZz4pIHtcbiAgICBsb2MgPSB0aGlzLmdldExvY2FsZShsb2MpO1xuICAgIGlmICghdmFsIHx8IHZhbC5sZW5ndGggPT0gMCkge1xuICAgICAgZGVsZXRlIHRoaXMudmFsdWVzW2xvY107XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWVzW2xvY10gPSB2YWw7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZXNLZXlzKCkubGVuZ3RoID09IDA7XG4gIH1cbiAgcHJpdmF0ZSBnZXRMb2NhbGUobG9jOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghIWxvYykgcmV0dXJuIGxvYztcbiAgICBsb2MgPSB0aGlzLmxvY2FsZTtcbiAgICByZXR1cm4gISFsb2MgPyBsb2MgOiBzZXR0aW5ncy5kZWZhdWx0TG9jYWxlTmFtZTtcbiAgfVxuICBwdWJsaWMgZ2V0TG9jYWxlcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICB2YXIga2V5cyA9IHRoaXMuZ2V0VmFsdWVzS2V5cygpO1xuICAgIGlmIChrZXlzLmxlbmd0aCA9PSAwKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGtleXM7XG4gIH1cbiAgcHVibGljIGdldEpzb24oKTogYW55IHtcbiAgICB2YXIga2V5cyA9IHRoaXMuZ2V0VmFsdWVzS2V5cygpO1xuICAgIGlmIChrZXlzLmxlbmd0aCA9PSAwKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoXG4gICAgICBrZXlzLmxlbmd0aCA9PSAxICYmXG4gICAgICBrZXlzWzBdID09IHNldHRpbmdzLmRlZmF1bHRMb2NhbGVOYW1lICYmXG4gICAgICAhc2V0dGluZ3Muc2VyaWFsaXplTG9jYWxpemFibGVTdHJpbmdBc09iamVjdFxuICAgIClcbiAgICAgIHJldHVybiAoPGFueT50aGlzKS52YWx1ZXNba2V5c1swXV07XG4gICAgcmV0dXJuIHRoaXMudmFsdWVzO1xuICB9XG4gIHB1YmxpYyBzZXRKc29uKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnZhbHVlcyA9IHt9O1xuICAgIGlmICghdmFsdWUpIHJldHVybjtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuc2V0VmFsdWUobnVsbCwgdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgdGhpcy5zZXRWYWx1ZShrZXksIHZhbHVlW2tleV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIGdldFZhbHVlc0tleXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLnZhbHVlcyk7XG4gIH1cbn1cbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgYXJhYmljU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcItin2YTYs9in2KjZglwiLFxuICBwYWdlTmV4dFRleHQ6IFwi2KfZhNiq2KfZhNmKXCIsXG4gIGNvbXBsZXRlVGV4dDogXCLYpdix2LPYp9mEINin2YTYqNmK2KfZhtin2KpcIixcbiAgcHJldmlld1RleHQ6IFwi2YXYudin2YrZhtipXCIsXG4gIGVkaXRUZXh0OiBcItiq2LnYr9mK2YRcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcItio2K/Yp9mK2KlcIixcbiAgb3RoZXJJdGVtVGV4dDogXCLZhti1INii2K7YsVwiLFxuICBub25lSXRlbVRleHQ6IFwi2YTYpyDYtNmK2KFcIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwi2KfYrtiq2LEg2KfZhNmD2YRcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcInsxfSDYtdmB2K3YqSB7MH0g2YXZhlwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwi2LPYrNmEIHswfSDZhdmGIHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwi2KrZhdiqINin2YTYpdis2KfYqNipINi52YTZiSDYo9iz2KbZhNipIHswfSAvIHsxfVwiLFxuICBlbXB0eVN1cnZleTogXCLZhNinINiq2YjYrNivINi12YHYrdipINmF2LHYptmK2Kkg2KPZiCDYs9ik2KfZhCDZgdmKINin2YTZhtmF2YjYsNisXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwi2LTZg9ix2Kcg2YTZg9mFINmE2KfYs9iq2YPZhdin2YQg2KfZhNmG2YXZiNiw2KwhXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCLYqti42YfYsSDYs9is2YTYp9iq2YbYpyDYo9mG2YMg2YLYryDYo9mD2YXZhNiqINmH2LDYpyDYp9mE2KfYs9iq2LfZhNin2Lkg2KjYp9mE2YHYudmELlwiLFxuICBsb2FkaW5nU3VydmV5OiBcIi4uLtmK2KrZhSDYqtit2YXZitmEINin2YTZhtmF2YjYsNisXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIi4uLtin2K7YqtixXCIsXG4gIHZhbHVlOiBcItin2YTZgtmK2YXYqVwiLFxuICByZXF1aXJlZEVycm9yOiBcIi7Zitix2KzZiSDYp9mE2KXYrNin2KjYqSDYudmE2Ykg2KfZhNiz2KTYp9mEXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcItin2YTYsdis2KfYoSDYp9mE2KXYrNin2KjYqSDYudmE2Ykg2LPYpNin2YQg2YjYp9it2K8g2LnZhNmJINin2YTYo9mC2YQuXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwi2YrYsdis2Ykg2KfZhNil2KzYp9io2Kkg2LnZhNmJINin2YTYo9iz2KbZhNipINmB2Yog2KzZhdmK2Lkg2KfZhNi12YHZiNmBXCIsXG4gIG51bWVyaWNFcnJvcjogXCLZitis2Kgg2KPZhiDYqtmD2YjZhiDYp9mE2YLZitmF2Kkg2LHZgtmF2YrYqS5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCLYp9mE2LHYrNin2KEg2KXYr9iu2KfZhCDZhdinINmE2Kcg2YrZgtmEINi52YYgezB9INit2LHZiNmBXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwi2KfZhNix2KzYp9ihINil2K/Yrtin2YQg2KPZgtmEINmF2YYgezB9INit2LHZiNmBXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwi2YrYsdis2Ykg2KXYr9iu2KfZhCDYo9mD2KvYsSDZhdmGIHswfSDZiNij2YLZhCDZhdmGIHsxfSDYrdix2YjZgVwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcItmK2LHYrNmJINmF2YTYoSDZhdinINmE2Kcg2YrZgtmEINi52YYgezB9INin2YTYtdmB2YjZgVwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCLZitix2KzZiSDYqtit2K/ZitivINmF2Kcg2YTYpyDZitmC2YQg2LnZhiB7MH0g2KfZhNmF2KrYutmK2LHYp9iqXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcItmK2LHYrNmJINiq2K3Yr9mK2K8g2YXYpyDZhNinINmK2LLZitivINi52YYgezB9INin2YTZhdiq2LrZitix2KfYqlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwi2YgnezB9JyDZitis2Kgg2KPZhiDYqtmD2YjZhiDZhdiz2KfZiNmK2Kkg2KPZiCDYo9mD2KvYsSDZhdmGIHsxfSDZiNiq2LPYp9mI2Yog2KPZiCDYo9mC2YQg2YXZhiB7Mn3Yp1wiLFxuICBudW1lcmljTWluOiBcItmIJ3swfScg2YrYrNioINij2YYg2KrZg9mI2YYg2YXYs9in2YjZitipINij2Ygg2KPZg9ir2LEg2YXZhiB7MX3Yp1wiLFxuICBudW1lcmljTWF4OiBcItmIJ3swfScg2YrYrNioINij2YYg2KrZg9mI2YYg2YXYs9in2YjZitipINij2Ygg2KPZgtmEINmF2YYgezF92KdcIixcbiAgaW52YWxpZEVtYWlsOiBcItin2YTYsdis2KfYoSDYpdiv2K7Yp9mEINio2LHZitivINin2YTZg9iq2LHZiNmG2Yog2LXYrdmK2K1cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwi2YrYrNioINij2YYg2YrYudix2LYg2KfZhNiq2LnYqNmK2LE6IHswfSAn2LXZiNin2KgnLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwi2LfZhNioINil2LHYrNin2Lkg2K7Yt9ijICd7MH0nLiB7MX3Yp1wiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwi2LnYp9ivINi32YTYqCDYp9mE2KjZitin2YbYp9iqINmB2KfYsdi6INij2YggJ9in2YTZhdiz2KfYsScg2LrZitixINi12K3ZititIFwiLFxuICBleGNlZWRNYXhTaXplOiBcItmK2YbYqNi62Yog2KPZhNinINmK2KrYrNin2YjYsiDYrdis2YUg2KfZhNmF2YTZgSB7MH3Yp1wiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwi2KfZhNix2KzYp9ihINil2K/Yrtin2YQg2YLZitmF2Kkg2KPYrtix2YlcIixcbiAgdXBsb2FkaW5nRmlsZTogXCLYqtit2YXZitmEINin2YTZhdmE2YEg2KfZhNiu2KfYtSDYqNmDLiDZitix2KzZiSDYp9mE2KfZhtiq2LjYp9ixINi52K/YqSDYq9mI2KfZhiDZiNin2YTZhdit2KfZiNmE2Kkg2YTYp9it2YLZi9inXCIsXG4gIGxvYWRpbmdGaWxlOiBcItis2KfYsSDYp9mE2KrYrdmF2YrZhC4uLlwiLFxuICBjaG9vc2VGaWxlOiBcItin2K7YqtixINin2YTZhdmE2YHYp9iqLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCLZhNmFINiq2YLZhSDYqNin2K7YqtmK2KfYsSDZhdmE2YFcIixcbiAgY29uZmlybURlbGV0ZTogXCLZh9mEINiq2LHZitivINit2LDZgSDYp9mE2LPYrNmE2J9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCLZitis2Kgg2KPZhiDYqtmD2YjZhiDZh9iw2Ycg2KfZhNmC2YrZhdipINmB2LHZitiv2KkuXCIsXG4gIGFkZENvbHVtbjogXCLYo9i22YEg2KfZhNi52YXZiNivXCIsXG4gIGFkZFJvdzogXCLYp9i22KfZgdipINi12YFcIixcbiAgcmVtb3ZlUm93OiBcItil2LLYp9mE2Kkg2LXZgVwiLFxuICBhZGRQYW5lbDogXCLYp9i22YEg2KzYr9mK2K9cIixcbiAgcmVtb3ZlUGFuZWw6IFwi2KXYstin2YTYqVwiLFxuICBjaG9pY2VzX0l0ZW06IFwi2KjZhtivXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwi2LnZhdmI2K9cIixcbiAgbWF0cml4X3JvdzogXCLYtdmBXCIsXG4gIHNhdmluZ0RhdGE6IFwi2YrYqtmFINit2YHYuCDYp9mE2YbYqtin2KbYrCDYudmE2Ykg2KfZhNiu2KfYr9mFIC4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwi2K3Yr9irINiu2LfYoyDZiNmE2YUg2YbYqtmF2YPZhiDZhdmGINit2YHYuCDYp9mE2YbYqtin2KbYrC5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwi2KrZhSDYrdmB2Lgg2KfZhNmG2KrYp9im2Kwg2KjZhtis2KfYrSFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcItit2KfZiNmEINmF2KzYr9iv2KdcIixcbiAgdGltZXJNaW46IFwi2K/ZgtmK2YLYqVwiLFxuICB0aW1lclNlYzogXCLYq9in2YbZitipXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwi2YTZgtivINij2YbZgdmC2KogezB9INi52YTZiSDZh9iw2Ycg2KfZhNi12YHYrdipINmIIHsxfSDYpdis2YXYp9mE2KfZiy5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwi2YTZgtivINij2YbZgdmC2KogezB9INi52YTZiSDZh9iw2Ycg2KfZhNi12YHYrdipLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcItmE2YLYryDYo9mG2YHZgtiqIHswfSDYpdis2YXYp9mE2KfZiy5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcItmE2YLYryDYo9mG2YHZgtiqIHswfSDZhdmGIHsxfSDZgdmKINmH2LDZhyDYp9mE2LXZgdit2Kkg2YggezJ9INmF2YYg2KXYrNmF2KfZhNmKIHszfS5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwi2YTZgtivINij2YbZgdmC2KogezB9INmF2YYgezF9INmB2Yog2YfYsNmHINin2YTYtdmB2K3YqS5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCLZhNmC2K8g2KPZhtmB2YLYqiB7MH0g2YXZhiDYpdis2YXYp9mE2YogezF9LlwiLFxuICBjbGVhbkNhcHRpb246IFwi2YbYuNmK2YFcIixcbiAgY2xlYXJDYXB0aW9uOiBcItmI2KfYttitXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcItin2K7YqtixINmF2YTZgVwiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCLZgtmFINio2KXYstin2YTYqSDZh9iw2Kcg2KfZhNmF2YTZgVwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcItmG2LnZhVwiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwi2YTYp1wiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCLZh9mEINij2YbYqiDZhdiq2KPZg9ivINij2YbZgyDYqtix2YrYryDYpdiy2KfZhNipINmH2LDYpyDYp9mE2YXZhNmBOiB7MH3Yn1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwi2YfZhCDYo9mG2Kog2YXYqtij2YPYryDYo9mG2YMg2KrYsdmK2K8g2KXYstin2YTYqSDZg9in2YHYqSDYp9mE2YXZhNmB2KfYqtifXCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCLYudmG2YjYp9mGINin2YTYs9ik2KfZhFwiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJhclwiXSA9IGFyYWJpY1N1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJhclwiXSA9IFwi2KfZhNi52LHYqNmK2KlcIjtcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgYmFzcXVlU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIkF1cnJla29hXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJIdXJyZW5nb2FcIixcbiAgY29tcGxldGVUZXh0OiBcIkJ1a2F0dVwiLFxuICBwcmV2aWV3VGV4dDogXCJBdXJyZWJpc3RhXCIsXG4gIGVkaXRUZXh0OiBcIkVkaXRhdHVcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIkhhc2lcIixcbiAgb3RoZXJJdGVtVGV4dDogXCJCZXN0ZSBiYXQgKHplaGF6dHUpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCJCYXQgZXJlIGV6XCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIkd1enRpYSBoYXV0YXR1XCIsXG4gIHByb2dyZXNzVGV4dDogXCJ7MX0tKGUpdGlrIHswfSBvcnJpYWxkZVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiezB9IGVycmlnaXN0cm8gezF9LShlKXRpa1wiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiRXJhbnR6dW5kYWtvIGdhbGRlcmFrIHswfS97MX1cIixcbiAgZW1wdHlTdXJ2ZXk6IFwiRXogZGFnbyBvcnJpYWxkZSBiaXN0YXJhZ2FycmlyaWsgZWRvIGV6IGRhZ28gZ2FsZGVyYXJpay5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCJFc2tlcnJpayBhc2tvIGdhbGRldGVnaWEgZXJhbnR6dXRlYWdhdGlrIVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOiBcIkd1cmUgZGF0dWVrIGRpb3RlIGRhZ29lbmVrbyBnYWxkZXRlZ2lhIGVyYW50enVuIGR1enVsYS5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJHYWxkZXRlZ2lhIGthcmdhdHplbi4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJIYXV0YXR1Li4uXCIsXG4gIHZhbHVlOiBcImJhbGlvYVwiLFxuICByZXF1aXJlZEVycm9yOiBcIk1lc2VkZXosIGdhbGRlcmEgZXJhbnR6dW4uXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIk1lc2VkZXosIGd1dHhpZW5leiBnYWxkZXJhIGJhdCBlcmFudHp1bi5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJNZXNlZGV6LCBlcnJlbmthZGFrbyBnYWxkZXJhIGd1enRpYWsgZXJhbnR6dW4uXCIsXG4gIG51bWVyaWNFcnJvcjogXCJFc3RpbWF6aW9hIHplbmJha2l6a29hIGl6YW4gYmVoYXIgZHUuXCIsXG4gIG1pbkVycm9yOiBcIkJhbGlvYSBleiBkYSB7MH0gYmFpbm8gdHhpa2lhZ29hIGl6YW4gYmVoYXJcIixcbiAgbWF4RXJyb3I6IFwiQmFsaW9hIGV6IGRhIHswfSBiYWlubyBoYW5kaWFnb2EgaXphbiBiZWhhclwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIk1lc2VkZXosIGd1dHhpZW5leiB7MH0ga2FyYWt0ZXJlIGVyYWJpbGkgYmVoYXIgZGlyYS5cIixcbiAgdGV4dE1heExlbmd0aDogXCJNZXNlZGV6LCBnZWhpZW5leiB7MH0ga2FyYWt0ZXJlIGVyYWJpbGkgYmVoYXIgZGlyYS5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCJNZXNlZGV6LCBnZWhpZW5leiB7MH0gZXRhIGd1dHhpZW5leiB7MX0ga2FyYWt0ZXJlIGVyYWJpbGkgYmVoYXIgZGlyYS5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJNZXNlZGV6LCBndXR4aWVuZXogezB9IGVycmVua2FkYSBiZXRlLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJNZXNlZGV6LCBndXR4aWVuZXogezB9IGF1a2VyYSBoYXV0YXR1LlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJNZXNlZGV6LCB7MH0gYXVrZXJhIGJhaW5vIGdlaGlhZ28gZXogaGF1dGF0dS5cIixcbiAgbnVtZXJpY01pbk1heDogXCJFbCAnezB9JyBkZWJlIGRlIHNlciBpZ3VhbCBvIG3DoXMgZGUgezF9IHkgaWd1YWwgbyBtZW5vcyBkZSB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCInezB9JyB7MX0gYmFpbm8gaGFuZGlhZ29hIGVkbyBiZXJkaW4gaXphbiBiZWhhciBkYVwiLFxuICBudW1lcmljTWF4OiBcIid7MH0nIHsxfSBiYWlubyB0eGlraWFnbyBlZG8gYmVyZGluIGl6YW4gYmVoYXIgZGFcIixcbiAgaW52YWxpZEVtYWlsOiBcIk1lc2VkZXosIGJhbGlvemtvIGVtYWlsYSBpZGF0eiBlemF6dS5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiezB9IGFkaWVyYXpwZW5hayAnZWdpYXprb2EnIGl0enVsaSBiZWhhcmtvIGx1a2UuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCJFc2thZXJhayAnezB9JyBlcnJvcmVhIGl0enVsaSBkdS4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjogXCJMYSBzb2xpY2l0dWQgcmVncmVzw7MgdmFjw61vIGRlIGRhdGEgbyBsYSBwcm9waWVkYWQgJ3RyYXllY3RvcmlhJyBubyBlcyBjb3JyZWN0YVwiLFxuICBleGNlZWRNYXhTaXplOiBcIkZpdHhhdGVnaWFyZW4gdGFtYWluYSBleiBkYSB7MH0gYmFpbm8gaGFuZGlhZ29hIGl6YW4gYmVoYXIuXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCJNZXNlZGV6LCBiZXN0ZSBlc3RpbWF6aW9hIGdlaGl0dS5cIixcbiAgdXBsb2FkaW5nRmlsZTogXCJadXJlIGZpdHhhdGVnaWEgaWdvdHplbiBhcmkgZGEuIE1lc2VkZXosIHNlZ3VuZG8gYmF0enVrIGl0eGFyb24gZXRhIHNhaWF0dSBiZXJyaXJvLlwiLFxuICBsb2FkaW5nRmlsZTogXCJLYXJnYXR6ZW4uLi5cIixcbiAgY2hvb3NlRmlsZTogXCJGaXR4YXRlZ2lhKGspIGhhdXRhdHUuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcIkV6IGRhIGlub2xha28gZml0eGF0ZWdpcmlrIGhhdXRhdHVcIixcbiAgY29uZmlybURlbGV0ZTogXCLCv0VycmVnaXN0cm9hIGJvcnJhdHUgbmFoaSBhbCBkdXp1P1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIkJhbGlvIGhhdSBiYWthcnJhIGl6YW4gYmVoYXIgZHUuXCIsXG4gIGFkZENvbHVtbjogXCJadXRhYmUgYmF0IGdlaGl0dVwiLFxuICBhZGRSb3c6IFwiRXJyZW5rYWRhIGJhdCBnZWhpdHVcIixcbiAgcmVtb3ZlUm93OiBcIkVycmVua2FkYSBiYXQga2VuZHVcIixcbiAgZW1wdHlSb3dzVGV4dDogXCJFeiBkYWdvIGVycmVua2FkYXJpay5cIixcbiAgYWRkUGFuZWw6IFwiQmVycmlhIGdlaGl0dVwiLFxuICByZW1vdmVQYW5lbDogXCJLZW5kdVwiLFxuICBjaG9pY2VzX0l0ZW06IFwiYXJ0aWt1bHVhXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiWnV0YWJlYVwiLFxuICBtYXRyaXhfcm93OiBcIkVycmVua2FkYVwiLFxuICBtdWx0aXBsZXRleHRfaXRlbW5hbWU6IFwidGVzdHVhXCIsXG4gIHNhdmluZ0RhdGE6IFwiRXJhbnR6dW5hayB6ZXJiaXR6YXJpYW4gZ29yZGV0emVuIGFyaSBkaXJhLi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCJFcnJvcmVyZW4gYmF0IGdlcnRhdHUgZXRhIGVyYW50enVuYWsgZXogZGlyYSB6ZXJiaXR6YXJpYW4gZ29yZGUgYWhhbCBpemFuLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJFcmFudHp1bmFrIGVnb2tpIGdvcmRlIGRpcmEhXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCJCZXJyaXJvIHNhaWF0dS5cIixcbiAgdGltZXJNaW46IFwibWluXCIsXG4gIHRpbWVyU2VjOiBcInNlZ1wiLFxuICB0aW1lclNwZW50QWxsOiBcInswfSBlcmFiaWxpIGR1enUgb3JyaWFsZGUgaG9uZXRhbiBldGEgb3JvdGFyYSB7MX0uXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIlp1ayB7MH0gZXJhYmlsaSBkdXp1LlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIk9yb3RhcmEgZ2FzdGF0dSBkdXp1LlwiLFxuICB0aW1lckxpbWl0QWxsOiBcInswfSBnYXN0YXR1IGR1enUgezF9LShlKXRpayBvcnJpYWxkZSBob25ldGFuIGV0YSBvcm90YXJhIHsyfSB7M30tKGUpdGlrLlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCJ7MH0gZ2FzdGF0dSBkdXp1IG9ycmlhbGRlIGhvbmV0YW4gezF9LShlKXRpay5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJadWsgb3JvdGFyYSB7MH0gZ2FzdGF0dSBkdXp1IHsxfS0oZSl0aWsuXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCJHYXJiaXR1XCIsXG4gIGNsZWFyQ2FwdGlvbjogXCJIdXN0dVwiLFxuICBzaWduYXR1cmVQbGFjZUhvbGRlcjogXCJTaW5hdHUgaGVtZW5cIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwiRml0eGF0ZWdpYSBoYXV0YXR1XCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIkZpdHhhdGVnaSBoYXUgZXphYmF0dVwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIkJhaVwiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiRXpcIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwiWml1ciB6YXVkZSBodXJyZW5nbyBmaXR4YXRlZ2lhIGV6YWJhdHUgbmFoaSBkdXp1bGE6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIlppdXIgYWwgemF1ZGUgZml0eGF0ZWdpIGd1enRpYWsgZXphYmF0dSBuYWhpIGRpdHV6dWxhP1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiR2FsZGVyYXJlbiBpemVuYnVydWFcIixcbiAgbW9kYWxDYW5jZWxCdXR0b25UZXh0OiBcIkV6ZXp0YXR1XCIsXG4gIG1vZGFsQXBwbHlCdXR0b25UZXh0OiBcIkV6YXJyaVwiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJldVwiXSA9IGJhc3F1ZVN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJldVwiXSA9IFwiRXVza2FyYVwiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBidWxnYXJpYW5TdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwi0J3QsNC30LDQtFwiLFxuICBwYWdlTmV4dFRleHQ6IFwi0J3QsNC/0YDQtdC0XCIsXG4gIGNvbXBsZXRlVGV4dDogXCLQmtGA0LDQuVwiLFxuICBwcmV2aWV3VGV4dDogXCLQktC40LfRg9Cw0LvQuNC30LDRhtC40Y9cIixcbiAgZWRpdFRleHQ6IFwi0YDQtdC00LDQutGC0LjRgNCw0L3QtVwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwi0J3QsNGH0LDQu9C+XCIsXG4gIG90aGVySXRlbVRleHQ6IFwi0JTRgNGD0LPQviAo0L7Qv9C40YjQtdGC0LUpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCLQndC40YLQviDQtdC00LjQvVwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCLQktGB0LjRh9C60LhcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcItGB0YLRgC4gezB9LCDQvtCx0YnQviDRgdGC0YAuIHsxfVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwi0JfQsNC/0LjRgSB7MH0g0L7RgiB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcItCe0YLQs9C+0LLQvtGA0LXQvdC4INC90LAgezB9IC8gezF9INCy0YrQv9GA0L7RgdCwXCIsXG4gIGVtcHR5U3VydmV5OiBcItCQ0L3QutC10YLQsNGC0LAg0L3QtSDRgdGK0LTRitGA0LbQsCDQstC40LTQuNC80Lgg0YHRgtGA0LDQvdC40YbQuCDQuNC70Lgg0LLRitC/0YDQvtGB0LguXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwi0JHQu9Cw0LPQvtC00LDRgNC40Lwg0LLQuCDQt9CwINGD0YfQsNGB0YLQuNC10YLQviDQsiDQsNC90LrQtdGC0LDRgtCwIVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOiBcItCY0LfQs9C70LXQttC00LAsINGH0LUg0LLQuNC1INCy0LXRh9C1INGB0YLQtSDQv9C+0L/RitC70L3QuNC70Lgg0LDQvdC60LXRgtCw0YLQsC5cIixcbiAgbG9hZGluZ1N1cnZleTogXCLQl9Cw0YDQtdC20LTQsNC90LUg0L3QsCDQsNC90LrQtdGC0LDRgtCwLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcItCY0LfQsdC10YDQtdGC0LUuLi5cIixcbiAgdmFsdWU6IFwidmFsdWVcIixcbiAgcmVxdWlyZWRFcnJvcjogXCLQnNC+0LvRjywg0L7RgtCz0L7QstC+0YDQtdGC0LUg0L3QsCDRgdC70LXQtNC90LjRjyDQstGK0L/RgNC+0YEuXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcItCc0L7Qu9GPLCDQvtGC0LPQvtCy0L7RgNC10YLQtSDQv9C+0L3QtSDQvdCwINC10LTQuNC9INC+0YIg0LLRitC/0YDQvtGB0LjRgtC1LlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcItCc0L7Qu9GPLCDQvtGC0LPQvtCy0L7RgNC10YLQtSDQvdCwINCy0YrQv9GA0L7RgdC40YLQtSDQvdCwINCy0YHQuNGH0LrQuCDRgNC10LTQvtCy0LUuXCIsXG4gIG51bWVyaWNFcnJvcjogXCLQodGC0L7QudC90L7RgdGC0YLQsCDRgdC70LXQtNCy0LAg0LTQsCDQsdGK0LTQtSDRh9C40YHQu9C+LlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcItCc0L7Qu9GPLCDQuNC30L/QvtC70LfQstCw0LnRgtC1INC/0L7QvdC1IHswfSDRgdC40LzQstC+0LvQsC5cIixcbiAgdGV4dE1heExlbmd0aDogXCLQnNC+0LvRjywg0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDQvdC1INC/0L7QstC10YfQtSDQvtGCIHswfSDRgdC40LzQstC+0LvQsC5cIixcbiAgdGV4dE1pbk1heExlbmd0aDpcbiAgICBcItCc0L7Qu9GPLCDQuNC30L/QvtC70LfQstCw0LnRgtC1INC/0L7QstC10YfQtSDQvtGCIHswfSDQuCDQv9C+LdC80LDQu9C60L4g0L7RgiB7MX0g0YHQuNC80LLQvtC70LAuXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwi0JzQvtC70Y8sINC/0L7Qv9GK0LvQvdC10YLQtSDQv9C+0L3QtSB7MH0g0YDQtdC00LAuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcItCc0L7Qu9GPLCDQuNC30LHQtdGA0LXRgtC1INC/0L7QvdC1IHswfSDQstCw0YDQuNCw0L3RgtCwLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCLQnNC+0LvRjywg0LjQt9Cx0LXRgNC10YLQtSDQvdC1INC/0L7QstC10YfQtSDQvtGCIHswfSDQstCw0YDQuNCw0L3RgtCwLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwi0KHRgtC+0LnQvdC+0YHRgtGC0LAgJ3swfScg0YHQu9C10LTQstCwINC00LAg0LHRitC00LUg0YDQsNCy0L3QsCDQuNC70Lgg0L/Qvi3Qs9C+0LvRj9C80LAg0L7RgiB7MX0g0Lgg0YDQsNCy0L3QsCDQuNC70Lgg0L/Qvi3QvNCw0LvQutCwINC+0YIgezJ9XCIsXG4gIG51bWVyaWNNaW46IFwi0KHRgtC+0LnQvdC+0YHRgtGC0LAgJ3swfScg0YHQu9C10LTQstCwINC00LAg0LHRitC00LUg0YDQsNCy0L3QsCDQuNC70Lgg0L/Qvi3Qs9C+0LvRj9C80LAg0L7RgiB7MX1cIixcbiAgbnVtZXJpY01heDogXCLQodGC0L7QudC90L7RgdGC0YLQsCAnezB9JyDRgdC70LXQtNCy0LAg0LTQsCDQsdGK0LTQtSDRgNCw0LLQvdCwINC40LvQuCDQv9C+LdC80LDQu9C60LAg0L7RgiB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcItCc0L7Qu9GPLCDQstGK0LLQtdC00LXRgtC1INCy0LDQu9C40LTQtdC9INCw0LTRgNC10YEg0L3QsCDQtdC70LXQutGC0YDQvtC90L3QsCDQv9C+0YnQsC5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwi0JjQt9GA0LDQt9GK0YI6IHswfSDRgtGA0Y/QsdCy0LAg0LTQsCDQtNCw0LLQsCDRgNC10LfRg9C70YLQsNGCICd0cnVlJyAo0LjRgdGC0LjQvdCwKS5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcItCX0LDRj9Cy0LrQsNGC0LAg0LLQvtC00Lgg0LTQviDQs9GA0LXRiNC60LAgJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XG4gICAgXCLQl9Cw0Y/QstC60LDRgtCwINC90LUg0LLRgNGK0YnQsCDQtNCw0L3QvdC4INC40LvQuCDRh9Cw0YHRgtGC0LAgJ3BhdGgnICjQv9GK0YIg0LTQviDRgtGK0YDRgdC10L3QuNGPINGA0LXRgdGD0YDRgSDQvdCwINGB0YrRgNCy0YrRgNCwKSDQtSDQvdC10L/RgNCw0LLQuNC70L3QviDQt9Cw0LTQsNC00LXQvdCwXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwi0KDQsNC30LzQtdGA0YrRgiDQvdCwINGE0LDQudC70LAg0YHQu9C10LTQstCwINC00LAg0L3QtSDQv9GA0LXQstC40YjQsNCy0LAgezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwi0JzQvtC70Y8sINCy0YrQstC10LTQtdGC0LUg0LTRgNGD0LPQsNGC0LAg0YHRgtC+0LnQvdC+0YHRgi5cIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcItCS0LDRiNC40YIg0YTQsNC50Lsg0YHQtSDQt9Cw0YDQtdC20LTQsCDQvdCwINGB0YrRgNCy0YrRgNCwLiDQnNC+0LvRjywg0LjQt9GH0LDQutCw0LnRgtC1INC90Y/QutC+0LvQutC+INGB0LXQutGD0L3QtNC4INC4INGC0L7Qs9Cw0LLQsCDQvtC/0LjRgtCy0LDQudGC0LUg0L7RgtC90L7QstC+LlwiLFxuICBsb2FkaW5nRmlsZTogXCLQl9Cw0YDQtdC20LTQsNC90LUuLi5cIixcbiAgY2hvb3NlRmlsZTogXCLQmNC30LHQtdGA0LXRgtC1INGE0LDQudC7KNC+0LLQtSkuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcItCd0Y/QvNCwINC40LfQsdGA0LDQvSDRhNCw0LnQu1wiLFxuICBjb25maXJtRGVsZXRlOiBcItCW0LXQu9Cw0LXRgtC1INC70Lgg0LTQsCDQuNC30YLRgNC40LXRgtC1INC30LDQv9C40YHQsD9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCLQodGC0L7QudC90L7RgdGC0YLQsCDRgdC70LXQtNCy0LAg0LTQsCDQsdGK0LTQtSDRg9C90LjQutCw0LvQvdCwLlwiLFxuICBhZGRDb2x1bW46IFwi0JTQvtCx0LDQstGP0L3QtSDQvdCwINC60L7Qu9C+0L3QsFwiLFxuICBhZGRSb3c6IFwi0JTQvtCx0LDQstGP0L3QtSDQvdCwINGA0LXQtFwiLFxuICByZW1vdmVSb3c6IFwi0J/RgNC10LzQsNGF0LLQsNC90LUg0L3QsCDRgNC10LRcIixcbiAgYWRkUGFuZWw6IFwi0JTQvtCx0LDQstGP0L3QtSDQvdCwINC/0LDQvdC10LtcIixcbiAgcmVtb3ZlUGFuZWw6IFwi0J/RgNC10LzQsNGF0LLQsNC90LUg0L3QsCDQv9Cw0L3QtdC7XCIsXG4gIGNob2ljZXNfSXRlbTogXCLQtdC70LXQvNC10L3RglwiLFxuICBtYXRyaXhfY29sdW1uOiBcItCa0L7Qu9C+0L3QsFwiLFxuICBtYXRyaXhfcm93OiBcItCg0LXQtFwiLFxuICBzYXZpbmdEYXRhOiBcItCg0LXQt9GD0LvRgtCw0YLQuNGC0LUg0YHQtSDQt9Cw0L/QsNC30LLQsNGCINC90LAg0YHRitGA0LLRitGA0LAuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOlxuICAgIFwi0J/QvtGA0LDQtNC4INCy0YrQt9C90LjQutC90LDQu9CwINCz0YDQtdGI0LrQsCDRgNC10LfRg9C70YLQsNGC0LjRgtC1INC90LUg0LzQvtC20LDRhdCwINC00LAg0LHRitC00LDRgiDQt9Cw0L/QsNC30LXQvdC4LlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCLQoNC10LfRg9C70YLQsNGC0LjRgtC1INCx0Y/RhdCwINC30LDQv9Cw0LfQtdC90Lgg0YPRgdC/0LXRiNC90L4hXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCLQndC+0LIg0L7Qv9C40YJcIixcbiAgdGltZXJNaW46IFwi0LzQuNC9XCIsXG4gIHRpbWVyU2VjOiBcItGB0LXQulwiLFxuICB0aW1lclNwZW50QWxsOiBcItCS0LjQtSDQuNC30L/QvtC70LfQstCw0YXRgtC1IHswfSDQvdCwINGC0LDQt9C4INGB0YLRgNCw0L3QuNGG0LAg0Lgg0L7QsdGJ0L4gezF9LlwiLFxuICB0aW1lclNwZW50UGFnZTogXCLQktC40LUg0LjQt9C/0L7Qu9C30LLQsNGF0YLQtSB7MH0g0L3QsCDRgtCw0LfQuCDRgdGC0YDQsNC90LjRhtCwLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcItCS0LjQtSDQuNC30L/QvtC70LfQstCw0YXRgtC1INC+0LHRidC+IHswfS5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcItCS0LjQtSDQuNC30L/QvtC30LLQsNGF0YLQtSB7MH0g0L7RgiB7MX0g0L3QsCDRgtCw0LfQuCDRgdGC0YDQsNC90LjRhtCwINC4INC+0LHRidC+IHsyfSDQvtGCIHszfS5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwi0JLQuNC1INC40LfQv9C+0LvQt9Cy0LDRhdGC0LUgezB9INC+0YIgezF9INC90LAg0YLQsNC30Lgg0YHRgtGA0LDQvdC40YbQsC5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCLQktC40LUg0LjQt9C/0L7Qu9C30LLQsNGF0YLQtSDQvtCx0YnQviB7MH0g0L7RgiB7MX0uXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCLQmNC30YfQuNGB0YLQstCw0L3QtVwiLFxuICBjbGVhckNhcHRpb246IFwi0J3QsNGH0LDQu9C90L4g0YHRitGB0YLQvtGP0L3QuNC1XCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcItCY0LfQsdC10YDQtdGC0LUg0YTQsNC50LtcIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwi0J/RgNC10LzQsNGF0LLQsNC90LUg0L3QsCDRhNCw0LnQu9CwXCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwi0JTQsFwiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwi0J3QtVwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCLQndCw0LjRgdGC0LjQvdCwINC70Lgg0LjRgdC60LDRgtC1INC00LAg0L/RgNC10LzQsNGF0L3QtdGC0LUg0YLQvtC30Lgg0YTQsNC50Ls6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcItCd0LDQuNGB0YLQuNC90LAg0LvQuCDQuNGB0LrQsNGC0LUg0LTQsCDQv9GA0LXQvNCw0YXQvdC10YLQtSDQstGB0LjRh9C60Lgg0YTQsNC50LvQvtCy0LU/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCLQl9Cw0LPQu9Cw0LLQuNC1INC90LAg0LLRitC/0YDQvtGB0LBcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiYmdcIl0gPSBidWxnYXJpYW5TdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wiYmdcIl0gPSBcItCx0YrQu9Cz0LDRgNGB0LrQuFwiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBjYXRhbGFuU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIkFudGVyaW9yXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJTZWfDvGVudFwiLFxuICBjb21wbGV0ZVRleHQ6IFwiQ29tcGxldFwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIlVuIGFsdHJlIChkZXNjcmlndWkpXCIsXG4gIHByb2dyZXNzVGV4dDogXCJQw6BnaW5hIHswfSBkZSB7MX1cIixcbiAgZW1wdHlTdXJ2ZXk6IFwiTm8gaGkgaGEgY2FwIHDDoGdpbmEgdmlzaWJsZSBvIHByZWd1bnRhIGEgbCdlbnF1ZXN0YS5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCJHcsOgY2llcyBwZXIgY29tcGxldGFyIGwnZW5xdWVzdGEhXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiTCdlbnF1ZXN0YSBzJ2VzdMOgIGNhcnJlZ2FudCAuLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwiU2VsZWNjaW9uYSAuLi5cIixcbiAgcmVxdWlyZWRFcnJvcjogXCJTaSB1cyBwbGF1IGNvbnRlc3RpIGxhIHByZWd1bnRhLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlNpIHVzIHBsYXUgY29udGVzdGkgbGVzIHByZWd1bnRlcyBkZSBjYWRhIGZpbGVyYS5cIixcbiAgbnVtZXJpY0Vycm9yOiBcIkwnZXN0aW1hY2nDsyBoYSBkZSBzZXIgbnVtw6hyaWNhLlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIlNpIHVzIHBsYXUgZW50cmUgYWxtZW55cyB7MH0gc8OtbWJvbHMuXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwiU2kgdXMgcGxhdSBlbnRyZSBtZW55cyBkZSB7MH0gc8OtbWJvbHMuXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwiU2kgdXMgcGxhdSBlbnRyZSBtw6lzIGRlIHswfSBpIG1lbnlzIGRlIHsxfSBzw61tYm9scy5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJTaSB1cyBwbGF1IG9tcGxpIGFsbWVueXMgezB9IGZpbGVyZXMuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIlNpIHVzIHBsYXUgc2VsZWNjaW9uaSBhbG1lbnlzIHswfSB2YXJpYW50cy5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwiU2kgdXMgcGxhdSBzZWxlY2Npb25pIG5vIG3DqXMgZGUgezB9IHZhcmlhbnRzLlwiLFxuICBudW1lcmljTWluTWF4OiBcIkVsICd7MH0nIGRldSBzZXIgaWd1YWwgbyBtw6lzIGRlIHsxfSBpIGlndWFsIG8gbWVueXMgZGUgezJ9XCIsXG4gIG51bWVyaWNNaW46IFwiRWwgJ3swfScgaGEgZGUgc2VyIGlndWFsIG8gbcOpcyBkZSB7MX1cIixcbiAgbnVtZXJpY01heDogXCJFbCAnezB9JyBoYSBkZSBzZXIgaWd1YWwgbyBtZW55cyBkZSB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIlNpIHVzIHBsYXUgYWZlZ2l1IHVuIGNvcnJldSBlbGVjdHLDsm5pYyB2w6BsaWQuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCJMYSBzb2zCt2xpY2l0dWQgdmEgdG9ybmFyIGVycm9yICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwiTGEgc29swrdsaWNpdHVkIHZhIHRvcm5hciBidWlkYSBkZSBkYXRlcyBvIGxhIHByb3BpZXRhdCAndHJhamVjdMOycmlhJyBubyDDqXMgY29ycmVjdGFcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJMYSBtaWRhIGRlIGwnYXJ4aXUgbm8gcG90IGV4Y2VkaXIgezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiU2kgdXMgcGxhdSBhZmVnaXUgbCdhbHRyYSBlc3RpbWFjacOzLlwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwiRWwgc2V1IGFyeGl1IHMnZXN0w6AgcHVqYW50LiBTaSB1cyBwbGF1IGVzcGVyaSB1bnMgc2Vnb25zIGkgaW50ZW50ZXUtaG8gZGUgbm91LlwiLFxuICBhZGRSb3c6IFwiQWZlZ2l1IHVuYSBmaWxlcmFcIixcbiAgcmVtb3ZlUm93OiBcIkVsaW1pbmFyIHVuYSBmaWxlcmFcIixcbiAgY2hvaWNlc19maXJzdEl0ZW06IFwicHJpbWVyIGFydGljbGVcIixcbiAgY2hvaWNlc19zZWNvbmRJdGVtOiBcInNlZ29uIGFydGljbGVcIixcbiAgY2hvaWNlc190aGlyZEl0ZW06IFwidGVyY2VyIGFydGljbGVcIixcbiAgbWF0cml4X2NvbHVtbjogXCJDb2x1bW5hXCIsXG4gIG1hdHJpeF9yb3c6IFwiRmlsZXJhXCJcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiY2FcIl0gPSBjYXRhbGFuU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcImNhXCJdID0gXCJjYXRhbMOgXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIGNyb2F0aWFuU3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIlByZXRob2RuaVwiLFxuICBwYWdlTmV4dFRleHQ6IFwiU2xqZWRlxIdpXCIsXG4gIGNvbXBsZXRlVGV4dDogXCJLb21wbGV0YW5cIixcbiAgcHJldmlld1RleHQ6IFwiUHJlZ2xlZFwiLFxuICBlZGl0VGV4dDogXCJVcmXEkWl2YW5qZVwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwiUG/EjWV0YWtcIixcbiAgb3RoZXJJdGVtVGV4dDogXCJPc3RhbGkgKG9waXMpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCJOaXRrb1wiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJTZWxlY3QgQWxsXCIsXG4gIHByb2dyZXNzVGV4dDogXCJTdHJhbmljYSB7MH0gb2QgezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJaYXBpc2EgezB9IG9kIHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiT2Rnb3ZvcmlvIG5hIHswfS97MX0gcGl0YW5qYVwiLFxuICBlbXB0eVN1cnZleTogXCJVIGFua2V0aSBuZW1hIHZpZGxqaXZlIHN0cmFuaWNlIGlsaSBwaXRhbmphLlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIkh2YWxhIHZhbSDFoXRvIHN0ZSB6YXZyxaFpbGkgYW5rZXR1IVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgIFwiTmHFoWkgemFwaXNpIHBva2F6dWp1IGRhIHN0ZSB2ZcSHIHphdnLFoWlsaSBvdnUgYW5rZXR1LlwiLFxuICBsb2FkaW5nU3VydmV5OiBcIkFua2V0YSBvIHXEjWl0YXZhbmplLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIk9kYWJlcml0ZS4uLlwiLFxuICB2YWx1ZTogXCJ2cmlqZWRub3N0XCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwiTW9saW0gdmFzIG9kZ292b3JpdGUgbmEgcGl0YW5qZS5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiTW9saW0gdmFzIG9kZ292b3JpdGUgbmEgYmFyZW0gamVkbm8gcGl0YW5qZS5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJPZGdvdm9yaXRlIG5hIHBpdGFuamEgdSBzdmltIHJlZG92aW1hLlwiLFxuICBudW1lcmljRXJyb3I6IFwiVnJpamVkbm9zdCBiaSB0cmViYWxhIGJpdGkgYnJvasSNYW5hLlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIlVuZXNpdGUgbmFqbWFuamUgezB9IHpuYWsob3ZhKS5cIixcbiAgdGV4dE1heExlbmd0aDogXCJVbmVzaXRlIG1hbmplIG9kIHswfSB6bmFrKG92YSkuXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwiVW5lc2l0ZSB2acWhZSBvZCB7MH0gaSBtYW5qZSBvZCB7MX0gem5ha292YS5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJNb2xpbW8gaXNwdW5pdGUgbmFqbWFuamUgezB9IHJlZGFrYS5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwiT2RhYmVyaXRlIGJhcmVtIHswfSB2YXJpamFudGUuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIk9kYWJlcml0ZSBuZSB2acWhZSBvZCB7MH0gdmFyaWphbnRpLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiJ3swfSdiaSB0cmViYW8gYml0aSBqZWRuYWsgaWxpIHZpxaFlIG9kIHsxfSBpIGplZG5hayBpbGkgbWFuamkgb2QgezJ9LlwiLFxuICBudW1lcmljTWluOiBcIid7MH0nIGJpIHRyZWJhbyBiaXRpIGplZG5hayBpbGkgdmnFoWUgb2QgezF9LlwiLFxuICBudW1lcmljTWF4OiBcIid7MH0nIGJpIHRyZWJhbyBiaXRpIGplZG5hayBpbGkgbWFuamkgb2QgezF9XCIsXG4gIGludmFsaWRFbWFpbDogXCJVbmVzaXRlIHZhbGphbnUgZS1tYWlsIGFkcmVzdS5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiSXpyYXo6IHswfSB0cmViYSB2cmF0aXRpICd0cnVlJy5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIlphaHRqZXYgdnJhdGlvIHBvZ3JlxaFrdSAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcIlphaHRqZXYgamUgdnJhdGlvIHByYXpuZSBwb2RhdGtlIGlsaSBqZSAncGF0aCcgc3ZvanN0dm8gbmV0b8SNbmEuXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwiVmVsacSNaW5hIGRhdG90ZWtlIG5lIHNtaWplIHByZWxheml0aSB7MH0uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCJVbmVzaXRlIGRydWd1IHZyaWplZG5vc3QuXCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgXCJWYcWhYSBkYXRvdGVrYSBzZSBwcmVub3NpLiBQcmnEjWVrYWp0ZSBuZWtvbGlrbyBzZWt1bmRpIGkgcG9rdcWhYWp0ZSBwb25vdm5vLlwiLFxuICBsb2FkaW5nRmlsZTogXCJVxI1pdGF2YW5qZS4uLlwiLFxuICBjaG9vc2VGaWxlOiBcIk9kYWJlcml0ZSBkYXRvdGVrdS4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwiTmlqZSBvZGFicmFuYSBkYXRvdGVrYVwiLFxuICBjb25maXJtRGVsZXRlOiBcIsW9ZWxpdGUgbGkgaXpicmlzYXRpIHphcGlzP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIlRhIGJpIHZyaWplZG5vc3QgdHJlYmFsYSBiaXRpIGplZGluc3R2ZW5hLlwiLFxuICBhZGRDb2x1bW46IFwiRG9kYXZhbmplIHN0dXBjYVwiLFxuICBhZGRSb3c6IFwiRG9kYXZhbmplIHJlZGFrYVwiLFxuICByZW1vdmVSb3c6IFwiVWtsb25pdGlcIixcbiAgYWRkUGFuZWw6IFwiRG9kYXZhbmplIG5vdmloXCIsXG4gIHJlbW92ZVBhbmVsOiBcIlVrbG9uaXRpXCIsXG4gIGNob2ljZXNfSXRlbTogXCJzdGF2a3VcIixcbiAgbWF0cml4X2NvbHVtbjogXCJTdHVwY2FcIixcbiAgbWF0cml4X3JvdzogXCJSZWRha1wiLFxuICBzYXZpbmdEYXRhOiBcIlJlenVsdGF0aSBzZSBzcHJlbWFqdSBuYSBwb3NsdcW+aXRlbGp1Li4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCJEb8WhbG8gamUgZG8gcG9ncmXFoWtlIGkgbmlzbW8gbW9nbGkgc3ByZW1pdGkgcmV6dWx0YXRlLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJSZXp1bHRhdGkgc3UgdXNwamXFoW5vIHNwcmVtbGplbmkhXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCJQb2t1xaFhaiBwb25vdm9cIixcbiAgdGltZXJNaW46IFwibWluXCIsXG4gIHRpbWVyU2VjOiBcInNlY1wiLFxuICB0aW1lclNwZW50QWxsOiBcIlZpIHN0ZSBwcm92ZWxpIHswfSBuYSBvdm9qIHN0cmFuaWNpIGkgezF9IHVrdXBuby5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwiUG90cm/FoWlsaSBzdGUgezB9IG5hIG92dSBzdHJhbmljdS5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCJZb3UgaGF2ZSBzcGVudCB7MH0gaW4gdG90YWwuIHswfS5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcIlZpIHN0ZSBwcm92ZWxpIHswfSBvZCB7MX0gbmEgb3ZvaiBzdHJhbmljaSBpIHsyfSBvZCB7M30gdWt1cG5vLlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCJQb3Ryb8WhaW8gc2kgezB9IG9kIHsxfSBuYSBvdm9qIHN0cmFuaWNpLlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIlVrdXBubyBzdGUgcG90cm/FoWlsaSB7MH0gb2QgezF9LlwiLFxuICBjbGVhbkNhcHRpb246IFwiT8SNaXN0aXRpXCIsXG4gIGNsZWFyQ2FwdGlvbjogXCJPxI1pc3RpdGlcIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwiT2RhYmVyaXRlIGRhdG90ZWt1XCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIlVrbG9uaXRlIG92dSBkYXRvdGVrdVwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIkRhXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOZVwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCJKZXN0ZSBsaSBzaWd1cm5pIGRhIMW+ZWxpdGUgdWtsb25pdGkgb3Z1IGRhdG90ZWt1OiB7MH0/XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCJKZXN0ZSBsaSBzaWd1cm5pIGRhIMW+ZWxpdGUgdWtsb25pdGkgc3ZlIGRhdG90ZWtlP1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiTmFzbG92IHBpdGFuamFcIixcbiAgbW9kYWxDYW5jZWxCdXR0b25UZXh0OiBcIk90a2F6YXRpXCIsXG4gIG1vZGFsQXBwbHlCdXR0b25UZXh0OiBcIlByaW1pamVuaXRpXCIsXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImhyXCJdID0gY3JvYXRpYW5TdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wiaHJcIl0gPSBcImhydmF0c2tpXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIGN6ZWNoU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIlDFmWVkY2hvesOtXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJEYWzFocOtXCIsXG4gIGNvbXBsZXRlVGV4dDogXCJIb3Rvdm9cIixcbiAgcHJldmlld1RleHQ6IFwiTsOhaGxlZFwiLFxuICBlZGl0VGV4dDogXCJVcHJhdml0XCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCJTdGFydFwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIkppbsOhIG9kcG92xJvEjyAobmFwacWhdGUpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCLFvcOhZG7DvVwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJWeWJyYXQgdsWhZVwiLFxuICBwcm9ncmVzc1RleHQ6IFwiU3RyYW5hIHswfSB6IHsxfVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiWsOhem5hbSB7MH0geiB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcIlpvZHBvdsSbemVuw6kgb3TDoXpreTogezB9IC8gezF9XCIsXG4gIGVtcHR5U3VydmV5OiBcIlByxa96a3VtdSBuZW9ic2FodWplIMW+w6FkbsOpIG90w6F6a3kuXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiRMSba3VqZW1lIHphIHZ5cGxuxJtuw60gcHLFr3prdW11IVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgIFwiTmHFoWUgesOhem5hbXkgdWthenVqw60sIMW+ZSBqc3RlIHRlbnRvIHByxa96a3VtIGppxb4gZG9rb27EjWlsaS5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJQcm9iw61ow6EgbmHEjcOtdMOhbsOtIHByxa96a3VtdS4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJWeWJlci4uLlwiLFxuICB2YWx1ZTogXCJob2Rub3RhXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwiT2Rwb3bEm3p0ZSBwcm9zw61tIG5hIG90w6F6a3UuXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIlBsZWFzZSBhbnN3ZXIgYXQgbGVhc3Qgb25lIHF1ZXN0aW9uLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIk9kcG92xJt6dGUgcHJvc8OtbSBuYSB2xaFlY2hueSBvdMOhemt5LlwiLFxuICBudW1lcmljRXJyb3I6IFwiViB0b210byBwb2xpIGx6ZSB6YWRhdCBwb3V6ZSDEjcOtc2xhLlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIlphZGVqdGUgcHJvc8OtbSBhbGVzcG/FiCB7MH0gem5ha8WvLlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIlphZGVqdGUgcHJvc8OtbSBtw6luxJsgbmXFviB7MH0gem5ha8WvLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcIlphZGVqdGUgcHJvc8OtbSB2w61jZSBuZcW+IHswfSBhIG3DqW7EmyBuZcW+IHsxfSB6bmFrxa8uXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwiVnlwbMWIdGUgcHJvc8OtbSBhbGVzcG/FiCB7MH0gxZnDoWRrxa8uXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIlZ5YmVydGUgcHJvc8OtbSBhbGVzcG/FiCB7MH0gdmFyaWFudHkuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIk5ldnliw61yZWp0ZSBwcm9zw61tIHbDrWNlIG5lxb4gezB9IHZhcmlhbnQuXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCJPZHBvdsSbxI8gJ3swfScgYnkgbcSbbG8gYsO9dCB2xJt0xaHDrSBuZWJvIHJvdm5vIHsxfSBhIG1lbsWhw60gbmVibyByb3ZubyB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCJPZHBvdsSbxI8gJ3swfScgYnkgbcSbbG8gYsO9dCB2xJt0xaHDrSBuZWJvIHJvdm5vIHsxfVwiLFxuICBudW1lcmljTWF4OiBcIk9kcG92xJvEjyAnezB9JyBieSBtxJtsbyBiw710IG1lbsWhw60gbmVibyByb3ZubyB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIlphZGVqdGUgcHJvc8OtbSBwbGF0bm91IGUtbWFpbG92b3UgYWRyZXN1LlwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCJWw71yYXo6IHswfSBieSBtxJtsIHZyw6F0aXQgaG9kbm90dSDigJ50cnVl4oCcLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiUG/FvmFkYXZlayB2csOhdGlsIGNoeWJ1ICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOiBcIlBvxb5hZGF2ZWsgbmV2csOhdGlsIGRhdGEgbmVibyBjZXN0YSBqZSBuZXBsYXRuw6FcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJWZWxpa29zdCBzb3Vib3J1IGJ5IG5lbcSbbGEgYsO9dCB2xJt0xaHDrSBuZcW+IHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlphZGVqdGUgcHJvc8OtbSBqaW5vdSBob2Rub3R1LlwiLFxuICB1cGxvYWRpbmdGaWxlOiBcIlbDocWhIHNvdWJvciBzZSBuYWhyw6F2w6EuIFprdXN0ZSB0byBwcm9zw61tIHphIG7Em2tvbGlrIHNla3VuZC5cIixcbiAgbG9hZGluZ0ZpbGU6IFwiTmHEjcOtdMOhbsOtLi4uXCIsXG4gIGNob29zZUZpbGU6IFwiVnliZXJ0ZSBzb3Vib3J5IC4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwiTmVuw60genZvbGVuw70gxb7DoWRuw70gc291Ym9yXCIsXG4gIGNvbmZpcm1EZWxldGU6IFwiQ2hjZXRlIHNtYXphdCB6w6F6bmFtP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIlRhdG8gaG9kbm90YSBieSBtxJtsYSBiw710IGplZGluZcSNbsOhLlwiLFxuICBhZGRDb2x1bW46IFwiUMWZaWRhdCBzbG91cGVjXCIsXG4gIGFkZFJvdzogXCJQxZlpZGF0IMWZw6FkZWtcIixcbiAgcmVtb3ZlUm93OiBcIk9kc3RyYW5pdFwiLFxuICBhZGRQYW5lbDogXCJQxZlpZGF0IG5vdsO9XCIsXG4gIHJlbW92ZVBhbmVsOiBcIk9kc3RyYW5pdFwiLFxuICBjaG9pY2VzX0l0ZW06IFwicG9sb8W+a2FcIixcbiAgbWF0cml4X2NvbHVtbjogXCJTbG91cGVjXCIsXG4gIG1hdHJpeF9yb3c6IFwixZjDoWRla1wiLFxuICBzYXZpbmdEYXRhOiBcIlbDvXNsZWRreSBzZSB1a2zDoWRhasOtIG5hIHNlcnZlciAuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIkRvxaFsbyBrIGNoeWLEmyBhIHbDvXNsZWRreSBqc21lIG5lbW9obGkgdWxvxb5pdC5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiVsO9c2xlZGt5IGJ5bHkgw7pzcMSbxaFuxJsgdWxvxb5lbnkhXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCJaa3VzIHRvIHpub3Z1XCIsXG4gIHRpbWVyTWluOiBcIm1pblwiLFxuICB0aW1lclNlYzogXCJzZWtcIixcbiAgdGltZXJTcGVudEFsbDogXCJOYSB0w6l0byBzdHLDoW5jZSBqc3RlIHV0cmF0aWxpIGNlbGtlbSB7MH0gYSBjZWxrZW0gezF9LlwiLFxuICB0aW1lclNwZW50UGFnZTogXCJOYSB0w6l0byBzdHLDoW5jZSBqc3RlIHV0cmF0aWxpIHswfS5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCJDZWxrZW0ganN0ZSB1dHJhdGlsaSB7MH0uXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgXCJOYSB0w6l0byBzdHLDoW5jZSBqc3RlIHV0cmF0aWxpIHswfSB6IHsxfSBhIGNlbGtlbSB7Mn0geiB7M30uXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIk5hIHTDqXRvIHN0csOhbmNlIGpzdGUgc3Ryw6F2aWxpIHswfSB6IHsxfS5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJDZWxrb3bEmyBqc3RlIHV0cmF0aWxpIHswfSB6IHsxfS5cIixcbiAgY2xlYW5DYXB0aW9uOiBcIsSMaXN0w71cIixcbiAgY2xlYXJDYXB0aW9uOiBcIlByxa9obGVkbsOhXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIlZ5YmVydGUgc291Ym9yXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIk9kZWJlcnRlIHRlbnRvIHNvdWJvclwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIkFub1wiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiTmVcIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwiT3ByYXZkdSBjaGNldGUgb2RlYnJhdCB0ZW50byBzb3Vib3I6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIk9wcmF2ZHUgY2hjZXRlIG9kc3RyYW5pdCB2xaFlY2hueSBzb3Vib3J5P1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiTsOhemV2IG90w6F6a3lcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiY3NcIl0gPSBjemVjaFN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJjc1wiXSA9IFwixI1lxaF0aW5hXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIGRhbmlzaFN1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCJUaWxiYWdlXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJWaWRlcmVcIixcbiAgY29tcGxldGVUZXh0OiBcIkbDpnJkaWdcIixcbiAgcHJldmlld1RleHQ6IFwiRm9ycHJlbWllcmVcIixcbiAgZWRpdFRleHQ6IFwiUmVkaWfDqXJcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIlN0YXJ0XCIsXG4gIG90aGVySXRlbVRleHQ6IFwiVmFsZ2ZyaXQgc3Zhci4uLlwiLFxuICBub25lSXRlbVRleHQ6IFwiSW5nZW5cIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwiVsOmbGcgYWxsZVwiLFxuICBwcm9ncmVzc1RleHQ6IFwiU2lkZSB7MH0gYWYgezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJPcHRhZyB7MH0gYWYgezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJCZXN2YXJlZGUgezB9IC8gezF9IHNww7hyZ3Ntw6VsXCIsXG4gIGVtcHR5U3VydmV5OiBcIkRlciBlciBpbmdlbiBzeW5saWdlIHNww7hyZ3Ntw6VsLlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIk1hbmdlIHRhayBmb3IgZGluIGJlc3ZhcmVsc2UhXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCJWb3JlcyBkYXRhIHZpc2VyIGF0IGR1IGFsbGVyZWRlIGhhciBnZW5uZW1mw7hydCBkZXR0ZSBzcMO4cmdlc2tlbWEuXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiU3DDuHJnZXNrZW1hZXQgaGVudGVzIGZyYSBzZXJ2ZXJlbi4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJWw6ZsZy4uLlwiLFxuICB2YWx1ZTogXCJ2w6ZyZGlcIixcbiAgcmVxdWlyZWRFcnJvcjogXCJCZXN2YXIgdmVubGlnc3Qgc3DDuHJnc23DpWxldC5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiQmVzdmFyIHZlbmxpZ3N0IG1pbmRzdCDDqXQgc3DDuHJnc23DpWwuXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiQmVzdmFyIHZlbmxpZ3N0IHNww7hyZ3Ntw6VsIGkgYWxsZSByw6Zra2VyLlwiLFxuICBudW1lcmljRXJyb3I6IFwiQW5naXYgZXQgdGFsLlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIkFuZ2l2IG1pbmRzdCB7MH0gdGVnbi5cIixcbiAgdGV4dE1heExlbmd0aDogXCJQbGVhc2UgZW50ZXIgbGVzcyB0aGFuIHswfSBjaGFyYWN0ZXJzLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcIkFuZ2l2IG1lcmUgZW5kIHswfSBvZyBtaW5kcmUgZW5kIHsxfSB0ZWduLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIlVkZnlsZCBtaW5kc3QgezB9IHLDpmtrZXIuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIlbDpmxnIHZlbmxpZ3N0IG1pbmRzdCB7MH0gc3Zhcm11bGlnaGVkKGVyKS5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwiVsOmbGcgdmVubGlnc3QgZsOmcnJlIHswfSBzdmFybXVsaWdoZWRlcihlcikuXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCInezB9JyBza2FsIHbDpnJlIGxpZyBtZWQgZWxsZXIgc3TDuHJyZSBlbmQgezF9IG9nIGxpZyBtZWQgZWxsZXIgbWluZHJlIGVuZCB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCInezB9JyBza2FsIHbDpnJlIGxpZyBtZWQgZWxsZXIgc3TDuHJyZSBlbmQgezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiJ3swfScgc2thbCB2w6ZyZSBsaWcgbWVkIGVsbGVyIG1pbmRyZSBlbmQgezF9XCIsXG4gIGludmFsaWRFbWFpbDogXCJBbmdpdiB2ZW5saWdzdCBlbiBneWxkaWcgZS1tYWlsIGFkcmVzc2UuXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIlVkdHJ5a2tldDogezB9IHNrYWwgcmV0dXJuZXJlICd0cnVlJy5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIkZvcmVzcMO4cmdzbGVuIHJldHVybmVyZWRlIGZlamxlbiAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcIkZvcmVzcMO4cmdzbGVuIHJldHVybmVyZWRlIGluZ2VuIGRhdGEgZWxsZXIgJ3BhdGgnIHBhcmFtZXRlcmVuIGVyIGZvcmtlcnRcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJGaWxzdMO4cnJlbHNlbiBtw6UgaWtrZSBvdmVyc3RpZ2UgezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiQW5naXYgZW4gdsOmcmRpIGZvciBkaXQgdmFsZ2ZyaWUgc3Zhci5cIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcIkRpbiBmaWwgYmxpdmVyIHVwbG9hZGV0LiBWZW50IG5vZ2xlIHNla3VuZGVyIG9nIHByw7h2IGV2ZW50dWVsdCBpZ2VuLlwiLFxuICBsb2FkaW5nRmlsZTogXCJJbmRsw6ZzZXIuLi5cIixcbiAgY2hvb3NlRmlsZTogXCJWw6ZsZyBmaWwoZXIpLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCJJbmdlbiBmaWwgZXIgdmFsZ3RcIixcbiAgY29uZmlybURlbGV0ZTogXCJWaWwgZHUgZmplcm5lIGRlbj9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCJEZW5uZSB2w6ZyZGkgc2thbCB2w6ZyZSB1bmlrLlwiLFxuICBhZGRDb2x1bW46IFwiVGlsZsO4aiBrb2xvbm5lXCIsXG4gIGFkZFJvdzogXCJUaWxmw7hqIHLDpmtrZVwiLFxuICByZW1vdmVSb3c6IFwiRmplcm5cIixcbiAgYWRkUGFuZWw6IFwiVGlsZsO4aiBueVwiLFxuICByZW1vdmVQYW5lbDogXCJGamVyblwiLFxuICBjaG9pY2VzX0l0ZW06IFwidmFsZ1wiLFxuICBtYXRyaXhfY29sdW1uOiBcIktvbG9ubmVcIixcbiAgbWF0cml4X3JvdzogXCJSw6Zra2VcIixcbiAgc2F2aW5nRGF0YTogXCJSZXN1bHRhdGVybmUgYmxpdmVyIGdlbXQgcMOlIHNlcnZlcmVuLi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCJEZXIgb3BzdG9kIGVuIGZlamwgb2cgdmkga3VubmUgaWtrZSBnZW1tZSByZXN1bHRhdGV0LlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJSZXN1bHRhdGV0IGJsZXYgZ2VtdCFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIlByw7h2IGlnZW5cIixcbiAgdGltZXJNaW46IFwibWluXCIsXG4gIHRpbWVyU2VjOiBcInNla1wiLFxuICB0aW1lclNwZW50QWxsOiBcIkR1IGhhciBicnVndCB7MH0gcMOlIGRlbm5lIHNpZGUgb2cgezF9IGkgYWx0LlwiLFxuICB0aW1lclNwZW50UGFnZTogXCJEdSBoYXIgYnJ1Z3QgezB9IHDDpSBkZW5uZSBzaWRlLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIkR1IGhhciBicnVndCB7MH0gaSBhbHQuXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgXCJEdSBoYXIgYnJ1Z3QgezB9IGFmIHsxfSBww6UgZGVubmUgc2lkZSBvZyB7Mn0gYWYgezN9IGkgYWx0LlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCJEdSBoYXIgYnJ1Z3QgezB9IGFmIHsxfSBww6UgZGVubmUgc2lkZS5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJEdSBoYXIgYnJ1Z3QgezB9IGFmIHsxfSBpIGFsdC5cIixcbiAgY2xlYW5DYXB0aW9uOiBcIlJlbnNcIixcbiAgY2xlYXJDYXB0aW9uOiBcIkZqZXJuXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIlbDpmxnIGZpbFwiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCJGamVybiBkZW5uZSBmaWxcIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJKYVwiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiSW5nZW5cIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwiRXIgZHUgc2lra2VyIHDDpSwgYXQgZHUgdmlsIGZqZXJuZSBkZW5uZSBmaWw6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIkVyIGR1IHNpa2tlciBww6UsIGF0IGR1IHZpbCBmamVybmUgYWxsZSBmaWxlcj9cIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIlNww7hyZ3Ntw6VscyB0aXRlbFwiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJkYVwiXSA9IGRhbmlzaFN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJkYVwiXSA9IFwiZGFuc2tcIjtcbiIsIi8vQ3JlYXRlZCBvbiBiZWhhbGYgaHR0cHM6Ly9naXRodWIuY29tL0ZyYW5rMTNcbi8vTW9kaWZpZWQgb24gYmVoYWxmIFJvZWxhbmQgVmVyYmFrZWxcbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgZHV0Y2hTdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwiVm9yaWdlXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJWb2xnZW5kZVwiLFxuICBjb21wbGV0ZVRleHQ6IFwiVmVyemVuZGVuXCIsXG4gIHByZXZpZXdUZXh0OiBcIlZvb3JiZWVsZFwiLFxuICBlZGl0VGV4dDogXCJCZXdlcmtcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIkJlZ2luIG1ldFwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIkFuZGVycywgbmwuXCIsXG4gIG5vbmVJdGVtVGV4dDogXCJHZWVuXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIlNlbGVjdGVlciBBbGxlc1wiLFxuICBwcm9ncmVzc1RleHQ6IFwiUGFnaW5hIHswfSB2YW4gezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJSZWNvcmQgezB9IG9mIHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiR2VhbnR3b29yZCB7MH0vezF9IHZyYWdlblwiLFxuICBlbXB0eVN1cnZleTogXCJFciBpcyBnZWVuIHppY2h0YmFyZSBwYWdpbmEgb2YgdnJhYWcgaW4gZGV6ZSB2cmFnZW5saWpzdFwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIkJlZGFua3Qgdm9vciBoZXQgaW52dWxsZW4gdmFuIGRlIHZyYWdlbmxpanN0XCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgICBcIk9uemUgZ2VnZXZlbnMgdG9uZW4gYWFuIGRhdCBqZSBkZXplIHZyYWdlbmxpanN0IHJlZWRzIGJlYW50d29vcmQgaGVidC5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJEZSB2cmFnZW5saWpzdCBpcyBhYW4gaGV0IGxhZGVuLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIktpZXMuLi5cIixcbiAgdmFsdWU6IFwid2FhcmRlXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwiRGl0IGlzIGVlbiB2ZXJlaXN0ZSB2cmFhZ1wiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJHZWxpZXZlIHRlbiBtaW5zdGUgZWVuIHZyYWFnIHRlIGJlYW50d29vcmRlbi5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJEZXplIHZyYWFnIHZlcmVpc3Qgw6nDqW4gYW50d29vcmQgcGVyIHJpalwiLFxuICBudW1lcmljRXJyb3I6IFwiSGV0IGFudHdvb3JkIG1vZXQgZWVuIGdldGFsIHppam5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCJWdWwgbWluc3RlbnMgezB9IGthcmFrdGVycyBpblwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIkdlbGlldmUgbWluZGVyIGRhbiB7MH0ga2FyYWt0ZXJzIGluIHRlIHZ1bGxlbi5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCJHZWxpZXZlIG1lZXIgZGFuIHswfSBlbiBtaW5kZXIgZGFuIHsxfSBrYXJha3RlcnMgaW4gdGUgdnVsbGVuLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIkdlbGlldmUgdGVuIG1pbnN0ZSB7MH0gcmlqZW4gaW4gdGUgdnVsbGVuLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJTZWxlY3RlZXIgbWluaW11bSB7MH0gYW50d29vcmRlblwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJTZWxlY3RlZXIgbmlldCBtZWVyIGRhbiB7MH0gYW50d29vcmRlblwiLFxuICBudW1lcmljTWluTWF4OlxuICAgICAgXCJVdyBhbnR3b29yZCAnezB9JyBtb2V0IGdyb3RlciBvZiBnZWxpamsgemlqbiBhYW4gezF9IGVuIGtsZWluZXIgb2YgZ2VsaWprIGFhbiB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCJVdyBhbnR3b29yZCAnezB9JyBtb2V0IGdyb3RlciBvZiBnZWxpamsgemlqbiBhYW4gezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiVXcgYW50d29vcmQgJ3swfScgbW9ldCBncm90ZXIgb2YgZ2VsaWprIHppam4gYWFuIHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwiVnVsIGVlbiBnZWxkaWcgZS1tYWlsYWRyZXMgaW5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiRGUgdWl0ZHJ1a2tpbmc6IHswfSBtb2V0ICd3YWFyJyB0ZXJ1Z2dldmVuLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiRGUgdnJhYWcga2VlcmRlIGVlbiBmb3V0IHRlcnVnICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgICAgXCJEZSB2cmFhZyBnYWYgZWVuIGxlZWcgYW50d29vcmQgdGVydWcgb2YgZGUgJ3BhZCcgZWlnZW5zY2hhcCBpcyBuaWV0IGNvcnJlY3RcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJEZSBncm9vdHRlIHZhbiBoZXQgYmVzdGFuZCBtYWcgbmlldCBncm90ZXIgemlqbiBkYW4gezB9XCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCJWdWwgaGV0IHZlbGQgJ0FuZGVycywgbmwuJyBpblwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgICAgXCJVdyBiZXN0YW5kIHdvcmR0IG9wZ2VsYWRlbi4gR2VsaWV2ZSBlbmtlbGUgc2Vjb25kZW4gdGUgd2FjaHRlbiBlbiBvcG5pZXV3IHRlIHByb2JlcmVuLlwiLFxuICBsb2FkaW5nRmlsZTogXCJPcGxhZGVuLi4uXCIsXG4gIGNob29zZUZpbGU6IFwiS2llcyB1dyBiZXN0YW5kKGVuKS4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwiR2VlbiBiZXN0YW5kIGdla296ZW5cIixcbiAgY29uZmlybURlbGV0ZTogXCJXaWwgamUgZGV6ZSBnZWdldmVucyB2ZXJ3aWpkZXJlbj9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCJEZXplIHdhYXJkZSBtb2V0IHVuaWVrIHppam4uXCIsXG4gIGFkZENvbHVtbjogXCJWb2VnIGtvbG9tIHRvZVwiLFxuICBhZGRSb3c6IFwiVm9lZyByaWogdG9lXCIsXG4gIHJlbW92ZVJvdzogXCJWZXJ3aWpkZXJcIixcbiAgYWRkUGFuZWw6IFwiTmlldXdlIHRvZXZvZWdlblwiLFxuICByZW1vdmVQYW5lbDogXCJWZXJ3aWpkZXJcIixcbiAgY2hvaWNlc19JdGVtOiBcIm9uZGVyd2VycFwiLFxuICBtYXRyaXhfY29sdW1uOiBcIktvbG9tXCIsXG4gIG1hdHJpeF9yb3c6IFwiUmlqXCIsXG4gIHNhdmluZ0RhdGE6IFwiRGUgcmVzdWx0YXRlbiB3b3JkZW4gYmV3YWFyZCBvcCBkZSBzZXJ2ZXIuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIkVyIHdhcyBlZW4gcHJvYmxlZW0gZW4gd2Uga29uZGVuIGRlIHJlc3VsdGF0ZW4gbmlldCBiZXdhcmVuLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJEZSByZXN1bHRhdGVuIHdlcmRlbiBzdWNjZXN2b2wgYmV3YWFyZCFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIlByb2JlZXIgb3BuaWV1d1wiLFxuICB0aW1lck1pbjogXCJtaW5pbXVtXCIsXG4gIHRpbWVyU2VjOiBcInNlY1wiLFxuICB0aW1lclNwZW50QWxsOiBcIlUgaGVlZnQgezB9IGdlc3BlbmRlZXJkIG9wIGRlemUgcGFnaW5hIGVuIHsxfSBpbiB0b3RhYWwuXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIlUgaGVlZnQgezB9IG9wIGRlemUgcGFnaW5hIGdlc3BlbmRlZXJkLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIlUgaGVlZnQgaW4gdG90YWFsIHswfSBnZXNwZW5kZWVyZC5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICAgIFwiVSBoZWVmdCB7MH0gdmFuIHsxfSBvcCBkZXplIHBhZ2luYSBnZXNwZW5kZWVyZCBlbiB7Mn0gdmFuIHszfSBpbiB0b3RhYWwuXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIlUgaGVlZnQgezB9IHZhbiB7MX0gZ2VzcGVuZGVlcmQgb3AgZGV6ZSBwYWdpbmEuXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwiVSBoZWVmdCB7MH0gdmFuIHsxfSBpbiBoZXQgdG90YWFsLlwiLFxuICBjbGVhbkNhcHRpb246IFwiS3VpcyBvcFwiLFxuICBjbGVhckNhcHRpb246IFwiS3VpcyBvcFwiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJHZWtvemVuIGJlc3RhbmRcIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwiVmVyd2lqZGVyIGRlemUgZmlsZVwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIkphXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOZWVuXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIkJlbnQgdSB6ZWtlciBkYXQgdSBkZXplIGZpbGUgd2lsdCB2ZXJ3aWpkZXJlbjogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiQmVudCB1IHpla2VyIGRhdCB1IGFsIGRlemUgZmlsZXMgd2lsdCB2ZXJ3aWpkZXJlbj9cIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIlRpdGVsIHZhbiBkZSB2cmFhZ1wiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJubFwiXSA9IGR1dGNoU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcIm5sXCJdID0gXCJuZWRlcmxhbmRzXCI7XG4iLCIvL1VuY29tbWVudCB0aGlzIGxpbmUgb24gY3JlYXRpbmcgYSB0cmFuc2xhdGlvbiBmaWxlXG4vL2ltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgZW5nbGlzaFN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCJQcmV2aW91c1wiLFxuICBwYWdlTmV4dFRleHQ6IFwiTmV4dFwiLFxuICBjb21wbGV0ZVRleHQ6IFwiQ29tcGxldGVcIixcbiAgcHJldmlld1RleHQ6IFwiUHJldmlld1wiLFxuICBlZGl0VGV4dDogXCJFZGl0XCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCJTdGFydFwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIk90aGVyIChkZXNjcmliZSlcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIk5vbmVcIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwiU2VsZWN0IEFsbFwiLFxuICBwcm9ncmVzc1RleHQ6IFwiUGFnZSB7MH0gb2YgezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJSZWNvcmQgezB9IG9mIHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiQW5zd2VyZWQgezB9L3sxfSBxdWVzdGlvbnNcIixcbiAgZW1wdHlTdXJ2ZXk6IFwiVGhlcmUgaXMgbm8gdmlzaWJsZSBwYWdlIG9yIHF1ZXN0aW9uIGluIHRoZSBzdXJ2ZXkuXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiVGhhbmsgeW91IGZvciBjb21wbGV0aW5nIHRoZSBzdXJ2ZXkhXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCJPdXIgcmVjb3JkcyBzaG93IHRoYXQgeW91IGhhdmUgYWxyZWFkeSBjb21wbGV0ZWQgdGhpcyBzdXJ2ZXkuXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiTG9hZGluZyBTdXJ2ZXkuLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwiQ2hvb3NlLi4uXCIsXG4gIHZhbHVlOiBcInZhbHVlXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwiUGxlYXNlIGFuc3dlciB0aGUgcXVlc3Rpb24uXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIlBsZWFzZSBhbnN3ZXIgYXQgbGVhc3Qgb25lIHF1ZXN0aW9uLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlBsZWFzZSBhbnN3ZXIgcXVlc3Rpb25zIGluIGFsbCByb3dzLlwiLFxuICBudW1lcmljRXJyb3I6IFwiVGhlIHZhbHVlIHNob3VsZCBiZSBudW1lcmljLlwiLFxuICBtaW5FcnJvcjogXCJUaGUgdmFsdWUgc2hvdWxkIG5vdCBiZSBsZXNzIHRoYW4gezB9XCIsXG4gIG1heEVycm9yOiBcIlRoZSB2YWx1ZSBzaG91bGQgbm90IGJlIGdyZWF0ZXIgdGhhbiB7MH1cIixcbiAgdGV4dE1pbkxlbmd0aDogXCJQbGVhc2UgZW50ZXIgYXQgbGVhc3QgezB9IGNoYXJhY3RlcihzKS5cIixcbiAgdGV4dE1heExlbmd0aDogXCJQbGVhc2UgZW50ZXIgbm8gbW9yZSB0aGFuIHswfSBjaGFyYWN0ZXIocykuXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6XG4gICAgXCJQbGVhc2UgZW50ZXIgYXQgbGVhc3QgezB9IGFuZCBubyBtb3JlIHRoYW4gezF9IGNoYXJhY3RlcnMuXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwiUGxlYXNlIGZpbGwgaW4gYXQgbGVhc3QgezB9IHJvdyhzKS5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwiUGxlYXNlIHNlbGVjdCBhdCBsZWFzdCB7MH0gdmFyaWFudChzKS5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwiUGxlYXNlIHNlbGVjdCBubyBtb3JlIHRoYW4gezB9IHZhcmlhbnQocykuXCIsXG4gIG51bWVyaWNNaW5NYXg6IFwiVGhlICd7MH0nIHNob3VsZCBiZSBhdCBsZWFzdCB7MX0gYW5kIGF0IG1vc3QgezJ9XCIsXG4gIG51bWVyaWNNaW46IFwiVGhlICd7MH0nIHNob3VsZCBiZSBhdCBsZWFzdCB7MX1cIixcbiAgbnVtZXJpY01heDogXCJUaGUgJ3swfScgc2hvdWxkIGJlIGF0IG1vc3QgezF9XCIsXG4gIGludmFsaWRFbWFpbDogXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlLW1haWwgYWRkcmVzcy5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiVGhlIGV4cHJlc3Npb246IHswfSBzaG91bGQgcmV0dXJuICd0cnVlJy5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIlRoZSByZXF1ZXN0IHJldHVybmVkIGVycm9yICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwiVGhlIHJlcXVlc3QgcmV0dXJuZWQgZW1wdHkgZGF0YSBvciB0aGUgJ3BhdGgnIHByb3BlcnR5IGlzIGluY29ycmVjdFwiLFxuICBleGNlZWRNYXhTaXplOiBcIlRoZSBmaWxlIHNpemUgc2hvdWxkIG5vdCBleGNlZWQgezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiUGxlYXNlIGVudGVyIHRoZSBvdGhlciB2YWx1ZS5cIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcIllvdXIgZmlsZSBpcyB1cGxvYWRpbmcuIFBsZWFzZSB3YWl0IHNldmVyYWwgc2Vjb25kcyBhbmQgdHJ5IGFnYWluLlwiLFxuICBsb2FkaW5nRmlsZTogXCJMb2FkaW5nLi4uXCIsXG4gIGNob29zZUZpbGU6IFwiQ2hvb3NlIGZpbGUocykuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcIk5vIGZpbGUgY2hvc2VuXCIsXG4gIGNvbmZpcm1EZWxldGU6IFwiRG8geW91IHdhbnQgdG8gZGVsZXRlIHRoZSByZWNvcmQ/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiVGhpcyB2YWx1ZSBzaG91bGQgYmUgdW5pcXVlLlwiLFxuICBhZGRDb2x1bW46IFwiQWRkIGNvbHVtblwiLFxuICBhZGRSb3c6IFwiQWRkIHJvd1wiLFxuICByZW1vdmVSb3c6IFwiUmVtb3ZlXCIsXG4gIGVtcHR5Um93c1RleHQ6IFwiVGhlcmUgYXJlIG5vIHJvd3MuXCIsXG4gIGFkZFBhbmVsOiBcIkFkZCBuZXdcIixcbiAgcmVtb3ZlUGFuZWw6IFwiUmVtb3ZlXCIsXG4gIGNob2ljZXNfSXRlbTogXCJpdGVtXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiQ29sdW1uXCIsXG4gIG1hdHJpeF9yb3c6IFwiUm93XCIsXG4gIG11bHRpcGxldGV4dF9pdGVtbmFtZTogXCJ0ZXh0XCIsXG4gIHNhdmluZ0RhdGE6IFwiVGhlIHJlc3VsdHMgYXJlIGJlaW5nIHNhdmVkIG9uIHRoZSBzZXJ2ZXIuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIkFuIGVycm9yIG9jY3VycmVkIGFuZCB3ZSBjb3VsZCBub3Qgc2F2ZSB0aGUgcmVzdWx0cy5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiVGhlIHJlc3VsdHMgd2VyZSBzYXZlZCBzdWNjZXNzZnVsbHkhXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCJUcnkgYWdhaW5cIixcbiAgdGltZXJNaW46IFwibWluXCIsXG4gIHRpbWVyU2VjOiBcInNlY1wiLFxuICB0aW1lclNwZW50QWxsOiBcIllvdSBoYXZlIHNwZW50IHswfSBvbiB0aGlzIHBhZ2UgYW5kIHsxfSBpbiB0b3RhbC5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwiWW91IGhhdmUgc3BlbnQgezB9IG9uIHRoaXMgcGFnZS5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCJZb3UgaGF2ZSBzcGVudCB7MH0gaW4gdG90YWwuXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgXCJZb3UgaGF2ZSBzcGVudCB7MH0gb2YgezF9IG9uIHRoaXMgcGFnZSBhbmQgezJ9IG9mIHszfSBpbiB0b3RhbC5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwiWW91IGhhdmUgc3BlbnQgezB9IG9mIHsxfSBvbiB0aGlzIHBhZ2UuXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwiWW91IGhhdmUgc3BlbnQgezB9IG9mIHsxfSBpbiB0b3RhbC5cIixcbiAgY2xlYW5DYXB0aW9uOiBcIkNsZWFuXCIsXG4gIGNsZWFyQ2FwdGlvbjogXCJDbGVhclwiLFxuICBzaWduYXR1cmVQbGFjZUhvbGRlcjogXCJTaWduIGhlcmVcIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwiQ2hvb3NlIGZpbGVcIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwiUmVtb3ZlIHRoaXMgZmlsZVwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIlllc1wiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiTm9cIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwiQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdhbnQgdG8gcmVtb3ZlIHRoaXMgZmlsZTogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdhbnQgdG8gcmVtb3ZlIGFsbCBmaWxlcz9cIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIlF1ZXN0aW9uIFRpdGxlXCIsXG4gIG1vZGFsQ2FuY2VsQnV0dG9uVGV4dDogXCJDYW5jZWxcIixcbiAgbW9kYWxBcHBseUJ1dHRvblRleHQ6IFwiQXBwbHlcIixcbn07XG5cbi8vVW5jb21tZW50IHRoZXNlIHR3byBsaW5lcyBvbiBjcmVhdGluZyBhIHRyYW5zbGF0aW9uIGZpbGUuIFlvdSBzaG91bGQgcmVwbGFjZSBcImVuXCIgYW5kIGVuU3RyaW5ncyB3aXRoIHlvdXIgbG9jYWxlIChcImZyXCIsIFwiZGVcIiBhbmQgc28gb24pIGFuZCB5b3VyIHZhcmlhYmxlLlxuLy9zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImVuXCJdID0gZW5nbGlzaFN0cmluZ3M7XG4vL3N1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcImVuXCJdID0gXCJFbmdsaXNoXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIGVzdG9uaWFuU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIlRhZ2FzaVwiLFxuICBwYWdlTmV4dFRleHQ6IFwiRWRhc2lcIixcbiAgY29tcGxldGVUZXh0OiBcIkzDtXBldGFcIixcbiAgcHJldmlld1RleHQ6IFwiRWVsdmFhZGVcIixcbiAgZWRpdFRleHQ6IFwiTXV1ZGFcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIkFsdXN0YVwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIk11dSAodMOkcHN1c3RhKVwiLFxuICBub25lSXRlbVRleHQ6IFwiTWl0dGUgbWlkYWdpXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIlZhbGkga8O1aWtcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIkxlaGVrw7xsZyB7MH0vezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJLaXJqZSB7MH0vezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJWYXN0YXR1ZCB7MH0ga8O8c2ltdXN0IHsxfS1zdFwiLFxuICBlbXB0eVN1cnZleTogXCJTZWxsZXMgdXVyaW5ndXMgZWkgb2xlIMO8aHRraSBuw6RodGF2YXQgbGVoZWvDvGxnZSB2w7VpIGvDvHNpbXVzdC5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCJBaXTDpGgsIGV0IHZhc3Rhc2lkIGFua2VlZGlsZSFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcbiAgICBcIk1laWUgYW5kbWV0ZWwgb2xlZCBzYSBzZWxsZWxlIGFua2VlZGlsZSBqdWJhIHZhc3RhbnVkLlwiLFxuICBsb2FkaW5nU3VydmV5OiBcIkxhZW4gYW5rZWV0aS4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJWYWxpLi4uXCIsXG4gIHZhbHVlOiBcInbDpMOkcnR1c1wiLFxuICByZXF1aXJlZEVycm9yOiBcIlBhbHVuIHZhc3RhIGvDvHNpbXVzZWxlLlwiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJQYWx1biB2YXN0YSB2w6RoZW1hbHQgw7xoZWxlIGvDvHNpbXVzZWxlLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlBhbHVuIGFubmEgdmFzdHVzIGlnYWwgcmVhbC5cIixcbiAgbnVtZXJpY0Vycm9yOiBcIlNlZSBwZWFrcyBvbGVtYSBudW1icmlsaW5lIHbDpMOkcnR1cy5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCJQYWx1biBzaXNlc3RhIHbDpGhlbWFsdCB7MH0gdMOkaGVtw6Rya2kuXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwiUGFsdW4gw6RyYSBzaXNlc3RhIHJvaGtlbSBrdWkgezB9IHTDpGhlbcOkcmtpLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcIlNpc2VzdGEgcGFsdW4gezB9IC0gezF9IHTDpGhlbcOkcmtpLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIlNpc2VzdGEgcGxhdW4gdsOkaGVtYWx0IHswfSByaWRhLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJQYWx1biB2YWxpIHbDpGhlbWFsdCB7MH0gdmFyaWFudGkuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIlBhbHVuIHZhbGkga8O1aWdlIHJvaGtlbSB7MH0gdmFyaWFudGkuXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCInezB9JyBwZWFrcyBvbGVtYSB2w7VyZG5lIHbDtWkgc3V1cmVtIGt1aSB7MX0gamEgdsO1cmRuZSB2w7VpIHbDpGlrc2VtIGt1aSB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCInezB9JyBwZWFrcyBvbGVtYSB2w7VyZG5lIHbDtWkgc3V1cmVtIGt1aSB7MX1cIixcbiAgbnVtZXJpY01heDogXCInezB9JyBwZWFrcyBvbGVtYSB2w7VybmRlIHbDtWkgdsOkaWtzZW0ga3VpIHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwiU2lzZXN0YSBwYWx1biBrb3JyZWt0bmUgZS1wb3N0aSBhYWRyZXNzLlwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCJBdmFsZGlzOiB7MH0gcGVha3MgdGFnYXN0YW1hIHTDtWVzZS5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIlRhb3RsdXMgdGFnYXN0YXMgdmVhIOKAnnswfeKAnS4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcIlRhb3RsdXMgdGFnYXN0YXMgdMO8aGphZCBhbmRtZWQgdsO1aSBhdHJpYnV1dCAncGF0aCcgb24gdmFsZVwiLFxuICBleGNlZWRNYXhTaXplOiBcIkZhaWxpIHN1dXJ1cyBlaSB0b2hpIMO8bGV0YWRhIHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlNpc2VzdGEgcGFsdW4gbXV1IHZhc3R1cy5cIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcIlNpbnUgZmFpbCBsYWViIMO8bGVzLiBQYWx1biBvb3RhIG3DtW5lZCBzZWt1bmRpZCBuaW5nIHByb292aSBzZWVqw6RyZWwgdXVlc3RpLlwiLFxuICBsb2FkaW5nRmlsZTogXCJMYWVuLi4uXCIsXG4gIGNob29zZUZpbGU6IFwiVmFsaSBmYWlsKGlkKS4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwiRmFpbGkgcG9sZSB2YWxpdHVkXCIsXG4gIGNvbmZpcm1EZWxldGU6IFwiS2FzIHRhaGFkIGtpcmplIGt1c3R1dGFkYT9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCJTZWUgdsOkw6RydHVzIHBlYWIgb2xlbWEgdW5pa2FhbG5lLlwiLFxuICBhZGRDb2x1bW46IFwiTGlzYSB2ZWVyZ1wiLFxuICBhZGRSb3c6IFwiTGlzYSByaWRhXCIsXG4gIHJlbW92ZVJvdzogXCJFZW1hbGRhXCIsXG4gIGFkZFBhbmVsOiBcIkxpc2EgdXVzXCIsXG4gIHJlbW92ZVBhbmVsOiBcIkVlbWFsZGFcIixcbiAgY2hvaWNlc19JdGVtOiBcIsO8a3N1c1wiLFxuICBtYXRyaXhfY29sdW1uOiBcIlZlZXJnXCIsXG4gIG1hdHJpeF9yb3c6IFwiUmlkYVwiLFxuICBzYXZpbmdEYXRhOiBcIlNhbHZlc3RhbiBhbmRtZWQgc2VydmVyaXMuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIlRla2tpcyB2aWdhIG5pbmcgbWUgZWkgc2FhbnVkIHZhc3R1c2VpZCBzYWx2ZXN0YWRhLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJWYXN0dXN0ZSBzYWx2ZXN0YW1pbmUgw7VubmVzdHVzIVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwiUHJvb3ZpIHV1ZXN0aVwiLFxuICB0aW1lck1pbjogXCJtaW5cIixcbiAgdGltZXJTZWM6IFwic2VrXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwiT2xlZCB2ZWV0bnVkIHswfSBzZWxsZWwgbGVoZWwgbmluZyBrb2trdSB7MX0uXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIk9sZWQgdmVldG51ZCB7MH0gc2VsbGVsIGxlaGVsLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIk9sZWQgdmVldG51ZCB7MH0ga29ra3UuXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgXCJPbGVkIGt1bHV0YW51ZCB7MH0gdsO1aW1hbGlrdXN0IHsxfSBzZWxsZWwgbGVoZWwgbmluZyB7Mn0gdsO1aW1hbGlrdXN0IHszfSBrb2trdS5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwiT2xlZCBrdWx1dGFudWQgezB9IHbDtWltYWxpa3VzdCB7MX0gc2VsbGVsIGxlaGVsLlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIk9sZWQga3VsdXRhbnVkIHswfSB2w7VpbWFsaWt1c3QgezF9IGtvZ3VhamFzdC5cIixcbiAgY2xlYW5DYXB0aW9uOiBcIlB1aGFzdGFcIixcbiAgY2xlYXJDYXB0aW9uOiBcIlB1aGFzdGFcIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwiVmFsaSBmYWlsXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIkVlbWFsZGEgc2VlIGZhaWxcIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJKYWhcIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIkVpXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIk9sZWQgc2Ega2luZGVsLCBldCBzb292aWQgc2VsbGUgZmFpbGkgZWVtYWxkYWRhOiB7MH0/XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCJPbGVkIHNhIGtpbmRlbCwgZXQgc29vdmlkIGVlbWFsZGFkYSBrw7VpayBmYWlsaWQ/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJLw7xzaW11c2UgcGVhbGtpcmlcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiZXRcIl0gPSBlc3RvbmlhblN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJldFwiXSA9IFwiZWVzdGkga2VlbFwiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBmaW5uaXNoU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIkVkZWxsaW5lblwiLFxuICBwYWdlTmV4dFRleHQ6IFwiU2V1cmFhdmFcIixcbiAgY29tcGxldGVUZXh0OiBcIlZhbG1pc1wiLFxuICBwcmV2aWV3VGV4dDogXCJFc2lrYXRzZWx1XCIsXG4gIGVkaXRUZXh0OiBcIk11b2trYWFcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIkFsb2l0YVwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIk11dSAodGFya2VubmEpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCJFaSBtaXTDpMOkblwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJWYWxpdHNlIGthaWtraVwiLFxuICBwcm9ncmVzc1RleHQ6IFwiU2l2dSB7MH0gLyB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIk9zaW8gezB9IC8gezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJPbGV0IHZhc3Rhbm51dCB7MH0gLyB7MX0ga3lzeW15a3NlZW4uXCIsXG4gIGVtcHR5U3VydmV5OlxuICAgIFwiVMOkc3PDpCBreXNlbHlzc8OkIGVpIG9sZSB5aHTDpMOkbiBuw6RreXZpbGzDpCBvbGV2YWEgc2l2dWEgdGFpIGt5c3lteXN0w6QuXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiS2lpdG9zIGt5c2VseXluIHZhc3RhYW1pc2VzdGEhXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCJUaWV0b2plbW1lIG11a2FhbiBvbGV0IGpvIHN1b3JpdHRhbnV0IHTDpG3DpG4ga3lzZWx5bi5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJLeXNlbHnDpCBsYWRhdGFhbiBwYWx2ZWxpbWVsdGEuLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwiVmFsaXRzZS4uLlwiLFxuICB2YWx1ZTogXCJhcnZvXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwiVmFzdGFhIGt5c3lteWtzZWVuLCBraWl0b3MuXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIlZhc3RhYSBhaW5ha2luIHlodGVlbiBreXN5bXlrc2Vlbi5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJWYXN0YWEga3lzeW15a3NpaW4ga2Fpa2lsbGEgcml2ZWlsbMOkLlwiLFxuICBudW1lcmljRXJyb3I6IFwiQXJ2b24gdHVsZWUgb2xsYSBudW1lZXJpbmVuLlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIlN5w7Z0w6QgdsOkaGludMOkw6RuIHswfSBtZXJra2nDpC5cIixcbiAgdGV4dE1heExlbmd0aDogXCLDhGzDpCBzecO2dMOkIHlsaSB7MH0gbWVya2tpw6QuXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwiU3nDtnTDpCB2w6RoaW50w6TDpG4gezB9IGphIGVuaW50w6TDpG4gezF9IG1lcmtracOkLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIlTDpHl0w6QgdsOkaGludMOkw6RuIHswfSByaXZpw6QuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIlZhbGl0c2UgdsOkaGludMOkw6RuIHswfSB2YWlodG9laHRvYS5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwiVmFsaXRzZSBlbmludMOkw6RuIHswfSB2YWlodG9laHRvYS5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIkx1dnVuICd7MH0nIHR1bGVlIG9sbGEgdsOkaGludMOkw6RuIHsxfSBqYSBrb3JrZWludGFhbiB7Mn0uXCIsXG4gIG51bWVyaWNNaW46IFwiTHV2dW4gJ3swfScgdHVsZWUgb2xsYSB2w6RoaW50w6TDpG4gezF9LlwiLFxuICBudW1lcmljTWF4OiBcIkx1dnVuICd7MH0nIHR1bGVlIG9sbGEga29ya2VpbnRhYW4gezF9LlwiLFxuICBpbnZhbGlkRW1haWw6IFwiU3nDtnTDpCB2YWxpZGkgc8OkaGvDtnBvc3Rpb3NvaXRlLlwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCJMYXVzZWtrZWVuOiB7MH0gcGl0w6Rpc2kgcGFsYXV0dGFhICd0cnVlJy5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIlB5eW50w7YgcGFsYXV0dGkgdmlyaGVlbiB7MH0uIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XG4gICAgXCJQeXludMO2IHBhbGF1dHRpIHR5aGrDpG4gdGllZG9zdG9uIHRhaSAncGF0aCctYXNldHVzIG9uIHbDpMOkcsOkXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwiVGllZG9zdG9uIGtva28gZWkgc2FhIG9sbGEgc3V1cmVtcGkga3VpbiB7MH0uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCJUYXJrZW5uYSB2YXN0YXVzdGFzaSB0ZWtzdGlrZW50dMOkw6RuLlwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwiVGllZG9zdG9hIGzDpGhldGV0w6TDpG4uIE9kb3RhIG11dXRhbWEgc2VrdW50aSBqYSB5cml0w6QgdXVkZWxsZWVuLlwiLFxuICBsb2FkaW5nRmlsZTogXCJMYWRhdGFhbi4uLlwiLFxuICBjaG9vc2VGaWxlOiBcIlZhbGl0c2UgdGllZG9zdG8odCkuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcIkVpIHRpZWRvc3RvYSB2YWxpdHR1bmFcIixcbiAgY29uZmlybURlbGV0ZTogXCJIYWx1YXRrbyBwb2lzdGFhIG9zaW9uP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIlTDpG3DpCBhcnZvIG9uIGpvIGvDpHl0w7Zzc8OkLiBTecO2dMOkIHRvaW5lbiBhcnZvLlwiLFxuICBhZGRDb2x1bW46IFwiTGlzw6TDpCBzYXJha2VcIixcbiAgYWRkUm93OiBcIkxpc8Okw6Qgcml2aVwiLFxuICByZW1vdmVSb3c6IFwiUG9pc3RhXCIsXG4gIGVtcHR5Um93c1RleHQ6IFwiRWkgcml2ZWrDpFwiLFxuICBhZGRQYW5lbDogXCJMaXPDpMOkIHV1c2lcIixcbiAgcmVtb3ZlUGFuZWw6IFwiUG9pc3RhXCIsXG4gIGNob2ljZXNfSXRlbTogXCJrb2hkZVwiLFxuICBtYXRyaXhfY29sdW1uOiBcIlNhcmFrZVwiLFxuICBtYXRyaXhfcm93OiBcIlJpdmlcIixcbiAgc2F2aW5nRGF0YTogXCJUaWV0b2phIHRhbGxlbm5ldGFhbiBwYWx2ZWxpbWVsbGUuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIlRhcGFodHVpIHZpcmhlLCBlbW1la8OkIHZvaW5lZXQgdGFsbGVudGFhIGt5c2VseW4gdGlldG9qYS5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiVGllZG90IHRhbGxlbm5ldHRpaW4gb25uaXN0dW5lZXN0aSFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIllyaXTDpCB1dWRlbGxlZW5cIixcbiAgdGltZXJNaW46IFwibWluXCIsXG4gIHRpbWVyU2VjOiBcInNla1wiLFxuICB0aW1lclNwZW50QWxsOiBcIk9sZXQga8OkeXR0w6RueXQgezB9IHTDpGxsw6Qgc2l2dWxsYSBqYSB5aHRlZW5zw6QgezF9LlwiLFxuICB0aW1lclNwZW50UGFnZTogXCJPbGV0IGvDpHl0dMOkbnl0IHswfSB0w6RsbMOkIHNpdnVsbGEuXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwiT2xldCBrw6R5dHTDpG55dCB5aHRlZW5zw6QgezB9LlwiLFxuICB0aW1lckxpbWl0QWxsOlxuICAgIFwiT2xldCBrw6R5dHTDpG55dCB0w6RsbMOkIHNpdnVsbGEgezB9IC8gezF9IGphIHlodGVlbnPDpCB7Mn0gLyB7M30uXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIk9sZXQga8OkeXR0w6RueXQgezB9IC8gezF9IHTDpGxsw6Qgc2l2dWxsYS5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJPbGV0IGvDpHl0dMOkbnl0IHlodGVlbnPDpCB7MH0gLyB7MX0uXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCJQeXloaVwiLFxuICBjbGVhckNhcHRpb246IFwiVHloamVubsOkXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIlZhbGl0c2UgdGllZG9zdG9cIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwiUG9pc3RhIHTDpG3DpCB0aWVkb3N0b1wiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIkt5bGzDpFwiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiRWlcIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwiSGFsdWF0a28gdmFybWFzdGkgcG9pc3RhYSB0w6Rtw6RuIHRpZWRvc3RvbjogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiSGFsdWF0a28gdmFybWFzdGkgcG9pc3RhYSBrYWlra2kgdGllZG9zdG90P1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiS3lzeW15a3NlbiBvdHNpa2tvXCIsXG4gIG1vZGFsQ2FuY2VsQnV0dG9uVGV4dDogXCJQZXJ1dXRhXCIsXG4gIG1vZGFsQXBwbHlCdXR0b25UZXh0OiBcIkvDpHl0w6RcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiZmlcIl0gPSBmaW5uaXNoU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcImZpXCJdID0gXCJzdW9taVwiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBmcmVuY2hTdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwiUHLDqWPDqWRlbnRcIixcbiAgcGFnZU5leHRUZXh0OiBcIlN1aXZhbnRcIixcbiAgY29tcGxldGVUZXh0OiBcIlRlcm1pbmVyXCIsXG4gIHByZXZpZXdUZXh0OiBcIkFwZXLDp3VcIixcbiAgZWRpdFRleHQ6IFwiTW9kaWZpZXJcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIkNvbW1lbmNlclwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIkF1dHJlIChwcsOpY2lzZXIpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCJBdWN1blwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJUb3V0IHPDqWxlY3Rpb25uZXJcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIlBhZ2UgezB9IHN1ciB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIkVucmVnaXN0cmVtZW50IHswfSBzdXIgezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJ7MH0vezF9IHF1ZXN0aW9uKHMpIHLDqXBvbmR1ZShzKVwiLFxuICBlbXB0eVN1cnZleTogXCJJbCBuJ3kgYSBuaSBwYWdlIHZpc2libGUgbmkgcXVlc3Rpb24gdmlzaWJsZSBkYW5zIGNlIHF1ZXN0aW9ubmFpcmVcIixcbiAgY29tcGxldGluZ1N1cnZleTogXCJNZXJjaSBkJ2F2b2lyIHLDqXBvbmR1IGF1IHF1ZXN0aW9ubmFpcmUgIVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOiBcIk5vcyBkb25uw6llcyBpbmRpcXVlbnQgcXVlIHZvdXMgYXZleiBkw6lqw6AgcmVtcGxpIGNlIHF1ZXN0aW9ubmFpcmUuXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiTGUgcXVlc3Rpb25uYWlyZSBlc3QgZW4gY291cnMgZGUgY2hhcmdlbWVudC4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJDaG9pc2lzc2V6Li4uXCIsXG4gIHZhbHVlOiBcInZhbGV1clwiLFxuICByZXF1aXJlZEVycm9yOiBcIkxhIHLDqXBvbnNlIMOgIGNldHRlIHF1ZXN0aW9uIGVzdCBvYmxpZ2F0b2lyZS5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiTWVyY2kgZGUgcsOpcG9uZHJlIGF1IG1vaW5zIMOgIHVuZSBxdWVzdGlvbi5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJUb3V0ZXMgbGVzIGxpZ25lcyBzb250IG9ibGlnYXRvaXJlc1wiLFxuICBudW1lcmljRXJyb3I6IFwiTGEgcsOpcG9uc2UgZG9pdCDDqnRyZSB1biBub21icmUuXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiTWVyY2kgZGUgc2Fpc2lyIGF1IG1vaW5zIHswfSBjYXJhY3TDqHJlcy5cIixcbiAgdGV4dE1heExlbmd0aDogXCJNZXJjaSBkZSBzYWlzaXIgbW9pbnMgZGUgezB9IGNhcmFjdMOocmVzLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcIk1lcmNpIGRlIHNhaXNpciBlbnRyZSB7MH0gZXQgezF9IGNhcmFjdMOocmVzLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIk1lcmNpIGRlIGNvbXBsw6l0ZXIgYXUgbW9pbnMgezB9IGxpZ25lcy5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwiTWVyY2kgZGUgc8OpbGVjdGlvbm5lciBhdSBtaW5pbXVtIHswfSByw6lwb25zZXMuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIk1lcmNpIGRlIHPDqWxlY3Rpb25uZXIgYXUgbWF4aW11bSB7MH0gcsOpcG9uc2VzLlwiLFxuICBudW1lcmljTWluTWF4OiBcIlZvdHJlIHLDqXBvbnNlICd7MH0nIGRvaXQgw6p0cmUgc3Vww6lyaWV1cmUgb3Ugw6lnYWxlIMOgIHsxfSBldCBpbmbDqXJpZXVyZSBvdSDDqWdhbGUgw6AgezJ9XCIsXG4gIG51bWVyaWNNaW46IFwiVm90cmUgcsOpcG9uc2UgJ3swfScgZG9pdCDDqnRyZSBzdXDDqXJpZXVyZSBvdSDDqWdhbGUgw6AgezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiVm90cmUgcsOpcG9uc2UgJ3swfScgZG9pdCDDqnRyZSBpbmbDqXJpZXVyZSBvdSDDqWdhbGUgw6AgezF9XCIsXG4gIGludmFsaWRFbWFpbDogXCJNZXJjaSBkJ2VudHJlciB1bmUgYWRyZXNzZSBtYWlsIHZhbGlkZS5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiTCdleHByZXNzaW9uOiB7MH0gZG9pdCByZXRvdXJuZXIgJ3RydWUnLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiTGEgcmVxdcOqdGUgYSByZW52b3nDqSB1bmUgZXJyZXVyICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOiBcIkxhIHJlcXXDqnRlIGEgcmVudm95w6kgZGVzIGRvbm7DqWVzIHZpZGVzIG91IGxhIHByb3ByacOpdMOpICdwYXRoJyBlc3QgaW5jb3JyZWN0ZVwiLFxuICBleGNlZWRNYXhTaXplOiBcIkxhIHRhaWxsZSBkdSBmaWNoaWVyIG5lIGRvaXQgcGFzIGV4Y8OpZGVyIHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIk1lcmNpIGRlIHByw6ljaXNlciBsZSBjaGFtcCAnQXV0cmUnLlwiLFxuICB1cGxvYWRpbmdGaWxlOiBcIlZvdHJlIGZpY2hpZXIgZXN0IGVuIGNvdXJzIGRlIGNoYXJnZW1lbnQuIE1lcmNpIGQnYXR0ZW5kcmUgcXVlbHF1ZXMgc2Vjb25kZXMgZXQgZGUgcsOpZXNzYXllci5cIixcbiAgbG9hZGluZ0ZpbGU6IFwiQ2hhcmdlbWVudC4uLlwiLFxuICBjaG9vc2VGaWxlOiBcIkFqb3V0ZXIgZGVzIGZpY2hpZXJzLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCJBdWN1biBmaWNoaWVyIGFqb3V0w6lcIixcbiAgY29uZmlybURlbGV0ZTogXCJWb3VsZXotdm91cyBzdXBwcmltZXIgY2V0IGVucmVnaXN0cmVtZW50ID9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCJDZXR0ZSB2YWxldXIgZG9pdCDDqnRyZSB1bmlxdWUuXCIsXG4gIGFkZENvbHVtbjogXCJBam91dGVyIHVuZSBjb2xvbm5lXCIsXG4gIGFkZFJvdzogXCJBam91dGVyIHVuZSBsaWduZVwiLFxuICByZW1vdmVSb3c6IFwiU3VwcHJpbWVyXCIsXG4gIGFkZFBhbmVsOiBcIkFqb3V0ZXJcIixcbiAgcmVtb3ZlUGFuZWw6IFwiU3VwcHJpbWVyXCIsXG4gIGNob2ljZXNfSXRlbTogXCJpdGVtXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiQ29sb25uZVwiLFxuICBtYXRyaXhfcm93OiBcIkxpZ25lXCIsXG4gIHNhdmluZ0RhdGE6IFwiTGVzIHLDqXN1bHRhdHMgc29udCBlbiBjb3VycyBkZSBzYXV2ZWdhcmRlIHN1ciBsZSBzZXJ2ZXVyLi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCJVbmUgZXJyZXVyIGVzdCBzdXJ2ZW51ZSBldCBhIGVtcMOqY2jDqSBsYSBzYXV2ZWdhcmRlIGRlcyByw6lzdWx0YXRzLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJMZXMgcsOpc3VsdGF0cyBvbnQgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqXMgIVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwiUsOpZXNzYXllclwiLFxuICB0aW1lck1pbjogXCJtaW5cIixcbiAgdGltZXJTZWM6IFwic2VjXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwiVm91cyBhdmV6IHBhc3PDqSB7MH0gc3VyIGNldHRlIHBhZ2UgZXQgezF9IGF1IHRvdGFsLlwiLFxuICB0aW1lclNwZW50UGFnZTogXCJWb3VzIGF2ZXogcGFzc8OpIHswfSBzdXIgY2V0dGUgcGFnZS5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCJWb3VzIGF2ZXogcGFzc8OpIHswfSBhdSB0b3RhbC5cIixcbiAgdGltZXJMaW1pdEFsbDogXCJWb3VzIGF2ZXogcGFzc8OpIHswfSBzdXIgezF9IHN1ciBjZXR0ZSBwYWdlIGV0IHsyfSBzdXIgezN9IGF1IHRvdGFsLlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCJWb3VzIGF2ZXogcGFzc8OpIHswfSBzdXIgezF9IHN1ciBjZXR0ZSBwYWdlLlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIlZvdXMgYXZleiBwYXNzw6kgezB9IHN1ciB7MX0gYXUgdG90YWwuXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCJOZXR0b3llclwiLFxuICBjbGVhckNhcHRpb246IFwiVmlkZXJcIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwiQWpvdXRlciB1biBmaWNoaWVyXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIkVubGV2ZXIgY2UgZmljaGllclwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIk91aVwiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiTm9uXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIsOKdGVzLXZvdXMgY2VydGFpbnMgZGUgdm91bG9pciBzdXBwcmltZXIgY2UgZmljaGllciA6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIsOKdGVzLXZvdXMgY2VydGFpbnMgZGUgdm91bG9pciBzdXBwcmltZXIgdG91cyBsZXMgZmljaGllcnM/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJUaXRyZSBkZSBsYSBxdWVzdGlvblwiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJmclwiXSA9IGZyZW5jaFN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJmclwiXSA9IFwiZnJhbsOnYWlzXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIGdlb3JnaWFuU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIuGDo+GDmeGDkOGDnFwiLFxuICBwYWdlTmV4dFRleHQ6IFwi4YOo4YOU4YOb4YOT4YOU4YOSXCIsXG4gIGNvbXBsZXRlVGV4dDogXCLhg5Phg5Dhg6Hhg6Dhg6Phg5rhg5Thg5Hhg5BcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIuGDkuGDleGDlOGDoOGDk+GDmCB7MH0gLyB7MX1cIixcbiAgZW1wdHlTdXJ2ZXk6IFwi4YOQ4YOg4YOq4YOU4YOg4YOX4YOYIOGDmeGDmOGDl+GDruGDleGDkCDhg5Dhg6Ag4YOQ4YOg4YOY4YOhLlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIuGDkuGDm+GDkOGDk+GDmuGDneGDkeGDlyDhg5nhg5jhg5fhg67hg5Xhg5Dhg6Dhg5jhg6Eg4YOo4YOU4YOV4YOh4YOU4YOR4YOY4YOh4YOX4YOV4YOY4YOhIVwiLFxuICBsb2FkaW5nU3VydmV5OiBcIuGDqeGDkOGDouGDleGDmOGDoOGDl+GDleGDkCDhg6Hhg5Thg6Dhg5Xhg5Thg6Dhg5jhg5Phg5Dhg5wuLi5cIixcbiAgb3RoZXJJdGVtVGV4dDogXCLhg6Hhg67hg5Xhg5AgKOGDkuGDl+GDruGDneGDleGDlyDhg5vhg5jhg6Phg5fhg5jhg5fhg5Thg5cpXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIuGDkOGDoOGDqeGDlOGDleGDkC4uLlwiLFxuICByZXF1aXJlZEVycm9yOiBcIuGDkuGDl+GDruGDneGDleGDlyDhg6Phg57hg5Dhg6Hhg6Phg67hg5Thg5cg4YOZ4YOY4YOX4YOu4YOV4YOQ4YOhLlwiLFxuICBudW1lcmljRXJyb3I6IFwi4YOe4YOQ4YOh4YOj4YOu4YOYIOGDo+GDnOGDk+GDkCDhg5jhg6fhg53hg6Eg4YOg4YOY4YOq4YOu4YOV4YOYLlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIuGDkuGDl+GDruGDneGDleGDlyDhg6jhg5Thg5jhg6fhg5Xhg5Dhg5zhg5Thg5cg4YOQ4YOg4YOQ4YOc4YOQ4YOZ4YOa4YOU4YORIHswfSDhg6Hhg5jhg5vhg5Hhg53hg5rhg50uXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIuGDkuGDl+GDruGDneGDleGDlyDhg5Dhg5jhg6Dhg6nhg5jhg5Thg5cg4YOQ4YOg4YOQ4YOc4YOQ4YOZ4YOa4YOU4YORIHswfSDhg5Xhg5Dhg6Dhg5jhg5Dhg5zhg6Lhg5guXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIuGDkuGDl+GDruGDneGDleGDlyDhg5Dhg5jhg6Dhg6nhg5jhg5Thg5cg4YOQ4YOg4YOQ4YOj4YOb4YOU4YOi4YOU4YOhIHswfSDhg5Xhg5Dhg6Dhg5jhg5Dhg5zhg6Lhg5guXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCInezB9JyDhg6Phg5zhg5Phg5Ag4YOY4YOn4YOd4YOhIOGDm+GDlOGDouGDmCDhg5Dhg5wg4YOi4YOd4YOa4YOYLCDhg5Xhg5jhg5Phg6Dhg5QgezF9LCDhg5Phg5Ag4YOc4YOQ4YOZ4YOa4YOU4YOR4YOYIOGDkOGDnCDhg6Lhg53hg5rhg5gg4YOV4YOY4YOT4YOg4YOUIHsyfVwiLFxuICBudW1lcmljTWluOiBcIid7MH0nIOGDo+GDnOGDk+GDkCDhg5jhg6fhg53hg6Eg4YOb4YOU4YOi4YOYIOGDkOGDnCDhg6Lhg53hg5rhg5gg4YOV4YOY4YOT4YOg4YOUIHsxfVwiLFxuICBudW1lcmljTWF4OiBcIid7MH0nIOGDo+GDnOGDk+GDkCDhg5jhg6fhg53hg6Eg4YOc4YOQ4YOZ4YOa4YOU4YOR4YOYIOGDkOGDnCDhg6Lhg53hg5rhg5gg4YOV4YOY4YOT4YOg4YOUIHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwi4YOS4YOX4YOu4YOd4YOV4YOXIOGDqOGDlOGDmOGDp+GDleGDkOGDnOGDneGDlyDhg5Thg5ouIOGDpOGDneGDoeGDouGDmOGDoSDhg6Dhg5Thg5Dhg5rhg6Phg6Dhg5gg4YOb4YOY4YOh4YOQ4YOb4YOQ4YOg4YOX4YOYLlwiLFxuICBvdGhlclJlcXVpcmVkRXJvcjogXCLhg5Lhg5fhg67hg53hg5Xhg5cg4YOo4YOU4YOQ4YOV4YOh4YOU4YOXIOGDleGDlOGDmuGDmCAn4YOh4YOu4YOV4YOQJ1wiXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImthXCJdID0gZ2VvcmdpYW5TdXJ2ZXlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wia2FcIl0gPSBcIuGDpeGDkOGDoOGDl+GDo+GDmuGDmFwiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBnZXJtYW5TdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwiWnVyw7xja1wiLFxuICBwYWdlTmV4dFRleHQ6IFwiV2VpdGVyXCIsXG4gIGNvbXBsZXRlVGV4dDogXCJBYnNjaGxpZcOfZW5cIixcbiAgcHJldmlld1RleHQ6IFwiVm9yc2NoYXVcIixcbiAgZWRpdFRleHQ6IFwiQmVhcmJlaXRlblwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwiU3RhcnRcIixcbiAgb3RoZXJJdGVtVGV4dDogXCJTb25zdGlnZXMgKEJpdHRlIGFuZ2ViZW4pXCIsXG4gIG5vbmVJdGVtVGV4dDogXCJOaWNodHMgdHJpZmZ0IHp1XCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIkFsbGVzIGF1c3fDpGhsZW5cIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIlNlaXRlIHswfSB2b24gezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJFaW50cmFnIHswfSB2b24gezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJ7MH0vezF9IEZyYWdlbiBiZWFudHdvcnRldFwiLFxuICBlbXB0eVN1cnZleTogXCJFcyBzaW5kIGtlaW5lIEZyYWdlbiB2b3JoYW5kZW4uXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiVmllbGVuIERhbmssIGRhc3MgU2llIGRpZSBVbWZyYWdlIGFiZ2VzY2hsb3NzZW4gaGFiZW4hXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCJXaXIgaGFiZW4gZmVzdGdlc3RlbGx0LCBkYXNzIFNpZSBkaWVzZSBVbWZyYWdlIGJlcmVpdHMgYWJnZXNjaGxvc3NlbiBoYWJlbi5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJVbWZyYWdlIHdpcmQgZ2VsYWRlbi4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJCaXR0ZSBhdXN3w6RobGVuLi4uXCIsXG4gIHZhbHVlOiBcIldlcnRcIixcbiAgcmVxdWlyZWRFcnJvcjogXCJCaXR0ZSBiZWFudHdvcnRlbiBTaWUgZGllc2UgRnJhZ2UuXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIkJpdHRlIGJlYW50d29ydGVuIFNpZSBtaW5kZXN0ZW5zIGVpbmUgRnJhZ2UuXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiQml0dGUgYmVhbnR3b3J0ZW4gU2llIGFsbGUgRnJhZ2VuLlwiLFxuICBudW1lcmljRXJyb3I6IFwiRGVyIFdlcnQgbXVzcyBlaW5lIFphaGwgc2Vpbi5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCJCaXR0ZSBnZWJlbiBTaWUgbWluZGVzdGVucyB7MH0gWmVpY2hlbiBlaW4uXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwiQml0dGUgZ2ViZW4gU2llIG5pY2h0IG1laHIgYWxzIHswfSBaZWljaGVuIGVpbi5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCJCaXR0ZSBnZWJlbiBTaWUgbWluZGVzdGVucyB7MH0gdW5kIG1heGltYWwgezF9IFplaWNoZW4gZWluLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIkJpdHRlIG1hY2hlbiBTaWUgaW4gbWluZGVzdGVucyB7MH0gWmVpbGVuIGVpbmUgRWluZ2FiZS5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwiQml0dGUgd8OkaGxlbiBTaWUgbWluZGVzdGVucyB7MH0gQW50d29ydChlbikgYXVzLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJCaXR0ZSB3w6RobGVuIFNpZSBuaWNodCBtZWhyIGFscyB7MH0gQW50d29ydChlbikgYXVzLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiJ3swfScgbXVzcyBncsO2w59lciBvZGVyIGdsZWljaCB7MX0gdW5kIGtsZWluZXIgb2RlciBnbGVpY2ggezJ9IHNlaW5cIixcbiAgbnVtZXJpY01pbjogXCInezB9JyBtdXNzIGdyw7bDn2VyIG9kZXIgZ2xlaWNoIHsxfSBzZWluXCIsXG4gIG51bWVyaWNNYXg6IFwiJ3swfScgbXVzcyBrbGVpbmVyIG9kZXIgZ2xlaWNoIHsxfSBzZWluXCIsXG4gIGludmFsaWRFbWFpbDogXCJCaXR0ZSBnZWJlbiBTaWUgZWluZSBnw7xsdGlnZSBFLU1haWwtQWRyZXNzZSBlaW4uXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIkRlciBBdXNkcnVjazogezB9IG11c3MgZGVuIFdlcnQgJ3dhaHInIHp1csO8Y2tnZWJlbi5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIkVpbiBOZXR6d2Vya2RpZW5zdCBoYXQgZm9sZ2VuZGVuIEZlaGxlciB6dXLDvGNrZ2VnZWJlbiAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcIkVpbmUgTmV0endlcmtkaWVuc3QgaGF0IHVuZ8O8bHRpZ2UgRGF0ZW4genVyw7xja2dlZ2ViZW5cIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJEaWUgRGF0ZWkgZGFyZiBuaWNodCBncsO2w59lciBhbHMgezB9IHNlaW4uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCJCaXR0ZSBnZWJlbiBTaWUgZWluZW4gV2VydCBhbi5cIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcIkJpdHRlIHdhcnRlbiBTaWUgYmlzIGRlciBVcGxvYWQgSWhyZXIgRGF0ZWllbiBhYmdlc2NobG9zc2VuIGlzdC5cIixcbiAgbG9hZGluZ0ZpbGU6IFwiV2lyZCBob2NoZ2VsYWRlbi4uLlwiLFxuICBjaG9vc2VGaWxlOiBcIkRhdGVpKGVuKSBhdXN3w6RobGVuLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCJLZWluZSBEYXRlaSBhdXNnZXfDpGhsdFwiLFxuICBjb25maXJtRGVsZXRlOiBcIldvbGxlbiBTaWUgZGVuIEVpbnRyYWcgbMO2c2NoZW4/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiRGllc2VyIFdlcnQgbXVzcyBlaW5tYWxpZyBzZWluLlwiLFxuICBhZGRDb2x1bW46IFwiU3BhbHRlIGhpbnp1ZsO8Z2VuXCIsXG4gIGFkZFJvdzogXCJaZWlsZSBoaW56dWbDvGdlblwiLFxuICByZW1vdmVSb3c6IFwiRW50ZmVybmVuXCIsXG4gIGFkZFBhbmVsOiBcIk5ldSBoaW56dWbDvGdlblwiLFxuICByZW1vdmVQYW5lbDogXCJFbnRmZXJuZW5cIixcbiAgY2hvaWNlc19JdGVtOiBcIkVsZW1lbnRcIixcbiAgbWF0cml4X2NvbHVtbjogXCJTcGFsdGVcIixcbiAgbWF0cml4X3JvdzogXCJaZWlsZVwiLFxuICBzYXZpbmdEYXRhOiBcIkRpZSBFcmdlYm5pc3NlIHdlcmRlbiBhdWYgZGVtIFNlcnZlciBnZXNwZWljaGVydC4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwiRXMgaXN0IGVpbiBGZWhsZXIgYXVmZ2V0cmV0ZW4uIERpZSBFcmdlYm5pc3NlIGtvbm50ZW4gbmljaHQgZ2VzcGVpY2hlcnQgd2VyZGVuLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJEaWUgRXJnZWJuaXNzZSB3dXJkZW4gZ2VzcGVpY2hlcnQhXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCJFcm5ldXQgYWJzZW5kZW5cIixcbiAgdGltZXJNaW46IFwiTWluLlwiLFxuICB0aW1lclNlYzogXCJTZWsuXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwiU2llIHdhcmVuIHswfSBhdWYgZGllc2VyIFNlaXRlIHVuZCBicmF1Y2h0ZW4gaW5zZ2VzYW10IHsxfS5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwiU2llIHdhcmVuIHswfSBhdWYgZGllc2VyIFNlaXRlLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIlNpZSBoYWJlbiBpbnNnZXNhbXQgezB9IGdlYnJhdWNodC5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcIlNpZSB3YXJlbiB7MH0gdm9uIHsxfSBhdWYgZGllc2VyIFNlaXRlIHVuZCBicmF1Y2h0ZW4gaW5zZ2VzYW10IHsyfSB2b24gezN9LlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCJTaWUgd2FyZW4gezB9IHZvbiB7MX0gYXVmIGRpZXNlciBTZWl0ZS5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJTaWUgaGFiZW4gaW5zZ2VzYW10IHswfSB2b24gezF9IGdlYnJhdWNodC5cIixcbiAgY2xlYW5DYXB0aW9uOiBcIkFsbGVzIGzDtnNjaGVuXCIsXG4gIGNsZWFyQ2FwdGlvbjogXCJBdXN3YWhsIGVudGZlcm5lblwiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJEYXRlaSBhdXN3w6RobGVuXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIkRhdGVpIGzDtnNjaGVuXCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiSmFcIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIk5laW5cIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwiU2luZCBTaWUgc2ljaGVyLCBkYXNzIFNpZSBkaWVzZSBEYXRlaSBsw7ZzY2hlbiBtw7ZjaHRlbjogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiU2luZCBTaWUgc2ljaGVyLCBkYXNzIFNpZSBhbGxlIERhdGVpZW4gbMO2c2NoZW4gbcO2Y2h0ZW4/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJGcmFnZW50aXRlbFwiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJkZVwiXSA9IGdlcm1hblN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJkZVwiXSA9IFwiZGV1dHNjaFwiO1xuIiwiLy9DcmVhdGVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9hZ2Vsb3NwYW5hZ2lvdGFraXNcbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgZ3JlZWtTdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwizqDPgc6/zrfOs86/z43OvM61zr3Ov1wiLFxuICBwYWdlTmV4dFRleHQ6IFwizpXPgM+MzrzOtc69zr9cIixcbiAgY29tcGxldGVUZXh0OiBcIs6fzrvOv866zrvOrs+Bz4nPg863XCIsXG4gIHByZXZpZXdUZXh0OiBcIs6gz4HOv861z4DOuc+DzrrPjM+AzrfPg863XCIsXG4gIGVkaXRUZXh0OiBcIs6Vz4DOtc6+zrXPgc6zzrHPg86vzrFcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIs6Rz4HPh86uXCIsXG4gIG90aGVySXRlbVRleHQ6IFwizobOu867zr8gKM+AzrHPgc6xzrrOsc67z44gzrTOuc61z4XOus+BzrnOvc6vz4PPhM61KVwiLFxuICBub25lSXRlbVRleHQ6IFwizprOsc69zq3Ovc6xz4JcIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwizpXPgM65zrvOv86zzq4gz4zOu8+Jzr1cIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIs6jzrXOu86vzrTOsSB7MH0gzrHPgM+MIHsxfVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwizpXOs86zz4HOsc+Gzq4gezB9IM6xz4DPjCB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcIs6Rz4DOsc69z4TOrs64zrfOus6xzr0gezB9IC8gezF9IM61z4HPic+Ezq7Pg861zrnPglwiLFxuICBlbXB0eVN1cnZleTpcbiAgICBcIs6UzrXOvSDPhc+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/z4UhXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCLOpM6xIM6xz4HPh861zq/OsSDOvM6xz4IgzrTOtc6vz4fOvc6/z4XOvSDPjM+Ezrkgzq3Ph861z4TOtSDOrs60zrcgzr/Ou86/zrrOu863z4HPjs+DzrXOuSDOsc+Fz4TOrs69IM+EzrfOvSDOrc+BzrXPhc69zrEuXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwizqTOvyDOtc+Bz4nPhM63zrzOsc+Ezr/Ou8+MzrPOuc6/IM+Gzr/Pgc+Ez47Ovc61z4TOsc65IM6xz4DOvyDPhM6/IM60zrnOsc66zr/OvM65z4PPhM6uLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIs6Vz4DOuc67zq3Ovs+EzrUuLi5cIixcbiAgdmFsdWU6IFwizrHOvs6vzrFcIixcbiAgcmVxdWlyZWRFcnJvcjogXCLOoM6xz4HOsc66zrHOu8+OIM6xz4DOsc69z4TOrs+Dz4TOtSDPg8+EzrfOvSDOtc+Bz47PhM63z4POty5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwizpHPgM6xzr3PhM6uz4PPhM61IM+DzrUgz4TOv8+FzrvOrM+HzrnPg8+Ezr/OvSDOvM6vzrEgzrXPgc+Oz4TOt8+DzrcuXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6XG4gICAgXCLOoM6xz4HOsc66zrHOu8+OIM6xz4DOsc69z4TOrs+Dz4TOtSDPg8+EzrnPgiDOtc+Bz4nPhM6uz4POtc65z4Igz4POtSDPjM67zrXPgiDPhM65z4IgzrPPgc6xzrzOvM6tz4IuXCIsXG4gIG51bWVyaWNFcnJvcjogXCLOlyDPhM65zrzOriDPgM+Bzq3PgM61zrkgzr3OsSDOtc6vzr3Osc65IM6xz4HOuc64zrzOt8+EzrnOus6uLlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIs6gzrHPgc6xzrrOsc67z44gz4PPhc68z4DOu863z4HPjs+Dz4TOtSDPhM6/z4XOu86sz4fOuc+Dz4TOv869IHswfSDPg8+NzrzOss6/zrvOsS5cIixcbiAgdGV4dE1heExlbmd0aDogXCLOlc65z4POsc6zzqzOs861z4TOtSDOu865zrPPjM+EzrXPgc6/z4XPgiDOsc+Az4wgezB9IM+HzrHPgc6xzrrPhM6uz4HOtc+CLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcIs6VzrnPg86xzrPOrM6zzrXPhM61IM+AzrXPgc65z4PPg8+Mz4TOtc+Bzr/Phc+CIM6xz4DPjCB7MH0gzrrOsc65IM67zrnOs8+Mz4TOtc+Bzr/Phc+CIM6xz4DPjCB7MX0gz4fOsc+BzrHOus+Ezq7Pgc61z4IuXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwizqDOsc+BzrHOus6xzrvPjiDPg8+FzrzPgM67zrfPgc+Oz4PPhM61IM+Ezr/Phc67zqzPh865z4PPhM6/zr0gezB9IM6zz4HOsc68zrzOrc+CLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCLOoM6xz4HOsc66zrHOu8+OIM61z4DOuc67zq3Ovs+EzrUgz4TOv8+FzrvOrM+HzrnPg8+Ezr/OvSB7MH0gz4DOsc+BzrHOu867zrHOs86tz4IuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIs6gzrHPgc6xzrrOsc67z44gzrXPgM65zrvOrc6+z4TOtSDPjM+Hzrkgz4DOsc+BzrHPgM6szr3PiSDOsc+Azr8gezB9IM+AzrHPgc6xzrvOu86xzrPOrc+CLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwizqTOvyAnezB9JyDOuM6xIM+Az4HOrc+AzrXOuSDOvc6xIM61zq/Ovc6xzrkgzq/Pg86/IM6uIM68zrXOs86xzrvPjc+EzrXPgc6/IM6xz4DOvyDPhM6/IHsxfSDOus6xzrkgzq/Pg86/IM6uIM68zrnOus+Bz4zPhM61z4HOvyDOsc+Azr8gz4TOvyB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCLOpM6/ICd7MH0nIM+Az4HOrc+AzrXOuSDOvc6xIM61zq/Ovc6xzrkgzrzOtc6zzrHOu8+Nz4TOtc+Bzr8gzq4gzrnPg86/IM68zrUgz4TOvyB7MX1cIixcbiAgbnVtZXJpY01heDogXCLOpM6/ICd7MH0nIM+Az4HOrc+AzrXOuSDOvc6xIM61zq/Ovc6xzrkgzrzOuc66z4HPjM+EzrXPgc6/IM6uIM6vz4POvyDOsc+Azr8gz4TOvyB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIs6gzrHPgc6xzrrOsc67z44gzrTPjs+Dz4TOtSDOvM65zrEgzrHPgM6/zrTOtc66z4TOriDOtM65zrXPjc64z4XOvc+DzrcgZS1tYWlsLlwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCLOlyDOrc66z4bPgc6xz4POtzogezB9IM64zrEgz4DPgc6tz4DOtc65IM69zrEgzrXPgM65z4PPhM+Bzq3PiM61zrkgJ3RydWUnLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwizpcgzrHOr8+EzrfPg863IM61z4DOrc+Dz4TPgc61z4jOtSDPg8+GzqzOu868zrEgJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XG4gICAgXCLOlyDOsc6vz4TOt8+DzrcgzrXPgM6tz4PPhM+BzrXPiM61IM66zrXOvc6sIM60zrXOtM6/zrzOrc69zrEgzq4gzrcgzrnOtM65z4zPhM63z4TOsSAnzrzOv869zr/PgM6sz4TOuS9wYXRoJyDOtc6vzr3Osc65IM61z4PPhs6xzrvOvM6tzr3Ot1wiLFxuICBleGNlZWRNYXhTaXplOiBcIs6kzr8gzrzOrc6zzrXOuM6/z4IgzrTOtc69IM68z4DOv8+BzrXOryDOvc6xIM+Fz4DOtc+BzrLOsc6vzr3Otc65IM+EzrEgezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwizqDOsc+BzrHOus6xzrvPjiDPg8+FzrzPgM67zrfPgc+Oz4PPhM61IM+EzrfOvSDPhM65zrzOriDOs865zrEgz4TOvyDPgM61zrTOr86/ICfOrM67zrvOvycuXCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgXCLOpM6/IM6xz4HPh861zq/OvyDPg86xz4IgzrHOvc61zrLOsc6vzr3Otc65LiDOoM6xz4HOsc66zrHOu8+OIM+AzrXPgc65zrzOrc69zrXPhM61IM66zrHPgM6/zrnOsSDOtM61z4XPhM61z4HPjM67zrXPgM+EzrEgzrrOsc65IM60zr/Ous65zrzOrM+Dz4TOtSDOvs6xzr3OrC5cIixcbiAgbG9hZGluZ0ZpbGU6IFwizqbPjM+Bz4TPic+DzrcuLi5cIixcbiAgY2hvb3NlRmlsZTogXCLOlc+AzrnOu86/zrPOriDOsc+Bz4fOtc6vz4nOvSAuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcIs6UzrXOvSDOrc+HzrXOuSDOtc+AzrnOu861zrPOtc6vIM6xz4HPh861zq/Ov1wiLFxuICBjb25maXJtRGVsZXRlOiBcIs6Yzq3Ou861z4TOtSDOvc6xIM60zrnOsc6zz4HOrM+IzrXPhM61IM+EzrfOvSDOtc6zzrPPgc6xz4bOrjtcIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCLOkc+Fz4TOriDOtyDPhM65zrzOriDPgM+Bzq3PgM61zrkgzr3OsSDOtc6vzr3Osc65IM68zr/Ovc6xzrTOuc66zq4uXCIsXG4gIGFkZENvbHVtbjogXCLOoM+Bzr/Pg864zq7Ous63IM+Dz4TOrs67zrfPglwiLFxuICBhZGRSb3c6IFwizqDPgc6/z4POuM6uzrrOtyDOs8+BzrHOvM68zq7PglwiLFxuICByZW1vdmVSb3c6IFwizpHPhs6xzq/Pgc61z4POt1wiLFxuICBhZGRQYW5lbDogXCLOoM+Bzr/Pg864zrXPg861IM69zrXOv1wiLFxuICByZW1vdmVQYW5lbDogXCLOkc+GzrHOuc+Bz45cIixcbiAgY2hvaWNlc19JdGVtOiBcIs61zq/OtM6/z4JcIixcbiAgbWF0cml4X2NvbHVtbjogXCLOo8+Ezq7Ou863XCIsXG4gIG1hdHJpeF9yb3c6IFwizqPOtc65z4HOrFwiLFxuICBzYXZpbmdEYXRhOiBcIs6kzrEgzrHPgM6/z4TOtc67zq3Pg868zrHPhM6xIM6xz4DOv864zrfOus61z43Ov869z4TOsc65IM+Dz4TOv869IM60zrnOsc66zr/OvM65z4PPhM6uIC4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwizqDOsc+Bzr/Phc+DzrnOrM+Dz4TOt866zrUgz4PPhs6szrvOvM6xIM66zrHOuSDOtM61zr0gzq7PhM6xzr0gzrTPhc69zrHPhM6uIM63IM6xz4DOv864zq7Ous61z4XPg863IM+Ez4nOvSDOsc+Azr/PhM61zrvOtc+DzrzOrM+Ez4nOvS5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwizqTOsSDOsc+Azr/PhM61zrvOrc+DzrzOsc+EzrEgzrHPgM6/zrjOt866zrXPjc+EzrfOus6xzr0gzrzOtSDOtc+AzrnPhM+Fz4fOr86xIVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwizqDPgc6/z4PPgM6szrjOt8+DzrUgzr7Osc69zqxcIixcbiAgdGltZXJNaW46IFwizrXOu86sz4dcIixcbiAgdGltZXJTZWM6IFwizrTOtc+Fz4RcIixcbiAgdGltZXJTcGVudEFsbDogXCLOiM+HzrXPhM61IM60zrHPgM6xzr3Ors+DzrXOuSB7MH0gz4POtSDOsc+Fz4TOrs69IM+Ezrcgz4POtc67zq/OtM6xIM66zrHOuSB7MX0gz4PPhc69zr/Ou865zrrOrC5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwizojPh861z4TOtSDOvs6/zrTOrc+IzrXOuSB7MH0gz4POtSDOsc+Fz4TOrs69IM+Ezrcgz4POtc67zq/OtM6xLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIs6Iz4fOtc+EzrUgzr7Ov860zq3PiM61zrkgz4PPhc69zr/Ou865zrrOrCB7MH0uXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgXCLOiM+HzrXPhM61IM60zrHPgM6xzr3Ors+DzrXOuSB7MH0gzrHPgM+MIHsxfSDPg861IM6xz4XPhM6uzr0gz4TOtyDPg861zrvOr860zrEgzrrOsc65IHsyfSDOsc+Az4wgezN9IM+Dz4XOvc6/zrvOuc66zqwuXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIs6Iz4fOtc+EzrUgzr7Ov860zq3PiM61zrkgezB9IM6xz4DPjCB7MX0gz4POtSDOsc+Fz4TOrs69IM+Ezrcgz4POtc67zq/OtM6xLlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIs6Iz4fOtc+EzrUgzr7Ov860zq3PiM61zrkgezB9IM6xz4DPjCB7MX0gz4PPhc69zr/Ou865zrrOrC5cIixcbiAgY2xlYW5DYXB0aW9uOiBcIs6azpHOmM6RzqHOl1wiLFxuICBjbGVhckNhcHRpb246IFwizqPOsc+Gzq5cIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwizpXPgM65zrvOrc6+z4TOtSDPhM6/IM6xz4HPh861zq/Ov1wiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCLOms6xz4TOsc+BzrPOrs+Dz4TOtSDOsc+Fz4TPjCDPhM6/IM6xz4HPh861zq/Ov1wiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIs6dzrHOr1wiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwizp/Ph865XCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIs6Vzq/Pg8+EzrUgzrLOrc6yzrHOuc6/zrkgz4zPhM65IM64zq3Ou861z4TOtSDOvc6xIM66zrHPhM6xz4HOs86uz4POtc+EzrUgzrHPhc+Ez4wgz4TOvyDOsc+Bz4fOtc6vzr86IHswfTtcIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIs6Vzq/Pg8+EzrUgzrLOrc6yzrHOuc6/zrkgz4zPhM65IM64zq3Ou861z4TOtSDOvc6xIM66zrHPhM6xz4HOs86uz4POtc+EzrUgz4zOu86xIM+EzrEgzrHPgc+HzrXOr86xO1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwizqTOr8+EzrvOv8+CIM61z4HPjs+EzrfPg863z4JcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiZ3JcIl0gPSBncmVla1N1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJnclwiXSA9IFwizrXOu867zrfOvc65zrrOrFwiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBoZWJyZXdTdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwi15DXl9eV16jXlFwiLFxuICBwYWdlTmV4dFRleHQ6IFwi16fXk9eZ157XlFwiLFxuICBjb21wbGV0ZVRleHQ6IFwi16HXmdeV151cIixcbiAgcHJldmlld1RleHQ6IFwi16rXpteV15LXlCDXnten15PXmdee15RcIixcbiAgZWRpdFRleHQ6IFwi15zWt9ei1rLXqNeV1rnXmlwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwi15TWt9eq15fWuNec1rjXlFwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIteQ15fXqCAo16DXkCDXnNeq15DXqClcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIteQ16Mg15DXl9eTXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIteR15fXqCDXlNeb15xcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIteT16MgezF9INee16rXldeaIHswfVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwi15TXp9ec15jXlCB7MH0g157XqteV15ogezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCLXoteg15Qg16LXnCDXqdeQ15zXldeqXCIsXG4gIGVtcHR5U3VydmV5OiBcIteQ15nXnyDXqdeQ15zXldeqXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwi16rXldeT15Qg16LXnCDXnteZ15zXldeZINeU16nXkNec15XXnyFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcbiAgICBcIteU16jXqdeV157XldeqINep15zXoNeVINee16jXkNeV16og16nXm9eR16gg16HXmdeZ157XqiDXkNeqINeU16HXp9eoINeU15bXlC5cIixcbiAgbG9hZGluZ1N1cnZleTogXCLXmNei15nXoNeUINee15TXqdeo16ouLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwi15HXl9eoLi4uXCIsXG4gIHZhbHVlOiBcItei16jXmlwiLFxuICByZXF1aXJlZEVycm9yOiBcIteQ16DXkCDXlNep15Eg16LXnCDXlNep15DXnNeUXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIteQ16DXkCDXoteg15Qg15zXpNeX15XXqiDXotecINep15DXnNeUINeQ15fXqi5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCLXkNeg15Ag16LXoNeUINei15wg16nXkNec15XXqiDXkdeb15wg15TXqdeV16jXldeqLlwiLFxuICBudW1lcmljRXJyb3I6IFwi15TXqtep15XXkdeUINem16jXmdeb15Qg15zXlNeZ15XXqiDXnteh16TXqC5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCLXlNeW158g15zXpNeX15XXqiB7MH0g16rXldeV15nXnS5cIixcbiAgdGV4dE1heExlbmd0aDogXCLXlNeW158g16TXl9eV16og154tIHswfSDXqteV15XXmdedLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcIteU15bXnyDXmdeV16rXqCDXni0gezB9INeV16TXl9eV16og154tIHsxfSDXqteV15XXmdedLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIteQ16DXkCDXntec15Ag15zXpNeX15XXqiB7MH0g16nXldeo15XXqi5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwi15HXl9eoINec16TXl9eV16ogezB9INeQ16TXqdeo15XXmdeV16ouXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIteR15fXqCDXoteTIHswfSDXkNek16nXqNeV15nXldeqLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiJ3swfScg15fXmdeZ15Eg15zXlNeZ15XXqiDXqdeV15XXlCDXkNeVINeS15PXldecINeeIHsxfSwg15XXqdeV15XXlCDXnC0gezJ9INeQ15Ug16TXl9eV16og154tIHt9fVwiLFxuICBudW1lcmljTWluOiBcIid7MH0nINeX15nXmdeRINec15TXmdeV16og16nXldeV15Qg15DXlSDXkteT15XXnCDXniB7MX1cIixcbiAgbnVtZXJpY01heDogXCInezB9JyDXl9eZ15nXkSDXnNeU15nXldeqINep15XXldeUINeQ15Ug16fXmNefINeeIHsxfVwiLFxuICBpbnZhbGlkRW1haWw6ICfXlNeW158g15vXqteV15HXqiDXk9eV15BcItecINeX15XXp9eZ16ouJyxcbiAgaW52YWxpZEV4cHJlc3Npb246IFwi15TXkdeZ15jXldeZOiB7MH0g16bXqNeZ15og15zXlNeX15bXmdeoICfXkNee16onLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwi15TXkden16nXlCDXlNeX15bXmdeo15Qg15DXqiDXlNep15LXmdeQ15QgJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XG4gICAgXCLXlNeR16fXqdeUINeU15fXlteZ16jXlCDXoNeq15XXoNeZ150g16jXmden15nXnSDXkNeVINep15TXnteQ16TXmdeZ158gJ9eg16rXmdeRJyDXqdeS15XXmVwiLFxuICBleGNlZWRNYXhTaXplOiBcIteS15XXk9ecINeU16fXldeR16Ug15zXkCDXmdei15zXlCDXotecIHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiAn16DXkCDXnNeU15bXmdefINeg16rXldeg15nXnSDXkdep15PXlCBcIteQ15fXqFwiJyxcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcIteU16fXldeR16Ug16nXnNeaINeg15jXotefLiDXlNee16rXnyDXnteh16TXqCDXqdeg15nXldeqINeV16DXodeUINep15XXkS5cIixcbiAgbG9hZGluZ0ZpbGU6IFwi15jXldei158uLi5cIixcbiAgY2hvb3NlRmlsZTogXCLXnNeR15fXldeoINen15HXpteZ150uLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcItec15Ag16DXkdeX16gg16fXldeR16VcIixcbiAgY29uZmlybURlbGV0ZTogXCLXlNeQ150g15DXqteUINeo15XXpteUINec157Xl9eV16cg15DXqiDXlNeo16nXldee15Q/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwi16LXqNeaINeW15Qg16bXqNeZ15og15zXlNeZ15XXqiDXmdeZ15fXldeT15kuXCIsXG4gIGFkZENvbHVtbjogXCLXlNeV16HXoyDXotee15XXk9eUXCIsXG4gIGFkZFJvdzogXCLXnNeU15XXodeZ16Mg16nXldeo15RcIixcbiAgcmVtb3ZlUm93OiBcItec1rDXlNa316HWtNeZ16hcIixcbiAgYWRkUGFuZWw6IFwi15TXldeh16Mg15fXk9epXCIsXG4gIHJlbW92ZVBhbmVsOiBcItec1rDXlNa316HWtNeZ16hcIixcbiAgY2hvaWNlc19JdGVtOiBcItek16jXmdeYXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwi15jXldeoXCIsXG4gIG1hdHJpeF9yb3c6IFwi16nXgdeV1rzXqNa415RcIixcbiAgc2F2aW5nRGF0YTogXCLXlNeq15XXpteQ15XXqiDXoNep157XqNeV16og15HXqdeo16ogLi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCLXkNeZ16jXoteUINep15LXmdeQ15Qg15XXnNeQINeU16bXnNeX16DXlSDXnNep157XldeoINeQ16og15TXqteV16bXkNeV16ouXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIteU16rXldem15DXldeqINeg16nXnteo15Ug15HXlNem15zXl9eUIVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwi16DXodeUINep15XXkVwiLFxuICB0aW1lck1pbjogXCLXk9en15RcIixcbiAgdGltZXJTZWM6IFwi16nXoNeZ15XXqlwiLFxuICB0aW1lclNwZW50QWxsOiBcIteU15XXpteQ16ogezB9INeR15PXoyDXlteUINeV15HXodeaINeU15vXnCB7MX0uXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIteU15XXpteQ16ogezB9INeR15PXoyDXlteULlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIteU15XXpteQ16og16HXm9eV150g15vXldec15wg16nXnCB7MH0uXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgXCLXlNeV16bXkNeqIHswfSDXnteq15XXmiB7MX0g15HXk9ejINeW15Qg15UtIHsyfSDXnteq15XXmiB7M30g15HXodeaINeU15vXnC5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwi15TXldem15DXqiB7MH0g157XqteV15ogezF9INeR15PXoyDXlteULlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIteU15XXpteQ16og16HXm9eV150g15vXldec15wg16nXnCB7MH0g157XqteV15ogezF9LlwiLFxuICBjbGVhbkNhcHRpb246IFwi15zWsNeg1rfXp9eV1rnXqlwiLFxuICBjbGVhckNhcHRpb246IFwi15HXqNeV16hcIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwi15HXl9eoINen15XXkdelXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIteU16HXqCDXp9eV15HXpSDXlteUXCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwi15vXn1wiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwi15zXkFwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCLXlNeQ150g15DXqteUINeR15jXldeXINep15HXqNem15XXoNeaINec15TXodeZ16gg16fXldeR16Ug15bXlDogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwi15TXkNedINeQ16rXlCDXkdeY15XXlyDXqdeR16jXpteV16DXmiDXnNeU16HXmdeoINeQ16og15vXnCDXlNen15HXpteZ150/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCLXm9eV16rXqNeqINep15DXnNeUXCIsXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImhlXCJdID0gaGVicmV3U3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcImhlXCJdID0gXCLXoteR16jXmdeqXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIGhpbmRpU3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIuCkquCkv+Ckm+CksuCkvlwiLFxuICBwYWdlTmV4dFRleHQ6IFwi4KSF4KSX4KSy4KS+XCIsXG4gIGNvbXBsZXRlVGV4dDogXCLgpKrgpYLgpLDgpL5cIixcbiAgcHJldmlld1RleHQ6IFwi4KSq4KWC4KSw4KWN4KS14KS44KSu4KWA4KSV4KWN4KS34KS+XCIsXG4gIGVkaXRUZXh0OiBcIuCkuOCkguCkquCkvuCkpuCkv+CkpFwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwi4KS24KWB4KSw4KWCXCIsXG4gIG90aGVySXRlbVRleHQ6IFwi4KSm4KWC4KS44KSw4KS+ICjgpLXgpLDgpY3gpKPgpKgg4KSV4KSw4KWH4KSCKVwiLFxuICBub25lSXRlbVRleDogXCLgpJXgpYvgpIgg4KSo4KS54KWA4KSCXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIuCkuOCkreClgCDgpJXgpL4g4KSa4KSv4KSoIOCkleCksOClh+CkglwiLFxuICBwcm9ncmVzc1RleHQ6IFwi4KSq4KWD4KS34KWN4KSgIDEg4KSu4KWH4KSCIOCkuOClhyAwXCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCIg4KSm4KS44KWN4KSk4KS+4KS14KWH4KScIHsxfSDgpJXgpYcgezB9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJ7MX0g4KS44KS14KS+4KSy4KWL4KSCIOCkruClh+CkgiDgpLjgpYcgezB9IOCkleClhyDgpJzgpLXgpL7gpKwg4KSm4KS/4KSPXCIsXG4gIGVtcHR5U3VydmV5OiBcIuCkuOCksOCljeCkteClh+CkleCljeCkt+CkoyDgpK7gpYfgpIIg4KSV4KWL4KSIIOCkpuClg+CktuCljeCkr+CkruCkvuCkqCDgpKrgpYPgpLfgpY3gpKAg4KSv4KS+IOCkquCljeCksOCktuCljeCkqCDgpKjgpLngpYDgpIIg4KS54KWIXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwi4KS44KSw4KWN4KS14KWH4KSV4KWN4KS34KSjIOCkleCliyDgpKrgpYLgpLDgpL4g4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSn4KSo4KWN4KSv4KS14KS+4KSmXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6IFwiIOCkueCkruCkvuCksOClhyDgpLDgpL/gpJXgpYngpLDgpY3gpKEg4KSs4KSk4KS+4KSk4KWHIOCkueCliOCkgiDgpJXgpL8g4KSG4KSqIOCkquCkueCksuClhyDgpLngpYAg4KSH4KS4IOCkuOCksOCljeCkteClh+CkleCljeCkt+CkoyDgpJXgpYsg4KSq4KWC4KSw4KS+IOCkleCksCDgpJrgpYHgpJXgpYcg4KS54KWI4KSCXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwi4KS44KSw4KWN4KS14KWH4KSV4KWN4KS34KSjIOCkluClgeCksiDgpLDgpLngpL4g4KS54KWILuKAplwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCLgpJrgpYHgpKjgpYfgpIJcIixcbiAgdmFsdWU6IFwi4KSu4KWC4KSy4KWN4KSvXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwi4KSV4KWD4KSq4KSv4KS+IOCkquCljeCksOCktuCljeCkqCDgpJXgpL4g4KSJ4KSk4KWN4KSk4KSwIOCkpuClh+CkglwiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCLgpJXgpYPgpKrgpK/gpL4g4KSV4KSuIOCkuOClhyDgpJXgpK4g4KSP4KSVIOCkquCljeCksOCktuCljeCkqCDgpJXgpL4g4KSJ4KSk4KWN4KSk4KSwIOCkpuClh+CkglwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIuCkleClg+CkquCkr+CkviDgpLjgpK3gpYAg4KSq4KSC4KSV4KWN4KSk4KS/4KSv4KWL4KSCIOCkruClh+CkgiDgpLjgpLXgpL7gpLLgpYvgpIIg4KSV4KWHIOCknOCkteCkvuCkrCDgpKbgpYfgpIJcIixcbiAgbnVtZXJpY0Vycm9yOiBcIuCkruClguCksuCljeCkryDgpLjgpILgpJbgpY3gpK/gpL7gpKTgpY3gpK7gpJUg4KS54KWL4KSo4KS+IOCkmuCkvuCkueCkv+Ckj1wiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIuCkleClg+CkquCkr+CkviDgpJXgpK4g4KS44KWHIOCkleCkriB7MH0g4KS14KSw4KWN4KSjIOCkpuCksOCljeCknCDgpJXgpLDgpYfgpIJcIixcbiAgdGV4dE1heExlbmd0aDogXCLgpJXgpYPgpKrgpK/gpL4gezB9IOCkuOClhyDgpJXgpK4g4KS14KSw4KWN4KSjIOCkpuCksOCljeCknCDgpJXgpLDgpYfgpIJcIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCLgpJXgpYPgpKrgpK/gpL4gezB9IOCkuOClhyDgpIXgpKfgpL/gpJUg4KSU4KSwIHsxfSDgpLjgpYcg4KSV4KSuIOCkquCkvuCkpOCljeCksOCli+CkgiDgpK7gpYfgpIIg4KSq4KWN4KSw4KS14KWH4KS2IOCkleCksOClh+CkglwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIuCkleClg+CkquCkr+CkviDgpJXgpK4g4KS44KWHIOCkleCkriB7MH0g4KSq4KSC4KSV4KWN4KSk4KS/4KSv4KWL4KSCIOCkleCliyDgpK3gpLDgpYfgpIJcIixcbiAgbWluU2VsZWN0RXJyb3I6IFwi4KSV4KWD4KSq4KSv4KS+IOCkleCkriDgpLjgpYcg4KSV4KSuIHswfSDgpLXgpL/gpJXgpLLgpY3gpKog4KSV4KS+IOCkmuCkr+CkqCDgpJXgpLDgpYfgpIJcIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwi4KSV4KWD4KSq4KSv4KS+IHswfSDgpLXgpL/gpJXgpLLgpY3gpKrgpYvgpIIg4KS44KWHIOCkheCkp+Ckv+CklSDgpKjgpLngpYDgpIIg4KSa4KWB4KSo4KWH4KSCXCIsXG4gIG51bWVyaWNNaW5NYXg6IFwiJ3swfScgezF9IOCkuOClhyDgpKzgpLDgpL7gpKzgpLAg4KSv4KS+IOCkheCkp+Ckv+CklSDgpJTgpLAgezJ9IOCkuOClhyDgpKzgpLDgpL7gpKzgpLAg4KSv4KS+IOCkleCkriDgpLngpYvgpKjgpL4g4KSa4KS+4KS54KS/4KSPXCIsXG4gIG51bWVyaWNNaW46IFwiJ3swfScgezF9IOCkuOClhyDgpKzgpLDgpL7gpKzgpLAg4KSv4KS+IOCkheCkp+Ckv+CklSDgpLngpYvgpKjgpL4g4KSa4KS+4KS54KS/4KSPXCIsXG4gIG51bWVyaWNNYXg6IFwiJ3swfScgezF9IOCkuOClhyDgpKzgpLDgpL7gpKzgpLAg4KSv4KS+IOCkleCkriDgpLngpYvgpKjgpL4g4KSa4KS+4KS54KS/4KSPXCIsXG4gIGludmFsaWRFbWFpbDogXCLgpJXgpYPgpKrgpK/gpL4g4KSP4KSVIOCkteCliOCkpyDgpIjgpK7gpYfgpLIg4KSq4KSk4KS+IOCkpuCksOCljeCknCDgpJXgpLDgpYfgpIJcIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwi4KSF4KSt4KS/4KS14KWN4KSv4KSV4KWN4KSk4KS/OiB7MH0g4KSV4KWLICcg4KS44KSaICcg4KSy4KWM4KSf4KSo4KS+IOCkmuCkvuCkueCkv+Ckj1wiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwi4KSF4KSo4KWB4KSw4KWL4KSnIOCksuCljOCkn+CkvuCkr+CkviDgpKTgpY3gpLDgpYHgpJ/gpL8gJ3swfScgLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOiBcIuCkheCkqOClgeCksOCli+CkpyDgpKjgpYcg4KSW4KS+4KSy4KWAIOCkoeClh+Ckn+CkviDgpLXgpL7gpKrgpLgg4KSV4KSwIOCkpuCkv+Ckr+CkviDgpLngpYggXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwi4KSr4KS84KS+4KSH4KSyIOCkleCkviDgpIbgpJXgpL7gpLAgezB9IOCkuOClhyDgpIXgpKfgpL/gpJUg4KSo4KS54KWA4KSCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8gIOCkr+CkviDgpKvgpL/gpLAgJ+CkquCkvuCkpScg4KSq4KWN4KSw4KWJ4KSq4KSw4KWN4KSf4KWAIOCkl+CksuCkpCDgpLngpYhcIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIuCkleClg+CkquCkr+CkviDgpKbgpYLgpLjgpLDgpL4g4KSu4KWC4KSy4KWN4KSvIOCkpuCksOCljeCknCDgpJXgpLDgpYfgpIJcIixcbiAgdXBsb2FkaW5nRmlsZTogXCLgpIbgpKrgpJXgpYAg4KSr4KS+4KSH4KSyIOCkheCkquCksuCli+CkoSDgpLngpYsg4KSw4KS54KWAIOCkueCliOClpCDgpJXgpYPgpKrgpK/gpL4g4KSV4KSIIOCkuOClh+CkleCkguCkoSDgpIfgpILgpKTgpJzgpL7gpLAg4KSV4KSw4KWH4KSCIOCklOCksCDgpKvgpL/gpLAg4KS44KWHIOCkquCljeCksOCkr+CkvuCkuCDgpJXgpLDgpYfgpILgpaRcIixcbiAgbG9hZGluZ0ZpbGU6IFwi4KSy4KWL4KSh4KS/4KSC4KSXXCIsXG4gIGNob29zZUZpbGU6IFwi4KSr4KS84KS+4KSH4KSyIOCkmuClgeCkqOClh+CkglwiLFxuICBub0ZpbGVDaG9zZW46IFwi4KSV4KWL4KSIIOCkq+CkvuCkh+CksiDgpKjgpLngpYDgpIIg4KSa4KWB4KSo4KWAIOCkl+CkiFwiLFxuICBjb25maXJtRGVsZXRlOiBcIuCkleCljeCkr+CkviDgpIbgpKog4KSw4KS/4KSV4KWJ4KSw4KWN4KShIOCkueCkn+CkvuCkqOCkviDgpJrgpL7gpLngpKTgpYcg4KS54KWI4KSCXCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwi4KSv4KS5IOCkruCkvuCkqCDgpIXgpKjgpYvgpJbgpL4g4KS54KWL4KSo4KS+IOCkmuCkvuCkueCkv+Ckj1wiLFxuICBhZGRDb2x1bW46IFwi4KSV4KWJ4KSy4KSuIOCknOCli+CkoeCkvOClh+CkglwiLFxuICBhZGRSb3c6IFwi4KSq4KSC4KSV4KWN4KSk4KS/IOCknOCli+CkoeCkvOClh+CkglwiLFxuICByZW1vdmVSb3c6IFwi4KS54KSf4KS+4KSPXCIsXG4gIGFkZFBhbmVsOiBcIuCkqOCkr+CkviDgpJzgpYvgpKHgpLzgpYfgpIJcIixcbiAgcmVtb3ZlUGFuZWw6IFwi4KS54KSf4KS+4KSPXCIsXG4gIGNob2ljZXNfSXRlbTogXCLgpK7gpKZcIixcbiAgbWF0cml4X2NvbHVtbjogXCLgpJXgpYngpLLgpK5cIixcbiAgbWF0cml4X3JvdzogXCLgpKrgpILgpJXgpY3gpKTgpL9cIixcbiAgc2F2aW5nRGF0YTogXCLgpKrgpLDgpL/gpKPgpL7gpK4g4KS44KSw4KWN4KS14KSwIOCkquCksCDgpLjgpYfgpLUg4KS54KWLIOCksOCkueClhyDgpLngpYjgpIJcIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIuCkj+CklSDgpKTgpY3gpLDgpYHgpJ/gpL8g4KS54KWB4KSIIOCklOCksCDgpLngpK4g4KSq4KSw4KS/4KSj4KS+4KSu4KWL4KSCIOCkleCliyDgpKjgpLngpYDgpIIg4KS44KWH4KS1IOCkleCksCDgpLjgpJXgpYdcIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwi4KSq4KSw4KS/4KSj4KS+4KSuIOCkuOCkq+CksuCkpOCkvuCkquClguCksOCljeCkteCklSDgpLjgpYfgpLUg4KS54KWLIOCkl+Ckj1wiLFxuICBzYXZlQWdhaW5CdXR0b246IFwi4KSr4KS/4KSwIOCkleCli+CktuCkv+CktiDgpJXgpLDgpYtcIixcbiAgdGltZXJNaW46IFwi4KSu4KS/4KSo4KSfXCIsXG4gIHRpbWVyU2VjOiBcIuCkuOClh+CkleCkguCkoVwiLFxuICB0aW1lclNwZW50QWxsOiBcIuCkhuCkquCkqOClhyDgpIfgpLgg4KSq4KWD4KS34KWN4KSgIOCkquCksCB7MH0g4KSW4KSw4KWN4KSaIOCkleCkv+CkjyDgpLngpYjgpIIg4KSU4KSwIOCkleClgeCksiB7MX1cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwi4KSG4KSq4KSo4KWHIOCkh+CkuCDgpKrgpYPgpLfgpY3gpKAg4KSq4KSwIHswfSDgpJbgpLDgpY3gpJog4KSV4KS/4KSv4KS+IOCkueCliFwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIuCkhuCkquCkqOClhyDgpJXgpYHgpLIgezB9IOCkluCksOCljeCkmiDgpJXgpL/gpK/gpL4g4KS54KWIXCIsXG4gIHRpbWVyTGltaXRBbGw6IFwi4KSG4KSq4KSo4KWHIOCkh+CkuCDgpKrgpYPgpLfgpY3gpKAg4KSq4KSwIHsxfSDgpJXgpYAgezB9IOCklOCksCDgpJXgpYHgpLIgezN9IOCkleClgCB7Mn0g4KSW4KSw4KWN4KSaIOCkleClgCDgpLngpYjgpaRcIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwi4KSG4KSq4KSo4KWHIOCkh+CkuCDgpKrgpYPgpLfgpY3gpKAg4KSq4KSwIHsxfSDgpJXgpL4gezB9IOCkluCksOCljeCkmiDgpJXgpL/gpK/gpL4g4KS54KWIXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwi4KSG4KSq4KSo4KWHIOCkleClgeCksiB7MX0g4KSV4KWAIHswfSDgpJbgpLDgpY3gpJog4KSV4KWAIOCkueCliFwiLFxuICBjbGVhbkNhcHRpb246IFwi4KS44KS+4KSrXCIsXG4gIGNsZWFyQ2FwdGlvbjogXCLgpLjgpY3gpKrgpLfgpY3gpJ9cIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwi4KSr4KS84KS+4KSH4KSyIOCkmuClgeCkqOClh+CkglwiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCLgpIfgpLgg4KSr4KS+4KSH4KSyIOCkleCliyDgpKjgpL/gpJXgpL7gpLLgpYfgpIJcIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCLgpLngpL7gpIFcIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIuCkqOCkueClgOCkglwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCLgpJXgpY3gpK/gpL4g4KSG4KSqIOCkuOClgeCkqOCkv+CktuCljeCkmuCkv+CkpCDgpLngpYjgpIIg4KSV4KS/IOCkhuCkqiDgpIfgpLgg4KSr4KS84KS+4KSH4KSyIOCkleCliyDgpLngpJ/gpL7gpKjgpL4g4KSa4KS+4KS54KSk4KWHIOCkueCliOCkgjogezB9XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCLgpJXgpY3gpK/gpL4g4KSG4KSqIOCkuOClgeCkqOCkv+CktuCljeCkmuCkv+CkpCDgpLngpYjgpIIg4KSV4KS/IOCkhuCkqiDgpLjgpK3gpYAg4KSr4KS84KS+4KSH4KSy4KWL4KSCIOCkleCliyDgpLngpJ/gpL7gpKjgpL4g4KSa4KS+4KS54KSk4KWHIOCkueCliOCkglwiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwi4KSq4KWN4KSw4KS24KWN4KSoIOCkleCkviDgpLbgpYDgpLDgpY3gpLfgpJVcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiaGlcIl0gPSBoaW5kaVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJoaVwiXSA9IFwiaGluZGlcIjtcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgaHVuZ2FyaWFuU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIlZpc3N6YVwiLFxuICBwYWdlTmV4dFRleHQ6IFwiVG92w6FiYlwiLFxuICBjb21wbGV0ZVRleHQ6IFwiS8Opc3pcIixcbiAgcHJldmlld1RleHQ6IFwiRWzFkW7DqXpldFwiLFxuICBlZGl0VGV4dDogXCJTemVya2VzenTDqXNcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIlJhanRcIixcbiAgb3RoZXJJdGVtVGV4dDogXCJFZ3nDqWIgKGFkamEgbWVnKVwiLFxuICBub25lSXRlbVRleHQ6IFwiRWd5aWsgc2VtXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIk1pbmRldCBraXbDoWxhc3p0XCIsXG4gIHByb2dyZXNzVGV4dDogXCJ7MH0uL3sxfSBvbGRhbFwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiezB9IC8gezF9IHJla29yZFwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiVsOhbGFzem9sdCBrw6lyZMOpc2VrOiB7MH0gLyB7MX1cIixcbiAgZW1wdHlTdXJ2ZXk6IFwiVGhlcmUgaXMgbm8gdmlzaWJsZSBwYWdlIG9yIHF1ZXN0aW9uIGluIHRoZSBzdXJ2ZXkuXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiS8O2c3rDtm5qw7xrLCBob2d5IGtpdMO2bHTDtnR0ZSBmZWxtw6lyw6lzw7xua2V0IVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOiBcIk3DoXIga2l0w7ZsdMO2dHRlIGEgZmVsbcOpcsOpc3QuXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiRmVsbcOpcsOpcyBiZXTDtmx0w6lzZS4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJWw6FsYXNzem9uLi4uXCIsXG4gIHZhbHVlOiBcIsOpcnTDqWtcIixcbiAgcmVxdWlyZWRFcnJvcjogXCJLw6lyasO8aywgdsOhbGFzem9samEgbWVnIGV6dCBhIGvDqXJkw6lzdCFcIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiS8OpcmrDvGssIHbDoWxhc3pvbGpvbiBsZWdhbMOhYmIgZWd5IGvDqXJkw6lzcmUuXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiS8OpcmrDvGsgYWRqb24gdsOhbGFzenQgbWluZGVuIHNvcmJhbiFcIixcbiAgbnVtZXJpY0Vycm9yOiBcIkF6IMOpcnTDqWsgc3rDoW0ga2VsbCwgaG9neSBsZWd5ZW4hXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiQWRqb24gbWVnIGxlZ2Fsw6FiYiB7MH0ga2FyYWt0ZXJ0IVwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIkxlZ2ZlbGplYmIgezB9IGthcmFrdGVydCBhZGpvbiBtZWchXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwiQWRqb24gbWVnIGxlZ2Fsw6FiYiB7MH0sIGRlIGxlZ2ZlbGplYmIgezF9IGthcmFrdGVydCFcIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJUw7ZsdHPDtm4ga2kgbWluaW11bSB7MH0gc29ydCFcIixcbiAgbWluU2VsZWN0RXJyb3I6IFwiVsOhbGFzc3pvbiBraSBsZWdhbMOhYmIgezB9IGxlaGV0xZFzw6lnZXQhXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIk5lIHbDoWxhc3N6b24gdMO2YmJldCwgbWludCB7MH0gbGVoZXTFkXPDqWchXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCInezB9JyBsZWd5ZW4gbmFneW9iYiwgdmFneSBlZ3llbmzFkSwgbWludCB7MX0gw6lzIGtpc2ViYiwgdmFneSBlZ3llbmzFkSwgbWludCB7Mn0hXCIsXG4gIG51bWVyaWNNaW46IFwiJ3swfScgbGVneWVuIGxlZ2Fsw6FiYiB7MX0hXCIsXG4gIG51bWVyaWNNYXg6IFwiVGhlICd7MH0nIG5lIGxlZ3llbiBuYWd5b2JiLCBtaW50IHsxfSFcIixcbiAgaW52YWxpZEVtYWlsOiBcIkFkam9uIG1lZyBlZ3kgdmFsw7NzIGVtYWlsIGPDrW1ldCFcIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiQSBrw7Z2ZXRrZXrFkSBraWZlamV6w6lzOiB7MH0gdmlzc3phIGtlbGwgYWRuaWEgYXog4oCeaWdheuKAnSDDqXJ0w6lrZXQuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCJBIGxla8OpcmRlesOpcyBoaWLDoXZhbCB0w6lydCB2aXNzemE6ICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwiQSBsZWvDqXJkZXrDqXMgw7xyZXMgYWRhdHRhbCB0w6lydCB2aXNzemEsIHZhZ3kgYSAncGF0aCcgcGFyYW3DqXRlciBoZWx5dGVsZW4uXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwiQSBtw6lyZXQgbmVtIGxlaGV0IG5hZ3lvYmIsIG1pbnQgezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiQWRqYSBtZWcgYXogZWd5w6liIMOpcnTDqWtldCFcIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcIkZlbHTDtmx0w6lzIGZvbHlhbWF0YmFuLiBWw6Fyam9uIHDDoXIgbcOhc29kcGVyY2V0LCBtYWpkIHByw7Niw6FsamEgw7pqcmEuXCIsXG4gIGxvYWRpbmdGaWxlOiBcIkJldMO2bHTDqXMuLi5cIixcbiAgY2hvb3NlRmlsZTogXCJGw6FqbG9rIGtpdsOhbGFzenTDoXNhIC4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwiTmluY3Mga2l2w6FsYXN6dHZhIGbDoWpsXCIsXG4gIGNvbmZpcm1EZWxldGU6IFwiVMO2cmxpIGV6dCBhIHJla29yZG90P1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIkF6IMOpcnTDqWtuZWsgZWd5ZWRpbmVrIGtlbGwgbGVubmllLlwiLFxuICBhZGRDb2x1bW46IFwiT3N6bG9wIGhvenrDoWFkw6FzYVwiLFxuICBhZGRSb3c6IFwiU29yIGhvenrDoWFkw6FzYVwiLFxuICByZW1vdmVSb3c6IFwiRWx0w6F2b2zDrXTDoXNcIixcbiAgYWRkUGFuZWw6IFwiw5pqIGhvenrDoWFkw6FzYVwiLFxuICByZW1vdmVQYW5lbDogXCJFbHTDoXZvbMOtdMOhc1wiLFxuICBjaG9pY2VzX0l0ZW06IFwiZWxlbVwiLFxuICBtYXRyaXhfY29sdW1uOiBcIk9zemxvcFwiLFxuICBtYXRyaXhfcm93OiBcIlNvclwiLFxuICBzYXZpbmdEYXRhOiBcIkVyZWRtw6lueSBtZW50w6lzZSBhIHN6ZXJ2ZXJyZS4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwiRWd5IGhpYmEgZm9seXTDoW4gbmVtIHR1ZHR1ayBlbG1lbnRlbmkgYXogZXJlZG3DqW55dC5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiRXJlZG3DqW55IHNpa2VyZXNlbiBtZW50dmUhXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCJQcsOzYsOhbGphIMO6anJhXCIsXG4gIHRpbWVyTWluOiBcIm1pblwiLFxuICB0aW1lclNlYzogXCJzZWNcIixcbiAgdGltZXJTcGVudEFsbDogXCLDlm4gezB9IMO2c3N6ZWdldCBrw7ZsdMO2dHQgZXplbiBheiBvbGRhbG9uLCDDqXMgw7Zzc3plc2VuIHsxfS5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwiezB9IMO2c3N6ZWdldCBrw7ZsdMO2dHQgZXplbiBheiBvbGRhbG9uLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIsOWc3N6ZXNlbiB7MH0ga8O2bHTDtnR0LlwiLFxuICB0aW1lckxpbWl0QWxsOlxuICAgIFwiw5ZuIHswfSAvIHsxfSDDtnNzemVnZXQga8O2bHTDtnR0IGV6ZW4gYXogb2xkYWxvbiwgw6lzIMO2c3N6ZXNlbiB7Mn0gLyB7M30uXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIsOWbiB7MH0gLyB7MX0gw7Zzc3plZ2V0IGvDtmx0w7Z0dCBlemVuIGF6IG9sZGFsb24uXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwiw5Zzc3plc2VuIHswfSAvIHsxfSDDtnNzemVnZXQga8O2bHTDtnR0IGVsLlwiLFxuICBjbGVhbkNhcHRpb246IFwiVGlzenRhXCIsXG4gIGNsZWFyQ2FwdGlvbjogXCJFZ3nDqXJ0ZWxtxbFcIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwiVsOhbGFzc3ogZsOhamx0XCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIlTDoXZvbMOtdHNhIGVsIGV6dCBhIGbDoWpsdFwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIklnZW5cIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIk5lbVwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCJCaXp0b3NhbiBlbHTDoXZvbMOtdGphIGV6dCBhIGbDoWpsdDogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiQml6dG9zYW4gZWwgYWthcmphIHTDoXZvbMOtdGFuaSBheiDDtnNzemVzIGbDoWpsdD9cIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIkvDqXJkw6lzIGPDrW1lXCIsXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImh1XCJdID0gaHVuZ2FyaWFuU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcImh1XCJdID0gXCJtYWd5YXJcIjtcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgaWNlbGFuZGljU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIlRpbGJha2FcIixcbiAgcGFnZU5leHRUZXh0OiBcIsOBZnJhbVwiLFxuICBjb21wbGV0ZVRleHQ6IFwiTG9racOwXCIsXG4gIHByZXZpZXdUZXh0OiBcIkZvcnNrb8OwYVwiLFxuICBlZGl0VGV4dDogXCJCcmV5dGFcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIkJ5cmphw7B1XCIsXG4gIG90aGVySXRlbVRleHQ6IFwiSGlubiAoc2vDvXJpbmcpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCJFbmdpbm5cIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwiVmVsamEgYWxsdFwiLFxuICBwcm9ncmVzc1RleHQ6IFwiU8Otw7BhIHswfSBvZiB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIlRha2EgdXBwIHswfSBhZiB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcIlN2YXJhw7AgezB9IC8gezF9IHNwdXJuaW5ndW1cIixcbiAgZW1wdHlTdXJ2ZXk6IFwiw55hw7AgZXIgZW5naW5uIHPDrcOwYSBlw7BhIHNwdXJuaW5nYXIgw60gw75lc3Nhcmkga8O2bm51bi5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCJUYWtrIGZ5cmlyIGHDsCBmeWxsamEgw7p0IMO+ZXNzYSBrw7ZubnVuIVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgIFwiU2tyw6FyIG9ra2FyIHPDvW5hIGHDsCDDvsO6IGhlZnVyIMO+ZWdhciBsb2tpw7Agw75lc3Nhcmkga8O2bm51bi5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJLw7ZubnVuaW4gZXIgYcOwIGhsYcOwYS4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJWZWxkdS4uLlwiLFxuICB2YWx1ZTogXCJnaWxkaVwiLFxuICByZXF1aXJlZEVycm9yOiBcIlZpbnNhbWxlZ2FzdCBzdmFyacOwIHNwdXJuaW5ndW5uaS5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiVmluc2FtbGVnYXN0IHN2YXJhw7B1IGHDsCBtaW5uc3RhIGtvc3RpIGVpbm5pIHNwdXJuaW5ndS5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJWaW5zYW1sZWdhc3Qgc3ZhcmnDsCBzcHVybmluZ3VtIMOtIMO2bGx1bSByw7bDsHVtLlwiLFxuICBudW1lcmljRXJyb3I6IFwiw55ldHRhIGdpbGRpIHZlcsOwdXIgYcOwIHZlcmEgdGFsYS5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCLDnmHDsCDDpnR0aSBhw7AgdmVyYSBtaW5uc3QgezB9IHTDoWtuLlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIsOeYcOwIMOmdHRpIGHDsCB2ZXJhIG1lc3QgezB9IHTDoWtuLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcIsOeYcOwIMOmdHRpIGHDsCB2ZXJhIGZsZWlyaSBlbiB7MH0gb2cgZsOmcnJpIGVuIHsxfSB0w6Frbi5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJWaW5zYW1sZWdhc3QgZnlsbGnDsCDDunIgYcOwIG1pbm5zdGEga29zdGkgezB9IHJhw7Bpci5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwiVmluc2FtbGVnYXN0IHZlbGppw7AgYcOwIG1pbm5zdGEga29zdGkgezB9IG3Dtmd1bGVpa2EuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIlZpbnNhbWxlZ2FzdCB2ZWxqacOwIGVra2kgZmxlaXJpIGVuIHswfSBtw7ZndWxlaWthLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiJ3swfScgw6Z0dGkgYcOwIHZlcmEgbWVpcmEgZW4gZcOwYSBqYWZudCBvZyB7MX0gbWlubmEgZW4gZcOwYSBqYWZudCBvZyB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCJ7MH0nIMOmdHRpIGHDsCB2ZXJhIG1laXJhIGVuIGXDsGEgamFmbnQgb2cgezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiJ3swfScgw6Z0dGkgYcOwIHZlcmEgbWlubmEgZW4gZcOwYSBqYWZudCBvZyB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIlZpbnNhbWxlZ2FzdCBzbMOhacOwIGlubiBnaWx0IG5ldGZhbmcuXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIlRqw6FuaW5naW46IHswfSDDpnR0aSBhw7Agc2tpbGEgJ3NhdHQnLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiQmVpw7BuaW5uIHNraWxhw7BpIGVmdGlyZmFyYW5hZGkgdmlsbHUgJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwiQmVpw7BuaW5uZyBza2lsYcOwaSBlbmd1bSBnw7ZnbnVtIGXDsGEgc2zDs8OwaW5uIHZhciByw7ZuZ1wiLFxuICBleGNlZWRNYXhTaXplOiBcIlNrcsOhaW5uIHNrYWwgZWtraSB2ZXJhIHN0w6ZycmkgZW4gezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiVmluYW1sZWdhc3QgZnlsbGnDsCDDunQgaGl0dCBnaWxkacOwLlwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwiU2tyw6Fpbm4gw77DrW4gdmFyIHNlbmQuIFZpbnNhbWxlZ2FzdCBiw63DsGnDsCDDrSBub2trcmFyIHNla8O6bmR1ciBvZyByZXluacOwIGFmdHVyLlwiLFxuICBsb2FkaW5nRmlsZTogXCJIbGXDsHVyIC4uLlwiLFxuICBjaG9vc2VGaWxlOiBcIlZlbGR1IHNrcsOhciAuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcIkVuZ2luIHNrcsOhIHZhbGluXCIsXG4gIGNvbmZpcm1EZWxldGU6IFwiVmlsdHUgZXnDsGEgc2tyw6Fubmk/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiw55ldHRhIGdpbGRpIMOmdHRpIGHDsCB2ZXJhIGVpbnN0YWt0LlwiLFxuICBhZGRDb2x1bW46IFwiQsOmdGEgdmnDsCBkw6Fsa2lcIixcbiAgYWRkUm93OiBcIkLDpnRhIHZpw7AgcsO2w7BcIixcbiAgcmVtb3ZlUm93OiBcIkZqYXJsw6ZnamFcIixcbiAgYWRkUGFuZWw6IFwiQsOmdGEgdmnDsCBuw71qdVwiLFxuICByZW1vdmVQYW5lbDogXCJGamFybMOmZ8OwdVwiLFxuICBjaG9pY2VzX0l0ZW06IFwiaGx1dHVyXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiRMOhbGt1clwiLFxuICBtYXRyaXhfcm93OiBcIlLDtsOwXCIsXG5cbiAgc2F2aW5nRGF0YTogXCJOacOwdXJzdMO2w7B1cm5hciBlcnUgYcOwIHNwYXJhIMOhIG5ldMO+asOzbmludW0gLi4uIFwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwiVmlsbGEga29tIHVwcCBvZyB2acOwIGfDoXR1bSBla2tpIHZpc3Rhw7AgbmnDsHVyc3TDtsOwdXJuYXIuXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIsOBcmFuZ3VyaW5uIHZhciB2aXN0YcOwdXIgbWXDsCBnw7PDsHVtIMOhcmFuZ3JpIVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwiUmV5bmR1IGFmdHVyXCIsXG4gIHRpbWVyTWluOiBcIm3DrW5cIixcbiAgdGltZXJTZWM6IFwic2VrXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwiw57DuiBoZWZ1ciBleXR0IHswfSDDoSDDvmVzc2FyaSBzw63DsHUgb2cgezF9IHNhbXRhbHMuXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIsOew7ogaGVmdXIgZXl0dCB7MH0gw6Egw75lc3Nhcmkgc8Otw7B1LlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIsOew7ogaGVmdXIgZXl0dCB7MH0gc2FtdGFscy5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcIsOew7ogaGVmdXIgZXl0dCB7MH0gYWYgezF9IMOhIMO+ZXNzYXJpIHPDrcOwdSBvZyB7Mn0gYWYgezN9IHNhbXRhbHMuXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIsOew7ogaGVmdXIgZXl0dCB7MH0gYWYgezF9IMOhIMO+ZXNzYXJpIHPDrcOwdS5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCLDnsO6IGhlZnVyIGV5dHQgezB9IGFmIHsxfSBzYW10YWxzLlwiLFxuICBjbGVhbkNhcHRpb246IFwiSHJlaW50XCIsXG4gIGNsZWFyQ2FwdGlvbjogXCJIcmVpbnNhXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIlZlbGR1IHNrcsOhXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIkZqYXJsw6Znw7B1IMO+ZXNzYSBza3LDoVwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIkrDoVwiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiTmVpXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIkVydHUgdmlzcyB1bSBhw7Agw77DuiB2aWxqaXIgZmphcmzDpmdqYSDDvmVzc2Egc2tyw6E6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIkVydHUgdmlzcyB1bSBhw7Agw77DuiB2aWxqaXIgZmphcmzDpmdqYSBhbGxhciBza3LDoXI/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJTcHVybmluZ2FydGl0aWxsXCIsXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImlzXCJdID0gaWNlbGFuZGljU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcImlzXCJdID0gXCLDrXNsZW5za2FcIjtcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgaW5kb25lc2lhblN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCJTZWJlbHVtbnlhXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJTZWxhbmp1dG55YVwiLFxuICBjb21wbGV0ZVRleHQ6IFwiU2VsZXNhaVwiLFxuICBwcmV2aWV3VGV4dDogXCJQcmF0aW5qYXVcIixcbiAgZWRpdFRleHQ6IFwiU3VudGluZ1wiLFxuICBzdGFydFN1cnZleVRleHQ6IFwiTXVsYWlcIixcbiAgb3RoZXJJdGVtVGV4dDogXCJMYWlubnlhIChqZWxhc2thbilcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIlRpZGFrIEFkYVwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJQaWxpaCBTZW11YVwiLFxuICBwcm9ncmVzc1RleHQ6IFwiSGFsYW1hbiB7MH0gZGFyaSB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIlJla2FtIHswfSBkYXJpIHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiTWVuamF3YWIgcGVydGFueWFhbiB7MH0gLyB7MX1cIixcbiAgZW1wdHlTdXJ2ZXk6IFwiVGlkYWsgYWRhIGhhbGFtYW4gYXRhdSBwZXJ0YW55YWFuIGRhbGFtIHN1cnZlaS5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCJUZXJpbWEga2FzaWggdGVsYWggbWVueWVsZXNhaWthbiBzdXJ2ZWkhXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCJDYXRhdGFuIGthbWkgbWVudW5qdWtrYW4gYmFod2EgQW5kYSB0ZWxhaCBtZW55ZWxlc2Fpa2FuIHN1cnZlaSBpbmkuXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiTWVtdWF0IHN1cnZlaS4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJQaWxpaC4uLlwiLFxuICB2YWx1ZTogXCJuaWxhaVwiLFxuICByZXF1aXJlZEVycm9yOiBcIlNpbGFoa2FuIGphd2FiIHBlcnRhbnlhYW4gYmVyaWt1dC5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiU2lsYWhrYW4gamF3YWIgc2V0aWRha255YSBzYXR1IHBldGFueWFhbi5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJTaWxhaGthbiBqYXdhYiBwZXJ0YW55YWFuIHBhZGEgc2VtdWEgYmFyaXMuXCIsXG4gIG51bWVyaWNFcnJvcjogXCJOaWxhaSBoYXJ1cyBiZXJ1cGEgYW5na2EuXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiU2lsYWhrYW4gbWFzdWtrYW4gc2V0aWRha255YSB7MH0ga2FyYWt0ZXIuXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwiU2lsYWhrYW4gbWFzdWtrYW4ga3VyYW5nIHswfSBrYXJha3Rlci5cIixcbiAgdGV4dE1pbk1heExlbmd0aDpcbiAgICBcIlBTaWxhaGthbiBtYXN1a2thbiBsZWJpaCBkYXJpIHswfSBkYW4ga3VyYW5nIGRhcmkgezF9IGthcmFrdGVyLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIlNpbGFoa2FuIGlzaSBzZXRpZGFrbnlhIHswfSBiYXJpcy5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwiU2lsYWhrYW4gcGlsaWggc2V0aWRha255YSB7MH0gdmFyaWFuLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJTaWxhaGthbiBwaWxpaCB0aWRhayBsZWJpaCBkYXJpIHswfSB2YXJpYW4uXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCInezB9JyBoYXJ1cyBzYW1hIGRlbmdhbiBhdGF1IGxlYmloIGRhcmkgezF9IGRhbiBoYXJ1cyBzYW1hIGRlbmdhbiBhdGF1IGt1cmFuZyBkYXJpIHsyfVwiLFxuICBudW1lcmljTWluOiBcIid7MH0nIGhhcnVzIHNhbWEgZGVuZ2FuIGF0YXUgbGViaWggZGFyaSB7MX1cIixcbiAgbnVtZXJpY01heDogXCInezB9JyBoYXJ1cyBzYW1hIGRlbmdhbiBhdGF1IGt1cmFuZyBkYXJpIHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwiU2lsYWhrYW4gbWFzdWtrYW4gZS1tYWlsIHlhbmcgYmVuYXIuXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIkVrc3ByZXNpOiB7MH0gaGFydXMgbWVuZ2VtYmFsaWthbiAnYmVuYXInLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiUGVybWludGFhbiBtZW5nZW1iYWxpa2FuIGtlc2FsYWhhbiAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcIlBlcm1pbnRhYW4gbWVuZ2VtYmFsaWthbiBkYXRhIGtvc29uZyBhdGF1IHByb3BlcnRpICdwYXRoJyBzYWxhaC5cIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJVa3VyYW4gYmVya2FzIHRpZGFrIGJvbGVoIG1lbGViaWhpIHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlNpbGFoa2FuIG1hc3Vra2FuIG5pbGFpIGxhaW5ubnlhLlwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwiQmVya2FzIEFuZGEgc2VkYW5nIGRpdW5nZ2FoLiBTaWxhaGthbiB0dW5nZ3UgYmViZXJhcGEgc2FhdCBhdGF1IGNvYmEgbGFnaS5cIixcbiAgbG9hZGluZ0ZpbGU6IFwiTWVtdWF0Li4uXCIsXG4gIGNob29zZUZpbGU6IFwiUGlsaWggYmVya2FzLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCJUaWRhayBhZGEgZmlsZSB5YW5nIGRpcGlsaWhcIixcbiAgY29uZmlybURlbGV0ZTogXCJBcGFrYWggQW5kYSBpbmdpbiBtZW5naGFwdXMgY2F0YXRhbj9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCJOaWxhaSBoYXJ1cyB1bmlrLlwiLFxuICBhZGRDb2x1bW46IFwiVGFtYmFoIGtvbG9tXCIsXG4gIGFkZFJvdzogXCJUYW1iYWggYmFyaXNcIixcbiAgcmVtb3ZlUm93OiBcIkhhcHVzXCIsXG4gIGFkZFBhbmVsOiBcIlRhbWJhaCBiYXJ1XCIsXG4gIHJlbW92ZVBhbmVsOiBcIkhhcHVzXCIsXG4gIGNob2ljZXNfSXRlbTogXCJpdGVtXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiS29sb21cIixcbiAgbWF0cml4X3JvdzogXCJCYXJpc1wiLFxuICBzYXZpbmdEYXRhOiBcIkhhc2lsIHNlZGFuZyBkaXNpbXBhbiBwYWRhIHNlcnZlci4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwiS2VzYWxhaGFuIHRlcmphZGkgZGFuIGthbWkgdGlkYWsgZGFwYXQgbWVueWltcGFuIGhhc2lsLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJIYXNpbCB0ZWxhaCBzdWtzZXMgZGlzaW1wYW4hXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCJDb2JhIGxhZ2lcIixcbiAgdGltZXJNaW46IFwibWVuaXRcIixcbiAgdGltZXJTZWM6IFwiZGV0aWtcIixcbiAgdGltZXJTcGVudEFsbDpcbiAgICBcIkFuZGEgdGVsYWggbWVuZ2hhYmlza2FuIHswfSBwYWRhIGhhbGFtYW4gaW5pIGRhbiB7MX0gc2VjYXJhIGtlc2VsdXJ1aGFuLlwiLFxuICB0aW1lclNwZW50UGFnZTogXCJZQW5kYSB0ZWxhaCBtZW5naGFiaXNrYW4gezB9IHBhZGEgaGFsYW1hbiBpbmkuXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwiQW5kYSB0ZWxhaCBtZW5naGFiaXNrYW4gezB9IHNlY2FyYSBrZXNlbHVydWhhbi5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcIkFuZGEgdGVsYWggbWVuZ2hhYmlza2FuIHswfSBkYXJpIHsxfSBwYWRhIGhhbGFtYW4gaW5pIGRhbiB7Mn0gZGFyaSB7M30gc2VjYXJhIGtlc2VsdXJ1aGFuLlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCJBbmRhIHRlbGFoIG1lbmdoYWJpc2thbiB7MH0gZGFyaSB7MX0gcGFkYSBoYWxhbWFuIGluaS5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJBbmRhIHRlbGFoIG1lbmdoYWJpc2thbiB7MH0gZGFyaSB7MX0gc2VjYXJhIGtlc2VsdXJ1aGFuLlwiLFxuICBjbGVhbkNhcHRpb246IFwiQmVyc2loa2FuXCIsXG4gIGNsZWFyQ2FwdGlvbjogXCJCZXJzaWhrYW5cIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwiUGlsaWggRmlsZVwiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCJIYXB1cyBiZXJrYXMgaW5pXCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiSXlhXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJUaWRha1wiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCJBbmRhIHlha2luIGluZ2luIG1lbmdoYXB1cyBmaWxlIGluaTogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiQW5kYSB5YWtpbiBpbmdpbiBtZW5naGFwdXMgc2VtdWEgZmlsZT9cIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIkp1ZHVsIHBlcnRhbnlhYW5cIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiaWRcIl0gPSBpbmRvbmVzaWFuU3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcImlkXCJdID0gXCJiYWhhc2EgSW5kb25lc2lhXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIGl0YWxpYW5TdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwiUHJlY2VkZW50ZVwiLFxuICBwYWdlTmV4dFRleHQ6IFwiU3VjY2Vzc2l2b1wiLFxuICBjb21wbGV0ZVRleHQ6IFwiU2FsdmFcIixcbiAgcHJldmlld1RleHQ6IFwiQW50ZXByaW1hXCIsXG4gIGVkaXRUZXh0OiBcIk1vZGlmaWNhXCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCJJbml6aW9cIixcbiAgb3RoZXJJdGVtVGV4dDogXCJBbHRybyAoZGVzY3JpdmkpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCJOZXNzdW5vXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIlNlbGV6aW9uYSB0dXR0aVwiLFxuICBwcm9ncmVzc1RleHQ6IFwiUGFnaW5hIHswfSBkaSB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIlJlY29yZCBkaSB7MH0gZGkgezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJSaXNwb3N0ZSBhIHswfS97MX0gZG9tYW5kZVwiLFxuICBlbXB0eVN1cnZleTogXCJOb24gY2kgc29ubyBwYWdpbmUgbyBkb21hbmRlIHZpc2liaWxpIG5lbCBxdWVzdGlvbmFyaW8uXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiR3JhemllIHBlciBhdmVyIGNvbXBsZXRhdG8gaWwgcXVlc3Rpb25hcmlvIVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgIFwiSSBub3N0cmkgcmVjb3JkcyBtb3N0cmFubyBjaGUgaGFpIGdpw6AgY29tcGxldGF0byBxdWVzdG8gcXVlc3Rpb25hcmlvLlwiLFxuICBsb2FkaW5nU3VydmV5OiBcIkNhcmljYW1lbnRvIGRlbCBxdWVzdGlvbmFyaW8gaW4gY29yc28uLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwiU2NlZ2xpLi4uXCIsXG4gIHZhbHVlOiBcInZhbG9yZVwiLFxuICByZXF1aXJlZEVycm9yOiBcIkNhbXBvIG9iYmxpZ2F0b3Jpb1wiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJQZXIgRmF2b3JlLCByaXNwb25kaSBhZCBhbG1lbm8gdW5hIGRvbWFuZGEuXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiQ29tcGxldGFyZSB0dXR0ZSBsZSByaWdoZVwiLFxuICBudW1lcmljRXJyb3I6IFwiSWwgdmFsb3JlIGRldmUgZXNzZXJlIG51bWVyaWNvXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiSW5zZXJpcmUgYWxtZW5vIHswfSBjYXJhdHRlcmlcIixcbiAgdGV4dE1heExlbmd0aDogXCJMdW5naGV6emEgbWFzc2ltYSBjb25zZW50aXRhIHswfSBjYXJhdHRlcmlcIixcbiAgdGV4dE1pbk1heExlbmd0aDpcbiAgICBcIkluc2VyaXJlIHVuYSBzdHJpbmdhIGNvbiBtaW5pbW8gezB9IGUgbWFzc2ltbyB7MX0gY2FyYXR0ZXJpXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwiQ29tcGxldGFyZSBhbG1lbm8gezB9IHJpZ2hlLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJTZWxlemlvbmFyZSBhbG1lbm8gezB9IHZhcmlhbnRpLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJTZWxlemlvbmFyZSBtYXNzaW1vIHswfSB2YXJpYW50aS5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIid7MH0nIGRldmUgZXNzZXJlIHVndWFsZSBvIHN1cGVyaW9yZSBhIHsxfSBlIHVndWFsZSBvIGluZmVyaW9yZSBhIHsyfVwiLFxuICBudW1lcmljTWluOiBcIid7MH0nIGRldmUgZXNzZXJlIHVndWFsZSBvIHN1cGVyaW9yZSBhIHsxfVwiLFxuICBudW1lcmljTWF4OiBcIid7MH0nIGRldmUgZXNzZXJlIHVndWFsZSBvIGluZmVyaW9yZSBhIHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwiSW5zZXJpcmUgaW5kaXJpenpvIG1haWwgdmFsaWRvXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIkwnZXNwcmVzc2lvbmU6IHswfSBkb3ZyZWJiZSB0b3JuYXJlICd2ZXJvJy5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIkxhIHJpY2hpZXN0YSBoYSByaXNwb3N0byBjb24gdW4gZXJyb3JlICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwiTGEgcmljaGllc3RhIGhhIHJpc3Bvc3RvIG51bGwgb3BwdXJlIGlsIHBlcmNvcnNvIG5vbiDDqCBjb3JyZXR0b1wiLFxuICBleGNlZWRNYXhTaXplOiBcIklsIGZpbGUgbm9uIHB1w7IgZWNjZWRlcmUgezB9XCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCJJbnNlcmlyZSBpbCB2YWxvcmUgJ2FsdHJvJ1wiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwiRmlsZSBpbiBjYXJpY2FtZW50by4gQXR0ZW5kaSBhbGN1bmkgc2Vjb25kaSBlIHJpcHJvdmFcIixcbiAgbG9hZGluZ0ZpbGU6IFwiQ2FyaWNhbWVudG8uLi5cIixcbiAgY2hvb3NlRmlsZTogXCJTZWxlemlvbmFyZSBmaWxlKHMpLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCJOZXNzdW4gZmlsZSBzZWxlemlvbmF0b1wiLFxuICBjb25maXJtRGVsZXRlOiBcIlNlaSBzaWN1cm8gZGkgdm9sZXIgZWxtaW5hcmUgaWwgcmVjb3JkP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIlF1ZXN0byB2YWxvcmUgZGV2ZSBlc3NlcmUgdW5pdm9jby5cIixcbiAgYWRkQ29sdW1uOiBcIkFnZ2l1bmdpIGNvbG9ubmFcIixcbiAgYWRkUm93OiBcIkFnZ2l1bmdpIHJpZ2FcIixcbiAgcmVtb3ZlUm93OiBcIlJpbXVvdmkgcmlnYVwiLFxuICBhZGRQYW5lbDogXCJBZ2dpdW5naSByaWdhXCIsXG4gIHJlbW92ZVBhbmVsOiBcIkVsaW1pbmFcIixcbiAgY2hvaWNlc19JdGVtOiBcIkVsZW1lbnRvXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiQ29sb25uYVwiLFxuICBtYXRyaXhfcm93OiBcIlJpZ2FcIixcbiAgc2F2aW5nRGF0YTogXCJTYWx2YXRhZ2dpbyBkYXRpIHN1bCBzZXJ2ZXIuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIlNpIMOoIHZlcmlmaWNhdG8gdW4gZXJyb3JlIGUgbm9uIMOoIHN0YXRvIHBvc3NpYmlsZSBzYWx2YXJlIGkgcmlzdWx0YXRpLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJJIHJpc3VsdGF0aSBzb25vIHN0YXRpIHNhbHZhdGkgY29uIHN1Y2Nlc3NvIVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwiUmlwcm92YVwiLFxuICB0aW1lck1pbjogXCJtaW5cIixcbiAgdGltZXJTZWM6IFwic2VjXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwiSGFpIGltcGllZ2F0byB7MH0gc3UgcXVlc3RhIHBhZ2luYSBlIHsxfSBpbiB0b3RhbGUuXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIkhhaSBpbXBpZWdhdG8gezB9IHN1IHF1ZXN0YSBwYWdpbmEuXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwiSGFpIGltcGllZ2F0byB7MH0gaW4gdG90YWxlLlwiLFxuICB0aW1lckxpbWl0QWxsOlxuICAgIFwiSGFpIGltcGllZ2F0byB7MH0gZGkgezF9IHN1IHF1ZXN0YSBwYWdpbmEgZSB7Mn0gZGkgezN9IGluIHRvdGFsZS5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwiSGFpIGltcGllZ2F0byB7MH0gZGkgezF9IHN1IHF1ZXN0YSBwYWdpbmEuXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwiSGFpIGltcGllZ2F0byB7MH0gZGkgezF9IGluIHRvdGFsZS5cIixcbiAgY2xlYW5DYXB0aW9uOiBcIlB1bGlzY2lcIixcbiAgY2xlYXJDYXB0aW9uOiBcIkNhbmNlbGxhXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIlNjZWdsaWVyZSBpbCBmaWxlXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIlJpbXVvdmVyZSBxdWVzdG8gZmlsZVwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIlPDrFwiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiTm9cIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwiU2VpIHNpY3VybyBkaSB2b2xlciBlbG1pbmFyZSBxdWVzdG8gZmlsZTogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiU2VpIHNpY3VybyBkaSB2b2xlciBlbG1pbmFyZSB0dXR0aSBpIGZpbGVzP1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiVGl0b2xvIGRlbGxhIGRvbWFuZGFcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiaXRcIl0gPSBpdGFsaWFuU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcIml0XCJdID0gXCJpdGFsaWFub1wiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcclxuXHJcbmV4cG9ydCB2YXIgamFwYW5lc2VTdXJ2ZXlTdHJpbmdzID0ge1xyXG4gIHBhZ2VQcmV2VGV4dDogXCLliY3jgbhcIixcclxuICBwYWdlTmV4dFRleHQ6IFwi5qyh44G4XCIsXHJcbiAgY29tcGxldGVUZXh0OiBcIuWujOS6hlwiLFxyXG4gIHByZXZpZXdUZXh0OiBcIuODl+ODrOODk+ODpeODvFwiLFxyXG4gIGVkaXRUZXh0OiBcIue3qOmbhlwiLFxyXG4gIHN0YXJ0U3VydmV5VGV4dDogXCLjgrnjgr/jg7zjg4hcIixcclxuICBvdGhlckl0ZW1UZXh0OiBcIuOBneOBruS7lu+8iOiqrOaYju+8iVwiLFxyXG4gIG5vbmVJdGVtVGV4dDogXCLjgarjgZdcIixcclxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCLjgZnjgbnjgabpgbjmip5cIixcclxuICBwcm9ncmVzc1RleHQ6IFwiezB9L3sxfemggVwiLFxyXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJ7MX3jga57MH3jgpLoqJjpjLLjgZnjgotcIixcclxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiezB9L3sxfeOBruizquWVj+OBq+WbnuetlOOBl+OBvuOBl+OBn+OAglwiLFxyXG4gIGVtcHR5U3VydmV5OiBcIuOBk+OBruiqv+afu+OBq+ihqOekuuOBp+OBjeOCi+ODmuODvOOCuOOChOizquWVj+OBr+OBguOCiuOBvuOBm+OCk1wiLFxyXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwi6Kq/5p+744KS5a6M5LqG44GX44Gm44GP44KM44Gm44GC44KK44GM44Go44GG44GU44GW44GE44G+44GX44GfXCIsXHJcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcclxuICAgIFwi5b2T56S+44Gu6KiY6Yyy44Gr44KI44KL44Go44CB44GT44Gu6Kq/5p+744Gv44GZ44Gn44Gr5a6M5LqG44GX44Gm44GE44G+44GZ44CCXCIsXHJcbiAgbG9hZGluZ1N1cnZleTogXCLoqr/mn7vjgpLjg4Djgqbjg7Pjg63jg7zjg4nkuK1cIixcclxuICBvcHRpb25zQ2FwdGlvbjogXCLpgbjmip5cIixcclxuICB2YWx1ZTogXCLlgKTmiZPjgaFcIixcclxuICByZXF1aXJlZEVycm9yOiBcIuizquWVj+OBq+OBiuetlOOBiOS4i+OBleOBhFwiLFxyXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIuacgOS9juOBp+OCgjHjgaTjga7os6rllY/jgavnrZTjgYjjgabjgY/jgaDjgZXjgYTjgIJcIixcclxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIuizquWVj+OBq+OBr+WFqOWIl+OBp+WbnuetlOOBl+OBpuOBj+OBoOOBleOBhOOAglwiLFxyXG4gIG51bWVyaWNFcnJvcjogXCLmlbDlrZfjgafjgZToqJjlhaXkuIvjgZXjgYRcIixcclxuICB0ZXh0TWluTGVuZ3RoOiBcInswfSDmloflrZfku6XkuIrjgaflhaXlipvjgZfjgabkuIvjgZXjgYRcIixcclxuICB0ZXh0TWF4TGVuZ3RoOiBcInswfeaWh+Wtl+S7peS4i+OBp+WFpeWKm+OBl+OBpuOBj+OBoOOBleOBhOOAglwiLFxyXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwiezB95Lul5LiKezF95pyq5rqA44Gu5paH5a2X44KS5YWl5Yqb44GX44Gm44GP44Gg44GV44GE44CCXCIsXHJcbiAgbWluUm93Q291bnRFcnJvcjogXCJ7MH3ooYzku6XkuIrjgaflhaXlipvjgZfjgabkuIvjgZXjgYRcIixcclxuICBtaW5TZWxlY3RFcnJvcjogXCJ7MH3nqK7poZ7ku6XkuIrjgpLpgbjmip7jgZfjgabkuIvjgZXjgYRcIixcclxuICBtYXhTZWxlY3RFcnJvcjogXCJ7MH3ku6XkuIrjga7jg5Djg6rjgqLjg7Pjg4jjgpLpgbjmip7jgZfjgarjgYTjgafjgY/jgaDjgZXjgYTjgIJcIixcclxuICBudW1lcmljTWluTWF4OlxyXG4gICAgXCJ7MH3jga97MX3ku6XkuIrjgafjgYLjgorjgIF7Mn3ku6XkuIvjgafjgYLjgovjgZPjgajjgYzmnJvjgb7jgZfjgYTjgIJcIixcclxuICBudW1lcmljTWluOiBcIid7MH0nIOOBr+WQjOetieOBi3sxfeOCiOOCiuWkp+OBjeOBj+OBquOBkeOCjOOBsOOBquOCiuOBvuOBm+OCk1wiLFxyXG4gIG51bWVyaWNNYXg6IFwiJ3swfScg44Gv5ZCM562J44GLezF944KI44KK5bCP44GV44GP44Gq44GR44KM44Gw44Gq44KK44G+44Gb44KTXCIsXHJcbiAgaW52YWxpZEVtYWlsOiBcIuacieWKueOBquODoeODvOODq+OCouODieODrOOCueOCkuOBlOiomOWFpeS4i+OBleOBhFwiLFxyXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIuW8j+OBryB7MH3jga8ndHJ1ZSfjgpLov5TjgZnjgbnjgY3jgafjgZnjgIJcIixcclxuICB1cmxSZXF1ZXN0RXJyb3I6IFwi44Oq44Kv44Ko44K544OI44Gv44Ko44Op44O8ICd7MH0nIOOCkui/lOOBl+OBvuOBl+OBn+OAgnsxfVwiLFxyXG4gIHVybEdldENob2ljZXNFcnJvcjpcclxuICAgIFwi44Oq44Kv44Ko44K544OI44GM56m644Gu44OH44O844K/44KS6L+U44GX44Gf44GL44CBJ3BhdGgnIOODl+ODreODkeODhuOCo+OBjOato+OBl+OBj+OBguOCiuOBvuOBm+OCk+OAglwiLFxyXG4gIGV4Y2VlZE1heFNpemU6IFwi44OV44Kh44Kk44Or44Gu44K144Kk44K644GvezB944KS6LaF44GI44Gm44Gv44GE44GR44G+44Gb44KTXCIsXHJcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIuOBneOBruS7luOBruWApOOCkuWFpeWKm+OBl+OBpuOBj+OBoOOBleOBhOOAglwiLFxyXG4gIHVwbG9hZGluZ0ZpbGU6XHJcbiAgICBcIuODleOCoeOCpOODq+OCkuOCouODg+ODl+ODreODvOODieS4reOBp+OBmeOAguOBl+OBsOOCieOBj+OBl+OBpuOBi+OCieWGjeW6puOBiuippuOBl+S4i+OBleOBhFwiLFxyXG4gIGxvYWRpbmdGaWxlOiBcIuiqreOBv+i+vOOBv+S4rVwiLFxyXG4gIGNob29zZUZpbGU6IFwi44OV44Kh44Kk44Or44KS6YG45oqeXCIsXHJcbiAgbm9GaWxlQ2hvc2VuOiBcIumBuOaKnuOBleOCjOOBn+ODleOCoeOCpOODq+OBr+OBguOCiuOBvuOBm+OCk1wiLFxyXG4gIGNvbmZpcm1EZWxldGU6IFwi44Os44Kz44O844OJ44KS5YmK6Zmk44GX44G+44GZ44GL77yfXCIsXHJcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCLjgZPjga7lgKTjga/kuIDmhI/jgafjgarjgZHjgozjgbDjgarjgorjgb7jgZvjgpPjgIJcIixcclxuICBhZGRDb2x1bW46IFwi5YiX44Gu6L+95YqgXCIsXHJcbiAgYWRkUm93OiBcIui/veWKoOihjFwiLFxyXG4gIHJlbW92ZVJvdzogXCLpmaTljrtcIixcclxuICBhZGRQYW5lbDogXCLmlrDopo/ov73liqBcIixcclxuICByZW1vdmVQYW5lbDogXCLpmaTljrtcIixcclxuICBjaG9pY2VzX0l0ZW06IFwi5ZOB55uuXCIsXHJcbiAgbWF0cml4X2NvbHVtbjogXCLjgrPjg6njg6BcIixcclxuICBtYXRyaXhfcm93OiBcIuihjFwiLFxyXG4gIHNhdmluZ0RhdGE6IFwi57WQ5p6c44Gv44K144O844OQ44O844Gr5L+d5a2Y44GV44KM44Gm44GE44G+44GZLi4u44CCXCIsXHJcbiAgc2F2aW5nRGF0YUVycm9yOiBcIuOCqOODqeODvOOBjOeZuueUn+OBl+OAgee1kOaenOOCkuS/neWtmOOBp+OBjeOBvuOBm+OCk+OBp+OBl+OBn+OAglwiLFxyXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIue1kOaenOOBr+eEoeS6i+OBq+S/neWtmOOBleOCjOOBvuOBl+OBn1wiLFxyXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCLjgoLjgYbkuIDluqboqabjgZfjgabjgb/jgabjgY/jgaDjgZXjgYTjgIJcIixcclxuICB0aW1lck1pbjogXCLlg4XlsJFcIixcclxuICB0aW1lclNlYzogXCLjgrvjg4Pjgq9cIixcclxuICB0aW1lclNwZW50QWxsOiBcIuOBguOBquOBn+OBr+OBk+OBruODmuODvOOCuOOBq3swfeOCkuiyu+OChOOBl+OAgeWQiOioiOOBp3sxfeOCkuiyu+OChOOBl+OBvuOBl+OBn+OAglwiLFxyXG4gIHRpbWVyU3BlbnRQYWdlOiBcIuOBguOBquOBn+OBr+OBk+OBruODmuODvOOCuOOBq3swfeOCkuiyu+OChOOBl+OBvuOBl+OBn+OAglwiLFxyXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwi5ZCI6KiI44GnezB944KS5L2/44Gj44Gf44GT44Go44Gr44Gq44KK44G+44GZ44CCXCIsXHJcbiAgdGltZXJMaW1pdEFsbDpcclxuICAgIFwi44GT44Gu44Oa44O844K444GrezF944Gu44GG44GhezB944KS6LK744KE44GX44CBezN944Gu44GG44GhezJ944KS5ZCI6KiI44Gn6LK744KE44GX44G+44GX44Gf44CCXCIsXHJcbiAgdGltZXJMaW1pdFBhZ2U6IFwi44GT44Gu44Oa44O844K444GnezF944GuezB944KS5L2/44Gj44Gf44GT44Go44GM44GC44KK44G+44GZ44CCXCIsXHJcbiAgdGltZXJMaW1pdFN1cnZleTogXCLlkIjoqIjjgad7MX3jga57MH3jgpLkvb/jgaPjgZ/jgZPjgajjgYzjgYLjgorjgb7jgZnjgIJcIixcclxuICBjbGVhbkNhcHRpb246IFwi5YmK6ZmkXCIsXHJcbiAgY2xlYXJDYXB0aW9uOiBcIuepuueZvVwiLFxyXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIuODleOCoeOCpOODq+OCkumBuOaKnlwiLFxyXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIuOBk+OBruODleOCoeOCpOODq+OCkuWJiumZpFwiLFxyXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwi5ZmrXCIsXHJcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIuWQplwiLFxyXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIuOBk+OBruODleOCoeOCpOODq+OCkuWJiumZpOOBl+OBpuOCguOCiOOCjeOBl+OBhOOBp+OBmeOBi++8n3swfT9cIixcclxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwi44GZ44G544Gm44Gu44OV44Kh44Kk44Or44KS5YmK6Zmk44GX44Gm44KC44KI44KN44GX44GE44Gn44GZ44GL77yfXCIsXHJcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIuizquWVj+WQjVwiLFxyXG59O1xyXG5cclxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJqYVwiXSA9IGphcGFuZXNlU3VydmV5U3RyaW5ncztcclxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wiamFcIl0gPSBcIuaXpeacrOiqnlwiO1xyXG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIGthemFraFN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCLQkNGA0YLSm9CwXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCLQmtC10LvQtdGB0ZZcIixcbiAgY29tcGxldGVUZXh0OiBcItCU0LDQudGL0L1cIixcbiAgcHJldmlld1RleHQ6IFwi0JDQu9C00YvQvSDQsNC70LAg0pvQsNGA0LDRg1wiLFxuICBlZGl0VGV4dDogXCLQoNC10LTQsNC60YbQuNGP0LvQsNGDXCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCLQkdCw0YHRgtCw0YNcIixcbiAgb3RoZXJJdGVtVGV4dDogXCLQkdCw0YHSm9CwICjTqdGC0ZbQvdC10LzRltC3LCDQttCw0LfRi9Kj0YvQtylcIixcbiAgbm9uZUl0ZW1UZXh0OiBcItCW0L7Sm1wiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCLQkdCw0YDQu9GL0pPRi9C9INGC0LDSo9C00LDRg1wiLFxuICBwcm9ncmVzc1RleHQ6IFwiezB9INC00LXQvSB7MX0g0LHQtdGCIFwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiezB9INC00LXQvSB7MX0g0LbQsNC30LHQsFwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiezB9L3sxfSDRgdKx0YDQsNKb0YLQsNGA0pPQsCDQttCw0YPQsNC/XCIsXG4gIGVtcHR5U3VydmV5OiBcItCR0ZbRgCDQtNC1INCx0ZbRgCDRgdKx0YDQsNKbINC20L7Smy5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCLQodCw0YPQsNC70L3QsNC80LDQvdGLINGC0L7Qu9GC0YvRgNKT0LDQvdGL0qPRi9C3INKv0YjRltC9INGA0LDRhdC80LXRgiFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTogXCLQodGW0Lcg0LHSsdC7INGB0LDRg9Cw0LvQvdCw0LzQsNC90Ysg06nRgtGW0L8g0pvQvtC50LTRi9Kj0YvQty5cIixcbiAgbG9hZGluZ1N1cnZleTogXCLQodC10YDQstC10YDQtNC10L0g0LbSr9C60YLQtdGDLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcItCi0LDSo9C00LDRgy4uLlwiLFxuICB2YWx1ZTogXCLQvNOZ0L3RllwiLFxuICByZXF1aXJlZEVycm9yOiBcItOo0YLRltC90LXQvNGW0LcsINGB0rHRgNCw0pvSm9CwINC20LDRg9Cw0L8g0LHQtdGA0ZbSo9GW0LcuXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcItOo0YLRltC90LXQvNGW0LcsINC60LXQvCDQtNC10LPQtdC90LTQtSDQsdGW0YAg0YHSsdGA0LDSm9Kb0LAg0LbQsNGD0LDQvyDQsdC10YDRltKj0ZbQty5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCLTqNGC0ZbQvdC10LzRltC3LCDTmdGA0LHRltGAINC20L7Qu9C00YvSoyDRgdKx0YDQsNKT0LDQvdGLINC20LDRg9Cw0L8g0LHQtdGA0ZbSo9GW0LcuXCIsXG4gIG51bWVyaWNFcnJvcjogXCLQltCw0YPQsNC/INGB0LDQvSDRgtKv0YDRltC90LTQtSDQsdC+0LvRg9GLINC60LXRgNC10LouXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwi06jRgtGW0L3QtdC80ZbQtywgezB9INC00LXQvSDQutOp0L8g0YLQsNKj0LHQsCDQtdC90LPRltC30ZbSo9GW0LcuXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwi06jRgtGW0L3QtdC80ZbQtywgezB9INC00LXQvSDQsNC3INGC0LDSo9Cx0LAg0LXQvdCz0ZbQt9GW0qPRltC3LlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcItOo0YLRltC90LXQvNGW0LcsIHswfSDQsNC3INC205nQvdC1IHsxfSDQutOp0L8g0YLQsNKj0LHQsCDQtdC90LPRltC30ZbSo9GW0LcuXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwi06jRgtGW0L3QtdC80ZbQtywgezB9INC00LXQvSDQutC10Lwg0LXQvNC10YEg0LbQvtC7INGC0L7Qu9GC0YvRgNGL0qPRi9C3LlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCLTqNGC0ZbQvdC10LzRltC3LCDRgtGL0Lwg0LHQvtC70LzQsNGB0LAgezB9INC90rHRgdKb0LAg0YLQsNKj0LTQsNKj0YvQty5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwi06jRgtGW0L3QtdC80ZbQtywgezB9INC90rHRgdKb0LDQtNCw0L0g0LrTqdC/INGC0LDSo9C00LDQvNCw0qPRi9C3LlwiLFxuICBudW1lcmljTWluTWF4OiAgIFwiJ3swfScgezF9INC00LXQvSDQutC10Lwg0LXQvNC10YEg0LbTmdC90LUgezJ9INC00LXQvSDQutOp0L8g0LXQvNC10YEg0LHQvtC70YMg0LrQtdGA0LXQulwiLFxuICBudW1lcmljTWluOiBcIid7MH0nIHsxfSDQtNC10L0g0LrQtdC8INC10LzQtdGBINCx0L7Qu9GDINC60LXRgNC10LpcIixcbiAgbnVtZXJpY01heDogXCInezB9JyB7MX0g0LTQtdC9INC606nQvyDQtdC80LXRgSDQsdC+0LvRgyDQutC10YDQtdC6XCIsXG4gIGludmFsaWRFbWFpbDogXCLTqNGC0ZbQvdC10LzRltC3LCDQttCw0YDQsNC80LTRiyDRjdC70LXQutGC0YDQvtC90LTRi9KbINC/0L7RiNGC0LDSo9GL0LfQtNGLINC10L3Qs9GW0LfRltKj0ZbQty5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiezB9INOp0YDQvdC10LPRliAgJ3RydWUnINKb0LDQudGC0LDRgNGDINC60LXRgNC10LouXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCLQodKx0YDQsNGC0YvQvCDSm9Cw0YLQtdC70ZbQutGC0ZYg0pvQsNC50YLQsNGA0LTRiyd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOiAgXCLQodKx0YDQsNGC0YvQvNKT0LAg0LbQsNGD0LDQvyDQsdC+0YEg0LrQtdC70LTRliDQvdC10LzQtdGB0LUgJ3BhdGgnINKb0LDRgdC40LXRgtGWINKb0LDRgtC1INC606nRgNGB0LXRgtGW0LvQs9C10L0gXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwi0KTQsNC50LvQtNGL0qMg0LzTqdC70YjQtdGA0ZYgezB9INCw0YHQv9Cw0YMg0LrQtdGA0LXQui5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcItOo0YLRltC90LXQvNGW0LcsIOKAnNCR0LDRgdKb0LDigJ0g0LbQvtC70YvQvdCwINC00LXRgNC10LrRgtGWINC10L3Qs9GW0LfRltKj0ZbQt1wiLFxuICB1cGxvYWRpbmdGaWxlOiAgXCLQodGW0LfQtNGW0qMg0YTQsNC50LvRi9Kj0YvQtyDQttKv0LrRgtC10LvRltC/INC20LDRgtGL0YAuINCR0ZbRgNC90LXRiNC1INGB0LXQutGD0L3QtCDRgtC+0YHRi9C/LCDSm9Cw0LnRgtCw0LTQsNC9INCx0LDQudKb0LDQvyDQutOp0YDRltKj0ZbQty5cIixcbiAgbG9hZGluZ0ZpbGU6IFwi0JbSr9C60YLQtdGDLi4uXCIsXG4gIGNob29zZUZpbGU6IFwi0KTQsNC50LvQtNCw0YDQtNGLINGC0LDSo9C00LDSo9GL0LcuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcItCk0LDQudC7INGC0LDSo9C00LDQu9GL0L3QsdCw0LTRi1wiLFxuICBjb25maXJtRGVsZXRlOiBcItCh0ZbQtyDQttCw0LfQsdCw0L3RiyDQttC+0Y/RgtGL0L3Ri9Kj0YvQt9KT0LAg0YHQtdC90ZbQvNC00ZbRgdGW0Lcg0LHQtT9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCLQkdKx0Lsg0LzTmdC9INCx0ZbRgNC10LPQtdC5INCx0L7Qu9GDINC60LXRgNC10LouXCIsXG4gIGFkZENvbHVtbjogXCLQkdCw0pPQsNC90LAg0pvQvtGB0YNcIixcbiAgYWRkUm93OiBcItCW0L7Qu9C00Ysg0pvQvtGB0YNcIixcbiAgcmVtb3ZlUm93OiBcItOo0YjRltGA0YNcIixcbiAgYWRkUGFuZWw6IFwi0JbQsNKj0LAg0pvQvtGB0YNcIixcbiAgcmVtb3ZlUGFuZWw6IFwi06jRiNGW0YDRg1wiLFxuICBjaG9pY2VzX0l0ZW06IFwi0J3SsdGB0pvQsFwiLFxuICBtYXRyaXhfY29sdW1uOiBcItCR0LDSk9Cw0L3QsFwiLFxuICBtYXRyaXhfcm93OiBcItCW0L7Qu1wiLFxuICBzYXZpbmdEYXRhOiBcItCd05nRgtC40LbQtdC70LXRgCDRgdC10YDQstC10YDQtNC1INGB0LDSm9GC0LDQu9Cw0LTRiy4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwi0prQsNGC0LXQu9GW0Log0YLRg9GL0L3QtNCw0LTRiywg0L3TmdGC0LjQttC1INGB0LDSm9GC0LDQu9GL0L3QsdCw0LTRiy5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwi0J3TmdGC0LjQttC1INC+0LnQtNCw0pPRi9C00LDQuSDRgdCw0pvRgtCw0LvQtNGLIVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwi0prQsNC50YLQsNC00LDQvSDQsdCw0LnSm9Cw0L8g0LrTqdGA0YNcIixcbiAgdGltZXJNaW46IFwi0LzQuNC9XCIsXG4gIHRpbWVyU2VjOiBcItGB0LXQulwiLFxuICB0aW1lclNwZW50QWxsOiBcItCh0ZbQtyDQsdKx0Lsg0LHQtdGC0YLQtSB7MH0g0LrQtdGC0ZbRgNC00ZbSo9GW0Lcg0LbTmdC90LUg0LHQsNGA0LvRi9KT0YsgezF9LlwiLFxuICB0aW1lclNwZW50UGFnZTogXCLQodGW0Lcg0LHSsdC7INCx0LXRgtGC0LUgezB9INC60LXRgtGW0YDQtNGW0qPRltC3LlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcItCh0ZbQtyDRgdCw0YPQsNC70L3QsNC80LAg0LrQtdC30ZbQvdC00LUgezB9INC60LXRgtGW0YDQtNGW0qPRltC3LlwiLFxuICB0aW1lckxpbWl0QWxsOiBcItCh0ZbQtyDQsdKx0Lsg0LHQtdGC0YLQtSB7MH0g0LTQtdC9IHsxfSDQutC10YLRltGA0LTRltKj0ZbQtyDQttOZ0L3QtSB7Mn0g0LTQtdC9IHszfSDQsdKv0LrRltC7INGB0LDRg9Cw0LvQvdCw0LzQsCDSr9GI0ZbQvS5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwi0KHRltC3INCx0rHQuyDQsdC10YLRgtC1IHswfSDQtNC10L0gezF9INC60LXRgtGW0YDQtNGW0qPRltC3LlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcItCh0ZbQtyDQsdKv0LrRltC7INGB0LDRg9Cw0LvQvdCw0LzQsCDSr9GI0ZbQvSB7MH0g0LTQtdC9IHsxfSDQutC10YLRltGA0LTRltKj0ZbQtyBcIixcbiAgY2xlYW5DYXB0aW9uOiBcItCi0LDQt9Cw0LvQsNGDXCIsXG4gIGNsZWFyQ2FwdGlvbjogXCLQotCw0LfQsNC70LDRg1wiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCLQpNCw0LnQuyDRgtCw0qPQtNCw0qPRi9C3XCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcItCk0LDQudC70LTRiyDQttC+0LnRi9Kj0YvQt1wiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcItCY05lcIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcItCW0L7Sm1wiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCLQodGW0Lcg0LHSsdC7INGE0LDQudC70LTRiyDQttC+0Y/RgtGL0L3Ri9Kj0YvQt9KT0LAg0YHQtdC90ZbQvNC00ZbRgdGW0Lcg0LHQtTogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwi0KHRltC3INCx0LDRgNC70YvSmyDRhNCw0LnQu9C00LDRgNC00Ysg0LbQvtGP0YLRi9C90YvSo9GL0LfSk9CwINGB0LXQvdGW0LzQtNGW0YHRltC3INCx0LU/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCLQodKx0YDQsNKb0YLRi9KjINCw0YLQsNGD0YtcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wia2tcIl0gPSBrYXpha2hTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wia2tcIl0gPSBcIkthemFraFwiOyIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIga29yZWFuU3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIuydtOyghFwiLFxuICBwYWdlTmV4dFRleHQ6IFwi64uk7J2MXCIsXG4gIGNvbXBsZXRlVGV4dDogXCLsmYTro4xcIixcbiAgcHJldmlld1RleHQ6IFwi7Iuc7IKsXCIsXG4gIGVkaXRUZXh0OiBcIu2OuOynke2VmOuLpFwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwi7Iuc7J6RXCIsXG4gIG90aGVySXRlbVRleHQ6IFwi6riw7YOAKOyEpOuqhSlcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIuyXhuydjFwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCLrqqjrkZAg7ISg7YOdXCIsXG4gIHByb2dyZXNzVGV4dDogXCLtjpjsnbTsp4AgezF9IOykkSB7MH1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcInswfSAvIHsxfSDquLDroZ1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcInswfSAvIHsxfSDqsJzsnZgg7KeI66y47JeQIOuLteuzgCDtlahcIixcbiAgZW1wdHlTdXJ2ZXk6IFwi7ISk66y47KeA7JeQIOuztOyXrOyngOuKlCDtjpjsnbTsp4Drgpgg7KeI66y47J20IOyXhuyKteuLiOuLpFwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIuyEpOusuCDsobDsgqzrpbwg7JmE66OM7ZW0IOyjvOyFlOyEnCDqsJDsgqztlanri4jri6QhXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6IFwi6riw66Gd7JeQIOuUsOultOuptCDsnbTrr7gg7ISk66y4IOyhsOyCrOulvCDrp4jsuZjshajsirXri4jri6QuXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwi7ISk66y47KGw7IKs6rCAIOuhnOuTnOykkeyeheuLiOuLpC4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCLshKDtg53tlZjsi63si5zsmKQuLi5cIixcbiAgdmFsdWU6IFwi6rCSXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwi7KeI66y47JeQIOuLte2VmOyLnOyYpC5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwi7ZWY64KYIOydtOyDgeydmCDsp4jrrLjsl5Ag64u17ZWY7Iut7Iuc7JikLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIuuqqOuToCDtlonsl5Ag7J6I64qUIOyniOusuOyXkCDri7XtlZjsi63si5zsmKQuXCIsXG4gIG51bWVyaWNFcnJvcjogXCLqsJLsnYAg7Iir7J6Q7Jes7JW8IO2VqeuLiOuLpC5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCLri7Xrs4DsnZgg6ri47J2064qUIOy1nOyGjCB7MH3snpDsl6zslbwg7J6F64uI64ukLlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIuuLteuzgOydmCDquLjsnbTripQgezB97J6Q66W8IOy0iOqzvCDtlaAg7IiYIOyXhuyKteuLiOuLpC5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCLri7Xrs4DsnZgg6ri47J2064qUIHswfSAtIHsxfeyekCDsgqzsnbTsl6zslbwg7ZWp64uI64ukLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIuy1nOyGjCB7MH3qsJzsnZgg7ZaJ7J2EIOyxhOyasOyLreyLnOyYpFwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCLstZzshowgezB96rCc7J2YIOuzgOyImOulvCDshKDtg53tlZjsi63si5zsmKQuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIuy1nOuMgCB7MH3qsJzsnZgg67OA7IiY66W8IOyEoO2Dne2VmOyLreyLnOyYpC5cIixcbiAgbnVtZXJpY01pbk1heDogXCInezB9J+ydgCB7MX3rs7Tri6Qg7YGs6rGw64KYIOqwmeqzoCB7Mn3rs7Tri6Qg7J6R6rGw64KYIOqwmeyVhOyVvO2VqeuLiOuLpC5cIixcbiAgbnVtZXJpY01pbjogXCInezB9J+ydgCB7MX3rs7Tri6Qg7YGs6rGw64KYIOqwmeyVhOyVvO2VqeuLiOuLpC5cIixcbiAgbnVtZXJpY01heDogXCInezB9J+ydgCB7MX3rs7Tri6Qg7J6R6rGw64KYIOqwmeyVhOyVvO2VqeuLiOuLpC5cIixcbiAgaW52YWxpZEVtYWlsOiBcIuyYrOuwlOuluCDsnbTrqZTsnbwg7KO87IaM66W8IOyeheugpe2VmOyLreyLnOyYpC5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwi7ZGc7ZiE7IudOiB7MH3snYAgJ+ywuCfsnbTslrTslbwg7ZWp64uI64ukLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiJ3swfSfsnLzroZwg7J6Y66q765CcIOyalOyyreyeheuLiOuLpC4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjogXCLruYTslrTsnojripQg642w7J207YSw66W8IOyalOyyre2WiOqxsOuCmCDsnpjrqrvrkJwg7IaN7ISx7J2YIOqyveuhnOyeheuLiOuLpC5cIixcbiAgZXhjZWVkTWF4U2l6ZTogXCLtjIzsnbwg7YGs6riw6rCAIHswfeydhCDstIjqs7wg7ZWgIOyImCDsl4bsirXri4jri6QuXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCLri6Trpbgg7KeI66y47J2EIOyekeyEse2VmOyLreyLnOyYpC5cIixcbiAgdXBsb2FkaW5nRmlsZTogXCLtjIzsnbwg7JeF66Gc65OcIOykkeyeheuLiOuLpC4g7J6g7IucIO2bhCDri6Tsi5wg7Iuc64+E7ZWY7Iut7Iuc7JikLlwiLFxuICBsb2FkaW5nRmlsZTogXCLroZzrk5wg7KSRLi4uXCIsXG4gIGNob29zZUZpbGU6IFwi7YyM7J28IOyEoO2DnS4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwi7ISg7YOd65CcIO2MjOydvOydtCDsl4bsirXri4jri6RcIixcbiAgY29uZmlybURlbGV0ZTogXCLquLDroZ3snYQg7IKt7KCc7ZWY7Iuc6rKg7Iq164uI6rmMP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIiDsnbQg6rCS7J2AIOqzoOycoO2VtOyVvO2VqeuLiOuLpC5cIixcbiAgYWRkQ29sdW1uOiBcIuyXtCDstpTqsIBcIixcbiAgYWRkUm93OiBcIu2WiSDstpTqsIBcIixcbiAgcmVtb3ZlUm93OiBcIuygnOqxsFwiLFxuICBhZGRQYW5lbDogXCLsg4jroa3qsowg7LaU6rCAXCIsXG4gIHJlbW92ZVBhbmVsOiBcIuygnOqxsFwiLFxuICBjaG9pY2VzX0l0ZW06IFwi7ZWt66qpXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwi7Je0XCIsXG4gIG1hdHJpeF9yb3c6IFwi7ZaJXCIsXG4gIHNhdmluZ0RhdGE6IFwi6rKw6rO86rCAIOyEnOuyhOyXkCDsoIDsnqUg7KSR7J6F64uI64ukLi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCLsmKTrpZjqsIAg67Cc7IOd7ZWY7JesIOqysOqzvOulvCDsoIDsnqXtlaAg7IiYIOyXhuyKteuLiOuLpC5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwi6rKw6rO86rCAIOyEseqzteyggeycvOuhnCDsoIDsnqXrkJjsl4jsirXri4jri6QhXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCLri6Tsi5wg7Iuc64+E7ZWY7Iut7Iuc7JikXCIsXG4gIHRpbWVyTWluOiBcIuu2hFwiLFxuICB0aW1lclNlYzogXCLstIhcIixcbiAgdGltZXJTcGVudEFsbDogXCLtmITsnqwg7Y6Y7J207KeA7JeQ7IScIHswfeydhCDshozsmpTtlbQg7LSdIHsxfeydtCDqsbjroLjsirXri4jri6QuXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIu2YhOyerCDtjpjsnbTsp4Dsl5DshJwgezBd7J20IOqxuOuguOyKteuLiOuLpFwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIuy0nSB7MH3snbQg6rG466C47Iq164uI64ukLlwiLFxuICB0aW1lckxpbWl0QWxsOiBcIu2YhOyerCDtjpjsnbTsp4Dsl5DshJwgezB9L3sxfeydhCDshozsmpTtlbQg7LSdIHsyfS97M33snbQg6rG466C47Iq164uI64ukLlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCLtmITsnqwg7Y6Y7J207KeA7JeQ7IScIHswfS97MX3snbQg6rG466C47Iq164uI64ukLlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIuy0nSB7MH0vezF97J20IOqxuOuguOyKteuLiOuLpC5cIixcbiAgY2xlYW5DYXB0aW9uOiBcIuuLpuq4sFwiLFxuICBjbGVhckNhcHRpb246IFwi7KeA7Jqw6riwXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIu2MjOydvOydhCDshKDtg51cIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwi7J20IO2MjOydvCDsoJzqsbBcIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCLsmIhcIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIuyVhOuLiFwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCJ7MH0g7YyM7J287J2EIOygnOqxsCDtlZjsi5zqsqDsirXri4jquYw/XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCLrqqjrk6Ag7YyM7J287J2EIOygnOqxsCDtlZjsi5zqsqDsirXri4jquYw/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCLsp4jrrLgg7KCc66qpXCIsXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImtvXCJdID0ga29yZWFuU3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcImtvXCJdID0gXCLtlZzqta3slrRcIjtcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgbGF0dmlhblN1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCJBdHBha2HEvFwiLFxuICBwYWdlTmV4dFRleHQ6IFwiVMSBbMSBa1wiLFxuICBjb21wbGV0ZVRleHQ6IFwiUGFiZWlndFwiLFxuICBwcmV2aWV3VGV4dDogXCJQcmlla8Whc2thdMSranVtc1wiLFxuICBlZGl0VGV4dDogXCJSZWRpxKPEk3RcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIlPEgWt0XCIsXG4gIG90aGVySXRlbVRleHQ6IFwiQ2l0cyAobMWrZHp1LCBhcHJha3N0aWV0ISlcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIk5hdlwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJJenbEk2zEk3RpZXMgdmlzdXNcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIkxhcHB1c2UgezB9IG5vIHsxfVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiSWVyYWtzdMSrdCB7MH0gbm8gezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJBdGJpbGTEk2phIHV6IGphdXTEgWp1bWllbSB7MH0gLyB7MX1cIixcbiAgZW1wdHlTdXJ2ZXk6IFwiTmF2IG5ldmllbmEgamF1dMSBanVtYS5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCJQYXRlaWNhbWllcyBKdW1zIHBhciBhbmtldGFzIGFpenBpbGTEq8WhYW51IVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgIFwiTcWrc3UgaWVyYWtzdGkgbGllY2luYSwga2EgasWrcyBqYXUgZXNhdCBhaXpwaWxkxKtqaXMgxaFvIGFwdGF1anUuXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiSWVsxIFkZSBubyBzZXJ2ZXJhLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIkl6dsSTbMSTdGllcy4uLlwiLFxuICB2YWx1ZTogXCJ2YWx1ZVwiLFxuICByZXF1aXJlZEVycm9yOiBcIkzFq2R6dSwgYXRiaWxkaWV0IHV6IGphdXTEgWp1bXUhXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIkzFq2R6dSwgYXRiaWxkaWV0IHV6IHZpc21heiB2aWVudSBqYXV0xIFqdW11LlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIkzFq2R6dSwgYXRiaWxkaWV0IHV6IGphdXTEgWp1bWllbSB2aXPEgXMgcmluZMSBcy5cIixcbiAgbnVtZXJpY0Vycm9yOiBcIkF0YmlsZGVpIGlyIGrEgWLFq3Qgc2thaXRsaW0uXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiTMWrZHp1LCBpZXZhZGlldCB2aXNtYXogezB9IHNpbWJvbHVzLlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIkzFq2R6dSwgaWV2YWRpZXQgbWF6xIFrIG5la8SBIHswfSByYWtzdHrEq21lcy5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCJMxatkenUsIGlldmFkaWV0IHZhaXLEgWsgbmVrxIEgezB9IHJha3N0esSrbWVzIHVuIG1hesSBayBuZWvEgSB7MX0gcmFrc3R6xKttZXMuXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwiTMWrZHp1LCBhaXpwaWxkaWV0IHZpc21heiB7MH0gcmluZGFzLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJMxatkenUsIGl6dsSTbGlldGllcyB2aXNtYXogezB9IHZhcmlhbnR1LlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJMxatkenUsIGl6dsSTbGlldGllcyBuZSB2YWlyYWsgcGFyIHswfSB2YXJpYW50aWVtLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiJ3swfScgasSBYsWrdCB2aWVuxIFkYW0gdmFpIGxpZWzEgWthbSBuZWvEgSB7MX0sIHVuIHZpZW7EgWRhbSB2YWkgbWF6xIFrYW0sIG5la8SBIHsyfVwiLFxuICBudW1lcmljTWluOiBcIid7MH0nIGrEgWLFq3QgdmllbsSBZGFtIHZhaSBsaWVsxIFrYW0gezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiJ3swfScgasSBYsWrdCB2aWVuxIFkYW0gdmFpIGxpZWzEgWthbSB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIkzFq2R6dSwgaWV2YWRpZXQgcGF0aWVzdSBlLXBhc3RhIGFkcmVzaSFcIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiSXp0ZWljaWVuYW06IHswfSBqxIFhdGdyaWXFviDigJx0cnVl4oCdLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiUGllcHJhc8SranVtxIEgdGlrYSBhdGdyaWV6dGEga8S8xatkYSDigJx7MH3igJ0uIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XG4gICAgXCJQaWVwcmFzxKtqdW1zIGF0Z3JpZXphIHR1a8WhdXMgZGF0dXMgdmFpIHJla3ZpesSrdHMg4oCccGF0aOKAnSBpciBuZXBhcmVpenNcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJGYWlsYSBsaWVsdW1zIG5lZHLEq2tzdCBwxIFyc25pZWd0IHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIkzFq2R6dSwgaWV2YWRpZXQgZGF0dXMgbGF1a8SBICdDaXRzJ1wiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwiSsWrc3UgZmFpbHMgdGllayBhdWfFoXVwaWVsxIFkxJN0cy4gTMWrZHp1LCB1emdhaWRpZXQgdmFpcsSBa2FzIHNla3VuZGVzIHVuIG3Ek8SjaW5pZXQgdsSTbHJlaXouXCIsXG4gIGxvYWRpbmdGaWxlOiBcIk5vdGllayBpZWzEgWRlIC4uLlwiLFxuICBjaG9vc2VGaWxlOiBcIkl6dsSTbGlldGllcyBmYWlsdXMgLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCJOYXYgaXp2xJNsxJN0cyBuZXZpZW5zIGZhaWxzXCIsXG4gIGNvbmZpcm1EZWxldGU6IFwiVmFpIHbEk2xhdGllcyBpemR6xJNzdCBpZXJha3N0dT9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCLFoGFpIHbEk3J0xKtiYWkgasSBYsWrdCB1bmlrxIFsYWkuXCIsXG4gIGFkZENvbHVtbjogXCJQaWV2aWVub3Qga29sb25udVwiLFxuICBhZGRSb3c6IFwiUGlldmllbm90IHJpbmR1XCIsXG4gIHJlbW92ZVJvdzogXCJOb8WGZW10XCIsXG4gIGFkZFBhbmVsOiBcIlBpZXZpZW5vIGphdW51XCIsXG4gIHJlbW92ZVBhbmVsOiBcIk5vxYZlbXRcIixcbiAgY2hvaWNlc19JdGVtOiBcImxpZXRhXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiU2xlamFcIixcbiAgbWF0cml4X3JvdzogXCJSaW5kYVwiLFxuICBzYXZpbmdEYXRhOiBcIlJlenVsdMSBdGkgdGllayBzYWdsYWLEgXRpIHNlcnZlcsSrIC4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwiUmFkxIFzIGvEvMWrZGEsIHVuIG3Ek3MgbmV2YXLEk2rEgW0gc2FnbGFixIF0IHJlenVsdMSBdHVzLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJSZXp1bHTEgXRpIHRpa2EgdmVpa3NtxKtnaSBzYWdsYWLEgXRpIVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwiTcSTxKNpbmkgdsSTbHJlaXpcIixcbiAgdGltZXJNaW46IFwibWluXCIsXG4gIHRpbWVyU2VjOiBcInNla1wiLFxuICB0aW1lclNwZW50QWxsOiBcIsWgYWrEgSBsYXDEgSBlc2F0IGl6dMSTcsSTamlzIHswfSB1biBrb3DEgSB7MX0uXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIsWgYWrEgSBsYXDEgSBlc2F0IGl6dMSTcsSTamlzIHswfS5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCJLb3DEgSBlc2F0IGl6dMSTcsSTamlzIHswfS5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcIsWgYWrEgSBsYXDEgSBlc2F0IGl6dMSTcsSTamlzIHswfSBubyB7MX0gdW4ga29wxIEgezJ9IG5vIHszfS5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwixaBhasSBIGxhcMSBIGVzYXQgaXp0xJNyxJNqaXMgezB9IG5vIHsxfS5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJLb3DEgSBlc2F0IGl6dMSTcsSTamlzIHswfSBubyB7MX0uXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCJUxKtyc1wiLFxuICBjbGVhckNhcHRpb246IFwiU2thaWRyc1wiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJJenbEk2zEk3RpZXMgZmFpbHVcIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwiTm/FhmVtaWV0IMWhbyBmYWlsdVwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIkrEgVwiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiTsSTXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIlZhaSB0aWXFocSBbSB2xJNsYXRpZXMgbm/FhmVtdCDFoW8gZmFpbHU6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIlZhaSB0aWXFocSBbSB2xJNsYXRpZXMgbm/FhmVtdCB2aXN1cyBmYWlsdXM/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJKYXV0xIFqdW1hIG5vc2F1a3Vtc1wiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJsdlwiXSA9IGxhdHZpYW5TdXJ2ZXlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wibHZcIl0gPSBcImxhdHZpZcWhdVwiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBsaXRodWFuaWFTdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwiQXRnYWxcIixcbiAgcGFnZU5leHRUZXh0OiBcIlRvbGlhdVwiLFxuICBjb21wbGV0ZVRleHQ6IFwiQmFpZ3RpXCIsXG4gIHByZXZpZXdUZXh0OiBcIlBlcsW+acWrcmFcIixcbiAgZWRpdFRleHQ6IFwiUmVkYWd1b3RpXCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCJQcmFkxJd0aVwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIktpdGEgKMSvdmVzdGkpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCJOxJdyYVwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJQYXNpcmlua3RpIHZpc3VzXCIsXG4gIHByb2dyZXNzVGV4dDogXCJQdXNsYXBpcyB7MH0gacWhIHsxfVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwixK5yYcWheXRpIHswfSBpxaEgezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJBdHNha8SXIMSvIHswfSAvIHsxfSBrbGF1c2ltdXNcIixcbiAgZW1wdHlTdXJ2ZXk6IFwiQXBrbGF1c29qZSBuxJdyYSBtYXRvbW8gcHVzbGFwaW8gYXIga2xhdXNpbW8uXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiRMSXa29qYW1lIHXFviBkYWx5dmF2aW3EhSBhcGtsYXVzb2plIVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOiBcIk3Fq3PFsyDEr3JhxaFhaSByb2RvLCBrYWQgamF1IGF0bGlrb3RlIMWhacSFIGFwa2xhdXPEhS5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJQcmHFoW9tZSBwYWxhdWt0aS4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJQYXNpcmlua3RpLi4uXCIsXG4gIHZhbHVlOiBcInJlaWvFoW3El1wiLFxuICByZXF1aXJlZEVycm9yOiBcIkLFq3RpbmEgYXRzYWt5dGkgxK8gxaHEryBrbGF1c2ltxIUuXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIkLFq3RpbmEgYXRzYWt5dGkgYmVudCDEryB2aWVuxIUga2xhdXNpbcSFLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlByYcWhb21lIGF0c2FreXRpIMSvIGtsYXVzaW11cyB2aXNvc2UgZWlsdXTEl3NlLlwiLFxuICBudW1lcmljRXJyb3I6IFwiVHVyaSBixat0aSBza2FpxI1pYWkuXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiUHJhxaFvbWUgc3V2ZXN0aSBiZW50IHswfSBzaW1ib2xpdXMuXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwiUHJhxaFvbWUgc3V2ZXN0aSBtYcW+aWF1IG5laSB7MH0gc2ltYm9sacWzLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOlxuICAgIFwiUHJhxaFvbWUgc3V2ZXN0aSBkYXVnaWF1IG5laSB7MH0gaXIgbWHFvmlhdSBuZWkgezF9IHNpbWJvbGnFsy5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJQcmHFoW9tZSBzdXZlc3RpIG5lIG1hxb5pYXUgbmVpIHswfSBlaWx1xI1pxbMuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIlByYcWhb21lIHBhc2lyaW5rdGkgYmVudCB7MH0gdmFyaWFudMWzLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJQYXNpcmlua2l0ZSBuZSBkYXVnaWF1IGthaXAgezB9IHZhcmlhbnR1cy5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIid7MH0nIHR1cmkgYsWrdGkgbHlndXMgYXJiYSBkaWRlc25pcyBuZWkgezF9IGlyIGx5Z3VzIGFyYmEgbWHFvmVzbmlzIG5laSB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCInezB9JyB0dXLEl3TFsyBixat0aSBseWd1cyBhcmJhIGRpZGVzbmlzIG5laSB7MX1cIixcbiAgbnVtZXJpY01heDogXCInezB9JyB0dXLEl3TFsyBixat0aSBseWd1cyBhciBtYcW+ZXNuaXMgdcW+IHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwiUHJhxaFvbWUgxK92ZXN0aSBnYWxpb2phbnTEryBlbGVrdHJvbmluaW8gcGHFoXRvIGFkcmVzxIUuXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIlJlaWvFoW3ElzogezB9IHR1cmkgZ3LEhcW+aW50aSAndHJ1ZScuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCJVxb5rbGF1c2EgZ3LEhcW+aW5vIGtsYWlkxIUnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcIlXFvmtsYXVzYSBncsSFxb5pbm8gdHXFocSNaXVzIGR1b21lbmlzIGFyYmEgJ3BhdGgnIHNhdnlixJcgeXJhIG5ldGVpc2luZ2FcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJGYWlsbyBkeWRpcyBuZXR1cmkgdmlyxaF5dGkgezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwixK52ZXNraXRlIGtpdMSFIHJlaWvFoW3EmS5cIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcIkrFq3PFsyBmYWlsYXMgeXJhIGtlbGlhbWFzLiBQYWxhdWtpdGUga2VsZXTEhSBzZWt1bmTFvmnFsyBpciBiYW5keWtpdGUgZGFyIGthcnTEhS5cIixcbiAgbG9hZGluZ0ZpbGU6IFwiUHJhxaFvbWUgcGFsYXVrdGkuLi5cIixcbiAgY2hvb3NlRmlsZTogXCJQYXNpcmlua3RpIGZhaWzEhSh1cykuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcIk5lcGFzaXJpbmt0YXMgam9rcyBmYWlsYXNcIixcbiAgY29uZmlybURlbGV0ZTogXCJBciBub3JpdGUgacWhdHJpbnRpIMSvcmHFocSFP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIsWgaSByZWlrxaFtxJcgdHVyxJd0xbMgYsWrdGkgdW5pa2FsaS5cIixcbiAgYWRkQ29sdW1uOiBcIlByaWTEl3RpIHN0dWxwZWzEr1wiLFxuICBhZGRSb3c6IFwiUHJpZMSXdGkgZWlsdXTEmVwiLFxuICByZW1vdmVSb3c6IFwiScWhdHJpbnRpXCIsXG4gIGFkZFBhbmVsOiBcIlByaWTEl3RpIG5hdWrEhVwiLFxuICByZW1vdmVQYW5lbDogXCJJxaF0cmludGlcIixcbiAgY2hvaWNlc19JdGVtOiBcImVsZW1lbnRhc1wiLFxuICBtYXRyaXhfY29sdW1uOiBcIlN0dWxwZWxpc1wiLFxuICBtYXRyaXhfcm93OiBcIkVpbHV0xJdcIixcbiAgc2F2aW5nRGF0YTogXCJSZXp1bHRhdGFpIHNhdWdvbWkgc2VydmVyeWplLi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCLErnZ5a28ga2xhaWRhIGlyIG1lcyBuZWdhbMSXam9tZSBpxaFzYXVnb3RpIHJlenVsdGF0xbMuXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIlJlenVsdGF0YWkgYnV2byBpxaFzYXVnb3RpIHPEl2ttaW5nYWkhXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCJCYW5keXRpIGRhciBrYXJ0xIVcIixcbiAgdGltZXJNaW46IFwibWluXCIsXG4gIHRpbWVyU2VjOiBcInNla1wiLFxuICB0aW1lclNwZW50QWxsOiBcIlByYWxlaWRvdGUgezB9IMWhaWFtZSBwdXNsYXB5amUgaXIgezF9IGnFoSB2aXNvLlwiLFxuICB0aW1lclNwZW50UGFnZTogXCJQcmFsZWlkb3RlIHswfSDFoWlhbWUgcHVzbGFweWplLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIlByYWxlaWRvdGUgezB9IGnFoSB2aXNvLlwiLFxuICB0aW1lckxpbWl0QWxsOiBcIlByYWxlaWRvdGUgezB9IGnFoSB7MX0gxaFpYW1lIHB1c2xhcHlqZSBpciB7Mn0gacWhIHszfSBpxaEgdmlzby5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwiUHJhbGVpZG90ZSB7MH0gacWhIHsxfSDFoWlhbWUgcHVzbGFweWplLlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIlByYWxlaWRvdGUgezB9IGnFoSB7MX0gacWhIHZpc28uXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCJJxaF2YWx5dGlcIixcbiAgY2xlYXJDYXB0aW9uOiBcIlZhbHl0aVwiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJQYXNpcmlua3RpIGZhaWzEhVwiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCJJxaF0cmludGkgxaHEryBmYWlsxIVcIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJUYWlwXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOZVwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCJBciB0aWtyYWkgbm9yaXRlIHBhxaFhbGludGkgxaHEryBmYWlsxIU6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIkFyIHRpa3JhaSBub3JpdGUgcGHFoWFsaW50aSB2aXN1cyBmYWlsdXM/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJLbGF1c2ltbyBwYXZhZGluaW1hc1wiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJsdFwiXSA9IGxpdGh1YW5pYVN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJsdFwiXSA9IFwibGlldHV2acWzXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIG1hY2Vkb25pYW5TdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwi0J/RgNC10YLRhdC+0LTQvdCwXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCLQodC70LXQtNC90L5cIixcbiAgY29tcGxldGVUZXh0OiBcItCX0LDQstGA0YjQuFwiLFxuICBwcmV2aWV3VGV4dDogXCLQn9GA0LXQs9C70LXQtFwiLFxuICBlZGl0VGV4dDogXCLQo9GA0LXQtNGD0LLQsNGa0LVcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcItCX0LDQv9C+0YfQvdC10YLQtVwiLFxuICBvdGhlckl0ZW1UZXh0OiBcItCU0YDRg9Cz0L4gKNC+0L/QuNGI0LgpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCLQndC40YjRgtC+XCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcItCh0LXQu9C10LrRgtC40YDQsNGYINGB0LVcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcItCh0YLRgNCw0L3QuNGG0LAgezB9INC+0LQgezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCLQodC90LjQvNC4IHswfSDQvtC0IHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwi0J7QtNCz0L7QstC+0YDQtdC90Lgg0L3QsCB7MH0gLyB7MX0g0L/RgNCw0YjQsNGa0LBcIixcbiAgZW1wdHlTdXJ2ZXk6IFwi0J3QtdC80LAg0LLQuNC00LvQuNCy0LAg0YHRgtGA0LDQvdC40YbQsCDQuNC70Lgg0L/RgNCw0YjQsNGa0LUg0LLQviDQuNGB0YLRgNCw0LbRg9Cy0LDRmtC10YLQvi5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCLQktC4INCx0LvQsNCz0L7QtNCw0YDQuNC80LUg0YjRgtC+INCz0L4g0LfQsNCy0YDRiNC40LLRgtC1INC40YHRgtGA0LDQttGD0LLQsNGa0LXRgtC+IVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgIFwi0J3QsNGI0LjRgtC1INC30LDQv9C40YHQuCDQv9C+0LrQsNC20YPQstCw0LDRgiDQtNC10LrQsCDQstC10ZzQtSDRgdGC0LUg0LPQviDQt9Cw0LLRgNGI0LjQu9C1INC+0LLQsCDQuNGB0YLRgNCw0LbRg9Cy0LDRmtC1LlwiLFxuICBsb2FkaW5nU3VydmV5OiBcItCQ0L3QutC10YLQsNGC0LAg0YHQtSDQstGH0LjRgtGD0LLQsCAuLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwi0JjQt9Cx0LXRgNC10YLQtSAuLi5cIixcbiAgdmFsdWU6IFwi0LLRgNC10LTQvdC+0YHRglwiLFxuICByZXF1aXJlZEVycm9yOiBcItCS0LUg0LzQvtC70LDQvCwg0L7QtNCz0L7QstC+0YDQtdGC0LUg0L3QsCDQv9GA0LDRiNCw0ZrQtdGC0L4uXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcItCS0LUg0LzQvtC70LDQvCwg0L7QtNCz0L7QstC+0YDQtdGC0LUg0LHQsNGA0LXQvCDQvdCwINC10LTQvdC+INC/0YDQsNGI0LDRmtC1LlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcItCS0LUg0LzQvtC70LjQvNC1LCDQvtC00LPQvtCy0L7RgNC10YLQtSDQvdCwINC/0YDQsNGI0LDRmtCwINCy0L4g0YHQuNGC0LUg0YDQtdC00L7QstC4LlwiLFxuICBudW1lcmljRXJyb3I6IFwi0JLRgNC10LTQvdC+0YHRgtCwINGC0YDQtdCx0LAg0LTQsCDQsdC40LTQtSDQvdGD0LzQtdGA0LjRh9C60LAuXCIsXG4gIG1pbkVycm9yOiBcItCS0YDQtdC00L3QvtGB0YLQsCDQvdC1INGC0YDQtdCx0LAg0LTQsCDQsdC40LTQtSDQv9C+0LzQsNC70LAg0L7QtCB7MH1cIixcbiAgbWF4RXJyb3I6IFwi0JLRgNC10LTQvdC+0YHRgtCwINC90LUg0YLRgNC10LHQsCDQtNCwINCx0LjQtNC1INC/0L7Qs9C+0LvQtdC80LAg0L7QtCB7MH1cIixcbiAgdGV4dE1pbkxlbmd0aDogXCLQktC90LXRgdC10YLQtSDQvdCw0ZjQvNCw0LvQutGDIHswfSDQt9C90LDQui/RhtC4LlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcItCS0L3QtdGB0LXRgtC1INC90LUg0L/QvtCy0LXRnNC1INC+0LQgezB9INC30L3QsNC6L9GG0LguXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwi0JLQvdC10YHQtdGC0LUg0L3QsNGY0LzQsNC70LrRgyB7MH0g0Lgg0L3QtSDQv9C+0LLQtdGc0LUg0L7QtCB7MX0g0LfQvdCw0YbQuC5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCLQn9C+0L/QvtC70L3QtdGC0LUg0L3QsNGY0LzQsNC70LrRgyB7MH0g0YDQtdC0KNC+0LLQuCkuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcItCS0LUg0LzQvtC70LjQvNC1INC40LfQsdC10YDQtdGC0LUg0L3QsNGY0LzQsNC70LrRgyB7MH0g0LLQsNGA0LjRmNCw0L3RgtCwKNC4KS5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwi0JjQt9Cx0LXRgNC10YLQtSDQvdC1INC/0L7QstC10ZzQtSDQvtC0IHswfSDQstCw0YDQuNGY0LDQvdGC0LAo0LgpLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiJ3swfScg0YLRgNC10LHQsCDQtNCwINCx0LjQtNC1INC90LDRmNC80LDQu9C60YMgezF9INC4INC90LDRmNC80L3QvtCz0YMgezJ9XCIsXG4gIG51bWVyaWNNaW46IFwiJ3swfScg0YLRgNC10LHQsCDQtNCwINCx0LjQtNC1INC90LDRmNC80LDQu9C60YMgezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiJ3swfScg0YLRgNC10LHQsCDQtNCwINCx0LjQtNC1INC90LDRmNC80L3QvtCz0YMgezF9XCIsXG4gIGludmFsaWRFbWFpbDogXCLQktC1INC80L7Qu9C40LzQtSDQstC90LXRgdC10YLQtSDQstCw0LvQuNC00L3QsCDQtS3QvNCw0LjQuyDQsNC00YDQtdGB0LAuXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcItCY0LfRgNCw0LfQvtGCOiB7MH0g0YLRgNC10LHQsCDQtNCwINGB0LUg0LLRgNCw0YLQuCAndHJ1ZScuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCLQkdCw0YDQsNGa0LXRgtC+INCy0YDQsNGC0Lgg0LPRgNC10YjQutCwICd7MH0nLiB7MX0gXCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcItCR0LDRgNCw0ZrQtdGC0L4g0LLRgNCw0YLQuCDQv9GA0LDQt9C90Lgg0L/QvtC00LDRgtC+0YbQuCDQuNC70Lgg0YHQstC+0ZjRgdGC0LLQvtGC0L4gJ3BhdGgnINC1INC90LXRgtC+0YfQvdC+XCIsXG4gIGV4Y2VlZE1heFNpemU6IFwi0JPQvtC70LXQvNC40L3QsNGC0LAg0L3QsCDQtNCw0YLQvtGC0LXQutCw0YLQsCDQvdC1INGC0YDQtdCx0LAg0LTQsCDQvdCw0LTQvNC40L3Rg9Cy0LAgezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwi0JLQvdC10YHQtdGC0LUg0ZjQsCDQtNGA0YPQs9Cw0YLQsCDQstGA0LXQtNC90L7RgdGCLlwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwi0JLQsNGI0LDRgtCwINC00LDRgtC+0YLQtdC60LAg0YHQtSDQv9C+0YHRgtCw0LLRg9Cy0LAuINCS0LUg0LzQvtC70LjQvNC1INC/0L7Rh9C10LrQsNGY0YLQtSDQvdC10LrQvtC70LrRgyDRgdC10LrRg9C90LTQuCDQuCDQvtCx0LjQtNC10YLQtSDRgdC1INC/0L7QstGC0L7RgNC90L4uXCIsXG4gIGxvYWRpbmdGaWxlOiBcItCh0LUg0LLRh9C40YLRg9Cy0LAgLi4uXCIsXG4gIGNob29zZUZpbGU6IFwi0JjQt9Cx0LXRgNC10YLQtSDQtNCw0YLQvtGC0LXQutCwICjQuCkgLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCLQndC1INGB0LUg0LjQt9Cx0YDQsNC90Lgg0LTQsNGC0L7RgtC10LrQuFwiLFxuICBjb25maXJtRGVsZXRlOiBcItCU0LDQu9C4INGB0LDQutCw0YLQtSDQtNCwINCz0L4g0LjQt9Cx0YDQuNGI0LXRgtC1INC30LDQv9C40YHQvtGCP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcItCe0LLQsNCwINCy0YDQtdC00L3QvtGB0YIg0YLRgNC10LHQsCDQtNCwINCx0LjQtNC1INC10LTQuNC90YHRgtCy0LXQvdCwLlwiLFxuICBhZGRDb2x1bW46IFwi0JTQvtC00LDRmCDQutC+0LvQvtC90LBcIixcbiAgYWRkUm93OiBcItCU0L7QtNCw0LTQuCDRgNC10LRcIixcbiAgcmVtb3ZlUm93OiBcItCe0YLRgdGC0YDQsNC90LhcIixcbiAgZW1wdHlSb3dzVGV4dDogXCLQndC10LzQsCDRgNC10LTQvtCy0LguXCIsXG4gIGFkZFBhbmVsOiBcItCU0L7QtNCw0LTQuCDQvdC+0LLQvlwiLFxuICByZW1vdmVQYW5lbDogXCLQntGC0YHRgtGA0LDQvdC4XCIsXG4gIGNob2ljZXNfSXRlbTogXCLRgdGC0LDQstC60LBcIixcbiAgbWF0cml4X2NvbHVtbjogXCLQmtC+0LvQvtC90LBcIixcbiAgbWF0cml4X3JvdzogXCLQoNC10LRcIixcbiAgc2F2aW5nRGF0YTogXCLQoNC10LfRg9C70YLQsNGC0LjRgtC1INGB0LUg0LfQsNGH0YPQstGD0LLQsNCw0YIg0L3QsCDRgdC10YDQstC10YDQvtGCIC4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwi0J3QsNGB0YLQsNC90LAg0LPRgNC10YjQutCwINC4INC90LUg0LzQvtC20LXQstC80LUg0LTQsCDQs9C4INC30LDRh9GD0LLQsNC80LUg0YDQtdC30YPQu9GC0LDRgtC40YLQtS5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwi0KDQtdC30YPQu9GC0LDRgtC40YLQtSDQsdC10LAg0YPRgdC/0LXRiNC90L4g0LfQsNGH0YPQstCw0L3QuCFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcItCe0LHQuNC00Lgg0YHQtSDQv9C+0LLRgtC+0YDQvdC+XCIsXG4gIHRpbWVyTWluOiBcItC80LjQvVwiLFxuICB0aW1lclNlYzogXCLRgdC10LpcIixcbiAgdGltZXJTcGVudEFsbDogXCLQn9C+0LzQuNC90LDQstGC0LUgezB9INC90LAg0L7QstCw0LAg0YHRgtGA0LDQvdC40YbQsCDQuCDQstC60YPQv9C90L4gezF9LlwiLFxuICB0aW1lclNwZW50UGFnZTogXCLQn9C+0LzQuNC90LDQstGC0LUgezB9INC90LAg0L7QstCw0LAg0YHRgtGA0LDQvdC40YbQsC5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCLQktC40LUg0L/QvtGC0YDQvtGI0LjQstGC0LUg0LLQutGD0L/QvdC+IHswfS5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcItCf0L7QvNC40L3QsNCy0YLQtSB7MH0g0L7QtCB7MX0g0L3QsCDQvtCy0LDQsCDRgdGC0YDQsNC90LjRhtCwINC4IHsyfSDQvtC0IHszfSDQstC60YPQv9C90L4uXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcItCf0L7QvNC40L3QsNCy0YLQtSB7MH0g0L7QtCB7MX0g0L3QsCDQvtCy0LDQsCDRgdGC0YDQsNC90LjRhtCwLlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcItCS0LjQtSDQv9C+0YLRgNC+0YjQuNCy0YLQtSDQstC60YPQv9C90L4gezB9INC+0LQgezF9LlwiLFxuICBjbGVhbkNhcHRpb246IFwi0KfQuNGB0YLQuFwiLFxuICBjbGVhckNhcHRpb246IFwi0JTQsCDRgNCw0YHRh9C40YHRgtC4XCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcItCY0LfQsdC10YDQtdGC0LUg0LTQsNGC0L7RgtC10LrQsFwiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCLQntGC0YHRgtGA0LDQvdC10YLQtSDRmNCwINC+0LLQsNCwINC00LDRgtC+0YLQtdC60LBcIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCLQlNCwXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCLQndC1XCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcItCU0LDQu9C4INGB0YLQtSDRgdC40LPRg9GA0L3QuCDQtNC10LrQsCDRgdCw0LrQsNGC0LUg0LTQsCDRmNCwINC+0YLRgdGC0YDQsNC90LjRgtC1INC+0LLQsNCwINC00LDRgtC+0YLQtdC60LA6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcItCU0LDQu9C4INGB0YLQtSDRgdC40LPRg9GA0L3QuCDQtNC10LrQsCDRgdCw0LrQsNGC0LUg0LTQsCDQs9C4INC+0YLRgdGC0YDQsNC90LjRgtC1INGB0LjRgtC1INC00LDRgtC+0YLQtdC60Lg/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCLQndCw0YHQu9C+0LIg0L3QsCDQv9GA0LDRiNCw0ZrQtdGC0L5cIixcbiAgbW9kYWxDYW5jZWxCdXR0b25UZXh0OiBcItCe0YLQutCw0LbQuFwiLFxuICBtb2RhbEFwcGx5QnV0dG9uVGV4dDogXCLQkNC/0LvQuNGG0LjRgNCw0ZhcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wibWtcIl0gPSBtYWNlZG9uaWFuU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcIm1rXCJdID0gXCLQnNCw0LrQtdC00L7QvdGB0LrQuFwiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBub3J3ZWdpYW5TdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwiRm9ycmlnZVwiLFxuICBwYWdlTmV4dFRleHQ6IFwiTmVzdGVcIixcbiAgY29tcGxldGVUZXh0OiBcIkZ1bGxmw7hyXCIsXG4gIHByZXZpZXdUZXh0OiBcIkZvcmjDpW5kc3Zpc25pbmdcIixcbiAgZWRpdFRleHQ6IFwiUmVkaWdlcmVcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIlN0YXJ0XCIsXG4gIG90aGVySXRlbVRleHQ6IFwiQW5uZXQgKGJlc2tyaXYpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCJJbmdlblwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJWZWxnIGFsbGVcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIlNpZGUgezB9IGF2IHsxfVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiVGEgb3BwIHswfSBhdiB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcIkJlc3ZhcnRlIHswfSAvIHsxfSBzcMO4cnNtw6VsXCIsXG4gIGVtcHR5U3VydmV5OiBcIkRldCBlciBpbmdlbiBzeW5saWcgc2lkZSBlbGxlciBzcMO4cnNtw6VsIGkgdW5kZXJzw7hrZWxzZW4uXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiVGFrayBmb3IgYXQgZHUgZnVsbGbDuHJ0ZSB1bmRlcnPDuGtlbHNlbiFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcbiAgICBcIlbDpXJlIGRhdGEgdmlzZXIgYXQgZHUgYWxsZXJlZGUgaGFyIGdqZW5ub21mw7hydCBkZW5uZSB1bmRlcnPDuGtlbHNlbi5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJVbmRlcnPDuGtlbHNlbiBsYXN0ZXIuLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwiVmVsZy4uLlwiLFxuICB2YWx1ZTogXCJ2ZXJkaVwiLFxuICByZXF1aXJlZEVycm9yOiBcIlZlbm5saWdzdCBzdmFyIHDDpSBzcMO4cnNtw6VsZXQuXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIlZlbm5saWdzdCBzdmFyIHDDpSBtaW5zdCBldHQgc3DDuHJzbcOlbC5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJWZW5ubGlnc3Qgc3ZhciBww6Ugc3DDuHJzbcOlbCBpIGFsbGUgcmFkZXIuXCIsXG4gIG51bWVyaWNFcnJvcjogXCJWZXJkaWVuIHNrYWwgdsOmcmUgbnVtZXJpc2suXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiVmVubmxpZ3N0IHNrcml2IGlubiBtaW5zdCB7MH0gdGVnbi5cIixcbiAgdGV4dE1heExlbmd0aDogXCJWZW5ubGlnc3Qgc2tyaXYgaW5uIG1pbmRyZSBlbm4gezB9IHRlZ24uXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwiVmVubmxpZ3N0IHNrcml2IGlubiBtZXIgZW5uIHswfSBvZyBtaW5kcmUgZW5uIHsxfSB0ZWduLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIlZlbm5saWdzdCBmeWxsIGlubiBtaW5zdCB7MH0gcmFkZXIuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIlZlbm5saWdzdCB2ZWxnIG1pbnN0IHswfSB2YXJpYW50ZXIuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIlZlbm5saWdzdCBpa2tlIHZlbGcgbWVyIGVubiB7MH0gdmFyaWFudGVyLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiJ3swfScgYsO4ciB2w6ZyZSBsaWsgZWxsZXIgbWVyIGVubiB7MX0gb2cgbGlrIGVsbGVyIG1pbmRyZSBlbm4gezJ9XCIsXG4gIG51bWVyaWNNaW46IFwiJ3swfScgYsO4ciB2w6ZyZSBsaWsgZWxsZXIgbWVyIGVubiB7MX1cIixcbiAgbnVtZXJpY01heDogXCInezB9JyBiw7hyIHbDpnJlIGxpayBlbGxlciBtaW5kcmUgZW5uIHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwiVmVubmxpZ3N0IHNrcml2IGlubiBlbiBneWxkaWcgZS1wb3N0IGFkcmVzc2UuXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIlV0dHJ5a2tldDogezB9IHNrYWwgcmV0dXJuZXJlICdzYW50Jy5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIkZvcmVzcMO4cnNlbGVuIHJldHVybmVydGUgZmVpbGVuICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwiRm9yZXNww7hyc2VsZW4gcmV0dXJuZXJ0ZSB0b21tZSBkYXRhLCBlbGxlciAnc3RpJyAtZWdlbnNrYXBlbiBlciBmZWlsXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwiRmlsc3TDuHJyZWxzZW4gYsO4ciBpa2tlIG92ZXJzdGlnZSB7MH0uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCJWZW5ubGlnc3Qgc2tyaXYgaW5uIGRlbiBhbmRyZSB2ZXJkaWVuLlwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwiRmlsZW4gZGluIGxhc3RlcyBvcHAuIFZlbm5saWdzdCB2ZW50IG5vZW4gc2VrdW5kZXIgb2cgcHLDuHYgaWdqZW4uXCIsXG4gIGxvYWRpbmdGaWxlOiBcIkxhc3RlciBpbm4gLi4uXCIsXG4gIGNob29zZUZpbGU6IFwiVmVsZyBmaWwgKGVyKSAuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcIkluZ2VuIGZpbCB2YWxndFwiLFxuICBjb25maXJtRGVsZXRlOiBcIsOYbnNrZXIgZHUgw6Ugc2xldHRlIHBvc3Rlbj9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCJEZW5uZSB2ZXJkaWVuIHNrYWwgdsOmcmUgdW5pay5cIixcbiAgYWRkQ29sdW1uOiBcIkxlZ2cgdGlsIGtvbG9ubmVcIixcbiAgYWRkUm93OiBcIkxlZ2cgdGlsIHJhZFwiLFxuICByZW1vdmVSb3c6IFwiRmplcm5cIixcbiAgYWRkUGFuZWw6IFwiTGVnZyB0aWwgbnlcIixcbiAgcmVtb3ZlUGFuZWw6IFwiRmplcm5lXCIsXG4gIGNob2ljZXNfSXRlbTogXCJlbGVtZW50XCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiS29sb25uZVwiLFxuICBtYXRyaXhfcm93OiBcIlJhZFwiLFxuICBzYXZpbmdEYXRhOiBcIlJlc3VsdGF0ZW5lIGxhZ3JlcyBww6Ugc2VydmVyZW4gLi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCJEZXQgb3Bwc3RvIGVuIGZlaWwsIG9nIHZpIGt1bm5lIGlra2UgbGFncmUgcmVzdWx0YXRlbmUuXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIlJlc3VsdGF0ZW5lIGJsZSBsYWdyZXQhXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCJQcsO4diBpZ2plblwiLFxuICB0aW1lck1pbjogXCJtaW5cIixcbiAgdGltZXJTZWM6IFwic2VrXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwiRHUgaGFyIHRpbGJyYWt0IHswfSBww6UgZGVubmUgc2lkZW4gb2cgezF9IHRvdGFsdC5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwiRHUgaGFyIHRpbGJyYWt0IHswfSBww6UgZGVubmUgc2lkZW4uXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwiRHUgaGFyIHRpbGJyYWt0IHswfSB0b3RhbHQuXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgXCJEdSBoYXIgdGlsYnJha3QgezB9IGF2IHsxfSBww6UgZGVubmUgc2lkZW4gb2cgdG90YWx0IHsyfSBhdiB7M30uXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIkR1IGhhciB0aWxicmFrdCB7MH0gYXYgezF9IHDDpSBkZW5uZSBzaWRlbi5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJEdSBoYXIgdGlsYnJha3QgezB9IGF2IHsxfSB0b3RhbHQuXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCJSZW5zXCIsXG4gIGNsZWFyQ2FwdGlvbjogXCJLbGFyXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIlZlbGcgRmlsXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIkZqZXJuIGRlbm5lIGZpbGVuXCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiSmFcIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIk5laVwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCJFciBkdSBzaWtrZXIgcMOlIGF0IGR1IHZpbCBmamVybmUgZGVubmUgZmlsZW46IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIkVyIGR1IHNpa2tlciBww6UgYXQgZHUgdmlsIGZqZXJuZSBhbGxlIGZpbGVuZT9cIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIlNww7hyc23DpWxzdGl0dGVsXCIsXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcIm5vXCJdID0gbm9yd2VnaWFuU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcIm5vXCJdID0gXCJub3Jza1wiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBwZXJzaWFuU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcItmC2KjZhNuMXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCLYqNi52K/bjFwiLFxuICBjb21wbGV0ZVRleHQ6IFwi2KraqdmF24zZhFwiLFxuICBwcmV2aWV3VGV4dDogXCLZvtuM2LQg2YbZhdin24zYtFwiLFxuICBlZGl0VGV4dDogXCLZiNuM2LHYp9uM2LRcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIti02LHZiNi5XCIsXG4gIG90aGVySXRlbVRleHQ6IFwi2K/bjNqv2LEo2KrZiNi224zYrSlcIixcbiAgbm9uZUl0ZW1UZXh0OiBcItmH24zahlwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCLYp9mG2KrYrtin2Kgg2YfZhdmHXCIsXG4gIHByb2dyZXNzVGV4dDogXCLYtdmB2K3ZhyB7MH0g2KfYsiB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcItmF2YjYsdivIHswfSDYp9iyIHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwi2KrYudiv2KfYryDZvtin2LPYriB7MH0vezF9INiz2YjYp9mEXCIsXG4gIGVtcHR5U3VydmV5OiBcIti12YHYrdmHINin24wg24zYpyDar9iy24zZhtmHINin24wg2KjYsdin24wg2KfbjNmGINm+2LHYs9i02YbYp9mF2Ycg2YXZiNis2YjYryDZhtuM2LPYqi5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCLYp9iyINi02YXYpyDYqNin2KjYqiDYqtqp2YXbjNmEINin24zZhiDZvtix2LPYtNmG2KfZhdmHINmF2KrYtNqp2LHbjNmFXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCLYqNmHINmG2LjYsSDZhduMINix2LPYryDZh9mFINmH2YUg2KfaqdmG2YjZhiDZvtix2LPYtNmG2KfZhdmHINix2Kcg2KraqdmF24zZhCDaqdix2K/ZhyDYp9uM2K8uXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwi2K/Ysdit2KfZhCDYp9uM2KzYp9ivINm+2LHYs9i02YbYp9mF2YdcIixcbiAgb3B0aW9uc0NhcHRpb246IFwi2KfZhtiq2K7Yp9ioINqp2YbbjNivLi4uXCIsXG4gIHZhbHVlOiBcItmF2YLYr9in2LFcIixcbiAgcmVxdWlyZWRFcnJvcjogXCLZhNi32YHYpyDYqNmHINiz2YjYp9mEINm+2KfYs9iuINiv2YfbjNivXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcItmE2LfZgdinINit2K/Yp9mC2YQg2KjZhyDbjNqpINiz2YjYp9mEINm+2KfYs9iuINiv2YfbjNivLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcItmE2LfZgdinINiz2YjYp9mE2KfYqiDYqtmF2KfZhSDYs9i32LHZh9inINix2Kcg2b7Yp9iz2K4g2K/Zh9uM2K8uXCIsXG4gIG51bWVyaWNFcnJvcjogXCLZhdmC2K/Yp9ixINio2KfbjNivINi52K/Yr9uMINio2KfYtNivXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwi2YTYt9mB2Kcg2K3Yr9in2YLZhCAgezB9INit2LHZgSDZiNin2LHYryDaqdmG24zYr1wiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcItmE2LfZgdinINqp2YXYqtixINin2LIgIHswfSDYrdix2YEg2YjYp9ix2K8g2qnZhtuM2K8uXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwi2YTYt9mB2Kcg2KjbjNi02KrYsSDYp9iyICB7MH0g2K3YsdmBINmIINqp2YXYqtixINin2LIgezF9INit2LHZgSDZiNin2LHYryDaqdmG24zYry5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCLZhNi32YHYpyDYrdiv2KfZgtmEIHswfSDYs9i32LEg2YjYp9ix2K8g2qnZhtuM2K8uXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcItit2K/Yp9mC2YQgezB9INin2YbYqtiu2KfYqCDaqdmG24zYry5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwi2YTYt9mB2Kcg2KjbjNi02KrYsSDYp9iyICB7MH0g2KfZhtiq2K7Yp9ioINqp2YbbjNivLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgXCInezB9JyDYqNin24zYryDYqNuM2YYgezF9INmIIHsyfSDYqNin2LTYr1wiLFxuICBudW1lcmljTWluOiBcIid7MH0nINio2LLYsdqv2KrYsSDZhdiz2KfZiNuMIHsxfSDYqNin2LTYr1wiLFxuICBudW1lcmljTWF4OiBcIid7MH0nINio2KfbjNivINqp2Yjahtqp2KrYsSDbjNinINmF2LPYp9mI24wgezF9INio2KfYtNivXCIsXG4gIGludmFsaWRFbWFpbDogXCLZhNi32YHYpyDYp9uM2YXbjNmEINi12K3bjNitINiv2LHYrCDaqdmG24zYr1wiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCLYudio2KfYsdiqOiB7MH0g2b7Yp9iz2K4g2KjYp9uM2K8gJ3RydWUnINio2KfYtNivLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwi2K/Ysdiu2YjYp9iz2Kog2KjYpyDYrti32Kcg2LHZiNio2LHZiCDYtNivOiAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgIFwi2K/Ysdiu2YjYp9iz2Kog2YXYs9uM2LHbjCDYrtin2YTbjCDYqNin2LLar9i02Kog2K/Yp9iv2Ycg24zYpyDZhdiz24zYsSDYr9ix2LPYqiDYqtmG2LjbjNmFINmG2LTYr9mHXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwi2KjbjNi02KrYsduM2YYg2K3YrNmFINmF2KzYp9iyINmB2KfbjNmEOiB7MH1cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcItmF2YLYr9in2LEgJ9iv24zar9ixJyDYsdinINmI2KfYsdivINqp2YbbjNivXCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICBcItmB2KfbjNmEINiv2LEg2K3Yp9mEINii24zZhNmI2K8g2KfYs9iqLiDZhNi32YHYpyDYtdio2LEg2qnZhtuM2K8uXCIsXG4gIGxvYWRpbmdGaWxlOiBcItio2KfYsdqv24zYsduMLi4uXCIsXG4gIGNob29zZUZpbGU6IFwi2KfZhtiq2K7Yp9ioINmB2KfbjNmEKNmH2KcpLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCLZh9uM2oYg2YHYp9uM2YTbjCDYp9mG2KrYrtin2Kgg2YbYtNiv2YdcIixcbiAgY29uZmlybURlbGV0ZTogXCLYotuM2Kcg2YXYp9uM2YQg2KjZhyDYrdiw2YEg2KfbjNmGINix2K/bjNmBINmH2LPYqtuM2K/Yn1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcItin24zZhiDZhdmC2K/Yp9ixINio2KfbjNivINi624zYsSDYqtqp2LHYp9ix24wg2KjYp9i02K9cIixcbiAgYWRkQ29sdW1uOiBcItiz2KrZiNmGINis2K/bjNivXCIsXG4gIGFkZFJvdzogXCLYs9i32LEg2KzYr9uM2K9cIixcbiAgcmVtb3ZlUm93OiBcItit2LDZgVwiLFxuICBhZGRQYW5lbDogXCLYrNiv24zYr1wiLFxuICByZW1vdmVQYW5lbDogXCLYrdiw2YFcIixcbiAgY2hvaWNlc19JdGVtOiBcItii24zYqtmFXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwi2LPYqtmI2YZcIixcbiAgbWF0cml4X3JvdzogXCLYs9i32LFcIixcbiAgc2F2aW5nRGF0YTogXCLZhtiq2KfbjNisINiv2LEg2K3Yp9mEINiw2K7bjNix2Ycg2LPYp9iy24wg2K/YsSDYs9ix2YjYsSDYp9iz2KpcIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcItiu2LfYp9uM24wg2K/YsSDYsNiu24zYsdmHINiz2KfYstuMINmG2KrYp9uM2Kwg2LHYriDYr9in2K/ZhyDYp9iz2KpcIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwi2YbYqtin24zYrCDYqNinINmF2YjZgdmC24zYqiDYsNiu24zYsdmHINi02K9cIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcItmF2KzYr9ivINiq2YTYp9i0INqp2YbbjNivXCIsXG4gIHRpbWVyTWluOiBcItiv2YLbjNmC2YdcIixcbiAgdGltZXJTZWM6IFwi2KvYp9mG24zZh1wiLFxuICB0aW1lclNwZW50QWxsOiBcIti02YXYpyDZhdiv2KogezB9INiv2LEg2KfbjNmGINi12YHYrdmHINmIINmF2K/YqiB7MX0g2LHYpyDYr9ixINmF2KzZhdmI2Lkg2LPZvtix24wg2qnYsdiv2Ycg2KfbjNivLlwiLFxuICB0aW1lclNwZW50UGFnZTogXCLYtNmF2Kcg2YXYr9iqIHswfSDYsdinINiv2LEg2KfbjNmGINi12YHYrdmHINiz2b7YsduMINqp2LHYr9mHINin24zYry5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCLYtNmF2Kcg2YXYr9iqIHswfSDYsdinINiv2LEg2YXYrNmF2YjYuSDYs9m+2LHbjCDaqdix2K/ZhyDYp9uM2K8uXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgXCLYtNmF2Kcg2YXYr9iqIHswfSDYp9iyIHsxfSDYr9ixINin24zZhiDYtdmB2K3ZhyDZiCDZhdiv2KogezJ9INin2LIgezN9INix2Kcg2K/YsSDZhdis2YXZiNi5INiz2b7YsduMINqp2LHYr9mHINin24zYry5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwi2LTZhdinINmF2K/YqiB7MH0g2KfYsiB7MX0g2LHYpyDYr9ixINin24zZhiDYtdmB2K3ZhyDYs9m+2LHbjCDaqdix2K/ZhyDYp9uM2K8uXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwi2LTZhdinINmF2K/YqiB7MH0g2KfYsiB7MX0g2LHYpyDYr9ixINmF2KzZhdmI2Lkg2LPZvtix24wg2qnYsdiv2Ycg2KfbjNivLlwiLFxuICBjbGVhbkNhcHRpb246IFwi2b7Yp9qp2LPYp9iy24xcIixcbiAgY2xlYXJDYXB0aW9uOiBcItiu2KfZhNuMINqp2LHYr9mGXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcItin2YbYqtiu2KfYqCDZgdin24zZhFwiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCLYrdiw2YEg2KfbjNmGINmB2KfbjNmEXCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwi2KjZhNmHXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCLYrtuM2LFcIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwi2KLbjNinINmF24zYrtmI2KfZh9uM2K8g2KfbjNmGINmB2KfbjNmEINix2Kcg2b7Yp9qpINqp2YbbjNivOiB7MH0/XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCLYotuM2Kcg2YXbjNiu2YjYp9mH24zYryDYqtmF2KfZhSDZgdin24zZhCDZh9inINix2Kcg2b7Yp9qpINqp2YbbjNivP1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwi2LnZhtmI2KfZhiDYs9mI2KfZhFwiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJmYVwiXSA9IHBlcnNpYW5TdXJ2ZXlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wiZmFcIl0gPSBcItmB2KfYsdmS2LPZkNmJXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIHBvbGlzaFN1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCJXc3RlY3pcIixcbiAgcGFnZU5leHRUZXh0OiBcIkRhbGVqXCIsXG4gIGNvbXBsZXRlVGV4dDogXCJHb3Rvd2VcIixcbiAgcHJldmlld1RleHQ6IFwiUHJlbWllcmFcIixcbiAgZWRpdFRleHQ6IFwiRWR5Y2phXCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCJTdGFydFwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIklubmEgb2Rwb3dpZWTFuiAod3Bpc3opXCIsXG4gIG5vbmVJdGVtVGV4dDogXCJCcmFrXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIld5Ymllcnogd3N6eXN0a2llXCIsXG4gIHByb2dyZXNzVGV4dDogXCJTdHJvbmEgezB9IHogezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJaYXBpcyB7MH0geiB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcIk9kcG93aWVkemkgbmEgezB9L3sxfSBweXRhbmlhXCIsXG4gIGVtcHR5U3VydmV5OiBcIk5pZSBtYSB3aWRvY3pueWNoIHB5dGHFhC5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCJEemnEmWt1amVteSB6YSB3eXBlxYJuaWVuaWUgYW5raWV0eSFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcbiAgICBcIlogbmFzenljaCB6YXBpc8OzdyB3eW5pa2EsIMW8ZSB3eXBlxYJuacWCZcWbIGp1xbwgdMSZIGFua2lldMSZLlwiLFxuICBsb2FkaW5nU3VydmV5OiBcIlRyd2Egd2N6eXR5d2FuaWUgYW5raWV0eS4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJXeWJpZXJ6Li4uXCIsXG4gIHZhbHVlOiBcIldhcnRvxZvEh1wiLFxuICByZXF1aXJlZEVycm9yOiBcIlByb3N6xJkgb2Rwb3dpZWR6aWXEhyBuYSB0byBweXRhbmllLlwiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJQcm9zesSZIG9kcG93aWVkemllxIcgbmEgY28gbmFqbW5pZWogamVkbm8gcHl0YW5pZS5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJQcm9zesSZIG9kcG93aWVkemllxIcgbmEgd3N6eXN0a2llIHB5dGFuaWEuXCIsXG4gIG51bWVyaWNFcnJvcjogXCJXIHR5bSBwb2x1IG1vxbxuYSB3cGlzYcSHIHR5bGtvIGxpY3pieS5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCJQcm9zesSZIHdwaXNhxIcgY28gbmFqbW5pZWogezB9IHpuYWvDs3cuXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwiUHJvc3rEmSB3cGlzYcSHIG1uaWVqIG5pxbwgezB9IHpuYWvDs3cuXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwiUHJvc3rEmSB3cGlzYcSHIHdpxJljZWogbmnFvCB7MH0gaSBtbmllaiBuacW8IHsxfSB6bmFrw7N3LlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIlByb3N6xJkgdXp1cGXFgm5pxIcgcHJ6eW5ham1uaWVqIHswfSB3aWVyc3p5LlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJQcm9zesSZIHd5YnJhxIcgY28gbmFqbW5pZWogezB9IHBvenljamkuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIlByb3N6xJkgd3licmHEhyBuaWUgd2nEmWNlaiBuacW8IHswfSBwb3p5Y2ppLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiT2Rwb3dpZWTFuiAnezB9JyBwb3dpbm5hIGJ5xIcgd2nEmWtzemEgbHViIHLDs3duYSB7MX0gb3JheiBtbmllanN6YSBsdWIgcsOzd25hIHsyfVwiLFxuICBudW1lcmljTWluOiBcIk9kcG93aWVkxbogJ3swfScgcG93aW5uYSBiecSHIHdpxJlrc3phIGx1YiByw7N3bmEgezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiT2Rwb3dpZWTFuiAnezB9JyBwb3dpbm5hIGJ5xIcgbW5pZWpzemEgbHViIHLDs3duYSB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIlByb3N6xJkgcG9kYcSHIHByYXdpZMWCb3d5IGFkcmVzIGVtYWlsLlwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCJXeXJhxbxlbmllOiB7MH0gcG93aW5ubyB3cmFjYcSHICdwcmF3ZHppd2UnLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwixbvEhWRhbmllIHp3csOzY2nFgm8gYsWCxIVkICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwixbvEhWRhbmllIG5pZSB6d3LDs2NpxYJvIGRhbnljaCBhbGJvIMWbY2llxbxrYSBqZXN0IG5pZXByYXdpZMWCb3dhXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwiUm96bWlhciBwcnplc8WCYW5lZ28gcGxpa3UgbmllIG1vxbxlIHByemVrcmFjemHEhyB7MH0uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCJQcm9zesSZIHBvZGHEhyBpbm7EhSBvZHBvd2llZMW6LlwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwiVHJ3YSBwcnplbm9zemVuaWUgVHdvamVnbyBwbGlrdSwgcHJvc3rEmSBzcHLDs2Jvd2HEhyBwb25vd25pZSB6YSBraWxrYSBzZWt1bmQuXCIsXG4gIGxvYWRpbmdGaWxlOiBcIsWBYWRvd2FuaWUuLi5cIixcbiAgY2hvb3NlRmlsZTogXCJXeWJpZXJ6IHBsaWsoaSkuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcIk5pZSB3eWJyYW5vIMW8YWRuZWdvIHBsaWt1XCIsXG4gIGNvbmZpcm1EZWxldGU6IFwiQ2hjZXN6IHNrYXNvd2HEhyBuYWdyYW5pZT9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCJUYSB3YXJ0b8WbxIcgcG93aW5uYSBiecSHIHd5asSFdGtvd2EuXCIsXG4gIGFkZENvbHVtbjogXCJEb2RhaiBrb2x1bW7EmVwiLFxuICBhZGRSb3c6IFwiRG9kYWogd2llcnN6XCIsXG4gIHJlbW92ZVJvdzogXCJVc3XFhFwiLFxuICBhZGRQYW5lbDogXCJEb2RhaiBwYW5lbFwiLFxuICByZW1vdmVQYW5lbDogXCJVc3XFhFwiLFxuICBjaG9pY2VzX0l0ZW06IFwiZWxlbWVudFwiLFxuICBtYXRyaXhfY29sdW1uOiBcIktvbHVtbmFcIixcbiAgbWF0cml4X3JvdzogXCJXaWVyc3pcIixcbiAgc2F2aW5nRGF0YTogXCJaYXBpc3VqxJkgd3luaWtpIGFua2lldHkgbmEgc2Vyd2VyemUuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIld5c3TEhXBpxYIgYsWCxIVkIGkgd3luaWtpIG5pZSBtb2fFgnkgem9zdGHEhyB6YXBpc2FuZS5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiV3luaWtpIHpvc3RhxYJ5IHBvcHJhd25pZSB6YXBpc2FuZSFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIlNwcsOzYnVqIHBvbm93bmllXCIsXG4gIHRpbWVyTWluOiBcIm1pblwiLFxuICB0aW1lclNlYzogXCJzZWtcIixcbiAgdGltZXJTcGVudEFsbDogXCJTcMSZZHppxYJlxZsgezB9IG5hIHRlaiBzdHJvbmllIGEgdyBzdW1pZSB7MX0uXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIlNwxJlkemnFgmXFmyB7MH0gbmEgdGVqIHN0cm9uaWUuXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwiU3DEmWR6acWCZcWbIHcgc3VtaWUgezB9LlwiLFxuICB0aW1lckxpbWl0QWxsOiBcIlNwxJlkemnFgmXFmyB7MH0geiB7MX0gbmEgdGVqIHN0cm9uaWUgYSB3IHN1bWllIHsyfSB6IHszfS5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwiU3DEmWR6acWCZcWbIHswfSB6IHsxfSBuYSB0ZWogc3Ryb25pZVwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIlNwxJlkemnFgmXFmyB7MH0geiB7MX0uXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCJXeWN6ecWbxIdcIixcbiAgY2xlYXJDYXB0aW9uOiBcIkphc25lXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIld5YmllcnogcGxpa1wiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCJVc3XFhCB0ZW4gcGxpa1wiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIlRha1wiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiTmllXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIkplc3RlxZsgcGV3aWVuLCDFvGUgY2hjZXN6IHVzdW7EhcSHIHRlbiBwbGlrOiB7MH0/XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCJKZXN0ZcWbIHBld2llbiwgxbxlIGNoY2VzeiB1c3VuxIXEhyB3c3p5c3RraWUgcGxpa2k/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJUeXR1xYIgcHl0YW5pYVwiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJwbFwiXSA9IHBvbGlzaFN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJwbFwiXSA9IFwicG9sc2tpXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIHBvcnR1Z3Vlc2VCclN1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCJBbnRlcmlvclwiLFxuICBwYWdlTmV4dFRleHQ6IFwiUHLDs3hpbW9cIixcbiAgY29tcGxldGVUZXh0OiBcIkZpbmFsaXphclwiLFxuICBwcmV2aWV3VGV4dDogXCJQcsOpLXZpc3VhbGl6YcOnw6NvXCIsXG4gIGVkaXRUZXh0OiBcIkVkaXRhclwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwiQ29tZcOnYXJcIixcbiAgb3RoZXJJdGVtVGV4dDogXCJPdXRyb3MgKGRlc2NyZXZlcilcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIk5lbmh1bVwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJTZWxlY2lvbmFyIFRvZG9zXCIsXG4gIHByb2dyZXNzVGV4dDogXCJQw6FnaW5hIHswfSBkZSB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIlJlZ2lzdHJvIHswfSBkZSB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcIlJlc3Bvc3RhcyB7MH0vezF9IHBlcmd1bnRhc1wiLFxuICBlbXB0eVN1cnZleTogXCJOw6NvIGjDoSBww6FnaW5hIHZpc8OtdmVsIG91IHBlcmd1bnRhIG5hIHBlc3F1aXNhLlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIk9icmlnYWRvIHBvciBmaW5hbGl6YXIgYSBwZXNxdWlzYSFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcbiAgICBcIk5vc3NvcyByZWdpc3Ryb3MgbW9zdHJhbSBxdWUgdm9jw6ogasOhIGZpbmFsaXpvdSBhIHBlc3F1aXNhLlwiLFxuICBsb2FkaW5nU3VydmV5OiBcIkEgcGVzcXVpc2EgZXN0w6EgY2FycmVnYW5kby4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJTZWxlY2lvbmUuLi5cIixcbiAgdmFsdWU6IFwidmFsb3JcIixcbiAgcmVxdWlyZWRFcnJvcjogXCJQb3IgZmF2b3IsIHJlc3BvbmRhIGEgcGVyZ3VudGEuXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIlBvciBmYXZvciwgcmVzcG9uZGEgcGVsbyBtZW5vcyB1bWEgcGVyZ3VudGEuXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6XG4gICAgXCJQb3IgZmF2b3IsIHJlc3BvbmRhIGFzIHBlcmd1bnRhcyBlbSB0b2RhcyBhcyBsaW5oYXMuXCIsXG4gIG51bWVyaWNFcnJvcjogXCJPIHZhbG9yIGRldmUgc2VyIG51bcOpcmljby5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCJQb3IgZmF2b3IsIGluc2lyYSBwZWxvIG1lbm9zIHswfSBjYXJhY3RlcmVzLlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIlBvciBmYXZvciwgaW5zaXJhIG1lbm9zIGRlIHswfSBjYXJhY3RlcmVzLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcIlBvciBmYXZvciwgaW5zaXJhIG1haXMgZGUgezB9IGUgbWVub3MgZGUgezF9IGNhcmFjdGVyZXMuXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwiUHJlZW5jaGEgcGVsbyBtZW5vcyB7MH0gbGluaGFzLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJTZWxlY2lvbmUgcGVsbyBtZW5vcyB7MH0gb3DDp8O1ZXMuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIlBvciBmYXZvciwgc2VsZWNpb25lIG7Do28gbWFpcyBkbyBxdWUgezB9IG9ww6fDtWVzLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiTyAnezB9JyBkZXZlIHNlciBpZ3VhbCBvdSBzdXBlcmlvciBhIHsxfSBlIGlndWFsIG91IG1lbm9yIHF1ZSB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCJPICd7MH0nIGRldmUgc2VyIGlndWFsIG91IHN1cGVyaW9yIGEgezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiTyAnezB9JyBkZXZlIHNlciBpZ3VhbCBvdSBpbmZlcmlvciBhIHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwiUG9yIGZhdm9yLCBpbmZvcm1lIHVtIGUtbWFpbCB2w6FsaWRvLlwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCJBIGV4cHJlc3PDo286IHswfSBkZXZlIHJldG9ybmFyICd2ZXJkYWRlaXJvJy5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIkEgcmVxdWlzacOnw6NvIHJldG9ybm91IG8gZXJybyAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcIkEgcmVxdWlzacOnw6NvIG7Do28gcmV0b3Jub3UgZGFkb3Mgb3UgbyAnY2FtaW5obycgZGEgcmVxdWlzacOnw6NvIG7Do28gZXN0w6EgY29ycmV0b1wiLFxuICBleGNlZWRNYXhTaXplOiBcIk8gdGFtYW5obyBkbyBhcnF1aXZvIG7Do28gZGV2ZSBleGNlZGVyIHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlBvciBmYXZvciwgaW5mb3JtZSBvIG91dHJvIHZhbG9yLlwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwiU2V1IGFycXVpdm8gZXN0w6Egc2VuZG8gY2FycmVnYWRvLiBQb3IgZmF2b3IsIGFndWFyZGUgYWxndW5zIHNlZ3VuZG9zIGUgdGVudGUgbm92YW1lbnRlLlwiLFxuICBsb2FkaW5nRmlsZTogXCJDYXJyZWdhbmRvLi4uXCIsXG4gIGNob29zZUZpbGU6IFwiU2VsZWNpb25lIG8ocykgYXJxdWl2byhzKS4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwiTmVuaHVtIGFycXVpdm8gZXNjb2xoaWRvXCIsXG4gIGNvbmZpcm1EZWxldGU6IFwiVGVtIGNlcnRlemEgcXVlIGRlc2VqYSBkZWxldGFyP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIkVzc2UgdmFsb3IgZGV2ZSBzZXIgw7puaWNvLlwiLFxuICBhZGRDb2x1bW46IFwiQWRpY2lvbmFyIGNvbHVuYVwiLFxuICBhZGRSb3c6IFwiQWRpY2lvbmFyIGxpbmhhXCIsXG4gIHJlbW92ZVJvdzogXCJSZW1vdmVyIGxpbmhhXCIsXG4gIGFkZFBhbmVsOiBcIkFkaWNpb25hciBub3ZvXCIsXG4gIHJlbW92ZVBhbmVsOiBcIlJlbW92ZXJcIixcbiAgY2hvaWNlc19JdGVtOiBcIml0ZW1cIixcbiAgbWF0cml4X2NvbHVtbjogXCJDb2x1bmFcIixcbiAgbWF0cml4X3JvdzogXCJMaW5oYVwiLFxuICBzYXZpbmdEYXRhOiBcIk9zIHJlc3VsdGFkb3MgZXN0byBzZW5kbyBzYWx2b3Mgbm8gc2Vydmlkb3IuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIk9jb3JyZXUgdW0gZXJybyBlIG7Do28gZm9pIHBvc3PDrXZlbCBzYWx2YXIgb3MgcmVzdWx0YWRvcy5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiT3MgcmVzdWx0YWRvcyBmb3JhbSBzYWx2b3MgY29tIHN1Y2Vzc28hXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCJUZW50ZSBub3ZhbWVudGVcIixcbiAgdGltZXJNaW46IFwibWluXCIsXG4gIHRpbWVyU2VjOiBcInNlZ1wiLFxuICB0aW1lclNwZW50QWxsOiBcIlZvY8OqIGdhc3RvdSB7MH0gbmVzdGEgcMOhZ2luYSBlIHsxfSBubyB0b3RhbC5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwiVm9jw6ogZ2FzdG91IHswfSBuZXN0YSBww6FnaW5hLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIlZvY8OqIGdhc3RvdSB7MH0gbm8gdG90YWwuXCIsXG4gIHRpbWVyTGltaXRBbGw6IFwiVm9jw6ogZ2FzdG91IHswfSBkZSB7MX0gbmVzdGEgcMOhZ2luYSBlIHsyfSBkZSB7M30gbm8gdG90YWwuXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIlZvY8OqIGdhc3RvdSB7MH0gZGUgezF9IG5lc3RhIHDDoWdpbmEuXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwiVm9jw6ogZ2FzdG91IHswfSBkZSB7MX0gbm8gdG90YWwuXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCJMaW1wYXJcIixcbiAgY2xlYXJDYXB0aW9uOiBcIkxpbXBhclwiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJFc2NvbGhlciBhcnF1aXZvXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIlJlbW92ZXIgZXN0ZSBhcnF1aXZvXCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiU2ltXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOw6NvXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIlRlbSBjZXJ0ZXphIHF1ZSBkZXNlamEgcmVtb3ZlciBlc3RlIGFycXVpdm86IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIlRlbSBjZXJ0ZXphIHF1ZSBkZXNlamEgcmVtb3ZlciB0b2RvcyBvcyBhcnF1aXZvcz9cIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIlTDrXR1bG8gZGEgcXVlc3TDo29cIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wicHQtYnJcIl0gPSBwb3J0dWd1ZXNlQnJTdXJ2ZXlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wicHQtYnJcIl0gPSBcInBvcnR1Z3XDqnMgYnJhc2lsZWlyb1wiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBwb3J0dWd1ZXNlU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIkFudGVyaW9yXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJQcsOzeGltb1wiLFxuICBjb21wbGV0ZVRleHQ6IFwiRmluYWxpemFyXCIsXG4gIHByZXZpZXdUZXh0OiBcIlByw6ktdmlzdWFsaXphw6fDo29cIixcbiAgZWRpdFRleHQ6IFwiRWRpdGFyXCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCJDb21lw6dhclwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIk91dHJvcyAoZGVzY3JldmVyKVwiLFxuICBub25lSXRlbVRleHQ6IFwiTmVuaHVtXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIlNlbGVjaW9uYXIgVG9kb3NcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIlDDoWdpbmEgezB9IGRlIHsxfVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiUmVnaXN0byB7MH0gZGUgezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJSZXNwb3N0YXMgezB9L3sxfSBwZXJndW50YXNcIixcbiAgZW1wdHlTdXJ2ZXk6IFwiTsOjbyBow6EgcMOhZ2luYSB2aXPDrXZlbCBvdSBwZXJndW50YSBubyBxdWVzdGlvbsOhcmlvLlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIk9icmlnYWRvIHBvciBmaW5hbGl6YXIgbyBxdWVzdGlvbsOhcmlvIVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgIFwiT3Mgbm9zc29zIHJlZ2lzdG9zIG1vc3RyYW0gcXVlIGrDoSBmaW5hbGl6b3UgbyBxdWVzdGlvbsOhcmlvLlwiLFxuICBsb2FkaW5nU3VydmV5OiBcIk8gcXVlc3Rpb27DoXJpbyBlc3TDoSBhIGNhcnJlZ2FyLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIlNlbGVjaW9uZS4uLlwiLFxuICB2YWx1ZTogXCJ2YWxvclwiLFxuICByZXF1aXJlZEVycm9yOiBcIlBvciBmYXZvciwgcmVzcG9uZGEgw6AgcGVyZ3VudGEuXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIlBvciBmYXZvciwgcmVzcG9uZGEgcGVsbyBtZW5vcyBhIHVtYSBwZXJndW50YS5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjpcbiAgICBcIlBvciBmYXZvciwgcmVzcG9uZGEgw6BzIHBlcmd1bnRhcyBlbSB0b2RhcyBhcyBsaW5oYXMuXCIsXG4gIG51bWVyaWNFcnJvcjogXCJPIHZhbG9yIGRldmUgc2VyIG51bcOpcmljby5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCJQb3IgZmF2b3IsIGluc2lyYSBwZWxvIG1lbm9zIHswfSBjYXJhY3RlcmVzLlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIlBvciBmYXZvciwgaW5zaXJhIG1lbm9zIGRlIHswfSBjYXJhY3RlcmVzLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcIlBvciBmYXZvciwgaW5zaXJhIG1haXMgZGUgezB9IGUgbWVub3MgZGUgezF9IGNhcmFjdGVyZXMuXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwiUHJlZW5jaGEgcGVsbyBtZW5vcyB7MH0gbGluaGFzLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJTZWxlY2lvbmUgcGVsbyBtZW5vcyB7MH0gb3DDp8O1ZXMuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIlBvciBmYXZvciwgc2VsZWNpb25lIG5vIG3DoXhpbW8gezB9IG9ww6fDtWVzLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiTyAnezB9JyBkZXZlIHNlciBpZ3VhbCBvdSBzdXBlcmlvciBhIHsxfSBlIGlndWFsIG91IG1lbm9yIHF1ZSB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCJPICd7MH0nIGRldmUgc2VyIGlndWFsIG91IHN1cGVyaW9yIGEgezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiTyAnezB9JyBkZXZlIHNlciBpZ3VhbCBvdSBpbmZlcmlvciBhIHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwiUG9yIGZhdm9yLCBpbnNpcmEgdW0gZS1tYWlsIHbDoWxpZG8uXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIkEgZXhwcmVzc8OjbzogezB9IGRldmUgcmV0b3JuYXIgJ3ZlcmRhZGVpcm8nLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiTyBwZWRpZG8gcmV0b3Jub3UgbyBlcnJvICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwiTyBwZWRpZG8gbsOjbyByZXRvcm5vdSBkYWRvcyBvdSBvICdjYW1pbmhvJyBkbyBwZWRpZG8gbsOjbyBlc3TDoSBjb3JyZXRvXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwiTyB0YW1hbmhvIGRvIGFycXVpdm8gbsOjbyBkZXZlIGV4Y2VkZXIgezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiUG9yIGZhdm9yLCBpbnNpcmEgbyBvdXRybyB2YWxvci5cIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcIk8gc2V1IGZpY2hlaXJvIGVzdMOhIGEgY2FycmVnYXIuIFBvciBmYXZvciwgYWd1YXJkZSBhbGd1bnMgc2VndW5kb3MgZSB0ZW50ZSBub3ZhbWVudGUuXCIsXG4gIGxvYWRpbmdGaWxlOiBcIkEgY2FycmVnYXIuLi5cIixcbiAgY2hvb3NlRmlsZTogXCJTZWxlY2lvbmUgbyhzKSBhcnF1aXZvKHMpLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCJOZW5odW0gZmljaGVpcm8gZXNjb2xoaWRvXCIsXG4gIGNvbmZpcm1EZWxldGU6IFwiVGVtIGEgY2VydGV6YSBxdWUgZGVzZWphIGFwYWdhcj9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCJFc3RlIHZhbG9yIGRldmUgc2VyIMO6bmljby5cIixcbiAgYWRkQ29sdW1uOiBcIkFkaWNpb25hciBjb2x1bmFcIixcbiAgYWRkUm93OiBcIkFkaWNpb25hciBsaW5oYVwiLFxuICByZW1vdmVSb3c6IFwiUmVtb3ZlciBsaW5oYVwiLFxuICBhZGRQYW5lbDogXCJBZGljaW9uYXIgbm92b1wiLFxuICByZW1vdmVQYW5lbDogXCJSZW1vdmVyXCIsXG4gIGNob2ljZXNfSXRlbTogXCJpdGVtXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiQ29sdW5hXCIsXG4gIG1hdHJpeF9yb3c6IFwiTGluaGFcIixcbiAgc2F2aW5nRGF0YTogXCJPcyByZXN1bHRhZG9zIGVzdMOjbyBhIHNlciBndWFyZGFkb3Mgbm8gc2Vydmlkb3IuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIk9jb3JyZXUgdW0gZXJybyBlIG7Do28gZm9pIHBvc3PDrXZlbCBndWFyZGFyIG9zIHJlc3VsdGFkb3MuXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIk9zIHJlc3VsdGFkb3MgZm9yYW0gZ3VhcmRhZG9zIGNvbSBzdWNlc3NvIVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwiVGVudGUgbm92YW1lbnRlXCIsXG4gIHRpbWVyTWluOiBcIm1pblwiLFxuICB0aW1lclNlYzogXCJzZWdcIixcbiAgdGltZXJTcGVudEFsbDogXCJWb2PDqiBnYXN0b3UgezB9IG5lc3RhIHDDoWdpbmEgZSB7MX0gbm8gdG90YWwuXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIlZvY8OqIGdhc3RvdSB7MH0gbmVzdGEgcMOhZ2luYS5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCJWb2PDqiBnYXN0b3UgezB9IG5vIHRvdGFsLlwiLFxuICB0aW1lckxpbWl0QWxsOiBcIlZvY8OqIGdhc3RvdSB7MH0gZGUgezF9IG5lc3RhIHDDoWdpbmEgZSB7Mn0gZGUgezN9IG5vIHRvdGFsLlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCJWb2PDqiBnYXN0b3UgezB9IGRlIHsxfSBuZXN0YSBww6FnaW5hLlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIlZvY8OqIGdhc3RvdSB7MH0gZGUgezF9IG5vIHRvdGFsLlwiLFxuICBjbGVhbkNhcHRpb246IFwiTGltcGFyXCIsXG4gIGNsZWFyQ2FwdGlvbjogXCJMaW1wYXJcIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwiRXNjb2xoZXIgZmljaGVpcm9cIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwiUmVtb3ZlciBlc3RlIGZpY2hlaXJvXCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiU2ltXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOw6NvXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIlRlbSBhIGNlcnRlemEgcXVlIGRlc2VqYSByZW1vdmVyIGVzdGUgZmljaGVpcm86IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIlRlbSBhIGNlcnRlemEgcXVlIGRlc2VqYSByZW1vdmVyIHRvZG9zIG9zIGZpY2hlaXJvcz9cIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIlTDrXR1bG8gZGEgcXVlc3TDo29cIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wicHRcIl0gPSBwb3J0dWd1ZXNlU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcInB0XCJdID0gXCJwb3J0dWd1w6pzXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIHJvbWFuaWFuU3VydmV5U3RyaW5nczogYW55ID0ge1xuICBwYWdlUHJldlRleHQ6IFwiUHJlY2VkZW50XCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJVcm3Eg3RvclwiLFxuICBjb21wbGV0ZVRleHQ6IFwiRmluYWxpemFyZVwiLFxuICBwcmV2aWV3VGV4dDogXCJwcmV2aXp1YWxpemFyZVwiLFxuICBlZGl0VGV4dDogXCJFZGl0YcibaVwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwic3RhcnRcIixcbiAgb3RoZXJJdGVtVGV4dDogXCJBbHR1bChwcmVjaXphxaNpKVwiLFxuICBub25lSXRlbVRleHQ6IFwiTmljaSB1bnVsXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIlNlbGVjdGVhesSDIHRvdFwiLFxuICBwcm9ncmVzc1RleHQ6IFwiUGFnaW5hIHswfSBkaW4gezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCLDjm5yZWdpc3RyYXJlIHswfSBkaW4gezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJSxINzcHVuc3VyaSBsYSB7MH0gLyB7MX0gw65udHJlYsSDcmlcIixcbiAgZW1wdHlTdXJ2ZXk6IFwiTnUgc3VudCDDrm50cmVixINyaSBwZW50cnUgYWNlc3QgY2hlc3Rpb25hclwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIlbEgyBtdWzFo3VtaW0gcGVudHJ1IHRpbXB1bCBhY29yZGF0IVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgIFwiRGluIMOubnJlZ2lzdHLEg3JpbGUgbm9hc3RyZSByZWllc2UgY8SDIGHIm2kgY29tcGxldGF0IGRlamEgYWNlc3QgY2hlc3Rpb25hci5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJDaGVzdGlvbmFydWwgc2Ugw65uY2FyY8SDLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIkFsZWdlxaNpLi4uXCIsXG4gIHZhbHVlOiBcInZhbG9hcmVcIixcbiAgcmVxdWlyZWRFcnJvcjogXCJSxINzcHVuc3VsIGxhIGFjZWFzdMSDIMOubnRyZWJhcmUgZXN0ZSBvYmxpZ2F0b3JpdS5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiVsSDIHJ1Z8SDbSBzxIMgcsSDc3B1bmRlyJtpIGxhIGNlbCBwdcibaW4gbyDDrm50cmViYXJlLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlRvYXRlIHLEg3NwdW5zdXJpbGUgc3VudCBvYmxpZ2F0b3JpaVwiLFxuICBudW1lcmljRXJyb3I6IFwiUsSDc3B1bnN1bCB0cmVidWllIHPEgyBmaWUgbnVtZXJpYy5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCJUcmVidWllIHPEgyBpbnRyb2R1Y2XIm2kgbWluaW0gezB9IGNhcmFjdGVyZS5cIixcbiAgdGV4dE1heExlbmd0aDogXCJUcmVidWllIHPEgyBpbnRyb2R1Y2XIm2kgbWF4aW0gezB9IGNhcmFjdGVyZS5cIixcbiAgdGV4dE1pbk1heExlbmd0aDpcbiAgICBcIlRyZWJ1aWUgc8SDIGludHJvZHVjZcibaSBtYWkgbXVsdCBkZSB7MH0gyJlpIG1haSBwdcibaW4gZGUgezF9IGNhcmFjdGVyZS5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJUcmVidWllIHPEgyBjb21wbGV0YcibaSBtaW5pbSB7MH0gcsOibmR1cmkuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIlRyZWJ1aWUgc8SDIHNlbGVjdGHIm2kgbWluaW0gezB9IG9wxaNpdW5pLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJUcmVidWllIHPEgyBzZWxlY3RhyJtpIG1heGltIHswfSBvcMWjaXVuaS5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIlLEg3NwdW5zdWwgJ3swfScgdHJlYnVpZSBzxIMgZmllIG1haSBtYXJlIHNhdSBlZ2FsIGNhIHsxfSDFn8OuIG1haSBtaWMgc2F1IGVnYWwgY3UgezJ9XCIsXG4gIG51bWVyaWNNaW46IFwiUsSDc3B1bnN1bCAnezB9JyB0cmVidWllIHPEgyBmaWUgbWFpIG1hcmUgc2F1IGVnYWwgY2EgezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiUsSDc3B1bnN1bCAnezB9JyB0cmVidWllIHPEgyBmaWUgbWFpIG1pYyBzYXUgZWdhbCBjYSB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIlRyZWJ1aWUgc8SDIGludHJvZHVjZcWjaSBvIGFkcmVzYSBkZSBlbWFpbCB2YWxpZMSDLlwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCJFeHByZXNpYTogezB9IGFyIHRyZWJ1aSBzxIMgcmV0dXJuZXplIOKAnmFkZXbEg3JhdOKAnS5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIlJlcXVlc3QtdWwgYSByZXR1cm5hdCBlcm9hcmVhICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwiUmVxdWVzdC11bCBudSBhIHJldHVybmF0IGRhdGUgc2F1IHByb3ByaWV0YXRlYSAncGF0aCcgZXN0ZSBpbmNvcmVjdMSDXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwiRGltZW5zaXVuZWEgZmnFn2llcnVsdWkgbnUgdHJlYnVpZSBzxIMgZGVwxIPFn2Vhc2PEgyB7MH0uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCJUcmVidWllIHPEgyBjb21wbGV0YcibaSBjw6JtcHVsICdBbHR1bCcuXCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgXCJGaciZaWVydWwgZHVtbmVhdm9hc3RyxIMgZXN0ZSDDrm4gY3VycyBkZSDDrm5jxINyY2FyZS4gVsSDIHJ1Z8SDbSBhyJl0ZXB0YcibaSBjw6J0ZXZhIHNlY3VuZGUgyJlpIHJldmVuacibaSBhcG9pLlwiLFxuICBsb2FkaW5nRmlsZTogXCJTZSDDrm5jYXJjxIMuLi5cIixcbiAgY2hvb3NlRmlsZTogXCJBbGVnZSBmaXNpZXJlbGUuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcIk5pY2l1biBmaciZaWVyIGFsZXNcIixcbiAgY29uZmlybURlbGV0ZTogXCJTdW50ZcibaSBzaWd1ciBjxIMgZG9yacibaSBzxIMgyJl0ZXJnZcibaSDDrm5yZWdpc3RyYXJlYT9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCJWYWxvYXJlYSB0cmVidWllIHPEgyBmaWUgdW5pY8SDLlwiLFxuICBhZGRDb2x1bW46IFwiQWTEg3VnYcibaSBjb2xvYW7Eg1wiLFxuICBhZGRSb3c6IFwiQWTEg3VnYXJlIHLDom5kXCIsXG4gIHJlbW92ZVJvdzogXCLImHRlcmdlcmVcIixcbiAgYWRkUGFuZWw6IFwiQWTEg3VnYXJlXCIsXG4gIHJlbW92ZVBhbmVsOiBcIsiYdGVyZ2VyZVwiLFxuICBjaG9pY2VzX0l0ZW06IFwib3DIm2l1bmVcIixcbiAgbWF0cml4X2NvbHVtbjogXCJDb2xvYW7Eg1wiLFxuICBtYXRyaXhfcm93OiBcIlLDom5kXCIsXG4gIHNhdmluZ0RhdGE6IFwiUmV6dWx0YXRlbGUgc3VudCDDrm4gY3VycyBkZSBzYWx2YXJlLi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCJBIGludGVydmVuaXQgbyBlcm9hcmUsIHJlenVsdGF0ZWxlIG51IGF1IHB1dHV0IGZpIHNhbHZhdGUuXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIlJlenVsdGF0ZWxlIGF1IGZvc3Qgc2FsdmF0ZSBjdSBzdWNjZXMhXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCLDjm5jZXJjYcibaSBkaW4gbm91XCIsXG4gIHRpbWVyTWluOiBcIm1pblwiLFxuICB0aW1lclNlYzogXCJzZWNcIixcbiAgdGltZXJTcGVudEFsbDogXCJByJtpIHBldHJlY3V0IHswfSBwZSBhY2Vhc3TEgyBwYWdpbsSDIMiZaSB7MX0gw65uIHRvdGFsLlwiLFxuICB0aW1lclNwZW50UGFnZTogXCJByJtpIHBldHJlY3V0IHswfSBwZSBhY2Vhc3TEgyBwYWdpbsSDLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIkHIm2kgcGV0cmVjdXQgezB9IMOubiB0b3RhbC5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcIkHIm2kgcGV0cmVjdXQgezB9IGRpbiB7MX0gcGUgYWNlYXN0xIMgcGFnaW7EgyDImWkgezJ9IGRpbiB7M30gw65uIHRvdGFsLlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCJByJtpIHBldHJlY3V0IHswfSBkaW4gezF9IHBlIGFjZWFzdMSDIHBhZ2luxIMuXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwiQcibaSBwZXRyZWN1dCB7MH0gZGluIHsxfSDDrm4gdG90YWwuXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCJDdXJhdFwiLFxuICBjbGVhckNhcHRpb246IFwiY2xhclwiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJBbGVnZSBmaciZaWVydWxcIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwiRWxpbWluYcibaSBhY2VzdCBmaciZaWVyXCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiZGFcIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIk51XCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIlNpZ3VyIGRvcmnIm2kgc8SDIGVsaW1pbmHIm2kgYWNlc3QgZmnImWllcjogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiU2lndXIgZG9yacibaSBzxIMgZWxpbWluYcibaSB0b2F0ZSBmaciZaWVyZWxlP1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiVGl0bHVsIGludHJlYmFyaWlcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wicm9cIl0gPSByb21hbmlhblN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJyb1wiXSA9IFwicm9tw6JuxINcIjtcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgcnVzc2lhblN1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCLQndCw0LfQsNC0XCIsXG4gIHBhZ2VOZXh0VGV4dDogXCLQlNCw0LvQtdC1XCIsXG4gIGNvbXBsZXRlVGV4dDogXCLQk9C+0YLQvtCy0L5cIixcbiAgcHJldmlld1RleHQ6IFwi0J/RgNC10LTQstCw0YDQuNGC0LXQu9GM0L3Ri9C5INC/0YDQvtGB0LzQvtGC0YBcIixcbiAgZWRpdFRleHQ6IFwi0KDQtdC00LDQutGC0LjRgNC+0LLQsNC90LjQtVwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwi0J3QsNGH0LDRgtGMXCIsXG4gIG90aGVySXRlbVRleHQ6IFwi0JTRgNGD0LPQvtC1ICjQv9C+0LbQsNC70YPQudGB0YLQsCwg0L7Qv9C40YjQuNGC0LUpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCLQndC10YJcIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwi0JLRi9Cx0YDQsNGC0Ywg0LLRgdGRXCIsXG4gIHByb2dyZXNzVGV4dDogXCLQodGC0YDQsNC90LjRhtCwIHswfSDQuNC3IHsxfVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwi0JfQsNC/0LjRgdGMIHswfSDQuNC3IHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwi0J7RgtCy0LXRgtGLINC90LAgezB9L3sxfdCy0L7Qv9GA0L7RgdGLXCIsXG4gIGVtcHR5U3VydmV5OiBcItCd0LXRgiDQvdC4INC+0LTQvdC+0LPQviDQstC+0L/RgNC+0YHQsC5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCLQkdC70LDQs9C+0LTQsNGA0LjQvCDQktCw0YEg0LfQsCDQt9Cw0L/QvtC70L3QtdC90LjQtSDQsNC90LrQtdGC0YshXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCLQktGLINGD0LbQtSDQv9GA0L7RhdC+0LTQuNC70Lgg0Y3RgtC+0YIg0L7Qv9GA0L7RgS5cIixcbiAgbG9hZGluZ1N1cnZleTogXCLQl9Cw0LPRgNGD0LfQutCwINGBINGB0LXRgNCy0LXRgNCwLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcItCS0YvQsdGA0LDRgtGMLi4uXCIsXG4gIHZhbHVlOiBcItC30L3QsNGH0LXQvdC40LVcIixcbiAgcmVxdWlyZWRFcnJvcjogXCLQn9C+0LbQsNC70YPQudGB0YLQsCwg0L7RgtCy0LXRgtGM0YLQtSDQvdCwINCy0L7Qv9GA0L7RgS5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwi0J/QvtC20LDQu9GD0LnRgdGC0LAsINC+0YLQstC10YLRjNGC0LUg0L/QviDQutGA0LDQudC90LXQuSDQvNC10YDQtSDQvdCwINC+0LTQuNC9INCy0L7Qv9GA0L7RgS5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCLQn9C+0LbQsNC70YPQudGB0YLQsCwg0L7RgtCy0LXRgtGM0YLQtSDQvdCwINCy0L7Qv9GA0L7RgdGLINCyINC60LDQttC00L7QuSDRgdGC0YDQvtC60LUuXCIsXG4gIG51bWVyaWNFcnJvcjogXCLQntGC0LLQtdGCINC00L7Qu9C20LXQvSDQsdGL0YLRjCDRh9C40YHQu9C+0LwuXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwi0J/QvtC20LDQu9GD0LnRgdGC0LAg0LLQstC10LTQuNGC0LUg0LHQvtC70YzRiNC1IHswfSDRgdC40LzQstC+0LvQvtCyLlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcItCf0L7QttCw0LvRg9C50YHRgtCwINCy0LLQtdC00LjRgtC1INC80LXQvdGM0YjQtSB7MH0g0YHQuNC80LLQvtC70L7Qsi5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCLQn9C+0LbQsNC70YPQudGB0YLQsCDQstCy0LXQtNC40YLQtSDQsdC+0LvRjNGI0LUgezB9INC4INC80LXQvdGM0YjQtSB7MX0g0YHQuNC80LLQvtC70L7Qsi5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCLQn9C+0LbQsNC70YPQudGB0YLQsCwg0LfQsNC/0L7Qu9C90LjRgtC1INC90LUg0LzQtdC90YzRiNC1IHswfSDRgdGC0YDQvtC6LlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCLQn9C+0LbQsNC70YPQudGB0YLQsCwg0LLRi9Cx0LXRgNC40YLQtSDRhdC+0YLRjyDQsdGLIHswfSDQstCw0YDQuNCw0L3RgtC+0LIuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcItCf0L7QttCw0LvRg9C50YHRgtCwLCDQstGL0LHQtdGA0LjRgtC1INC90LUg0LHQvtC70LXQtSB7MH0g0LLQsNGA0LjQsNC90YLQvtCyLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiJ3swfScg0LTQvtC70LbQvdC+INCx0YvRgtGMINC90LUg0LzQtdC90YzRiNC1INGH0LXQvCB7MX0sINC4INC90LUg0LHQvtC70YzRiNC1INGH0LXQvCB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCInezB9JyDQtNC+0LvQttC90L4g0LHRi9GC0Ywg0L3QtSDQvNC10L3RjNGI0LUg0YfQtdC8IHsxfVwiLFxuICBudW1lcmljTWF4OiBcIid7MH0nINC00L7Qu9C20L3QviDQsdGL0YLRjCDQvdC1INCx0L7Qu9GM0YjQtSDRh9C10LwgezF9XCIsXG4gIGludmFsaWRFbWFpbDogXCLQn9C+0LbQsNC70YPQudGB0YLQsCwg0LLQstC10LTQuNGC0LUg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90YvQuSDQsNC00YDQtdGBINGN0LvQtdC60YLRgNC+0L3QvdC+0Lkg0L/QvtGH0YLRiy5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwi0JLRi9GA0LDQttC10L3QuNC1IHswfSDQtNC+0LvQttC90L4g0LLQvtC30LLRgNCw0YnQsNGC0YwgJ3RydWUnLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwi0JfQsNC/0YDQvtGBINCy0LXRgNC90YPQuyDQvtGI0LjQsdC60YMgJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XG4gICAgXCLQntGC0LLQtdGCINC90LAg0LfQsNC/0YDQvtGBINC/0YDQuNGI0LXQuyDQv9GD0YHRgtC+0Lkg0LjQu9C4INGB0LLQvtC50YHRgtCy0L4gJ3BhdGgnINGD0LrQsNC30LDQvdC+INC90LXQstC10YDQvdC+XCIsXG4gIGV4Y2VlZE1heFNpemU6IFwi0KDQsNC30LzQtdGAINGE0LDQudC70LAg0L3QtSDQtNC+0LvQttC10L0g0L/RgNC10LLRi9GI0LDRgtGMIHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcItCf0L7QttCw0LvRg9C50YHRgtCwLCDQstCy0LXQtNC40YLQtSDQtNCw0L3QvdGL0LUg0LIg0L/QvtC70LUgJ9CU0YDRg9Cz0L7QtSdcIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcItCS0LDRiCDRhNCw0LnQuyDQt9Cw0LPRgNGD0LbQsNC10YLRgdGPLiDQn9C+0LTQvtC20LTQuNGC0LUg0L3QtdGB0LrQvtC70YzQutC+INGB0LXQutGD0L3QtCDQuCDQv9C+0L/RgNC+0LHRg9C50YLQtSDRgdC90L7QstCwLlwiLFxuICBsb2FkaW5nRmlsZTogXCLQl9Cw0LPRgNGD0LfQutCwLi4uXCIsXG4gIGNob29zZUZpbGU6IFwi0JLRi9Cx0LXRgNC40YLQtSDRhNCw0LnQuyjRiykuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcItCk0LDQudC7INC90LUg0LLRi9Cx0YDQsNC9XCIsXG4gIGNvbmZpcm1EZWxldGU6IFwi0JLRiyDRgtC+0YfQvdC+INGF0L7RgtC40YLQtSDRg9C00LDQu9C40YLRjCDQt9Cw0L/QuNGB0Yw/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwi0K3RgtC+INC30L3QsNGH0LXQvdC40LUg0LTQvtC70LbQvdC+INCx0YvRgtGMINGD0L3QuNC60LDQu9GM0L3Ri9C8LlwiLFxuICBhZGRDb2x1bW46IFwi0JTQvtCx0LDQstC40YLRjCDQutC+0LvQvtC90LrRg1wiLFxuICBhZGRSb3c6IFwi0JTQvtCx0LDQstC40YLRjCDRgdGC0YDQvtC60YNcIixcbiAgcmVtb3ZlUm93OiBcItCj0LTQsNC70LjRgtGMXCIsXG4gIGFkZFBhbmVsOiBcItCU0L7QsdCw0LLQuNGC0Ywg0L3QvtCy0YPRjlwiLFxuICByZW1vdmVQYW5lbDogXCLQo9C00LDQu9C40YLRjFwiLFxuICBjaG9pY2VzX0l0ZW06IFwi0JLQsNGA0LjQsNC90YJcIixcbiAgbWF0cml4X2NvbHVtbjogXCLQmtC+0LvQvtC90LrQsFwiLFxuICBtYXRyaXhfcm93OiBcItCh0YLRgNC+0LrQsFwiLFxuICBzYXZpbmdEYXRhOiBcItCg0LXQt9GD0LvRjNGC0LDRgtGLINGB0L7RhdGA0LDQvdGP0Y7RgtGB0Y8g0L3QsCDRgdC10YDQstC10YAuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcItCf0YDQvtC40LfQvtGI0LvQsCDQvtGI0LjQsdC60LAsINGA0LXQt9GD0LvRjNGC0LDRgiDQvdC1INCx0YvQuyDRgdC+0YXRgNCw0L3RkdC9LlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCLQoNC10LfRg9C70YzRgtCw0YIg0YPRgdC/0LXRiNC90L4g0YHQvtGF0YDQsNC90ZHQvSFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcItCf0L7Qv9GA0L7QsdC+0LLQsNGC0Ywg0YHQvdC+0LLQsFwiLFxuICB0aW1lck1pbjogXCLQvNC40L1cIixcbiAgdGltZXJTZWM6IFwi0YHQtdC6XCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwi0JLRiyDQv9C+0YLRgNCw0YLQuNC70LggezB9INC90LAg0Y3RgtC+0Lkg0YHRgtGA0LDQvdC40YbQtSDQuCB7MX0g0LLRgdC10LPQvi5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwi0JLRiyDQv9C+0YLRgNCw0YLQuNC70LggezB9INC90LAg0Y3RgtC+0Lkg0YHRgtGA0LDQvdC40YbQtS5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCLQktGLINC/0L7RgtGA0LDRgtC40LvQuCB7MH0g0LIg0YLQtdGH0LXQvdC40LUg0YLQtdGB0YLQsC5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcItCS0Ysg0L/QvtGC0YDQsNGC0LjQu9C4IHswfSDQuNC3IHsxfSDQvdCwINGN0YLQvtC5INGB0YLRgNCw0L3QuNGG0LUg0LggezJ9INC40LcgezN9INC00LvRjyDQstGB0LXQs9C+INGC0LXRgdGC0LAuXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcItCS0Ysg0L/QvtGC0YDQsNGC0LjQu9C4IHswfSDQuNC3IHsxfSDQvdCwINGN0YLQvtC5INGB0YLRgNCw0L3QuNGG0LUuXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwi0JLRiyDQv9C+0YLRgNCw0YLQuNC70LggezB9INC40LcgezF9INC00LvRjyDQstGB0LXQs9C+INGC0LXRgdGC0LAuXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCLQntGH0LjRgdGC0LjRgtGMXCIsXG4gIGNsZWFyQ2FwdGlvbjogXCLQntGH0LjRgdGC0LjRgtGMXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcItCS0YvQsdC10YDQuNGC0LUg0YTQsNC50LtcIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwi0KPQtNCw0LvQuNGC0Ywg0YTQsNC50LtcIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCLQlNCwXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCLQndC10YJcIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwi0JLRiyDRg9Cy0LXRgNC10L3Riywg0YfRgtC+INGF0L7RgtC40YLQtSDRg9C00LDQu9C40YLRjCDRjdGC0L7RgiDRhNCw0LnQuzogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwi0JLRiyDRg9Cy0LXRgNC10L3Riywg0YfRgtC+INGF0L7RgtC40YLQtSDRg9C00LDQu9C40YLRjCDQstGB0LUg0YTQsNC50LvRiz9cIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcItCd0LDQt9Cy0LDQvdC40LUg0LLQvtC/0YDQvtGB0LBcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wicnVcIl0gPSBydXNzaWFuU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcInJ1XCJdID0gXCLRgNGD0YHRgdC60LjQuVwiO1xuIiwiLy9VbmNvbW1lbnQgdGhpcyBsaW5lIG9uIGNyZWF0aW5nIGEgdHJhbnNsYXRpb24gZmlsZVxuaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBzZXJiaWFuU3RyaW5ncyA9IHtcbiAgICBwYWdlUHJldlRleHQ6IFwiTmF6YWRcIixcbiAgICBwYWdlTmV4dFRleHQ6IFwiRGFsamVcIixcbiAgICBjb21wbGV0ZVRleHQ6IFwiWmF2csWhaVwiLFxuICAgIHByZXZpZXdUZXh0OiBcIlByZWdsZWRhalwiLFxuICAgIGVkaXRUZXh0OiBcIkl6bWVuaVwiLFxuICAgIHN0YXJ0U3VydmV5VGV4dDogXCJaYXBvxI1uaVwiLFxuICAgIG90aGVySXRlbVRleHQ6IFwiRHJ1Z28gKHVwacWhaSlcIixcbiAgICBub25lSXRlbVRleHQ6IFwiTmnFoXRhXCIsXG4gICAgc2VsZWN0QWxsSXRlbVRleHQ6IFwiSXphYmVyaSBzdmVcIixcbiAgICBwcm9ncmVzc1RleHQ6IFwiU3RyYW5pY2EgezB9IG9kIHsxfVwiLFxuICAgIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJVcGlzIHswfSBvZCB7MX1cIixcbiAgICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiT2Rnb3ZvcmVubyBuYSB7MH0vezF9IHBpdGFuamFcIixcbiAgICBlbXB0eVN1cnZleTogXCJOZW1hIHZpZGxqaXZpaCBzdHJhbmljYSBpbGkgcGl0YW5qYSB1IGFua2V0aS5cIixcbiAgICBjb21wbGV0aW5nU3VydmV5OiBcIkh2YWxhIG5hIHBvcHVuamF2YW5qdSBhbmtldGUhXCIsXG4gICAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcbiAgICAgIFwiUHJlbWEgbmHFoWltIHBvZGFjaW1hLCB2ZcSHIHN0ZSBwb3B1bmlsaSBvdnUgYW5rZXR1LlwiLFxuICAgIGxvYWRpbmdTdXJ2ZXk6IFwiVcSNaXRhdmFtIGFua2V0dS4uLlwiLFxuICAgIG9wdGlvbnNDYXB0aW9uOiBcIkl6YWJlcmkuLi5cIixcbiAgICB2YWx1ZTogXCJ2cmVkbm9zdFwiLFxuICAgIHJlcXVpcmVkRXJyb3I6IFwiTW9saW1vIG9kZ292b3JpdGUgbmEgb3ZvIHBpdGFuamUuXCIsXG4gICAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiTW9saW1vIG9kZ292b3JpdGUgbmEgYmFyIGplZG5vIHBpdGFuamUuXCIsXG4gICAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJNb2xpbW8gb2Rnb3Zvcml0ZSBuYSBwaXRhbmphIHUgc3ZpbSByZWRvdmltYS5cIixcbiAgICBudW1lcmljRXJyb3I6IFwiVnJlZG5vc3QgYmkgdHJlYmFsbyBkYSBidWRlIG51bWVyacSNa2EuXCIsXG4gICAgbWluRXJyb3I6IFwiVnJlZG5vc3QgbmUgYmkgdHJlYmFsbyBkYSBidWRlIG1hbmphIG9kIHswfVwiLFxuICAgIG1heEVycm9yOiBcIlZyZWRub3N0IG5lIGJpIHRyZWJhbG8gZGEgYnVkZSB2ZcSHYSBvZCB7MH1cIixcbiAgICB0ZXh0TWluTGVuZ3RoOiBcIk1vbGltbyB1bmVzaXRlIGJhciB7MH0gem5hayhvdilhLlwiLFxuICAgIHRleHRNYXhMZW5ndGg6IFwiTW9saW1vIHVuZXNpdGUgbmFqdmnFoWUgezB9IHpuYWsob3YpYS5cIixcbiAgICB0ZXh0TWluTWF4TGVuZ3RoOlxuICAgICAgXCJNb2xpbW8gdW5lc2l0ZSBuYWptYW5qZSB7MH0gaSBuZSB2acWhZSBvZCB7MX0gem5hayhvdilhLlwiLFxuICAgIG1pblJvd0NvdW50RXJyb3I6IFwiTW9saW1vIHBvcHVuaXRlIG5ham1hbmplIHswfSByZWQob3ZhKS5cIixcbiAgICBtaW5TZWxlY3RFcnJvcjogXCJNb2xpbW8gaXphYmVyaXRlIG5ham1hbmplIHswfSBvcGNpamEvZS5cIixcbiAgICBtYXhTZWxlY3RFcnJvcjogXCJNb2xpbW8gaXphYmVyaXRlIG5hanZpxaFlIHswfSBvcGNpamEvZS5cIixcbiAgICBudW1lcmljTWluTWF4OiBcIid7MH0nIGJpIHRyZWJhbG8gZGEgYnVkZSBuYWptYW5qZSB7MX0gaSBuYWp2acWhZSB7Mn1cIixcbiAgICBudW1lcmljTWluOiBcIid7MH0nIGJpIHRyZWJhbG8gZGEgYnVkZSBuYWptYW5qZSB7MX1cIixcbiAgICBudW1lcmljTWF4OiBcIid7MH0nIGJpIHRyZWJhbG8gZGEgYnVkZSBuYWp2acWhZSB7MX1cIixcbiAgICBpbnZhbGlkRW1haWw6IFwiTW9saW1vIHVuZXNpdGUgaXNwcmF2bnUgZS1tYWlsIGFkcmVzdS5cIixcbiAgICAvLyB2cmF0aXRpIFwidHJ1ZVwiID9cbiAgICBpbnZhbGlkRXhwcmVzc2lvbjogXCJJenJhejogezB9IGJpIHRyZWJhbG8gZGEgYnVkZSB0YcSNYW4uXCIsXG4gICAgdXJsUmVxdWVzdEVycm9yOiBcIlphaHRldiBqZSBuYWnFoWFvIG5hIGdyZcWha3UgJ3swfScuIHsxfVwiLFxuICAgIHVybEdldENob2ljZXNFcnJvcjpcbiAgICAgIFwiWmFodGV2IG5pamUgcHJvbmHFoWFvIHBvZGF0a2UsIGlsaSBqZSBwdXRhbmphIG5ldGHEjW5hXCIsXG4gICAgZXhjZWVkTWF4U2l6ZTogXCJWZWxpxI1pbmEgZmFqbGEgbmUgYmkgdHJlYmFsbyBkYSBwcmVsYXppIHswfS5cIixcbiAgICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiTW9saW1vIHVuZXNpdGUgZHJ1Z3UgdnJlZG5vc3QuXCIsXG4gICAgdXBsb2FkaW5nRmlsZTpcbiAgICAgIFwiRmFqbCBzZSDFoWFsamUuIE1vbGltbyBzYcSNZWthanRlIG5la28gdnJlbWUgaSBwb2t1xaFhanRlIHBvbm92by5cIixcbiAgICBsb2FkaW5nRmlsZTogXCJVxI1pdGF2YW5qZS4uLlwiLFxuICAgIGNob29zZUZpbGU6IFwiSXphYmVyaXRlIGZhamxvdmUuLi5cIixcbiAgICBub0ZpbGVDaG9zZW46IFwiTmlqZSBpemFicmFuIG5pamVkYW4gZmFqbFwiLFxuICAgIGNvbmZpcm1EZWxldGU6IFwiRGEgbGkgxb5lbGl0ZSBkYSBpemJyacWhZXRlIHVub3M/XCIsXG4gICAga2V5RHVwbGljYXRpb25FcnJvcjogXCJPdmEgdnJlZG5vc3QgdHJlYmEgZGEgYnVkZSBqZWRpbnN0dmVuYS5cIixcbiAgICBhZGRDb2x1bW46IFwiRG9kYWoga29sb251XCIsXG4gICAgYWRkUm93OiBcIkRvZGFqIHJlZFwiLFxuICAgIHJlbW92ZVJvdzogXCJVa2xvbmlcIixcbiAgICBlbXB0eVJvd3NUZXh0OiBcIk5lbWEgcmVkb3ZhLlwiLFxuICAgIGFkZFBhbmVsOiBcIkRvZGFqIG5vdm9cIixcbiAgICByZW1vdmVQYW5lbDogXCJVa2xvbmlcIixcbiAgICBjaG9pY2VzX0l0ZW06IFwic3RhdmthXCIsXG4gICAgbWF0cml4X2NvbHVtbjogXCJLb2xvbmFcIixcbiAgICBtYXRyaXhfcm93OiBcIlJlZFwiLFxuICAgIG11bHRpcGxldGV4dF9pdGVtbmFtZTogXCJ0ZWtzdFwiLFxuICAgIHNhdmluZ0RhdGE6IFwiVSB0b2t1IGplIMSNdXZhbmplIHBvZGF0YWthIG5hIHNlcnZlcnUuLi5cIixcbiAgICBzYXZpbmdEYXRhRXJyb3I6IFwiRG/FoWxvIGplIGRvIGdyZcWha2UgaSByZXp1bHRhdGkgbmlzdSBzYcSNdXZhbmkuXCIsXG4gICAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiUmV6dWx0YXRpIHN1IHVzcGXFoW5vIHNhxI11dmFuaSFcIixcbiAgICBzYXZlQWdhaW5CdXR0b246IFwiUG9rdcWhYWp0ZSBwb25vdm9cIixcbiAgICB0aW1lck1pbjogXCJtaW5cIixcbiAgICB0aW1lclNlYzogXCJzZWtcIixcbiAgICB0aW1lclNwZW50QWxsOiBcIlByb3ZlbGkgc3RlIHswfSBuYSBvdm9qIHN0cmFuaWNpIGkgezF9IHVrdXBuby5cIixcbiAgICB0aW1lclNwZW50UGFnZTogXCJQcm92ZWxpIHN0ZSB7MH0gbmEgb3ZvaiBzdHJhbmljaS5cIixcbiAgICB0aW1lclNwZW50U3VydmV5OiBcIlByb3ZlbGkgc3RlIHswfSB1a3Vwbm8uXCIsXG4gICAgdGltZXJMaW1pdEFsbDpcbiAgICAgIFwiUHJvdmVsaSBzdGUgezB9IG9kIHsxfSBuYSBvdm9qIHN0cmFuaWNpIGkgezJ9IG9kIHszfSB1a3Vwbm8uXCIsXG4gICAgdGltZXJMaW1pdFBhZ2U6IFwiUHJvdmVsaSBzdGUgezB9IG9kIHsxfSBuYSBvdm9qIHN0cmFuaWNpLlwiLFxuICAgIHRpbWVyTGltaXRTdXJ2ZXk6IFwiUHJvdmVsaSBzdGUgezB9IG9kIHsxfSB1a3Vwbm8uXCIsXG4gICAgY2xlYW5DYXB0aW9uOiBcIk/EjWlzdGlcIixcbiAgICBjbGVhckNhcHRpb246IFwiUG9uacWhdGlcIixcbiAgICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJJemFiZXJpIGZhamxcIixcbiAgICByZW1vdmVGaWxlQ2FwdGlvbjogXCJVa2xvbmkgb3ZhaiBmYWpsXCIsXG4gICAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJEYVwiLFxuICAgIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOZVwiLFxuICAgIGNvbmZpcm1SZW1vdmVGaWxlOiBcIkRhIGxpIHN0ZSBzaWd1cm5pIGRhIMW+ZWxpdGUgZGEgdWtsb25pdGUgb3ZhaiBmYWpsOiB7MH0/XCIsXG4gICAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIkRhIGxpIHN0ZSBzaWd1cm5pIGRhIMW+ZWxpdGUgZGEgdWtsb25pdGUgc3ZlIGZhamxvdmU/XCIsXG4gICAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIk5hc2xvdiBwaXRhbmphXCIsXG4gICAgbW9kYWxDYW5jZWxCdXR0b25UZXh0OiBcIk90a2HFvmlcIixcbiAgICBtb2RhbEFwcGx5QnV0dG9uVGV4dDogXCJQcmltZW5pXCIsXG4gIH07XG4gIFxuICAvL1VuY29tbWVudCB0aGVzZSB0d28gbGluZXMgb24gY3JlYXRpbmcgYSB0cmFuc2xhdGlvbiBmaWxlLiBZb3Ugc2hvdWxkIHJlcGxhY2UgXCJlblwiIGFuZCBlblN0cmluZ3Mgd2l0aCB5b3VyIGxvY2FsZSAoXCJmclwiLCBcImRlXCIgYW5kIHNvIG9uKSBhbmQgeW91ciB2YXJpYWJsZS5cbiAgc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJyc1wiXSA9IHNlcmJpYW5TdHJpbmdzO1xuICBzdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJyc1wiXSA9IFwiU3Jwc2tpXCI7XG4gICIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgc2ltcGxpZmllZENoaW5lc2VTdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwi5LiK5LiA6aG1XCIsXG4gIHBhZ2VOZXh0VGV4dDogXCLkuIvkuIDpobVcIixcbiAgY29tcGxldGVUZXh0OiBcIuaPkOS6pOmXruWNt1wiLFxuICBwcmV2aWV3VGV4dDogXCLpooTop4hcIixcbiAgZWRpdFRleHQ6IFwi57yW6L6RXCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCLlvIDlp4vpl67ljbdcIixcbiAgb3RoZXJJdGVtVGV4dDogXCLloavlhpnlhbbku5bnrZTmoYhcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIuaXoFwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCLpgInmi6nlhajpg6hcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIuesrCB7MH0g6aG1LCDlhbEgezF9IOmhtVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiezB9IG9mIHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwi56ysIHswfS97MX0g6aKYXCIsXG4gIGVtcHR5U3VydmV5OiBcIumXruWNt+S4reayoeaciemXrumimOaIlumhtemdolwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIuaEn+iwouaCqOeahOWPguS4jiFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTogXCLkvaDlt7LlrozmiJDpl67ljbcuXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwi6Zeu5Y235q2j5Zyo5Yqg6L295LitLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIuivt+mAieaLqS4uLlwiLFxuICB2YWx1ZTogXCLlgLxcIixcbiAgcmVxdWlyZWRFcnJvcjogXCLor7floavlhpnmraTpl67pophcIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwi6Iez5bCR5Zue562U5LiA6aKYLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIuivt+Whq+WGmeaJgOacieihjOS4remXrumimFwiLFxuICBudW1lcmljRXJyb3I6IFwi562U5qGI5b+F6aG75piv5Liq5pWw5a2XXCIsXG4gIG1pbkVycm9yOiBcIuivpeWAvOS4jeiDveWwj+S6jiB7MH1cIixcbiAgbWF4RXJyb3I6IFwi6K+l5YC85LiN6IO95aSn5LqOIHswfVwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIuetlOahiOmVv+W6puiHs+WwkSB7MH0g5Liq5a2X56ymXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwi562U5qGI6ZW/5bqm5LiN6IO96LaF6L+HIHswfSDkuKrlrZfnrKZcIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCLnrZTmoYjplb/luqblv4XpobvlnKggezB9IC0gezF9IOS4quWtl+espuS5i+mXtFwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIuacgOWwkemcgOimgeWhq+WGmSB7MH0g6KGM562U5qGIXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIuacgOWwkemcgOimgemAieaLqSB7MH0g6aG5562U5qGIXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIuacgOWkmuWPquiDvemAieaLqSB7MH0g6aG5562U5qGIXCIsXG4gIG51bWVyaWNNaW5NYXg6IFwi562U5qGIICd7MH0nIOW/hemhu+Wkp+S6juetieS6jiB7MX0g5LiU5bCP5LqO562J5LqOIHsyfVwiLFxuICBudW1lcmljTWluOiBcIuetlOahiCAnezB9JyDlv4XpobvlpKfkuo7nrYnkuo4gezF9XCIsXG4gIG51bWVyaWNNYXg6IFwi562U5qGIICd7MH0nIOW/hemhu+Wwj+S6juetieS6jiB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIuivt+i+k+WFpeacieaViOeahCBFbWFpbCDlnLDlnYBcIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwi5YWs5byPOiB7MH0g5peg5pWILlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwi6L295YWl6YCJ6aG55pe25Y+R55Sf6ZSZ6K+vICd7MH0nOiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOiBcIuacquiDvei9veWFpeacieaViOeahOmAiemhueaIluivt+axguWPguaVsOi3r+W+hOacieivr1wiLFxuICBleGNlZWRNYXhTaXplOiBcIuaWh+S7tuWkp+Wwj+S4jeiDvei2hei/hyB7MH1cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIuivt+WujOaIkOWFtuS7lumXrumimFwiLFxuICB1cGxvYWRpbmdGaWxlOiBcIuaWh+S7tuS4iuS8oOS4rS4uLiDor7fogJDlv4PnrYnlvoXlh6Dnp5LlkI7ph43or5VcIixcbiAgbG9hZGluZ0ZpbGU6IFwi5Yqg6L29Li4uXCIsXG4gIGNob29zZUZpbGU6IFwi6YCJ5oup5paH5Lu2Li4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCLmnKrpgInmi6nmlofku7ZcIixcbiAgY29uZmlybURlbGV0ZTogXCLliKDpmaTorrDlvZU/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwi5Li76ZSu5LiN6IO96YeN5aSNXCIsXG4gIGFkZENvbHVtbjogXCLmt7vliqDliJdcIixcbiAgYWRkUm93OiBcIua3u+WKoOihjFwiLFxuICByZW1vdmVSb3c6IFwi5Yig6Zmk562U5qGIXCIsXG4gIGVtcHR5Um93c1RleHQ6IFwi5peg5YaF5a65XCIsXG4gIGFkZFBhbmVsOiBcIuaWsOa3u1wiLFxuICByZW1vdmVQYW5lbDogXCLliKDpmaRcIixcbiAgY2hvaWNlc19JdGVtOiBcIumAiemhuVwiLFxuICBtYXRyaXhfY29sdW1uOiBcIuWIl1wiLFxuICBtYXRyaXhfcm93OiBcIuihjFwiLFxuICBtdWx0aXBsZXRleHRfaXRlbW5hbWU6IFwi5paH5pysXCIsXG4gIHNhdmluZ0RhdGE6IFwi5q2j5Zyo5bCG57uT5p6c5L+d5a2Y5Yiw5pyN5Yqh5ZmoLi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCLlnKjkv53lrZjnu5Pmnpzov4fnqIvkuK3lj5HnlJ/kuobplJnor6/vvIznu5PmnpzmnKrog73kv53lrZhcIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwi57uT5p6c5L+d5a2Y5oiQ5YqfIVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwi6K+36YeN6K+VXCIsXG4gIHRpbWVyTWluOiBcIuWIhlwiLFxuICB0aW1lclNlYzogXCLnp5JcIixcbiAgdGltZXJTcGVudEFsbDogXCLmnKzpobXnlKjml7YgezB9IOaAu+iuoeeUqOaXtnsxfSAuXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIuacrOmhteeUqOaXtnswfSAuXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwi5oC76K6h55So5pe2IHswfSAuXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgXCLmnKzpobXnlKjml7YgezB9IOWFsSB7MX3vvIwg5oC76K6h55So5pe2IHsyfSDlhbEgezN9IC5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwi5pys6aG155So5pe2IHswfSDlhbEgezF9IC5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCLmgLvorqHnlKjml7YgezB9IOWFsSB7MX0uXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCLmuIXnkIZcIixcbiAgY2xlYXJDYXB0aW9uOiBcIua4hemZpFwiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCLpgInmi6nmlofku7ZcIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwi56e76Zmk5paH5Lu2XCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwi5pivXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCLlkKZcIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwi5Yig6Zmk5paH5Lu2OiB7MH0/XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCLliKDpmaTmiYDmnInmlofku7Y/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCLmoIfpophcIixcbiAgbW9kYWxDYW5jZWxCdXR0b25UZXh0OiBcIuWPlua2iFwiLFxuICBtb2RhbEFwcGx5QnV0dG9uVGV4dDogXCLnoa7lrppcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiemgtY25cIl0gPSBzaW1wbGlmaWVkQ2hpbmVzZVN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJ6aC1jblwiXSA9IFwi566A5L2T5Lit5paHXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIHNwYW5pc2hTdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwiQW50ZXJpb3JcIixcbiAgcGFnZU5leHRUZXh0OiBcIlNpZ3VpZW50ZVwiLFxuICBjb21wbGV0ZVRleHQ6IFwiQ29tcGxldGFyXCIsXG4gIHByZXZpZXdUZXh0OiBcIlZpc3RhIHByZXZpYVwiLFxuICBlZGl0VGV4dDogXCJFZGl0YVwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwiQ29taWVuemFcIixcbiAgb3RoZXJJdGVtVGV4dDogXCJPdHJvIChkZXNjcmliYSlcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIk5pbmd1bm9cIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwiU2VsZWNjaW9uYXIgdG9kb1wiLFxuICBwcm9ncmVzc1RleHQ6IFwiUMOhZ2luYSB7MH0gZGUgezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJSZWdpc3RybyB7MH0gZGUgezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJSZXNwb25kacOzIGEgezB9L3sxfSBwcmVndW50YXNcIixcbiAgZW1wdHlTdXJ2ZXk6IFwiTm8gaGF5IHDDoWdpbmEgdmlzaWJsZSBvIHByZWd1bnRhIGVuIGxhIGVuY3Vlc3RhLlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIkdyYWNpYXMgcG9yIGNvbXBsZXRhciBsYSBlbmN1ZXN0YSFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcbiAgICBcIk51ZXN0cm9zIHJlZ2lzdHJvcyBtdWVzdHJhbiBxdWUgeWEgaGEgY29tcGxldGFkbyBlc3RhIGVuY3Vlc3RhLlwiLFxuICBsb2FkaW5nU3VydmV5OiBcIkxhIGVuY3Vlc3RhIGVzdMOhIGNhcmdhbmRvLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIlNlbGVjY2lvbmUuLi5cIixcbiAgdmFsdWU6IFwidmFsb3JcIixcbiAgcmVxdWlyZWRFcnJvcjogXCJQb3IgZmF2b3IgY29udGVzdGUgbGEgcHJlZ3VudGEuXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIlBvciBmYXZvciwgcmVzcG9uZGEgYWwgbWVub3MgdW5hIHByZWd1bnRhLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlBvciBmYXZvciBjb250ZXN0ZSBsYXMgcHJlZ3VudGFzIGVuIGNhZGEgaGlsZXJhLlwiLFxuICBudW1lcmljRXJyb3I6IFwiTGEgZXN0aW1hY2nDs24gZGViZSBzZXIgbnVtw6lyaWNhLlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIlBvciBmYXZvciBlbnRyZSBwb3IgbG8gbWVub3MgezB9IHPDrW1ib2xvcy5cIixcbiAgdGV4dE1heExlbmd0aDogXCJQb3IgZmF2b3IgZW50cmUgbWVub3MgZGUgezB9IHPDrW1ib2xvcy5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCJQb3IgZmF2b3IgZW50cmUgbcOhcyBkZSB7MH0geSBtZW5vcyBkZSB7MX0gc8OtbWJvbG9zLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIlBvciBmYXZvciBsbGVuZSBwb3IgbG8gbWVub3MgezB9IGhpbGVyYXMuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIlBvciBmYXZvciBzZWxlY2Npb25lIHBvciBsbyBtZW5vcyB7MH0gdmFyaWFudGVzLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJQb3IgZmF2b3Igc2VsZWNjaW9uZSBubyBtw6FzIGRlIHswfSB2YXJpYW50ZXMuXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCJFbCAnezB9JyBkZWJlIGRlIHNlciBpZ3VhbCBvIG3DoXMgZGUgezF9IHkgaWd1YWwgbyBtZW5vcyBkZSB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCJFbCAnezB9JyBkZWJlIHNlciBpZ3VhbCBvIG3DoXMgZGUgezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiRWwgJ3swfScgZGViZSBzZXIgaWd1YWwgbyBtZW5vcyBkZSB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIlBvciBmYXZvciBhZ3JlZ3VlIHVuIGNvcnJlbyBlbGVjdHLDs25pY28gdsOhbGlkby5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiTGEgZXhwcmVzacOzbjogezB9IGRlYmVyw61hIGRldm9sdmVyICd2ZXJkYWRlcm8nLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiTGEgc29saWNpdHVkIHJlZ3Jlc8OzIGVycm9yICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwiTGEgc29saWNpdHVkIHJlZ3Jlc8OzIHZhY8OtbyBkZSBkYXRhIG8gbGEgcHJvcGllZGFkICd0cmF5ZWN0b3JpYScgbm8gZXMgY29ycmVjdGFcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJFbCB0YW1hw7FvIGRlbCBhcmNoaXZvIG5vIGRlYmUgZGUgZXhjZWRlciB7MH0uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCJQb3IgZmF2b3IgYWdyZWd1ZSBsYSBvdHJhIGVzdGltYWNpw7NuLlwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwiU3UgYXJjaGl2byBzZSBlc3TDoSBzdWJpZW5kby4gUG9yIGZhdm9yIGVzcGVyZSB1bm9zIHNlZ3VuZG9zIGUgaW50ZW50ZSBkZSBudWV2by5cIixcbiAgbG9hZGluZ0ZpbGU6IFwiQ2FyZ2FuZG8uLi5cIixcbiAgY2hvb3NlRmlsZTogXCJFbGlqYSBhcmNoaXZvKHMpLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCJObyBzZSBoYSBlbGVnaWRvIG5pbmfDum4gYXJjaGl2b1wiLFxuICBjb25maXJtRGVsZXRlOiBcIsK/UXVpZXJlcyBib3JyYXIgZWwgcmVnaXN0cm8/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiRXN0ZSB2YWxvciBkZWJlIHNlciDDum5pY28uXCIsXG4gIGFkZENvbHVtbjogXCJBw7FhZGlyIGNvbHVtbmFcIixcbiAgYWRkUm93OiBcIkFncmVndWUgdW5hIGhpbGVyYVwiLFxuICByZW1vdmVSb3c6IFwiRWxpbWluYXIgdW5hIGhpbGVyYVwiLFxuICBhZGRQYW5lbDogXCJBw7FhZGlyIG51ZXZvXCIsXG4gIHJlbW92ZVBhbmVsOiBcIlJldGlyZVwiLFxuICBjaG9pY2VzX0l0ZW06IFwiYXJ0w61jdWxvXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiQ29sdW1uYVwiLFxuICBtYXRyaXhfcm93OiBcIkhpbGVyYVwiLFxuICBzYXZpbmdEYXRhOiBcIkxvcyByZXN1bHRhZG9zIHNlIGVzdMOhbiBndWFyZGFuZG8gZW4gZWwgc2Vydmlkb3IuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIkxvcyByZXN1bHRhZG9zIHNlIGVzdMOhbiBndWFyZGFuZG8gZW4gZWwgc2Vydmlkb3IuLi5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiwqFMb3MgcmVzdWx0YWRvcyBzZSBndWFyZGFyb24gY29uIMOpeGl0byFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIkludMOpbnRhbG8gZGUgbnVldm8uXCIsXG4gIHRpbWVyTWluOiBcIm1pblwiLFxuICB0aW1lclNlYzogXCJzZWNcIixcbiAgdGltZXJTcGVudEFsbDogXCJIYXMgZ2FzdGFkbyB7MH0gZW4gZXN0YSBww6FnaW5hIHkgezF9IGVuIHRvdGFsLlwiLFxuICB0aW1lclNwZW50UGFnZTogXCJVc3RlZCBoYSBwYXNhZG8gezB9IGVuIGVzdGEgcMOhZ2luYS5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCJIYXMgZ2FzdGFkbyBlbiB0b3RhbC5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcIkhhcyBnYXN0YWRvIHswfSBkZSB7MX0gZW4gZXN0YSBww6FnaW5hIHkgezJ9IGRlIHszfSBlbiB0b3RhbC5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwiSGFzIGdhc3RhZG8gezB9IGRlIHsxfSBlbiBlc3RhIHDDoWdpbmEuXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwiVXN0ZWQgaGEgZ2FzdGFkbyB7MH0gZGUgezF9IGVuIHRvdGFsLlwiLFxuICBjbGVhbkNhcHRpb246IFwiTGltcGlhXCIsXG4gIGNsZWFyQ2FwdGlvbjogXCJEZXNwZWplblwiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJFbGlqYSBlbCBhcmNoaXZvXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIkVsaW1pbmEgZXN0ZSBhcmNoaXZvXCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiU8OtXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOb1wiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCLCv0VzdMOhcyBzZWd1cm8gZGUgcXVlIHF1aWVyZXMgZWxpbWluYXIgZXN0ZSBhcmNoaXZvOiB7MH0/XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCLCv0VzdMOhcyBzZWd1cm8gZGUgcXVlIHF1aWVyZXMgZWxpbWluYXIgdG9kb3MgbG9zIGFyY2hpdm9zP1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiVMOtdHVsbyBkZSBsYSBwcmVndW50YVwiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJlc1wiXSA9IHNwYW5pc2hTdXJ2ZXlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wiZXNcIl0gPSBcImVzcGHDsW9sXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIHN3YWhpbGlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwiSWxpeW90YW5ndWxpYVwiLFxuICBwYWdlTmV4dFRleHQ6IFwiSWZ1YXRheW9cIixcbiAgY29tcGxldGVUZXh0OiBcIkthbWlsaVwiLFxuICBwcmV2aWV3VGV4dDogXCJIYWtpa2lcIixcbiAgZWRpdFRleHQ6IFwiSGFyaXJpXCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCJBbnphXCIsXG4gIG90aGVySXRlbVRleHQ6IFwiTnlpbmdpbmUgKGVsZXphKVwiLFxuICBub25lSXRlbVRleHQ6IFwiSGFrdW5hXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIkNoYWd1YSBab3RlXCIsXG4gIHByb2dyZXNzVGV4dDogXCJVa3VyYXNhIHswfSB3YSB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIlJla29kaSB7MH0geWEgezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJZYWxpeW9qaWJpd2EgezB9L3sxfSBtYXN3YWxpXCIsXG4gIGVtcHR5U3VydmV5OiBcIkhha3VuYSB1a3VyYXNhIHVuYW9vbmVrYW5hIGF1IHN3YWxpIGthdGlrYSB1dGFmaXRpLlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIkFzYW50aSBrd2Ega3VrYW1pbGlzaGEgdXRhZml0aSFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcbiAgICBcIlJlY29kaSB6ZXR1IHppbmF0dW9ueWVzaGEgdGF5YXJpIHVtZWthbWlsaXNoYSB1dGFmaXRpLlwiLFxuICBsb2FkaW5nU3VydmV5OiBcIlR1bmFhbmRhYSB1dGFmaXRpLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIkNoYWd1YS4uLlwiLFxuICB2YWx1ZTogXCJ0aGFtYW5pXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwiVGFmYWRoYWxpIGppYnUgaGlsaSBzd2FsaS5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiVGFmYWRoYWxpIGppYnUgc3dhbGkgYW5nYWxhdSBtb2phLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlRhZmFkaGFsaSBqaWJ1IG1hc3dhbGkga2F0aWthIHNhZnUgem90ZS5cIixcbiAgbnVtZXJpY0Vycm9yOiBcIlRoYW1hbmkgaW5hcGFzd2Ega3V3YSB5YSBuYW1iYXJpLlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIlRhZmFkaGFsaSBpbmdpemEgYW5nYWxhdXswfSBodXNpa2EuXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwiVGFmYWRoYWxpIGluZ2l6YSBpc2lvemlkaSB7MH0gaHVzaWthLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOlxuICAgIFwiVGFmYWRoYWxpIGluZ2l6YSBraXdhbmdvIHphaWRpIHlhIHswfSBuYSBraXNpY2hvcHVuZ3VhIHsxfSBodXNpa2EuXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwiVGFmYWRoYWxpIGphemEgaXNpb3B1bmd1YSB7MH0gc2FmdS5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwiVGFmYWRoYWxpIGNoYWd1YSBhbmdhbGF1IHswfSBsYWhhamEuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIlRhZmFkaGFsaSBjaGFuZ3VhIGlzaW96aWRpIHswfSBsYWhhamEuXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCIgJ3swfScgaW5hcGFzd2Ega3V3YSBzYXdhIGF1IHphaWRpIHlhIHsxfSBuYSBzYXdhIGF1IGNoaW5pIHlhIHsyfVwiLFxuICBudW1lcmljTWluOiBcIiAnezB9J2luYXBhc3dhIGt1d2Egc2F3YSBhdSB6YWlkaSB5YSB7MX1cIixcbiAgbnVtZXJpY01heDogXCIgJ3swfSdpbmFwYXN3YSBrdXdhIHNhd2EgYXUgY2hpbmkgeWEgezF9XCIsXG4gIGludmFsaWRFbWFpbDogXCJUYWZhZGhhbGkgaW5naXphIGFud2FuaSBoYWxhbGkgeWEgYmFydWEtcGVwZS5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiVXNlbWk6ezB9IGluYXBhc3dhIGt1cnVkaSAna3dlbGknLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiT21iaSBsaW5hIGtvc2EgJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XG4gICAgXCJPbWJpIGxpbGlydWRpc2hhIGRhdGEgdHVwdSBhdSB0aGUgJ3BhdGgnIG1hbGkgeWEgbmppYSBzaW8gc2FoaWhpXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwiU2FpemkgeWEgZmFpbGkgaGFpcGFzd2kga3V6aWRpIHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlRhZmFkaGFsaSBpbmdpemEgdGhhbWFuaSBueWluZ2luZS5cIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcIkZhaWxpIHlha28gaW5hcGFraWEuVGFmYWRoYWxpIHN1YmlyaSBzZWt1bmRlIGthZGhhYSBuYSB1amFyaWJ1IHRlbmEuXCIsXG4gIGxvYWRpbmdGaWxlOiBcIkluYXBha2lhLi4uXCIsXG4gIGNob29zZUZpbGU6IFwiQ2hhZ3VhIGZhaWxpLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCJIdWphY2hhZ3VhIGZhaWxpXCIsXG4gIGNvbmZpcm1EZWxldGU6IFwiSmUhIFVuYXRha2Ega3VmdXRhIHJla29kaT9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCJUaGFtYW5pIGhpaSBpbmFwYXN3YSBrdXdhIHlhIGtpcGVrZWUuXCIsXG4gIGFkZENvbHVtbjogXCJPbmdlemEgS29sYW11XCIsXG4gIGFkZFJvdzogXCJPbmdlemEgc2FmdVwiLFxuICByZW1vdmVSb3c6IFwiVG9hXCIsXG4gIGFkZFBhbmVsOiBcIk9uZ2V6YSBtcHlhXCIsXG4gIHJlbW92ZVBhbmVsOiBcIlRvYVwiLFxuICBjaG9pY2VzX0l0ZW06IFwia2l0dVwiLFxuICBtYXRyaXhfY29sdW1uOiBcIktvbGFtdVwiLFxuICBtYXRyaXhfcm93OiBcIlNhZnVcIixcbiAgc2F2aW5nRGF0YTogXCJNYXRva2VvIHlhbWVoaWZhZGhpd2Ega3dhIHNldmEuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIktvc2EgbGltZXRva2VhIG5hIGhhdHVrdXdlemEga3VoaWZhZGhpIG1hdG9rZW8uXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIk1hdG9rZW8geWFtZWhpZmFkaGl3YSFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIkphcmlidSB0ZW5hXCIsXG4gIHRpbWVyTWluOiBcImRha2lrYVwiLFxuICB0aW1lclNlYzogXCJzZWt1bmRlXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwiVW1ldHVtaWEgezB9IGt3ZW55ZSB1a3VyYXNhIGh1dSBuYSB7MX0ga3dhIGp1bWxhLlwiLFxuICB0aW1lclNwZW50UGFnZTogXCJVbWV0dW1pYSB7MH0ga3dlbnllIHVrdXJhc2EgaHV1LlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIlVtZXR1bWlhIHswfSBrd2EganVtbGEuXCIsXG4gIHRpbWVyTGltaXRBbGw6IFwiVW1ldHVtaWEgezB9IHlhIHsxfSBrd2VueWUgdWt1cmFzYSBodXUgezJ9IHdhIHszfSBrd2EganVtbGEuXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIlVtZXR1bWlhIHswfSB5YSB7MX0ga3dlbnllIHVrdXJhc2EgaHV1LlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIlVtZXR1bWlhIHswfSB5YSB7MX0ga3dhIGp1bWxhLlwiLFxuICBjbGVhbkNhcHRpb246IFwiU2FmaXNoYVwiLFxuICBjbGVhckNhcHRpb246IFwiT25kb2FcIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwiQ2hhZ3VhIGZhaWxpXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIk9uZG9hIGZhaWxpXCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiTmRpb1wiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiSGFwYW5hXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIkplISBVbmEgdWhha2lrYSBrdXdhIHVuYXRha2Ega3VvbmRvYSBmYWlsaSBoaWk6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIkplISBVbmEgdWhha2lrYSBrdXdhIHVuYXRha2Ega3VvbmRvYSBmYWlsaSB6b3RlP1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiS2ljaHdhIGNoYSBTd2FsaVwiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJzd1wiXSA9IHN3YWhpbGlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wic3dcIl0gPSBcInN3YWhpbGlcIjtcbiIsIi8vQ3JlYXRlIGJ5IE1hdHRpYXMgQXNwbHVuZFxuaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBzd2VkaXNoU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIkbDtnJlZ8OlZW5kZVwiLFxuICBwYWdlTmV4dFRleHQ6IFwiTsOkc3RhXCIsXG4gIGNvbXBsZXRlVGV4dDogXCJGw6RyZGlnXCIsXG4gIHByZXZpZXdUZXh0OiBcIkbDtnJoYW5kc3Zpc25pbmdcIixcbiAgZWRpdFRleHQ6IFwiUmVkaWdlcmFcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIlN0YXJ0XCIsXG4gIG90aGVySXRlbVRleHQ6IFwiQW5uYXQgKGJlc2tyaXYpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCJJbmdlblwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJWw6RsaiBhbGxhXCIsXG4gIHByb2dyZXNzVGV4dDogXCJTaWRhIHswfSBhdiB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIlNwZWxhIGluIHswfSBhdiB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcIkJlc3ZhcmFkZSB7MH0gLyB7MX0gZnLDpWdvclwiLFxuICBlbXB0eVN1cnZleTogXCJEZXQgZmlubnMgaW5nZW4gc3lubGlnIHNpZGEgZWxsZXIgZnLDpWdhIGkgZW5rw6R0ZW4uXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiVGFjayBmw7ZyIGF0dCBkdSBnZW5vbWbDtnJ0IGVua8OkdGVuISFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcbiAgICBcIlbDpXJhIHJlZ2lzdGVyIHZpc2FyIGF0dCBkdSByZWRhbiBoYXIgc2x1dGbDtnJ0IGRlbm5hIHVuZGVyc8O2a25pbmcuXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiRW5rw6R0ZW4gbGFkZGFzLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIlbDpGxqLi4uXCIsXG4gIHZhbHVlOiBcInbDpHJkZVwiLFxuICByZXF1aXJlZEVycm9yOiBcIlZhciB2w6RubGlnIGJlc3ZhcmEgZnLDpWdhbi5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiVsOkbmxpZ2VuIHN2YXJhIHDDpSBtaW5zdCBlbiBmcsOlZ2EuXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiVmFyIHbDpG5saWcgYmVzdmFyYSBmcsOlZ29ybmEgcMOlIGFsbGEgcmFkZXIuXCIsXG4gIG51bWVyaWNFcnJvcjogXCJWw6RyZGV0IHNrYSB2YXJhIG51bWVyaXNrdC5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCJWYXIgdsOkbmxpZyBhbmdlIG1pbnN0IHswfSB0ZWNrZW4uXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwiQW5nZSBmw6RycmUgw6RuIHswfSB0ZWNrZW4uXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwiQW5nZSBtZXIgw6RuIHswfSBvY2ggZsOkcnJlIMOkbiB7MX0gdGVja2VuLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIlZhciB2w6RubGlnIGZ5bGwgaSBtaW5zdCB7MH0gcmFkZXIuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIlZhciB2w6RubGlnIHbDpGxqIMOldG1pbnN0b25lIHswfSB2YXJpYW50ZXIuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIlZhciB2w6RubGlnIHbDpGxqIGludGUgZmxlciDDpG4gezB9IHZhcmlhbnRlci5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIid7MH0nIHNrYSB2YXJhIGxpa2EgbWVkIGVsbGVyIG1lciDDpG4gezF9IHNhbXQgbGlrYSBtZWQgZWxsZXIgbWluZHJlIMOkbiB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCInezB9JyBza2EgdmFyYSBsaWthIG1lZCBlbGxlciBtZXIgw6RuIHsxfVwiLFxuICBudW1lcmljTWF4OiBcIid7MH0nIHNrYSB2YXJhIGxpa2EgbWVkIGVsbGVyIG1pbmRyZSDDpG4gezF9XCIsXG4gIGludmFsaWRFbWFpbDogXCJWYXIgdsOkbmxpZyBhbmdlIGVuIGtvcnJla3QgZS1wb3N0YWRyZXNzLlwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCJVdHRyeWNrZXQ6IHswfSBza2EgcmV0dXJuZXJhICd0cnVlJy5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIkbDtnJmcsOlZ2FuIHJldHVybmVyYWRlIGZlbGV0ICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwiQW50aW5nZW4gcmV0dXJuZXJhZGUgZsO2cmZyw6VnYW4gaW5nZW4gZGF0YSBlbGxlciBzw6Ugw6RyIGVnZW5za2FwZW4gJ3BhdGgnIGludGUga29ycmVrdFwiLFxuICBleGNlZWRNYXhTaXplOiBcIkZpbHN0b3JsZWtlbiBmw6VyIGVqIMO2dmVyc3RpZ2EgezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiVmFyIHbDpG5saWcgYW5nZSBkZXQgYW5kcmEgdsOkcmRldC5cIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcIkRpbiBmaWwgbGFkZGFzIHVwcC4gVmFyIHbDpG5saWcgdsOkbnRhIG7DpWdyYSBzZWt1bmRlciBvY2ggZsO2cnPDtmsgc2VkYW4gaWdlbi5cIixcbiAgbG9hZGluZ0ZpbGU6IFwiTMOkc2VyIGluLi4uXCIsXG4gIGNob29zZUZpbGU6IFwiVsOkbGogZmlsIChlcikgLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCJJbmdlbiBmaWwgdmFsZFwiLFxuICBjb25maXJtRGVsZXRlOiBcIlZpbGwgZHUgcmFkZXJhIHBvc3Rlbj9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCJEZXR0YSB2w6RyZGUgc2thIHZhcmEgdW5pa3QuXCIsXG4gIGFkZENvbHVtbjogXCJMw6RnZyB0aWxsIGtvbHVtblwiLFxuICBhZGRSb3c6IFwiTMOkZ2cgdGlsbCByYWRcIixcbiAgcmVtb3ZlUm93OiBcIlRhIGJvcnRcIixcbiAgYWRkUGFuZWw6IFwiTMOkZ2cgdGlsbCBueVwiLFxuICByZW1vdmVQYW5lbDogXCJUYSBib3J0XCIsXG4gIGNob2ljZXNfSXRlbTogXCJBcnRpa2VsXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiS29sdW1uXCIsXG4gIG1hdHJpeF9yb3c6IFwiUmFkXCIsXG4gIHNhdmluZ0RhdGE6IFwiUmVzdWx0YXRlbiBzcGFyYXMgcMOlIHNlcnZlcm4gLi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCJFdHQgZmVsIGludHLDpGZmYWRlIG9jaCB2aSBrdW5kZSBpbnRlIHNwYXJhIHJlc3VsdGF0ZW4uXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIlJlc3VsdGF0ZW4gc3BhcmFkZXMgZnJhbWfDpW5nc3Jpa3QhXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCJGw7Zyc8O2ayBpZ2VuXCIsXG4gIHRpbWVyTWluOiBcIm1pblwiLFxuICB0aW1lclNlYzogXCJzZWtcIixcbiAgdGltZXJTcGVudEFsbDogXCJEdSBoYXIgc3BlbmRlcmF0IHswfSBww6UgZGVuIGjDpHIgc2lkYW4gb2NoIHsxfSB0b3RhbHQuXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIkR1IGhhciBzcGVuZGVyYXQgezB9IHDDpSBkZW4gaMOkciBzaWRhbi5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCJEdSBoYXIgc3BlbmRlcmF0IHswfSB0b3RhbHQuXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgXCJEdSBoYXIgc3BlbmRlcmF0IHswfSBhdiB7MX0gcMOlIGRlbiBow6RyIHNpZGFuIG9jaCB7Mn0gYXYgezN9IHRvdGFsdC5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwiRHUgaGFyIHNwZW5kZXJhdCB7MH0gYXYgezF9IHDDpSBkZW4gaMOkciBzaWRhbi5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJEdSBoYXIgc3BlbmRlcmF0IHswfSBhdiB7MX0gdG90YWx0LlwiLFxuICBjbGVhbkNhcHRpb246IFwiUmVuYVwiLFxuICBjbGVhckNhcHRpb246IFwiS2xhclwiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJWw6RsaiBGSUxcIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwiVGEgYm9ydCBkZW4gaMOkciBmaWxlblwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIkphXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOZWpcIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwiw4RyIGR1IHPDpGtlciBww6UgYXR0IGR1IHZpbGwgdGEgYm9ydCBkZW4gaMOkciBmaWxlbjogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiw4RyIGR1IHPDpGtlciBww6UgYXR0IGR1IHZpbGwgdGEgYm9ydCBhbGxhIGZpbGVyP1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiRnLDpWdldGl0ZWxcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wic3ZcIl0gPSBzd2VkaXNoU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcInN2XCJdID0gXCJzdmVuc2thXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIHRhamlrU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcItCR0L7Qt9Cz0LDRiNGCXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCLQntGP0L3QtNCwXCIsXG4gIGNvbXBsZXRlVGV4dDogXCLQmNK30YDQviDRiNGD0LRcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcItCe0pPQvtC3XCIsXG4gIG90aGVySXRlbVRleHQ6IFwi0JTQuNCz0LDRgCAo0LvRg9GC0YTQsNC9INGC0LDQstGB0LjRhCDQutGD0L3QtdC0KVwiLFxuICBub25lSXRlbVRleHQ6IFwi0J3QtVwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCLSstCw0LzQsNGA0L4g0LjQvdGC0LjRhdC+0LEg0LrQsNGA0LTQsNC9XCIsXG4gIHByb2dyZXNzVGV4dDogXCLQodCw0rPQuNGE0LDQuCB7MH0g0LDQtyB7MX1cIixcbiAgZW1wdHlTdXJ2ZXk6IFwi0K/Qs9C+0L0g0YHQsNCy0L7QuyDQstGD0rfRg9C0INC90LDQtNC+0YDQsNC0LlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcItCi0LDRiNCw0LrQutGD0YAg0LHQsNGA0L7QuCDQv9GD0YAg0LrQsNGA0LTQsNC90Lgg0YHQsNCy0L7Qu9C90L7QvNCwIVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgIFwi0KjRg9C80L4g0LDQu9C70LDQutCw0Lkg0LjQvSDQv9GD0YDRgdC40YjRgNC+INCw0L3St9C+0Lwg0LTQvtC00LDQtdC0LlwiLFxuICBsb2FkaW5nU3VydmV5OiBcItCR0L7RgNCz0LjRgNOjINCw0Lcg0YHQtdGA0LLQtdGALi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcItCY0L3RgtC40YXQvtCxINC60LDRgNC00LDQvS4uLlwiLFxuICB2YWx1ZTogXCLSm9C40LzQvNCw0YJcIixcbiAgcmVxdWlyZWRFcnJvcjogXCLQmNC70YLQuNC80L7RgSwg0LHQsCDRgdCw0LLQvtC7INK30LDQstC+0LEg0LTQuNKz0LXQtC5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwi0JjQu9GC0LjQvNC+0YEsINCw0pvQsNC70LDQvSDQsdCwINGP0Log0YHQsNCy0L7QuyDSt9Cw0LLQvtCxINC00LjSs9C10LQuXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwi0JjQu9GC0LjQvNC+0YEsINCx0LAg0rPQsNC80LDQuCDRgdCw0LLQvtC70rPQviDQtNCw0YAg0rPQsNC80LDQuCDRgdCw0YLRgNKz0L4g0rfQsNCy0L7QsSDQtNC40rPQtdC0LlwiLFxuICBudW1lcmljRXJyb3I6IFwi0rbQsNCy0L7QsSDQsdC+0Y/QtCDRgNCw0pvQsNC8INCx0L7RiNCw0LQuXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwi0JjQu9GC0LjQvNC+0YEsINCw0LcgezB9INC30LjRkdC00YLQsNGAINGA0LDQvNC3INCy0L7RgNC40LQg0LrRg9C90LXQtC5cIixcbiAgdGV4dE1heExlbmd0aDogXCLQmNC70YLQuNC80L7RgSwg0LDQtyB7MH0g0LrQsNC80YLQsNGAINGA0LDQvNC3INCy0L7RgNC40LQg0LrRg9C90LXQtC5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCLQmNC70YLQuNC80L7RgSwg0LDQtyB7MH0g0LfQuNGR0LTRgtCw0YAg0LLQsCDQsNC3IHsxfSDQutCw0LzRgtCw0YAg0YDQsNC80Lcg0LLQvtGA0LjQtCDQutGD0L3QtdC0LlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcItCY0LvRgtC40LzQvtGBLCDQvdCwINC60LDQvNGC0LDRgCDQsNC3IHswfSDRgdCw0YLRgCDQv9GD0YAg0LrRg9C90LXQtC5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwi0JjQu9GC0LjQvNC+0YEsINCw0pvQsNC70LDQvSB7MH0g0LLQsNGA0LjQsNC90YIg0LjQvdGC0LjRhdC+0LEg0LrRg9C90LXQtC5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwi0JjQu9GC0LjQvNC+0YEsINC90LAg0LfQuNGR0LTRgtCw0YAg0LDQtyB7MH0g0LLQsNGA0LjQsNC90YIg0LjQvdGC0LjRhdC+0LEg0LrRg9C90LXQtC5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIid7MH0nINCx0L7Rj9C0INC90LAg0LrQsNC8INCw0LcgezF9INCy0LAg0L3QsCDQsdC40YHRkdGAINCw0LcgezJ9INCx0L7RiNCw0LRcIixcbiAgbnVtZXJpY01pbjogXCInezB9JyDQsdC+0Y/QtCDQvdCwINC60LDQvCDQsNC3IHsxfSDQsdC+0YjQsNC0XCIsXG4gIG51bWVyaWNNYXg6IFwiJ3swfScg0LHQvtGP0LQg0L3QsCDQt9C40ZHQtCDQsNC3IHsxfSDQsdC+0YjQsNC0XCIsXG4gIGludmFsaWRFbWFpbDogXCLQmNC70YLQuNC80L7RgSwg0L/QvtGH0YLQsNC4INGN0LvQtdC60YLRgNC+0L3QuNC4INCy0L7Sm9C10LjRgNC+INCy0L7RgNC40LQg0LrRg9C90LXQtC5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwi0JjRhNC+0LTQsNC4IHswfSDQsdC+0Y/QtCAndHJ1ZScg0LHQsNGA0LPQsNGA0LTQvtC90LDQtC5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcItCU0LDRgNGF0L7RgdGCINGF0LDRgtC+0LPToyDQsdC+0LfQs9Cw0YDQtNC+0L3QtCAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcItK20LDQstC+0LEg0LHQsCDQtNCw0YDRhdC+0YHRgiDRhdC+0LvToyDQvtC80LDQtCDRkSDRhdC+0YHQuNGP0YLQuCAncGF0aCcg0L3QvtC00YPRgNGD0YHRgiDQvNGD0LDQudGP0L0g0LrQsNGA0LTQsCDRiNGD0LTQsNCw0YHRglwiLFxuICBleGNlZWRNYXhTaXplOiBcItCQ0L3QtNC+0LfQsNC4INGE0LDQudC7INCx0L7Rj9C0INC90LAg0LrQsNC70L7QvSDQsNC3IHswfSDQsdC+0YjQsNC0LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwi0JjQu9GC0LjQvNC+0YEsINCx0LAg0LzQsNC50LTQvtC90LggJ9CU0LjQs9Cw0YAnINC00L7QtNCw0rPQvtGA0L4g0LLQvtGA0LjQtCDQutGD0L3QtdC0XCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgXCLQpNCw0LnQu9C4INGI0YPQvNC+INCx0L7RgCDRiNGD0LTQsCDQuNGB0YLQvtC00LDQsNGB0YIuINCv0LrRh9Cw0L3QtCDRgdC+0L3QuNGPINC40L3RgtC40LfQvtGAINGI0LDQstC10LQg0LLQsCDQsdC+0YDQuCDQtNC40LPQsNGAINC606/RiNC40Ygg0LrRg9C90LXQtC5cIixcbiAgbG9hZGluZ0ZpbGU6IFwi0JHQvtGA0LrRg9C906MuLi5cIixcbiAgY2hvb3NlRmlsZTogXCLQpNCw0LnQuyjSs9C+KS3RgNC+INC40L3RgtC40YXQvtCxINC60YPQvdC10LQuLi5cIixcbiAgY29uZmlybURlbGV0ZTogXCLQqNGD0LzQviDQvNGD0YLQvNCw0LjQvSDSs9Cw0YHRgtC10LQsINC60Lgg0LzQtdGF0L7Ss9C10LQg0LLQvtGA0LjQtNGA0L4g0YLQvtC30LAg0LrRg9C90LXQtD9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCLQmNC9INCw0YDQt9C40Ygg0LHQvtGP0LQg0LHQtdC90LDQt9C40YAg0LHQvtGI0LDQtC5cIixcbiAgYWRkQ29sdW1uOiBcItCY0LvQvtCy0LDQuCDRgdGD0YLRg9C9XCIsXG4gIGFkZFJvdzogXCLQmNC70L7QstCw0Lgg0YHQsNGC0YBcIixcbiAgcmVtb3ZlUm93OiBcItCd0LXRgdGCINC60LDRgNC00LDQvVwiLFxuICBhZGRQYW5lbDogXCLQmNC70L7QstCwINC60LDRgNC00LDQvVwiLFxuICByZW1vdmVQYW5lbDogXCLQndC10YHRgiDQutCw0YDQtNCw0L1cIixcbiAgY2hvaWNlc19JdGVtOiBcItCS0LDRgNC40LDQvdGCXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwi0KHRg9GC0YPQvVwiLFxuICBtYXRyaXhfcm93OiBcItCh0LDRgtGAXCIsXG4gIHNhdmluZ0RhdGE6IFwi0J3QsNGC0LjSt9CwINCx0LAg0YHQtdGA0LLQtdGAINGB0LDQsdGCINGI0YPQtNCwINC40YHRgtC+0LTQsNCw0L3QtC4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwi0KXQsNGC0L7Qs9OjINCx0LAg0LDQvNCw0Lsg0L7QvNCw0LQsINC90LDRgtC40rfQsCDRgdCw0LHRgiDQvdCw0YjRg9C0LlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCLQndCw0YLQuNK30LAg0LHQvtC80YPQstCw0YTRhNCw0LrQuNGP0YIg0YHQsNCx0YIg0YjRg9C0IVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwi0JHQvtGA0Lgg0LTQuNCz0LDRgCDQutOv0YjQuNGIINC60LDRgNC00LDQvdC0XCIsXG4gIHRpbWVyTWluOiBcItC00LDSm1wiLFxuICB0aW1lclNlYzogXCLRgdC+0L1cIixcbiAgdGltZXJTcGVudEFsbDogXCLQqNGD0LzQviB7MH0g0LTQsNGAINC40L0g0YHQsNKz0LjRhNCwINCy0LAgezF9INC00LDRgCDRg9C80YPQvCDRgdCw0YDRhCDQutCw0YDQtNC10LQuXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcItCo0YPQvNC+IHswfSDQtNCw0YAg0LjQvSDRgdCw0rPQuNGE0LAg0YHQsNGA0YQg0LrQsNGA0LTQtdC0LlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcItCo0YPQvNC+IHswfSDQtNCw0YAg0LjQvSDRgtC10YHRgiDRgdCw0YDRhCDQvdCw0LzRg9C00LXQtC5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcItCo0YPQvNC+IHswfSDQsNC3IHsxfSDQtNCw0YAg0LjQvSDRgdCw0rPQuNGE0LAg0LLQsCB7Mn0g0LDQtyB7M30g0LTQsNGAINGD0LzRg9C8INGB0LDRgNGEINC60LDRgNC00LXQtCDQtNCw0YAg0LTQvtGF0LjQu9C4INC40L0g0YLQtdGB0YIuXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcItCo0YPQvNC+IHswfSDQsNC3IHsxfSDQtNCw0YAg0LjQvSDRgdCw0rPQuNGE0LAg0YHQsNGA0YQg0LrQsNGA0LTQtdC0LlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcItCo0YPQvNC+IHswfSDQsNC3IHsxfSDQtNCw0YAg0rPQsNC80LDQuCDRgtC10YHRgiDRgdCw0YDRhCDQutCw0YDQtNC10LQuXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCLQotC+0LfQsCDQutCw0YDQtNCw0L1cIixcbiAgY2xlYXJDYXB0aW9uOiBcItCi0L7Qt9CwINC60LDRgNC00LDQvVwiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCLQpNCw0LnQu9GA0L4g0L3QtdGB0YIg0LrQsNGA0LTQsNC9XCJcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1widGdcIl0gPSB0YWppa1N1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJ0Z1wiXSA9IFwi0YLQvtK30LjQutOjXCI7XG4iLCIvL0NyZWF0ZWQgYnkgUGFkZXQgVGF3ZWVrdW5rYW5cbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgdGhhaVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCLguIHguYjguK3guJnguKvguJnguYnguLJcIixcbiAgcGFnZU5leHRUZXh0OiBcIuC4luC4seC4lOC5hOC4m1wiLFxuICBjb21wbGV0ZVRleHQ6IFwi4Liq4Liz4LmA4Lij4LmH4LiIXCIsXG4gIHByZXZpZXdUZXh0OiBcIuC4lOC4ueC4leC4seC4p+C4reC4ouC5iOC4suC4h1wiLFxuICBlZGl0VGV4dDogXCLguYHguIHguYnguYTguIJcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIuC5gOC4o+C4tOC5iOC4oVwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIuC4reC4t+C5iOC4meC5hiAo4LmC4Lib4Lij4LiU4Lij4Liw4Lia4Li4KVwiLFxuICBub25lSXRlbVRleHQ6IFwi4LmE4Lih4LmI4Lih4Li1XCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIuC5gOC4peC4t+C4reC4geC4l+C4seC5ieC4h+C4q+C4oeC4lFwiLFxuICBwcm9ncmVzc1RleHQ6IFwi4Lir4LiZ4LmJ4Liy4LiX4Li14LmIIHswfSDguIjguLLguIEgezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCLguKPguLLguKLguIHguLLguKPguJfguLXguYggezB9IOC4iOC4suC4gSB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcIuC4hOC4s+C4leC4reC4muC4l+C4teC5iCB7MH0vezF9IOC4iOC4s+C4meC4p+C4meC4hOC4s+C4luC4suC4oVwiLFxuICBlbXB0eVN1cnZleTogXCLguYTguKHguYjguKHguLXguKvguJnguYnguLLguYDguJ7guIjguJfguLXguYjguKHguK3guIfguYDguKvguYfguJkg4Lir4Lij4Li34LitIOC4hOC4s+C4luC4suC4oeC5g+C4mSBzdXJ2ZXkg4LiZ4Li14LmJXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwi4LiC4Lit4Lia4LiE4Li44LiT4LiX4Li14LmI4LiX4LizIHN1cnZleSDguIjguJnguYDguKrguKPguYfguIhcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcbiAgICBcIuC4o+C4suC4ouC4geC4suC4o+C4guC4reC4h+C5gOC4o+C4suC5geC4quC4lOC4h+C4p+C5iOC4suC4hOC4uOC4k+C5hOC4lOC5ieC4l+C4syBzdXJ2ZXkg4LmA4Liq4Lij4LmH4LiI4LmA4Lij4Li14Lii4Lia4Lij4LmJ4Lit4Lii4LmB4Lil4LmJ4LinXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwi4LiB4Liz4Lil4Lix4LiH4LmC4Lir4Lil4LiUIFN1cnZleS4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCLguYDguKXguLfguK3guIEuLi5cIixcbiAgdmFsdWU6IFwi4LiC4LmJ4Lit4Lih4Li54LilXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwi4LiB4Lij4Li44LiT4Liy4LiV4Lit4Lia4LiE4Liz4LiW4Liy4LihXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIuC4geC4o+C4uOC4k+C4suC4leC4reC4muC4guC4seC5ieC4meC4leC5iOC4s+C4q+C4meC4tuC5iOC4h+C4hOC4s+C4luC4suC4oVwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIuC4geC4o+C4uOC4k+C4suC4leC4reC4muC4hOC4s+C4luC4suC4oeC5g+C4meC4l+C4uOC4geC5huC5geC4luC4p1wiLFxuICBudW1lcmljRXJyb3I6IFwi4LiC4LmJ4Lit4Lih4Li54Lil4LiX4Li14LmI4LmD4Liq4LmI4LiV4LmJ4Lit4LiH4LmA4Lib4LmH4LiZ4LiV4Lix4Lin4LmA4Lil4LiCXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwi4LiB4Lij4Li44LiT4Liy4LmD4Liq4LmI4LiC4Lix4LmJ4LiZ4LiV4LmI4Liz4LiI4Liz4LiZ4Lin4LiZIHswfSDguJXguLHguKfguK3guLHguIHguKnguKNcIixcbiAgdGV4dE1heExlbmd0aDogXCLguIHguKPguLjguJPguLLguYPguKrguYjguYTguKHguYjguYDguIHguLTguJnguIjguLPguJnguKfguJkgezB9IOC4leC4seC4p+C4reC4seC4geC4qeC4o1wiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcIuC4geC4o+C4uOC4k+C4suC5g+C4quC5iOC4guC4seC5ieC4meC4leC5iOC4s+C4iOC4s+C4meC4p+C4mSB7MH0g4LmB4Lil4Liw4LmE4Lih4LmI4LmA4LiB4Li04LiZ4LiI4Liz4LiZ4Lin4LiZIHsxfSDguJXguLHguKfguK3guLHguIHguKnguKNcIixcbiAgbWluUm93Q291bnRFcnJvcjogXCLguIHguKPguLjguJPguLLguYPguKrguYjguILguLHguYnguJnguJXguYjguLPguIjguLPguJnguKfguJkgezB9IOC5geC4luC4p1wiLFxuICBtaW5TZWxlY3RFcnJvcjogXCLguIHguKPguLjguJPguLLguYDguKXguLfguK3guIHguK3guKLguYjguLLguIfguJnguYnguK3guKIgezB9IOC4o+C4suC4ouC4geC4suC4o1wiLFxuICBtYXhTZWxlY3RFcnJvcjogXCLguIHguKPguLjguJPguLLguYDguKXguLfguK3guIHguYTguKHguYjguYDguIHguLTguJkgezB9IOC4o+C4suC4ouC4geC4suC4o1wiLFxuICBudW1lcmljTWluTWF4OiBcIid7MH0nIOC4leC5ieC4reC4h+C4oeC4suC4geC4geC4p+C5iOC4suC4q+C4o+C4t+C4reC5gOC4l+C5iOC4suC4geC4seC4miB7MX0g4LmB4Lil4Liw4LiZ4LmJ4Lit4Lii4LiB4Lin4LmI4Liy4Lir4Lij4Li34Lit4LmA4LiX4LmI4Liy4LiB4Lix4LiaIHsyfVwiLFxuICBudW1lcmljTWluOiBcIid7MH0nIOC4leC5ieC4reC4h+C4oeC4suC4geC4geC4p+C5iOC4suC4q+C4o+C4t+C4reC5gOC4l+C5iOC4suC4geC4seC4miB7MX1cIixcbiAgbnVtZXJpY01heDogXCInezB9JyDguJnguYnguK3guKLguIHguKfguYjguLLguKvguKPguLfguK3guYDguJfguYjguLLguIHguLHguJogezF9XCIsXG4gIGludmFsaWRFbWFpbDogXCLguIHguKPguLjguJPguLLguYPguKrguYjguK3guLXguYDguKHguKXguYzguYHguK3guJTguYDguJTguKPguKrguJfguLXguYjguJbguLnguIHguJXguYnguK3guIdcIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiVGhlIGV4cHJlc3Npb246IHswfSDguJXguYnguK3guIfguKPguLXguYDguJfguLTguKPguYzguJkgJ3RydWUnLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwi4Lij4Li14LmA4LiE4Lin4Liq4Lij4Li14LmA4LiX4Li04Lij4LmM4LiZIGVycm9yICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwi4Lij4Li14LmA4LiE4Lin4Liq4Lij4Li14LmA4LiX4Li04Lij4LmM4LiZ4LiC4LmJ4Lit4Lih4Li54Lil4Lin4LmI4Liy4LiH4LmA4Lib4Lil4LmI4LiyIOC4q+C4o+C4t+C4rSAncGF0aCcgcHJvcGVydHkg4LmE4Lih4LmI4LiW4Li54LiB4LiV4LmJ4Lit4LiHXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwi4LiC4LiZ4Liy4LiU4LmE4Lif4Lil4LmM4LiV4LmJ4Lit4LiH4LmE4Lih4LmI4LmA4LiB4Li04LiZIHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIuC4geC4o+C4uOC4k+C4suC5g+C4quC5iOC4hOC5iOC4suC4reC4t+C5iOC4mVwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwi4LmE4Lif4Lil4LmM4LiC4Lit4LiH4LiE4Li44LiT4LiB4Liz4Lil4Lix4LiH4Lit4Lix4Lie4LmC4Lir4Lil4LiU4Lit4Lii4Li54LmILiDguIHguKPguLjguJPguLLguKPguK3guKrguLHguIHguITguKPguLnguYjguYHguKXguYnguKfguJfguLPguIHguLLguKPguKXguK3guIfguK3guLXguIHguITguKPguLHguYnguIdcIixcbiAgbG9hZGluZ0ZpbGU6IFwi4LiB4Liz4Lil4Lix4LiH4LmC4Lir4Lil4LiULi4uXCIsXG4gIGNob29zZUZpbGU6IFwi4LmA4Lil4Li34Lit4LiB4LmE4Lif4Lil4LmMLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCLguYTguKHguYjguYTguJ/guKXguYzguJfguLXguYjguYDguKXguLfguK3guIFcIixcbiAgY29uZmlybURlbGV0ZTogXCLguITguLjguJPguJXguYnguK3guIfguIHguLLguKPguKXguJrguKPguLLguKLguIHguLLguKPguJnguLXguYnguIjguKPguLTguIfguKvguKPguLfguK3guYTguKHguYg/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwi4LiC4LmJ4Lit4Lih4Li54Lil4LiZ4Li14LmJ4LiV4LmJ4Lit4LiH4LmA4Lib4LmH4LiZIHVuaXF1ZS5cIixcbiAgYWRkQ29sdW1uOiBcIuC5gOC4nuC4tOC5iOC4oeC4hOC4reC4peC4seC4oeC4meC5jFwiLFxuICBhZGRSb3c6IFwi4LmA4Lie4Li04LmI4Lih4LmB4LiW4LinXCIsXG4gIHJlbW92ZVJvdzogXCLguKXguJpcIixcbiAgYWRkUGFuZWw6IFwi4LmA4Lie4Li04LmI4LihXCIsXG4gIHJlbW92ZVBhbmVsOiBcIuC4peC4mlwiLFxuICBjaG9pY2VzX0l0ZW06IFwi4LiK4Li04LmJ4LiZXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwi4LiE4Lit4Lil4Lix4Lih4LiZ4LmMXCIsXG4gIG1hdHJpeF9yb3c6IFwi4LmB4LiW4LinXCIsXG4gIHNhdmluZ0RhdGE6IFwi4Lic4Lil4Lil4Lix4Lie4LiX4LmM4LiB4Liz4Lil4Lix4LiH4Lia4Lix4LiZ4LiX4Li24LiB4Lil4LiH4LiX4Li14LmI4LmA4LiL4Li04Lij4LmM4Lif4LmA4Lin4Lit4Lij4LmMLi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCLguKHguLXguITguKfguLLguKHguJzguLTguJTguJ7guKXguLLguJTguYDguIHguLTguJTguILguLbguYnguJnguKrguYjguIfguJzguKXguYPguKvguYnguYTguKHguYjguKrguLLguKHguLLguKPguJbguJrguLHguJnguJfguLbguIHguJzguKXguYTguJTguYlcIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwi4Lia4Lix4LiZ4LiX4Li24LiB4Liq4Liz4LmA4Lij4LmH4LiI4LmB4Lil4LmJ4LinXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCLguKPguJrguIHguKfguJnguKXguK3guIfguK3guLXguIHguITguKPguLHguYnguIdcIixcbiAgdGltZXJNaW46IFwi4LiZ4Liy4LiX4Li1XCIsXG4gIHRpbWVyU2VjOiBcIuC4p+C4tOC4meC4suC4l+C4tVwiLFxuICB0aW1lclNwZW50QWxsOiBcIuC4hOC4uOC4k+C5g+C4iuC5ieC5gOC4p+C4peC4siB7MH0g4Lia4LiZ4Lir4LiZ4LmJ4Liy4LiZ4Li14LmJ4LmB4Lil4LiwIHsxfSDguKPguKfguKHguJfguLHguYnguIfguKvguKHguJRcIixcbiAgdGltZXJTcGVudFBhZ2U6IFwi4LiE4Li44LiT4LmD4LiK4LmJ4LmA4Lin4Lil4LiyIHswfSDguJrguJnguKvguJnguYnguLLguJnguLXguYlcIixcbiAgdGltZXJTcGVudFN1cnZleTogXCLguITguLjguJPguYPguIrguYnguYDguKfguKXguLIgezB9IOC4o+C4p+C4oeC4l+C4seC5ieC4h+C4q+C4oeC4lFwiLFxuICB0aW1lckxpbWl0QWxsOiBcIuC4hOC4uOC4k+C5g+C4iuC5ieC5gOC4p+C4peC4siB7MH0g4LiC4Lit4LiHIHsxfSDguJrguJnguKvguJnguYnguLLguJnguLXguYnguYHguKXguLAgezJ9IOC4guC4reC4hyB7M30g4Lij4Lin4Lih4LiX4Lix4LmJ4LiH4Lir4Lih4LiUXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIuC4hOC4uOC4k+C5g+C4iuC5ieC5gOC4p+C4peC4siB7MH0g4LiC4Lit4LiHIHsxfSDguJrguJnguKvguJnguYnguLLguJnguLXguYlcIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCLguITguLjguJPguYPguIrguYnguYDguKfguKXguLIgezB9IOC4guC4reC4hyB7MX0g4Lij4Lin4Lih4LiX4Lix4LmJ4LiH4Lir4Lih4LiUXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCLguITguKXguLXguJlcIixcbiAgY2xlYXJDYXB0aW9uOiBcIuC5gOC4hOC4peC4teC4ouC4o+C5jFwiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCLguYDguKXguLfguK3guIHguYTguJ/guKXguYxcIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwi4LiZ4Liz4LmE4Lif4Lil4LmM4LiZ4Li14LmJ4Lit4Lit4LiBXCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwi4LmD4LiK4LmIXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCLguYTguKHguYjguYPguIrguYhcIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwi4LiE4Li44LiT4LmB4LiZ4LmI4LmD4LiI4LiX4Li14LmI4LiI4Liw4LiZ4Liz4LmE4Lif4Lil4LmM4LiZ4Li14LmJ4Lit4Lit4LiB4LmD4LiK4LmI4Lir4Lij4Li34Lit4LmE4Lih4LmIOiB7MH0/XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCLguITguLjguJPguYHguJnguYjguYPguIjguJfguLXguYjguIjguLDguJnguLPguYTguJ/guKXguYzguJfguLHguYnguIfguKvguKHguJTguK3guK3guIHguYPguIrguYjguKvguKPguLfguK3guYTguKHguYhcIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIuC4iuC4t+C5iOC4reC4hOC4s+C4luC4suC4oVwiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJ0aFwiXSA9IHRoYWlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1widGhcIl0gPSBcIuC5hOC4l+C4olwiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciB0cmFkaXRpb25hbENoaW5lc2VTdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwi5LiK5LiA6aCBXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCLkuIvkuIDpoIFcIixcbiAgY29tcGxldGVUZXh0OiBcIuaPkOS6pOWVj+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+mHjeipplwiXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcInpoLXR3XCJdID0gdHJhZGl0aW9uYWxDaGluZXNlU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcInpoLXR3XCJdID0gXCLnuYHpq5TkuK3mlodcIjtcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgdHVya2lzaFN1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCJHZXJpXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCLEsGxlcmlcIixcbiAgY29tcGxldGVUZXh0OiBcIkFua2V0aSBUYW1hbWxhXCIsXG4gIHByZXZpZXdUZXh0OiBcIsOWbiBpemxlbWVcIixcbiAgZWRpdFRleHQ6IFwiRMO8emVubGVcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIkJhxZ9sYXRcIixcbiAgb3RoZXJJdGVtVGV4dDogXCJEacSfZXIgKGHDp8Sxa2xhecSxbsSxeilcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIllva1wiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJIZXBzaW5pIHNlw6dcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIlNheWZhIHswfSAvIHsxfVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiS2F5xLF0IHswfSAvIHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiU29ydWxhcsSxIGNldmFwbGFkxLEgezB9IC8gezF9XCIsXG4gIGVtcHR5U3VydmV5OiBcIkFua2V0dGUgZ8O2csO8bnTDvGxlbmVjZWsgc2F5ZmEgeWEgZGEgc29ydSBtZXZjdXQgZGXEn2lsLlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIkFua2V0aW1pemkgdGFtYW1sYWTEscSfxLFuxLF6IGnDp2luIHRlxZ9la2vDvHIgZWRlcml6LlwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgIFwiS2F5xLF0bGFyxLFtxLF6LCBidSBhbmtldGkgemF0ZW4gdGFtYW1sYWTEscSfxLFuxLF6xLEgZ8O2c3Rlcml5b3IuXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiQW5rZXQgc3VudWN1ZGFuIHnDvGtsZW5peW9yIC4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJTZcOnaW5peiAuLi5cIixcbiAgdmFsdWU6IFwiZGXEn2VyXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwiTMO8dGZlbiBzb3J1eWEgY2V2YXAgdmVyaW5pelwiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJMw7x0ZmVuIGVuIGF6IGJpciBzb3J1eXUgeWFuxLF0bGF5xLFuLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIkzDvHRmZW4gdMO8bSBzYXTEsXJsYXJkYWtpIHNvcnVsYXLEsSBjZXZhcGxhecSxbsSxei5cIixcbiAgbnVtZXJpY0Vycm9yOiBcIkdpcmlsZW4gZGXEn2VyIG51bWVyaWsgb2xtYWzEsWTEsXJcIixcbiAgdGV4dE1pbkxlbmd0aDogXCJFbiBheiB7MH0gc2VtYm9sIGdpcmluaXouXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwiTMO8dGZlbiB7MH0ga2FyYWt0ZXJkZW4gYXogZ2lyaW4uXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwiTMO8dGZlbiB7MH0g4oCZZGVuIGZhemxhIHZlIHsxfSDigJlkZW4gYXoga2FyYWt0ZXIgZ2lyaW4uXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwiTMO8dGZlbiBlbiBheiB7MH0gc2F0xLFyxLEgZG9sZHVydW4uXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIkzDvHRmZW4gZW4gYXogezB9IHNlw6dlbmXEn2kgc2XDp2luaXouXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIkzDvHRmZW4gezB9IGFkZXR0ZW4gZmF6bGEgc2XDp21leWluaXouXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCJUaGUgJ3swfScgc2hvdWxkIGJlIGVxdWFsIG9yIG1vcmUgdGhhbiB7MX0gYW5kIGVxdWFsIG9yIGxlc3MgdGhhbiB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCInezB9JyBkZcSfZXJpIHsxfSBkZcSfZXJpbmUgZcWfaXQgdmV5YSBiw7x5w7xrIG9sbWFsxLFkxLFyXCIsXG4gIG51bWVyaWNNYXg6IFwiJ3swfScgZGXEn2VyaSB7MX0gZGXEn2VyaW5lIGXFn2l0IHlhIGRhIGvDvMOnw7xrIG9sbWFsxLFkxLFyLlwiLFxuICBpbnZhbGlkRW1haWw6IFwiTMO8dGZlbiBnZcOnZXJsaSBiaXIgZXBvc3RhIGFkcmVzaSBnaXJpbml6LlwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCLEsGZhZGU6IHswfSAndHJ1ZScgZMO2bmTDvHJtZWxpZGlyLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiVGFsZWJpIMWfdSBoYXRhecSxIGTDtm5kw7wgJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XG4gICAgXCJUYWxlcCBoZXJoYW5naSBiaXIgdmVyaSBkw7ZubWVkaSB5YSBkYSAncGF0aCcgw7Z6ZWxsacSfaSBoYXRhbMSxLlwiLFxuICBleGNlZWRNYXhTaXplOiBcIkRvc3lhIGJveXV0dSB7MH0gZGXEn2VyaW5pIGdlw6dlbWV6LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiTMO8dGZlbiBkacSfZXIgZGXEn2VybGVyaSBnaXJpbml6LlwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwiRG9zeWFuxLF6IHnDvGtsZW5peW9yLiBMw5x0ZmVuIGJpcmthw6cgc2FuaXllIGJla2xleWluIHZlIHRla3JhciBkZW5leWluLlwiLFxuICBsb2FkaW5nRmlsZTogXCJZw7xrbGVuaXlvci4uLlwiLFxuICBjaG9vc2VGaWxlOiBcIkRvc3lhbGFyxLEgc2XDp2luIC4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwiRG9zeWEgc2XDp2lsaSBkZcSfaWxcIixcbiAgY29uZmlybURlbGV0ZTogXCJLYXlkxLEgc2lsbWVrIGlzdGl5b3IgbXVzdW51ej9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCJCdSBkZcSfZXIgYmVuemVyc2l6IG9sbWFsxLFkxLFyLlwiLFxuICBhZGRDb2x1bW46IFwiU8O8dHVuIGVrbGV5aW5cIixcbiAgYWRkUm93OiBcIlNhdMSxciBFa2xlXCIsXG4gIHJlbW92ZVJvdzogXCJLYWxkxLFyXCIsXG4gIGFkZFBhbmVsOiBcIlllbmkgZWtsZVwiLFxuICByZW1vdmVQYW5lbDogXCJLYWxkxLFybWFrXCIsXG4gIGNob2ljZXNfSXRlbTogXCJlxZ95YVwiLFxuICBtYXRyaXhfY29sdW1uOiBcIlPDvHR1blwiLFxuICBtYXRyaXhfcm93OiBcIkvDvHJlayDDp2VrbWVrXCIsXG4gIHNhdmluZ0RhdGE6IFwiU29udcOnbGFyIHN1bnVjdXlhIGtheWRlZGlsaXlvciAuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIkJpciBoYXRhIG9sdcWfdHUgdmUgc29udcOnbGFyxLEga2F5ZGVkZW1lZGlrLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJTb251w6dsYXIgYmHFn2FyxLF5bGEga2F5ZGVkaWxkaSFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIlRla3JhciBkZW5leWluXCIsXG4gIHRpbWVyTWluOiBcIm1pblwiLFxuICB0aW1lclNlYzogXCJzYW5peWVcIixcbiAgdGltZXJTcGVudEFsbDogXCJCdSBzYXlmYWRhIHswfSB2ZSB0b3BsYW1kYSB7MX0gaGFyY2FkxLFuxLF6LlwiLFxuICB0aW1lclNwZW50UGFnZTogXCJCdSBzYXlmYXlhIHswfSBoYXJjYWTEsW7EsXouXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwiVG9wbGFtZGEgezB9IGhhcmNhZMSxbsSxei5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcIkJ1IHNheWZheWEgezB9IC8gezF9IHZlIHRvcGxhbWRhIHsyfSAvIHszfSBoYXJjYWTEsW7EsXouXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIkJ1IHNheWZheWEgezB9IC8gezF9IGhhcmNhZMSxbsSxei5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJUb3BsYW1kYSB7MH0gLyB7MX0gaGFyY2FkxLFuxLF6LlwiLFxuICBjbGVhbkNhcHRpb246IFwiVGVtaXpcIixcbiAgY2xlYXJDYXB0aW9uOiBcIkHDp8Sxa1wiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJEb3N5YSBzZcOnaW5cIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwiQnUgZG9zeWF5xLEga2FsZMSxclwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIkV2ZXRcIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIkhhecSxclwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCJCdSBkb3N5YXnEsSBrYWxkxLFybWFrIGlzdGVkacSfaW5pemRlbiBlbWluIG1pc2luaXo6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIlTDvG0gZG9zeWFsYXLEsSBrYWxkxLFybWFrIGlzdGVkacSfaW5pemRlbiBlbWluIG1pc2luaXo/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJTb3J1IGJhxZ9sxLHEn8SxXCIsXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcInRyXCJdID0gdHVya2lzaFN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJ0clwiXSA9IFwidMO8cmvDp2VcIjtcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgdWtyYWluaWFuU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcItCd0LDQt9Cw0LRcIixcbiAgcGFnZU5leHRUZXh0OiBcItCU0LDQu9GWXCIsXG4gIGNvbXBsZXRlVGV4dDogXCLQl9Cw0LLQtdGA0YjQuNGC0LhcIixcbiAgcHJldmlld1RleHQ6IFwi0J/QvtC/0LXRgNC10LTQvdGW0Lkg0L/QtdGA0LXQs9C70Y/QtFwiLFxuICBlZGl0VGV4dDogXCLQoNC10LTQsNCz0YPQstCw0YLQuFwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwi0J/QvtGH0LDRgtC4XCIsXG4gIG90aGVySXRlbVRleHQ6IFwi0IbQvdGI0LUgKNCx0YPQtNGMINC70LDRgdC60LAsINC+0L/QuNGI0ZbRgtGMKVwiLFxuICBub25lSXRlbVRleHQ6IFwi0JbQvtC00LXQvVwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCLQktC40LHRgNCw0YLQuCDQstGB0LVcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcItCh0YLQvtGA0ZbQvdC60LAgezB9INC3IHsxfVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwi0JfQsNC/0LjRgSB7MH0g0ZbQtyB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcItCS0ZbQtNC/0L7QstGW0LvQuCDQvdCwIHswfS97MX0g0L/QuNGC0LDQvdGMXCIsXG4gIGVtcHR5U3VydmV5OiBcItCd0LXQvNCw0ZQg0LbQvtC00L3QvtCz0L4g0L/QuNGC0LDQvdC90Y8uXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwi0JTRj9C60YPRlNC80L4g0JLQsNC8INC30LAg0LfQsNC/0L7QstC90LXQvdC90Y8g0LDQvdC60LXRgtC4IVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgIFwi0JLQuCDQstC20LUg0L/RgNC+0YXQvtC00LjQu9C4INGG0LUg0L7Qv9C40YLRg9Cy0LDQvdC90Y8uXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwi0JfQsNCy0LDQvdGC0LDQttC10L3QvdGPINC+0L/QuNGC0YPQstCw0L3QvdGPLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcItCS0LjQsdGA0LDRgtC4Li4uXCIsXG4gIHZhbHVlOiBcItC30L3QsNGH0LXQvdC90Y9cIixcbiAgcmVxdWlyZWRFcnJvcjogXCLQkdGD0LTRjCDQu9Cw0YHQutCwLCDQtNCw0LnRgtC1INCy0ZbQtNC/0L7QstGW0LTRjC5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwi0JHRg9C00Ywg0LvQsNGB0LrQsCwg0LTQsNC50YLQtSDQstGW0LTQv9C+0LLRltC00Ywg0YXQvtGH0LAg0LEg0L3QsCDQvtC00L3QtSDQv9C40YLQsNC90L3Rjy5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCLQkdGD0LTRjCDQu9Cw0YHQutCwLCDQtNCw0LnRgtC1INCy0ZbQtNC/0L7QstGW0LTRjCDQvdCwINC/0LjRgtCw0L3QvdGPINCyINC60L7QttC90L7QvNGDINGA0Y/QtNC60YMuXCIsXG4gIG51bWVyaWNFcnJvcjogXCLQktGW0LTQv9C+0LLRltC00Ywg0L/QvtCy0LjQvdC90LAg0LHRg9GC0Lgg0YfQuNGB0LvQvtC8LlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcItCR0YPQtNGMINC70LDRgdC60LAg0LLQstC10LTRltGC0Ywg0LHRltC70YzRiNC1IHswfSDRgdC40LzQstC+0LvRltCyLlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcItCR0YPQtNGMINC70LDRgdC60LAg0LLQstC10LTRltGC0Ywg0LzQtdC90YjQtSB7MH0g0YHQuNC80LLQvtC70ZbQsi5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCLQkdGD0LTRjCDQu9Cw0YHQutCwINCy0LLQtdC00ZbRgtGMINCx0ZbQu9GM0YjQtSB7MH0g0Lgg0LzQtdC90YjQtSB7MX0g0YHQuNC80LLQvtC70ZbQsi5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCLQkdGD0LTRjCDQu9Cw0YHQutCwLCDQt9Cw0L/QvtCy0L3RltGC0Ywg0L3QtSDQvNC10L3RiNC1IHswfSDRgNGP0LTQutGW0LIuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcItCR0YPQtNGMINC70LDRgdC60LAsINCy0LjQsdC10YDRltGC0Ywg0YXQvtGH0LAg0LEgezB9INCy0LDRgNGW0LDQvdGC0ZbQsi5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwi0JHRg9C00Ywg0LvQsNGB0LrQsCwg0LLQuNCx0LXRgNGW0YLRjCDQvdC1INCx0ZbQu9GM0YjQtSB7MH0g0LLQsNGA0ZbQsNC90YLRltCyLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiJ3swfScg0L/QvtCy0LjQvdC90L4g0LHRg9GC0Lgg0L3QtSDQvNC10L3RiNC1INC90ZbQtiB7MX0sINGWINC90LUg0LHRltC70YzRiNC1INC90ZbQtiB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCInezB9JyDQv9C+0LLQuNC90L3QviDQsdGD0YLQuCDQvdC1INC80LXQvdGI0LUg0L3RltC2IHsxfVwiLFxuICBudW1lcmljTWF4OiBcIid7MH0nINC/0L7QstC40L3QvdC+INCx0YPRgtC4INC90LUg0LHRltC70YzRiNC1INC90ZbQtiB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcItCR0YPQtNGMINC70LDRgdC60LAsINCy0LLQtdC00ZbRgtGMINC00ZbQudGB0L3RgyDQsNC00YDQtdGB0YMg0LXQu9C10LrRgtGA0L7QvdC90L7RlyDQv9C+0YjRgtC4LlwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCLQktC40YDQsNC3IHswfSDQv9C+0LLQuNC90LXQvSDQv9C+0LLQtdGA0YLQsNGC0LggJ3RydWUnLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwi0JfQsNC/0LjRgiDQv9C+0LLQtdGA0L3Rg9CyINC/0L7QvNC40LvQutGDICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwi0JLRltC00L/QvtCy0ZbQtNGMINC90LAg0LfQsNC/0LjRgiDQv9C+0LLQtdGA0L3Rg9C70LDRgdGMINC/0L7RgNC+0LbQvdGM0L7RjiDQsNCx0L4g0LLQu9Cw0YHRgtC40LLRltGC0YwgJ3BhdGgnINCy0LrQsNC30LDQvdC+INC90LXQstGW0YDQvdC+XCIsXG4gIGV4Y2VlZE1heFNpemU6IFwi0KDQvtC30LzRltGAINGE0LDQudC70YMg0L3QtSDQv9C+0LLQuNC90LXQvSDQv9C10YDQtdCy0LjRidGD0LLQsNGC0LggezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwi0JHRg9C00Ywg0LvQsNGB0LrQsCwg0LLQstC10LTRltGC0Ywg0LTQsNC90ZYg0LIg0L/QvtC70LUgJ9CG0L3RiNC1J1wiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwi0JLQsNGIINGE0LDQudC7INC30LDQstCw0L3RgtCw0LbRg9GU0YLRjNGB0Y8uINCX0LDRh9C10LrQsNC50YLQtSDQtNC10LrRltC70YzQutCwINGB0LXQutGD0L3QtCDRliDRgdC/0YDQvtCx0YPQudGC0LUg0LfQvdC+0LLRgy5cIixcbiAgbG9hZGluZ0ZpbGU6IFwi0JfQsNCy0LDQvdGC0LDQttC10L3QvdGPLi4uXCIsXG4gIGNob29zZUZpbGU6IFwi0JLQuNCx0LXRgNGW0YLRjCDRhNCw0LnQuyjQuCkuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcItCk0LDQudC7INC90LUg0LLQuNCx0YDQsNC90L5cIixcbiAgY29uZmlybURlbGV0ZTogXCLQktC4INGF0L7Rh9C10YLQtSDQstC40LTQsNC70LjRgtC4INC30LDQv9C40YE/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwi0KbQtSDQt9C90LDRh9C10L3QvdGPINC/0L7QstC40L3QvdC+INCx0YPRgtC4INGD0L3RltC60LDQu9GM0L3QuNC8LlwiLFxuICBhZGRDb2x1bW46IFwi0JTQvtC00LDRgtC4INC60L7Qu9C+0L3QutGDXCIsXG4gIGFkZFJvdzogXCLQlNC+0LTQsNGC0Lgg0YDRj9C00L7QulwiLFxuICByZW1vdmVSb3c6IFwi0JLQuNC00LDQu9C40YLQuFwiLFxuICBhZGRQYW5lbDogXCLQlNC+0LTQsNGC0Lgg0L3QvtCy0YNcIixcbiAgcmVtb3ZlUGFuZWw6IFwi0JLQuNC00LDQu9C40YLQuFwiLFxuICBjaG9pY2VzX0l0ZW06IFwi0JLQsNGA0ZbQsNC90YJcIixcbiAgbWF0cml4X2NvbHVtbjogXCLQmtC+0LvQvtC90LrQsFwiLFxuICBtYXRyaXhfcm93OiBcItCg0Y/QtNC+0LpcIixcbiAgc2F2aW5nRGF0YTogXCLQoNC10LfRg9C70YzRgtCw0YLQuCDQt9Cx0LXRgNGW0LPQsNGO0YLRjNGB0Y8g0L3QsCDRgdC10YDQstC10YAuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcItCS0ZbQtNCx0YPQu9Cw0YHRjyDQv9C+0LzQuNC70LrQsCwg0YDQtdC30YPQu9GM0YLQsNGCINC90LUg0LHRg9CyINC30LHQtdGA0LXQttC10L3QuNC5LlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCLQoNC10LfQstGD0LvRjNGC0LDRgiDRg9GB0L/RltGI0L3QviDQt9Cx0LXRgNC10LbQtdC90LjQuSFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcItCh0L/RgNC+0LHRg9Cy0LDRgtC4INC30L3QvtCy0YNcIixcbiAgdGltZXJNaW46IFwi0YXQslwiLFxuICB0aW1lclNlYzogXCLRgdC10LpcIixcbiAgdGltZXJTcGVudEFsbDogXCLQktC4INCy0LjRgtGA0LDRgtC40LvQuCB7MH0g0L3QsCDRhtGW0Lkg0YHRgtC+0YDRltC90YbRliDRliB7MX0g0LfQsNCz0LDQu9C+0LwuXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcItCS0Lgg0LLQuNGC0YDQsNGC0LjQu9C4IHswfSDQvdCwINGG0ZbQuSDRgdGC0L7RgNGW0L3RhtGWLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcItCS0Lgg0LLQuNGC0YDQsNGC0LjQu9C4IHswfSDQv9GA0L7RgtGP0LPQvtC8INGC0LXRgdGC0YMuXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgXCLQktC4INCy0LjRgtGA0LDRgtC40LvQuCB7MH0g0LcgezF9INC90LAg0YbRltC5INGB0YLQvtGA0ZbQvdGG0ZYg0ZYgezJ9INC3IHszfSDQtNC70Y8g0LLRgdGM0L7Qs9C+INGC0LXRgdGC0YMuXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcItCS0Lgg0LLQuNGC0YDQsNGC0LjQu9C4IHswfSDQtyB7MX0g0L3QsCDRhtGW0Lkg0YHRgtC+0YDRltC90YbRli5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCLQktC4INCy0LjRgtGA0LDRgtC40LvQuCB7MH0g0LcgezF9INC00LvRjyDQstGB0YzQvtCz0L4g0YLQtdGB0YLRgy5cIixcbiAgY2xlYW5DYXB0aW9uOiBcItCe0YfQuNGB0YLQuNGC0LhcIixcbiAgY2xlYXJDYXB0aW9uOiBcItCe0YfQuNGB0YLQuNGC0LhcIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwi0JLQuNCx0LXRgNGW0YLRjCDRhNCw0LnQu1wiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCLQktC40LTQsNC70LjRgtC4INGE0LDQudC7XCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwi0KLQsNC6XCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCLQndGWXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcItCS0Lgg0LLQv9C10LLQvdC10L3Rliwg0YnQviDRhdC+0YfQtdGC0LUg0LLQuNC00LDQu9C40YLQuCDRhtC10Lkg0YTQsNC50Ls6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcItCS0Lgg0LLQv9C10LLQvdC10L3Rliwg0YnQviDRhdC+0YfQtdGC0LUg0LLQuNC00LDQu9C40YLQuCDQstGB0ZYg0YTQsNC50LvQuD9cIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcItCd0LDQt9Cy0LAg0LfQsNC/0LjRgtCw0L3QvdGPXCIsXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcInVhXCJdID0gdWtyYWluaWFuU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcInVhXCJdID0gXCLRg9C60YDQsNGX0L3RgdGM0LrQsFwiO1xuIiwiLy9VbmNvbW1lbnQgdGhpcyBsaW5lIG9uIGNyZWF0aW5nIGEgdHJhbnNsYXRpb24gZmlsZVxuaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciB2aWV0bmFtZXNlU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIlByZXZpb3VzXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJOZXh0XCIsXG4gIGNvbXBsZXRlVGV4dDogXCJDb21wbGV0ZVwiLFxuICBwcmV2aWV3VGV4dDogXCJQcmV2aWV3XCIsXG4gIGVkaXRUZXh0OiBcIkVkaXRcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIlN0YXJ0XCIsXG4gIG90aGVySXRlbVRleHQ6IFwiT3RoZXIgKGRlc2NyaWJlKVwiLFxuICBub25lSXRlbVRleHQ6IFwiTm9uZVwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJTZWxlY3QgQWxsXCIsXG4gIHByb2dyZXNzVGV4dDogXCJQYWdlIHswfSBvZiB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIlJlY29yZCB7MH0gb2YgezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJBbnN3ZXJlZCB7MH0vezF9IHF1ZXN0aW9uc1wiLFxuICBlbXB0eVN1cnZleTogXCJUaGVyZSBpcyBubyB2aXNpYmxlIHBhZ2Ugb3IgcXVlc3Rpb24gaW4gdGhlIHN1cnZleS5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCJUaGFuayB5b3UgZm9yIGNvbXBsZXRpbmcgdGhlIHN1cnZleSFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcbiAgICBcIk91ciByZWNvcmRzIHNob3cgdGhhdCB5b3UgaGF2ZSBhbHJlYWR5IGNvbXBsZXRlZCB0aGlzIHN1cnZleS5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJMb2FkaW5nIFN1cnZleS4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJDaOG7jW4uLi5cIixcbiAgdmFsdWU6IFwidmFsdWVcIixcbiAgcmVxdWlyZWRFcnJvcjogXCJQbGVhc2UgYW5zd2VyIHRoZSBxdWVzdGlvbi5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiUGxlYXNlIGFuc3dlciBhdCBsZWFzdCBvbmUgcXVlc3Rpb24uXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiUGxlYXNlIGFuc3dlciBxdWVzdGlvbnMgaW4gYWxsIHJvd3MuXCIsXG4gIG51bWVyaWNFcnJvcjogXCJUaGUgdmFsdWUgc2hvdWxkIGJlIG51bWVyaWMuXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiUGxlYXNlIGVudGVyIGF0IGxlYXN0IHswfSBjaGFyYWN0ZXJzLlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIlBsZWFzZSBlbnRlciBsZXNzIHRoYW4gezB9IGNoYXJhY3RlcnMuXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwiUGxlYXNlIGVudGVyIG1vcmUgdGhhbiB7MH0gYW5kIGxlc3MgdGhhbiB7MX0gY2hhcmFjdGVycy5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJQbGVhc2UgZmlsbCBpbiBhdCBsZWFzdCB7MH0gcm93cy5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwiUGxlYXNlIHNlbGVjdCBhdCBsZWFzdCB7MH0gdmFyaWFudHMuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIlBsZWFzZSBzZWxlY3Qgbm8gbW9yZSB0aGFuIHswfSB2YXJpYW50cy5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIlRoZSAnezB9JyBzaG91bGQgYmUgZXF1YWwgb3IgbW9yZSB0aGFuIHsxfSBhbmQgZXF1YWwgb3IgbGVzcyB0aGFuIHsyfVwiLFxuICBudW1lcmljTWluOiBcIlRoZSAnezB9JyBzaG91bGQgYmUgZXF1YWwgb3IgbW9yZSB0aGFuIHsxfVwiLFxuICBudW1lcmljTWF4OiBcIlRoZSAnezB9JyBzaG91bGQgYmUgZXF1YWwgb3IgbGVzcyB0aGFuIHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwiUGxlYXNlIGVudGVyIGEgdmFsaWQgZS1tYWlsIGFkZHJlc3MuXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIlRoZSBleHByZXNzaW9uOiB7MH0gc2hvdWxkIHJldHVybiAndHJ1ZScuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCJUaGUgcmVxdWVzdCByZXR1cm5lZCBlcnJvciAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcIlRoZSByZXF1ZXN0IHJldHVybmVkIGVtcHR5IGRhdGEgb3IgdGhlICdwYXRoJyBwcm9wZXJ0eSBpcyBpbmNvcnJlY3RcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJUaGUgZmlsZSBzaXplIHNob3VsZCBub3QgZXhjZWVkIHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlBsZWFzZSBlbnRlciB0aGUgb3RoZXIgdmFsdWUuXCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgXCJZb3VyIGZpbGUgaXMgdXBsb2FkaW5nLiBQbGVhc2Ugd2FpdCBzZXZlcmFsIHNlY29uZHMgYW5kIHRyeSBhZ2Fpbi5cIixcbiAgbG9hZGluZ0ZpbGU6IFwiTG9hZGluZy4uLlwiLFxuICBjaG9vc2VGaWxlOiBcIkNob29zZSBmaWxlKHMpLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCJObyBmaWxlIGNob3NlblwiLFxuICBjb25maXJtRGVsZXRlOiBcIkRvIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGUgcmVjb3JkP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIlRoaXMgdmFsdWUgc2hvdWxkIGJlIHVuaXF1ZS5cIixcbiAgYWRkQ29sdW1uOiBcIkFkZCBjb2x1bW5cIixcbiAgYWRkUm93OiBcIkFkZCByb3dcIixcbiAgcmVtb3ZlUm93OiBcIlJlbW92ZVwiLFxuICBhZGRQYW5lbDogXCJBZGQgbmV3XCIsXG4gIHJlbW92ZVBhbmVsOiBcIlJlbW92ZVwiLFxuICBjaG9pY2VzX0l0ZW06IFwiaXRlbVwiLFxuICBtYXRyaXhfY29sdW1uOiBcIkNvbHVtblwiLFxuICBtYXRyaXhfcm93OiBcIlJvd1wiLFxuICBzYXZpbmdEYXRhOiBcIlRoZSByZXN1bHRzIGFyZSBzYXZpbmcgb24gdGhlIHNlcnZlci4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwiQW4gZXJyb3Igb2NjdXJyZWQgYW5kIHdlIGNvdWxkIG5vdCBzYXZlIHRoZSByZXN1bHRzLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJUaGUgcmVzdWx0cyB3ZXJlIHNhdmVkIHN1Y2Nlc3NmdWxseSFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIlRyeSBhZ2FpblwiLFxuICB0aW1lck1pbjogXCJtaW5cIixcbiAgdGltZXJTZWM6IFwic2VjXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwiWW91IGhhdmUgc3BlbnQgezB9IG9uIHRoaXMgcGFnZSBhbmQgezF9IGluIHRvdGFsLlwiLFxuICB0aW1lclNwZW50UGFnZTogXCJZb3UgaGF2ZSBzcGVudCB7MH0gb24gdGhpcyBwYWdlLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIllvdSBoYXZlIHNwZW50IHswfSBpbiB0b3RhbC5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcIllvdSBoYXZlIHNwZW50IHswfSBvZiB7MX0gb24gdGhpcyBwYWdlIGFuZCB7Mn0gb2YgezN9IGluIHRvdGFsLlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCJZb3UgaGF2ZSBzcGVudCB7MH0gb2YgezF9IG9uIHRoaXMgcGFnZS5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJZb3UgaGF2ZSBzcGVudCB7MH0gb2YgezF9IGluIHRvdGFsLlwiLFxuICBjbGVhbkNhcHRpb246IFwiQ2xlYW5cIixcbiAgY2xlYXJDYXB0aW9uOiBcIkNsZWFyXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIkNob29zZSBmaWxlXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIlJlbW92ZSB0aGlzIGZpbGVcIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJZZXNcIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIk5vXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIkFyZSB5b3Ugc3VyZSB0aGF0IHlvdSB3YW50IHRvIHJlbW92ZSB0aGlzIGZpbGU6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIkFyZSB5b3Ugc3VyZSB0aGF0IHlvdSB3YW50IHRvIHJlbW92ZSBhbGwgZmlsZXM/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJRdWVzdGlvbiBUaXRsZVwiLFxufTtcblxuLy9VbmNvbW1lbnQgdGhlc2UgdHdvIGxpbmVzIG9uIGNyZWF0aW5nIGEgdHJhbnNsYXRpb24gZmlsZS4gWW91IHNob3VsZCByZXBsYWNlIFwiZW5cIiBhbmQgZW5TdHJpbmdzIHdpdGggeW91ciBsb2NhbGUgKFwiZnJcIiwgXCJkZVwiIGFuZCBzbyBvbikgYW5kIHlvdXIgdmFyaWFibGUuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcInZpXCJdID0gdmlldG5hbWVzZVN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJ2aVwiXSA9IFwidmlldG5hbWVzZVwiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciB3ZWxzaFN1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCJCbGFlbm9yb2xcIixcbiAgcGFnZU5leHRUZXh0OiBcIk5lc2FmXCIsXG4gIGNvbXBsZXRlVGV4dDogXCJDd2JsaGF1XCIsXG4gIHByZXZpZXdUZXh0OiBcIlJoYWdvbHdnXCIsXG4gIGVkaXRUZXh0OiBcIkdvbHlndVwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwiRGVjaHJhdVwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIkFyYWxsIChkaXNncmlmaXdjaClcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIkRpbVwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJEZXdpcyB5IEN5ZmFuIFwiLFxuICBwcm9ncmVzc1RleHQ6IFwiVHVkYWxlbiB7MH0gbyB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIkNvZm5vZCB7MH0gbyB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcIldlZGkgYXRlYiB7MH0vezF9IGN3ZXN0aXduXCIsXG4gIGVtcHR5U3VydmV5OiBcIkRvZXMgZGltIG1vZGQgZ3dlbGQgdHVkYWxlbiBuYSBjaHdlc3Rpd24geW4geXIgYXJvbHdnLlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIkRpb2xjaCBhbSBsZW53aeKAmXIgaG9saWFkdXIhXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6IFwiUnlkeWNoIGNoaSB3ZWRpIGxsZW53aeKAmXIgYXJvbHdnIGh3biB5biBiYXJvZCB5biDDtGwgZWluIGNvZm5vZGlvbi5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJXcnRoaeKAmW4gTGx3eXRob+KAmXIgQXJvbHdnLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIkRld2lzd2NoLi4uXCIsXG4gIHZhbHVlOiBcImd3ZXJ0aFwiLFxuICByZXF1aXJlZEVycm9yOiBcIkF0ZWJ3Y2ggeSBjd2VzdGl3bi5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiQXRlYndjaCBvIGxlaWFmIHVuIGN3ZXN0aXduLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIkF0ZWJ3Y2ggeSBjd2VzdGl5bmF1IHltIG1ob2Igcmhlcy5cIixcbiAgbnVtZXJpY0Vycm9yOiBcIkR5bGFp4oCZciBnd2VydGggZm9kIHluIHJoaWYuXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiUmhvd2NoIG8gbGVpYWYgezB9IG5vZC5cIixcbiAgdGV4dE1heExlbmd0aDogXCJSaG93Y2ggbGFpIG5hIHswfSBub2QuXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwiUmhvd2NoIG8gbGVpYWYgezB9IG5vZCBvbmQgZGltIG13eSBuYSB7MX0uXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwiTGxlbndjaCBvIGxlaWFmIHswfSByaGVzLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJEZXdpc3djaCBvIGxlaWFmIHswfSBhbXJ5d2lvbHluLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJQZWlkaXdjaCDDoiBkZXdpcyBtd3kgbmEgezB9IGFtcnl3aW9seW4uXCIsXG4gIG51bWVyaWNNaW5NYXg6IFwiRHlsYWnigJlyICd7MH0nIGZvZCB5ciB1biBmYXRoIMOiIHsxfSBuZXXigJluIGZ3eSwgYeKAmXIgZmF0aCDDoiB7Mn0gbmV14oCZbiBsbGFpXCIsXG4gIG51bWVyaWNNaW46IFwiRHlsYWnigJlyICd7MH0nIGZvZCB5ciB1biBmYXRoIMOiIHsxfSBuZXXigJluIGZ3eVwiLFxuICBudW1lcmljTWF4OiBcIkR5bGFp4oCZciAnezB9JyBmb2QgeXIgdW4gZmF0aCDDoiB7MX0gbmV14oCZbiBsbGFpXCIsXG4gIGludmFsaWRFbWFpbDogXCJSaG93Y2ggZ3lmZWlyaWFkIGUtYm9zdCBkaWx5cy5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiRHlsYWnigJlyIG15bmVnaWFkIHswfSBhcndhaW4gYXQgJ3RydWUnLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiUm9lZGQgeSBjYWlzIHdlZGkgYXJ3YWluIGF0IHkgZ3dhbGwgJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwiUm9lZGQgeSBjYWlzIHdlZGkgYXJ3YWluIGF0IGRkYXRhIGd3YWcgbmV1IG1hZSBwcmlvZHdlZGQgeSDigJhwYXRo4oCZIHluIGFuZ2h5d2lyIFwiLFxuICBleGNlZWRNYXhTaXplOiBcIkRkeWxhaeKAmXIgZmZlaWwgZGRpbSBib2QgeW4gZnd5IG5hIHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlJob3djaCB5IGd3ZXJ0aCBhcmFsbC5cIixcbiAgdXBsb2FkaW5nRmlsZTogXCJNYWUgZWljaCBmZmVpbCB3cnRoaeKAmW4gbGx3eXRobyBpIGZ5bnkuIEFyaG9zd2NoIHljaHlkaWcgbyBlaWxpYWRhdSBhIHJob2kgY3lubmlnIGFyYWxsIGFybmkuXCIsXG4gIGxvYWRpbmdGaWxlOiBcIldydGhp4oCZbiBsbHd5dGhvLi4uXCIsXG4gIGNob29zZUZpbGU6IFwiRGV3aXN3Y2ggZmZlaWwoaWF1KS4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwiSGViIGRkZXdpcyBmZmVpbCBcIixcbiAgY29uZmlybURlbGV0ZTogXCJZZHljaCBjaGkgYW0gZGRpbGV14oCZciBjb2Zub2Q/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiRHlsYWnigJlyIGd3ZXJ0aCBod24gZm9kIHluIHVuaWdyeXcuXCIsXG4gIGFkZENvbHVtbjogXCJZY2h3YW5lZ3UgY29sb2ZuIFwiLFxuICBhZGRSb3c6IFwiWWNod2FuZWd1IHJoZXNcIixcbiAgcmVtb3ZlUm93OiBcIlR5bm51XCIsXG4gIGFkZFBhbmVsOiBcIlljaHdhbmVndSBv4oCZciBuZXd5ZGRcIixcbiAgcmVtb3ZlUGFuZWw6IFwiVHlubnVcIixcbiAgY2hvaWNlc19JdGVtOiBcImVpdGVtXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiQ29sb2ZuXCIsXG4gIG1hdHJpeF9yb3c6IFwiUmhlc1wiLFxuICBzYXZpbmdEYXRhOiBcIk1hZeKAmXIgY2FubHluaWFkYXXigJluIGNhZWwgZXUgY2FkdyBhciB5IGd3ZWlueWRkLi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCJSb2VkZCBnd2FsbCBhIGRvZWRkIGRpbSBtb2RkIGNhZHfigJlyIGNhbmx5bmlhZGF1LlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJXZWRpIGxsd3lkZG8gaSBnYWR34oCZciBjYW5seW5pYWRhdSFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIlJob3djaCBneW5uaWcgYXJhbGwgYXJuaVwiLFxuICB0aW1lck1pbjogXCJtdW5cIixcbiAgdGltZXJTZWM6IFwiZWlsXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwiUnlkeWNoIGNoaSB3ZWRpIHRyZXVsaW8gezB9IGFyIHkgZHVkYWxlbiBob24gYSB7MX0gZ3lkYeKAmWkgZ2lseWRkLlwiLFxuICB0aW1lclNwZW50UGFnZTogXCJSeWR5Y2ggY2hpIHdlZGkgdHJldWxpbyB7MH0gYXIgeSBkdWRhbGVuIGhvbi5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCJSeWR5Y2ggY2hpIHdlZGkgdHJldWxpbyB7MH0gZ3lkYeKAmWkgZ2lseWRkLlwiLFxuICB0aW1lckxpbWl0QWxsOiBcIlJ5ZHljaCBjaGkgd2VkaSB0cmV1bGlvIHswfSBvIHsxfSBhciB5IGR1ZGFsZW4gaG9uIGEgezJ9IG8gezN9IGd5ZGHigJlpIGdpbHlkZC5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwiUnlkeWNoIGNoaSB3ZWRpIHRyZXVsaW8gezB9IG8gezF9IGFyIHkgZHVkYWxlbiBob24uXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwiUnlkeWNoIGNoaSB3ZWRpIHRyZXVsaW8gezB9IG8gezF9IGd5ZGHigJlpIGdpbHlkZC5cIixcbiAgY2xlYW5DYXB0aW9uOiBcIkdsYW5oYXVcIixcbiAgY2xlYXJDYXB0aW9uOiBcIkNsaXJpb1wiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJEZXdpc3djaCBmZmVpbCBcIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwiVHlubnXigJlyIGZmZWlsIGhvbiBcIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJJYXduXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOYVwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCJZZHljaCBjaGnigJluIHNpxbVyIGVpY2ggYm9kIGFtIGR5bm514oCZciBmZmVpbCBob246IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIllkeWNoIGNoaeKAmW4gc2nFtXIgZWljaCBib2QgYW0gZHlubnUgcG9iIGZmZWlsP1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiVGVpdGwgeSBDd2VzdGl3biBcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiY3lcIl0gPSB3ZWxzaFN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJjeVwiXSA9IFwiY3ltcmFlZ1wiO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luIiwiaW1wb3J0IHsgSGFzaFRhYmxlIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcIi4vaXRlbXZhbHVlXCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBTZXJpYWxpemVyIH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuaW1wb3J0IHsgQ29uZGl0aW9uUnVubmVyIH0gZnJvbSBcIi4vY29uZGl0aW9uc1wiO1xuaW1wb3J0IHsgSGVscGVycyB9IGZyb20gXCIuL2hlbHBlcnNcIjtcblxuLyoqXG4gKiBBIE1vZGVsIGZvciBhIG1hdHJpeCBiYXNlIHF1ZXN0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25NYXRyaXhCYXNlTW9kZWw8VFJvdywgVENvbHVtbj4gZXh0ZW5kcyBRdWVzdGlvbiB7XG4gIHByb3RlY3RlZCBmaWx0ZXJlZENvbHVtbnM6IEFycmF5PFRDb2x1bW4+O1xuICBwcm90ZWN0ZWQgZmlsdGVyZWRSb3dzOiBBcnJheTxJdGVtVmFsdWU+O1xuICBwcm90ZWN0ZWQgZ2VuZXJhdGVkVmlzaWJsZVJvd3M6IEFycmF5PFRSb3c+ID0gbnVsbDtcbiAgcHJvdGVjdGVkIGdlbmVyYXRlZFRvdGFsUm93OiBUUm93ID0gbnVsbDtcbiAgcHVibGljIHZpc2libGVSb3dzQ2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xuXG4gIHByb3RlY3RlZCBjcmVhdGVDb2x1bW5WYWx1ZXMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVJdGVtVmFsdWVzKFwiY29sdW1uc1wiKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIHRoaXMuZmlsdGVyZWRSb3dzID0gbnVsbDtcbiAgICB0aGlzLmZpbHRlcmVkQ29sdW1ucyA9IG51bGw7XG4gICAgdGhpcy5jb2x1bW5zID0gdGhpcy5jcmVhdGVDb2x1bW5WYWx1ZXMoKTtcbiAgICB0aGlzLnJvd3MgPSB0aGlzLmNyZWF0ZUl0ZW1WYWx1ZXMoXCJyb3dzXCIpO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwibWF0cml4YmFzZVwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNDb21wb3NpdGVRdWVzdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gZmFsc2UsIHRvIGhpZGUgdGFibGUgaGVhZGVyLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0cnVlLlxuICAgKi9cbiAgcHVibGljIGdldCBzaG93SGVhZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93SGVhZGVyXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2hvd0hlYWRlcih2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93SGVhZGVyXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIGNvbHVtbnMuIEEgY29sdW1uIGhhcyBhIHZhbHVlIGFuZCBhbiBvcHRpb25hbCB0ZXh0XG4gICAqL1xuICBnZXQgY29sdW1ucygpOiBBcnJheTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY29sdW1uc1wiKTtcbiAgfVxuICBzZXQgY29sdW1ucyhuZXdWYWx1ZTogQXJyYXk8YW55Pikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNvbHVtbnNcIiwgbmV3VmFsdWUpO1xuICB9XG4gIHB1YmxpYyBnZXQgdmlzaWJsZUNvbHVtbnMoKTogQXJyYXk8YW55PiB7XG4gICAgcmV0dXJuICEhdGhpcy5maWx0ZXJlZENvbHVtbnMgPyB0aGlzLmZpbHRlcmVkQ29sdW1ucyA6IHRoaXMuY29sdW1ucztcbiAgfVxuICAvKipcbiAgICogVGhlIGxpc3Qgb2Ygcm93cy4gQSByb3cgaGFzIGEgdmFsdWUgYW5kIGFuIG9wdGlvbmFsIHRleHRcbiAgICovXG4gIGdldCByb3dzKCk6IEFycmF5PGFueT4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyb3dzXCIpO1xuICB9XG4gIHNldCByb3dzKG5ld1ZhbHVlOiBBcnJheTxhbnk+KSB7XG4gICAgdmFyIG5ld1Jvd3MgPSB0aGlzLnByb2Nlc3NSb3dzT25TZXQobmV3VmFsdWUpO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJvd3NcIiwgbmV3Um93cyk7XG4gICAgdGhpcy5maWx0ZXJJdGVtcygpO1xuICB9XG4gIHByb3RlY3RlZCBwcm9jZXNzUm93c09uU2V0KG5ld1Jvd3M6IEFycmF5PGFueT4pIHtcbiAgICByZXR1cm4gbmV3Um93cztcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VmlzaWJsZVJvd3MoKTogQXJyYXk8VFJvdz4ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbGlzdCBvZiB2aXNpYmxlIHJvd3MgYXMgbW9kZWwgb2JqZWN0cy5cbiAgICogQHNlZSByb3dzVmlzaWJsZUlmXG4gICAqL1xuICBwdWJsaWMgZ2V0IHZpc2libGVSb3dzKCk6IEFycmF5PFRSb3c+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRWaXNpYmxlUm93cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuIGV4cHJlc3Npb24gdGhhdCByZXR1cm5zIHRydWUgb3IgZmFsc2UuIEl0IHJ1bnMgYWdhaW5zdCBlYWNoIHJvdyBpdGVtIGFuZCBpZiBmb3IgdGhpcyBpdGVtIGl0IHJldHVybnMgdHJ1ZSwgdGhlbiB0aGUgaXRlbSBpcyB2aXNpYmxlIG90aGVyd2lzZSB0aGUgaXRlbSBiZWNvbWVzIGludmlzaWJsZS4gUGxlYXNlIHVzZSB7aXRlbX0gdG8gZ2V0IHRoZSBjdXJyZW50IGl0ZW0gdmFsdWUgaW4gdGhlIGV4cHJlc3Npb24uXG4gICAqIEBzZWUgdmlzaWJsZUlmXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJvd3NWaXNpYmxlSWYoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicm93c1Zpc2libGVJZlwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJvd3NWaXNpYmxlSWYodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyb3dzVmlzaWJsZUlmXCIsIHZhbCk7XG4gICAgdGhpcy5maWx0ZXJJdGVtcygpO1xuICB9XG4gIC8qKlxuICAgKiBBbiBleHByZXNzaW9uIHRoYXQgcmV0dXJucyB0cnVlIG9yIGZhbHNlLiBJdCBydW5zIGFnYWluc3QgZWFjaCBjb2x1bW4gaXRlbSBhbmQgaWYgZm9yIHRoaXMgaXRlbSBpdCByZXR1cm5zIHRydWUsIHRoZW4gdGhlIGl0ZW0gaXMgdmlzaWJsZSBvdGhlcndpc2UgdGhlIGl0ZW0gYmVjb21lcyBpbnZpc2libGUuIFBsZWFzZSB1c2Uge2l0ZW19IHRvIGdldCB0aGUgY3VycmVudCBpdGVtIHZhbHVlIGluIHRoZSBleHByZXNzaW9uLlxuICAgKiBAc2VlIHJvd3NWaXNpYmxlSWZcbiAgICovXG4gIHB1YmxpYyBnZXQgY29sdW1uc1Zpc2libGVJZigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjb2x1bW5zVmlzaWJsZUlmXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY29sdW1uc1Zpc2libGVJZih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNvbHVtbnNWaXNpYmxlSWZcIiwgdmFsKTtcbiAgICB0aGlzLmZpbHRlckl0ZW1zKCk7XG4gIH1cbiAgcHVibGljIHJ1bkNvbmRpdGlvbih2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIHN1cGVyLnJ1bkNvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIHRoaXMucnVuSXRlbXNDb25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZmlsdGVySXRlbXMoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuYXJlSW52aXNpYmxlRWxlbWVudHNTaG93aW5nKSB7XG4gICAgICB0aGlzLm9uUm93c0NoYW5nZWQoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24gfHwgIXRoaXMuZGF0YSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLnJ1bkl0ZW1zQ29uZGl0aW9uKFxuICAgICAgdGhpcy5nZXREYXRhRmlsdGVyZWRWYWx1ZXMoKSxcbiAgICAgIHRoaXMuZ2V0RGF0YUZpbHRlcmVkUHJvcGVydGllcygpXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25Db2x1bW5zQ2hhbmdlZCgpIHt9XG4gIHByb3RlY3RlZCBvblJvd3NDaGFuZ2VkKCkge1xuICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMudmlzaWJsZVJvd3NDaGFuZ2VkQ2FsbGJhY2spO1xuICB9XG4gIHByb3RlY3RlZCBzaG91bGRSdW5Db2x1bW5FeHByZXNzaW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5zdXJ2ZXkgfHwgIXRoaXMuc3VydmV5LmFyZUludmlzaWJsZUVsZW1lbnRzU2hvd2luZztcbiAgfVxuICBwcm90ZWN0ZWQgaGFzUm93c0FzSXRlbXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJvdGVjdGVkIHJ1bkl0ZW1zQ29uZGl0aW9uKFxuICAgIHZhbHVlczogSGFzaFRhYmxlPGFueT4sXG4gICAgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT5cbiAgKTogYm9vbGVhbiB7XG4gICAgdmFyIG9sZFZpc2libGVSb3dzID0gbnVsbDtcbiAgICBpZiAoISF0aGlzLmZpbHRlcmVkUm93cyAmJiAhSGVscGVycy5pc1ZhbHVlRW1wdHkodGhpcy5kZWZhdWx0VmFsdWUpKSB7XG4gICAgICBvbGRWaXNpYmxlUm93cyA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmZpbHRlcmVkUm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBvbGRWaXNpYmxlUm93cy5wdXNoKHRoaXMuZmlsdGVyZWRSb3dzW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIGhhc0NoYW5nZXMgPVxuICAgICAgdGhpcy5oYXNSb3dzQXNJdGVtcygpICYmIHRoaXMucnVuQ29uZGl0aW9uc0ZvclJvd3ModmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICB2YXIgaGFzQ29sdW1uc0NoYW5nZWQgPSB0aGlzLnJ1bkNvbmRpdGlvbnNGb3JDb2x1bW5zKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgaGFzQ2hhbmdlcyA9IGhhc0NvbHVtbnNDaGFuZ2VkIHx8IGhhc0NoYW5nZXM7XG4gICAgaWYgKGhhc0NoYW5nZXMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgISF0aGlzLnN1cnZleSAmJlxuICAgICAgICB0aGlzLnN1cnZleS5pc0NsZWFyVmFsdWVPbkhpZGRlbiAmJlxuICAgICAgICAoISF0aGlzLmZpbHRlcmVkQ29sdW1ucyB8fCAhIXRoaXMuZmlsdGVyZWRSb3dzKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuY2xlYXJJbmNvcnJlY3RWYWx1ZXMoKTtcbiAgICAgIH1cbiAgICAgIGlmICghIW9sZFZpc2libGVSb3dzKSB7XG4gICAgICAgIHRoaXMucmVzdG9yZU5ld1Zpc2libGVSb3dzVmFsdWVzKG9sZFZpc2libGVSb3dzKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2xlYXJHZW5lcmF0ZWRSb3dzKCk7XG4gICAgICBpZiAoaGFzQ29sdW1uc0NoYW5nZWQpIHtcbiAgICAgICAgdGhpcy5vbkNvbHVtbnNDaGFuZ2VkKCk7XG4gICAgICB9XG4gICAgICB0aGlzLm9uUm93c0NoYW5nZWQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc0NoYW5nZXM7XG4gIH1cbiAgcHJvdGVjdGVkIGNsZWFyR2VuZXJhdGVkUm93cygpIHtcbiAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzID0gbnVsbDtcbiAgfVxuICBwcml2YXRlIHJ1bkNvbmRpdGlvbnNGb3JSb3dzKFxuICAgIHZhbHVlczogSGFzaFRhYmxlPGFueT4sXG4gICAgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT5cbiAgKTogYm9vbGVhbiB7XG4gICAgdmFyIHNob3dJbnZpc2liaWxlID1cbiAgICAgICEhdGhpcy5zdXJ2ZXkgJiYgdGhpcy5zdXJ2ZXkuYXJlSW52aXNpYmxlRWxlbWVudHNTaG93aW5nO1xuICAgIHZhciBydW5uZXIgPVxuICAgICAgIXNob3dJbnZpc2liaWxlICYmICEhdGhpcy5yb3dzVmlzaWJsZUlmXG4gICAgICAgID8gbmV3IENvbmRpdGlvblJ1bm5lcih0aGlzLnJvd3NWaXNpYmxlSWYpXG4gICAgICAgIDogbnVsbDtcbiAgICB0aGlzLmZpbHRlcmVkUm93cyA9IFtdO1xuICAgIHZhciBoYXNDaGFuZ2VkID0gSXRlbVZhbHVlLnJ1bkNvbmRpdGlvbnNGb3JJdGVtcyhcbiAgICAgIHRoaXMucm93cyxcbiAgICAgIHRoaXMuZmlsdGVyZWRSb3dzLFxuICAgICAgcnVubmVyLFxuICAgICAgdmFsdWVzLFxuICAgICAgcHJvcGVydGllcyxcbiAgICAgICFzaG93SW52aXNpYmlsZVxuICAgICk7XG4gICAgaWYgKHRoaXMuZmlsdGVyZWRSb3dzLmxlbmd0aCA9PT0gdGhpcy5yb3dzLmxlbmd0aCkge1xuICAgICAgdGhpcy5maWx0ZXJlZFJvd3MgPSBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcbiAgfVxuICBwcml2YXRlIHJ1bkNvbmRpdGlvbnNGb3JDb2x1bW5zKFxuICAgIHZhbHVlczogSGFzaFRhYmxlPGFueT4sXG4gICAgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT5cbiAgKTogYm9vbGVhbiB7XG4gICAgdmFyIHVzZUNvbHVtbnNFeHByZXNzaW9uID1cbiAgICAgICEhdGhpcy5zdXJ2ZXkgJiYgIXRoaXMuc3VydmV5LmFyZUludmlzaWJsZUVsZW1lbnRzU2hvd2luZztcbiAgICB2YXIgcnVubmVyID1cbiAgICAgIHVzZUNvbHVtbnNFeHByZXNzaW9uICYmICEhdGhpcy5jb2x1bW5zVmlzaWJsZUlmXG4gICAgICAgID8gbmV3IENvbmRpdGlvblJ1bm5lcih0aGlzLmNvbHVtbnNWaXNpYmxlSWYpXG4gICAgICAgIDogbnVsbDtcbiAgICB0aGlzLmZpbHRlcmVkQ29sdW1ucyA9IFtdO1xuICAgIHZhciBoYXNDaGFuZ2VkID0gSXRlbVZhbHVlLnJ1bkNvbmRpdGlvbnNGb3JJdGVtcyhcbiAgICAgIHRoaXMuY29sdW1ucyxcbiAgICAgIDxhbnk+dGhpcy5maWx0ZXJlZENvbHVtbnMsXG4gICAgICBydW5uZXIsXG4gICAgICB2YWx1ZXMsXG4gICAgICBwcm9wZXJ0aWVzLFxuICAgICAgdGhpcy5zaG91bGRSdW5Db2x1bW5FeHByZXNzaW9uKClcbiAgICApO1xuICAgIGlmICh0aGlzLmZpbHRlcmVkQ29sdW1ucy5sZW5ndGggPT09IHRoaXMuY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRDb2x1bW5zID0gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XG4gIH1cbiAgcHVibGljIGNsZWFySW5jb3JyZWN0VmFsdWVzKCkge1xuICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xuICAgIGlmICghdmFsKSByZXR1cm47XG4gICAgdmFyIG5ld1ZhbCA9IG51bGw7XG4gICAgdmFyIGlzQ2hhbmdlZCA9IGZhbHNlO1xuICAgIHZhciByb3dzID0gISF0aGlzLmZpbHRlcmVkUm93cyA/IHRoaXMuZmlsdGVyZWRSb3dzIDogdGhpcy5yb3dzO1xuICAgIHZhciBjb2x1bW5zID0gISF0aGlzLmZpbHRlcmVkQ29sdW1ucyA/IHRoaXMuZmlsdGVyZWRDb2x1bW5zIDogdGhpcy5jb2x1bW5zO1xuICAgIGZvciAodmFyIGtleSBpbiB2YWwpIHtcbiAgICAgIGlmIChcbiAgICAgICAgSXRlbVZhbHVlLmdldEl0ZW1CeVZhbHVlKHJvd3MsIGtleSkgJiZcbiAgICAgICAgSXRlbVZhbHVlLmdldEl0ZW1CeVZhbHVlKGNvbHVtbnMsIHZhbFtrZXldKVxuICAgICAgKSB7XG4gICAgICAgIGlmIChuZXdWYWwgPT0gbnVsbCkgbmV3VmFsID0ge307XG4gICAgICAgICg8YW55Pm5ld1ZhbClba2V5XSA9IHZhbFtrZXldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzQ2hhbmdlZCkge1xuICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbDtcbiAgICB9XG4gICAgc3VwZXIuY2xlYXJJbmNvcnJlY3RWYWx1ZXMoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY2xlYXJJbnZpc2libGVWYWx1ZXNJblJvd3MoKSB7XG4gICAgaWYgKHRoaXMuaXNFbXB0eSgpKSByZXR1cm47XG4gICAgdmFyIG5ld0RhdGEgPSB0aGlzLmdldFVuYmluZFZhbHVlKHRoaXMudmFsdWUpO1xuICAgIHZhciByb3dzID0gdGhpcy5yb3dzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IHJvd3NbaV0udmFsdWU7XG4gICAgICBpZiAoISFuZXdEYXRhW2tleV0gJiYgIXJvd3NbaV0uaXNWaXNpYmxlKSB7XG4gICAgICAgIGRlbGV0ZSBuZXdEYXRhW2tleV07XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMobmV3RGF0YSwgdGhpcy52YWx1ZSkpIHJldHVybjtcbiAgICB0aGlzLnZhbHVlID0gbmV3RGF0YTtcbiAgfVxuICBwcml2YXRlIHJlc3RvcmVOZXdWaXNpYmxlUm93c1ZhbHVlcyhvbGRWaXNpYmxlUm93czogYW55KSB7XG4gICAgdmFyIHJvd3MgPSAhIXRoaXMuZmlsdGVyZWRSb3dzID8gdGhpcy5maWx0ZXJlZFJvd3MgOiB0aGlzLnJvd3M7XG4gICAgdmFyIHZhbCA9IHRoaXMuZGVmYXVsdFZhbHVlO1xuICAgIHZhciBuZXdWYWx1ZSA9IHRoaXMuZ2V0VW5iaW5kVmFsdWUodGhpcy52YWx1ZSk7XG4gICAgdmFyIGlzQ2hhbmdlZCA9IGZhbHNlO1xuICAgIGZvciAodmFyIGtleSBpbiB2YWwpIHtcbiAgICAgIGlmIChcbiAgICAgICAgSXRlbVZhbHVlLmdldEl0ZW1CeVZhbHVlKHJvd3MsIGtleSkgJiZcbiAgICAgICAgIUl0ZW1WYWx1ZS5nZXRJdGVtQnlWYWx1ZShvbGRWaXNpYmxlUm93cywga2V5KVxuICAgICAgKSB7XG4gICAgICAgIGlmIChuZXdWYWx1ZSA9PSBudWxsKSBuZXdWYWx1ZSA9IHt9O1xuICAgICAgICAoPGFueT5uZXdWYWx1ZSlba2V5XSA9IHZhbFtrZXldO1xuICAgICAgICBpc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNDaGFuZ2VkKSB7XG4gICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgfVxuICB9XG59XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwibWF0cml4YmFzZVwiLFxuICBbXG4gICAgXCJjb2x1bW5zVmlzaWJsZUlmOmNvbmRpdGlvblwiLFxuICAgIFwicm93c1Zpc2libGVJZjpjb25kaXRpb25cIixcbiAgICB7IG5hbWU6IFwic2hvd0hlYWRlcjpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSxcbiAgXSxcbiAgdW5kZWZpbmVkLFxuICBcInF1ZXN0aW9uXCJcbik7XG4iLCJpbXBvcnQgeyBTZXJpYWxpemVyIH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuaW1wb3J0IHsgSGVscGVycyB9IGZyb20gXCIuL2hlbHBlcnNcIjtcbmltcG9ydCB7XG4gIElQYWdlLFxuICBJUGFuZWwsXG4gIElFbGVtZW50LFxuICBJU3VydmV5RWxlbWVudCxcbiAgSVF1ZXN0aW9uLFxufSBmcm9tIFwiLi9iYXNlLWludGVyZmFjZXNcIjtcbmltcG9ydCB7IERyYWdEcm9wSW5mbywgUGFuZWxNb2RlbEJhc2UsIFF1ZXN0aW9uUm93TW9kZWwgfSBmcm9tIFwiLi9wYW5lbFwiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuLyoqXG4gKiBUaGUgcGFnZSBvYmplY3QuIEl0IGhhcyBlbGVtZW50cyBjb2xsZWN0aW9uLCB0aGF0IGNvbnRhaW5zIHF1ZXN0aW9ucyBhbmQgcGFuZWxzLlxuICovXG5leHBvcnQgY2xhc3MgUGFnZU1vZGVsIGV4dGVuZHMgUGFuZWxNb2RlbEJhc2UgaW1wbGVtZW50cyBJUGFnZSB7XG4gIHByaXZhdGUgaGFzU2hvd25WYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcgPSBcIlwiKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMubG9jVGl0bGUub25HZXRUZXh0Q2FsbGJhY2sgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgICBpZiAoc2VsZi5udW0gPiAwKSByZXR1cm4gc2VsZi5udW0gKyBcIi4gXCIgKyB0ZXh0O1xuICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwibmF2aWdhdGlvblRpdGxlXCIsIHRoaXMsIHRydWUpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJuYXZpZ2F0aW9uRGVzY3JpcHRpb25cIiwgdGhpcywgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJwYWdlXCI7XG4gIH1cbiAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzUGFnZSgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gc2hvdyB0aXRsZSBpbiBuYXZpZ2F0aW9uIGJ1dHRvbnMuIElmIHRoZSB2YWx1ZSBpcyBlbXB0eSB0aGVuIHBhZ2UgbmFtZSBpcyB1c2VkLlxuICAgKiBAc2VlIHN1cnZleS5wcm9ncmVzc0JhclR5cGVcbiAgICovXG4gIHB1YmxpYyBnZXQgbmF2aWdhdGlvblRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwibmF2aWdhdGlvblRpdGxlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbmF2aWdhdGlvblRpdGxlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJuYXZpZ2F0aW9uVGl0bGVcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGxvY05hdmlnYXRpb25UaXRsZSgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJuYXZpZ2F0aW9uVGl0bGVcIik7XG4gIH1cbiAgcHVibGljIGdldCBuYXZpZ2F0aW9uRGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJuYXZpZ2F0aW9uRGVzY3JpcHRpb25cIik7XG4gIH1cbiAgcHVibGljIHNldCBuYXZpZ2F0aW9uRGVzY3JpcHRpb24odmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcIm5hdmlnYXRpb25EZXNjcmlwdGlvblwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgbG9jTmF2aWdhdGlvbkRlc2NyaXB0aW9uKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcIm5hdmlnYXRpb25EZXNjcmlwdGlvblwiKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHBhc3NlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicGFzc2VkXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IHBhc3NlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJwYXNzZWRcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZGVsZXRlKCkge1xuICAgIGlmICghIXRoaXMuc3VydmV5KSB7XG4gICAgICB0aGlzLnJlbW92ZVNlbGZGcm9tTGlzdCh0aGlzLnN1cnZleS5wYWdlcyk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBvbkZpcnN0UmVuZGVyaW5nKCkge1xuICAgIGlmICh0aGlzLndhc1Nob3duKSByZXR1cm47XG4gICAgc3VwZXIub25GaXJzdFJlbmRlcmluZygpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgdmlzaWJsZSBpbmRleCBvZiB0aGUgcGFnZS4gSXQgaGFzIHZhbHVlcyBmcm9tIDAgdG8gdmlzaWJsZSBwYWdlIGNvdW50IC0gMS5cbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC52aXNpYmxlUGFnZXNcbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5wYWdlc1xuICAgKi9cbiAgcHVibGljIGdldCB2aXNpYmxlSW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJsZUluZGV4XCIsIC0xKTtcbiAgfVxuICBwdWJsaWMgc2V0IHZpc2libGVJbmRleCh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVJbmRleFwiLCB2YWwpO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXJGaXJzdFJvd3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmlzRGVzaWduTW9kZSB8fCB0aGlzLnZpc2libGVJbmRleCA9PSAwO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUsIGlmIHRoZSBwYWdlIGlzIHN0YXJ0ZWQgcGFnZSBpbiB0aGUgc3VydmV5LiBJdCBjYW4gYmUgc2hvd24gb24gdGhlIHN0YXJ0IG9ubHkgYW5kIHRoZSBlbmQtdXNlciBjb3VsZCBub3QgY29tZWJhY2sgdG8gaXQgYWZ0ZXIgaXQgcGFzc2VkIGl0LlxuICAgKi9cbiAgcHVibGljIGdldCBpc1N0YXJ0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5ICYmIHRoaXMuc3VydmV5LmlzUGFnZVN0YXJ0ZWQodGhpcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGNhbGNDc3NDbGFzc2VzKCk6IGFueSB7XG4gICAgdmFyIGNzcyA9IHRoaXMuY3NzO1xuICAgIHZhciBjbGFzc2VzID0geyBwYWdlOiB7fSwgcGFnZVRpdGxlOiBcIlwiLCBwYWdlRGVzY3JpcHRpb246IFwiXCIsIHJvdzogXCJcIiB9O1xuICAgIHRoaXMuY29weUNzc0NsYXNzZXMoY2xhc3Nlcy5wYWdlLCBjc3MucGFnZSk7XG4gICAgaWYgKCEhY3NzLnBhZ2VUaXRsZSkge1xuICAgICAgY2xhc3Nlcy5wYWdlVGl0bGUgPSBjc3MucGFnZVRpdGxlO1xuICAgIH1cbiAgICBpZiAoISFjc3MucGFnZURlc2NyaXB0aW9uKSB7XG4gICAgICBjbGFzc2VzLnBhZ2VEZXNjcmlwdGlvbiA9IGNzcy5wYWdlRGVzY3JpcHRpb247XG4gICAgfVxuICAgIGlmICghIWNzcy5yb3cpIHtcbiAgICAgIGNsYXNzZXMucm93ID0gY3NzLnJvdztcbiAgICB9XG4gICAgaWYgKHRoaXMuc3VydmV5KSB7XG4gICAgICB0aGlzLnN1cnZleS51cGRhdGVQYWdlQ3NzQ2xhc3Nlcyh0aGlzLCBjbGFzc2VzKTtcbiAgICB9XG4gICAgcmV0dXJuIGNsYXNzZXM7XG4gIH1cbiAgZ2V0SXNQYWdlVmlzaWJsZShleGNlcHRpb25RdWVzdGlvbjogSVF1ZXN0aW9uKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNTdGFydGVkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHN1cGVyLmdldElzUGFnZVZpc2libGUoZXhjZXB0aW9uUXVlc3Rpb24pO1xuICB9XG4gIHB1YmxpYyBnZXQgbnVtKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJudW1cIiwgLTEpO1xuICB9XG4gIHB1YmxpYyBzZXQgbnVtKHZhbDogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMubnVtID09IHZhbCkgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm51bVwiLCB2YWwpO1xuICAgIHRoaXMub25OdW1DaGFuZ2VkKHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIFwiaGlkZVwiIHRvIG1ha2UgXCJQcmV2XCIsIFwiTmV4dFwiIGFuZCBcIkNvbXBsZXRlXCIgYnV0dG9ucyBhcmUgaW52aXNpYmxlIGZvciB0aGlzIHBhZ2UuIFNldCB0aGlzIHByb3BlcnR5IHRvIFwic2hvd1wiIHRvIG1ha2UgdGhlc2UgYnV0dG9ucyB2aXNpYmxlLCBldmVuIGlmIHN1cnZleSBzaG93TmF2aWdhdGlvbkJ1dHRvbnMgcHJvcGVydHkgaXMgZmFsc2UuXG4gICAqIEBzZWUgU3VydmV5TW9kZS5zaG93TmF2aWdhdGlvbkJ1dHRvbnNcbiAgICovXG4gIHB1YmxpYyBnZXQgbmF2aWdhdGlvbkJ1dHRvbnNWaXNpYmlsaXR5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm5hdmlnYXRpb25CdXR0b25zVmlzaWJpbGl0eVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IG5hdmlnYXRpb25CdXR0b25zVmlzaWJpbGl0eSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm5hdmlnYXRpb25CdXR0b25zVmlzaWJpbGl0eVwiLCB2YWwudG9Mb3dlckNhc2UoKSk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBwcm9wZXJ0eSByZXR1cm5zIHRydWUsIGlmIHRoZSBwYWdlIGhhcyBiZWVuIHNob3duIHRvIHRoZSBlbmQtdXNlci5cbiAgICovXG4gIHB1YmxpYyBnZXQgd2FzU2hvd24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzU2hvd25WYWx1ZTtcbiAgfVxuICBnZXQgaGFzU2hvd24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMud2FzU2hvd247XG4gIH1cbiAgcHVibGljIHNldFdhc1Nob3duKHZhbDogYm9vbGVhbikge1xuICAgIGlmICh2YWwgPT0gdGhpcy5oYXNTaG93blZhbHVlKSByZXR1cm47XG4gICAgdGhpcy5oYXNTaG93blZhbHVlID0gdmFsO1xuICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSkgcmV0dXJuO1xuICAgIGlmICh2YWwgPT0gdHJ1ZSAmJiB0aGlzLmFyZVF1ZXN0aW9uc1JhbmRvbWl6ZWQpIHtcbiAgICAgIHRoaXMucmFuZG9taXplRWxlbWVudHMoKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBpc1JhbmRvbWl6aW5nID0gZmFsc2U7XG4gIHByaXZhdGUgcmFuZG9taXplRWxlbWVudHMoKSB7XG4gICAgaWYgKHRoaXMuaXNSYW5kb21pemluZykgcmV0dXJuO1xuICAgIHRoaXMuaXNSYW5kb21pemluZyA9IHRydWU7XG4gICAgdmFyIG9sZEVsZW1lbnRzID0gW107XG4gICAgdmFyIGVsZW1lbnRzID0gdGhpcy5lbGVtZW50cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBvbGRFbGVtZW50cy5wdXNoKGVsZW1lbnRzW2ldKTtcbiAgICB9XG4gICAgdmFyIG5ld0VsZW1lbnRzID0gSGVscGVycy5yYW5kb21pemVBcnJheTxJRWxlbWVudD4ob2xkRWxlbWVudHMpO1xuICAgIHRoaXMuZWxlbWVudHMuc3BsaWNlKDAsIHRoaXMuZWxlbWVudHMubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld0VsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmVsZW1lbnRzLnB1c2gobmV3RWxlbWVudHNbaV0pO1xuICAgIH1cbiAgICB0aGlzLmlzUmFuZG9taXppbmcgPSBmYWxzZTtcbiAgfVxuICAvKipcbiAgICogVGhlIHByb3BlcnR5IHJldHVybnMgdHJ1ZSwgaWYgdGhlIGVsZW1lbnRzIGFyZSByYW5kb21pemVkIG9uIHRoZSBwYWdlXG4gICAqIEBzZWUgaGFzU2hvd25cbiAgICogQHNlZSBxdWVzdGlvbnNPcmRlclxuICAgKiBAc2VlIFN1cnZleU1vZGVsLnF1ZXN0aW9uc09yZGVyXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFyZVF1ZXN0aW9uc1JhbmRvbWl6ZWQoKTogYm9vbGVhbiB7XG4gICAgdmFyIG9yZGVyID1cbiAgICAgIHRoaXMucXVlc3Rpb25zT3JkZXIgPT0gXCJkZWZhdWx0XCIgJiYgdGhpcy5zdXJ2ZXlcbiAgICAgICAgPyB0aGlzLnN1cnZleS5xdWVzdGlvbnNPcmRlclxuICAgICAgICA6IHRoaXMucXVlc3Rpb25zT3JkZXI7XG4gICAgcmV0dXJuIG9yZGVyID09IFwicmFuZG9tXCI7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIHJhbmRvbWl6ZSBxdWVzdGlvbnMuIFNldCBpdCB0byAncmFuZG9tJyB0byByYW5kb21pemUgcXVlc3Rpb25zLCAnaW5pdGlhbCcgdG8ga2VlcCB0aGVtIGluIHRoZSBzYW1lIG9yZGVyIG9yICdkZWZhdWx0JyB0byB1c2UgdGhlIFN1cnZleSBxdWVzdGlvbnNPcmRlciBwcm9wZXJ0eVxuICAgKiBAc2VlIFN1cnZleU1vZGVsLnF1ZXN0aW9uc09yZGVyXG4gICAqIEBzZWUgYXJlUXVlc3Rpb25zUmFuZG9taXplZFxuICAgKi9cbiAgcHVibGljIGdldCBxdWVzdGlvbnNPcmRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicXVlc3Rpb25zT3JkZXJcIik7XG4gIH1cbiAgcHVibGljIHNldCBxdWVzdGlvbnNPcmRlcih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInF1ZXN0aW9uc09yZGVyXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIENhbGwgaXQgdG8gc2Nyb2xsIHRvIHRoZSBwYWdlIHRvcC5cbiAgICovXG4gIHB1YmxpYyBzY3JvbGxUb1RvcCgpIHtcbiAgICBpZiAoISF0aGlzLnN1cnZleSkge1xuICAgICAgdGhpcy5zdXJ2ZXkuc2Nyb2xsRWxlbWVudFRvVG9wKHRoaXMsIG51bGwsIHRoaXMsIHRoaXMuaWQpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogVGltZSBpbiBzZWNvbmRzIGVuZC11c2VyIHNwZW50IG9uIHRoaXMgcGFnZVxuICAgKi9cbiAgcHVibGljIHRpbWVTcGVudCA9IDA7XG4gIC8vIHB1YmxpYyBnZXQgdGltZVNwZW50KCk6IG51bWJlciB7XG4gIC8vICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInRpbWVTcGVudFwiLCAwKTtcbiAgLy8gfVxuICAvLyBwdWJsaWMgc2V0IHRpbWVTcGVudCh2YWw6IG51bWJlcikge1xuICAvLyAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInRpbWVTcGVudFwiLCB2YWwpO1xuICAvLyB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIGFsbCBwYW5lbHMgaW4gdGhlIHBhZ2VcbiAgICovXG4gIHB1YmxpYyBnZXRQYW5lbHMoXG4gICAgdmlzaWJsZU9ubHk6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBpbmNsdWRpbmdEZXNpZ25UaW1lOiBib29sZWFuID0gZmFsc2VcbiAgKTogQXJyYXk8SVBhbmVsPiB7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheTxJUGFuZWw+KCk7XG4gICAgdGhpcy5hZGRQYW5lbHNJbnRvTGlzdChyZXN1bHQsIHZpc2libGVPbmx5LCBpbmNsdWRpbmdEZXNpZ25UaW1lKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSB0aW1lIGluIHNlY29uZHMgdGhhdCBlbmQtdXNlciBoYXMgdG8gY29tcGxldGUgdGhlIHBhZ2UuIElmIHRoZSB2YWx1ZSBpcyAwIG9yIGxlc3MsIHRoZSBlbmQtdXNlciBoYXMgdW5saW1pdGVkIG51bWJlciBvZiB0aW1lIHRvIGZpbmlzaCB0aGUgcGFnZS5cbiAgICogQHNlZSBzdGFydFRpbWVyXG4gICAqIEBzZWUgU3VydmV5TW9kZWwubWF4VGltZVRvRmluaXNoUGFnZVxuICAgKi9cbiAgcHVibGljIGdldCBtYXhUaW1lVG9GaW5pc2goKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWF4VGltZVRvRmluaXNoXCIsIDApO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4VGltZVRvRmluaXNoKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWF4VGltZVRvRmluaXNoXCIsIHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uTnVtQ2hhbmdlZCh2YWx1ZTogbnVtYmVyKSB7fVxuICBwcm90ZWN0ZWQgb25WaXNpYmxlQ2hhbmdlZCgpIHtcbiAgICBpZiAodGhpcy5pc1JhbmRvbWl6aW5nKSByZXR1cm47XG4gICAgc3VwZXIub25WaXNpYmxlQ2hhbmdlZCgpO1xuICAgIGlmICh0aGlzLnN1cnZleSAhPSBudWxsKSB7XG4gICAgICB0aGlzLnN1cnZleS5wYWdlVmlzaWJpbGl0eUNoYW5nZWQodGhpcywgdGhpcy5pc1Zpc2libGUpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGRyYWdEcm9wSW5mbzogRHJhZ0Ryb3BJbmZvO1xuICBwdWJsaWMgZHJhZ0Ryb3BTdGFydChcbiAgICBzcmM6IElFbGVtZW50LFxuICAgIHRhcmdldDogSUVsZW1lbnQsXG4gICAgbmVzdGVkUGFuZWxEZXB0aDogbnVtYmVyID0gLTFcbiAgKSB7XG4gICAgdGhpcy5kcmFnRHJvcEluZm8gPSBuZXcgRHJhZ0Ryb3BJbmZvKHNyYywgdGFyZ2V0LCBuZXN0ZWRQYW5lbERlcHRoKTtcbiAgfVxuICBwdWJsaWMgZHJhZ0Ryb3BNb3ZlVG8oXG4gICAgZGVzdGluYXRpb246IElTdXJ2ZXlFbGVtZW50LFxuICAgIGlzQm90dG9tOiBib29sZWFuID0gZmFsc2UsXG4gICAgaXNFZGdlOiBib29sZWFuID0gZmFsc2VcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmRyYWdEcm9wSW5mbykgcmV0dXJuIGZhbHNlO1xuICAgIHRoaXMuZHJhZ0Ryb3BJbmZvLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgdGhpcy5kcmFnRHJvcEluZm8uaXNCb3R0b20gPSBpc0JvdHRvbTtcbiAgICB0aGlzLmRyYWdEcm9wSW5mby5pc0VkZ2UgPSBpc0VkZ2U7XG4gICAgdGhpcy5jb3JyZWN0RHJhZ0Ryb3BJbmZvKHRoaXMuZHJhZ0Ryb3BJbmZvKTtcbiAgICBpZiAoIXRoaXMuZHJhZ0Ryb3BDYW5Ecm9wVGFnZXJ0KCkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIXRoaXMuZHJhZ0Ryb3BDYW5Ecm9wU291cmNlKCkgfHwgIXRoaXMuZHJhZ0Ryb3BBbGxvd0Zyb21TdXJ2ZXkoKSkge1xuICAgICAgaWYgKCEhdGhpcy5kcmFnRHJvcEluZm8uc291cmNlKSB7XG4gICAgICAgIHZhciByb3cgPSB0aGlzLmRyYWdEcm9wRmluZFJvdyh0aGlzLmRyYWdEcm9wSW5mby50YXJnZXQpO1xuICAgICAgICB0aGlzLnVwZGF0ZVJvd3NSZW1vdmVFbGVtZW50RnJvbVJvdyh0aGlzLmRyYWdEcm9wSW5mby50YXJnZXQsIHJvdyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuZHJhZ0Ryb3BBZGRUYXJnZXQodGhpcy5kcmFnRHJvcEluZm8pO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByaXZhdGUgY29ycmVjdERyYWdEcm9wSW5mbyhkcmFnRHJvcEluZm86IERyYWdEcm9wSW5mbykge1xuICAgIGlmICghZHJhZ0Ryb3BJbmZvLmRlc3RpbmF0aW9uKSByZXR1cm47XG4gICAgdmFyIHBhbmVsID0gKDxJRWxlbWVudD5kcmFnRHJvcEluZm8uZGVzdGluYXRpb24pLmlzUGFuZWxcbiAgICAgID8gPElQYW5lbD4oPGFueT5kcmFnRHJvcEluZm8uZGVzdGluYXRpb24pXG4gICAgICA6IG51bGw7XG4gICAgaWYgKCFwYW5lbCkgcmV0dXJuO1xuICAgIGlmIChcbiAgICAgICFkcmFnRHJvcEluZm8udGFyZ2V0LmlzTGF5b3V0VHlwZVN1cHBvcnRlZChwYW5lbC5nZXRDaGlsZHJlbkxheW91dFR5cGUoKSlcbiAgICApIHtcbiAgICAgIGRyYWdEcm9wSW5mby5pc0VkZ2UgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGRyYWdEcm9wQWxsb3dGcm9tU3VydmV5KCk6IGJvb2xlYW4ge1xuICAgIHZhciBkZXN0ID0gdGhpcy5kcmFnRHJvcEluZm8uZGVzdGluYXRpb247XG4gICAgaWYgKCFkZXN0IHx8ICF0aGlzLnN1cnZleSkgcmV0dXJuIHRydWU7XG4gICAgdmFyIGluc2VydEJlZm9yZTogSUVsZW1lbnQgPSBudWxsO1xuICAgIHZhciBpbnNlcnRBZnRlcjogSUVsZW1lbnQgPSBudWxsO1xuICAgIHZhciBwYXJlbnQgPVxuICAgICAgZGVzdC5pc1BhZ2UgfHwgKCF0aGlzLmRyYWdEcm9wSW5mby5pc0VkZ2UgJiYgKDxJRWxlbWVudD5kZXN0KS5pc1BhbmVsKVxuICAgICAgICA/IGRlc3RcbiAgICAgICAgOiAoPElFbGVtZW50PmRlc3QpLnBhcmVudDtcbiAgICBpZiAoIWRlc3QuaXNQYWdlKSB7XG4gICAgICB2YXIgY29udGFpbmVyID0gKDxJRWxlbWVudD5kZXN0KS5wYXJlbnQ7XG4gICAgICBpZiAoISFjb250YWluZXIpIHtcbiAgICAgICAgdmFyIGVsZW1lbnRzID0gKDxQYW5lbE1vZGVsQmFzZT5jb250YWluZXIpLmVsZW1lbnRzO1xuICAgICAgICB2YXIgaW5kZXggPSBlbGVtZW50cy5pbmRleE9mKDxJRWxlbWVudD5kZXN0KTtcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICBpbnNlcnRCZWZvcmUgPSA8SUVsZW1lbnQ+ZGVzdDtcbiAgICAgICAgICBpbnNlcnRBZnRlciA9IDxJRWxlbWVudD5kZXN0O1xuICAgICAgICAgIGlmICh0aGlzLmRyYWdEcm9wSW5mby5pc0JvdHRvbSkge1xuICAgICAgICAgICAgaW5zZXJ0QmVmb3JlID1cbiAgICAgICAgICAgICAgaW5kZXggPCBlbGVtZW50cy5sZW5ndGggLSAxID8gZWxlbWVudHNbaW5kZXggKyAxXSA6IG51bGw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGluc2VydEFmdGVyID0gaW5kZXggPiAwID8gZWxlbWVudHNbaW5kZXggLSAxXSA6IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgdGFyZ2V0OiB0aGlzLmRyYWdEcm9wSW5mby50YXJnZXQsXG4gICAgICBzb3VyY2U6IHRoaXMuZHJhZ0Ryb3BJbmZvLnNvdXJjZSxcbiAgICAgIHBhcmVudDogcGFyZW50LFxuICAgICAgaW5zZXJ0QWZ0ZXI6IGluc2VydEFmdGVyLFxuICAgICAgaW5zZXJ0QmVmb3JlOiBpbnNlcnRCZWZvcmUsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkuZHJhZ0FuZERyb3BBbGxvdyhvcHRpb25zKTtcbiAgfVxuICBwdWJsaWMgZHJhZ0Ryb3BGaW5pc2goaXNDYW5jZWw6IGJvb2xlYW4gPSBmYWxzZSk6IElFbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuZHJhZ0Ryb3BJbmZvKSByZXR1cm47XG4gICAgdmFyIHRhcmdldCA9IHRoaXMuZHJhZ0Ryb3BJbmZvLnRhcmdldDtcbiAgICB2YXIgcm93ID0gdGhpcy5kcmFnRHJvcEZpbmRSb3codGFyZ2V0KTtcbiAgICB2YXIgdGFyZ2V0SW5kZXggPSB0aGlzLmRyYWdEcm9wR2V0RWxlbWVudEluZGV4KHRhcmdldCwgcm93KTtcbiAgICB0aGlzLnVwZGF0ZVJvd3NSZW1vdmVFbGVtZW50RnJvbVJvdyh0YXJnZXQsIHJvdyk7XG4gICAgaWYgKCFpc0NhbmNlbCAmJiAhIXJvdykge1xuICAgICAgdmFyIHNyYyA9IHRoaXMuZHJhZ0Ryb3BJbmZvLnNvdXJjZTtcbiAgICAgIHZhciBpc1NhbWVQYW5lbCA9IGZhbHNlO1xuICAgICAgaWYgKCEhc3JjICYmICEhc3JjLnBhcmVudCkge1xuICAgICAgICBpc1NhbWVQYW5lbCA9IHJvdy5wYW5lbCA9PSBzcmMucGFyZW50O1xuICAgICAgICBpZiAoaXNTYW1lUGFuZWwpIHtcbiAgICAgICAgICByb3cucGFuZWwuZHJhZ0Ryb3BNb3ZlRWxlbWVudChzcmMsIHRhcmdldCwgdGFyZ2V0SW5kZXgpO1xuICAgICAgICAgIHRhcmdldEluZGV4ID0gLTE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3JjLnBhcmVudC5yZW1vdmVFbGVtZW50KHNyYyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0YXJnZXRJbmRleCA+IC0xKSB7XG4gICAgICAgIHJvdy5wYW5lbC5hZGRFbGVtZW50KHRhcmdldCwgdGFyZ2V0SW5kZXgpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmRyYWdEcm9wSW5mbyA9IG51bGw7XG4gICAgcmV0dXJuICFpc0NhbmNlbCA/IHRhcmdldCA6IG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBkcmFnRHJvcEdldEVsZW1lbnRJbmRleChcbiAgICB0YXJnZXQ6IElFbGVtZW50LFxuICAgIHJvdzogUXVlc3Rpb25Sb3dNb2RlbFxuICApOiBudW1iZXIge1xuICAgIGlmICghcm93KSByZXR1cm4gLTE7XG4gICAgdmFyIGluZGV4ID0gcm93LmVsZW1lbnRzLmluZGV4T2YodGFyZ2V0KTtcbiAgICBpZiAocm93LmluZGV4ID09IDApIHJldHVybiBpbmRleDtcbiAgICB2YXIgcHJldlJvdyA9IHJvdy5wYW5lbC5yb3dzW3Jvdy5pbmRleCAtIDFdO1xuICAgIHZhciBwcmV2RWxlbWVudCA9IHByZXZSb3cuZWxlbWVudHNbcHJldlJvdy5lbGVtZW50cy5sZW5ndGggLSAxXTtcbiAgICByZXR1cm4gaW5kZXggKyByb3cucGFuZWwuZWxlbWVudHMuaW5kZXhPZihwcmV2RWxlbWVudCkgKyAxO1xuICB9XG4gIHByaXZhdGUgZHJhZ0Ryb3BDYW5Ecm9wVGFnZXJ0KCk6IGJvb2xlYW4ge1xuICAgIHZhciBkZXN0aW5hdGlvbiA9IHRoaXMuZHJhZ0Ryb3BJbmZvLmRlc3RpbmF0aW9uO1xuICAgIGlmICghZGVzdGluYXRpb24gfHwgZGVzdGluYXRpb24uaXNQYWdlKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5kcmFnRHJvcENhbkRyb3BDb3JlKFxuICAgICAgdGhpcy5kcmFnRHJvcEluZm8udGFyZ2V0LFxuICAgICAgPElFbGVtZW50PmRlc3RpbmF0aW9uXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGRyYWdEcm9wQ2FuRHJvcFNvdXJjZSgpOiBib29sZWFuIHtcbiAgICB2YXIgc291cmNlID0gdGhpcy5kcmFnRHJvcEluZm8uc291cmNlO1xuICAgIGlmICghc291cmNlKSByZXR1cm4gdHJ1ZTtcbiAgICB2YXIgZGVzdGluYXRpb24gPSA8SUVsZW1lbnQ+dGhpcy5kcmFnRHJvcEluZm8uZGVzdGluYXRpb247XG4gICAgaWYgKCF0aGlzLmRyYWdEcm9wQ2FuRHJvcENvcmUoc291cmNlLCBkZXN0aW5hdGlvbikpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5kcmFnRHJvcENhbkRyb3BOb3ROZXh0KFxuICAgICAgc291cmNlLFxuICAgICAgZGVzdGluYXRpb24sXG4gICAgICB0aGlzLmRyYWdEcm9wSW5mby5pc0VkZ2UsXG4gICAgICB0aGlzLmRyYWdEcm9wSW5mby5pc0JvdHRvbVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBkcmFnRHJvcENhbkRyb3BDb3JlKFxuICAgIHRhcmdldDogSUVsZW1lbnQsXG4gICAgZGVzdGluYXRpb246IElFbGVtZW50XG4gICk6IGJvb2xlYW4ge1xuICAgIGlmICghZGVzdGluYXRpb24pIHJldHVybiB0cnVlO1xuICAgIGlmICh0aGlzLmRyYWdEcm9wSXNTYW1lRWxlbWVudChkZXN0aW5hdGlvbiwgdGFyZ2V0KSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0YXJnZXQuaXNQYW5lbCkge1xuICAgICAgdmFyIHBubCA9IDxQYW5lbE1vZGVsQmFzZT4oPGFueT50YXJnZXQpO1xuICAgICAgaWYgKFxuICAgICAgICBwbmwuY29udGFpbnNFbGVtZW50KGRlc3RpbmF0aW9uKSB8fFxuICAgICAgICAhIXBubC5nZXRFbGVtZW50QnlOYW1lKGRlc3RpbmF0aW9uLm5hbWUpXG4gICAgICApXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJpdmF0ZSBkcmFnRHJvcENhbkRyb3BOb3ROZXh0KFxuICAgIHNvdXJjZTogSUVsZW1lbnQsXG4gICAgZGVzdGluYXRpb246IElFbGVtZW50LFxuICAgIGlzRWRnZTogYm9vbGVhbixcbiAgICBpc0JvdHRvbTogYm9vbGVhblxuICApOiBib29sZWFuIHtcbiAgICBpZiAoIWRlc3RpbmF0aW9uIHx8IChkZXN0aW5hdGlvbi5pc1BhbmVsICYmICFpc0VkZ2UpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAodHlwZW9mIHNvdXJjZS5wYXJlbnQgPT09IFwidW5kZWZpbmVkXCIgfHwgc291cmNlLnBhcmVudCAhPT0gZGVzdGluYXRpb24ucGFyZW50KSByZXR1cm4gdHJ1ZTtcbiAgICB2YXIgcG5sID0gPFBhbmVsTW9kZWxCYXNlPnNvdXJjZS5wYXJlbnQ7XG4gICAgdmFyIHNyY0luZGV4ID0gcG5sLmVsZW1lbnRzLmluZGV4T2Yoc291cmNlKTtcbiAgICB2YXIgZGVzdEluZGV4ID0gcG5sLmVsZW1lbnRzLmluZGV4T2YoZGVzdGluYXRpb24pO1xuICAgIGlmIChkZXN0SW5kZXggPCBzcmNJbmRleCAmJiAhaXNCb3R0b20pIGRlc3RJbmRleC0tO1xuICAgIGlmIChpc0JvdHRvbSkgZGVzdEluZGV4Kys7XG4gICAgcmV0dXJuIHNyY0luZGV4IDwgZGVzdEluZGV4XG4gICAgICA/IGRlc3RJbmRleCAtIHNyY0luZGV4ID4gMVxuICAgICAgOiBzcmNJbmRleCAtIGRlc3RJbmRleCA+IDA7XG4gIH1cblxuICBwcml2YXRlIGRyYWdEcm9wSXNTYW1lRWxlbWVudChlbDE6IElFbGVtZW50LCBlbDI6IElFbGVtZW50KSB7XG4gICAgcmV0dXJuIGVsMSA9PSBlbDIgfHwgZWwxLm5hbWUgPT0gZWwyLm5hbWU7XG4gIH1cbiAgcHVibGljIGVuc3VyZVJvd3NWaXNpYmlsaXR5KCkge1xuICAgIHN1cGVyLmVuc3VyZVJvd3NWaXNpYmlsaXR5KCk7XG4gICAgdGhpcy5nZXRQYW5lbHMoKS5mb3JFYWNoKChwYW5lbCkgPT4gcGFuZWwuZW5zdXJlUm93c1Zpc2liaWxpdHkoKSk7XG4gIH1cbn1cblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJwYWdlXCIsXG4gIFtcbiAgICB7XG4gICAgICBuYW1lOiBcIm5hdmlnYXRpb25CdXR0b25zVmlzaWJpbGl0eVwiLFxuICAgICAgZGVmYXVsdDogXCJpbmhlcml0XCIsXG4gICAgICBjaG9pY2VzOiBbXCJpbmhlcml0XCIsIFwic2hvd1wiLCBcImhpZGVcIl0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInF1ZXN0aW9uc09yZGVyXCIsXG4gICAgICBkZWZhdWx0OiBcImRlZmF1bHRcIixcbiAgICAgIGNob2ljZXM6IFtcImRlZmF1bHRcIiwgXCJpbml0aWFsXCIsIFwicmFuZG9tXCJdLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcIm1heFRpbWVUb0ZpbmlzaDpudW1iZXJcIiwgZGVmYXVsdDogMCwgbWluVmFsdWU6IDAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIm5hdmlnYXRpb25UaXRsZVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICByZXR1cm4gISFvYmouc3VydmV5ICYmIG9iai5zdXJ2ZXkucHJvZ3Jlc3NCYXJUeXBlID09PSBcImJ1dHRvbnNcIjtcbiAgICAgIH0sXG4gICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jTmF2aWdhdGlvblRpdGxlXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIm5hdmlnYXRpb25EZXNjcmlwdGlvblwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICByZXR1cm4gISFvYmouc3VydmV5ICYmIG9iai5zdXJ2ZXkucHJvZ3Jlc3NCYXJUeXBlID09PSBcImJ1dHRvbnNcIjtcbiAgICAgIH0sXG4gICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jTmF2aWdhdGlvbkRlc2NyaXB0aW9uXCIsXG4gICAgfSxcbiAgICB7IG5hbWU6IFwidGl0bGU6dGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jVGl0bGVcIiB9LFxuICAgIHsgbmFtZTogXCJkZXNjcmlwdGlvbjp0ZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NEZXNjcmlwdGlvblwiIH0sXG4gIF0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUGFnZU1vZGVsKCk7XG4gIH0sXG4gIFwicGFuZWxiYXNlXCJcbik7XG4iLCJpbXBvcnQgeyBTZXJpYWxpemVyLCBwcm9wZXJ0eSB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IEhhc2hUYWJsZSwgSGVscGVycyB9IGZyb20gXCIuL2hlbHBlcnNcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQge1xuICBJU3VydmV5SW1wbCxcbiAgSVBhZ2UsXG4gIElQYW5lbCxcbiAgSUNvbmRpdGlvblJ1bm5lcixcbiAgSUVsZW1lbnQsXG4gIElTdXJ2ZXlFbGVtZW50LFxuICBJUXVlc3Rpb24sXG4gIElTdXJ2ZXlFcnJvck93bmVyLFxuICBJVGl0bGVPd25lcixcbiAgSVByb2dyZXNzSW5mbyxcbiAgSVN1cnZleSxcbiAgSUZpbmRFbGVtZW50LFxufSBmcm9tIFwiLi9iYXNlLWludGVyZmFjZXNcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnQgfSBmcm9tIFwiLi9zdXJ2ZXktZWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgQ29uZGl0aW9uUnVubmVyIH0gZnJvbSBcIi4vY29uZGl0aW9uc1wiO1xuaW1wb3J0IHsgRWxlbWVudEZhY3RvcnksIFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xuaW1wb3J0IHsgSUxvY2FsaXphYmxlT3duZXIsIExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcbmltcG9ydCB7IE9uZUFuc3dlclJlcXVpcmVkRXJyb3IgfSBmcm9tIFwiLi9lcnJvclwiO1xuaW1wb3J0IHsgUGFnZU1vZGVsIH0gZnJvbSBcIi4vcGFnZVwiO1xuaW1wb3J0IHsgc2V0dGluZ3MgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xuaW1wb3J0IHsgZmluZFNjcm9sbGFibGVQYXJlbnQsIGlzRWxlbWVudFZpc2libGUgfSBmcm9tIFwiLi91dGlscy91dGlsc1wiO1xuaW1wb3J0IHsgU3VydmV5RXJyb3IgfSBmcm9tIFwiLi9zdXJ2ZXktZXJyb3JcIjtcblxuZXhwb3J0IGNsYXNzIERyYWdEcm9wSW5mbyB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBzb3VyY2U6IElFbGVtZW50LFxuICAgIHB1YmxpYyB0YXJnZXQ6IElFbGVtZW50LFxuICAgIHB1YmxpYyBuZXN0ZWRQYW5lbERlcHRoOiBudW1iZXIgPSAtMVxuICApIHt9XG4gIHB1YmxpYyBkZXN0aW5hdGlvbjogSVN1cnZleUVsZW1lbnQ7XG4gIHB1YmxpYyBpc0JvdHRvbTogYm9vbGVhbjtcbiAgcHVibGljIGlzRWRnZTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uUm93TW9kZWwgZXh0ZW5kcyBCYXNlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcm93Q291bnRlciA9IDEwMDtcbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0Um93SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJwcl9cIiArIFF1ZXN0aW9uUm93TW9kZWwucm93Q291bnRlcisrO1xuICB9XG4gIHByb3RlY3RlZCBfc2Nyb2xsYWJsZVBhcmVudDogYW55ID0gdW5kZWZpbmVkO1xuICBwcm90ZWN0ZWQgX3VwZGF0ZVZpc2liaWxpdHk6IGFueSA9IHVuZGVmaW5lZDtcbiAgcHVibGljIHN0YXJ0TGF6eVJlbmRlcmluZyhcbiAgICByb3dDb250YWluZXJEaXY6IEhUTUxFbGVtZW50LFxuICAgIGZpbmRTY3JvbGxhYmxlQ29udGFpbmVyID0gZmluZFNjcm9sbGFibGVQYXJlbnRcbiAgKSB7XG4gICAgdGhpcy5fc2Nyb2xsYWJsZVBhcmVudCA9IGZpbmRTY3JvbGxhYmxlQ29udGFpbmVyKHJvd0NvbnRhaW5lckRpdik7XG4gICAgdGhpcy5pc05lZWRSZW5kZXIgPSAhKFxuICAgICAgdGhpcy5fc2Nyb2xsYWJsZVBhcmVudC5zY3JvbGxIZWlnaHQgPiB0aGlzLl9zY3JvbGxhYmxlUGFyZW50LmNsaWVudEhlaWdodFxuICAgICk7XG4gICAgLy8gaWYgIHRoaXMuX3Njcm9sbGFibGVQYXJlbnQgaXMgaHRtbCB0aGUgc2Nyb2xsIGV2ZW50IGlzbid0IGZpcmVkLCBzbyB3ZSBzaG91bGQgdXNlIHdpbmRvd1xuICAgIGlmICh0aGlzLl9zY3JvbGxhYmxlUGFyZW50ID09PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX3Njcm9sbGFibGVQYXJlbnQgPSB3aW5kb3c7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc05lZWRSZW5kZXIpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZVZpc2liaWxpdHkgPSAoKSA9PiB7XG4gICAgICAgIHZhciBpc1Jvd0NvbnRhaW5lckRpdlZpc2libGUgPSBpc0VsZW1lbnRWaXNpYmxlKHJvd0NvbnRhaW5lckRpdiwgNTApO1xuICAgICAgICBpZiAoIXRoaXMuaXNOZWVkUmVuZGVyICYmIGlzUm93Q29udGFpbmVyRGl2VmlzaWJsZSkge1xuICAgICAgICAgIHRoaXMuaXNOZWVkUmVuZGVyID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnN0b3BMYXp5UmVuZGVyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICEhdGhpcy5fc2Nyb2xsYWJsZVBhcmVudCAmJlxuICAgICAgICAgICEhdGhpcy5fc2Nyb2xsYWJsZVBhcmVudC5hZGRFdmVudExpc3RlbmVyXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuX3Njcm9sbGFibGVQYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICAgIFwic2Nyb2xsXCIsXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVWaXNpYmlsaXR5XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVuc3VyZVZpc2liaWxpdHkoKTtcbiAgICAgIH0sIDEwKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGVuc3VyZVZpc2liaWxpdHkoKSB7XG4gICAgaWYgKCEhdGhpcy5fdXBkYXRlVmlzaWJpbGl0eSkge1xuICAgICAgdGhpcy5fdXBkYXRlVmlzaWJpbGl0eSgpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgc3RvcExhenlSZW5kZXJpbmcoKSB7XG4gICAgaWYgKFxuICAgICAgISF0aGlzLl9zY3JvbGxhYmxlUGFyZW50ICYmXG4gICAgICAhIXRoaXMuX3VwZGF0ZVZpc2liaWxpdHkgJiZcbiAgICAgICEhdGhpcy5fc2Nyb2xsYWJsZVBhcmVudC5yZW1vdmVFdmVudExpc3RlbmVyXG4gICAgKSB7XG4gICAgICB0aGlzLl9zY3JvbGxhYmxlUGFyZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwic2Nyb2xsXCIsXG4gICAgICAgIHRoaXMuX3VwZGF0ZVZpc2liaWxpdHlcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuX3Njcm9sbGFibGVQYXJlbnQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fdXBkYXRlVmlzaWJpbGl0eSA9IHVuZGVmaW5lZDtcbiAgfVxuICBwcml2YXRlIGlkVmFsdWU6IHN0cmluZztcbiAgY29uc3RydWN0b3IocHVibGljIHBhbmVsOiBQYW5lbE1vZGVsQmFzZSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5pZFZhbHVlID0gUXVlc3Rpb25Sb3dNb2RlbC5nZXRSb3dJZCgpO1xuICAgIHRoaXMudmlzaWJsZSA9IHBhbmVsLmFyZUludmlzaWJsZUVsZW1lbnRzU2hvd2luZztcbiAgICB0aGlzLmNyZWF0ZU5ld0FycmF5KFwiZWxlbWVudHNcIik7XG4gICAgdGhpcy5jcmVhdGVOZXdBcnJheShcInZpc2libGVFbGVtZW50c1wiKTtcbiAgfVxuICBwcml2YXRlIGlzTGF6eVJlbmRlcmluZ1ZhbHVlOiBib29sZWFuO1xuICBwdWJsaWMgc2V0SXNMYXp5UmVuZGVyaW5nKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuaXNMYXp5UmVuZGVyaW5nVmFsdWUgPSB2YWw7XG4gICAgdGhpcy5pc05lZWRSZW5kZXIgPSAhdmFsO1xuICB9XG4gIHB1YmxpYyBpc0xhenlSZW5kZXJpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNMYXp5UmVuZGVyaW5nVmFsdWUgPT09IHRydWU7XG4gIH1cbiAgcHVibGljIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkVmFsdWU7XG4gIH1cbiAgcHVibGljIGdldCBlbGVtZW50cygpOiBBcnJheTxJRWxlbWVudD4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJlbGVtZW50c1wiKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHZpc2libGVFbGVtZW50cygpOiBBcnJheTxJRWxlbWVudD4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmxlRWxlbWVudHNcIik7XG4gIH1cbiAgcHVibGljIGdldCB2aXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmxlXCIsIHRydWUpO1xuICB9XG4gIHB1YmxpYyBzZXQgdmlzaWJsZSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmxlXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBpc05lZWRSZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlzbmVlZHJlbmRlclwiLCB0cnVlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGlzTmVlZFJlbmRlcih2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc25lZWRyZW5kZXJcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgdXBkYXRlVmlzaWJsZSgpIHtcbiAgICB0aGlzLnZpc2libGUgPSB0aGlzLmNhbGNWaXNpYmxlKCk7XG4gICAgdGhpcy5zZXRXaWR0aCgpO1xuICB9XG4gIHB1YmxpYyBhZGRFbGVtZW50KHE6IElFbGVtZW50KSB7XG4gICAgdGhpcy5lbGVtZW50cy5wdXNoKHEpO1xuICAgIHRoaXMudXBkYXRlVmlzaWJsZSgpO1xuICB9XG4gIHB1YmxpYyBnZXQgaW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wYW5lbC5yb3dzLmluZGV4T2YodGhpcyk7XG4gIH1cbiAgcHJpdmF0ZSBzZXRXaWR0aCgpIHtcbiAgICB2YXIgdmlzQ291bnQgPSB0aGlzLnZpc2libGVFbGVtZW50cy5sZW5ndGg7XG4gICAgaWYgKHZpc0NvdW50ID09IDApIHJldHVybjtcbiAgICB2YXIgY291bnRlciA9IDA7XG4gICAgdmFyIHByZVNldFdpZHRoRWxlbWVudHMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlbCA9IHRoaXMuZWxlbWVudHNbaV07XG4gICAgICB0aGlzLnNldEVsZW1lbnRNYXhNaW5XaWR0aChlbCk7XG5cbiAgICAgIGlmIChlbC5pc1Zpc2libGUpIHtcbiAgICAgICAgdmFyIHdpZHRoID0gdGhpcy5nZXRFbGVtZW50V2lkdGgoZWwpO1xuICAgICAgICBpZiAoISF3aWR0aCkge1xuICAgICAgICAgIGVsLnJlbmRlcldpZHRoID0gdGhpcy5nZXRSZW5kZXJlZFdpZHRoRnJvbVdpZHRoKHdpZHRoKTtcbiAgICAgICAgICBwcmVTZXRXaWR0aEVsZW1lbnRzLnB1c2goZWwpO1xuICAgICAgICB9XG4gICAgICAgIGVsLnJpZ2h0SW5kZW50ID0gY291bnRlciA8IHZpc0NvdW50IC0gMSA/IDEgOiAwO1xuICAgICAgICBjb3VudGVyKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbC5yZW5kZXJXaWR0aCA9IFwiXCI7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsID0gdGhpcy5lbGVtZW50c1tpXTtcbiAgICAgIGlmICghZWwuaXNWaXNpYmxlIHx8IHByZVNldFdpZHRoRWxlbWVudHMuaW5kZXhPZihlbCkgPiAtMSkgY29udGludWU7XG4gICAgICBpZiAocHJlU2V0V2lkdGhFbGVtZW50cy5sZW5ndGggPT0gMCkge1xuICAgICAgICBlbC5yZW5kZXJXaWR0aCA9ICgxMDAgLyB2aXNDb3VudCkudG9GaXhlZCg2KSArIFwiJVwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWwucmVuZGVyV2lkdGggPSB0aGlzLmdldFJlbmRlcmVkQ2FsY1dpZHRoKFxuICAgICAgICAgIGVsLFxuICAgICAgICAgIHByZVNldFdpZHRoRWxlbWVudHMsXG4gICAgICAgICAgdmlzQ291bnRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHVibGljIHNldEVsZW1lbnRNYXhNaW5XaWR0aChlbDogSUVsZW1lbnQpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICBlbC53aWR0aCAmJlxuICAgICAgdHlwZW9mIGVsLndpZHRoID09PSBcInN0cmluZ1wiICYmXG4gICAgICBlbC53aWR0aC5pbmRleE9mKFwiJVwiKSA9PT0gLTFcbiAgICApIHtcbiAgICAgIGVsLm1pbldpZHRoID0gZWwud2lkdGg7XG4gICAgICBlbC5tYXhXaWR0aCA9IGVsLndpZHRoO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmVuZGVyZWRDYWxjV2lkdGgoXG4gICAgZWw6IElFbGVtZW50LFxuICAgIHByZVNldFdpZHRoRWxlbWVudHM6IEFycmF5PElFbGVtZW50PixcbiAgICB2aXNDb3VudDogbnVtYmVyXG4gICk6IHN0cmluZyB7XG4gICAgdmFyIGV4cHJlc3Npb24gPSBcIjEwMCVcIjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByZVNldFdpZHRoRWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGV4cHJlc3Npb24gKz0gXCIgLSBcIiArIHByZVNldFdpZHRoRWxlbWVudHNbaV0ucmVuZGVyV2lkdGg7XG4gICAgfVxuICAgIHZhciBjYWxjV2lkdGhFbCA9IHZpc0NvdW50IC0gcHJlU2V0V2lkdGhFbGVtZW50cy5sZW5ndGg7XG4gICAgaWYgKGNhbGNXaWR0aEVsID4gMSkge1xuICAgICAgZXhwcmVzc2lvbiA9IFwiKFwiICsgZXhwcmVzc2lvbiArIFwiKS9cIiArIGNhbGNXaWR0aEVsLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIHJldHVybiBcImNhbGMoXCIgKyBleHByZXNzaW9uICsgXCIpXCI7XG4gIH1cbiAgcHJpdmF0ZSBnZXRFbGVtZW50V2lkdGgoZWw6IElFbGVtZW50KTogc3RyaW5nIHtcbiAgICB2YXIgd2lkdGggPSBlbC53aWR0aDtcbiAgICBpZiAoIXdpZHRoIHx8IHR5cGVvZiB3aWR0aCAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIFwiXCI7XG4gICAgcmV0dXJuIHdpZHRoLnRyaW0oKTtcbiAgfVxuICBwcml2YXRlIGdldFJlbmRlcmVkV2lkdGhGcm9tV2lkdGgod2lkdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEhlbHBlcnMuaXNOdW1iZXIod2lkdGgpID8gd2lkdGggKyBcInB4XCIgOiB3aWR0aDtcbiAgfVxuICBwcml2YXRlIGNhbGNWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHZhciB2aXNFbGVtZW50czogQXJyYXk8SUVsZW1lbnQ+ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5lbGVtZW50c1tpXS5pc1Zpc2libGUpIHtcbiAgICAgICAgdmlzRWxlbWVudHMucHVzaCh0aGlzLmVsZW1lbnRzW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMubmVlZFRvVXBkYXRlVmlzaWJsZUVsZW1lbnRzKHZpc0VsZW1lbnRzKSkge1xuICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJsZUVsZW1lbnRzXCIsIHZpc0VsZW1lbnRzKTtcbiAgICB9XG4gICAgcmV0dXJuIHZpc0VsZW1lbnRzLmxlbmd0aCA+IDA7XG4gIH1cbiAgcHJpdmF0ZSBuZWVkVG9VcGRhdGVWaXNpYmxlRWxlbWVudHModmlzRWxlbWVudHM6IEFycmF5PElFbGVtZW50Pik6IGJvb2xlYW4ge1xuICAgIGlmICh2aXNFbGVtZW50cy5sZW5ndGggIT09IHRoaXMudmlzaWJsZUVsZW1lbnRzLmxlbmd0aCkgcmV0dXJuIHRydWU7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aXNFbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHZpc0VsZW1lbnRzW2ldICE9PSB0aGlzLnZpc2libGVFbGVtZW50c1tpXSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgZGlzcG9zZSgpIHtcbiAgICBzdXBlci5kaXNwb3NlKCk7XG4gICAgdGhpcy5zdG9wTGF6eVJlbmRlcmluZygpO1xuICB9XG59XG5cbi8qKlxuICogQSBiYXNlIGNsYXNzIGZvciBhIFBhbmVsIGFuZCBQYWdlIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBQYW5lbE1vZGVsQmFzZSBleHRlbmRzIFN1cnZleUVsZW1lbnRcbiAgaW1wbGVtZW50cyBJUGFuZWwsIElDb25kaXRpb25SdW5uZXIsIElMb2NhbGl6YWJsZU93bmVyLCBJU3VydmV5RXJyb3JPd25lciB7XG4gIHByaXZhdGUgc3RhdGljIHBhbmVsQ291bnRlciA9IDEwMDtcbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0UGFuZWxJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInNwX1wiICsgUGFuZWxNb2RlbEJhc2UucGFuZWxDb3VudGVyKys7XG4gIH1cblxuICBwcml2YXRlIGVsZW1lbnRzVmFsdWU6IEFycmF5PElFbGVtZW50PjtcbiAgcHJpdmF0ZSBpc1F1ZXN0aW9uc1JlYWR5OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgcXVlc3Rpb25zVmFsdWU6IEFycmF5PFF1ZXN0aW9uPiA9IG5ldyBBcnJheTxRdWVzdGlvbj4oKTtcbiAgYWRkRWxlbWVudENhbGxiYWNrOiAoZWxlbWVudDogSUVsZW1lbnQpID0+IHZvaWQ7XG4gIHJlbW92ZUVsZW1lbnRDYWxsYmFjazogKGVsZW1lbnQ6IElFbGVtZW50KSA9PiB2b2lkO1xuICBvbkdldFF1ZXN0aW9uVGl0bGVMb2NhdGlvbjogKCkgPT4gc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZyA9IFwiXCIpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgICB0aGlzLmNyZWF0ZU5ld0FycmF5KFwicm93c1wiKTtcbiAgICB0aGlzLmVsZW1lbnRzVmFsdWUgPSB0aGlzLmNyZWF0ZU5ld0FycmF5KFxuICAgICAgXCJlbGVtZW50c1wiLFxuICAgICAgdGhpcy5vbkFkZEVsZW1lbnQuYmluZCh0aGlzKSxcbiAgICAgIHRoaXMub25SZW1vdmVFbGVtZW50LmJpbmQodGhpcylcbiAgICApO1xuICAgIHRoaXMuaWQgPSBQYW5lbE1vZGVsQmFzZS5nZXRQYW5lbElkKCk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInRpdGxlXCIsIHRoaXMsIHRydWUpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJkZXNjcmlwdGlvblwiLCB0aGlzLCB0cnVlKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwicmVxdWlyZWRFcnJvclRleHRcIiwgdGhpcyk7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcInF1ZXN0aW9uVGl0bGVMb2NhdGlvblwiLCAoKSA9PiB7XG4gICAgICB0aGlzLm9uVmlzaWJsZUNoYW5nZWQuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMudXBkYXRlRWxlbWVudENzcyh0cnVlKTtcbiAgICB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnRpZXNWYWx1ZUNoYW5nZWQoXG4gICAgICBbXCJxdWVzdGlvblN0YXJ0SW5kZXhcIiwgXCJzaG93UXVlc3Rpb25OdW1iZXJzXCJdLFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInBhbmVsYmFzZVwiO1xuICB9XG4gIHB1YmxpYyBzZXRTdXJ2ZXlJbXBsKHZhbHVlOiBJU3VydmV5SW1wbCkge1xuICAgIHN1cGVyLnNldFN1cnZleUltcGwodmFsdWUpO1xuICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSkgdGhpcy5vblZpc2libGVDaGFuZ2VkKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmVsZW1lbnRzW2ldLnNldFN1cnZleUltcGwodmFsdWUpO1xuICAgIH1cbiAgfVxuICBlbmRMb2FkaW5nRnJvbUpzb24oKSB7XG4gICAgc3VwZXIuZW5kTG9hZGluZ0Zyb21Kc29uKCk7XG4gICAgdGhpcy5tYXJrUXVlc3Rpb25MaXN0RGlydHkoKTtcbiAgICB0aGlzLm9uUm93c0NoYW5nZWQoKTtcbiAgfVxuICAvKipcbiAgICogUGFuZWxNb2RlbCBvciBQYWdlTW9kZWwgdGl0bGUgcHJvcGVydHkuXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKi9cbiAgcHVibGljIGdldCB0aXRsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInRpdGxlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdGl0bGUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInRpdGxlXCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY1RpdGxlKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInRpdGxlXCIpO1xuICB9XG4gIGdldCBfc2hvd1RpdGxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAoKDxhbnk+dGhpcy5zdXJ2ZXkpLnNob3dQYWdlVGl0bGVzICYmIHRoaXMudGl0bGUubGVuZ3RoID4gMCkgfHxcbiAgICAgICh0aGlzLmlzRGVzaWduTW9kZSAmJiBzZXR0aW5ncy5hbGxvd1Nob3dFbXB0eVRpdGxlSW5EZXNpZ25Nb2RlKVxuICAgICk7XG4gIH1cblxuICBnZXQgX3Nob3dEZXNjcmlwdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgKCg8YW55PnRoaXMuc3VydmV5KS5zaG93UGFnZVRpdGxlcyAmJiB0aGlzLmRlc2NyaXB0aW9uLmxlbmd0aCA+IDApIHx8XG4gICAgICAodGhpcy5pc0Rlc2lnbk1vZGUgJiZcbiAgICAgICAgc2V0dGluZ3MuYWxsb3dTaG93RW1wdHlUaXRsZUluRGVzaWduTW9kZSAmJlxuICAgICAgICBzZXR0aW5ncy5hbGxvd1Nob3dFbXB0eURlc2NyaXB0aW9uSW5EZXNpZ25Nb2RlKVxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIFBhbmVsTW9kZWwgb3IgUGFnZU1vZGVsIGRlc2NyaXB0aW9uIHByb3BlcnR5LiBJdCByZW5kZXJzIHVuZGVyIHRpdGxlIGJ5IHVzaW5nIHNtYWxsZXIgZm9udC4gVW5saWtlIHRoZSB0aXRsZSwgZGVzY3JpcHRpb24gY2FuIGJlIGVtcHR5LlxuICAgKiBAc2VlIHRpdGxlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiZGVzY3JpcHRpb25cIik7XG4gIH1cbiAgcHVibGljIHNldCBkZXNjcmlwdGlvbih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiZGVzY3JpcHRpb25cIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jRGVzY3JpcHRpb24oKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwiZGVzY3JpcHRpb25cIik7XG4gIH1cbiAgcHVibGljIGxvY2FsZUNoYW5nZWQoKSB7XG4gICAgc3VwZXIubG9jYWxlQ2hhbmdlZCgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgKDxCYXNlPig8YW55PnRoaXMuZWxlbWVudHNbaV0pKS5sb2NhbGVDaGFuZ2VkKCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBsb2NTdHJzQ2hhbmdlZCgpIHtcbiAgICBzdXBlci5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5lbGVtZW50c1tpXS5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY2hhci9zdHJpbmcgZm9yIGEgcmVxdWlyZWQgcGFuZWwuXG4gICAqIEBzZWUgU3VydmV5TW9kZWwucmVxdWlyZWRUZXh0XG4gICAqL1xuICBwdWJsaWMgZ2V0IHJlcXVpcmVkVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleSAhPSBudWxsICYmIHRoaXMuaXNSZXF1aXJlZFxuICAgICAgPyB0aGlzLnN1cnZleS5yZXF1aXJlZFRleHRcbiAgICAgIDogXCJcIjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHRpdGxlUGF0dGVybigpOiBzdHJpbmcge1xuICAgIHJldHVybiAhIXRoaXMuc3VydmV5ID8gdGhpcy5zdXJ2ZXkucXVlc3Rpb25UaXRsZVBhdHRlcm4gOiBcIm51bVRpdGxlUmVxdWlyZVwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNSZXF1aXJlVGV4dE9uU3RhcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNSZXF1aXJlZCAmJiB0aGlzLnRpdGxlUGF0dGVybiA9PSBcInJlcXVpcmVOdW1UaXRsZVwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNSZXF1aXJlVGV4dEJlZm9yZVRpdGxlKCkge1xuICAgIHJldHVybiB0aGlzLmlzUmVxdWlyZWQgJiYgdGhpcy50aXRsZVBhdHRlcm4gPT0gXCJudW1SZXF1aXJlVGl0bGVcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzUmVxdWlyZVRleHRBZnRlclRpdGxlKCkge1xuICAgIHJldHVybiB0aGlzLmlzUmVxdWlyZWQgJiYgdGhpcy50aXRsZVBhdHRlcm4gPT0gXCJudW1UaXRsZVJlcXVpcmVcIjtcbiAgfVxuICAvKipcbiAgICogVGhlIGN1c3RvbSB0ZXh0IHRoYXQgd2lsbCBiZSBzaG93biBvbiByZXF1aXJlZCBlcnJvci4gVXNlIHRoaXMgcHJvcGVydHksIGlmIHlvdSBkbyBub3Qgd2FudCB0byBzaG93IHRoZSBkZWZhdWx0IHRleHQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJlcXVpcmVkRXJyb3JUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwicmVxdWlyZWRFcnJvclRleHRcIik7XG4gIH1cbiAgcHVibGljIHNldCByZXF1aXJlZEVycm9yVGV4dCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwicmVxdWlyZWRFcnJvclRleHRcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jUmVxdWlyZWRFcnJvclRleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwicmVxdWlyZWRFcnJvclRleHRcIik7XG4gIH1cbiAgZ2V0TG9jYWxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5XG4gICAgICA/ICg8SUxvY2FsaXphYmxlT3duZXI+KDxhbnk+dGhpcy5zdXJ2ZXkpKS5nZXRMb2NhbGUoKVxuICAgICAgOiBcIlwiO1xuICB9XG4gIGdldE1hcmtkb3duSHRtbCh0ZXh0OiBzdHJpbmcsIG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnN1cnZleVxuICAgICAgPyB0aGlzLnN1cnZleS5nZXRTdXJ2ZXlNYXJrZG93bkh0bWwodGhpcywgdGV4dCwgbmFtZSlcbiAgICAgIDogbnVsbDtcbiAgfVxuICBnZXRSZW5kZXJlcihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleSA/IHRoaXMuc3VydmV5LmdldFJlbmRlcmVyRm9yU3RyaW5nKHRoaXMsIG5hbWUpIDogbnVsbDtcbiAgfVxuICBnZXRQcm9jZXNzZWRUZXh0KHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGV4dFByb2Nlc3NvclxuICAgICAgPyB0aGlzLnRleHRQcm9jZXNzb3IucHJvY2Vzc1RleHQodGV4dCwgdHJ1ZSlcbiAgICAgIDogdGV4dDtcbiAgfVxuICAvKipcbiAgICogQSBwYXJlbnQgZWxlbWVudC4gSXQgaXMgYWx3YXlzIG51bGwgZm9yIHRoZSBQYWdlIG9iamVjdCBhbmQgYWx3YXlzIG5vdCBudWxsIGZvciB0aGUgUGFuZWwgb2JqZWN0LiBQYW5lbCBvYmplY3QgbWF5IGNvbnRhaW4gUXVlc3Rpb25zIGFuZCBvdGhlciBQYW5lbHMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBhcmVudCgpOiBQYW5lbE1vZGVsQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInBhcmVudFwiLCBudWxsKTtcbiAgfVxuICBwdWJsaWMgc2V0IHBhcmVudCh2YWw6IFBhbmVsTW9kZWxCYXNlKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicGFyZW50XCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBkZXB0aCgpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLnBhcmVudCA9PSBudWxsKSByZXR1cm4gMDtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQuZGVwdGggKyAxO1xuICB9XG4gIC8qKlxuICAgKiBBbiBleHByZXNzaW9uIHRoYXQgcmV0dXJucyB0cnVlIG9yIGZhbHNlLiBJZiBpdCByZXR1cm5zIHRydWUgdGhlIFBhbmVsIGJlY29tZXMgdmlzaWJsZSBhbmQgaWYgaXQgcmV0dXJucyBmYWxzZSB0aGUgUGFuZWwgYmVjb21lcyBpbnZpc2libGUuIFRoZSBsaWJyYXJ5IHJ1bnMgdGhlIGV4cHJlc3Npb24gb24gc3VydmV5IHN0YXJ0IGFuZCBvbiBjaGFuZ2luZyBhIHF1ZXN0aW9uIHZhbHVlLiBJZiB0aGUgcHJvcGVydHkgaXMgZW1wdHkgdGhlbiB2aXNpYmxlIHByb3BlcnR5IGlzIHVzZWQuXG4gICAqIEBzZWUgdmlzaWJsZVxuICAgKi9cbiAgcHVibGljIGdldCB2aXNpYmxlSWYoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJsZUlmXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdmlzaWJsZUlmKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJsZUlmXCIsIHZhbCk7XG4gIH1cbiAgcHJpdmF0ZSBjc3NDbGFzc2VzVmFsdWU6IGFueTtcbiAgcHVibGljIGdldCBjc3NDbGFzc2VzKCk6IGFueSB7XG4gICAgaWYgKCF0aGlzLmNzc0NsYXNzZXNWYWx1ZSkge1xuICAgICAgdGhpcy5jc3NDbGFzc2VzVmFsdWUgPSB0aGlzLmNhbGNDc3NDbGFzc2VzKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNzc0NsYXNzZXNWYWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FsY0Nzc0NsYXNzZXMoKTogYW55IHtcbiAgICB2YXIgY2xhc3NlcyA9IHsgcGFuZWw6IHt9LCBlcnJvcjoge30sIHJvdzogXCJcIiB9O1xuICAgIHRoaXMuY29weUNzc0NsYXNzZXMoY2xhc3Nlcy5wYW5lbCwgdGhpcy5jc3MucGFuZWwpO1xuICAgIHRoaXMuY29weUNzc0NsYXNzZXMoY2xhc3Nlcy5lcnJvciwgdGhpcy5jc3MuZXJyb3IpO1xuICAgIGlmICghIXRoaXMuY3NzLnJvdykge1xuICAgICAgY2xhc3Nlcy5yb3cgPSB0aGlzLmNzcy5yb3c7XG4gICAgfVxuICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgdGhpcy5zdXJ2ZXkudXBkYXRlUGFuZWxDc3NDbGFzc2VzKHRoaXMsIGNsYXNzZXMpO1xuICAgIH1cbiAgICByZXR1cm4gY2xhc3NlcztcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGNzcygpOiBhbnkge1xuICAgIHJldHVybiAhIXRoaXMuc3VydmV5ID8gdGhpcy5zdXJ2ZXkuZ2V0Q3NzKCkgOiB7fTtcbiAgfVxuICAvKipcbiAgICogQSB1bmlxdWUgZWxlbWVudCBpZGVudGlmaWNhdG9yLiBJdCBpcyBnZW5lcmF0ZWQgYXV0b21hdGljYWxseS5cbiAgICovXG4gIHB1YmxpYyBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaWRcIik7XG4gIH1cbiAgcHVibGljIHNldCBpZCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlkXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVudCBvYmplY3QgaXMgUGFuZWwuIFJldHVybnMgZmFsc2UgaWYgdGhlIGN1cnJlbnQgb2JqZWN0IGlzIFBhZ2UgKGEgcm9vdCBQYW5lbCkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzUGFuZWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBnZXRQYW5lbCgpOiBJUGFuZWwge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGdldExheW91dFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJyb3dcIjtcbiAgfVxuICBpc0xheW91dFR5cGVTdXBwb3J0ZWQobGF5b3V0VHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGxheW91dFR5cGUgIT09IFwiZmxvd1wiO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIGFsbCBxdWVzdGlvbnMgbG9jYXRlZCBpbiB0aGUgUGFuZWwvUGFnZSwgaW5jbHVkaW5nIGluIHRoZSBuZXN0ZWQgUGFuZWxzLlxuICAgKiBAc2VlIFF1ZXN0aW9uXG4gICAqIEBzZWUgZWxlbWVudHNcbiAgICovXG4gIHB1YmxpYyBnZXQgcXVlc3Rpb25zKCk6IEFycmF5PFF1ZXN0aW9uPiB7XG4gICAgaWYgKCF0aGlzLmlzUXVlc3Rpb25zUmVhZHkpIHtcbiAgICAgIHRoaXMucXVlc3Rpb25zVmFsdWUgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZWwgPSB0aGlzLmVsZW1lbnRzW2ldO1xuICAgICAgICBpZiAoZWwuaXNQYW5lbCkge1xuICAgICAgICAgIHZhciBxcyA9ICg8UGFuZWxNb2RlbD5lbCkucXVlc3Rpb25zO1xuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25zVmFsdWUucHVzaChxc1tqXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucXVlc3Rpb25zVmFsdWUucHVzaCg8UXVlc3Rpb24+ZWwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmlzUXVlc3Rpb25zUmVhZHkgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uc1ZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBnZXRWYWxpZE5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoISFuYW1lKSByZXR1cm4gbmFtZS50cmltKCk7XG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHF1ZXN0aW9uIGJ5IGl0cyBuYW1lXG4gICAqIEBwYXJhbSBuYW1lIHRoZSBxdWVzdGlvbiBuYW1lXG4gICAqL1xuICBwdWJsaWMgZ2V0UXVlc3Rpb25CeU5hbWUobmFtZTogc3RyaW5nKTogUXVlc3Rpb24ge1xuICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ucztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHF1ZXN0aW9uc1tpXS5uYW1lID09IG5hbWUpIHJldHVybiBxdWVzdGlvbnNbaV07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBlbGVtZW50IGJ5IGl0cyBuYW1lLiBJdCB3b3JrcyByZWN1cnNpdmVseS5cbiAgICogQHBhcmFtIG5hbWUgdGhlIGVsZW1lbnQgbmFtZVxuICAgKi9cbiAgcHVibGljIGdldEVsZW1lbnRCeU5hbWUobmFtZTogc3RyaW5nKTogSUVsZW1lbnQge1xuICAgIHZhciBlbGVtZW50cyA9IHRoaXMuZWxlbWVudHM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsID0gZWxlbWVudHNbaV07XG4gICAgICBpZiAoZWwubmFtZSA9PSBuYW1lKSByZXR1cm4gZWw7XG4gICAgICB2YXIgcG5sID0gZWwuZ2V0UGFuZWwoKTtcbiAgICAgIGlmICghIXBubCkge1xuICAgICAgICB2YXIgcmVzID0gKDxQYW5lbE1vZGVsQmFzZT5wbmwpLmdldEVsZW1lbnRCeU5hbWUobmFtZSk7XG4gICAgICAgIGlmICghIXJlcykgcmV0dXJuIHJlcztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHVibGljIGdldFF1ZXN0aW9uQnlWYWx1ZU5hbWUodmFsdWVOYW1lOiBzdHJpbmcpOiBRdWVzdGlvbiB7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMucXVlc3Rpb25zO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocXVlc3Rpb25zW2ldLmdldFZhbHVlTmFtZSgpID09IHZhbHVlTmFtZSkgcmV0dXJuIHF1ZXN0aW9uc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgcXVlc3Rpb24gdmFsdWVzIG9uIHRoZSBjdXJyZW50IHBhZ2VcbiAgICovXG4gIHB1YmxpYyBnZXRWYWx1ZSgpOiBhbnkge1xuICAgIHZhciBkYXRhOiBhbnkgPSB7fTtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbnM7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHEgPSBxdWVzdGlvbnNbaV07XG4gICAgICBpZiAocS5pc0VtcHR5KCkpIGNvbnRpbnVlO1xuICAgICAgdmFyIHZhbHVlTmFtZSA9IHEuZ2V0VmFsdWVOYW1lKCk7XG4gICAgICBkYXRhW3ZhbHVlTmFtZV0gPSBxLnZhbHVlO1xuICAgICAgaWYgKCEhdGhpcy5kYXRhKSB7XG4gICAgICAgIHZhciBjb21tZW50ID0gdGhpcy5kYXRhLmdldENvbW1lbnQodmFsdWVOYW1lKTtcbiAgICAgICAgaWYgKCEhY29tbWVudCkge1xuICAgICAgICAgIGRhdGFbdmFsdWVOYW1lICsgc2V0dGluZ3MuY29tbWVudFByZWZpeF0gPSBjb21tZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gcXVlc3Rpb25zIHZhbHVlcyBhcyBhIEpTT04gb2JqZWN0IHdpdGggZGlzcGxheSB0ZXh0LiBGb3IgZXhhbXBsZSwgZm9yIGRyb3Bkb3duLCBpdCB3b3VsZCByZXR1cm4gdGhlIGl0ZW0gdGV4dCBpbnN0ZWFkIG9mIGl0ZW0gdmFsdWUuXG4gICAqIEBwYXJhbSBrZXlzQXNUZXh0IFNldCB0aGlzIHZhbHVlIHRvIHRydWUsIHRvIHJldHVybiBrZXkgKGluIG1hdHJpY2VzIHF1ZXN0aW9ucykgYXMgZGlzcGxheSB0ZXh0IGFzIHdlbGwuXG4gICAqL1xuICBwdWJsaWMgZ2V0RGlzcGxheVZhbHVlKGtleXNBc1RleHQ6IGJvb2xlYW4pOiBhbnkge1xuICAgIHZhciBkYXRhOiBhbnkgPSB7fTtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbnM7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHEgPSBxdWVzdGlvbnNbaV07XG4gICAgICBpZiAocS5pc0VtcHR5KCkpIGNvbnRpbnVlO1xuICAgICAgdmFyIHZhbHVlTmFtZSA9IGtleXNBc1RleHQgPyBxLnRpdGxlIDogcS5nZXRWYWx1ZU5hbWUoKTtcbiAgICAgIGRhdGFbdmFsdWVOYW1lXSA9IHEuZ2V0RGlzcGxheVZhbHVlKGtleXNBc1RleHQpO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBxdWVzdGlvbiBjb21tZW50cyBvbiB0aGUgY3VycmVudCBwYWdlXG4gICAqL1xuICBwdWJsaWMgZ2V0Q29tbWVudHMoKTogYW55IHtcbiAgICB2YXIgY29tbWVudHMgPSB7fTtcbiAgICBpZiAoIXRoaXMuZGF0YSkgcmV0dXJuIGNvbW1lbnRzO1xuICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ucztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHEgPSBxdWVzdGlvbnNbaV07XG4gICAgICB2YXIgY29tbWVudCA9IHRoaXMuZGF0YS5nZXRDb21tZW50KHEuZ2V0VmFsdWVOYW1lKCkpO1xuICAgICAgaWYgKCEhY29tbWVudCkge1xuICAgICAgICAoPGFueT5jb21tZW50cylbcS5nZXRWYWx1ZU5hbWUoKV0gPSBjb21tZW50O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29tbWVudHM7XG4gIH1cbiAgLyoqXG4gICAqIENhbGwgdGhpcyBmdW5jdGlvbiB0byByZW1vdmUgYWxsIHF1ZXN0aW9uIHZhbHVlcyBmcm9tIHRoZSBjdXJyZW50IHBhZ2UvcGFuZWwsIHRoYXQgZW5kLXVzZXIgd2lsbCBub3QgYmUgYWJsZSB0byBlbnRlci5cbiAgICogRm9yIGV4YW1wbGUgdGhlIHZhbHVlIHRoYXQgZG9lc24ndCBleGlzdHMgaW4gYSByYWRpZ3JvdXAvZHJvcGRvd24vY2hlY2tib3ggY2hvaWNlcyBvciBtYXRyaXggcm93cy9jb2x1bW5zLlxuICAgKiBQbGVhc2Ugbm90ZSwgdGhpcyBmdW5jdGlvbiBkb2Vzbid0IGNsZWFyIHZhbHVlcyBmb3IgaW52aXNpYmxlIHF1ZXN0aW9ucyBvciB2YWx1ZXMgdGhhdCBkb2Vzbid0IGFzc29jaWF0ZWQgd2l0aCBxdWVzdGlvbnMuXG4gICAqIEBzZWUgUXVlc3Rpb24uY2xlYXJJbmNvcnJlY3RWYWx1ZXNcbiAgICovXG4gIHB1YmxpYyBjbGVhckluY29ycmVjdFZhbHVlcygpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuZWxlbWVudHNbaV0uY2xlYXJJbmNvcnJlY3RWYWx1ZXMoKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENhbGwgdGhpcyBmdW5jdGlvbiB0byBjbGVhciBhbGwgZXJyb3JzIGluIHRoZSBwYW5lbCAvIHBhZ2UgYW5kIGFsbCBpdHMgY2hpbGQgZWxlbWVudHMgKHBhbmVscyBhbmQgcXVlc3Rpb25zKVxuICAgKi9cbiAgcHVibGljIGNsZWFyRXJyb3JzKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5lbGVtZW50c1tpXS5jbGVhckVycm9ycygpO1xuICAgIH1cbiAgICB0aGlzLmVycm9ycyA9IFtdO1xuICB9XG4gIHByaXZhdGUgbWFya1F1ZXN0aW9uTGlzdERpcnR5KCkge1xuICAgIHRoaXMuaXNRdWVzdGlvbnNSZWFkeSA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnBhcmVudCkgdGhpcy5wYXJlbnQubWFya1F1ZXN0aW9uTGlzdERpcnR5KCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxpc3Qgb2YgdGhlIGVsZW1lbnRzIGluIHRoZSBvYmplY3QsIFBhbmVsL1BhZ2UuIEVsZW1lbnRzIGNhbiBiZSBxdWVzdGlvbnMgb3IgcGFuZWxzLiBUaGUgZnVuY3Rpb24gZG9lc24ndCByZXR1cm4gZWxlbWVudHMgaW4gdGhlIG5lc3RlZCBQYW5lbHMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGVsZW1lbnRzKCk6IEFycmF5PElFbGVtZW50PiB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudHNWYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0RWxlbWVudHNJbkRlc2lnbihpbmNsdWRlSGlkZGVuOiBib29sZWFuID0gZmFsc2UpOiBBcnJheTxJRWxlbWVudD4ge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRzO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGN1cnJlbnQgZWxlbWVudCBiZWxvbmdzIHRvIHRoZSBQYW5lbC9QYWdlLiBJdCBsb29rcyBpbiBuZXN0ZWQgUGFuZWxzIGFzIHdlbGwuXG4gICAqIEBwYXJhbSBlbGVtZW50XG4gICAqIEBzZWUgUGFuZWxNb2RlbFxuICAgKi9cbiAgcHVibGljIGNvbnRhaW5zRWxlbWVudChlbGVtZW50OiBJRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsOiBhbnkgPSB0aGlzLmVsZW1lbnRzW2ldO1xuICAgICAgaWYgKGVsID09IGVsZW1lbnQpIHJldHVybiB0cnVlO1xuICAgICAgdmFyIHBubCA9IGVsLmdldFBhbmVsKCk7XG4gICAgICBpZiAoISFwbmwpIHtcbiAgICAgICAgaWYgKCg8UGFuZWxNb2RlbEJhc2U+cG5sKS5jb250YWluc0VsZW1lbnQoZWxlbWVudCkpIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIHRydWUsIHRvIHJlcXVpcmUgdGhlIGFuc3dlciBhdCBsZWFzdCBpbiBvbmUgcXVlc3Rpb24gaW4gdGhlIHBhbmVsLlxuICAgKi9cbiAgcHVibGljIGdldCBpc1JlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc1JlcXVpcmVkXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGlzUmVxdWlyZWQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNSZXF1aXJlZFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBBbiBleHByZXNzaW9uIHRoYXQgcmV0dXJucyB0cnVlIG9yIGZhbHNlLiBJZiBpdCByZXR1cm5zIHRydWUgdGhlIFBhbmVsL1BhZ2UgYmVjb21lcyByZXF1aXJlZC5cbiAgICogVGhlIGxpYnJhcnkgcnVucyB0aGUgZXhwcmVzc2lvbiBvbiBzdXJ2ZXkgc3RhcnQgYW5kIG9uIGNoYW5naW5nIGEgcXVlc3Rpb24gdmFsdWUuIElmIHRoZSBwcm9wZXJ0eSBpcyBlbXB0eSB0aGVuIGlzUmVxdWlyZWQgcHJvcGVydHkgaXMgdXNlZC5cbiAgICogQHNlZSBpc1JlcXVpcmVkXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJlcXVpcmVkSWYoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicmVxdWlyZWRJZlwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJlcXVpcmVkSWYodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyZXF1aXJlZElmXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIHNlYXJjaFRleHQodGV4dDogc3RyaW5nLCBmb3VuZGVkOiBBcnJheTxJRmluZEVsZW1lbnQ+KSB7XG4gICAgc3VwZXIuc2VhcmNoVGV4dCh0ZXh0LCBmb3VuZGVkKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICg8QmFzZT4oPGFueT50aGlzLmVsZW1lbnRzW2ldKSkuc2VhcmNoVGV4dCh0ZXh0LCBmb3VuZGVkKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSwgaWYgdGhlcmUgaXMgYW4gZXJyb3Igb24gdGhpcyBQYWdlIG9yIGluc2lkZSB0aGUgY3VycmVudCBQYW5lbFxuICAgKiBAcGFyYW0gZmlyZUNhbGxiYWNrIHNldCBpdCB0byB0cnVlLCB0byBzaG93IGVycm9ycyBpbiBVSVxuICAgKiBAcGFyYW0gZm9jdXNPbkZpcnN0RXJyb3Igc2V0IGl0IHRvIHRydWUgdG8gZm9jdXMgb24gdGhlIGZpcnN0IHF1ZXN0aW9uIHRoYXQgZG9lc24ndCBwYXNzIHRoZSB2YWxpZGF0aW9uXG4gICAqL1xuICBwdWJsaWMgaGFzRXJyb3JzKFxuICAgIGZpcmVDYWxsYmFjazogYm9vbGVhbiA9IHRydWUsXG4gICAgZm9jdXNPbkZpcnN0RXJyb3I6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICByZWM6IGFueSA9IG51bGxcbiAgKTogYm9vbGVhbiB7XG4gICAgcmVjID0gISFyZWNcbiAgICAgID8gcmVjXG4gICAgICA6IHtcbiAgICAgICAgICBmaXJlQ2FsbGJhY2s6IGZpcmVDYWxsYmFjayxcbiAgICAgICAgICBmb2N1c2VPbkZpcnN0RXJyb3I6IGZvY3VzT25GaXJzdEVycm9yLFxuICAgICAgICAgIGZpcnN0RXJyb3JRdWVzdGlvbjogPGFueT5udWxsLFxuICAgICAgICAgIHJlc3VsdDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgdGhpcy5oYXNFcnJvcnNDb3JlKHJlYyk7XG4gICAgaWYgKHJlYy5maXJzdEVycm9yUXVlc3Rpb24pIHtcbiAgICAgIHJlYy5maXJzdEVycm9yUXVlc3Rpb24uZm9jdXModHJ1ZSk7XG4gICAgfVxuICAgIHJldHVybiByZWMucmVzdWx0O1xuICB9XG4gIHByaXZhdGUgaGFzRXJyb3JzSW5QYW5lbHMocmVjOiBhbnkpIHtcbiAgICB2YXIgZXJyb3JzID0gPEFycmF5PGFueT4+W107XG4gICAgdGhpcy5oYXNSZXF1aXJlZEVycm9yKHJlYywgZXJyb3JzKTtcbiAgICBpZiAodGhpcy5zdXJ2ZXkpIHtcbiAgICAgIHZhciBjdXN0b21FcnJvciA9IHRoaXMuc3VydmV5LnZhbGlkYXRlUGFuZWwodGhpcyk7XG4gICAgICBpZiAoY3VzdG9tRXJyb3IpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goY3VzdG9tRXJyb3IpO1xuICAgICAgICByZWMucmVzdWx0ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCEhcmVjLmZpcmVDYWxsYmFjaykge1xuICAgICAgaWYgKCEhdGhpcy5zdXJ2ZXkpIHtcbiAgICAgICAgdGhpcy5zdXJ2ZXkuYmVmb3JlU2V0dGluZ1BhbmVsRXJyb3JzKHRoaXMsIGVycm9ycyk7XG4gICAgICB9XG4gICAgICB0aGlzLmVycm9ycyA9IGVycm9ycztcbiAgICB9XG4gIH1cbiAgLy9JU3VydmV5RXJyb3JPd25lclxuICBnZXRFcnJvckN1c3RvbVRleHQodGV4dDogc3RyaW5nLCBlcnJvcjogU3VydmV5RXJyb3IpOiBzdHJpbmcge1xuICAgIGlmICghIXRoaXMuc3VydmV5KSByZXR1cm4gdGhpcy5zdXJ2ZXkuZ2V0RXJyb3JDdXN0b21UZXh0KHRleHQsIGVycm9yKTtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIHByaXZhdGUgaGFzUmVxdWlyZWRFcnJvcihyZWM6IGFueSwgZXJyb3JzOiBBcnJheTxTdXJ2ZXlFcnJvcj4pIHtcbiAgICBpZiAoIXRoaXMuaXNSZXF1aXJlZCkgcmV0dXJuO1xuICAgIHZhciB2aXNRdWVzdGlvbnMgPSA8QXJyYXk8YW55Pj5bXTtcbiAgICB0aGlzLmFkZFF1ZXN0aW9uc1RvTGlzdCh2aXNRdWVzdGlvbnMsIHRydWUpO1xuICAgIGlmICh2aXNRdWVzdGlvbnMubGVuZ3RoID09IDApIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpc1F1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCF2aXNRdWVzdGlvbnNbaV0uaXNFbXB0eSgpKSByZXR1cm47XG4gICAgfVxuICAgIHJlYy5yZXN1bHQgPSB0cnVlO1xuICAgIGVycm9ycy5wdXNoKG5ldyBPbmVBbnN3ZXJSZXF1aXJlZEVycm9yKHRoaXMucmVxdWlyZWRFcnJvclRleHQsIHRoaXMpKTtcbiAgICBpZiAocmVjLmZvY3VzZU9uRmlyc3RFcnJvciAmJiAhcmVjLmZpcnN0RXJyb3JRdWVzdGlvbikge1xuICAgICAgcmVjLmZpcnN0RXJyb3JRdWVzdGlvbiA9IHZpc1F1ZXN0aW9uc1swXTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGhhc0Vycm9yc0NvcmUocmVjOiBhbnkpIHtcbiAgICB2YXIgZWxlbWVudHMgPSB0aGlzLmVsZW1lbnRzO1xuICAgIHZhciBlbGVtZW50ID0gbnVsbDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGVsZW1lbnQgPSBlbGVtZW50c1tpXTtcblxuICAgICAgaWYgKCFlbGVtZW50LmlzVmlzaWJsZSkgY29udGludWU7XG5cbiAgICAgIGlmIChlbGVtZW50LmlzUGFuZWwpIHtcbiAgICAgICAgKDxQYW5lbE1vZGVsQmFzZT4oPGFueT5lbGVtZW50KSkuaGFzRXJyb3JzQ29yZShyZWMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHF1ZXN0aW9uID0gPFF1ZXN0aW9uPmVsZW1lbnQ7XG4gICAgICAgIGlmIChxdWVzdGlvbi5pc1JlYWRPbmx5KSBjb250aW51ZTtcbiAgICAgICAgaWYgKHF1ZXN0aW9uLmhhc0Vycm9ycyhyZWMuZmlyZUNhbGxiYWNrLCByZWMpKSB7XG4gICAgICAgICAgaWYgKHJlYy5mb2N1c2VPbkZpcnN0RXJyb3IgJiYgcmVjLmZpcnN0RXJyb3JRdWVzdGlvbiA9PSBudWxsKSB7XG4gICAgICAgICAgICByZWMuZmlyc3RFcnJvclF1ZXN0aW9uID0gcXVlc3Rpb247XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlYy5yZXN1bHQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuaGFzRXJyb3JzSW5QYW5lbHMocmVjKTtcbiAgICB0aGlzLnVwZGF0ZUNvbnRhaW5zRXJyb3JzKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENvbnRhaW5zRXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgIHZhciByZXMgPSBzdXBlci5nZXRDb250YWluc0Vycm9ycygpO1xuICAgIGlmIChyZXMpIHJldHVybiByZXM7XG4gICAgdmFyIGVsZW1lbnRzID0gdGhpcy5lbGVtZW50cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoZWxlbWVudHNbaV0uY29udGFpbnNFcnJvcnMpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdXBkYXRlRWxlbWVudFZpc2liaWxpdHkoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWwgPSB0aGlzLmVsZW1lbnRzW2ldO1xuICAgICAgKDxCYXNlPig8YW55PmVsKSkuc2V0UHJvcGVydHlWYWx1ZShcImlzVmlzaWJsZVwiLCBlbC5pc1Zpc2libGUpO1xuICAgICAgaWYgKGVsLmlzUGFuZWwpIHtcbiAgICAgICAgKDxQYW5lbE1vZGVsQmFzZT4oPGFueT5lbCkpLnVwZGF0ZUVsZW1lbnRWaXNpYmlsaXR5KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGdldEZpcnN0UXVlc3Rpb25Ub0ZvY3VzKHdpdGhFcnJvcjogYm9vbGVhbiA9IGZhbHNlKTogUXVlc3Rpb24ge1xuICAgIHZhciBlbGVtZW50cyA9IHRoaXMuZWxlbWVudHM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsID0gZWxlbWVudHNbaV07XG4gICAgICBpZiAoIWVsLmlzVmlzaWJsZSkgY29udGludWU7XG4gICAgICBpZiAoZWwuaXNQYW5lbCkge1xuICAgICAgICB2YXIgcmVzID0gKDxQYW5lbE1vZGVsQmFzZT4oPGFueT5lbCkpLmdldEZpcnN0UXVlc3Rpb25Ub0ZvY3VzKFxuICAgICAgICAgIHdpdGhFcnJvclxuICAgICAgICApO1xuICAgICAgICBpZiAoISFyZXMpIHJldHVybiByZXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcSA9IDxRdWVzdGlvbj5lbDtcbiAgICAgICAgaWYgKHEuaGFzSW5wdXQgJiYgKCF3aXRoRXJyb3IgfHwgcS5jdXJyZW50RXJyb3JDb3VudCA+IDApKSByZXR1cm4gcTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLyoqXG4gICAqIENhbGwgaXQgdG8gZm9jdXMgdGhlIGlucHV0IG9uIHRoZSBmaXJzdCBxdWVzdGlvblxuICAgKi9cbiAgcHVibGljIGZvY3VzRmlyc3RRdWVzdGlvbigpIHtcbiAgICB2YXIgcSA9IHRoaXMuZ2V0Rmlyc3RRdWVzdGlvblRvRm9jdXMoKTtcbiAgICBpZiAoISFxKSB7XG4gICAgICBxLmZvY3VzKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDYWxsIGl0IHRvIGZvY3VzIHRoZSBpbnB1dCBvZiB0aGUgZmlyc3QgcXVlc3Rpb24gdGhhdCBoYXMgYW4gZXJyb3IuXG4gICAqL1xuICBwdWJsaWMgZm9jdXNGaXJzdEVycm9yUXVlc3Rpb24oKSB7XG4gICAgdmFyIHEgPSB0aGlzLmdldEZpcnN0UXVlc3Rpb25Ub0ZvY3VzKHRydWUpO1xuICAgIGlmICghIXEpIHtcbiAgICAgIHEuZm9jdXMoKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEZpbGwgbGlzdCBhcnJheSB3aXRoIHRoZSBxdWVzdGlvbnMuXG4gICAqIEBwYXJhbSBsaXN0XG4gICAqIEBwYXJhbSB2aXNpYmxlT25seSBzZXQgaXQgdG8gdHJ1ZSB0byBnZXQgdmlzaWJsZSBxdWVzdGlvbnMgb25seVxuICAgKi9cbiAgcHVibGljIGFkZFF1ZXN0aW9uc1RvTGlzdChcbiAgICBsaXN0OiBBcnJheTxJUXVlc3Rpb24+LFxuICAgIHZpc2libGVPbmx5OiBib29sZWFuID0gZmFsc2UsXG4gICAgaW5jbHVkaW5nRGVzaWduVGltZTogYm9vbGVhbiA9IGZhbHNlXG4gICkge1xuICAgIHRoaXMuYWRkRWxlbWVudHNUb0xpc3QobGlzdCwgdmlzaWJsZU9ubHksIGluY2x1ZGluZ0Rlc2lnblRpbWUsIGZhbHNlKTtcbiAgfVxuICAvKipcbiAgICogRmlsbCBsaXN0IGFycmF5IHdpdGggdGhlIHBhbmVscy5cbiAgICogQHBhcmFtIGxpc3RcbiAgICovXG4gIHB1YmxpYyBhZGRQYW5lbHNJbnRvTGlzdChcbiAgICBsaXN0OiBBcnJheTxJUGFuZWw+LFxuICAgIHZpc2libGVPbmx5OiBib29sZWFuID0gZmFsc2UsXG4gICAgaW5jbHVkaW5nRGVzaWduVGltZTogYm9vbGVhbiA9IGZhbHNlXG4gICkge1xuICAgIHRoaXMuYWRkRWxlbWVudHNUb0xpc3QoXG4gICAgICA8QXJyYXk8SUVsZW1lbnQ+Pig8QXJyYXk8YW55Pj5saXN0KSxcbiAgICAgIHZpc2libGVPbmx5LFxuICAgICAgaW5jbHVkaW5nRGVzaWduVGltZSxcbiAgICAgIHRydWVcbiAgICApO1xuICB9XG4gIHByaXZhdGUgYWRkRWxlbWVudHNUb0xpc3QoXG4gICAgbGlzdDogQXJyYXk8SUVsZW1lbnQ+LFxuICAgIHZpc2libGVPbmx5OiBib29sZWFuLFxuICAgIGluY2x1ZGluZ0Rlc2lnblRpbWU6IGJvb2xlYW4sXG4gICAgaXNQYW5lbDogYm9vbGVhblxuICApIHtcbiAgICBpZiAodmlzaWJsZU9ubHkgJiYgIXRoaXMudmlzaWJsZSkgcmV0dXJuO1xuICAgIHRoaXMuYWRkRWxlbWVudHNUb0xpc3RDb3JlKFxuICAgICAgbGlzdCxcbiAgICAgIHRoaXMuZWxlbWVudHMsXG4gICAgICB2aXNpYmxlT25seSxcbiAgICAgIGluY2x1ZGluZ0Rlc2lnblRpbWUsXG4gICAgICBpc1BhbmVsXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGFkZEVsZW1lbnRzVG9MaXN0Q29yZShcbiAgICBsaXN0OiBBcnJheTxJRWxlbWVudD4sXG4gICAgZWxlbWVudHM6IEFycmF5PElFbGVtZW50PixcbiAgICB2aXNpYmxlT25seTogYm9vbGVhbixcbiAgICBpbmNsdWRpbmdEZXNpZ25UaW1lOiBib29sZWFuLFxuICAgIGlzUGFuZWw6IGJvb2xlYW5cbiAgKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsID0gZWxlbWVudHNbaV07XG4gICAgICBpZiAodmlzaWJsZU9ubHkgJiYgIWVsLnZpc2libGUpIGNvbnRpbnVlO1xuICAgICAgaWYgKChpc1BhbmVsICYmIGVsLmlzUGFuZWwpIHx8ICghaXNQYW5lbCAmJiAhZWwuaXNQYW5lbCkpIHtcbiAgICAgICAgbGlzdC5wdXNoKGVsKTtcbiAgICAgIH1cbiAgICAgIGlmIChlbC5pc1BhbmVsKSB7XG4gICAgICAgICg8UGFuZWxNb2RlbD5lbCkuYWRkRWxlbWVudHNUb0xpc3RDb3JlKFxuICAgICAgICAgIGxpc3QsXG4gICAgICAgICAgKDxQYW5lbE1vZGVsPmVsKS5lbGVtZW50cyxcbiAgICAgICAgICB2aXNpYmxlT25seSxcbiAgICAgICAgICBpbmNsdWRpbmdEZXNpZ25UaW1lLFxuICAgICAgICAgIGlzUGFuZWxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpbmNsdWRpbmdEZXNpZ25UaW1lKSB7XG4gICAgICAgICAgdGhpcy5hZGRFbGVtZW50c1RvTGlzdENvcmUoXG4gICAgICAgICAgICBsaXN0LFxuICAgICAgICAgICAgKDxTdXJ2ZXlFbGVtZW50Pig8YW55PmVsKSkuZ2V0RWxlbWVudHNJbkRlc2lnbihmYWxzZSksXG4gICAgICAgICAgICB2aXNpYmxlT25seSxcbiAgICAgICAgICAgIGluY2x1ZGluZ0Rlc2lnblRpbWUsXG4gICAgICAgICAgICBpc1BhbmVsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IG9iamVjdCBpcyBQYWdlIGFuZCBpdCBpcyB0aGUgY3VycmVudCBwYWdlLlxuICAgKi9cbiAgcHVibGljIGdldCBpc0FjdGl2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuc3VydmV5IHx8IDxQYWdlTW9kZWw+dGhpcy5zdXJ2ZXkuY3VycmVudFBhZ2UgPT0gdGhpcy5yb290O1xuICB9XG4gIHB1YmxpYyB1cGRhdGVDdXN0b21XaWRnZXRzKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5lbGVtZW50c1tpXS51cGRhdGVDdXN0b21XaWRnZXRzKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSBkaWZmZXJlbnQgZnJvbSBcImRlZmF1bHRcIiB0byBzZXQgdGhlIHNwZWNpZmljIHF1ZXN0aW9uIHRpdGxlIGxvY2F0aW9uIGZvciB0aGlzIHBhbmVsL3BhZ2UuXG4gICAqIEBzZWUgU3VydmV5TW9kZWwucXVlc3Rpb25UaXRsZUxvY2F0aW9uXG4gICAqL1xuICBwdWJsaWMgZ2V0IHF1ZXN0aW9uVGl0bGVMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvblRpdGxlTG9jYXRpb25cIik7XG4gIH1cbiAgcHVibGljIHNldCBxdWVzdGlvblRpdGxlTG9jYXRpb24odmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInF1ZXN0aW9uVGl0bGVMb2NhdGlvblwiLCB2YWx1ZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuICBnZXRRdWVzdGlvblRpdGxlTG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5vbkdldFF1ZXN0aW9uVGl0bGVMb2NhdGlvbilcbiAgICAgIHJldHVybiB0aGlzLm9uR2V0UXVlc3Rpb25UaXRsZUxvY2F0aW9uKCk7XG4gICAgaWYgKHRoaXMucXVlc3Rpb25UaXRsZUxvY2F0aW9uICE9IFwiZGVmYXVsdFwiKVxuICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb25UaXRsZUxvY2F0aW9uO1xuICAgIGlmICh0aGlzLnBhcmVudCkgcmV0dXJuIHRoaXMucGFyZW50LmdldFF1ZXN0aW9uVGl0bGVMb2NhdGlvbigpO1xuICAgIHJldHVybiB0aGlzLnN1cnZleSA/IHRoaXMuc3VydmV5LnF1ZXN0aW9uVGl0bGVMb2NhdGlvbiA6IFwidG9wXCI7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXJ0SW5kZXgoKTogc3RyaW5nIHtcbiAgICBpZiAoISF0aGlzLnBhcmVudCkgcmV0dXJuIHRoaXMucGFyZW50LmdldFF1ZXN0aW9uU3RhcnRJbmRleCgpO1xuICAgIGlmICghIXRoaXMuc3VydmV5KSByZXR1cm4gdGhpcy5zdXJ2ZXkucXVlc3Rpb25TdGFydEluZGV4O1xuICAgIHJldHVybiBcIlwiO1xuICB9XG4gIGdldFF1ZXN0aW9uU3RhcnRJbmRleCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFN0YXJ0SW5kZXgoKTtcbiAgfVxuICBnZXRDaGlsZHJlbkxheW91dFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJyb3dcIjtcbiAgfVxuICBwdWJsaWMgZ2V0UHJvZ3Jlc3NJbmZvKCk6IElQcm9ncmVzc0luZm8ge1xuICAgIHJldHVybiBTdXJ2ZXlFbGVtZW50LmdldFByb2dyZXNzSW5mb0J5RWxlbWVudHMoXG4gICAgICA8QXJyYXk8U3VydmV5RWxlbWVudD4+KDxhbnk+dGhpcy5lbGVtZW50cyksXG4gICAgICB0aGlzLmlzUmVxdWlyZWRcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcm9vdCgpOiBQYW5lbE1vZGVsQmFzZSB7XG4gICAgdmFyIHJlcyA9IDxQYW5lbE1vZGVsQmFzZT50aGlzO1xuICAgIHdoaWxlIChyZXMucGFyZW50KSByZXMgPSByZXMucGFyZW50O1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJvdGVjdGVkIGNoaWxkVmlzaWJpbGl0eUNoYW5nZWQoKSB7XG4gICAgdmFyIG5ld0lzVmlzaWJsZVZhbHVlID0gdGhpcy5nZXRJc1BhZ2VWaXNpYmxlKG51bGwpO1xuICAgIHZhciBvbGRJc1Zpc2libGVWYWx1ZSA9IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlzVmlzaWJsZVwiLCB0cnVlKTtcbiAgICBpZiAobmV3SXNWaXNpYmxlVmFsdWUgIT09IG9sZElzVmlzaWJsZVZhbHVlKSB7XG4gICAgICB0aGlzLm9uVmlzaWJsZUNoYW5nZWQoKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVJvd0FuZFNldExhenkoaW5kZXg6IG51bWJlcik6IFF1ZXN0aW9uUm93TW9kZWwge1xuICAgIGNvbnN0IHJvdyA9IHRoaXMuY3JlYXRlUm93KCk7XG4gICAgcm93LnNldElzTGF6eVJlbmRlcmluZyh0aGlzLmlzTGF6eVJlbmRlckluUm93KGluZGV4KSk7XG4gICAgcmV0dXJuIHJvdztcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlUm93KCk6IFF1ZXN0aW9uUm93TW9kZWwge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25Sb3dNb2RlbCh0aGlzKTtcbiAgfVxuICBwdWJsaWMgb25TdXJ2ZXlMb2FkKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5lbGVtZW50c1tpXS5vblN1cnZleUxvYWQoKTtcbiAgICB9XG4gICAgdGhpcy5vbkVsZW1lbnRWaXNpYmlsaXR5Q2hhbmdlZCh0aGlzKTtcbiAgfVxuICBwdWJsaWMgb25GaXJzdFJlbmRlcmluZygpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuZWxlbWVudHNbaV0ub25GaXJzdFJlbmRlcmluZygpO1xuICAgIH1cbiAgICB0aGlzLm9uUm93c0NoYW5nZWQoKTtcbiAgfVxuICBnZXQgcm93cygpOiBBcnJheTxRdWVzdGlvblJvd01vZGVsPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJvd3NcIik7XG4gIH1cblxuICBwdWJsaWMgZW5zdXJlUm93c1Zpc2liaWxpdHkoKSB7XG4gICAgdGhpcy5yb3dzLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgcm93LmVuc3VyZVZpc2liaWxpdHkoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvblJvd3NDaGFuZ2VkKCkge1xuICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicm93c1wiLCB0aGlzLmJ1aWxkUm93cygpKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25BZGRFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50LCBpbmRleDogbnVtYmVyKSB7XG4gICAgZWxlbWVudC5zZXRTdXJ2ZXlJbXBsKHRoaXMuc3VydmV5SW1wbCk7XG4gICAgZWxlbWVudC5wYXJlbnQgPSB0aGlzO1xuICAgIHRoaXMubWFya1F1ZXN0aW9uTGlzdERpcnR5KCk7XG4gICAgdGhpcy51cGRhdGVSb3dzT25FbGVtZW50QWRkZWQoZWxlbWVudCwgaW5kZXgpO1xuICAgIGlmIChlbGVtZW50LmlzUGFuZWwpIHtcbiAgICAgIHZhciBwID0gPFBhbmVsTW9kZWw+ZWxlbWVudDtcbiAgICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgICB0aGlzLnN1cnZleS5wYW5lbEFkZGVkKHAsIGluZGV4LCB0aGlzLCB0aGlzLnJvb3QpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5zdXJ2ZXkpIHtcbiAgICAgICAgdmFyIHEgPSA8UXVlc3Rpb24+ZWxlbWVudDtcbiAgICAgICAgdGhpcy5zdXJ2ZXkucXVlc3Rpb25BZGRlZChxLCBpbmRleCwgdGhpcywgdGhpcy5yb290KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCEhdGhpcy5hZGRFbGVtZW50Q2FsbGJhY2spIHRoaXMuYWRkRWxlbWVudENhbGxiYWNrKGVsZW1lbnQpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAoPEJhc2U+KDxhbnk+ZWxlbWVudCkpLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnRpZXNWYWx1ZUNoYW5nZWQoXG4gICAgICBbXCJ2aXNpYmxlXCIsIFwiaXNWaXNpYmxlXCJdLFxuICAgICAgZnVuY3Rpb24oKSB7XG4gICAgICAgIHNlbGYub25FbGVtZW50VmlzaWJpbGl0eUNoYW5nZWQoZWxlbWVudCk7XG4gICAgICB9LFxuICAgICAgdGhpcy5pZFxuICAgICk7XG4gICAgKDxCYXNlPig8YW55PmVsZW1lbnQpKS5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcbiAgICAgIFwic3RhcnRXaXRoTmV3TGluZVwiLFxuICAgICAgZnVuY3Rpb24oKSB7XG4gICAgICAgIHNlbGYub25FbGVtZW50U3RhcnRXaXRoTmV3TGluZUNoYW5nZWQoZWxlbWVudCk7XG4gICAgICB9LFxuICAgICAgdGhpcy5pZFxuICAgICk7XG4gICAgdGhpcy5vbkVsZW1lbnRWaXNpYmlsaXR5Q2hhbmdlZCh0aGlzKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25SZW1vdmVFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50KSB7XG4gICAgZWxlbWVudC5wYXJlbnQgPSBudWxsO1xuICAgIHRoaXMubWFya1F1ZXN0aW9uTGlzdERpcnR5KCk7XG4gICAgKDxCYXNlPig8YW55PmVsZW1lbnQpKS51blJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnRpZXNWYWx1ZUNoYW5nZWQoXG4gICAgICBbXCJ2aXNpYmxlXCIsIFwiaXNWaXNpYmxlXCIsIFwic3RhcnRXaXRoTmV3TGluZVwiXSxcbiAgICAgIHRoaXMuaWRcbiAgICApO1xuICAgIHRoaXMudXBkYXRlUm93c09uRWxlbWVudFJlbW92ZWQoZWxlbWVudCk7XG4gICAgaWYgKCFlbGVtZW50LmlzUGFuZWwpIHtcbiAgICAgIGlmICh0aGlzLnN1cnZleSkgdGhpcy5zdXJ2ZXkucXVlc3Rpb25SZW1vdmVkKDxRdWVzdGlvbj5lbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuc3VydmV5KSB0aGlzLnN1cnZleS5wYW5lbFJlbW92ZWQoZWxlbWVudCk7XG4gICAgfVxuICAgIGlmICghIXRoaXMucmVtb3ZlRWxlbWVudENhbGxiYWNrKSB0aGlzLnJlbW92ZUVsZW1lbnRDYWxsYmFjayhlbGVtZW50KTtcbiAgICB0aGlzLm9uRWxlbWVudFZpc2liaWxpdHlDaGFuZ2VkKHRoaXMpO1xuICB9XG4gIHByaXZhdGUgb25FbGVtZW50VmlzaWJpbGl0eUNoYW5nZWQoZWxlbWVudDogYW55KSB7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHJldHVybjtcbiAgICB0aGlzLnVwZGF0ZVJvd3NWaXNpYmlsaXR5KGVsZW1lbnQpO1xuICAgIHRoaXMuY2hpbGRWaXNpYmlsaXR5Q2hhbmdlZCgpO1xuICAgIGlmICghIXRoaXMucGFyZW50KSB7XG4gICAgICB0aGlzLnBhcmVudC5vbkVsZW1lbnRWaXNpYmlsaXR5Q2hhbmdlZCh0aGlzKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBvbkVsZW1lbnRTdGFydFdpdGhOZXdMaW5lQ2hhbmdlZChlbGVtZW50OiBhbnkpIHtcbiAgICB0aGlzLm9uUm93c0NoYW5nZWQoKTtcbiAgfVxuICBwcml2YXRlIHVwZGF0ZVJvd3NWaXNpYmlsaXR5KGVsZW1lbnQ6IGFueSkge1xuICAgIHZhciByb3dzID0gdGhpcy5yb3dzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJvdyA9IHJvd3NbaV07XG4gICAgICBpZiAocm93LmVsZW1lbnRzLmluZGV4T2YoZWxlbWVudCkgPiAtMSkge1xuICAgICAgICByb3cudXBkYXRlVmlzaWJsZSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBjYW5CdWlsZFJvd3MoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uICYmIHRoaXMuZ2V0Q2hpbGRyZW5MYXlvdXRUeXBlKCkgPT0gXCJyb3dcIjtcbiAgfVxuICBwcml2YXRlIGJ1aWxkUm93cygpOiBBcnJheTxRdWVzdGlvblJvd01vZGVsPiB7XG4gICAgaWYgKCF0aGlzLmNhbkJ1aWxkUm93cygpKSByZXR1cm4gW107XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheTxRdWVzdGlvblJvd01vZGVsPigpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsID0gdGhpcy5lbGVtZW50c1tpXTtcbiAgICAgIHZhciBpc05ld1JvdyA9IGkgPT0gMCB8fCBlbC5zdGFydFdpdGhOZXdMaW5lO1xuICAgICAgdmFyIHJvdyA9IGlzTmV3Um93ID8gdGhpcy5jcmVhdGVSb3dBbmRTZXRMYXp5KHJlc3VsdC5sZW5ndGgpIDogcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXTtcbiAgICAgIGlmIChpc05ld1JvdykgcmVzdWx0LnB1c2gocm93KTtcbiAgICAgIHJvdy5hZGRFbGVtZW50KGVsKTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdFtpXS51cGRhdGVWaXNpYmxlKCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHJpdmF0ZSBpc0xhenlSZW5kZXJJblJvdyhyb3dJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnN1cnZleSB8fCAhdGhpcy5zdXJ2ZXkuaXNMYXp5UmVuZGVyaW5nKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIChcbiAgICAgIHJvd0luZGV4ID49IHNldHRpbmdzLmxhenlSb3dzUmVuZGVyaW5nU3RhcnRSb3cgfHxcbiAgICAgICF0aGlzLmNhblJlbmRlckZpcnN0Um93cygpXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyRmlyc3RSb3dzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzUGFnZTtcbiAgfVxuICBwcml2YXRlIHVwZGF0ZVJvd3NPbkVsZW1lbnRBZGRlZChlbGVtZW50OiBJRWxlbWVudCwgaW5kZXg6IG51bWJlcikge1xuICAgIGlmICghdGhpcy5jYW5CdWlsZFJvd3MoKSkgcmV0dXJuO1xuICAgIHZhciBkcmFnRHJvcEluZm8gPSBuZXcgRHJhZ0Ryb3BJbmZvKG51bGwsIGVsZW1lbnQpO1xuICAgIGRyYWdEcm9wSW5mby50YXJnZXQgPSBlbGVtZW50O1xuICAgIGRyYWdEcm9wSW5mby5pc0VkZ2UgPSB0aGlzLmVsZW1lbnRzLmxlbmd0aCA+IDE7XG4gICAgaWYgKHRoaXMuZWxlbWVudHMubGVuZ3RoIDwgMikge1xuICAgICAgZHJhZ0Ryb3BJbmZvLmRlc3RpbmF0aW9uID0gdGhpcztcbiAgICB9IGVsc2Uge1xuICAgICAgZHJhZ0Ryb3BJbmZvLmlzQm90dG9tID0gaW5kZXggPiAwO1xuICAgICAgaWYgKGluZGV4ID09IDApIHtcbiAgICAgICAgZHJhZ0Ryb3BJbmZvLmRlc3RpbmF0aW9uID0gdGhpcy5lbGVtZW50c1sxXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRyYWdEcm9wSW5mby5kZXN0aW5hdGlvbiA9IHRoaXMuZWxlbWVudHNbaW5kZXggLSAxXTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5kcmFnRHJvcEFkZFRhcmdldFRvUm93KGRyYWdEcm9wSW5mbywgbnVsbCk7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVSb3dzT25FbGVtZW50UmVtb3ZlZChlbGVtZW50OiBJRWxlbWVudCkge1xuICAgIGlmICghdGhpcy5jYW5CdWlsZFJvd3MoKSkgcmV0dXJuO1xuICAgIHRoaXMudXBkYXRlUm93c1JlbW92ZUVsZW1lbnRGcm9tUm93KFxuICAgICAgZWxlbWVudCxcbiAgICAgIHRoaXMuZmluZFJvd0J5RWxlbWVudChlbGVtZW50KVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHVwZGF0ZVJvd3NSZW1vdmVFbGVtZW50RnJvbVJvdyhcbiAgICBlbGVtZW50OiBJRWxlbWVudCxcbiAgICByb3c6IFF1ZXN0aW9uUm93TW9kZWxcbiAgKSB7XG4gICAgaWYgKCFyb3cgfHwgIXJvdy5wYW5lbCkgcmV0dXJuO1xuICAgIHZhciBlbEluZGV4ID0gcm93LmVsZW1lbnRzLmluZGV4T2YoZWxlbWVudCk7XG4gICAgaWYgKGVsSW5kZXggPCAwKSByZXR1cm47XG4gICAgcm93LmVsZW1lbnRzLnNwbGljZShlbEluZGV4LCAxKTtcbiAgICBpZiAocm93LmVsZW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJvdy51cGRhdGVWaXNpYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChyb3cuaW5kZXggPj0gMCkge1xuICAgICAgICByb3cucGFuZWwucm93cy5zcGxpY2Uocm93LmluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBmaW5kUm93QnlFbGVtZW50KGVsOiBJRWxlbWVudCk6IFF1ZXN0aW9uUm93TW9kZWwge1xuICAgIHZhciByb3dzID0gdGhpcy5yb3dzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHJvd3NbaV0uZWxlbWVudHMuaW5kZXhPZihlbCkgPiAtMSkgcmV0dXJuIHJvd3NbaV07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGVsZW1lbnRXaWR0aENoYW5nZWQoZWw6IElFbGVtZW50KSB7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHJldHVybjtcbiAgICB2YXIgcm93ID0gdGhpcy5maW5kUm93QnlFbGVtZW50KGVsKTtcbiAgICBpZiAoISFyb3cpIHtcbiAgICAgIHJvdy51cGRhdGVWaXNpYmxlKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHJlbmRlcmVkIHRpdGxlIHRleHQgb3IgaHRtbC5cbiAgICovXG4gIHB1YmxpYyBnZXQgcHJvY2Vzc2VkVGl0bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UmVuZGVyZWRUaXRsZSh0aGlzLmxvY1RpdGxlLnRleHRPckh0bWwpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRSZW5kZXJlZFRpdGxlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50ZXh0UHJvY2Vzc29yICE9IG51bGxcbiAgICAgID8gdGhpcy50ZXh0UHJvY2Vzc29yLnByb2Nlc3NUZXh0KHN0ciwgdHJ1ZSlcbiAgICAgIDogc3RyO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgaXQgdG8gZ2V0L3NldCB0aGUgb2JqZWN0IHZpc2liaWxpdHkuXG4gICAqIEBzZWUgdmlzaWJsZUlmXG4gICAqL1xuICBwdWJsaWMgZ2V0IHZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVcIiwgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIHNldCB2aXNpYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHZhbHVlID09PSB0aGlzLnZpc2libGUpIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmxlXCIsIHZhbHVlKTtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc1Zpc2libGVcIiwgdGhpcy5pc1Zpc2libGUpO1xuICAgIGlmICghdGhpcy5pc0xvYWRpbmdGcm9tSnNvbikgdGhpcy5vblZpc2libGVDaGFuZ2VkKCk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uVmlzaWJsZUNoYW5nZWQoKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNWaXNpYmxlXCIsIHRoaXMuaXNWaXNpYmxlKTtcbiAgICBpZiAoXG4gICAgICAhIXRoaXMuc3VydmV5ICYmXG4gICAgICB0aGlzLnN1cnZleS5pc0NsZWFyVmFsdWVPbkhpZGRlbkNvbnRhaW5lciAmJlxuICAgICAgIXRoaXMuaXNMb2FkaW5nRnJvbUpzb25cbiAgICApIHtcbiAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ucztcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1Zpc2libGUpIHtcbiAgICAgICAgICBxdWVzdGlvbnNbaV0uY2xlYXJWYWx1ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHF1ZXN0aW9uc1tpXS51cGRhdGVWYWx1ZVdpdGhEZWZhdWx0cygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgb2JqZWN0IGlzIHZpc2libGUgb3Igc3VydmV5IGlzIGluIGRlc2lnbiBtb2RlIHJpZ2h0IG5vdy5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXNWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFyZUludmlzaWJsZUVsZW1lbnRzU2hvd2luZyB8fCB0aGlzLmdldElzUGFnZVZpc2libGUobnVsbCk7XG4gIH1cbiAgZ2V0SXNQYWdlVmlzaWJsZShleGNlcHRpb25RdWVzdGlvbjogSVF1ZXN0aW9uKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnZpc2libGUpIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmVsZW1lbnRzW2ldID09IGV4Y2VwdGlvblF1ZXN0aW9uKSBjb250aW51ZTtcbiAgICAgIGlmICh0aGlzLmVsZW1lbnRzW2ldLmlzVmlzaWJsZSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwcml2YXRlIGxhc3RWaXNpYmxlSW5kZXg6IG51bWJlcjtcbiAgcHVibGljIHNldFZpc2libGVJbmRleChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAoIXRoaXMuaXNWaXNpYmxlIHx8IGluZGV4IDwgMCkge1xuICAgICAgdGhpcy5yZXNldFZpc2libGVJbmRleGVzKCk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgdGhpcy5sYXN0VmlzaWJsZUluZGV4ID0gaW5kZXg7XG4gICAgdmFyIHN0YXJ0SW5kZXggPSBpbmRleDtcbiAgICBpbmRleCArPSB0aGlzLmJlZm9yZVNldFZpc2libGVJbmRleChpbmRleCk7XG4gICAgdmFyIHBhbmVsU3RhcnRJbmRleCA9IHRoaXMuZ2V0UGFuZWxTdGFydEluZGV4KGluZGV4KTtcbiAgICB2YXIgcGFuZWxJbmRleCA9IHBhbmVsU3RhcnRJbmRleDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHBhbmVsSW5kZXggKz0gdGhpcy5lbGVtZW50c1tpXS5zZXRWaXNpYmxlSW5kZXgocGFuZWxJbmRleCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzQ29udGludWVOdW1iZXJpbmcoKSkge1xuICAgICAgaW5kZXggKz0gcGFuZWxJbmRleCAtIHBhbmVsU3RhcnRJbmRleDtcbiAgICB9XG4gICAgcmV0dXJuIGluZGV4IC0gc3RhcnRJbmRleDtcbiAgfVxuICBwcml2YXRlIHVwZGF0ZVZpc2libGVJbmRleGVzKCkge1xuICAgIGlmICh0aGlzLmxhc3RWaXNpYmxlSW5kZXggPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgIHRoaXMucmVzZXRWaXNpYmxlSW5kZXhlcygpO1xuICAgIHRoaXMuc2V0VmlzaWJsZUluZGV4KHRoaXMubGFzdFZpc2libGVJbmRleCk7XG4gIH1cbiAgcHJpdmF0ZSByZXNldFZpc2libGVJbmRleGVzKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5lbGVtZW50c1tpXS5zZXRWaXNpYmxlSW5kZXgoLTEpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgYmVmb3JlU2V0VmlzaWJsZUluZGV4KGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiAwO1xuICB9XG4gIHByb3RlY3RlZCBnZXRQYW5lbFN0YXJ0SW5kZXgoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG4gIHByb3RlY3RlZCBpc0NvbnRpbnVlTnVtYmVyaW5nKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgcmVhZE9ubHkgcHJvcGVydHkgaXMgdHJ1ZSBvciBzdXJ2ZXkgaXMgaW4gZGlzcGxheSBtb2RlIG9yIHBhcmVudCBwYW5lbC9wYWdlIGlzIHJlYWRPbmx5LlxuICAgKiBAc2VlIFN1cnZleU1vZGVsLm1vZGVsXG4gICAqIEBzZWUgcmVhZE9ubHlcbiAgICovXG4gIHB1YmxpYyBnZXQgaXNSZWFkT25seSgpOiBib29sZWFuIHtcbiAgICB2YXIgaXNQYXJlbnRSZWFkT25seSA9ICEhdGhpcy5wYXJlbnQgJiYgdGhpcy5wYXJlbnQuaXNSZWFkT25seTtcbiAgICB2YXIgaXNTdXJ2ZXlSZWFkT25seSA9ICEhdGhpcy5zdXJ2ZXkgJiYgdGhpcy5zdXJ2ZXkuaXNEaXNwbGF5TW9kZTtcbiAgICByZXR1cm4gdGhpcy5yZWFkT25seSB8fCBpc1BhcmVudFJlYWRPbmx5IHx8IGlzU3VydmV5UmVhZE9ubHk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uUmVhZE9ubHlDaGFuZ2VkKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsID0gPFN1cnZleUVsZW1lbnQ+KDxhbnk+dGhpcy5lbGVtZW50c1tpXSk7XG4gICAgICBlbC5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNSZWFkT25seVwiLCBlbC5pc1JlYWRPbmx5KTtcbiAgICB9XG4gICAgc3VwZXIub25SZWFkT25seUNoYW5nZWQoKTtcbiAgfVxuICBwdWJsaWMgdXBkYXRlRWxlbWVudENzcyhyZU5ldz86IGJvb2xlYW4pIHtcbiAgICB0aGlzLmNzc0NsYXNzZXNWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlbCA9IDxTdXJ2ZXlFbGVtZW50Pig8YW55PnRoaXMuZWxlbWVudHNbaV0pO1xuICAgICAgZWwudXBkYXRlRWxlbWVudENzcyhyZU5ldyk7XG4gICAgfVxuICAgIHN1cGVyLnVwZGF0ZUVsZW1lbnRDc3MocmVOZXcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuIGV4cHJlc3Npb24gdGhhdCByZXR1cm5zIHRydWUgb3IgZmFsc2UuIElmIGl0IHJldHVybnMgZmFsc2UgdGhlIFBhbmVsL1BhZ2UgYmVjb21lcyByZWFkIG9ubHkgYW5kIGFuIGVuZC11c2VyIHdpbGwgbm90IGFibGUgdG8gYW5zd2VyIG9uIHF1c3Rpb25zIGluc2lkZSBpdC5cbiAgICogVGhlIGxpYnJhcnkgcnVucyB0aGUgZXhwcmVzc2lvbiBvbiBzdXJ2ZXkgc3RhcnQgYW5kIG9uIGNoYW5naW5nIGEgcXVlc3Rpb24gdmFsdWUuIElmIHRoZSBwcm9wZXJ0eSBpcyBlbXB0eSB0aGVuIHJlYWRPbmx5IHByb3BlcnR5IGlzIHVzZWQuXG4gICAqIEBzZWUgcmVhZE9ubHlcbiAgICogQHNlZSBpc1JlYWRPbmx5XG4gICAqL1xuICBwdWJsaWMgZ2V0IGVuYWJsZUlmKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImVuYWJsZUlmXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgZW5hYmxlSWYodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJlbmFibGVJZlwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBBZGQgYW4gZWxlbWVudCBpbnRvIFBhbmVsIG9yIFBhZ2UuIFJldHVybnMgdHJ1ZSBpZiB0aGUgZWxlbWVudCBhZGRlZCBzdWNjZXNzZnVsbHkuIE90aGVyd2lzZSByZXR1cm5zIGZhbHNlLlxuICAgKiBAcGFyYW0gZWxlbWVudFxuICAgKiBAcGFyYW0gaW5kZXggZWxlbWVudCBpbmRleCBpbiB0aGUgZWxlbWVudHMgYXJyYXlcbiAgICovXG4gIHB1YmxpYyBhZGRFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50LCBpbmRleDogbnVtYmVyID0gLTEpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY2FuQWRkRWxlbWVudChlbGVtZW50KSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5lbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbGVtZW50cy5zcGxpY2UoaW5kZXgsIDAsIGVsZW1lbnQpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBpbnNlcnRFbGVtZW50QWZ0ZXIoZWxlbWVudDogSUVsZW1lbnQsIGFmdGVyOiBJRWxlbWVudCkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5lbGVtZW50cy5pbmRleE9mKGFmdGVyKTtcbiAgICBpZiAoaW5kZXggPj0gMCkgdGhpcy5hZGRFbGVtZW50KGVsZW1lbnQsIGluZGV4ICsgMSk7XG4gIH1cbiAgcHVibGljIGluc2VydEVsZW1lbnRCZWZvcmUoZWxlbWVudDogSUVsZW1lbnQsIGJlZm9yZTogSUVsZW1lbnQpIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZWxlbWVudHMuaW5kZXhPZihiZWZvcmUpO1xuICAgIGlmIChpbmRleCA+PSAwKSB0aGlzLmFkZEVsZW1lbnQoZWxlbWVudCwgaW5kZXgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhbkFkZEVsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgISFlbGVtZW50ICYmIGVsZW1lbnQuaXNMYXlvdXRUeXBlU3VwcG9ydGVkKHRoaXMuZ2V0Q2hpbGRyZW5MYXlvdXRUeXBlKCkpXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICogQWRkIGEgcXVlc3Rpb24gaW50byBQYW5lbCBvciBQYWdlLiBSZXR1cm5zIHRydWUgaWYgdGhlIHF1ZXN0aW9uIGFkZGVkIHN1Y2Nlc3NmdWxseS4gT3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuXG4gICAqIEBwYXJhbSBxdWVzdGlvblxuICAgKiBAcGFyYW0gaW5kZXggZWxlbWVudCBpbmRleCBpbiB0aGUgZWxlbWVudHMgYXJyYXlcbiAgICovXG4gIHB1YmxpYyBhZGRRdWVzdGlvbihxdWVzdGlvbjogUXVlc3Rpb24sIGluZGV4OiBudW1iZXIgPSAtMSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFkZEVsZW1lbnQocXVlc3Rpb24sIGluZGV4KTtcbiAgfVxuICAvKipcbiAgICogQWRkIGEgcGFuZWwgaW50byBQYW5lbCBvciBQYWdlLiAgUmV0dXJucyB0cnVlIGlmIHRoZSBwYW5lbCBhZGRlZCBzdWNjZXNzZnVsbHkuIE90aGVyd2lzZSByZXR1cm5zIGZhbHNlLlxuICAgKiBAcGFyYW0gcGFuZWxcbiAgICogQHBhcmFtIGluZGV4IGVsZW1lbnQgaW5kZXggaW4gdGhlIGVsZW1lbnRzIGFycmF5XG4gICAqL1xuICBwdWJsaWMgYWRkUGFuZWwocGFuZWw6IFBhbmVsTW9kZWwsIGluZGV4OiBudW1iZXIgPSAtMSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFkZEVsZW1lbnQocGFuZWwsIGluZGV4KTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBxdWVzdGlvbiBhbmQgYWRkcyBpdCBhdCBsb2NhdGlvbiBvZiBpbmRleCwgYnkgZGVmYXVsdCB0aGUgZW5kIG9mIHRoZSBlbGVtZW50cyBsaXN0LiBSZXR1cm5zIG51bGwsIGlmIHRoZSBxdWVzdGlvbiBjb3VsZCBub3QgYmUgY3JlYXRlZCBvciBjb3VsZCBub3QgYmUgYWRkZWQgaW50byBwYWdlIG9yIHBhbmVsLlxuICAgKiBAcGFyYW0gcXVlc3Rpb25UeXBlIHRoZSBwb3NzaWJsZSB2YWx1ZXMgYXJlOiBcInRleHRcIiwgXCJjaGVja2JveFwiLCBcImRyb3Bkb3duXCIsIFwibWF0cml4XCIsIFwiaHRtbFwiLCBcIm1hdHJpeGR5bmFtaWNcIiwgXCJtYXRyaXhkcm9wZG93blwiIGFuZCBzbyBvbi5cbiAgICogQHBhcmFtIG5hbWUgYSBxdWVzdGlvbiBuYW1lXG4gICAqIEBwYXJhbSBpbmRleCBlbGVtZW50IGluZGV4IGluIHRoZSBlbGVtZW50cyBhcnJheVxuICAgKi9cbiAgcHVibGljIGFkZE5ld1F1ZXN0aW9uKFxuICAgIHF1ZXN0aW9uVHlwZTogc3RyaW5nLFxuICAgIG5hbWU6IHN0cmluZyA9IG51bGwsXG4gICAgaW5kZXg6IG51bWJlciA9IC0xXG4gICk6IFF1ZXN0aW9uIHtcbiAgICB2YXIgcXVlc3Rpb24gPSBRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlUXVlc3Rpb24ocXVlc3Rpb25UeXBlLCBuYW1lKTtcbiAgICBpZiAoIXRoaXMuYWRkUXVlc3Rpb24ocXVlc3Rpb24sIGluZGV4KSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHF1ZXN0aW9uO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IHBhbmVsIGFuZCBhZGRzIGl0IGludG8gdGhlIGVuZCBvZiB0aGUgZWxlbWVudHMgbGlzdC4gUmV0dXJucyBudWxsLCBpZiB0aGUgcGFuZWwgY291bGQgbm90IGJlIGNyZWF0ZWQgb3IgY291bGQgbm90IGJlIGFkZGVkIGludG8gcGFnZSBvciBwYW5lbC5cbiAgICogQHBhcmFtIG5hbWUgYSBwYW5lbCBuYW1lXG4gICAqL1xuICBwdWJsaWMgYWRkTmV3UGFuZWwobmFtZTogc3RyaW5nID0gbnVsbCk6IFBhbmVsTW9kZWwge1xuICAgIHZhciBwYW5lbCA9IHRoaXMuY3JlYXRlTmV3UGFuZWwobmFtZSk7XG4gICAgaWYgKCF0aGlzLmFkZFBhbmVsKHBhbmVsKSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHBhbmVsO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBpbmRleCBvZiBlbGVtZW50IHBhcmFtZXRlciBpbiB0aGUgZWxlbWVudHMgbGlzdC5cbiAgICogQHBhcmFtIGVsZW1lbnQgcXVlc3Rpb24gb3IgcGFuZWxcbiAgICovXG4gIHB1YmxpYyBpbmRleE9mKGVsZW1lbnQ6IElFbGVtZW50KTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50cy5pbmRleE9mKGVsZW1lbnQpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVOZXdQYW5lbChuYW1lOiBzdHJpbmcpOiBQYW5lbE1vZGVsIHtcbiAgICB2YXIgcmVzID0gU2VyaWFsaXplci5jcmVhdGVDbGFzcyhcInBhbmVsXCIpO1xuICAgIHJlcy5uYW1lID0gbmFtZTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gZWxlbWVudCAoUGFuZWwgb3IgUXVlc3Rpb24pIGZyb20gdGhlIGVsZW1lbnRzIGxpc3QuXG4gICAqIEBwYXJhbSBlbGVtZW50XG4gICAqIEBzZWUgZWxlbWVudHNcbiAgICovXG4gIHB1YmxpYyByZW1vdmVFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgdmFyIGluZGV4ID0gdGhpcy5lbGVtZW50cy5pbmRleE9mKGVsZW1lbnQpO1xuICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50c1tpXS5yZW1vdmVFbGVtZW50KGVsZW1lbnQpKSByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5lbGVtZW50cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8qKlxuICAgKiBSZW1vdmUgcXVlc3Rpb24gIGZyb20gdGhlIGVsZW1lbnRzIGxpc3QuXG4gICAqIEBwYXJhbSBxdWVzdGlvblxuICAgKiBAc2VlIGVsZW1lbnRzXG4gICAqIEBzZWUgcmVtb3ZlRWxlbWVudFxuICAgKi9cbiAgcHVibGljIHJlbW92ZVF1ZXN0aW9uKHF1ZXN0aW9uOiBRdWVzdGlvbikge1xuICAgIHRoaXMucmVtb3ZlRWxlbWVudChxdWVzdGlvbik7XG4gIH1cbiAgcnVuQ29uZGl0aW9uKHZhbHVlczogSGFzaFRhYmxlPGFueT4sIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+KSB7XG4gICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlIHx8IHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHJldHVybjtcbiAgICB2YXIgZWxlbWVudHMgPSB0aGlzLmVsZW1lbnRzLnNsaWNlKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgZWxlbWVudHNbaV0ucnVuQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5hcmVJbnZpc2libGVFbGVtZW50c1Nob3dpbmcpIHtcbiAgICAgIHRoaXMucnVuVmlzaWJsZUNvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIH1cbiAgICB0aGlzLnJ1bkVuYWJsZUNvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIHRoaXMucnVuUmVxdWlyZWRDb25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgfVxuICBwcml2YXRlIHJ1blZpc2libGVDb25kaXRpb24oXG4gICAgdmFsdWVzOiBIYXNoVGFibGU8YW55PixcbiAgICBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PlxuICApIHtcbiAgICBpZiAoIXRoaXMudmlzaWJsZUlmKSByZXR1cm47XG4gICAgdmFyIGNvbmRpdGlvblJ1bm5lciA9IG5ldyBDb25kaXRpb25SdW5uZXIodGhpcy52aXNpYmxlSWYpO1xuICAgIGNvbmRpdGlvblJ1bm5lci5vblJ1bkNvbXBsZXRlID0gKHJlczogYm9vbGVhbikgPT4ge1xuICAgICAgdGhpcy52aXNpYmxlID0gcmVzO1xuICAgIH07XG4gICAgY29uZGl0aW9uUnVubmVyLnJ1bih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICB9XG4gIHByaXZhdGUgcnVuRW5hYmxlQ29uZGl0aW9uKFxuICAgIHZhbHVlczogSGFzaFRhYmxlPGFueT4sXG4gICAgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT5cbiAgKSB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZUlmKSByZXR1cm47XG4gICAgdmFyIGNvbmRpdGlvblJ1bm5lciA9IG5ldyBDb25kaXRpb25SdW5uZXIodGhpcy5lbmFibGVJZik7XG4gICAgY29uZGl0aW9uUnVubmVyLm9uUnVuQ29tcGxldGUgPSAocmVzOiBib29sZWFuKSA9PiB7XG4gICAgICB0aGlzLnJlYWRPbmx5ID0gIXJlcztcbiAgICB9O1xuICAgIGNvbmRpdGlvblJ1bm5lci5ydW4odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgfVxuICBwcml2YXRlIHJ1blJlcXVpcmVkQ29uZGl0aW9uKFxuICAgIHZhbHVlczogSGFzaFRhYmxlPGFueT4sXG4gICAgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT5cbiAgKSB7XG4gICAgaWYgKCF0aGlzLnJlcXVpcmVkSWYpIHJldHVybjtcbiAgICB2YXIgY29uZGl0aW9uUnVubmVyID0gbmV3IENvbmRpdGlvblJ1bm5lcih0aGlzLnJlcXVpcmVkSWYpO1xuICAgIGNvbmRpdGlvblJ1bm5lci5vblJ1bkNvbXBsZXRlID0gKHJlczogYm9vbGVhbikgPT4ge1xuICAgICAgdGhpcy5pc1JlcXVpcmVkID0gcmVzO1xuICAgIH07XG4gICAgY29uZGl0aW9uUnVubmVyLnJ1bih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICB9XG4gIG9uQW55VmFsdWVDaGFuZ2VkKG5hbWU6IHN0cmluZykge1xuICAgIHZhciBlbHMgPSB0aGlzLmVsZW1lbnRzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBlbHNbaV0ub25BbnlWYWx1ZUNoYW5nZWQobmFtZSk7XG4gICAgfVxuICB9XG4gIGNoZWNrQmluZGluZ3ModmFsdWVOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICB2YXIgZWxzID0gdGhpcy5lbGVtZW50cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVscy5sZW5ndGg7IGkrKykge1xuICAgICAgKDxCYXNlPig8YW55PmVsc1tpXSkpLmNoZWNrQmluZGluZ3ModmFsdWVOYW1lLCB2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBkcmFnRHJvcEFkZFRhcmdldChkcmFnRHJvcEluZm86IERyYWdEcm9wSW5mbykge1xuICAgIHZhciBwcmV2Um93ID0gdGhpcy5kcmFnRHJvcEZpbmRSb3coZHJhZ0Ryb3BJbmZvLnRhcmdldCk7XG4gICAgaWYgKHRoaXMuZHJhZ0Ryb3BBZGRUYXJnZXRUb1JvdyhkcmFnRHJvcEluZm8sIHByZXZSb3cpKSB7XG4gICAgICB0aGlzLnVwZGF0ZVJvd3NSZW1vdmVFbGVtZW50RnJvbVJvdyhkcmFnRHJvcEluZm8udGFyZ2V0LCBwcmV2Um93KTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGRyYWdEcm9wRmluZFJvdyhmaW5kRWxlbWVudDogSVN1cnZleUVsZW1lbnQpOiBRdWVzdGlvblJvd01vZGVsIHtcbiAgICBpZiAoIWZpbmRFbGVtZW50IHx8IGZpbmRFbGVtZW50LmlzUGFnZSkgcmV0dXJuIG51bGw7XG4gICAgdmFyIGVsZW1lbnQgPSA8SUVsZW1lbnQ+ZmluZEVsZW1lbnQ7XG4gICAgdmFyIHJvd3MgPSB0aGlzLnJvd3M7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocm93c1tpXS5lbGVtZW50cy5pbmRleE9mKGVsZW1lbnQpID4gLTEpIHJldHVybiByb3dzW2ldO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwbmwgPSB0aGlzLmVsZW1lbnRzW2ldLmdldFBhbmVsKCk7XG4gICAgICBpZiAoIXBubCkgY29udGludWU7XG4gICAgICB2YXIgcm93ID0gKDxQYW5lbE1vZGVsQmFzZT5wbmwpLmRyYWdEcm9wRmluZFJvdyhlbGVtZW50KTtcbiAgICAgIGlmICghIXJvdykgcmV0dXJuIHJvdztcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBkcmFnRHJvcEFkZFRhcmdldFRvUm93KFxuICAgIGRyYWdEcm9wSW5mbzogRHJhZ0Ryb3BJbmZvLFxuICAgIHByZXZSb3c6IFF1ZXN0aW9uUm93TW9kZWxcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKCFkcmFnRHJvcEluZm8uZGVzdGluYXRpb24pIHJldHVybiB0cnVlO1xuICAgIGlmICh0aGlzLmRyYWdEcm9wQWRkVGFyZ2V0VG9FbXB0eVBhbmVsKGRyYWdEcm9wSW5mbykpIHJldHVybiB0cnVlO1xuICAgIHZhciBkZXN0ID0gZHJhZ0Ryb3BJbmZvLmRlc3RpbmF0aW9uO1xuICAgIHZhciBkZXN0Um93ID0gdGhpcy5kcmFnRHJvcEZpbmRSb3coZGVzdCk7XG4gICAgaWYgKCFkZXN0Um93KSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoIWRyYWdEcm9wSW5mby50YXJnZXQuc3RhcnRXaXRoTmV3TGluZSlcbiAgICAgIHJldHVybiB0aGlzLmRyYWdEcm9wQWRkVGFyZ2V0VG9FeGlzdGluZ1JvdyhcbiAgICAgICAgZHJhZ0Ryb3BJbmZvLFxuICAgICAgICBkZXN0Um93LFxuICAgICAgICBwcmV2Um93XG4gICAgICApO1xuICAgIHJldHVybiB0aGlzLmRyYWdEcm9wQWRkVGFyZ2V0VG9OZXdSb3coZHJhZ0Ryb3BJbmZvLCBkZXN0Um93LCBwcmV2Um93KTtcbiAgfVxuICBwcml2YXRlIGRyYWdEcm9wQWRkVGFyZ2V0VG9FbXB0eVBhbmVsKGRyYWdEcm9wSW5mbzogRHJhZ0Ryb3BJbmZvKTogYm9vbGVhbiB7XG4gICAgaWYgKGRyYWdEcm9wSW5mby5kZXN0aW5hdGlvbi5pc1BhZ2UpIHtcbiAgICAgIHRoaXMuZHJhZ0Ryb3BBZGRUYXJnZXRUb0VtcHR5UGFuZWxDb3JlKFxuICAgICAgICB0aGlzLnJvb3QsXG4gICAgICAgIGRyYWdEcm9wSW5mby50YXJnZXQsXG4gICAgICAgIGRyYWdEcm9wSW5mby5pc0JvdHRvbVxuICAgICAgKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB2YXIgZGVzdCA9IDxJRWxlbWVudD5kcmFnRHJvcEluZm8uZGVzdGluYXRpb247XG4gICAgaWYgKGRlc3QuaXNQYW5lbCAmJiAhZHJhZ0Ryb3BJbmZvLmlzRWRnZSkge1xuICAgICAgdmFyIHBhbmVsID0gPFBhbmVsTW9kZWxCYXNlPig8YW55PmRlc3QpO1xuICAgICAgaWYgKCg8YW55PmRyYWdEcm9wSW5mby50YXJnZXQpW1widGVtcGxhdGVcIl0gPT09IGRlc3QpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBkcmFnRHJvcEluZm8ubmVzdGVkUGFuZWxEZXB0aCA8IDAgfHxcbiAgICAgICAgZHJhZ0Ryb3BJbmZvLm5lc3RlZFBhbmVsRGVwdGggPj0gcGFuZWwuZGVwdGhcbiAgICAgICkge1xuICAgICAgICB0aGlzLmRyYWdEcm9wQWRkVGFyZ2V0VG9FbXB0eVBhbmVsQ29yZShcbiAgICAgICAgICA8UGFuZWxNb2RlbEJhc2U+KDxhbnk+ZGVzdCksXG4gICAgICAgICAgZHJhZ0Ryb3BJbmZvLnRhcmdldCxcbiAgICAgICAgICBkcmFnRHJvcEluZm8uaXNCb3R0b21cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwcml2YXRlIGRyYWdEcm9wQWRkVGFyZ2V0VG9FeGlzdGluZ1JvdyhcbiAgICBkcmFnRHJvcEluZm86IERyYWdEcm9wSW5mbyxcbiAgICBkZXN0Um93OiBRdWVzdGlvblJvd01vZGVsLFxuICAgIHByZXZSb3c6IFF1ZXN0aW9uUm93TW9kZWxcbiAgKTogYm9vbGVhbiB7XG4gICAgdmFyIGluZGV4ID0gZGVzdFJvdy5lbGVtZW50cy5pbmRleE9mKDxJRWxlbWVudD5kcmFnRHJvcEluZm8uZGVzdGluYXRpb24pO1xuICAgIGlmIChcbiAgICAgIGluZGV4ID09IDAgJiZcbiAgICAgICFkcmFnRHJvcEluZm8uaXNCb3R0b20gJiZcbiAgICAgIGRlc3RSb3cuZWxlbWVudHNbMF0uc3RhcnRXaXRoTmV3TGluZVxuICAgICkge1xuICAgICAgaWYgKGRlc3RSb3cuaW5kZXggPiAwKSB7XG4gICAgICAgIGRyYWdEcm9wSW5mby5pc0JvdHRvbSA9IHRydWU7XG4gICAgICAgIGRlc3RSb3cgPSBkZXN0Um93LnBhbmVsLnJvd3NbZGVzdFJvdy5pbmRleCAtIDFdO1xuICAgICAgICBkcmFnRHJvcEluZm8uZGVzdGluYXRpb24gPVxuICAgICAgICAgIGRlc3RSb3cuZWxlbWVudHNbZGVzdFJvdy5lbGVtZW50cy5sZW5ndGggLSAxXTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZHJhZ0Ryb3BBZGRUYXJnZXRUb0V4aXN0aW5nUm93KFxuICAgICAgICAgIGRyYWdEcm9wSW5mbyxcbiAgICAgICAgICBkZXN0Um93LFxuICAgICAgICAgIHByZXZSb3dcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRyYWdEcm9wQWRkVGFyZ2V0VG9OZXdSb3coZHJhZ0Ryb3BJbmZvLCBkZXN0Um93LCBwcmV2Um93KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIHByZXZSb3dJbmRleCA9IC0xO1xuICAgIGlmIChwcmV2Um93ID09IGRlc3RSb3cpIHtcbiAgICAgIHByZXZSb3dJbmRleCA9IGRlc3RSb3cuZWxlbWVudHMuaW5kZXhPZihkcmFnRHJvcEluZm8udGFyZ2V0KTtcbiAgICB9XG4gICAgaWYgKGRyYWdEcm9wSW5mby5pc0JvdHRvbSkgaW5kZXgrKztcbiAgICB2YXIgc3JjUm93ID0gdGhpcy5maW5kUm93QnlFbGVtZW50KGRyYWdEcm9wSW5mby5zb3VyY2UpO1xuICAgIGlmIChcbiAgICAgIHNyY1JvdyA9PSBkZXN0Um93ICYmXG4gICAgICBzcmNSb3cuZWxlbWVudHMuaW5kZXhPZihkcmFnRHJvcEluZm8uc291cmNlKSA9PSBpbmRleFxuICAgIClcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZiAoaW5kZXggPT0gcHJldlJvd0luZGV4KSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHByZXZSb3dJbmRleCA+IC0xKSB7XG4gICAgICBkZXN0Um93LmVsZW1lbnRzLnNwbGljZShwcmV2Um93SW5kZXgsIDEpO1xuICAgICAgaWYgKHByZXZSb3dJbmRleCA8IGluZGV4KSBpbmRleC0tO1xuICAgIH1cbiAgICBkZXN0Um93LmVsZW1lbnRzLnNwbGljZShpbmRleCwgMCwgZHJhZ0Ryb3BJbmZvLnRhcmdldCk7XG4gICAgZGVzdFJvdy51cGRhdGVWaXNpYmxlKCk7XG4gICAgcmV0dXJuIHByZXZSb3dJbmRleCA8IDA7XG4gIH1cbiAgcHJpdmF0ZSBkcmFnRHJvcEFkZFRhcmdldFRvTmV3Um93KFxuICAgIGRyYWdEcm9wSW5mbzogRHJhZ0Ryb3BJbmZvLFxuICAgIGRlc3RSb3c6IFF1ZXN0aW9uUm93TW9kZWwsXG4gICAgcHJldlJvdzogUXVlc3Rpb25Sb3dNb2RlbFxuICApOiBib29sZWFuIHtcbiAgICB2YXIgdGFyZ2V0Um93ID0gZGVzdFJvdy5wYW5lbC5jcmVhdGVSb3dBbmRTZXRMYXp5KGRlc3RSb3cucGFuZWwucm93cy5sZW5ndGgpO1xuICAgIHRhcmdldFJvdy5hZGRFbGVtZW50KGRyYWdEcm9wSW5mby50YXJnZXQpO1xuICAgIHZhciBpbmRleCA9IGRlc3RSb3cuaW5kZXg7XG4gICAgaWYgKGRyYWdEcm9wSW5mby5pc0JvdHRvbSkge1xuICAgICAgaW5kZXgrKztcbiAgICB9XG4gICAgLy9zYW1lIHJvd1xuICAgIGlmICghIXByZXZSb3cgJiYgcHJldlJvdy5wYW5lbCA9PSB0YXJnZXRSb3cucGFuZWwgJiYgcHJldlJvdy5pbmRleCA9PSBpbmRleClcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB2YXIgc3JjUm93ID0gdGhpcy5maW5kUm93QnlFbGVtZW50KGRyYWdEcm9wSW5mby5zb3VyY2UpO1xuICAgIGlmIChcbiAgICAgICEhc3JjUm93ICYmXG4gICAgICBzcmNSb3cucGFuZWwgPT0gdGFyZ2V0Um93LnBhbmVsICYmXG4gICAgICBzcmNSb3cuZWxlbWVudHMubGVuZ3RoID09IDEgJiZcbiAgICAgIHNyY1Jvdy5pbmRleCA9PSBpbmRleFxuICAgIClcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBkZXN0Um93LnBhbmVsLnJvd3Muc3BsaWNlKGluZGV4LCAwLCB0YXJnZXRSb3cpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByaXZhdGUgZHJhZ0Ryb3BBZGRUYXJnZXRUb0VtcHR5UGFuZWxDb3JlKFxuICAgIHBhbmVsOiBQYW5lbE1vZGVsQmFzZSxcbiAgICB0YXJnZXQ6IElFbGVtZW50LFxuICAgIGlzQm90dG9tOiBib29sZWFuXG4gICkge1xuICAgIHZhciB0YXJnZXRSb3cgPSBwYW5lbC5jcmVhdGVSb3coKTtcbiAgICB0YXJnZXRSb3cuYWRkRWxlbWVudCh0YXJnZXQpO1xuICAgIGlmIChwYW5lbC5lbGVtZW50cy5sZW5ndGggPT0gMCB8fCBpc0JvdHRvbSkge1xuICAgICAgcGFuZWwucm93cy5wdXNoKHRhcmdldFJvdyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhbmVsLnJvd3Muc3BsaWNlKDAsIDAsIHRhcmdldFJvdyk7XG4gICAgfVxuICB9XG4gIGRyYWdEcm9wTW92ZUVsZW1lbnQoc3JjOiBJRWxlbWVudCwgdGFyZ2V0OiBJRWxlbWVudCwgdGFyZ2V0SW5kZXg6IG51bWJlcikge1xuICAgIHZhciBzcmNJbmRleCA9ICg8UGFuZWxNb2RlbEJhc2U+c3JjLnBhcmVudCkuZWxlbWVudHMuaW5kZXhPZihzcmMpO1xuICAgIGlmICh0YXJnZXRJbmRleCA+IHNyY0luZGV4KSB7XG4gICAgICB0YXJnZXRJbmRleC0tO1xuICAgIH1cbiAgICB0aGlzLnJlbW92ZUVsZW1lbnQoc3JjKTtcbiAgICB0aGlzLmFkZEVsZW1lbnQodGFyZ2V0LCB0YXJnZXRJbmRleCk7XG4gIH1cbiAgcHVibGljIGRpc3Bvc2UoKSB7XG4gICAgc3VwZXIuZGlzcG9zZSgpO1xuICAgIGlmICh0aGlzLnJvd3MpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMucm93c1tpXS5kaXNwb3NlKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnJvd3Muc3BsaWNlKDAsIHRoaXMucm93cy5sZW5ndGgpO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuZWxlbWVudHNbaV0uZGlzcG9zZSgpO1xuICAgIH1cbiAgICB0aGlzLmVsZW1lbnRzLnNwbGljZSgwLCB0aGlzLmVsZW1lbnRzLmxlbmd0aCk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGNvbnRhaW5lciBlbGVtZW50LCBzaW1pbGFyIHRvIHRoZSBQYWdlIG9iamVjdHMuIEhvd2V2ZXIsIHVubGlrZSB0aGUgUGFnZSwgUGFuZWwgY2FuJ3QgYmUgYSByb290LlxuICogSXQgbWF5IGNvbnRhaW4gcXVlc3Rpb25zIGFuZCBvdGhlciBwYW5lbHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBQYW5lbE1vZGVsIGV4dGVuZHMgUGFuZWxNb2RlbEJhc2VcbiAgaW1wbGVtZW50cyBJRWxlbWVudCwgSVRpdGxlT3duZXIge1xuICBwdWJsaWMgbWluV2lkdGg/OiBzdHJpbmc7XG4gIHB1YmxpYyBtYXhXaWR0aD86IHN0cmluZztcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nID0gXCJcIikge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFwid2lkdGhcIiwgZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoISFzZWxmLnBhcmVudCkge1xuICAgICAgICBzZWxmLnBhcmVudC5lbGVtZW50V2lkdGhDaGFuZ2VkKHNlbGYpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydGllc1ZhbHVlQ2hhbmdlZChcbiAgICAgIFtcImluZGVudFwiLCBcImlubmVySW5kZW50XCIsIFwicmlnaHRJbmRlbnRcIl0sXG4gICAgICBmdW5jdGlvbigpIHtcbiAgICAgICAgc2VsZi5vbkluZGVudENoYW5nZWQoKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwicGFuZWxcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGNvbnRlbnRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkICsgXCJfY29udGVudFwiO1xuICB9XG4gIHB1YmxpYyBnZXRTdXJ2ZXkobGl2ZTogYm9vbGVhbiA9IGZhbHNlKTogSVN1cnZleSB7XG4gICAgaWYgKGxpdmUpIHtcbiAgICAgIHJldHVybiAhIXRoaXMucGFyZW50ID8gdGhpcy5wYXJlbnQuZ2V0U3VydmV5KGxpdmUpIDogbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLmdldFN1cnZleShsaXZlKTtcbiAgfVxuICBvblN1cnZleUxvYWQoKSB7XG4gICAgc3VwZXIub25TdXJ2ZXlMb2FkKCk7XG4gICAgdGhpcy5vbkluZGVudENoYW5nZWQoKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25TZXREYXRhKCkge1xuICAgIHN1cGVyLm9uU2V0RGF0YSgpO1xuICAgIHRoaXMub25JbmRlbnRDaGFuZ2VkKCk7XG4gIH1cbiAgcHVibGljIGdldCBpc1BhbmVsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8qKlxuICAgKiBHZXQvc2V0IHRoZSBwYWdlIHdoZXJlIHRoZSBwYW5lbCBpcyBsb2NhdGVkLlxuICAgKi9cbiAgcHVibGljIGdldCBwYWdlKCk6IElQYWdlIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQYWdlKHRoaXMucGFyZW50KTtcbiAgfVxuICBwdWJsaWMgc2V0IHBhZ2UodmFsOiBJUGFnZSkge1xuICAgIHRoaXMuc2V0UGFnZSh0aGlzLnBhcmVudCwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZGVsZXRlKCkge1xuICAgIGlmICghIXRoaXMucGFyZW50KSB7XG4gICAgICB0aGlzLnJlbW92ZVNlbGZGcm9tTGlzdCh0aGlzLnBhcmVudC5lbGVtZW50cyk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBNb3ZlIHBhbmVsIHRvIGEgbmV3IGNvbnRhaW5lciBQYWdlL1BhbmVsLiBBZGQgYXMgYSBsYXN0IGVsZW1lbnQgaWYgaW5zZXJ0QmVmb3JlIHBhcmFtZXRlciBpcyBub3QgdXNlZCBvciBpbnNlcnRlZCBpbnRvIHRoZSBnaXZlbiBpbmRleCxcbiAgICogaWYgaW5zZXJ0IHBhcmFtZXRlciBpcyBudW1iZXIsIG9yIGJlZm9yZSB0aGUgZ2l2ZW4gZWxlbWVudCwgaWYgdGhlIGluc2VydEJlZm9yZSBwYXJhbWV0ZXIgaXMgYSBxdWVzdGlvbiBvciBwYW5lbFxuICAgKiBAcGFyYW0gY29udGFpbmVyIFBhZ2Ugb3IgUGFuZWwgdG8gd2hlcmUgYSBxdWVzdGlvbiBpcyByZWxvY2F0ZWQuXG4gICAqIEBwYXJhbSBpbnNlcnRCZWZvcmUgVXNlIGl0IGlmIHlvdSB3YW50IHRvIHNldCB0aGUgcGFuZWwgdG8gYSBzcGVjaWZpYyBwb3NpdGlvbi4gWW91IG1heSB1c2UgYSBudW1iZXIgKHVzZSAwIHRvIGluc2VydCBpbnQgdGhlIGJlZ2lubmluZykgb3IgZWxlbWVudCwgaWYgeW91IHdhbnQgdG8gaW5zZXJ0IGJlZm9yZSB0aGlzIGVsZW1lbnQuXG4gICAqL1xuICBwdWJsaWMgbW92ZVRvKGNvbnRhaW5lcjogSVBhbmVsLCBpbnNlcnRCZWZvcmU6IGFueSA9IG51bGwpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tb3ZlVG9CYXNlKHRoaXMucGFyZW50LCBjb250YWluZXIsIGluc2VydEJlZm9yZSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHZpc2libGUgaW5kZXggb2YgdGhlIHBhbmVsIGluIHRoZSBzdXJ2ZXkuIENvbW1vbmx5IGl0IGlzIC0xIGFuZCBpdCBkb2Vzbid0IHNob3cuXG4gICAqIFlvdSBoYXZlIHRvIHNldCBzaG93TnVtYmVyIHRvIHRydWUgdG8gc2hvdyBpbmRleC9udW1iZXJpbmcgZm9yIHRoZSBQYW5lbFxuICAgKiBAc2VlIHNob3dOdW1iZXJcbiAgICovXG4gIHB1YmxpYyBnZXQgdmlzaWJsZUluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVJbmRleFwiLCAtMSk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCBzaG93TnVtYmVyIHRvIHRydWUgdG8gc3RhcnQgc2hvd2luZyB0aGUgbnVtYmVyIGZvciB0aGlzIHBhbmVsLlxuICAgKiBAc2VlIHZpc2libGVJbmRleFxuICAgKi9cbiAgcHVibGljIGdldCBzaG93TnVtYmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93TnVtYmVyXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNob3dOdW1iZXIodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2hvd051bWJlclwiLCB2YWwpO1xuICAgIHRoaXMubm90aWZ5U3VydmV5T25WaXNpYmlsaXR5Q2hhbmdlZCgpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSB2YWx1ZSB0aGF0IHNwZWNpZmllcyBob3cgdGhlIGVsZW1lbnRzIG51bWJlcnMgaW5zaWRlIHBhbmVsIGFyZSBkaXNwbGF5ZWQuXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlOlxuICAgKlxuICAgKiAtIGBkZWZhdWx0YCAtIGRpc3BsYXkgcXVlc3Rpb25zIG51bWJlcnMgYXMgZGVmaW5lZCBpbiBwYXJlbnQgcGFuZWwgb3Igc3VydmV5XG4gICAqIC0gYG9ucGFuZWxgIC0gZGlzcGxheSBxdWVzdGlvbnMgbnVtYmVycywgc3RhcnQgbnVtYmVyaW5nIGZyb20gYmVnaW5uaW5nIG9mIHRoaXMgcGFnZVxuICAgKiAtIGBvZmZgIC0gdHVybiBvZmYgdGhlIG51bWJlcmluZyBmb3IgcXVlc3Rpb25zIHRpdGxlc1xuICAgKiBAc2VlIHNob3dOdW1iZXJcbiAgICovXG4gIHB1YmxpYyBnZXQgc2hvd1F1ZXN0aW9uTnVtYmVycygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93UXVlc3Rpb25OdW1iZXJzXCIsIFwiZGVmYXVsdFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNob3dRdWVzdGlvbk51bWJlcnModmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dRdWVzdGlvbk51bWJlcnNcIiwgdmFsdWUpO1xuICAgIHRoaXMubm90aWZ5U3VydmV5T25WaXNpYmlsaXR5Q2hhbmdlZCgpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGhlIGZpcnN0IHF1ZXN0aW9uIGluZGV4IGZvciBlbGVtZW50cyBpbnNpZGUgdGhlIHBhbmVsLiBUaGUgZmlyc3QgcXVlc3Rpb24gaW5kZXggaXMgJzEuJyBieSBkZWZhdWx0IGFuZCBpdCBpcyB0YWtlbiBmcm9tIHN1cnZleS5xdWVzdGlvblN0YXJ0SW5kZXggcHJvcGVydHkuXG4gICAqIFlvdSBtYXkgc3RhcnQgaXQgZnJvbSAnMTAwJyBvciBmcm9tICdBJywgYnkgc2V0dGluZyAnMTAwJyBvciAnQScgdG8gdGhpcyBwcm9wZXJ0eS5cbiAgICogWW91IGNhbiBzZXQgdGhlIHN0YXJ0IGluZGV4IHRvIFwiKDEpXCIgb3IgXCIjIEEpXCIgb3IgXCJhKVwiIHRvIHJlbmRlciBxdWVzdGlvbiBudW1iZXIgYXMgKDEpLCAjIEEpIGFuZCBhKSBhY2NvcmRpbmdseS5cbiAgICogQHNlZSBzdXJ2ZXkucXVlc3Rpb25TdGFydEluZGV4XG4gICAqL1xuICBwdWJsaWMgZ2V0IHF1ZXN0aW9uU3RhcnRJbmRleCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvblN0YXJ0SW5kZXhcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBxdWVzdGlvblN0YXJ0SW5kZXgodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvblN0YXJ0SW5kZXhcIiwgdmFsKTtcbiAgfVxuICBnZXRRdWVzdGlvblN0YXJ0SW5kZXgoKTogc3RyaW5nIHtcbiAgICBpZiAoISF0aGlzLnF1ZXN0aW9uU3RhcnRJbmRleCkgcmV0dXJuIHRoaXMucXVlc3Rpb25TdGFydEluZGV4O1xuICAgIHJldHVybiBzdXBlci5nZXRRdWVzdGlvblN0YXJ0SW5kZXgoKTtcbiAgfVxuICAvKipcbiAgICogVGhlIHByb3BlcnR5IHJldHVybnMgdGhlIHF1ZXN0aW9uIG51bWJlci4gSWYgcXVlc3Rpb24gaXMgaW52aXNpYmxlIHRoZW4gaXQgcmV0dXJucyBlbXB0eSBzdHJpbmcuXG4gICAqIElmIHZpc2libGVJbmRleCBpcyAxLCB0aGVuIG5vIGlzIDIsIG9yICdCJyBpZiBzdXJ2ZXkucXVlc3Rpb25TdGFydEluZGV4IGlzICdBJy5cbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5xdWVzdGlvblN0YXJ0SW5kZXhcbiAgICovXG4gIHB1YmxpYyBnZXQgbm8oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibm9cIiwgXCJcIik7XG4gIH1cbiAgcHJvdGVjdGVkIHNldE5vKHZpc2libGVJbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFxuICAgICAgXCJub1wiLFxuICAgICAgSGVscGVycy5nZXROdW1iZXJCeUluZGV4KHRoaXMudmlzaWJsZUluZGV4LCB0aGlzLmdldFN0YXJ0SW5kZXgoKSlcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBiZWZvcmVTZXRWaXNpYmxlSW5kZXgoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgbGV0IHZpc2libGVJbmRleCA9IC0xO1xuICAgIGlmICh0aGlzLnNob3dOdW1iZXIgJiYgKHRoaXMuaXNEZXNpZ25Nb2RlIHx8ICF0aGlzLmxvY1RpdGxlLmlzRW1wdHkpKSB7XG4gICAgICB2aXNpYmxlSW5kZXggPSBpbmRleDtcbiAgICB9XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJsZUluZGV4XCIsIHZpc2libGVJbmRleCk7XG4gICAgdGhpcy5zZXRObyh2aXNpYmxlSW5kZXgpO1xuICAgIHJldHVybiB2aXNpYmxlSW5kZXggPCAwID8gMCA6IDE7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFBhbmVsU3RhcnRJbmRleChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5zaG93UXVlc3Rpb25OdW1iZXJzID09IFwib2ZmXCIpIHJldHVybiAtMTtcbiAgICBpZiAodGhpcy5zaG93UXVlc3Rpb25OdW1iZXJzID09IFwib25wYW5lbFwiKSByZXR1cm4gMDtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cbiAgcHJvdGVjdGVkIGlzQ29udGludWVOdW1iZXJpbmcoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuc2hvd1F1ZXN0aW9uTnVtYmVycyAhPSBcIm9mZlwiICYmIHRoaXMuc2hvd1F1ZXN0aW9uTnVtYmVycyAhPSBcIm9ucGFuZWxcIlxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBub3RpZnlTdXJ2ZXlPblZpc2liaWxpdHlDaGFuZ2VkKCkge1xuICAgIGlmICh0aGlzLnN1cnZleSAhPSBudWxsICYmICF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSB7XG4gICAgICB0aGlzLnN1cnZleS5wYW5lbFZpc2liaWxpdHlDaGFuZ2VkKHRoaXMsIHRoaXMuaXNWaXNpYmxlKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGhhc0Vycm9yc0NvcmUocmVjOiBhbnkpIHtcbiAgICBzdXBlci5oYXNFcnJvcnNDb3JlKHJlYyk7XG4gICAgaWYgKHRoaXMuaXNDb2xsYXBzZWQgJiYgcmVjLnJlc3VsdCAmJiByZWMuZmlyZUNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmV4cGFuZCgpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UmVuZGVyZWRUaXRsZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFzdHIpIHtcbiAgICAgIGlmICh0aGlzLmlzQ29sbGFwc2VkIHx8IHRoaXMuaXNFeHBhbmRlZCkgcmV0dXJuIHRoaXMubmFtZTtcbiAgICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSkgcmV0dXJuIFwiW1wiICsgdGhpcy5uYW1lICsgXCJdXCI7XG4gICAgfVxuICAgIHJldHVybiBzdXBlci5nZXRSZW5kZXJlZFRpdGxlKHN0cik7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBQYW5lbCB3aWR0aC5cbiAgICovXG4gIHB1YmxpYyBnZXQgd2lkdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwid2lkdGhcIik7XG4gIH1cbiAgcHVibGljIHNldCB3aWR0aCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIndpZHRoXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBsZWZ0IGluZGVudC4gU2V0IHRoaXMgcHJvcGVydHkgdG8gaW5jcmVhc2UgdGhlIHBhbmVsIGxlZnQgaW5kZW50LlxuICAgKi9cbiAgcHVibGljIGdldCBpbmRlbnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaW5kZW50XCIsIDApO1xuICB9XG4gIHB1YmxpYyBzZXQgaW5kZW50KHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaW5kZW50XCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBpbm5lciBpbmRlbnQuIFNldCB0aGlzIHByb3BlcnR5IHRvIGluY3JlYXNlIHRoZSBwYW5lbCBjb250ZW50IG1hcmdpbi5cbiAgICovXG4gIHB1YmxpYyBnZXQgaW5uZXJJbmRlbnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaW5uZXJJbmRlbnRcIiwgMCk7XG4gIH1cbiAgcHVibGljIHNldCBpbm5lckluZGVudCh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlubmVySW5kZW50XCIsIHZhbCk7XG4gIH1cbiAgZ2V0IHJlbmRlcldpZHRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJlbmRlcldpZHRoXCIpO1xuICB9XG4gIHNldCByZW5kZXJXaWR0aCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJlbmRlcldpZHRoXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBQYW5lbCByZW5kZXJzIG9uIHRoZSBuZXcgbGluZSBpZiB0aGUgcHJvcGVydHkgaXMgdHJ1ZS4gSWYgdGhlIHByb3BlcnR5IGlzIGZhbHNlLCB0aGUgcGFuZWwgdHJpZXMgdG8gcmVuZGVyIG9uIHRoZSBzYW1lIGxpbmUvcm93IHdpdGggYSBwcmV2aW91cyBxdWVzdGlvbi9wYW5lbC5cbiAgICovXG4gIHB1YmxpYyBnZXQgc3RhcnRXaXRoTmV3TGluZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic3RhcnRXaXRoTmV3TGluZVwiLCB0cnVlKTtcbiAgfVxuICBwdWJsaWMgc2V0IHN0YXJ0V2l0aE5ld0xpbmUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzdGFydFdpdGhOZXdMaW5lXCIsIHZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogVGhlIHJpZ2h0IGluZGVudCBvZiB0aGUgUGFuZWwuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJpZ2h0SW5kZW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJpZ2h0SW5kZW50XCIsIDApO1xuICB9XG4gIHB1YmxpYyBzZXQgcmlnaHRJbmRlbnQodmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyaWdodEluZGVudFwiLCB2YWwpO1xuICB9XG4gIGdldCBwYWRkaW5nTGVmdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJwYWRkaW5nTGVmdFwiLCBcIlwiKTtcbiAgfVxuICBzZXQgcGFkZGluZ0xlZnQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJwYWRkaW5nTGVmdFwiLCB2YWwpO1xuICB9XG4gIGdldCBpbm5lclBhZGRpbmdMZWZ0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlubmVyUGFkZGluZ0xlZnRcIiwgXCJcIik7XG4gIH1cbiAgc2V0IGlubmVyUGFkZGluZ0xlZnQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpbm5lclBhZGRpbmdMZWZ0XCIsIHZhbCk7XG4gIH1cbiAgZ2V0IHBhZGRpbmdSaWdodCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJwYWRkaW5nUmlnaHRcIiwgXCJcIik7XG4gIH1cbiAgc2V0IHBhZGRpbmdSaWdodCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInBhZGRpbmdSaWdodFwiLCB2YWwpO1xuICB9XG4gIHByaXZhdGUgb25JbmRlbnRDaGFuZ2VkKCkge1xuICAgIGlmICghdGhpcy5nZXRTdXJ2ZXkoKSkgcmV0dXJuO1xuICAgIHRoaXMuaW5uZXJQYWRkaW5nTGVmdCA9IHRoaXMuZ2V0SW5kZW50U2l6ZSh0aGlzLmlubmVySW5kZW50KTtcbiAgICB0aGlzLnBhZGRpbmdMZWZ0ID0gdGhpcy5nZXRJbmRlbnRTaXplKHRoaXMuaW5kZW50KTtcbiAgICB0aGlzLnBhZGRpbmdSaWdodCA9IHRoaXMuZ2V0SW5kZW50U2l6ZSh0aGlzLnJpZ2h0SW5kZW50KTtcbiAgfVxuICBwcml2YXRlIGdldEluZGVudFNpemUoaW5kZW50OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmIChpbmRlbnQgPCAxKSByZXR1cm4gXCJcIjtcbiAgICB2YXIgY3NzID0gKDxhbnk+dGhpcykuc3VydmV5W1wiY3NzXCJdO1xuICAgIGlmICghY3NzKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gaW5kZW50ICogY3NzLnF1ZXN0aW9uLmluZGVudCArIFwicHhcIjtcbiAgfVxuICBwdWJsaWMgY2xlYXJPbkRlbGV0aW5nQ29udGFpbmVyKCkge1xuICAgIHRoaXMuZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBRdWVzdGlvbiB8fCBlbGVtZW50IGluc3RhbmNlb2YgUGFuZWxNb2RlbCkge1xuICAgICAgICBlbGVtZW50LmNsZWFyT25EZWxldGluZ0NvbnRhaW5lcigpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzRWRpdEJ1dHRvbigpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5zdXJ2ZXkgJiYgdGhpcy5zdXJ2ZXkuc3RhdGUgPT0gXCJwcmV2aWV3XCIpIHJldHVybiB0aGlzLmRlcHRoID09IDE7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBjYW5jZWxQcmV2aWV3KCkge1xuICAgIGlmICghdGhpcy5oYXNFZGl0QnV0dG9uKSByZXR1cm47XG4gICAgdGhpcy5zdXJ2ZXkuY2FuY2VsUHJldmlld0J5UGFnZSh0aGlzKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNzc1RpdGxlKCk6IHN0cmluZyB7XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMuY3NzQ2xhc3Nlcy5wYW5lbC50aXRsZTtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gXCJkZWZhdWx0XCIpIHtcbiAgICAgIHJlc3VsdCArPSBcIiBcIiArIHRoaXMuY3NzQ2xhc3Nlcy5wYW5lbC50aXRsZUV4cGFuZGFibGU7XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbnRhaW5zRXJyb3JzKSB7XG4gICAgICByZXN1bHQgKz0gXCIgXCIgKyB0aGlzLmNzc0NsYXNzZXMucGFuZWwudGl0bGVPbkVycm9yO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHB1YmxpYyBnZXQgY3NzRXJyb3IoKTogc3RyaW5nIHtcbiAgICB2YXIgcm9vdENsYXNzID0gdGhpcy5jc3NDbGFzc2VzLmVycm9yLnJvb3Q7XG4gICAgcmV0dXJuIHJvb3RDbGFzcyA/IHJvb3RDbGFzcyA6IFwicGFuZWwtZXJyb3Itcm9vdFwiO1xuICB9XG4gIHByb3RlY3RlZCBvblZpc2libGVDaGFuZ2VkKCkge1xuICAgIHN1cGVyLm9uVmlzaWJsZUNoYW5nZWQoKTtcbiAgICB0aGlzLm5vdGlmeVN1cnZleU9uVmlzaWJpbGl0eUNoYW5nZWQoKTtcbiAgfVxufVxuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcInBhbmVsYmFzZVwiLFxuICBbXG4gICAgXCJuYW1lXCIsXG4gICAge1xuICAgICAgbmFtZTogXCJlbGVtZW50c1wiLFxuICAgICAgYWx0ZXJuYXRpdmVOYW1lOiBcInF1ZXN0aW9uc1wiLFxuICAgICAgYmFzZUNsYXNzTmFtZTogXCJxdWVzdGlvblwiLFxuICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICBpc0xpZ2h0U2VyaWFsaXphYmxlOiBmYWxzZSxcbiAgICB9LFxuICAgIHsgbmFtZTogXCJ2aXNpYmxlOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIFwidmlzaWJsZUlmOmNvbmRpdGlvblwiLFxuICAgIFwiZW5hYmxlSWY6Y29uZGl0aW9uXCIsXG4gICAgXCJyZXF1aXJlZElmOmNvbmRpdGlvblwiLFxuICAgIFwicmVhZE9ubHk6Ym9vbGVhblwiLFxuICAgIHtcbiAgICAgIG5hbWU6IFwicXVlc3Rpb25UaXRsZUxvY2F0aW9uXCIsXG4gICAgICBkZWZhdWx0OiBcImRlZmF1bHRcIixcbiAgICAgIGNob2ljZXM6IFtcImRlZmF1bHRcIiwgXCJ0b3BcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCIsIFwiaGlkZGVuXCJdLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcInRpdGxlOnRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1RpdGxlXCIgfSxcbiAgICB7IG5hbWU6IFwiZGVzY3JpcHRpb246dGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jRGVzY3JpcHRpb25cIiB9LFxuICBdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFBhbmVsTW9kZWxCYXNlKCk7XG4gIH1cbik7XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwicGFuZWxcIixcbiAgW1xuICAgIHtcbiAgICAgIG5hbWU6IFwic3RhdGVcIixcbiAgICAgIGRlZmF1bHQ6IFwiZGVmYXVsdFwiLFxuICAgICAgY2hvaWNlczogW1wiZGVmYXVsdFwiLCBcImNvbGxhcHNlZFwiLCBcImV4cGFuZGVkXCJdLFxuICAgIH0sXG4gICAgXCJpc1JlcXVpcmVkOmJvb2xlYW5cIixcbiAgICB7XG4gICAgICBuYW1lOiBcInJlcXVpcmVkRXJyb3JUZXh0OnRleHRcIixcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NSZXF1aXJlZEVycm9yVGV4dFwiLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcInN0YXJ0V2l0aE5ld0xpbmU6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgXCJ3aWR0aFwiLFxuICAgIHsgbmFtZTogXCJpbm5lckluZGVudDpudW1iZXJcIiwgZGVmYXVsdDogMCwgY2hvaWNlczogWzAsIDEsIDIsIDNdIH0sXG4gICAgeyBuYW1lOiBcImluZGVudDpudW1iZXJcIiwgZGVmYXVsdDogMCwgY2hvaWNlczogWzAsIDEsIDIsIDNdIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJwYWdlXCIsXG4gICAgICBpc1NlcmlhbGl6YWJsZTogZmFsc2UsXG4gICAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uKG9iajogYW55KSB7XG4gICAgICAgIHZhciBzdXJ2ZXkgPSBvYmogPyBvYmouc3VydmV5IDogbnVsbDtcbiAgICAgICAgcmV0dXJuICFzdXJ2ZXkgfHwgc3VydmV5LnBhZ2VzLmxlbmd0aCA+IDE7XG4gICAgICB9LFxuICAgICAgY2hvaWNlczogZnVuY3Rpb24ob2JqOiBhbnkpIHtcbiAgICAgICAgdmFyIHN1cnZleSA9IG9iaiA/IG9iai5zdXJ2ZXkgOiBudWxsO1xuICAgICAgICByZXR1cm4gc3VydmV5XG4gICAgICAgICAgPyBzdXJ2ZXkucGFnZXMubWFwKChwOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHAubmFtZSwgdGV4dDogcC50aXRsZSB9O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IFtdO1xuICAgICAgfSxcbiAgICB9LFxuICAgIFwic2hvd051bWJlcjpib29sZWFuXCIsXG4gICAge1xuICAgICAgbmFtZTogXCJzaG93UXVlc3Rpb25OdW1iZXJzXCIsXG4gICAgICBkZWZhdWx0OiBcImRlZmF1bHRcIixcbiAgICAgIGNob2ljZXM6IFtcImRlZmF1bHRcIiwgXCJvbnBhbmVsXCIsIFwib2ZmXCJdLFxuICAgIH0sXG4gICAgXCJxdWVzdGlvblN0YXJ0SW5kZXhcIixcbiAgXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBQYW5lbE1vZGVsKCk7XG4gIH0sXG4gIFwicGFuZWxiYXNlXCJcbik7XG5cbkVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInBhbmVsXCIsIChuYW1lKSA9PiB7XG4gIHJldHVybiBuZXcgUGFuZWxNb2RlbChuYW1lKTtcbn0pO1xuIiwiaW1wb3J0IHsgQmFzZSwgRXZlbnRCYXNlIH0gZnJvbSBcIi4vYmFzZVwiO1xyXG5pbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xyXG5pbXBvcnQge1xyXG4gIFBvcHVwVXRpbHMsXHJcbiAgVmVydGljYWxQb3NpdGlvbixcclxuICBIb3Jpem9udGFsUG9zaXRpb24sXHJcbiAgSVBvc2l0aW9uLFxyXG4gIElTaXplLFxyXG59IGZyb20gXCIuL3V0aWxzL3BvcHVwXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUG9wdXBNb2RlbCBleHRlbmRzIEJhc2Uge1xyXG4gIEBwcm9wZXJ0eSgpIGNvbnRlbnRDb21wb25lbnROYW1lOiBzdHJpbmc7XHJcbiAgQHByb3BlcnR5KCkgY29udGVudENvbXBvbmVudERhdGE6IGFueTtcclxuICBAcHJvcGVydHkoeyBkZWZhdWx0VmFsdWU6IFwiYm90dG9tXCIgfSkgdmVydGljYWxQb3NpdGlvbjogVmVydGljYWxQb3NpdGlvbjtcclxuICBAcHJvcGVydHkoeyBkZWZhdWx0VmFsdWU6IFwibGVmdFwiIH0pIGhvcml6b250YWxQb3NpdGlvbjogSG9yaXpvbnRhbFBvc2l0aW9uO1xyXG4gIEBwcm9wZXJ0eSh7IGRlZmF1bHRWYWx1ZTogZmFsc2UgfSkgc2hvd1BvaW50ZXI6IGJvb2xlYW47XHJcbiAgQHByb3BlcnR5KHsgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KSBpc01vZGFsOiBib29sZWFuO1xyXG4gIEBwcm9wZXJ0eSh7IGRlZmF1bHRWYWx1ZTogKCkgPT4ge30gfSkgb25DYW5jZWw6ICgpID0+IHZvaWQ7XHJcbiAgQHByb3BlcnR5KHsgZGVmYXVsdFZhbHVlOiAoKSA9PiB7cmV0dXJuIHRydWU7fSB9KSBvbkFwcGx5OiAoKSA9PiBib29sZWFuO1xyXG4gIEBwcm9wZXJ0eSh7IGRlZmF1bHRWYWx1ZTogKCkgPT4ge30gfSkgb25IaWRlOiAoKSA9PiB2b2lkO1xyXG4gIEBwcm9wZXJ0eSh7IGRlZmF1bHRWYWx1ZTogKCkgPT4ge30gfSkgb25TaG93OiAoKSA9PiB2b2lkO1xyXG4gIEBwcm9wZXJ0eSh7IGRlZmF1bHRWYWx1ZTogXCJcIiB9KSBjc3NDbGFzczogc3RyaW5nO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgY29udGVudENvbXBvbmVudE5hbWU6IHN0cmluZyxcclxuICAgIGNvbnRlbnRDb21wb25lbnREYXRhOiBhbnksXHJcbiAgICB2ZXJ0aWNhbFBvc2l0aW9uOiBWZXJ0aWNhbFBvc2l0aW9uID0gXCJib3R0b21cIixcclxuICAgIGhvcml6b250YWxQb3NpdGlvbjogSG9yaXpvbnRhbFBvc2l0aW9uID0gXCJsZWZ0XCIsXHJcbiAgICBzaG93UG9pbnRlcjogYm9vbGVhbiA9IHRydWUsXHJcbiAgICBpc01vZGFsOiBib29sZWFuID0gZmFsc2UsXHJcbiAgICBvbkNhbmNlbCA9ICgpID0+IHt9LFxyXG4gICAgb25BcHBseSA9ICgpID0+IHtyZXR1cm4gdHJ1ZTt9LFxyXG4gICAgb25IaWRlID0gKCkgPT4ge30sXHJcbiAgICBvblNob3cgPSAoKSA9PiB7fSxcclxuICAgIGNzc0NsYXNzOiBzdHJpbmcgPSBcIlwiXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5jb250ZW50Q29tcG9uZW50TmFtZSA9IGNvbnRlbnRDb21wb25lbnROYW1lO1xyXG4gICAgdGhpcy5jb250ZW50Q29tcG9uZW50RGF0YSA9IGNvbnRlbnRDb21wb25lbnREYXRhO1xyXG4gICAgdGhpcy52ZXJ0aWNhbFBvc2l0aW9uID0gdmVydGljYWxQb3NpdGlvbjtcclxuICAgIHRoaXMuaG9yaXpvbnRhbFBvc2l0aW9uID0gaG9yaXpvbnRhbFBvc2l0aW9uO1xyXG4gICAgdGhpcy5zaG93UG9pbnRlciA9IHNob3dQb2ludGVyO1xyXG4gICAgdGhpcy5pc01vZGFsID0gaXNNb2RhbDtcclxuICAgIHRoaXMub25DYW5jZWwgPSBvbkNhbmNlbDtcclxuICAgIHRoaXMub25BcHBseSA9IG9uQXBwbHk7XHJcbiAgICB0aGlzLm9uSGlkZSA9IG9uSGlkZTtcclxuICAgIHRoaXMub25TaG93ID0gb25TaG93O1xyXG4gICAgdGhpcy5jc3NDbGFzcyA9IGNzc0NsYXNzO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGlzVmlzaWJsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc1Zpc2libGVcIiwgZmFsc2UpO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IGlzVmlzaWJsZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuaXNWaXNpYmxlID09PSB2YWx1ZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc1Zpc2libGVcIiwgdmFsdWUpO1xyXG4gICAgdGhpcy5vblZpc2liaWxpdHlDaGFuZ2VkICYmIHRoaXMub25WaXNpYmlsaXR5Q2hhbmdlZCh2YWx1ZSk7XHJcbiAgICBpZiAodGhpcy5pc1Zpc2libGUpIHtcclxuICAgICAgdGhpcy5vblNob3coKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMub25IaWRlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHB1YmxpYyB0b2dnbGVWaXNpYmlsaXR5KCkge1xyXG4gICAgdGhpcy5pc1Zpc2libGUgPSAhdGhpcy5pc1Zpc2libGU7XHJcbiAgfVxyXG4gIHB1YmxpYyBvblZpc2liaWxpdHlDaGFuZ2VkOiAoaXNWaXNpYmxlOiBib29sZWFuKSA9PiB2b2lkO1xyXG59XHJcblxyXG5jb25zdCBGT0NVU19JTlBVVF9TRUxFQ1RPUiA9XHJcbiAgXCJpbnB1dDpub3QoOmRpc2FibGVkKTpub3QoW3JlYWRvbmx5XSk6bm90KFt0eXBlPWhpZGRlbl0pLHNlbGVjdDpub3QoOmRpc2FibGVkKTpub3QoW3JlYWRvbmx5XSksdGV4dGFyZWE6bm90KDpkaXNhYmxlZCk6bm90KFtyZWFkb25seV0pLCBidXR0b246bm90KDpkaXNhYmxlZCk6bm90KFtyZWFkb25seV0pXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUG9wdXBCYXNlVmlld01vZGVsIGV4dGVuZHMgQmFzZSB7XHJcbiAgQHByb3BlcnR5KHsgZGVmYXVsdFZhbHVlOiBcIjBweFwiIH0pIHRvcDogc3RyaW5nO1xyXG4gIEBwcm9wZXJ0eSh7IGRlZmF1bHRWYWx1ZTogXCIwcHhcIiB9KSBsZWZ0OiBzdHJpbmc7XHJcbiAgQHByb3BlcnR5KHsgZGVmYXVsdFZhbHVlOiBcImF1dG9cIiB9KSBoZWlnaHQ6IHN0cmluZztcclxuICBAcHJvcGVydHkoeyBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pIGlzVmlzaWJsZTogYm9vbGVhbjtcclxuICBAcHJvcGVydHkoeyBkZWZhdWx0VmFsdWU6IFwibGVmdFwiIH0pIHBvcHVwRGlyZWN0aW9uOiBzdHJpbmc7XHJcbiAgQHByb3BlcnR5KHsgZGVmYXVsdFZhbHVlOiB7IGxlZnQ6IFwiMHB4XCIsIHRvcDogXCIwcHhcIiB9IH0pXHJcbiAgcG9pbnRlclRhcmdldDogSVBvc2l0aW9uO1xyXG4gIHB1YmxpYyBjb250YWluZXI6IEhUTUxFbGVtZW50O1xyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBtb2RlbDogUG9wdXBNb2RlbCwgcHVibGljIHRhcmdldEVsZW1lbnQ/OiBIVE1MRWxlbWVudCkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMubW9kZWwucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJpc1Zpc2libGVcIiwgKCkgPT4ge1xyXG4gICAgICB0aGlzLmlzVmlzaWJsZSA9IHRoaXMubW9kZWwuaXNWaXNpYmxlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgY29udGVudENvbXBvbmVudE5hbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLm1vZGVsLmNvbnRlbnRDb21wb25lbnROYW1lO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGNvbnRlbnRDb21wb25lbnREYXRhKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5tb2RlbC5jb250ZW50Q29tcG9uZW50RGF0YTtcclxuICB9XHJcbiAgcHVibGljIGdldCBzaG93UG9pbnRlcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLm1vZGVsLnNob3dQb2ludGVyO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGlzTW9kYWwoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5tb2RlbC5pc01vZGFsO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IHN0eWxlQ2xhc3MoKTogc3RyaW5nIHtcclxuICAgIGxldCBjc3MgPSB0aGlzLm1vZGVsLmNzc0NsYXNzO1xyXG4gICAgaWYgKHRoaXMuaXNNb2RhbCkge1xyXG4gICAgICBjc3MgKz0gXCIgc3YtcG9wdXAtLW1vZGFsXCI7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2hvd1BvaW50ZXIpIHtcclxuICAgICAgY3NzICs9IFwiIHN2LXBvcHVwLS1zaG93LXBvaW50ZXJcIjtcclxuICAgICAgY3NzICs9IGAgc3YtcG9wdXAtLSR7dGhpcy5wb3B1cERpcmVjdGlvbn1gO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjc3M7XHJcbiAgfVxyXG4gIHB1YmxpYyBvbktleURvd24oZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gXCJUYWJcIiB8fCBldmVudC5rZXlDb2RlID09PSA5KSB7XHJcbiAgICAgIHRoaXMudHJhcEZvY3VzKGV2ZW50KTtcclxuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSBcIkVzY2FwZVwiIHx8IGV2ZW50LmtleUNvZGUgPT09IDI3KSB7XHJcbiAgICAgIGlmICh0aGlzLmlzTW9kYWwpIHtcclxuICAgICAgICB0aGlzLm1vZGVsLm9uQ2FuY2VsKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tb2RlbC5pc1Zpc2libGUgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcbiAgcHJpdmF0ZSB0cmFwRm9jdXMoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgZm9jdXNhYmxlRWxlbWVudHMgPSB0aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxyXG4gICAgICBGT0NVU19JTlBVVF9TRUxFQ1RPUlxyXG4gICAgKTtcclxuICAgIGNvbnN0IGZpcnN0Rm9jdXNhYmxlRWxlbWVudCA9IGZvY3VzYWJsZUVsZW1lbnRzWzBdO1xyXG4gICAgY29uc3QgbGFzdEZvY3VzYWJsZUVsZW1lbnQgPVxyXG4gICAgICBmb2N1c2FibGVFbGVtZW50c1tmb2N1c2FibGVFbGVtZW50cy5sZW5ndGggLSAxXTtcclxuICAgIGlmIChldmVudC5zaGlmdEtleSkge1xyXG4gICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZmlyc3RGb2N1c2FibGVFbGVtZW50KSB7XHJcbiAgICAgICAgKDxIVE1MRWxlbWVudD5sYXN0Rm9jdXNhYmxlRWxlbWVudCkuZm9jdXMoKTtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gbGFzdEZvY3VzYWJsZUVsZW1lbnQpIHtcclxuICAgICAgICAoPEhUTUxFbGVtZW50PmZpcnN0Rm9jdXNhYmxlRWxlbWVudCkuZm9jdXMoKTtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHB1YmxpYyB1cGRhdGVPblNob3dpbmcoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNNb2RhbCkge1xyXG4gICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmZvY3VzRmlyc3RJbnB1dCgpO1xyXG4gIH1cclxuICBwcml2YXRlIHVwZGF0ZVBvc2l0aW9uKCkge1xyXG4gICAgY29uc3QgcmVjdCA9IHRoaXMudGFyZ2V0RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIGNvbnN0IGJhY2tncm91bmQgPSA8SFRNTEVsZW1lbnQ+dGhpcy5jb250YWluZXIuY2hpbGRyZW5bMF07XHJcbiAgICBjb25zdCBwb3B1cENvbnRhaW5lciA9IDxIVE1MRWxlbWVudD5iYWNrZ3JvdW5kLmNoaWxkcmVuWzBdO1xyXG4gICAgY29uc3Qgc2Nyb2xsQ29udGVudCA9IDxIVE1MRWxlbWVudD5iYWNrZ3JvdW5kLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzFdO1xyXG4gICAgY29uc3QgaGVpZ2h0ID1cclxuICAgICAgcG9wdXBDb250YWluZXIub2Zmc2V0SGVpZ2h0IC1cclxuICAgICAgc2Nyb2xsQ29udGVudC5vZmZzZXRIZWlnaHQgK1xyXG4gICAgICBzY3JvbGxDb250ZW50LnNjcm9sbEhlaWdodDtcclxuICAgIGNvbnN0IHdpZHRoID0gcG9wdXBDb250YWluZXIub2Zmc2V0V2lkdGg7XHJcbiAgICB0aGlzLmhlaWdodCA9IFwiYXV0b1wiO1xyXG4gICAgbGV0IHZlcnRpY2FsUG9zaXRpb24gPSB0aGlzLm1vZGVsLnZlcnRpY2FsUG9zaXRpb247XHJcbiAgICBpZiAoISF3aW5kb3cpIHtcclxuICAgICAgdmVydGljYWxQb3NpdGlvbiA9IFBvcHVwVXRpbHMudXBkYXRlVmVydGljYWxQb3NpdGlvbihcclxuICAgICAgICByZWN0LFxyXG4gICAgICAgIGhlaWdodCxcclxuICAgICAgICB0aGlzLm1vZGVsLnZlcnRpY2FsUG9zaXRpb24sXHJcbiAgICAgICAgdGhpcy5tb2RlbC5zaG93UG9pbnRlcixcclxuICAgICAgICB3aW5kb3cuaW5uZXJIZWlnaHRcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHRoaXMucG9wdXBEaXJlY3Rpb24gPSBQb3B1cFV0aWxzLmNhbGN1bGF0ZVBvcHVwRGlyZWN0aW9uKFxyXG4gICAgICB2ZXJ0aWNhbFBvc2l0aW9uLFxyXG4gICAgICB0aGlzLm1vZGVsLmhvcml6b250YWxQb3NpdGlvblxyXG4gICAgKTtcclxuICAgIGNvbnN0IHBvcyA9IFBvcHVwVXRpbHMuY2FsY3VsYXRlUG9zaXRpb24oXHJcbiAgICAgIHJlY3QsXHJcbiAgICAgIGhlaWdodCxcclxuICAgICAgd2lkdGgsXHJcbiAgICAgIHZlcnRpY2FsUG9zaXRpb24sXHJcbiAgICAgIHRoaXMubW9kZWwuaG9yaXpvbnRhbFBvc2l0aW9uLFxyXG4gICAgICB0aGlzLnNob3dQb2ludGVyXHJcbiAgICApO1xyXG5cclxuICAgIGlmICghIXdpbmRvdykge1xyXG4gICAgICBjb25zdCBuZXdWZXJ0aWNhbERpbWVuc2lvbnMgPSBQb3B1cFV0aWxzLnVwZGF0ZVZlcnRpY2FsRGltZW5zaW9ucyhcclxuICAgICAgICBwb3MudG9wLFxyXG4gICAgICAgIGhlaWdodCxcclxuICAgICAgICB3aW5kb3cuaW5uZXJIZWlnaHRcclxuICAgICAgKTtcclxuICAgICAgaWYgKCEhbmV3VmVydGljYWxEaW1lbnNpb25zKSB7XHJcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBuZXdWZXJ0aWNhbERpbWVuc2lvbnMuaGVpZ2h0ICsgXCJweFwiO1xyXG4gICAgICAgIHBvcy50b3AgPSBuZXdWZXJ0aWNhbERpbWVuc2lvbnMudG9wO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmxlZnQgPSBwb3MubGVmdCArIFwicHhcIjtcclxuICAgIHRoaXMudG9wID0gcG9zLnRvcCArIFwicHhcIjtcclxuXHJcbiAgICBpZiAodGhpcy5zaG93UG9pbnRlcikge1xyXG4gICAgICB0aGlzLnBvaW50ZXJUYXJnZXQgPSBQb3B1cFV0aWxzLmNhbGN1bGF0ZVBvaW50ZXJUYXJnZXQoXHJcbiAgICAgICAgcmVjdCxcclxuICAgICAgICBwb3MudG9wLFxyXG4gICAgICAgIHBvcy5sZWZ0LFxyXG4gICAgICAgIHZlcnRpY2FsUG9zaXRpb24sXHJcbiAgICAgICAgdGhpcy5tb2RlbC5ob3Jpem9udGFsUG9zaXRpb25cclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHRoaXMucG9pbnRlclRhcmdldC50b3AgKz0gXCJweFwiO1xyXG4gICAgdGhpcy5wb2ludGVyVGFyZ2V0LmxlZnQgKz0gXCJweFwiO1xyXG4gIH1cclxuICBwcml2YXRlIGZvY3VzRmlyc3RJbnB1dCgpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB2YXIgZWwgPSB0aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKEZPQ1VTX0lOUFVUX1NFTEVDVE9SKTtcclxuICAgICAgaWYgKCEhZWwpICg8SFRNTEVsZW1lbnQ+ZWwpLmZvY3VzKCk7XHJcbiAgICAgIGVsc2UgKDxIVE1MRWxlbWVudD50aGlzLmNvbnRhaW5lci5jaGlsZHJlblswXSkuZm9jdXMoKTtcclxuICAgIH0sIDEwMCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBjbGlja091dHNpZGUoKSB7XHJcbiAgICBpZiAodGhpcy5pc01vZGFsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMubW9kZWwuaXNWaXNpYmxlID0gZmFsc2U7XHJcbiAgfVxyXG4gIHB1YmxpYyBjYW5jZWwoKSB7XHJcbiAgICB0aGlzLm1vZGVsLm9uQ2FuY2VsKCk7XHJcbiAgICB0aGlzLm1vZGVsLmlzVmlzaWJsZSA9IGZhbHNlO1xyXG4gIH1cclxuICBwdWJsaWMgYXBwbHkoKSB7XHJcbiAgICBpZiAoISF0aGlzLm1vZGVsLm9uQXBwbHkgJiYgIXRoaXMubW9kZWwub25BcHBseSgpKSByZXR1cm47XHJcbiAgICB0aGlzLm1vZGVsLmlzVmlzaWJsZSA9IGZhbHNlO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGNhbmNlbEJ1dHRvblRleHQoKSB7XHJcbiAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm1vZGFsQ2FuY2VsQnV0dG9uVGV4dFwiKTtcclxuICB9XHJcbiAgcHVibGljIGdldCBhcHBseUJ1dHRvblRleHQoKSB7XHJcbiAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm1vZGFsQXBwbHlCdXR0b25UZXh0XCIpO1xyXG4gIH1cclxuICBwdWJsaWMgZGlzcG9zZSgpIHtcclxuICAgIHN1cGVyLmRpc3Bvc2UoKTtcclxuICAgIHRoaXMubW9kZWwub25WaXNpYmlsaXR5Q2hhbmdlZCA9IHVuZGVmaW5lZDtcclxuICB9XHJcbiAgcHVibGljIGNyZWF0ZVBvcHVwQ29udGFpbmVyKCkge1xyXG4gICAgY29uc3QgY29udGFpbmVyOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICB0aGlzLmNvbnRhaW5lciA9IGNvbnRhaW5lcjtcclxuICB9XHJcbiAgcHVibGljIG1vdW50UG9wdXBDb250YWluZXIoKSB7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuY29udGFpbmVyKTtcclxuICB9XHJcbiAgcHVibGljIGluaXRpYWxpemVQb3B1cENvbnRhaW5lcigpIHtcclxuICAgIHRoaXMuY3JlYXRlUG9wdXBDb250YWluZXIoKTtcclxuICAgIHRoaXMubW91bnRQb3B1cENvbnRhaW5lcigpO1xyXG4gIH1cclxuICBwdWJsaWMgZGVzdHJveVBvcHVwQ29udGFpbmVyKCkge1xyXG4gICAgdGhpcy5jb250YWluZXIucmVtb3ZlKCk7XHJcbiAgICB0aGlzLmNvbnRhaW5lciA9IHVuZGVmaW5lZDtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgSGFzaFRhYmxlLCBIZWxwZXJzIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuaW1wb3J0IHsgSnNvbk9iamVjdCwgU2VyaWFsaXplciwgcHJvcGVydHkgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBCYXNlLCBFdmVudEJhc2UgfSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQge1xuICBJRWxlbWVudCxcbiAgSVF1ZXN0aW9uLFxuICBJUGFuZWwsXG4gIElDb25kaXRpb25SdW5uZXIsXG4gIElTdXJ2ZXlJbXBsLFxuICBJUGFnZSxcbiAgSVRpdGxlT3duZXIsXG4gIElQcm9ncmVzc0luZm8sXG4gIElTdXJ2ZXksXG59IGZyb20gXCIuL2Jhc2UtaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudCB9IGZyb20gXCIuL3N1cnZleS1lbGVtZW50XCI7XG5pbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XG5pbXBvcnQgeyBBbnN3ZXJSZXF1aXJlZEVycm9yLCBDdXN0b21FcnJvciB9IGZyb20gXCIuL2Vycm9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlWYWxpZGF0b3IsIElWYWxpZGF0b3JPd25lciwgVmFsaWRhdG9yUnVubmVyIH0gZnJvbSBcIi4vdmFsaWRhdG9yXCI7XG5pbXBvcnQgeyBUZXh0UHJlUHJvY2Vzc29yLCBUZXh0UHJlUHJvY2Vzc29yVmFsdWUgfSBmcm9tIFwiLi90ZXh0UHJlUHJvY2Vzc29yXCI7XG5pbXBvcnQgeyBJTG9jYWxpemFibGVPd25lciwgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuaW1wb3J0IHsgQ29uZGl0aW9uUnVubmVyLCBFeHByZXNzaW9uUnVubmVyIH0gZnJvbSBcIi4vY29uZGl0aW9uc1wiO1xuaW1wb3J0IHsgUXVlc3Rpb25DdXN0b21XaWRnZXQgfSBmcm9tIFwiLi9xdWVzdGlvbkN1c3RvbVdpZGdldHNcIjtcbmltcG9ydCB7IEN1c3RvbVdpZGdldENvbGxlY3Rpb24gfSBmcm9tIFwiLi9xdWVzdGlvbkN1c3RvbVdpZGdldHNcIjtcbmltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcIi4vc3VydmV5XCI7XG5pbXBvcnQgeyBQYW5lbE1vZGVsIH0gZnJvbSBcIi4vcGFuZWxcIjtcbmltcG9ydCB7IFJlbmRlcmVyRmFjdG9yeSB9IGZyb20gXCIuL3JlbmRlcmVyRmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5RXJyb3IgfSBmcm9tIFwiLi9zdXJ2ZXktZXJyb3JcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJQ29uZGl0aW9uT2JqZWN0IHtcbiAgbmFtZTogc3RyaW5nO1xuICB0ZXh0OiBzdHJpbmc7XG4gIHF1ZXN0aW9uOiBRdWVzdGlvbjtcbn1cblxuLyoqXG4gKiBBIGJhc2UgY2xhc3MgZm9yIGFsbCBxdWVzdGlvbnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbiBleHRlbmRzIFN1cnZleUVsZW1lbnRcbiAgaW1wbGVtZW50c1xuICAgIElRdWVzdGlvbixcbiAgICBJQ29uZGl0aW9uUnVubmVyLFxuICAgIElMb2NhbGl6YWJsZU93bmVyLFxuICAgIElWYWxpZGF0b3JPd25lcixcbiAgICBJVGl0bGVPd25lciB7XG4gIFtpbmRleDogc3RyaW5nXTogYW55O1xuICBwcml2YXRlIHN0YXRpYyBUZXh0UHJlcHJvY2Vzc29yVmFsdWVzTWFwID0ge1xuICAgIHRpdGxlOiBcInByb2Nlc3NlZFRpdGxlXCIsXG4gICAgcmVxdWlyZTogXCJyZXF1aXJlZFRleHRcIixcbiAgfTtcbiAgcHJpdmF0ZSBzdGF0aWMgcXVlc3Rpb25Db3VudGVyID0gMTAwO1xuICBwcml2YXRlIHN0YXRpYyBnZXRRdWVzdGlvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwic3FfXCIgKyBRdWVzdGlvbi5xdWVzdGlvbkNvdW50ZXIrKztcbiAgfVxuICBwcml2YXRlIGNvbmRpdGlvblJ1bm5lcjogQ29uZGl0aW9uUnVubmVyID0gbnVsbDtcbiAgcHJpdmF0ZSBpc0N1c3RvbVdpZGdldFJlcXVlc3RlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBjdXN0b21XaWRnZXRWYWx1ZTogUXVlc3Rpb25DdXN0b21XaWRnZXQ7XG4gIGN1c3RvbVdpZGdldERhdGEgPSB7IGlzTmVlZFJlbmRlcjogdHJ1ZSB9O1xuICBmb2N1c0NhbGxiYWNrOiAoKSA9PiB2b2lkO1xuICBzdXJ2ZXlMb2FkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XG4gIGRpc3BsYXlWYWx1ZUNhbGxiYWNrOiAodGV4dDogc3RyaW5nKSA9PiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSB0ZXh0UHJlUHJvY2Vzc29yOiBUZXh0UHJlUHJvY2Vzc29yO1xuICBwcml2YXRlIGNvbmRpdGlvbkVuYWJlbFJ1bm5lcjogQ29uZGl0aW9uUnVubmVyO1xuICBwcml2YXRlIGNvbmRpdGlvblJlcXVpcmVkUnVubmVyOiBDb25kaXRpb25SdW5uZXI7XG4gIHZhbHVlQ2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xuICBjb21tZW50Q2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xuICB2YWxpZGF0ZVZhbHVlQ2FsbGJhY2s6ICgpID0+IFN1cnZleUVycm9yO1xuICBxdWVzdGlvblRpdGxlVGVtcGxhdGVDYWxsYmFjazogKCkgPT4gc3RyaW5nO1xuICBhZnRlclJlbmRlclF1ZXN0aW9uQ2FsbGJhY2s6IChxdWVzdGlvbjogUXVlc3Rpb24sIGVsZW1lbnQ6IGFueSkgPT4gYW55O1xuICB2YWx1ZUZyb21EYXRhQ2FsbGJhY2s6ICh2YWw6IGFueSkgPT4gYW55O1xuICB2YWx1ZVRvRGF0YUNhbGxiYWNrOiAodmFsOiBhbnkpID0+IGFueTtcbiAgb25HZXRTdXJ2ZXk6ICgpID0+IElTdXJ2ZXk7XG4gIHByaXZhdGUgbG9jUHJvY2Vzc2VkVGl0bGU6IExvY2FsaXphYmxlU3RyaW5nO1xuICBwcm90ZWN0ZWQgaXNSZWFkeVZhbHVlOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIHdoZW4gaXNSZWFkeSBwcm9wZXJ0eSBvZiBxdWVzdGlvbiBpcyBjaGFuZ2VkLlxuICAgKiA8YnIvPiBvcHRpb25zLnF1ZXN0aW9uIC0gdGhlIHF1ZXN0aW9uXG4gICAqIDxici8+IG9wdGlvbnMuaXNSZWFkeSAtIGN1cnJlbnQgdmFsdWUgb2YgaXNSZWFkeVxuICAgKiA8YnIvPiBvcHRpb25zLm9sZElzUmVhZHkgLSBvbGQgdmFsdWUgb2YgaXNSZWFkeVxuICAgKi9cbiAgcHVibGljIG9uUmVhZHlDaGFuZ2VkOiBFdmVudEJhc2U8UXVlc3Rpb24+ID0gdGhpcy5hZGRFdmVudDxRdWVzdGlvbj4oKTtcblxuICBwdWJsaWMgaXNSZWFkT25seVJlbmRlckRpdigpIHtcbiAgICByZXR1cm4gdGhpcy5pc1JlYWRPbmx5ICYmIHNldHRpbmdzLnJlYWRPbmx5Q29tbWVudFJlbmRlck1vZGUgPT09IFwiZGl2XCI7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgICB0aGlzLmlkID0gUXVlc3Rpb24uZ2V0UXVlc3Rpb25JZCgpO1xuICAgIHRoaXMub25DcmVhdGluZygpO1xuICAgIHRoaXMuY3JlYXRlTmV3QXJyYXkoXCJ2YWxpZGF0b3JzXCIsICh2YWxpZGF0b3I6IGFueSkgPT4ge1xuICAgICAgdmFsaWRhdG9yLmVycm9yT3duZXIgPSB0aGlzO1xuICAgIH0pO1xuICAgIHZhciBsb2NUaXRsZVZhbHVlID0gdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInRpdGxlXCIsIHRoaXMsIHRydWUpO1xuICAgIGxvY1RpdGxlVmFsdWUub25HZXRUZXh0Q2FsbGJhY2sgPSAodGV4dDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICAgIGlmICghdGV4dCkge1xuICAgICAgICB0ZXh0ID0gdGhpcy5uYW1lO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLnN1cnZleSkgcmV0dXJuIHRleHQ7XG4gICAgICByZXR1cm4gdGhpcy5zdXJ2ZXkuZ2V0VXBkYXRlZFF1ZXN0aW9uVGl0bGUodGhpcywgdGV4dCk7XG4gICAgfTtcbiAgICB0aGlzLmxvY1Byb2Nlc3NlZFRpdGxlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMsIHRydWUpO1xuICAgIHRoaXMubG9jUHJvY2Vzc2VkVGl0bGUuc2hhcmVkRGF0YSA9IGxvY1RpdGxlVmFsdWU7XG4gICAgdmFyIGxvY0NvbW1lbnRUZXh0ID0gdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcbiAgICAgIFwiY29tbWVudFRleHRcIixcbiAgICAgIHRoaXMsXG4gICAgICB0cnVlXG4gICAgKTtcbiAgICBsb2NDb21tZW50VGV4dC5vbkdldFRleHRDYWxsYmFjayA9ICh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgICAgcmV0dXJuICEhdGV4dCA/IHRleHQgOiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwib3RoZXJJdGVtVGV4dFwiKTtcbiAgICB9O1xuXG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInJlcXVpcmVkRXJyb3JUZXh0XCIsIHRoaXMpO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJ3aWR0aFwiLCAoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVF1ZXN0aW9uQ3NzKCk7XG4gICAgICBpZiAoISF0aGlzLnBhcmVudCkge1xuICAgICAgICB0aGlzLnBhcmVudC5lbGVtZW50V2lkdGhDaGFuZ2VkKHRoaXMpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJpc1JlcXVpcmVkXCIsICgpID0+IHtcbiAgICAgIHRoaXMubG9jVGl0bGUub25DaGFuZ2VkKCk7XG4gICAgICB0aGlzLmNzc0NsYXNzZXNWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnRpZXNWYWx1ZUNoYW5nZWQoXG4gICAgICBbXCJpbmRlbnRcIiwgXCJyaWdodEluZGVudFwiXSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5vbkluZGVudENoYW5nZWQoKTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0aWVzVmFsdWVDaGFuZ2VkKFxuICAgICAgW1wiaGFzQ29tbWVudFwiLCBcImhhc090aGVyXCJdLFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLmluaXRDb21tZW50RnJvbVN1cnZleSgpO1xuICAgICAgfVxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldFN1cnZleShsaXZlOiBib29sZWFuID0gZmFsc2UpOiBJU3VydmV5IHtcbiAgICBpZiAobGl2ZSkge1xuICAgICAgcmV0dXJuICEhdGhpcy5wYXJlbnQgPyAoPEJhc2U+KDxhbnk+dGhpcy5wYXJlbnQpKS5nZXRTdXJ2ZXkobGl2ZSkgOiBudWxsO1xuICAgIH1cbiAgICBpZiAoISF0aGlzLm9uR2V0U3VydmV5KSByZXR1cm4gdGhpcy5vbkdldFN1cnZleSgpO1xuICAgIHJldHVybiBzdXBlci5nZXRTdXJ2ZXkoKTtcbiAgfVxuICBwdWJsaWMgZ2V0VmFsdWVOYW1lKCk6IHN0cmluZyB7XG4gICAgaWYgKCEhdGhpcy52YWx1ZU5hbWUpIHJldHVybiB0aGlzLnZhbHVlTmFtZS50b1N0cmluZygpO1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IGlmIHlvdSB3YW50IHRvIHN0b3JlIHRoZSBxdWVzdGlvbiByZXN1bHQgaW4gdGhlIG5hbWUgZGlmZmVyZW50IGZyb20gdGhlIHF1ZXN0aW9uIG5hbWUuXG4gICAqIFF1ZXN0aW9uIG5hbWUgc2hvdWxkIGJlIHVuaXF1ZSBpbiB0aGUgc3VydmV5IGFuZCB2YWx1ZU5hbWUgY291bGQgYmUgbm90IHVuaXF1ZS4gSXQgYWxsb3dzIHRvIHNoYXJlIGRhdGEgYmV0d2VlbiBzZXZlcmFsIHF1ZXN0aW9ucyB3aXRoIHRoZSBzYW1lIHZhbHVlTmFtZS5cbiAgICogVGhlIGxpYnJhcnkgc2V0IHRoZSB2YWx1ZSBhdXRvbWF0aWNhbGx5IGlmIHRoZSBxdWVzdGlvbi5uYW1lIHByb3BlcnR5IGlzIG5vdCB2YWxpZC4gRm9yIGV4YW1wbGUsIGlmIGl0IGNvbnRhaW5zIHRoZSBwZXJpb2QgJy4nIHN5bWJvbC5cbiAgICogSW4gdGhpcyBjYXNlIGlmIHlvdSBzZXQgdGhlIHF1ZXN0aW9uLm5hbWUgcHJvcGVydHkgdG8gJ3gueScgdGhlbiB0aGUgdmFsdWVOYW1lIGJlY29tZXMgJ3ggeScuXG4gICAqIFBsZWFzZSBub3RlLCB0aGlzIHByb3BlcnR5IGlzIGhpZGRlbiBmb3IgcXVlc3Rpb25zIHdpdGhvdXQgaW5wdXQsIGZvciBleGFtcGxlIGh0bWwgcXVlc3Rpb24uXG4gICAqIEBzZWUgbmFtZVxuICAgKi9cbiAgcHVibGljIGdldCB2YWx1ZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidmFsdWVOYW1lXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdmFsdWVOYW1lKHZhbDogc3RyaW5nKSB7XG4gICAgdmFyIG9sZFZhbHVlTmFtZSA9IHRoaXMuZ2V0VmFsdWVOYW1lKCk7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidmFsdWVOYW1lXCIsIHZhbCk7XG4gICAgdGhpcy5vblZhbHVlTmFtZUNoYW5nZWQob2xkVmFsdWVOYW1lKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25WYWx1ZU5hbWVDaGFuZ2VkKG9sZFZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuc3VydmV5KSByZXR1cm47XG4gICAgdGhpcy5zdXJ2ZXkucXVlc3Rpb25SZW5hbWVkKFxuICAgICAgdGhpcyxcbiAgICAgIHRoaXMubmFtZSxcbiAgICAgICEhb2xkVmFsdWUgPyBvbGRWYWx1ZSA6IHRoaXMubmFtZVxuICAgICk7XG4gICAgdGhpcy5pbml0RGF0YUZyb21TdXJ2ZXkoKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25OYW1lQ2hhbmdlZChvbGRWYWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5sb2NUaXRsZS5vbkNoYW5nZWQoKTtcbiAgICBpZiAoIXRoaXMuc3VydmV5KSByZXR1cm47XG4gICAgdGhpcy5zdXJ2ZXkucXVlc3Rpb25SZW5hbWVkKFxuICAgICAgdGhpcyxcbiAgICAgIG9sZFZhbHVlLFxuICAgICAgdGhpcy52YWx1ZU5hbWUgPyB0aGlzLnZhbHVlTmFtZSA6IG9sZFZhbHVlXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzUmVhZHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNSZWFkeVZhbHVlO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgaXMgcXVlc3Rpb24gcmVhZHkgdG8gdXNlXG4gICAqL1xuICBwdWJsaWMgY2hvaWNlc0xvYWRlZCgpOiB2b2lkIHt9XG4gIC8qKlxuICAgKiBHZXQvc2V0IHRoZSBwYWdlIHdoZXJlIHRoZSBxdWVzdGlvbiBpcyBsb2NhdGVkLlxuICAgKi9cbiAgcHVibGljIGdldCBwYWdlKCk6IElQYWdlIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQYWdlKHRoaXMucGFyZW50KTtcbiAgfVxuICBwdWJsaWMgc2V0IHBhZ2UodmFsOiBJUGFnZSkge1xuICAgIHRoaXMuc2V0UGFnZSh0aGlzLnBhcmVudCwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0UGFuZWwoKTogSVBhbmVsIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwdWJsaWMgZGVsZXRlKCkge1xuICAgIGlmICghIXRoaXMucGFyZW50KSB7XG4gICAgICB0aGlzLnJlbW92ZVNlbGZGcm9tTGlzdCh0aGlzLnBhcmVudC5lbGVtZW50cyk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgaXNGbG93TGF5b3V0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldExheW91dFR5cGUoKSA9PT0gXCJmbG93XCI7XG4gIH1cbiAgcHVibGljIGdldExheW91dFR5cGUoKTogc3RyaW5nIHtcbiAgICBpZiAoISF0aGlzLnBhcmVudCkgcmV0dXJuIHRoaXMucGFyZW50LmdldENoaWxkcmVuTGF5b3V0VHlwZSgpO1xuICAgIHJldHVybiBcInJvd1wiO1xuICB9XG4gIGlzTGF5b3V0VHlwZVN1cHBvcnRlZChsYXlvdXRUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbGF5b3V0VHlwZSAhPT0gXCJmbG93XCI7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSBpdCB0byBnZXQvc2V0IHRoZSBxdWVzdGlvbiB2aXNpYmlsaXR5LlxuICAgKiBAc2VlIHZpc2libGVJZlxuICAgKi9cbiAgcHVibGljIGdldCB2aXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmxlXCIsIHRydWUpO1xuICB9XG4gIHB1YmxpYyBzZXQgdmlzaWJsZSh2YWw6IGJvb2xlYW4pIHtcbiAgICBpZiAodmFsID09IHRoaXMudmlzaWJsZSkgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVcIiwgdmFsKTtcbiAgICB0aGlzLm9uVmlzaWJsZUNoYW5nZWQoKTtcbiAgICB0aGlzLm5vdGlmeVN1cnZleVZpc2liaWxpdHlDaGFuZ2VkKCk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uVmlzaWJsZUNoYW5nZWQoKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNWaXNpYmxlXCIsIHRoaXMuaXNWaXNpYmxlKTtcbiAgICBpZiAodGhpcy5pc1Zpc2libGUgJiYgdGhpcy5zdXJ2ZXkgJiYgdGhpcy5zdXJ2ZXkuaXNDbGVhclZhbHVlT25IaWRkZW4pIHtcbiAgICAgIHRoaXMudXBkYXRlVmFsdWVXaXRoRGVmYXVsdHMoKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzVmlzaWJsZSAmJiB0aGlzLmVycm9ycyAmJiB0aGlzLmVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmVycm9ycyA9IFtdO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogVXNlIGl0IHRvIGNob29zZSBob3cgb3RoZXIgcXVlc3Rpb24gdmFsdWVzIHdpbGwgYmUgcmVuZGVyZWQgaW4gdGl0bGUgaWYgcmVmZXJlbmNlZCBpbiB7fS5cbiAgICogUGxlYXNlIG5vdGUsIHRoaXMgcHJvcGVydHkgaXMgaGlkZGVuIGZvciBxdWVzdGlvbiB3aXRob3V0IGlucHV0LCBmb3IgZXhhbXBsZSBodG1sIHF1ZXN0aW9uLlxuICAgKi9cbiAgcHVibGljIGdldCB1c2VEaXNwbGF5VmFsdWVzSW5UaXRsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidXNlRGlzcGxheVZhbHVlc0luVGl0bGVcIiwgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIHNldCB1c2VEaXNwbGF5VmFsdWVzSW5UaXRsZSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ1c2VEaXNwbGF5VmFsdWVzSW5UaXRsZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBBbiBleHByZXNzaW9uIHRoYXQgcmV0dXJucyB0cnVlIG9yIGZhbHNlLiBJZiBpdCByZXR1cm5zIHRydWUgdGhlIFF1ZXN0aW9uIGJlY29tZXMgdmlzaWJsZSBhbmQgaWYgaXQgcmV0dXJucyBmYWxzZSB0aGUgUXVlc3Rpb24gYmVjb21lcyBpbnZpc2libGUuIFRoZSBsaWJyYXJ5IHJ1bnMgdGhlIGV4cHJlc3Npb24gb24gc3VydmV5IHN0YXJ0IGFuZCBvbiBjaGFuZ2luZyBhIHF1ZXN0aW9uIHZhbHVlLiBJZiB0aGUgcHJvcGVydHkgaXMgZW1wdHkgdGhlbiB2aXNpYmxlIHByb3BlcnR5IGlzIHVzZWQuXG4gICAqIEBzZWUgdmlzaWJsZVxuICAgKi9cbiAgcHVibGljIGdldCB2aXNpYmxlSWYoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJsZUlmXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdmlzaWJsZUlmKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJsZUlmXCIsIHZhbCk7XG4gICAgdGhpcy5ydW5Db25kaXRpb25zKCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcXVlc3Rpb24gaXMgdmlzaWJsZSBvciBzdXJ2ZXkgaXMgaW4gZGVzaWduIG1vZGUgcmlnaHQgbm93LlxuICAgKi9cbiAgcHVibGljIGdldCBpc1Zpc2libGUoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuc3VydmV5ICYmIHRoaXMuc3VydmV5LmFyZUVtcHR5RWxlbWVudHNIaWRkZW4gJiYgdGhpcy5pc0VtcHR5KCkpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZSB8fCB0aGlzLmFyZUludmlzaWJsZUVsZW1lbnRzU2hvd2luZztcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdmlzaWJsZSBpbmRleCBvZiB0aGUgcXVlc3Rpb24gaW4gdGhlIHN1cnZleS4gSXQgY2FuIGJlIGZyb20gMCB0byBhbGwgdmlzaWJsZSBxdWVzdGlvbnMgY291bnQgLSAxXG4gICAqIFRoZSB2aXNpYmxlSW5kZXggaXMgLTEgaWYgdGhlIHRpdGxlIGlzICdoaWRkZW4nIG9yIGhpZGVOdW1iZXIgaXMgdHJ1ZVxuICAgKiBAc2VlIHRpdGxlTG9jYXRpb25cbiAgICogQHNlZSBoaWRlTnVtYmVyXG4gICAqL1xuICBwdWJsaWMgZ2V0IHZpc2libGVJbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmxlSW5kZXhcIiwgLTEpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgaGlkZU51bWJlciB0byB0cnVlIHRvIHN0b3Agc2hvd2luZyB0aGUgbnVtYmVyIGZvciB0aGlzIHF1ZXN0aW9uLiBUaGUgcXVlc3Rpb24gd2lsbCBub3QgYmUgY291bnRlclxuICAgKiBAc2VlIHZpc2libGVJbmRleFxuICAgKiBAc2VlIHRpdGxlTG9jYXRpb25cbiAgICovXG4gIHB1YmxpYyBnZXQgaGlkZU51bWJlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaGlkZU51bWJlclwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGhpZGVOdW1iZXIodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaGlkZU51bWJlclwiLCB2YWwpO1xuICAgIHRoaXMubm90aWZ5U3VydmV5VmlzaWJpbGl0eUNoYW5nZWQoKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBxdWVzdGlvbiBtYXkgaGF2ZSBhIHRpdGxlIGxvY2F0ZWQgb24gdGhlIGxlZnRcbiAgICovXG4gIHB1YmxpYyBnZXQgaXNBbGxvd1RpdGxlTGVmdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0IGFzIGEgc3RyaW5nIGFzIGl0IHJlcHJlc2VudHMgaW4gdGhlIGpzb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInF1ZXN0aW9uXCI7XG4gIH1cbiAgcHVibGljIGdldCBpc1F1ZXN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8qKlxuICAgKiBNb3ZlIHF1ZXN0aW9uIHRvIGEgbmV3IGNvbnRhaW5lciBQYWdlL1BhbmVsLiBBZGQgYXMgYSBsYXN0IGVsZW1lbnQgaWYgaW5zZXJ0QmVmb3JlIHBhcmFtZXRlciBpcyBub3QgdXNlZCBvciBpbnNlcnRlZCBpbnRvIHRoZSBnaXZlbiBpbmRleCxcbiAgICogaWYgaW5zZXJ0IHBhcmFtZXRlciBpcyBudW1iZXIsIG9yIGJlZm9yZSB0aGUgZ2l2ZW4gZWxlbWVudCwgaWYgdGhlIGluc2VydEJlZm9yZSBwYXJhbWV0ZXIgaXMgYSBxdWVzdGlvbiBvciBwYW5lbFxuICAgKiBAcGFyYW0gY29udGFpbmVyIFBhZ2Ugb3IgUGFuZWwgdG8gd2hlcmUgYSBxdWVzdGlvbiBpcyByZWxvY2F0ZWQuXG4gICAqIEBwYXJhbSBpbnNlcnRCZWZvcmUgVXNlIGl0IGlmIHlvdSB3YW50IHRvIHNldCB0aGUgcXVlc3Rpb24gdG8gYSBzcGVjaWZpYyBwb3NpdGlvbi4gWW91IG1heSB1c2UgYSBudW1iZXIgKHVzZSAwIHRvIGluc2VydCBpbnQgdGhlIGJlZ2lubmluZykgb3IgZWxlbWVudCwgaWYgeW91IHdhbnQgdG8gaW5zZXJ0IGJlZm9yZSB0aGlzIGVsZW1lbnQuXG4gICAqL1xuICBwdWJsaWMgbW92ZVRvKGNvbnRhaW5lcjogSVBhbmVsLCBpbnNlcnRCZWZvcmU6IGFueSA9IG51bGwpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tb3ZlVG9CYXNlKHRoaXMucGFyZW50LCBjb250YWluZXIsIGluc2VydEJlZm9yZSk7XG4gIH1cbiAgcHVibGljIGdldFByb2dyZXNzSW5mbygpOiBJUHJvZ3Jlc3NJbmZvIHtcbiAgICBpZiAoIXRoaXMuaGFzSW5wdXQpIHJldHVybiBzdXBlci5nZXRQcm9ncmVzc0luZm8oKTtcbiAgICByZXR1cm4ge1xuICAgICAgcXVlc3Rpb25Db3VudDogMSxcbiAgICAgIGFuc3dlcmVkUXVlc3Rpb25Db3VudDogIXRoaXMuaXNFbXB0eSgpID8gMSA6IDAsXG4gICAgICByZXF1aXJlZFF1ZXN0aW9uQ291bnQ6IHRoaXMuaXNSZXF1aXJlZCA/IDEgOiAwLFxuICAgICAgcmVxdWlyZWRBbnN3ZXJlZFF1ZXN0aW9uQ291bnQ6ICF0aGlzLmlzRW1wdHkoKSAmJiB0aGlzLmlzUmVxdWlyZWQgPyAxIDogMCxcbiAgICB9O1xuICB9XG4gIHByaXZhdGUgcnVuQ29uZGl0aW9ucygpIHtcbiAgICBpZiAodGhpcy5kYXRhICYmICF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSB7XG4gICAgICBpZiAoIXRoaXMuaXNEZXNpZ25Nb2RlKSB7XG4gICAgICAgIHRoaXMucnVuQ29uZGl0aW9uKFxuICAgICAgICAgIHRoaXMuZ2V0RGF0YUZpbHRlcmVkVmFsdWVzKCksXG4gICAgICAgICAgdGhpcy5nZXREYXRhRmlsdGVyZWRQcm9wZXJ0aWVzKClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIHNldFN1cnZleUltcGwodmFsdWU6IElTdXJ2ZXlJbXBsKSB7XG4gICAgc3VwZXIuc2V0U3VydmV5SW1wbCh2YWx1ZSk7XG4gICAgaWYgKHRoaXMuc3VydmV5KSB7XG4gICAgICB0aGlzLnN1cnZleS5xdWVzdGlvbkNyZWF0ZWQodGhpcyk7XG4gICAgfVxuICAgIGlmICh0aGlzLnN1cnZleSAmJiB0aGlzLnN1cnZleS5pc0Rlc2lnbk1vZGUgJiYgIXRoaXMuaXNEZXNpZ25Nb2RlKSB7XG4gICAgICB0aGlzLm9uVmlzaWJsZUNoYW5nZWQoKTtcbiAgICB9XG4gICAgdGhpcy5ydW5Db25kaXRpb25zKCk7XG4gIH1cbiAgcHVibGljIGdldERhdGFGaWx0ZXJlZFZhbHVlcygpOiBhbnkge1xuICAgIHJldHVybiAhIXRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRGaWx0ZXJlZFZhbHVlcygpIDogbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0RGF0YUZpbHRlcmVkUHJvcGVydGllcygpOiBhbnkge1xuICAgIHZhciBwcm9wcyA9ICEhdGhpcy5kYXRhID8gdGhpcy5kYXRhLmdldEZpbHRlcmVkUHJvcGVydGllcygpIDoge307XG4gICAgcHJvcHMucXVlc3Rpb24gPSB0aGlzO1xuICAgIHJldHVybiBwcm9wcztcbiAgfVxuICAvKipcbiAgICogQSBwYXJlbnQgZWxlbWVudC4gSXQgY2FuIGJlIHBhbmVsIG9yIHBhZ2UuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBhcmVudCgpOiBJUGFuZWwge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJwYXJlbnRcIiwgbnVsbCk7XG4gIH1cbiAgcHVibGljIHNldCBwYXJlbnQodmFsOiBJUGFuZWwpIHtcbiAgICBpZiAodGhpcy5wYXJlbnQgPT09IHZhbCkgcmV0dXJuO1xuICAgIHRoaXMuZGVsZXRlKCk7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicGFyZW50XCIsIHZhbCk7XG4gICAgdGhpcy51cGRhdGVRdWVzdGlvbkNzcygpO1xuICAgIHRoaXMub25QYXJlbnRDaGFuZ2VkKCk7XG4gIH1cbiAgcHJpdmF0ZSBwYXJlbnRRdWVzdGlvblZhbHVlOiBRdWVzdGlvbiA9IG51bGw7XG4gIC8qKlxuICAgKiBBIHBhcmVudCBxdWVzdGlvbi4gSXQgY2FuIGJlIGEgZHluYW1pYyBwYW5lbCBvciBkeW5hbWljL2Ryb3Bkb3duIG1hdHJpY2VzLiBJZiB0aGUgdmFsdWUgaXMgYSBtYXRyaXgsIGl0IG1lYW5zIHRoYXQgcXVlc3Rpb24gaXMgYSBjZWxsIHF1ZXN0aW9uLlxuICAgKiBUaGlzIHByb3BlcnR5IGlzIG51bGwgZm9yIGEgc3RhbmQgYWxvbmUgcXVlc3Rpb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBhcmVudFF1ZXN0aW9uKCk6IFF1ZXN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnRRdWVzdGlvblZhbHVlO1xuICB9XG4gIHNldFBhcmVudFF1ZXN0aW9uKHZhbDogUXVlc3Rpb24pIHtcbiAgICB0aGlzLnBhcmVudFF1ZXN0aW9uVmFsdWUgPSB2YWw7XG4gICAgdGhpcy5vblBhcmVudFF1ZXN0aW9uQ2hhbmdlZCgpO1xuICB9XG4gIHByb3RlY3RlZCBvblBhcmVudFF1ZXN0aW9uQ2hhbmdlZCgpIHt9XG4gIHByb3RlY3RlZCBvblBhcmVudENoYW5nZWQoKSB7fVxuICAvKipcbiAgICogUmV0dXJucyBmYWxzZSBpZiB0aGUgcXVlc3Rpb24gZG9lc24ndCBoYXZlIGEgdGl0bGUgcHJvcGVydHksIGZvciBleGFtcGxlOiBRdWVzdGlvbkh0bWxNb2RlbCwgb3IgdGl0bGVMb2NhdGlvbiBwcm9wZXJ0eSBlcXVhbHMgdG8gXCJoaWRkZW5cIlxuICAgKiBAc2VlIHRpdGxlTG9jYXRpb25cbiAgICovXG4gIHB1YmxpYyBnZXQgaGFzVGl0bGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VGl0bGVMb2NhdGlvbigpICE9PSBcImhpZGRlblwiO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSBkaWZmZXJlbnQgZnJvbSBcImRlZmF1bHRcIiB0byBzZXQgdGhlIHNwZWNpZmljIHF1ZXN0aW9uIHRpdGxlIGxvY2F0aW9uIGZvciB0aGlzIHBhbmVsL3BhZ2UuXG4gICAqIFBsZWFzZSBub3RlLCB0aGlzIHByb3BlcnR5IGlzIGhpZGRlbiBmb3IgcXVlc3Rpb25zIHdpdGhvdXQgaW5wdXQsIGZvciBleGFtcGxlIGh0bWwgcXVlc3Rpb24uXG4gICAqIEBzZWUgU3VydmV5TW9kZWwucXVlc3Rpb25UaXRsZUxvY2F0aW9uXG4gICAqL1xuICBwdWJsaWMgZ2V0IHRpdGxlTG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidGl0bGVMb2NhdGlvblwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHRpdGxlTG9jYXRpb24odmFsdWU6IHN0cmluZykge1xuICAgIHZhciBpc1Zpc2liaWxpdHlDaGFuZ2VkID1cbiAgICAgIHRoaXMudGl0bGVMb2NhdGlvbiA9PSBcImhpZGRlblwiIHx8IHZhbHVlID09IFwiaGlkZGVuXCI7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidGl0bGVMb2NhdGlvblwiLCB2YWx1ZS50b0xvd2VyQ2FzZSgpKTtcbiAgICB0aGlzLnVwZGF0ZVF1ZXN0aW9uQ3NzKCk7XG4gICAgaWYgKGlzVmlzaWJpbGl0eUNoYW5nZWQpIHtcbiAgICAgIHRoaXMubm90aWZ5U3VydmV5VmlzaWJpbGl0eUNoYW5nZWQoKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBub3RpZnlTdXJ2ZXlWaXNpYmlsaXR5Q2hhbmdlZCgpIHtcbiAgICBpZiAoIXRoaXMuc3VydmV5IHx8IHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHJldHVybjtcbiAgICB0aGlzLnN1cnZleS5xdWVzdGlvblZpc2liaWxpdHlDaGFuZ2VkKHRoaXMsIHRoaXMuaXNWaXNpYmxlKTtcbiAgICBpZiAodGhpcy5zdXJ2ZXkuaXNDbGVhclZhbHVlT25IaWRkZW4gJiYgIXRoaXMudmlzaWJsZSkge1xuICAgICAgdGhpcy5jbGVhclZhbHVlKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHRpdGxlIGxvY2F0aW9uIGJhc2VkIG9uIHF1ZXN0aW9uIHRpdGxlTG9jYXRpb24gcHJvcGVydHkgYW5kIFF1ZXN0aW9uVGl0bGVMb2NhdGlvbiBvZiBpdCdzIHBhcmVudHNcbiAgICogQHNlZSB0aXRsZUxvY2F0aW9uXG4gICAqIEBzZWUgUGFuZWxNb2RlbEJhc2UuUXVlc3Rpb25UaXRsZUxvY2F0aW9uXG4gICAqIEBzZWUgU3VydmV5TW9kZWwuUXVlc3Rpb25UaXRsZUxvY2F0aW9uXG4gICAqL1xuICBwdWJsaWMgZ2V0VGl0bGVMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmlzRmxvd0xheW91dCkgcmV0dXJuIFwiaGlkZGVuXCI7XG4gICAgdmFyIGxvY2F0aW9uID0gdGhpcy5nZXRUaXRsZUxvY2F0aW9uQ29yZSgpO1xuICAgIGlmIChsb2NhdGlvbiA9PT0gXCJsZWZ0XCIgJiYgIXRoaXMuaXNBbGxvd1RpdGxlTGVmdCkgbG9jYXRpb24gPSBcInRvcFwiO1xuICAgIHJldHVybiBsb2NhdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VGl0bGVMb2NhdGlvbkNvcmUoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy50aXRsZUxvY2F0aW9uICE9PSBcImRlZmF1bHRcIikgcmV0dXJuIHRoaXMudGl0bGVMb2NhdGlvbjtcbiAgICBpZiAoISF0aGlzLnBhcmVudCkgcmV0dXJuIHRoaXMucGFyZW50LmdldFF1ZXN0aW9uVGl0bGVMb2NhdGlvbigpO1xuICAgIGlmICghIXRoaXMuc3VydmV5KSByZXR1cm4gdGhpcy5zdXJ2ZXkucXVlc3Rpb25UaXRsZUxvY2F0aW9uO1xuICAgIHJldHVybiBcInRvcFwiO1xuICB9XG4gIGdldCBoYXNUaXRsZU9uTGVmdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNUaXRsZSAmJiB0aGlzLmdldFRpdGxlTG9jYXRpb24oKSA9PT0gXCJsZWZ0XCI7XG4gIH1cbiAgZ2V0IGhhc1RpdGxlT25Ub3AoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzVGl0bGUgJiYgdGhpcy5nZXRUaXRsZUxvY2F0aW9uKCkgPT09IFwidG9wXCI7XG4gIH1cbiAgZ2V0IGhhc1RpdGxlT25Cb3R0b20oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzVGl0bGUgJiYgdGhpcy5nZXRUaXRsZUxvY2F0aW9uKCkgPT09IFwiYm90dG9tXCI7XG4gIH1cbiAgZ2V0IGhhc1RpdGxlT25MZWZ0VG9wKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5oYXNUaXRsZSkgcmV0dXJuIGZhbHNlO1xuICAgIHZhciBsb2NhdGlvbiA9IHRoaXMuZ2V0VGl0bGVMb2NhdGlvbigpO1xuICAgIHJldHVybiBsb2NhdGlvbiA9PT0gXCJsZWZ0XCIgfHwgbG9jYXRpb24gPT09IFwidG9wXCI7XG4gIH1cbiAgcHVibGljIGdldCBlcnJvckxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5ID8gdGhpcy5zdXJ2ZXkucXVlc3Rpb25FcnJvckxvY2F0aW9uIDogXCJ0b3BcIjtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBmYWxzZSBpZiB0aGUgcXVlc3Rpb24gZG9lc24ndCBoYXZlIGFuIGlucHV0IGVsZW1lbnQsIGZvciBleGFtcGxlOiBRdWVzdGlvbkh0bWxNb2RlbFxuICAgKiBAc2VlIGhhc1NpbmdsZUlucHV0XG4gICAqL1xuICBwdWJsaWMgZ2V0IGhhc0lucHV0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGZhbHNlIGlmIHRoZSBxdWVzdGlvbiBkb2Vzbid0IGhhdmUgYW4gaW5wdXQgZWxlbWVudCBvciBoYXZlIG11bHRpcGxlIGlucHV0czogbWF0cmljZXMgb3IgcGFuZWwgZHluYW1pY1xuICAgKiBAc2VlIGhhc0lucHV0XG4gICAqL1xuICBwdWJsaWMgZ2V0IGhhc1NpbmdsZUlucHV0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhc0lucHV0O1xuICB9XG4gIHB1YmxpYyBnZXQgaW5wdXRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkICsgXCJpXCI7XG4gIH1cbiAgLyoqXG4gICAqIFF1ZXN0aW9uIHRpdGxlLiBVc2Ugc3VydmV5IHF1ZXN0aW9uVGl0bGVUZW1wbGF0ZSBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIHRpdGxlIHF1ZXN0aW9uIGlzIHJlbmRlcmVkLiBJZiBpdCBpcyBlbXB0eSwgdGhlbiBxdWVzdGlvbiBuYW1lIHByb3BlcnR5IGlzIHVzZWQuXG4gICAqIEBzZWUgU3VydmV5TW9kZWwucXVlc3Rpb25UaXRsZVRlbXBsYXRlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwidGl0bGVcIiwgdGhpcy5uYW1lKTtcbiAgfVxuICBwdWJsaWMgc2V0IHRpdGxlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJ0aXRsZVwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NUaXRsZSgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJ0aXRsZVwiKTtcbiAgfVxuICAvKipcbiAgICogUXVlc3Rpb24gZGVzY3JpcHRpb24uIEl0IHJlbmRlcnMgdW5kZXIgcXVlc3Rpb24gdGl0bGUgYnkgdXNpbmcgc21hbGxlciBmb250LiBVbmxpa2UgdGhlIHRpdGxlLCBkZXNjcmlwdGlvbiBjYW4gYmUgZW1wdHkuXG4gICAqIFBsZWFzZSBub3RlLCB0aGlzIHByb3BlcnR5IGlzIGhpZGRlbiBmb3IgcXVlc3Rpb25zIHdpdGhvdXQgaW5wdXQsIGZvciBleGFtcGxlIGh0bWwgcXVlc3Rpb24uXG4gICAqIEBzZWUgdGl0bGVcbiAgICovXG4gIEBwcm9wZXJ0eSh7IGxvY2FsaXphYmxlOiB0cnVlIH0pXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBRdWVzdGlvbiBkZXNjcmlwdGlvbiBsb2NhdGlvbi4gQnkgZGVmYXVsdCwgdmFsdWUgaXMgXCJkZWZhdWx0XCIgYW5kIGl0IGRlcGVuZHMgb24gc3VydmV5IHF1ZXN0aW9uRGVzY3JpcHRpb25Mb2NhdGlvbiBwcm9wZXJ0eVxuICAgKiBZb3UgbWF5IGNoYW5nZSBpdCB0byBcInVuZGVySW5wdXRcIiB0byByZW5kZXIgaXQgdW5kZXIgcXVlc3Rpb24gaW5wdXQgb3IgXCJ1bmRlclRpdGxlXCIgdG8gcmVuZGVyZWQgaXQgdW5kZXIgdGl0bGUuXG4gICAqIEBzZWUgZGVzY3JpcHRpb25cbiAgICogQHNlZSBTdXJ2ZXkucXVlc3Rpb25EZXNjcmlwdGlvbkxvY2F0aW9uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRlc2NyaXB0aW9uTG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZGVzY3JpcHRpb25Mb2NhdGlvblwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGRlc2NyaXB0aW9uTG9jYXRpb24odmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJkZXNjcmlwdGlvbkxvY2F0aW9uXCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGhhc0Rlc2NyaXB0aW9uVW5kZXJUaXRsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXREZXNjcmlwdGlvbkxvY2F0aW9uKCkgPT0gXCJ1bmRlclRpdGxlXCI7XG4gIH1cbiAgZ2V0IGhhc0Rlc2NyaXB0aW9uVW5kZXJJbnB1dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXREZXNjcmlwdGlvbkxvY2F0aW9uKCkgPT0gXCJ1bmRlcklucHV0XCI7XG4gIH1cbiAgcHJpdmF0ZSBnZXREZXNjcmlwdGlvbkxvY2F0aW9uKCkge1xuICAgIGlmICh0aGlzLmRlc2NyaXB0aW9uTG9jYXRpb24gIT09IFwiZGVmYXVsdFwiKSByZXR1cm4gdGhpcy5kZXNjcmlwdGlvbkxvY2F0aW9uO1xuICAgIHJldHVybiAhIXRoaXMuc3VydmV5XG4gICAgICA/IHRoaXMuc3VydmV5LnF1ZXN0aW9uRGVzY3JpcHRpb25Mb2NhdGlvblxuICAgICAgOiBcInVuZGVyVGl0bGVcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGNsaWNrVGl0bGVGdW5jdGlvbigpOiBhbnkge1xuICAgIGlmICh0aGlzLmhhc0lucHV0KSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmIChzZWxmLmlzQ29sbGFwc2VkKSByZXR1cm47XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHNlbGYuZm9jdXMoKTtcbiAgICAgICAgfSwgMSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICAvKipcbiAgICogVGhlIGN1c3RvbSB0ZXh0IHRoYXQgd2lsbCBiZSBzaG93biBvbiByZXF1aXJlZCBlcnJvci4gVXNlIHRoaXMgcHJvcGVydHksIGlmIHlvdSBkbyBub3Qgd2FudCB0byBzaG93IHRoZSBkZWZhdWx0IHRleHQuXG4gICAqIFBsZWFzZSBub3RlLCB0aGlzIHByb3BlcnR5IGlzIGhpZGRlbiBmb3IgcXVlc3Rpb24gd2l0aG91dCBpbnB1dCwgZm9yIGV4YW1wbGUgaHRtbCBxdWVzdGlvbi5cbiAgICovXG4gIHB1YmxpYyBnZXQgcmVxdWlyZWRFcnJvclRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJyZXF1aXJlZEVycm9yVGV4dFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJlcXVpcmVkRXJyb3JUZXh0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJyZXF1aXJlZEVycm9yVGV4dFwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NSZXF1aXJlZEVycm9yVGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJyZXF1aXJlZEVycm9yVGV4dFwiKTtcbiAgfVxuICAvKipcbiAgICogVXNlIGl0IHRvIGdldCBvciBzZXQgdGhlIGNvbW1lbnQgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbW1lbnRUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgICAgXCJjb21tZW50VGV4dFwiLFxuICAgICAgc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm90aGVySXRlbVRleHRcIilcbiAgICApO1xuICB9XG4gIHB1YmxpYyBzZXQgY29tbWVudFRleHQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImNvbW1lbnRUZXh0XCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY0NvbW1lbnRUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImNvbW1lbnRUZXh0XCIpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgY29weSBvZiBxdWVzdGlvbiBlcnJvcnMgc3VydmV5LiBGb3Igc29tZSBxdWVzdGlvbnMgbGlrZSBtYXRyaXggYW5kIHBhbmVsIGR5bmFtaWMgaXQgaW5jbHVkZXMgdGhlIGVycm9ycyBvZiBuZXN0ZWQgcXVlc3Rpb25zLlxuICAgKi9cbiAgcHVibGljIGdldEFsbEVycm9ycygpOiBBcnJheTxTdXJ2ZXlFcnJvcj4ge1xuICAgIHJldHVybiB0aGlzLmVycm9ycy5zbGljZSgpO1xuICB9XG4gIHB1YmxpYyBnZXRFcnJvckJ5VHlwZShlcnJvclR5cGU6IHN0cmluZyk6IFN1cnZleUVycm9yIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZXJyb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5lcnJvcnNbaV0uZ2V0RXJyb3JUeXBlKCkgPT09IGVycm9yVHlwZSkgcmV0dXJuIHRoaXMuZXJyb3JzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvKipcbiAgICogVGhlIGxpbmsgdG8gdGhlIGN1c3RvbSB3aWRnZXQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGN1c3RvbVdpZGdldCgpOiBRdWVzdGlvbkN1c3RvbVdpZGdldCB7XG4gICAgaWYgKCF0aGlzLmlzQ3VzdG9tV2lkZ2V0UmVxdWVzdGVkICYmICF0aGlzLmN1c3RvbVdpZGdldFZhbHVlKSB7XG4gICAgICB0aGlzLmlzQ3VzdG9tV2lkZ2V0UmVxdWVzdGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMudXBkYXRlQ3VzdG9tV2lkZ2V0KCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmN1c3RvbVdpZGdldFZhbHVlO1xuICB9XG4gIHB1YmxpYyB1cGRhdGVDdXN0b21XaWRnZXQoKSB7XG4gICAgdGhpcy5jdXN0b21XaWRnZXRWYWx1ZSA9IEN1c3RvbVdpZGdldENvbGxlY3Rpb24uSW5zdGFuY2UuZ2V0Q3VzdG9tV2lkZ2V0KFxuICAgICAgdGhpc1xuICAgICk7XG4gIH1cbiAgcHVibGljIGdldCBpc0NvbXBvc2l0ZVF1ZXN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgYWZ0ZXJSZW5kZXJRdWVzdGlvbkVsZW1lbnQoZWw6IEhUTUxFbGVtZW50KSB7XG4gICAgaWYgKCF0aGlzLnN1cnZleSB8fCAhdGhpcy5oYXNTaW5nbGVJbnB1dCkgcmV0dXJuO1xuICAgIHRoaXMuc3VydmV5LmFmdGVyUmVuZGVyUXVlc3Rpb25JbnB1dCh0aGlzLCBlbCk7XG4gIH1cbiAgcHVibGljIGFmdGVyUmVuZGVyKGVsOiBIVE1MRWxlbWVudCkge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkpIHJldHVybjtcbiAgICB0aGlzLnN1cnZleS5hZnRlclJlbmRlclF1ZXN0aW9uKHRoaXMsIGVsKTtcbiAgICBpZiAoISF0aGlzLmFmdGVyUmVuZGVyUXVlc3Rpb25DYWxsYmFjaykge1xuICAgICAgdGhpcy5hZnRlclJlbmRlclF1ZXN0aW9uQ2FsbGJhY2sodGhpcywgZWwpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgYmVmb3JlRGVzdHJveVF1ZXN0aW9uRWxlbWVudChlbDogSFRNTEVsZW1lbnQpIHt9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSByZW5kcmVkIHF1ZXN0aW9uIHRpdGxlLlxuICAgKi9cbiAgcHVibGljIGdldCBwcm9jZXNzZWRUaXRsZSgpIHtcbiAgICB2YXIgcmVzID0gdGhpcy5sb2NQcm9jZXNzZWRUaXRsZS50ZXh0T3JIdG1sO1xuICAgIHJldHVybiByZXMgPyByZXMgOiB0aGlzLm5hbWU7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHRpdGxlIGFmdGVyIHByb2Nlc3NpbmcgdGhlIHF1ZXN0aW9uIHRlbXBsYXRlLlxuICAgKiBAc2VlIFN1cnZleU1vZGVsLnF1ZXN0aW9uVGl0bGVUZW1wbGF0ZVxuICAgKi9cbiAgcHVibGljIGdldCBmdWxsVGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5sb2NUaXRsZS5yZW5kZXJlZEh0bWw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCB0aXRsZVBhdHRlcm4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gISF0aGlzLnN1cnZleSA/IHRoaXMuc3VydmV5LnF1ZXN0aW9uVGl0bGVQYXR0ZXJuIDogXCJudW1UaXRsZVJlcXVpcmVcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzUmVxdWlyZVRleHRPblN0YXJ0KCkge1xuICAgIHJldHVybiB0aGlzLmlzUmVxdWlyZWQgJiYgdGhpcy50aXRsZVBhdHRlcm4gPT0gXCJyZXF1aXJlTnVtVGl0bGVcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzUmVxdWlyZVRleHRCZWZvcmVUaXRsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1JlcXVpcmVkICYmIHRoaXMudGl0bGVQYXR0ZXJuID09IFwibnVtUmVxdWlyZVRpdGxlXCI7XG4gIH1cbiAgcHVibGljIGdldCBpc1JlcXVpcmVUZXh0QWZ0ZXJUaXRsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1JlcXVpcmVkICYmIHRoaXMudGl0bGVQYXR0ZXJuID09IFwibnVtVGl0bGVSZXF1aXJlXCI7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBRdWVzdGlvbiByZW5kZXJzIG9uIHRoZSBuZXcgbGluZSBpZiB0aGUgcHJvcGVydHkgaXMgdHJ1ZS4gSWYgdGhlIHByb3BlcnR5IGlzIGZhbHNlLCB0aGUgcXVlc3Rpb24gdHJpZXMgdG8gcmVuZGVyIG9uIHRoZSBzYW1lIGxpbmUvcm93IHdpdGggYSBwcmV2aW91cyBxdWVzdGlvbi9wYW5lbC5cbiAgICovXG4gIHB1YmxpYyBnZXQgc3RhcnRXaXRoTmV3TGluZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic3RhcnRXaXRoTmV3TGluZVwiLCB0cnVlKTtcbiAgfVxuICBwdWJsaWMgc2V0IHN0YXJ0V2l0aE5ld0xpbmUodmFsOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuc3RhcnRXaXRoTmV3TGluZSA9PSB2YWwpIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzdGFydFdpdGhOZXdMaW5lXCIsIHZhbCk7XG4gIH1cbiAgQHByb3BlcnR5KCkgY3NzQ2xhc3Nlc1ZhbHVlOiBhbnk7XG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCBjc3MgY2xhc3NlcyB0aGF0IHVzZWQgZm9yIHJlbmRlcmluZyB0aGUgcXVlc3Rpb24uIFlvdSBtYXkgdXNlIHN1cnZleS51cGRhdGVRdWVzdGlvbkNzc0NsYXNzZXMgZXZlbnQgdG8gb3ZlcnJpZGUgY3NzIGNsYXNzZXMgZm9yIGEgcXVlc3Rpb24uXG4gICAqIEBzZWUgU3VydmV5TW9kZWwudXBkYXRlUXVlc3Rpb25Dc3NDbGFzc2VzXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNzc0NsYXNzZXMoKTogYW55IHtcbiAgICBpZiAoIXRoaXMuc3VydmV5KSByZXR1cm4gdGhpcy5jYWxjQ3NzQ2xhc3NlcygpO1xuICAgIGlmICghdGhpcy5jc3NDbGFzc2VzVmFsdWUpIHtcbiAgICAgIHRoaXMuY3NzQ2xhc3Nlc1ZhbHVlID0gdGhpcy5jYWxjQ3NzQ2xhc3NlcygpO1xuICAgICAgdGhpcy51cGRhdGVFbGVtZW50Q3NzQ29yZSh0aGlzLmNzc0NsYXNzZXNWYWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNzc0NsYXNzZXNWYWx1ZTtcbiAgfVxuICBwcml2YXRlIGNhbGNDc3NDbGFzc2VzKCk6IGFueSB7XG4gICAgdmFyIGNzcyA9IHRoaXMuY3NzO1xuICAgIHZhciBjbGFzc2VzID0geyBlcnJvcjoge30gfTtcbiAgICB0aGlzLmNvcHlDc3NDbGFzc2VzKGNsYXNzZXMsIGNzcy5xdWVzdGlvbik7XG4gICAgdGhpcy5jb3B5Q3NzQ2xhc3NlcyhjbGFzc2VzLmVycm9yLCBjc3MuZXJyb3IpO1xuICAgIHRoaXMudXBkYXRlQ3NzQ2xhc3NlcyhjbGFzc2VzLCBjc3MpO1xuICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgdGhpcy5zdXJ2ZXkudXBkYXRlUXVlc3Rpb25Dc3NDbGFzc2VzKHRoaXMsIGNsYXNzZXMpO1xuICAgIH1cbiAgICByZXR1cm4gY2xhc3NlcztcbiAgfVxuICBwdWJsaWMgZ2V0IGNzc1Jvb3QoKTogc3RyaW5nIHtcbiAgICB0aGlzLmVuc3VyZUVsZW1lbnRDc3MoKTtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY3NzUm9vdFwiLCBcIlwiKTtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0Q3NzUm9vdCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNzc1Jvb3RcIiwgdmFsKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q3NzUm9vdChjc3NDbGFzc2VzOiBhbnkpOiBzdHJpbmcge1xuICAgIHZhciByZXMgPVxuICAgICAgdGhpcy5pc0Zsb3dMYXlvdXQgJiYgIXRoaXMuaXNEZXNpZ25Nb2RlXG4gICAgICAgID8gY3NzQ2xhc3Nlcy5mbG93Um9vdFxuICAgICAgICA6IGNzc0NsYXNzZXMubWFpblJvb3Q7XG4gICAgaWYgKCFyZXMpIHJlcyA9IFwiXCI7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuaXNGbG93TGF5b3V0ICYmXG4gICAgICB0aGlzLmhhc1RpdGxlT25MZWZ0ICYmXG4gICAgICAhIWNzc0NsYXNzZXMudGl0bGVMZWZ0Um9vdFxuICAgICkge1xuICAgICAgcmVzICs9IFwiIFwiICsgY3NzQ2xhc3Nlcy50aXRsZUxlZnRSb290O1xuICAgIH1cbiAgICBpZiAodGhpcy5lcnJvcnMubGVuZ3RoID4gMCAmJiAhIWNzc0NsYXNzZXMuaGFzRXJyb3IpIHtcbiAgICAgIHJlcyArPSBcIiBcIiArIGNzc0NsYXNzZXMuaGFzRXJyb3I7XG4gICAgfVxuICAgIGlmIChjc3NDbGFzc2VzLnNtYWxsICYmICF0aGlzLndpZHRoKSB7XG4gICAgICByZXMgKz0gXCIgXCIgKyBjc3NDbGFzc2VzLnNtYWxsO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBnZXQgY3NzSGVhZGVyKCk6IHN0cmluZyB7XG4gICAgdGhpcy5lbnN1cmVFbGVtZW50Q3NzKCk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNzc0hlYWRlclwiLCBcIlwiKTtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0Q3NzSGVhZGVyKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY3NzSGVhZGVyXCIsIHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENzc0hlYWRlcihjc3NDbGFzc2VzOiBhbnkpOiBzdHJpbmcge1xuICAgIHZhciByZXMgPSBjc3NDbGFzc2VzLmhlYWRlciB8fCBcIlwiO1xuICAgIGlmICh0aGlzLmhhc1RpdGxlT25Ub3AgJiYgISFjc3NDbGFzc2VzLmhlYWRlclRvcCkge1xuICAgICAgcmVzICs9IFwiIFwiICsgY3NzQ2xhc3Nlcy5oZWFkZXJUb3A7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc1RpdGxlT25MZWZ0ICYmICEhY3NzQ2xhc3Nlcy5oZWFkZXJMZWZ0KSB7XG4gICAgICByZXMgKz0gXCIgXCIgKyBjc3NDbGFzc2VzLmhlYWRlckxlZnQ7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc1RpdGxlT25Cb3R0b20gJiYgISFjc3NDbGFzc2VzLmhlYWRlckJvdHRvbSkge1xuICAgICAgcmVzICs9IFwiIFwiICsgY3NzQ2xhc3Nlcy5oZWFkZXJCb3R0b207XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIGdldCBjc3NDb250ZW50KCk6IHN0cmluZyB7XG4gICAgdGhpcy5lbnN1cmVFbGVtZW50Q3NzKCk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNzc0NvbnRlbnRcIiwgXCJcIik7XG4gIH1cbiAgcHJvdGVjdGVkIHNldENzc0NvbnRlbnQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjc3NDb250ZW50XCIsIHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENzc0NvbnRlbnQoY3NzQ2xhc3NlczogYW55KTogc3RyaW5nIHtcbiAgICB2YXIgcmVzID0gY3NzQ2xhc3Nlcy5jb250ZW50IHx8IFwiXCI7XG4gICAgaWYgKHRoaXMuaGFzVGl0bGVPbkxlZnQgJiYgISFjc3NDbGFzc2VzLmNvbnRlbnRMZWZ0KSB7XG4gICAgICByZXMgKz0gXCIgXCIgKyBjc3NDbGFzc2VzLmNvbnRlbnRMZWZ0O1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBnZXQgY3NzVGl0bGUoKTogc3RyaW5nIHtcbiAgICB0aGlzLmVuc3VyZUVsZW1lbnRDc3MoKTtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY3NzVGl0bGVcIiwgXCJcIik7XG4gIH1cbiAgcHJvdGVjdGVkIHNldENzc1RpdGxlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY3NzVGl0bGVcIiwgdmFsKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q3NzVGl0bGUoY3NzQ2xhc3NlczogYW55KTogc3RyaW5nIHtcbiAgICB2YXIgcmVzdWx0ID0gY3NzQ2xhc3Nlcy50aXRsZTtcblxuICAgIGlmICh0aGlzLmlzQ29sbGFwc2VkIHx8IHRoaXMuaXNFeHBhbmRlZCkge1xuICAgICAgcmVzdWx0ICs9IFwiIFwiICsgY3NzQ2xhc3Nlcy50aXRsZUV4cGFuZGFibGU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29udGFpbnNFcnJvcnMpIHtcbiAgICAgIGlmICghIWNzc0NsYXNzZXMudGl0bGVPbkVycm9yKSB7XG4gICAgICAgIHJlc3VsdCArPSBcIiBcIiArIGNzc0NsYXNzZXMudGl0bGVPbkVycm9yO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5pc0Fuc3dlcmVkICYmICEhY3NzQ2xhc3Nlcy50aXRsZU9uQW5zd2VyKSB7XG4gICAgICByZXN1bHQgKz0gXCIgXCIgKyBjc3NDbGFzc2VzLnRpdGxlT25BbnN3ZXI7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHVibGljIGdldCBjc3NFcnJvcigpOiBzdHJpbmcge1xuICAgIHRoaXMuZW5zdXJlRWxlbWVudENzcygpO1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjc3NFcnJvclwiLCBcIlwiKTtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0Q3NzRXJyb3IodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjc3NFcnJvclwiLCB2YWwpO1xuICB9XG4gIC8vVE9ETyB3YXMgbm90IHJlbW92ZWQgZnJvbSBvdGhlciBwbGFjZXNcbiAgcHJvdGVjdGVkIGdldENzc0Vycm9yKGNzc0NsYXNzZXM6IGFueSk6IHN0cmluZyB7XG4gICAgdmFyIHJlcyA9IGNzc0NsYXNzZXMuZXJyb3Iucm9vdCB8fCBcIlwiO1xuICAgIGlmICh0aGlzLmVycm9yTG9jYXRpb24gPT0gXCJ0b3BcIikge1xuICAgICAgaWYgKCEhY3NzQ2xhc3Nlcy5lcnJvci5sb2NhdGlvblRvcCkge1xuICAgICAgICByZXMgKz0gXCIgXCIgKyBjc3NDbGFzc2VzLmVycm9yLmxvY2F0aW9uVG9wO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLmVycm9yTG9jYXRpb24gPT09IFwiYm90dG9tXCIgJiZcbiAgICAgICEhY3NzQ2xhc3Nlcy5lcnJvci5sb2NhdGlvbkJvdHRvbVxuICAgICkge1xuICAgICAgcmVzICs9IFwiIFwiICsgY3NzQ2xhc3Nlcy5lcnJvci5sb2NhdGlvbkJvdHRvbTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgdXBkYXRlRWxlbWVudENzcyhyZU5ldz86IGJvb2xlYW4pIHtcbiAgICB0aGlzLmNzc0NsYXNzZXNWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICBpZiAocmVOZXcpIHtcbiAgICAgIHRoaXMudXBkYXRlUXVlc3Rpb25Dc3ModHJ1ZSk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCB1cGRhdGVRdWVzdGlvbkNzcyhyZU5ldz86IGJvb2xlYW4pIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmlzTG9hZGluZ0Zyb21Kc29uIHx8XG4gICAgICAhdGhpcy5zdXJ2ZXkgfHxcbiAgICAgIChyZU5ldyAhPT0gdHJ1ZSAmJiAhdGhpcy5jc3NDbGFzc2VzVmFsdWUpXG4gICAgKVxuICAgICAgcmV0dXJuO1xuICAgIGlmICghdGhpcy5jc3NDbGFzc2VzVmFsdWUpIHtcbiAgICAgIHRoaXMuY3NzQ2xhc3Nlc1ZhbHVlID0gdGhpcy5jYWxjQ3NzQ2xhc3NlcygpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUVsZW1lbnRDc3NDb3JlKHRoaXMuY3NzQ2xhc3Nlcyk7XG4gIH1cbiAgcHJpdmF0ZSBlbnN1cmVFbGVtZW50Q3NzKCkge1xuICAgIGlmICghdGhpcy5jc3NDbGFzc2VzVmFsdWUpIHtcbiAgICAgIHRoaXMudXBkYXRlUXVlc3Rpb25Dc3ModHJ1ZSk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCB1cGRhdGVFbGVtZW50Q3NzQ29yZShjc3NDbGFzc2VzOiBhbnkpIHtcbiAgICB0aGlzLnNldENzc1Jvb3QodGhpcy5nZXRDc3NSb290KGNzc0NsYXNzZXMpKTtcbiAgICB0aGlzLnNldENzc0hlYWRlcih0aGlzLmdldENzc0hlYWRlcihjc3NDbGFzc2VzKSk7XG4gICAgdGhpcy5zZXRDc3NDb250ZW50KHRoaXMuZ2V0Q3NzQ29udGVudChjc3NDbGFzc2VzKSk7XG4gICAgdGhpcy5zZXRDc3NUaXRsZSh0aGlzLmdldENzc1RpdGxlKGNzc0NsYXNzZXMpKTtcbiAgICB0aGlzLnNldENzc0Vycm9yKHRoaXMuZ2V0Q3NzRXJyb3IoY3NzQ2xhc3NlcykpO1xuICB9XG4gIHByb3RlY3RlZCB1cGRhdGVDc3NDbGFzc2VzKHJlczogYW55LCBjc3M6IGFueSkge1xuICAgIGlmICghY3NzLnF1ZXN0aW9uKSByZXR1cm47XG4gICAgaWYgKHRoaXMuaXNSZXF1aXJlZCkge1xuICAgICAgaWYgKCEhY3NzLnF1ZXN0aW9uLnJlcXVpcmVkKSB7XG4gICAgICAgIHJlcy5yb290ID0gKHJlcy5yb290ID8gcmVzLnJvb3QgKyBcIiBcIiA6IFwiXCIpICsgb2JqQ3NzO1xuICAgICAgfVxuICAgICAgaWYgKGNzcy5xdWVzdGlvbi50aXRsZVJlcXVpcmVkKSB7XG4gICAgICAgIHJlcy50aXRsZSArPSBcIiBcIiArIGNzcy5xdWVzdGlvbi50aXRsZVJlcXVpcmVkO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgb2JqQ3NzID0gY3NzW3RoaXMuZ2V0Q3NzVHlwZSgpXTtcbiAgICBpZiAob2JqQ3NzID09PSB1bmRlZmluZWQgfHwgb2JqQ3NzID09PSBudWxsKSByZXR1cm47XG4gICAgaWYgKHR5cGVvZiBvYmpDc3MgPT09IFwic3RyaW5nXCIgfHwgb2JqQ3NzIGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgICByZXMucm9vdCA9IChyZXMucm9vdCA/IHJlcy5yb290ICsgXCIgXCIgOiBcIlwiKSArIG9iakNzcztcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yICh2YXIga2V5IGluIG9iakNzcykge1xuICAgICAgICByZXNba2V5XSA9IG9iakNzc1trZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q3NzVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFR5cGUoKTtcbiAgfVxuICBwcml2YXRlIGdldCBjc3MoKTogYW55IHtcbiAgICByZXR1cm4gISF0aGlzLnN1cnZleSA/IHRoaXMuc3VydmV5LmdldENzcygpIDoge307XG4gIH1cbiAgLyoqXG4gICAqIFVzZSBpdCB0byBzZXQgdGhlIHNwZWNpZmljIHdpZHRoIHRvIHRoZSBxdWVzdGlvbiBsaWtlIGNzcyBzdHlsZSAoJSwgcHgsIGVtIGV0YykuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHdpZHRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIndpZHRoXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgd2lkdGgodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ3aWR0aFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgaXQgdG8gc2V0IHRoZSBzcGVjaWZpYyBtaW5XaWR0aCBjb25zdHJhaW50IHRvIHRoZSBxdWVzdGlvbiBsaWtlIGNzcyBzdHlsZSAoJSwgcHgsIGVtIGV0YykuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1pbldpZHRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1pbldpZHRoXCIsIHNldHRpbmdzLm1pbldpZHRoKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1pbldpZHRoKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWluV2lkdGhcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVXNlIGl0IHRvIHNldCB0aGUgc3BlY2lmaWMgbWF4V2lkdGggY29uc3RyYWludCB0byB0aGUgcXVlc3Rpb24gbGlrZSBjc3Mgc3R5bGUgKCUsIHB4LCBlbSBldGMpLlxuICAgKi9cbiAgcHVibGljIGdldCBtYXhXaWR0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtYXhXaWR0aFwiLCBzZXR0aW5ncy5tYXhXaWR0aCk7XG4gIH1cbiAgcHVibGljIHNldCBtYXhXaWR0aCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1heFdpZHRoXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSByZW5kZXJlZCB3aWR0aCBvZiB0aGUgcXVlc3Rpb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJlbmRlcldpZHRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJlbmRlcldpZHRoXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcmVuZGVyV2lkdGgodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyZW5kZXJXaWR0aFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgaXQgZGlmZmVyZW50IGZyb20gMCB0byBpbmNyZWFzZSB0aGUgbGVmdCBwYWRkaW5nLlxuICAgKi9cbiAgcHVibGljIGdldCBpbmRlbnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaW5kZW50XCIsIDApO1xuICB9XG4gIHB1YmxpYyBzZXQgaW5kZW50KHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaW5kZW50XCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCBpdCBkaWZmZXJlbnQgZnJvbSAwIHRvIGluY3JlYXNlIHRoZSByaWdodCBwYWRkaW5nLlxuICAgKi9cbiAgcHVibGljIGdldCByaWdodEluZGVudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyaWdodEluZGVudFwiLCAwKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJpZ2h0SW5kZW50KHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicmlnaHRJbmRlbnRcIiwgdmFsKTtcbiAgfVxuICBnZXQgcGFkZGluZ0xlZnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicGFkZGludExlZnRcIiwgXCJcIik7XG4gIH1cbiAgc2V0IHBhZGRpbmdMZWZ0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicGFkZGludExlZnRcIiwgdmFsKTtcbiAgfVxuICBnZXQgcGFkZGluZ1JpZ2h0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInBhZGRpbmdSaWdodFwiLCBcIlwiKTtcbiAgfVxuICBzZXQgcGFkZGluZ1JpZ2h0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicGFkZGluZ1JpZ2h0XCIsIHZhbCk7XG4gIH1cbiAgcHJpdmF0ZSBvbkluZGVudENoYW5nZWQoKSB7XG4gICAgdGhpcy5wYWRkaW5nTGVmdCA9IHRoaXMuZ2V0SW5kZW50U2l6ZSh0aGlzLmluZGVudCk7XG4gICAgdGhpcy5wYWRkaW5nUmlnaHQgPSB0aGlzLmdldEluZGVudFNpemUodGhpcy5yaWdodEluZGVudCk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRJbmRlbnRTaXplKGluZGVudDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAoaW5kZW50IDwgMSB8fCAhdGhpcy5nZXRTdXJ2ZXkoKSB8fCAhdGhpcy5jc3NDbGFzc2VzKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gaW5kZW50ICogdGhpcy5jc3NDbGFzc2VzLmluZGVudCArIFwicHhcIjtcbiAgfVxuICAvKipcbiAgICogTW92ZSB0aGUgZm9jdXMgdG8gdGhlIGlucHV0IG9mIHRoaXMgcXVlc3Rpb24uXG4gICAqIEBwYXJhbSBvbkVycm9yIHNldCB0aGlzIHBhcmFtZXRlciB0byB0cnVlLCB0byBmb2N1cyB0aGUgaW5wdXQgd2l0aCB0aGUgZmlyc3QgZXJyb3IsIG90aGVyIHdpc2UgdGhlIGZpcnN0IGlucHV0IHdpbGwgYmUgZm9jdXNlZC5cbiAgICovXG4gIHB1YmxpYyBmb2N1cyhvbkVycm9yOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHJldHVybjtcblxuICAgIGlmICghIXRoaXMuc3VydmV5KSB7XG4gICAgICB0aGlzLnN1cnZleS5zY3JvbGxFbGVtZW50VG9Ub3AodGhpcywgdGhpcywgbnVsbCwgdGhpcy5pZCk7XG4gICAgfVxuICAgIHZhciBpZCA9ICFvbkVycm9yXG4gICAgICA/IHRoaXMuZ2V0Rmlyc3RJbnB1dEVsZW1lbnRJZCgpXG4gICAgICA6IHRoaXMuZ2V0Rmlyc3RFcnJvcklucHV0RWxlbWVudElkKCk7XG4gICAgaWYgKFN1cnZleUVsZW1lbnQuRm9jdXNFbGVtZW50KGlkKSkge1xuICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5mb2N1c0NhbGxiYWNrKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGZpcmVDYWxsYmFjayhjYWxsYmFjazogKCkgPT4gdm9pZCkge1xuICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soKTtcbiAgfVxuICBwdWJsaWMgZ2V0T3RoZXJzTWF4TGVuZ3RoKCk6IGFueSB7XG4gICAgaWYgKCF0aGlzLnN1cnZleSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5Lm1heE90aGVyc0xlbmd0aCA+IDAgPyB0aGlzLnN1cnZleS5tYXhPdGhlcnNMZW5ndGggOiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBvbkNyZWF0aW5nKCkge31cbiAgcHJvdGVjdGVkIGdldEZpcnN0SW5wdXRFbGVtZW50SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pbnB1dElkO1xuICB9XG4gIHByb3RlY3RlZCBnZXRGaXJzdEVycm9ySW5wdXRFbGVtZW50SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRGaXJzdElucHV0RWxlbWVudElkKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFByb2Nlc3NlZFRleHRWYWx1ZSh0ZXh0VmFsdWU6IFRleHRQcmVQcm9jZXNzb3JWYWx1ZSkge1xuICAgIHZhciBuYW1lID0gdGV4dFZhbHVlLm5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICB0ZXh0VmFsdWUuaXNFeGlzdHMgPVxuICAgICAgT2JqZWN0LmtleXMoUXVlc3Rpb24uVGV4dFByZXByb2Nlc3NvclZhbHVlc01hcCkuaW5kZXhPZihuYW1lKSAhPT0gLTEgfHxcbiAgICAgICg8YW55PnRoaXMpW3RleHRWYWx1ZS5uYW1lXSAhPT0gdW5kZWZpbmVkO1xuICAgIHRleHRWYWx1ZS52YWx1ZSA9ICg8YW55PnRoaXMpW1xuICAgICAgKDxhbnk+UXVlc3Rpb24uVGV4dFByZXByb2Nlc3NvclZhbHVlc01hcClbbmFtZV0gfHwgdGV4dFZhbHVlLm5hbWVcbiAgICBdO1xuICB9XG4gIHB1YmxpYyBzdXBwb3J0Q29tbWVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIHN1cHBvcnRPdGhlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIHRydWUsIHRvIG1ha2UgdGhlIHF1ZXN0aW9uIGEgcmVxdWlyZWQuIElmIGEgdXNlciBkb2Vzbid0IGFuc3dlciB0aGUgcXVlc3Rpb24gdGhlbiBhIHZhbGlkYXRpb24gZXJyb3Igd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIFBsZWFzZSBub3RlLCB0aGlzIHByb3BlcnR5IGlzIGhpZGRlbiBmb3IgcXVlc3Rpb24gd2l0aG91dCBpbnB1dCwgZm9yIGV4YW1wbGUgaHRtbCBxdWVzdGlvbi5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXNSZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaXNSZXF1aXJlZFwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBpc1JlcXVpcmVkKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzUmVxdWlyZWRcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogQW4gZXhwcmVzc2lvbiB0aGF0IHJldHVybnMgdHJ1ZSBvciBmYWxzZS4gSWYgaXQgcmV0dXJucyB0cnVlIHRoZSBRdWVzdGlvbiBiZWNvbWVzIHJlcXVpcmVkIGFuZCBhbiBlbmQtdXNlciBoYXMgdG8gYW5zd2VyIGl0LlxuICAgKiBJZiBpdCByZXR1cm5zIGZhbHNlIHRoZSBRdWVzdGlvbiB0aGVuIGFuIGVuZC11c2VyIG1heSBub3QgYW5zd2VyIGl0IHRoZSBRdWVzdGlvbiBtYXliZSBlbXB0eS5cbiAgICogVGhlIGxpYnJhcnkgcnVucyB0aGUgZXhwcmVzc2lvbiBvbiBzdXJ2ZXkgc3RhcnQgYW5kIG9uIGNoYW5naW5nIGEgcXVlc3Rpb24gdmFsdWUuIElmIHRoZSBwcm9wZXJ0eSBpcyBlbXB0eSB0aGVuIGlzUmVxdWlyZWQgcHJvcGVydHkgaXMgdXNlZC5cbiAgICogUGxlYXNlIG5vdGUsIHRoaXMgcHJvcGVydHkgaXMgaGlkZGVuIGZvciBxdWVzdGlvbiB3aXRob3V0IGlucHV0LCBmb3IgZXhhbXBsZSBodG1sIHF1ZXN0aW9uLlxuICAgKiBAc2VlIGlzUmVxdWlyZWRcbiAgICovXG4gIHB1YmxpYyBnZXQgcmVxdWlyZWRJZigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyZXF1aXJlZElmXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcmVxdWlyZWRJZih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJlcXVpcmVkSWZcIiwgdmFsKTtcbiAgICB0aGlzLnJ1bkNvbmRpdGlvbnMoKTtcbiAgfVxuICAvKipcbiAgICogU2V0IGl0IHRvIHRydWUsIHRvIGFkZCBhIGNvbW1lbnQgZm9yIHRoZSBxdWVzdGlvbi5cbiAgICovXG4gIHB1YmxpYyBnZXQgaGFzQ29tbWVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaGFzQ29tbWVudFwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBoYXNDb21tZW50KHZhbDogYm9vbGVhbikge1xuICAgIGlmICghdGhpcy5zdXBwb3J0Q29tbWVudCgpKSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaGFzQ29tbWVudFwiLCB2YWwpO1xuICAgIGlmICh0aGlzLmhhc0NvbW1lbnQpIHRoaXMuaGFzT3RoZXIgPSBmYWxzZTtcbiAgfVxuICAvKipcbiAgICogVGhlIHVuaXF1ZSBpZGVudGlmaWNhdG9yLiBJdCBpcyBnZW5lcmF0ZWQgYXV0b21hdGljYWxseS5cbiAgICovXG4gIHB1YmxpYyBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaWRcIik7XG4gIH1cbiAgcHVibGljIHNldCBpZCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlkXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBhcmlhVGl0bGVJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkICsgXCJfYXJpYVRpdGxlXCI7XG4gIH1cbiAgcHVibGljIGdldCBhcmlhUm9sZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzT3RoZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImhhc090aGVyXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGhhc090aGVyKHZhbDogYm9vbGVhbikge1xuICAgIGlmICghdGhpcy5zdXBwb3J0T3RoZXIoKSB8fCB0aGlzLmhhc090aGVyID09IHZhbCkgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImhhc090aGVyXCIsIHZhbCk7XG4gICAgaWYgKHRoaXMuaGFzT3RoZXIpIHRoaXMuaGFzQ29tbWVudCA9IGZhbHNlO1xuICAgIHRoaXMuaGFzT3RoZXJDaGFuZ2VkKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGhhc090aGVyQ2hhbmdlZCgpIHt9XG4gIHB1YmxpYyBnZXQgcmVxdWlyZVVwZGF0ZUNvbW1lbnRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNDb21tZW50IHx8IHRoaXMuaGFzT3RoZXI7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiByZWFkT25seSBwcm9wZXJ0eSBpcyB0cnVlIG9yIHN1cnZleSBpcyBpbiBkaXNwbGF5IG1vZGUgb3IgcGFyZW50IHBhbmVsL3BhZ2UgaXMgcmVhZE9ubHkuXG4gICAqIEBzZWUgU3VydmV5TW9kZWwubW9kZWxcbiAgICogQHNlZSByZWFkT25seVxuICAgKi9cbiAgcHVibGljIGdldCBpc1JlYWRPbmx5KCkge1xuICAgIHZhciBpc1BhcmVudFJlYWRPbmx5ID0gISF0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC5pc1JlYWRPbmx5O1xuICAgIHZhciBpc1N1cnZleVJlYWRPbmx5ID0gISF0aGlzLnN1cnZleSAmJiB0aGlzLnN1cnZleS5pc0Rpc3BsYXlNb2RlO1xuICAgIHJldHVybiB0aGlzLnJlYWRPbmx5IHx8IGlzUGFyZW50UmVhZE9ubHkgfHwgaXNTdXJ2ZXlSZWFkT25seTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzSW5wdXRSZWFkT25seSgpIHtcbiAgICB2YXIgaXNEZXNpZ25Nb2RlVjIgPSBzZXR0aW5ncy5zdXBwb3J0Q3JlYXRvclYyICYmIHRoaXMuaXNEZXNpZ25Nb2RlO1xuICAgIHJldHVybiB0aGlzLmlzUmVhZE9ubHkgfHwgaXNEZXNpZ25Nb2RlVjI7XG4gIH1cbiAgcHJvdGVjdGVkIG9uUmVhZE9ubHlDaGFuZ2VkKCkge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzSW5wdXRSZWFkT25seVwiLCB0aGlzLmlzSW5wdXRSZWFkT25seSk7XG4gICAgc3VwZXIub25SZWFkT25seUNoYW5nZWQoKTtcbiAgfVxuICAvKipcbiAgICogQW4gZXhwcmVzc2lvbiB0aGF0IHJldHVybnMgdHJ1ZSBvciBmYWxzZS4gSWYgaXQgcmV0dXJucyBmYWxzZSB0aGUgUXVlc3Rpb24gYmVjb21lcyByZWFkIG9ubHkgYW5kIGFuIGVuZC11c2VyIHdpbGwgbm90IGFibGUgdG8gYW5zd2VyIG9uIHRoZSBxdXN0aW9uLiBUaGUgbGlicmFyeSBydW5zIHRoZSBleHByZXNzaW9uIG9uIHN1cnZleSBzdGFydCBhbmQgb24gY2hhbmdpbmcgYSBxdWVzdGlvbiB2YWx1ZS4gSWYgdGhlIHByb3BlcnR5IGlzIGVtcHR5IHRoZW4gcmVhZE9ubHkgcHJvcGVydHkgaXMgdXNlZC5cbiAgICogUGxlYXNlIG5vdGUsIHRoaXMgcHJvcGVydHkgaXMgaGlkZGVuIGZvciBxdWVzdGlvbiB3aXRob3V0IGlucHV0LCBmb3IgZXhhbXBsZSBodG1sIHF1ZXN0aW9uLlxuICAgKiBAc2VlIHJlYWRPbmx5XG4gICAqIEBzZWUgaXNSZWFkT25seVxuICAgKi9cbiAgcHVibGljIGdldCBlbmFibGVJZigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJlbmFibGVJZlwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGVuYWJsZUlmKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZW5hYmxlSWZcIiwgdmFsKTtcbiAgICB0aGlzLnJ1bkNvbmRpdGlvbnMoKTtcbiAgfVxuICAvKipcbiAgICogUnVuIHZpc2libGVJZiBhbmQgZW5hYmxlSWYgZXhwcmVzc2lvbnMuIElmIHZpc2libGVJZiBvci9hbmQgZW5hYmxlZElmIGFyZSBub3QgZW1wdHksIHRoZW4gdGhlIHJlc3VsdHMgb2YgcGVyZm9ybWluZyB0aGUgZXhwcmVzc2lvbiAodHJ1ZSBvciBmYWxzZSkgc2V0IHRvIHRoZSB2aXNpYmxlL3JlYWRPbmx5IHByb3BlcnRpZXMuXG4gICAqIEBwYXJhbSB2YWx1ZXMgVHlwaWNhbGx5IHN1cnZleSByZXN1bHRzXG4gICAqIEBzZWUgdmlzaWJsZVxuICAgKiBAc2VlIHZpc2libGVJZlxuICAgKiBAc2VlIHJlYWRPbmx5XG4gICAqIEBzZWUgZW5hYmxlSWZcbiAgICovXG4gIHB1YmxpYyBydW5Db25kaXRpb24odmFsdWVzOiBIYXNoVGFibGU8YW55PiwgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4pIHtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHJldHVybjtcbiAgICBpZiAoIXByb3BlcnRpZXMpIHByb3BlcnRpZXMgPSB7fTtcbiAgICBwcm9wZXJ0aWVzW1wicXVlc3Rpb25cIl0gPSB0aGlzO1xuICAgIGlmICghdGhpcy5hcmVJbnZpc2libGVFbGVtZW50c1Nob3dpbmcpIHtcbiAgICAgIHRoaXMucnVuVmlzaWJsZUlmQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgfVxuICAgIHRoaXMucnVuRW5hYmxlSWZDb25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICB0aGlzLnJ1blJlcXVpcmVkSWZDb25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgfVxuICBwcml2YXRlIHJ1blZpc2libGVJZkNvbmRpdGlvbihcbiAgICB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+XG4gICkge1xuICAgIGlmICghdGhpcy52aXNpYmxlSWYpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuY29uZGl0aW9uUnVubmVyKVxuICAgICAgdGhpcy5jb25kaXRpb25SdW5uZXIgPSBuZXcgQ29uZGl0aW9uUnVubmVyKHRoaXMudmlzaWJsZUlmKTtcbiAgICB0aGlzLmNvbmRpdGlvblJ1bm5lci5leHByZXNzaW9uID0gdGhpcy52aXNpYmxlSWY7XG4gICAgdGhpcy5jb25kaXRpb25SdW5uZXIub25SdW5Db21wbGV0ZSA9IChyZXM6IGJvb2xlYW4pID0+IHtcbiAgICAgIHRoaXMudmlzaWJsZSA9IHJlcztcbiAgICB9O1xuICAgIHRoaXMuY29uZGl0aW9uUnVubmVyLnJ1bih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICB9XG4gIHByaXZhdGUgcnVuRW5hYmxlSWZDb25kaXRpb24oXG4gICAgdmFsdWVzOiBIYXNoVGFibGU8YW55PixcbiAgICBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PlxuICApIHtcbiAgICBpZiAoIXRoaXMuZW5hYmxlSWYpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuY29uZGl0aW9uRW5hYmVsUnVubmVyKVxuICAgICAgdGhpcy5jb25kaXRpb25FbmFiZWxSdW5uZXIgPSBuZXcgQ29uZGl0aW9uUnVubmVyKHRoaXMuZW5hYmxlSWYpO1xuICAgIHRoaXMuY29uZGl0aW9uRW5hYmVsUnVubmVyLmV4cHJlc3Npb24gPSB0aGlzLmVuYWJsZUlmO1xuICAgIHRoaXMuY29uZGl0aW9uRW5hYmVsUnVubmVyLm9uUnVuQ29tcGxldGUgPSAocmVzOiBib29sZWFuKSA9PiB7XG4gICAgICB0aGlzLnJlYWRPbmx5ID0gIXJlcztcbiAgICB9O1xuICAgIHRoaXMuY29uZGl0aW9uRW5hYmVsUnVubmVyLnJ1bih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICB9XG4gIHByaXZhdGUgcnVuUmVxdWlyZWRJZkNvbmRpdGlvbihcbiAgICB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+XG4gICkge1xuICAgIGlmICghdGhpcy5yZXF1aXJlZElmKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmNvbmRpdGlvblJlcXVpcmVkUnVubmVyKVxuICAgICAgdGhpcy5jb25kaXRpb25SZXF1aXJlZFJ1bm5lciA9IG5ldyBDb25kaXRpb25SdW5uZXIodGhpcy5yZXF1aXJlZElmKTtcbiAgICB0aGlzLmNvbmRpdGlvblJlcXVpcmVkUnVubmVyLmV4cHJlc3Npb24gPSB0aGlzLnJlcXVpcmVkSWY7XG4gICAgdGhpcy5jb25kaXRpb25SZXF1aXJlZFJ1bm5lci5vblJ1bkNvbXBsZXRlID0gKHJlczogYm9vbGVhbikgPT4ge1xuICAgICAgdGhpcy5pc1JlcXVpcmVkID0gcmVzO1xuICAgIH07XG4gICAgdGhpcy5jb25kaXRpb25SZXF1aXJlZFJ1bm5lci5ydW4odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgfVxuICAvKipcbiAgICogVGhlIHByb3BlcnR5IHJldHVybnMgdGhlIHF1ZXN0aW9uIG51bWJlci4gSWYgcXVlc3Rpb24gaXMgaW52aXNpYmxlIHRoZW4gaXQgcmV0dXJucyBlbXB0eSBzdHJpbmcuXG4gICAqIElmIHZpc2libGVJbmRleCBpcyAxLCB0aGVuIG5vIGlzIDIsIG9yICdCJyBpZiBzdXJ2ZXkucXVlc3Rpb25TdGFydEluZGV4IGlzICdBJy5cbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5xdWVzdGlvblN0YXJ0SW5kZXhcbiAgICovXG4gIHB1YmxpYyBnZXQgbm8oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibm9cIik7XG4gIH1cbiAgcHJpdmF0ZSBjYWxjTm8oKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuaGFzVGl0bGUgfHwgdGhpcy5oaWRlTnVtYmVyKSByZXR1cm4gXCJcIjtcbiAgICB2YXIgbm8gPSBIZWxwZXJzLmdldE51bWJlckJ5SW5kZXgodGhpcy52aXNpYmxlSW5kZXgsIHRoaXMuZ2V0U3RhcnRJbmRleCgpKTtcbiAgICBpZiAoISF0aGlzLnN1cnZleSkge1xuICAgICAgbm8gPSB0aGlzLnN1cnZleS5nZXRVcGRhdGVkUXVlc3Rpb25Obyh0aGlzLCBubyk7XG4gICAgfVxuICAgIHJldHVybiBubztcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhcnRJbmRleCgpOiBzdHJpbmcge1xuICAgIGlmICghIXRoaXMucGFyZW50KSByZXR1cm4gdGhpcy5wYXJlbnQuZ2V0UXVlc3Rpb25TdGFydEluZGV4KCk7XG4gICAgaWYgKCEhdGhpcy5zdXJ2ZXkpIHJldHVybiB0aGlzLnN1cnZleS5xdWVzdGlvblN0YXJ0SW5kZXg7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbiAgcHVibGljIG9uU3VydmV5TG9hZCgpIHtcbiAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnN1cnZleUxvYWRDYWxsYmFjayk7XG4gICAgdGhpcy51cGRhdGVWYWx1ZVdpdGhEZWZhdWx0cygpO1xuICB9XG4gIHByb3RlY3RlZCBvblNldERhdGEoKSB7XG4gICAgc3VwZXIub25TZXREYXRhKCk7XG4gICAgaWYgKCF0aGlzLnN1cnZleSkgcmV0dXJuO1xuICAgIHRoaXMuaW5pdERhdGFGcm9tU3VydmV5KCk7XG4gICAgdGhpcy5vblN1cnZleVZhbHVlQ2hhbmdlZCh0aGlzLnZhbHVlKTtcbiAgICB0aGlzLnVwZGF0ZVZhbHVlV2l0aERlZmF1bHRzKCk7XG4gICAgdGhpcy5vbkluZGVudENoYW5nZWQoKTtcbiAgICB0aGlzLnVwZGF0ZVF1ZXN0aW9uQ3NzKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGluaXREYXRhRnJvbVN1cnZleSgpIHtcbiAgICBpZiAoISF0aGlzLmRhdGEpIHtcbiAgICAgIHRoaXMudXBkYXRlVmFsdWVGcm9tU3VydmV5KHRoaXMuZGF0YS5nZXRWYWx1ZSh0aGlzLmdldFZhbHVlTmFtZSgpKSk7XG4gICAgICB0aGlzLmluaXRDb21tZW50RnJvbVN1cnZleSgpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgaW5pdENvbW1lbnRGcm9tU3VydmV5KCkge1xuICAgIGlmICghIXRoaXMuZGF0YSAmJiB0aGlzLnJlcXVpcmVVcGRhdGVDb21tZW50VmFsdWUpIHtcbiAgICAgIHRoaXMudXBkYXRlQ29tbWVudEZyb21TdXJ2ZXkodGhpcy5kYXRhLmdldENvbW1lbnQodGhpcy5nZXRWYWx1ZU5hbWUoKSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwZGF0ZUNvbW1lbnRGcm9tU3VydmV5KFwiXCIpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgcnVuRXhwcmVzc2lvbihleHByZXNzaW9uOiBzdHJpbmcpOiBhbnkge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkgfHwgIWV4cHJlc3Npb24pIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5LnJ1bkV4cHJlc3Npb24oZXhwcmVzc2lvbik7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgcXVlc3Rpb25WYWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ2YWx1ZVwiKTtcbiAgfVxuICBwcml2YXRlIHNldCBxdWVzdGlvblZhbHVlKHZhbDogYW55KSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidmFsdWVcIiwgdmFsKTtcbiAgfVxuICBwcml2YXRlIGdldCBxdWVzdGlvbkNvbW1lbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY29tbWVudFwiKTtcbiAgfVxuICBwcml2YXRlIHNldCBxdWVzdGlvbkNvbW1lbnQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjb21tZW50XCIsIHZhbCk7XG4gICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5jb21tZW50Q2hhbmdlZENhbGxiYWNrKTtcbiAgfVxuICAvKipcbiAgICogR2V0L1NldCB0aGUgcXVlc3Rpb24gdmFsdWUuXG4gICAqIEBzZWUgU3VydmV5TW9kZS5zZXRWYWx1ZVxuICAgKiBAc2VlIFN1cnZleU1vZGUuZ2V0VmFsdWVcbiAgICovXG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZUNvcmUoKTtcbiAgfVxuICBwdWJsaWMgc2V0IHZhbHVlKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnNldE5ld1ZhbHVlKG5ld1ZhbHVlKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHZhbHVlRm9yU3VydmV5KCk6IGFueSB7XG4gICAgaWYgKCEhdGhpcy52YWx1ZVRvRGF0YUNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWx1ZVRvRGF0YUNhbGxiYWNrKHRoaXMudmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgfVxuICAvKipcbiAgICogQ2xlYXIgdGhlIHF1ZXN0aW9uIHZhbHVlLiBJdCBjbGVhcnMgdGhlIHF1ZXN0aW9uIGNvbW1lbnQgYXMgd2VsbC5cbiAgICovXG4gIHB1YmxpYyBjbGVhclZhbHVlKCkge1xuICAgIGlmICh0aGlzLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRoaXMuY29tbWVudCA9IHVuZGVmaW5lZDtcbiAgfVxuICBwdWJsaWMgdW5iaW5kVmFsdWUoKSB7XG4gICAgdGhpcy5jbGVhclZhbHVlKCk7XG4gIH1cbiAgcHVibGljIGNyZWF0ZVZhbHVlQ29weSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldFVuYmluZFZhbHVlKHRoaXMudmFsdWUpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRVbmJpbmRWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHRoaXMuaXNWYWx1ZVN1cnZleUVsZW1lbnQodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgcmV0dXJuIEhlbHBlcnMuZ2V0VW5iaW5kVmFsdWUodmFsdWUpO1xuICB9XG4gIHByb3RlY3RlZCBpc1ZhbHVlU3VydmV5RWxlbWVudCh2YWw6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghdmFsKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSlcbiAgICAgIHJldHVybiB2YWwubGVuZ3RoID4gMCA/IHRoaXMuaXNWYWx1ZVN1cnZleUVsZW1lbnQodmFsWzBdKSA6IGZhbHNlO1xuICAgIHJldHVybiAhIXZhbC5nZXRUeXBlICYmICEhdmFsLm9uUHJvcGVydHlDaGFuZ2VkO1xuICB9XG4gIHByaXZhdGUgY2FuQ2xlYXJWYWx1ZUFzSW52aXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzVmlzaWJsZSAmJiB0aGlzLmlzUGFyZW50VmlzaWJsZSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghIXRoaXMucGFnZSAmJiB0aGlzLnBhZ2UuaXNTdGFydGVkKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCF0aGlzLnN1cnZleSB8fCAhdGhpcy52YWx1ZU5hbWUpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiAhdGhpcy5zdXJ2ZXkuaGFzVmlzaWJsZVF1ZXN0aW9uQnlWYWx1ZU5hbWUodGhpcy52YWx1ZU5hbWUpO1xuICB9XG4gIHByaXZhdGUgZ2V0IGlzUGFyZW50VmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG4gICAgd2hpbGUgKHBhcmVudCkge1xuICAgICAgaWYgKCFwYXJlbnQuaXNWaXNpYmxlKSByZXR1cm4gZmFsc2U7XG4gICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50O1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgY2xlYXJWYWx1ZUlmSW52aXNpYmxlKCkge1xuICAgIGlmICh0aGlzLmNhbkNsZWFyVmFsdWVBc0ludmlzaWJsZSgpKSB7XG4gICAgICB0aGlzLmNsZWFyVmFsdWUoKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCBkaXNwbGF5VmFsdWUoKTogYW55IHtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbikgcmV0dXJuIFwiXCI7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RGlzcGxheVZhbHVlKHRydWUpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHF1ZXN0aW9uIHZhbHVlIGFzIGEgZGlzcGxheSB0ZXh0LiBGb3IgZXhhbXBsZSwgZm9yIGRyb3Bkb3duLCBpdCB3b3VsZCByZXR1cm4gdGhlIGl0ZW0gdGV4dCBpbnN0ZWFkIG9mIGl0ZW0gdmFsdWUuXG4gICAqIEBwYXJhbSBrZXlzQXNUZXh0IFNldCB0aGlzIHZhbHVlIHRvIHRydWUsIHRvIHJldHVybiBrZXkgKGluIG1hdHJpY2VzIHF1ZXN0aW9ucykgYXMgZGlzcGxheSB0ZXh0IGFzIHdlbGwuXG4gICAqIEBwYXJhbSB2YWx1ZSB1c2UgdGhpcyBwYXJhbWV0ZXIsIGlmIHlvdSB3YW50IHRvIGdldCBkaXNwbGF5IHZhbHVlIGZvciB0aGlzIHZhbHVlIGFuZCBub3QgcXVlc3Rpb24udmFsdWUuIEl0IGlzIHVuZGVmaW5lZCBieSBkZWZhdWx0LlxuICAgKi9cbiAgcHVibGljIGdldERpc3BsYXlWYWx1ZShrZXlzQXNUZXh0OiBib29sZWFuLCB2YWx1ZTogYW55ID0gdW5kZWZpbmVkKTogYW55IHtcbiAgICB2YXIgcmVzID0gdGhpcy5jYWxjRGlzcGxheVZhbHVlKGtleXNBc1RleHQsIHZhbHVlKTtcbiAgICByZXR1cm4gISF0aGlzLmRpc3BsYXlWYWx1ZUNhbGxiYWNrID8gdGhpcy5kaXNwbGF5VmFsdWVDYWxsYmFjayhyZXMpIDogcmVzO1xuICB9XG4gIHByaXZhdGUgY2FsY0Rpc3BsYXlWYWx1ZShrZXlzQXNUZXh0OiBib29sZWFuLCB2YWx1ZTogYW55ID0gdW5kZWZpbmVkKTogYW55IHtcbiAgICBpZiAodGhpcy5jdXN0b21XaWRnZXQpIHtcbiAgICAgIHZhciByZXMgPSB0aGlzLmN1c3RvbVdpZGdldC5nZXREaXNwbGF5VmFsdWUodGhpcywgdmFsdWUpO1xuICAgICAgaWYgKHJlcykgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgdmFsdWUgPSB2YWx1ZSA9PSB1bmRlZmluZWQgPyB0aGlzLmNyZWF0ZVZhbHVlQ29weSgpIDogdmFsdWU7XG4gICAgaWYgKHRoaXMuaXNWYWx1ZUVtcHR5KHZhbHVlKSkgcmV0dXJuIHRoaXMuZ2V0RGlzcGxheVZhbHVlRW1wdHkoKTtcbiAgICByZXR1cm4gdGhpcy5nZXREaXNwbGF5VmFsdWVDb3JlKGtleXNBc1RleHQsIHZhbHVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RGlzcGxheVZhbHVlQ29yZShrZXlBc1RleHQ6IGJvb2xlYW4sIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RGlzcGxheVZhbHVlRW1wdHkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoZSBkZWZhdWx0IHZhbHVlIHRvIHRoZSBxdWVzdGlvbi4gSXQgd2lsbCBiZSBhc3NpZ24gdG8gdGhlIHF1ZXN0aW9uIG9uIGxvYWRpbmcgdGhlIHN1cnZleSBmcm9tIEpTT04gb3IgYWRkaW5nIGEgcXVlc3Rpb24gdG8gdGhlIHN1cnZleSBvciBvbiBzZXR0aW5nIHRoaXMgcHJvcGVydHkgb2YgdGhlIHZhbHVlIGlzIGVtcHR5LlxuICAgKiBQbGVhc2Ugbm90ZSwgdGhpcyBwcm9wZXJ0eSBpcyBoaWRkZW4gZm9yIHF1ZXN0aW9uIHdpdGhvdXQgaW5wdXQsIGZvciBleGFtcGxlIGh0bWwgcXVlc3Rpb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRlZmF1bHRWYWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJkZWZhdWx0VmFsdWVcIik7XG4gIH1cbiAgcHVibGljIHNldCBkZWZhdWx0VmFsdWUodmFsOiBhbnkpIHtcbiAgICBpZiAodGhpcy5pc1ZhbHVlRXhwcmVzc2lvbih2YWwpKSB7XG4gICAgICB0aGlzLmRlZmF1bHRWYWx1ZUV4cHJlc3Npb24gPSB2YWwuc3Vic3RyKDEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJkZWZhdWx0VmFsdWVcIiwgdGhpcy5jb252ZXJ0RGVmYXVsdFZhbHVlKHZhbCkpO1xuICAgIHRoaXMudXBkYXRlVmFsdWVXaXRoRGVmYXVsdHMoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGRlZmF1bHRWYWx1ZUV4cHJlc3Npb24oKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZGVmYXVsdFZhbHVlRXhwcmVzc2lvblwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGRlZmF1bHRWYWx1ZUV4cHJlc3Npb24odmFsOiBhbnkpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJkZWZhdWx0VmFsdWVFeHByZXNzaW9uXCIsIHZhbCk7XG4gICAgdGhpcy51cGRhdGVWYWx1ZVdpdGhEZWZhdWx0cygpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHF1ZXN0aW9uIGFuc3dlciBkYXRhIGFzIGEgcGxhaW4gb2JqZWN0OiB3aXRoIHF1ZXN0aW9uIHRpdGxlLCBuYW1lLCB2YWx1ZSBhbmQgZGlzcGxheVZhbHVlLlxuICAgKiBGb3IgY29tcGxleCBxdWVzdGlvbnMgKGxpa2UgbWF0cml4LCBldGMuKSBpc05vZGUgZmxhZyBpcyBzZXQgdG8gdHJ1ZSBhbmQgZGF0YSBjb250YWlucyBhcnJheSBvZiBuZXN0ZWQgb2JqZWN0cyAocm93cylcbiAgICogc2V0IG9wdGlvbnMuaW5jbHVkZUVtcHR5IHRvIGZhbHNlIGlmIHlvdSB3YW50IHRvIHNraXAgZW1wdHkgYW5zd2Vyc1xuICAgKi9cbiAgcHVibGljIGdldFBsYWluRGF0YShcbiAgICBvcHRpb25zOiB7XG4gICAgICBpbmNsdWRlRW1wdHk/OiBib29sZWFuO1xuICAgICAgaW5jbHVkZVF1ZXN0aW9uVHlwZXM/OiBib29sZWFuO1xuICAgICAgY2FsY3VsYXRpb25zPzogQXJyYXk8e1xuICAgICAgICBwcm9wZXJ0eU5hbWU6IHN0cmluZztcbiAgICAgIH0+O1xuICAgIH0gPSB7XG4gICAgICBpbmNsdWRlRW1wdHk6IHRydWUsXG4gICAgICBpbmNsdWRlUXVlc3Rpb25UeXBlczogZmFsc2UsXG4gICAgfVxuICApIHtcbiAgICBpZiAob3B0aW9ucy5pbmNsdWRlRW1wdHkgfHwgIXRoaXMuaXNFbXB0eSgpKSB7XG4gICAgICB2YXIgcXVlc3Rpb25QbGFpbkRhdGEgPSA8YW55PntcbiAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICB0aXRsZTogdGhpcy5sb2NUaXRsZS5yZW5kZXJlZEh0bWwsXG4gICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICBkaXNwbGF5VmFsdWU6IHRoaXMuZGlzcGxheVZhbHVlLFxuICAgICAgICBpc05vZGU6IGZhbHNlLFxuICAgICAgICBnZXRTdHJpbmc6ICh2YWw6IGFueSkgPT5cbiAgICAgICAgICB0eXBlb2YgdmFsID09PSBcIm9iamVjdFwiID8gSlNPTi5zdHJpbmdpZnkodmFsKSA6IHZhbCxcbiAgICAgIH07XG4gICAgICBpZiAob3B0aW9ucy5pbmNsdWRlUXVlc3Rpb25UeXBlcyA9PT0gdHJ1ZSkge1xuICAgICAgICBxdWVzdGlvblBsYWluRGF0YS5xdWVzdGlvblR5cGUgPSB0aGlzLmdldFR5cGUoKTtcbiAgICAgIH1cbiAgICAgIChvcHRpb25zLmNhbGN1bGF0aW9ucyB8fCBbXSkuZm9yRWFjaCgoY2FsY3VsYXRpb24pID0+IHtcbiAgICAgICAgcXVlc3Rpb25QbGFpbkRhdGFbY2FsY3VsYXRpb24ucHJvcGVydHlOYW1lXSA9IHRoaXNbXG4gICAgICAgICAgY2FsY3VsYXRpb24ucHJvcGVydHlOYW1lXG4gICAgICAgIF07XG4gICAgICB9KTtcbiAgICAgIGlmICh0aGlzLmhhc0NvbW1lbnQpIHtcbiAgICAgICAgcXVlc3Rpb25QbGFpbkRhdGEuaXNOb2RlID0gdHJ1ZTtcbiAgICAgICAgcXVlc3Rpb25QbGFpbkRhdGEuZGF0YSA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAwLFxuICAgICAgICAgICAgaXNDb21tZW50OiB0cnVlLFxuICAgICAgICAgICAgdGl0bGU6IFwiQ29tbWVudFwiLFxuICAgICAgICAgICAgdmFsdWU6IHNldHRpbmdzLmNvbW1lbnRQcmVmaXgsXG4gICAgICAgICAgICBkaXNwbGF5VmFsdWU6IHRoaXMuY29tbWVudCxcbiAgICAgICAgICAgIGdldFN0cmluZzogKHZhbDogYW55KSA9PlxuICAgICAgICAgICAgICB0eXBlb2YgdmFsID09PSBcIm9iamVjdFwiID8gSlNPTi5zdHJpbmdpZnkodmFsKSA6IHZhbCxcbiAgICAgICAgICAgIGlzTm9kZTogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBxdWVzdGlvblBsYWluRGF0YTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICAvKipcbiAgICogVGhlIGNvcnJlY3QgYW5zd2VyIG9uIHRoZSBxdWVzdGlvbi4gU2V0IHRoaXMgdmFsdWUgaWYgeW91IGFyZSBkb2luZyBhIHF1aXouXG4gICAqIFBsZWFzZSBub3RlLCB0aGlzIHByb3BlcnR5IGlzIGhpZGRlbiBmb3IgcXVlc3Rpb24gd2l0aG91dCBpbnB1dCwgZm9yIGV4YW1wbGUgaHRtbCBxdWVzdGlvbi5cbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5jb3JyZWN0QW5zd2Vyc1xuICAgKiBAc2VlIFN1cnZleU1vZGVsLmluQ29ycmVjdEFuc3dlcnNcbiAgICovXG4gIHB1YmxpYyBnZXQgY29ycmVjdEFuc3dlcigpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjb3JyZWN0QW5zd2VyXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY29ycmVjdEFuc3dlcih2YWw6IGFueSkge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNvcnJlY3RBbnN3ZXJcIiwgdGhpcy5jb252ZXJ0RGVmYXVsdFZhbHVlKHZhbCkpO1xuICB9XG4gIHByb3RlY3RlZCBjb252ZXJ0RGVmYXVsdFZhbHVlKHZhbDogYW55KTogYW55IHtcbiAgICByZXR1cm4gdmFsO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHF1ZXN0aW9ucyBjb3VudDogMSBmb3IgdGhlIG5vbi1tYXRyaXggcXVlc3Rpb25zIGFuZCBhbGwgaW5uZXIgdmlzaWJsZSBxdWVzdGlvbnMgdGhhdCBoYXMgaW5wdXQocykgd2lkZ2V0cyBmb3IgcXVlc3Rpb24gb2YgbWF0cml4IHR5cGVzLlxuICAgKiBAc2VlIGdldFF1aXpRdWVzdGlvbnNcbiAgICovXG4gIHB1YmxpYyBnZXQgcXVpelF1ZXN0aW9uQ291bnQoKTogbnVtYmVyIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmlzVmlzaWJsZSAmJlxuICAgICAgdGhpcy5oYXNJbnB1dCAmJlxuICAgICAgIXRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMuY29ycmVjdEFuc3dlcilcbiAgICApXG4gICAgICByZXR1cm4gdGhpcy5nZXRRdWl6UXVlc3Rpb25Db3VudCgpO1xuICAgIHJldHVybiAwO1xuICB9XG4gIHB1YmxpYyBnZXQgY29ycmVjdEFuc3dlckNvdW50KCk6IG51bWJlciB7XG4gICAgaWYgKCF0aGlzLmlzRW1wdHkoKSAmJiAhdGhpcy5pc1ZhbHVlRW1wdHkodGhpcy5jb3JyZWN0QW5zd2VyKSlcbiAgICAgIHJldHVybiB0aGlzLmdldENvcnJlY3RBbnN3ZXJDb3VudCgpO1xuICAgIHJldHVybiAwO1xuICB9XG4gIHByb3RlY3RlZCBnZXRRdWl6UXVlc3Rpb25Db3VudCgpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q29ycmVjdEFuc3dlckNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaXNUd29WYWx1ZUVxdWFscyh0aGlzLnZhbHVlLCB0aGlzLmNvcnJlY3RBbnN3ZXIsIHRydWUsIHRydWUpXG4gICAgICA/IDFcbiAgICAgIDogMDtcbiAgfVxuICBwdWJsaWMgaXNBbnN3ZXJDb3JyZWN0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvcnJlY3RBbnN3ZXJDb3VudCA9PSB0aGlzLnF1aXpRdWVzdGlvbkNvdW50O1xuICB9XG4gIHB1YmxpYyB1cGRhdGVWYWx1ZVdpdGhEZWZhdWx0cygpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmlzTG9hZGluZ0Zyb21Kc29uIHx8XG4gICAgICAoIXRoaXMuaXNEZXNpZ25Nb2RlICYmIHRoaXMuaXNEZWZhdWx0VmFsdWVFbXB0eSgpKVxuICAgIClcbiAgICAgIHJldHVybjtcbiAgICBpZiAoIXRoaXMuaXNEZXNpZ25Nb2RlICYmICF0aGlzLmlzRW1wdHkoKSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmlzRW1wdHkoKSAmJiB0aGlzLmlzRGVmYXVsdFZhbHVlRW1wdHkoKSkgcmV0dXJuO1xuICAgIGlmICghIXRoaXMuc3VydmV5ICYmIHRoaXMuc3VydmV5LmlzQ2xlYXJWYWx1ZU9uSGlkZGVuICYmICF0aGlzLmlzVmlzaWJsZSlcbiAgICAgIHJldHVybjtcbiAgICB0aGlzLnNldERlZmF1bHRWYWx1ZSgpO1xuICB9XG4gIGdldFF1ZXN0aW9uRnJvbUFycmF5KG5hbWU6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IElRdWVzdGlvbiB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHVibGljIGdldERlZmF1bHRWYWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmRlZmF1bHRWYWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgaXNEZWZhdWx0VmFsdWVFbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuZGVmYXVsdFZhbHVlRXhwcmVzc2lvbiAmJiB0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLmRlZmF1bHRWYWx1ZSk7XG4gIH1cbiAgcHJvdGVjdGVkIHNldERlZmF1bHRWYWx1ZSgpIHtcbiAgICB0aGlzLnNldFZhbHVlQW5kUnVuRXhwcmVzc2lvbihcbiAgICAgIHRoaXMuZGVmYXVsdFZhbHVlRXhwcmVzc2lvbixcbiAgICAgIHRoaXMuZ2V0VW5iaW5kVmFsdWUodGhpcy5kZWZhdWx0VmFsdWUpLFxuICAgICAgKHZhbCkgPT4ge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsO1xuICAgICAgfVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGlzVmFsdWVFeHByZXNzaW9uKHZhbDogYW55KSB7XG4gICAgcmV0dXJuICEhdmFsICYmIHR5cGVvZiB2YWwgPT0gXCJzdHJpbmdcIiAmJiB2YWwubGVuZ3RoID4gMCAmJiB2YWxbMF0gPT0gXCI9XCI7XG4gIH1cbiAgcHJvdGVjdGVkIHNldFZhbHVlQW5kUnVuRXhwcmVzc2lvbihcbiAgICBleHByZXNzaW9uOiBzdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlOiBhbnksXG4gICAgc2V0RnVuYzogKHZhbDogYW55KSA9PiB2b2lkLFxuICAgIHZhbHVlczogSGFzaFRhYmxlPGFueT4gPSBudWxsLFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+ID0gbnVsbFxuICApIHtcbiAgICB2YXIgZnVuYyA9ICh2YWw6IGFueSkgPT4ge1xuICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgdmFsID0gdmFsLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwgMTApO1xuICAgICAgfVxuICAgICAgc2V0RnVuYyh2YWwpO1xuICAgIH07XG4gICAgaWYgKCEhZXhwcmVzc2lvbiAmJiAhIXRoaXMuZGF0YSkge1xuICAgICAgaWYgKCF2YWx1ZXMpIHZhbHVlcyA9IHRoaXMuZGF0YS5nZXRGaWx0ZXJlZFZhbHVlcygpO1xuICAgICAgaWYgKCFwcm9wZXJ0aWVzKSBwcm9wZXJ0aWVzID0gdGhpcy5kYXRhLmdldEZpbHRlcmVkUHJvcGVydGllcygpO1xuICAgICAgdmFyIHJ1bm5lciA9IG5ldyBFeHByZXNzaW9uUnVubmVyKGV4cHJlc3Npb24pO1xuICAgICAgaWYgKHJ1bm5lci5jYW5SdW4pIHtcbiAgICAgICAgcnVubmVyLm9uUnVuQ29tcGxldGUgPSAocmVzKSA9PiB7XG4gICAgICAgICAgaWYgKHJlcyA9PSB1bmRlZmluZWQpIHJlcyA9IHRoaXMuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgIGZ1bmMocmVzKTtcbiAgICAgICAgfTtcbiAgICAgICAgcnVubmVyLnJ1bih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmdW5jKGRlZmF1bHRWYWx1ZSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBUaGUgcXVlc3Rpb24gY29tbWVudCB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgY29tbWVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFF1ZXN0aW9uQ29tbWVudCgpO1xuICB9XG4gIHB1YmxpYyBzZXQgY29tbWVudChuZXdWYWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKCEhbmV3VmFsdWUpIHtcbiAgICAgIG5ld1ZhbHVlID0gbmV3VmFsdWUudG9TdHJpbmcoKS50cmltKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbW1lbnQgPT0gbmV3VmFsdWUpIHJldHVybjtcbiAgICB0aGlzLnNldFF1ZXN0aW9uQ29tbWVudChuZXdWYWx1ZSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFF1ZXN0aW9uQ29tbWVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQ29tbWVudDtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0UXVlc3Rpb25Db21tZW50KG5ld1ZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldE5ld0NvbW1lbnQobmV3VmFsdWUpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHF1ZXN0aW9uIHZhbHVlIGlzIGVtcHR5XG4gICAqL1xuICBwdWJsaWMgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbHVlRW1wdHkodGhpcy52YWx1ZSk7XG4gIH1cbiAgcHVibGljIGdldCBpc0Fuc3dlcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc0Fuc3dlcmVkXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgaXNBbnN3ZXJlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc0Fuc3dlcmVkXCIsIHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIHVwZGF0ZUlzQW5zd2VyZWQoKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNBbnN3ZXJlZFwiLCB0aGlzLmdldElzQW5zd2VyZWQoKSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldElzQW5zd2VyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmlzRW1wdHkoKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgcXVlc3Rpb24gdmFsaWRhdG9ycy5cbiAgICogUGxlYXNlIG5vdGUsIHRoaXMgcHJvcGVydHkgaXMgaGlkZGVuIGZvciBxdWVzdGlvbiB3aXRob3V0IGlucHV0LCBmb3IgZXhhbXBsZSBodG1sIHF1ZXN0aW9uLlxuICAgKi9cbiAgcHVibGljIGdldCB2YWxpZGF0b3JzKCk6IEFycmF5PFN1cnZleVZhbGlkYXRvcj4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ2YWxpZGF0b3JzXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdmFsaWRhdG9ycyh2YWw6IEFycmF5PFN1cnZleVZhbGlkYXRvcj4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ2YWxpZGF0b3JzXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldFZhbGlkYXRvcnMoKTogQXJyYXk8U3VydmV5VmFsaWRhdG9yPiB7XG4gICAgcmV0dXJuIHRoaXMudmFsaWRhdG9ycztcbiAgfVxuICBwdWJsaWMgZ2V0U3VwcG9ydGVkVmFsaWRhdG9ycygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICB2YXIgcmVzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgdmFyIGNsYXNzTmFtZSA9IHRoaXMuZ2V0VHlwZSgpO1xuICAgIHdoaWxlICghIWNsYXNzTmFtZSkge1xuICAgICAgdmFyIGNsYXNzVmFsaWRhdG9ycyA9ICg8YW55PnNldHRpbmdzLnN1cHBvcnRlZFZhbGlkYXRvcnMpW2NsYXNzTmFtZV07XG4gICAgICBpZiAoISFjbGFzc1ZhbGlkYXRvcnMpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IGNsYXNzVmFsaWRhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIHJlcy5zcGxpY2UoMCwgMCwgY2xhc3NWYWxpZGF0b3JzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIGNsYXNzSW5mbyA9IFNlcmlhbGl6ZXIuZmluZENsYXNzKGNsYXNzTmFtZSk7XG4gICAgICBjbGFzc05hbWUgPSBjbGFzc0luZm8ucGFyZW50TmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIGFkZFN1cHBvcnRlZFZhbGlkYXRvcnMoXG4gICAgc3VwcG9ydGVkVmFsaWRhdG9yczogQXJyYXk8c3RyaW5nPixcbiAgICBjbGFzc1ZhbGlkYXRvcnM6IEFycmF5PHN0cmluZz5cbiAgKSB7fVxuICBwdWJsaWMgYWRkQ29uZGl0aW9uT2JqZWN0c0J5Q29udGV4dChcbiAgICBvYmplY3RzOiBBcnJheTxJQ29uZGl0aW9uT2JqZWN0PixcbiAgICBjb250ZXh0OiBhbnlcbiAgKSB7XG4gICAgb2JqZWN0cy5wdXNoKHtcbiAgICAgIG5hbWU6IHRoaXMuZ2V0VmFsdWVOYW1lKCksXG4gICAgICB0ZXh0OiB0aGlzLnByb2Nlc3NlZFRpdGxlLFxuICAgICAgcXVlc3Rpb246IHRoaXMsXG4gICAgfSk7XG4gIH1cbiAgcHVibGljIGdldENvbmRpdGlvbkpzb24ob3BlcmF0b3I6IHN0cmluZyA9IG51bGwsIHBhdGg6IHN0cmluZyA9IG51bGwpOiBhbnkge1xuICAgIHZhciBqc29uID0gbmV3IEpzb25PYmplY3QoKS50b0pzb25PYmplY3QodGhpcyk7XG4gICAganNvbltcInR5cGVcIl0gPSB0aGlzLmdldFR5cGUoKTtcbiAgICByZXR1cm4ganNvbjtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGEgdmFsaWRhdGlvbiBlcnJvcihzKSBpbiB0aGUgcXVlc3Rpb24uXG4gICAqIEBwYXJhbSBmaXJlQ2FsbGJhY2sgc2V0IGl0IHRvIHRydWUgdG8gc2hvdyBhbiBlcnJvciBpbiBVSS5cbiAgICovXG4gIHB1YmxpYyBoYXNFcnJvcnMoZmlyZUNhbGxiYWNrOiBib29sZWFuID0gdHJ1ZSwgcmVjOiBhbnkgPSBudWxsKTogYm9vbGVhbiB7XG4gICAgdmFyIG9sZEhhc0Vycm9ycyA9IHRoaXMuZXJyb3JzLmxlbmd0aCA+IDA7XG4gICAgdmFyIGVycm9ycyA9IHRoaXMuY2hlY2tGb3JFcnJvcnMoISFyZWMgJiYgcmVjLmlzT25WYWx1ZUNoYW5nZWQgPT09IHRydWUpO1xuICAgIGlmIChmaXJlQ2FsbGJhY2spIHtcbiAgICAgIGlmICghIXRoaXMuc3VydmV5KSB7XG4gICAgICAgIHRoaXMuc3VydmV5LmJlZm9yZVNldHRpbmdRdWVzdGlvbkVycm9ycyh0aGlzLCBlcnJvcnMpO1xuICAgICAgfVxuICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnM7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlQ29udGFpbnNFcnJvcnMoKTtcbiAgICBpZiAob2xkSGFzRXJyb3JzICE9IGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnVwZGF0ZVF1ZXN0aW9uQ3NzKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzQ29sbGFwc2VkICYmIHJlYyAmJiBmaXJlQ2FsbGJhY2sgJiYgZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZXhwYW5kKCk7XG4gICAgfVxuICAgIHJldHVybiBlcnJvcnMubGVuZ3RoID4gMDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdmFsaWRhdGlvbiBlcnJvcnMgY291bnQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGN1cnJlbnRFcnJvckNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZXJyb3JzLmxlbmd0aDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY2hhci9zdHJpbmcgZm9yIGEgcmVxdWlyZWQgcXVlc3Rpb24uXG4gICAqIEBzZWUgU3VydmV5TW9kZWwucmVxdWlyZWRUZXh0XG4gICAqL1xuICBwdWJsaWMgZ2V0IHJlcXVpcmVkVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleSAhPSBudWxsICYmIHRoaXMuaXNSZXF1aXJlZFxuICAgICAgPyB0aGlzLnN1cnZleS5yZXF1aXJlZFRleHRcbiAgICAgIDogXCJcIjtcbiAgfVxuICAvKipcbiAgICogQWRkIGVycm9yIGludG8gdGhlIHF1ZXN0aW9uIGVycm9yIGxpc3QuXG4gICAqIEBwYXJhbSBlcnJvclxuICAgKi9cbiAgcHVibGljIGFkZEVycm9yKGVycm9yOiBTdXJ2ZXlFcnJvciB8IHN0cmluZykge1xuICAgIGlmICghZXJyb3IpIHJldHVybjtcbiAgICBsZXQgbmV3RXJyb3I6IFN1cnZleUVycm9yID0gbnVsbDtcbiAgICBpZiAodHlwZW9mIGVycm9yID09PSBcInN0cmluZ1wiIHx8IGVycm9yIGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgICBuZXdFcnJvciA9IG5ldyBDdXN0b21FcnJvcig8c3RyaW5nPmVycm9yLCB0aGlzLnN1cnZleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0Vycm9yID0gPFN1cnZleUVycm9yPmVycm9yO1xuICAgIH1cbiAgICB0aGlzLmVycm9ycy5wdXNoKG5ld0Vycm9yKTtcbiAgfVxuICAvKipcbiAgICogUmVtb3ZlIGEgcGFydGljdWxhciBlcnJvciBmcm9tIHRoZSBxdWVzdGlvbiBlcnJvciBsaXN0LlxuICAgKiBAcGFyYW0gZXJyb3JcbiAgICovXG4gIHB1YmxpYyByZW1vdmVFcnJvcihlcnJvcjogU3VydmV5RXJyb3IpIHtcbiAgICB2YXIgZXJyb3JzID0gdGhpcy5lcnJvcnM7XG4gICAgdmFyIGluZGV4ID0gZXJyb3JzLmluZGV4T2YoZXJyb3IpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIGVycm9ycy5zcGxpY2UoaW5kZXgsIDEpO1xuICB9XG4gIHByaXZhdGUgY2hlY2tGb3JFcnJvcnMoaXNPblZhbHVlQ2hhbmdlZDogYm9vbGVhbik6IEFycmF5PFN1cnZleUVycm9yPiB7XG4gICAgdmFyIHFFcnJvcnMgPSBuZXcgQXJyYXk8U3VydmV5RXJyb3I+KCk7XG4gICAgaWYgKHRoaXMuaXNWaXNpYmxlICYmICF0aGlzLmlzUmVhZE9ubHkpIHtcbiAgICAgIHRoaXMuY29sbGVjdEVycm9ycyhxRXJyb3JzLCBpc09uVmFsdWVDaGFuZ2VkKTtcbiAgICB9XG4gICAgcmV0dXJuIHFFcnJvcnM7XG4gIH1cbiAgcHJpdmF0ZSBjb2xsZWN0RXJyb3JzKFxuICAgIHFFcnJvcnM6IEFycmF5PFN1cnZleUVycm9yPixcbiAgICBpc09uVmFsdWVDaGFuZ2VkOiBib29sZWFuXG4gICkge1xuICAgIHRoaXMub25DaGVja0ZvckVycm9ycyhxRXJyb3JzLCBpc09uVmFsdWVDaGFuZ2VkKTtcbiAgICBpZiAocUVycm9ycy5sZW5ndGggPiAwIHx8ICF0aGlzLmNhblJ1blZhbGlkYXRvcnMoaXNPblZhbHVlQ2hhbmdlZCkpIHJldHVybjtcbiAgICB2YXIgZXJyb3JzID0gdGhpcy5ydW5WYWxpZGF0b3JzKCk7XG4gICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAvL3ZhbGlkYXRvcnMgbWF5IGNoYW5nZSB0aGUgcXVlc3Rpb24gdmFsdWUuXG4gICAgICBxRXJyb3JzLmxlbmd0aCA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVycm9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBxRXJyb3JzLnB1c2goZXJyb3JzW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuc3VydmV5ICYmIHFFcnJvcnMubGVuZ3RoID09IDApIHtcbiAgICAgIHZhciBlcnJvciA9IHRoaXMuZmlyZVN1cnZleVZhbGlkYXRpb24oKTtcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICBxRXJyb3JzLnB1c2goZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY2FuUnVuVmFsaWRhdG9ycyhpc09uVmFsdWVDaGFuZ2VkOiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJpdmF0ZSBmaXJlU3VydmV5VmFsaWRhdGlvbigpOiBTdXJ2ZXlFcnJvciB7XG4gICAgaWYgKHRoaXMudmFsaWRhdGVWYWx1ZUNhbGxiYWNrKSByZXR1cm4gdGhpcy52YWxpZGF0ZVZhbHVlQ2FsbGJhY2soKTtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkgPyB0aGlzLnN1cnZleS52YWxpZGF0ZVF1ZXN0aW9uKHRoaXMpIDogbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgb25DaGVja0ZvckVycm9ycyhcbiAgICBlcnJvcnM6IEFycmF5PFN1cnZleUVycm9yPixcbiAgICBpc09uVmFsdWVDaGFuZ2VkOiBib29sZWFuXG4gICkge1xuICAgIGlmICghaXNPblZhbHVlQ2hhbmdlZCAmJiB0aGlzLmhhc1JlcXVpcmVkRXJyb3IoKSkge1xuICAgICAgZXJyb3JzLnB1c2gobmV3IEFuc3dlclJlcXVpcmVkRXJyb3IodGhpcy5yZXF1aXJlZEVycm9yVGV4dCwgdGhpcykpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgaGFzUmVxdWlyZWRFcnJvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1JlcXVpcmVkICYmIHRoaXMuaXNFbXB0eSgpO1xuICB9XG4gIHByaXZhdGUgdmFsaWRhdG9yUnVubmVyOiBWYWxpZGF0b3JSdW5uZXI7XG4gIHByaXZhdGUgaXNSdW5uaW5nVmFsaWRhdG9yc1ZhbHVlID0gZmFsc2U7XG4gIHB1YmxpYyBvbkNvbXBsZXRlZEFzeW5jVmFsaWRhdG9yczogKGhhc0Vycm9yczogYm9vbGVhbikgPT4gdm9pZDtcbiAgcHVibGljIGdldCBpc1J1bm5pbmdWYWxpZGF0b3JzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldElzUnVubmluZ1ZhbGlkYXRvcnMoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0SXNSdW5uaW5nVmFsaWRhdG9ycygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1J1bm5pbmdWYWxpZGF0b3JzVmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIHJ1blZhbGlkYXRvcnMoKTogQXJyYXk8U3VydmV5RXJyb3I+IHtcbiAgICBpZiAoISF0aGlzLnZhbGlkYXRvclJ1bm5lcikge1xuICAgICAgdGhpcy52YWxpZGF0b3JSdW5uZXIub25Bc3luY0NvbXBsZXRlZCA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMudmFsaWRhdG9yUnVubmVyID0gbmV3IFZhbGlkYXRvclJ1bm5lcigpO1xuICAgIHRoaXMuaXNSdW5uaW5nVmFsaWRhdG9yc1ZhbHVlID0gdHJ1ZTtcbiAgICB0aGlzLnZhbGlkYXRvclJ1bm5lci5vbkFzeW5jQ29tcGxldGVkID0gKGVycm9yczogQXJyYXk8U3VydmV5RXJyb3I+KSA9PiB7XG4gICAgICB0aGlzLmRvT25Bc3luY0NvbXBsZXRlZChlcnJvcnMpO1xuICAgIH07XG4gICAgcmV0dXJuIHRoaXMudmFsaWRhdG9yUnVubmVyLnJ1bih0aGlzKTtcbiAgfVxuICBwcml2YXRlIGRvT25Bc3luY0NvbXBsZXRlZChlcnJvcnM6IEFycmF5PFN1cnZleUVycm9yPikge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXJyb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmVycm9ycy5wdXNoKGVycm9yc1tpXSk7XG4gICAgfVxuICAgIHRoaXMuaXNSdW5uaW5nVmFsaWRhdG9yc1ZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5yYWlzZU9uQ29tcGxldGVkQXN5bmNWYWxpZGF0b3JzKCk7XG4gIH1cbiAgcHJvdGVjdGVkIHJhaXNlT25Db21wbGV0ZWRBc3luY1ZhbGlkYXRvcnMoKSB7XG4gICAgaWYgKCEhdGhpcy5vbkNvbXBsZXRlZEFzeW5jVmFsaWRhdG9ycyAmJiAhdGhpcy5pc1J1bm5pbmdWYWxpZGF0b3JzKSB7XG4gICAgICB0aGlzLm9uQ29tcGxldGVkQXN5bmNWYWxpZGF0b3JzKHRoaXMuZ2V0QWxsRXJyb3JzKCkubGVuZ3RoID4gMCk7XG4gICAgICB0aGlzLm9uQ29tcGxldGVkQXN5bmNWYWxpZGF0b3JzID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBpc1ZhbHVlQ2hhbmdlZEluU3VydmV5ID0gZmFsc2U7XG4gIHByb3RlY3RlZCBhbGxvd05vdGlmeVZhbHVlQ2hhbmdlZCA9IHRydWU7XG4gIHByb3RlY3RlZCBzZXROZXdWYWx1ZShuZXdWYWx1ZTogYW55KSB7XG4gICAgdmFyIG9sZEFuc3dlcmVkID0gdGhpcy5pc0Fuc3dlcmVkO1xuICAgIHRoaXMuc2V0TmV3VmFsdWVJbkRhdGEobmV3VmFsdWUpO1xuICAgIHRoaXMuYWxsb3dOb3RpZnlWYWx1ZUNoYW5nZWQgJiYgdGhpcy5vblZhbHVlQ2hhbmdlZCgpO1xuICAgIGlmICh0aGlzLmlzQW5zd2VyZWQgIT0gb2xkQW5zd2VyZWQpIHtcbiAgICAgIHRoaXMudXBkYXRlUXVlc3Rpb25Dc3MoKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGlzVGV4dFZhbHVlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzU3VydmV5SW5wdXRUZXh0VXBkYXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuc3VydmV5ID8gdGhpcy5zdXJ2ZXkuaXNVcGRhdGVWYWx1ZVRleHRPblR5cGluZyA6IGZhbHNlO1xuICB9XG4gIHByaXZhdGUgZ2V0RGF0YUxvY05vdGlmaWNhdGlvbigpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmlzSW5wdXRUZXh0VXBkYXRlID8gXCJ0ZXh0XCIgOiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzSW5wdXRUZXh0VXBkYXRlKCkge1xuICAgIHJldHVybiB0aGlzLmlzU3VydmV5SW5wdXRUZXh0VXBkYXRlICYmIHRoaXMuaXNUZXh0VmFsdWUoKTtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0TmV3VmFsdWVJbkRhdGEobmV3VmFsdWU6IGFueSkge1xuICAgIG5ld1ZhbHVlID0gdGhpcy52YWx1ZVRvRGF0YShuZXdWYWx1ZSk7XG4gICAgaWYgKCF0aGlzLmlzVmFsdWVDaGFuZ2VkSW5TdXJ2ZXkpIHtcbiAgICAgIHRoaXMuc2V0VmFsdWVDb3JlKG5ld1ZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGdldFZhbHVlQ29yZSgpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvblZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBzZXRWYWx1ZUNvcmUobmV3VmFsdWU6IGFueSkge1xuICAgIHRoaXMuc2V0UXVlc3Rpb25WYWx1ZShuZXdWYWx1ZSk7XG4gICAgaWYgKHRoaXMuZGF0YSAhPSBudWxsICYmIHRoaXMuY2FuU2V0VmFsdWVUb1N1cnZleSgpKSB7XG4gICAgICBuZXdWYWx1ZSA9IHRoaXMudmFsdWVGb3JTdXJ2ZXk7XG4gICAgICB0aGlzLmRhdGEuc2V0VmFsdWUoXG4gICAgICAgIHRoaXMuZ2V0VmFsdWVOYW1lKCksXG4gICAgICAgIG5ld1ZhbHVlLFxuICAgICAgICB0aGlzLmdldERhdGFMb2NOb3RpZmljYXRpb24oKSxcbiAgICAgICAgdGhpcy5hbGxvd05vdGlmeVZhbHVlQ2hhbmdlZFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNhblNldFZhbHVlVG9TdXJ2ZXkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJvdGVjdGVkIHZhbHVlRnJvbURhdGEodmFsOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB2YWw7XG4gIH1cbiAgcHJvdGVjdGVkIHZhbHVlVG9EYXRhKHZhbDogYW55KTogYW55IHtcbiAgICByZXR1cm4gdmFsO1xuICB9XG4gIHByb3RlY3RlZCBvblZhbHVlQ2hhbmdlZCgpIHt9XG4gIHByb3RlY3RlZCBzZXROZXdDb21tZW50KG5ld1ZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnF1ZXN0aW9uQ29tbWVudCA9IG5ld1ZhbHVlO1xuICAgIGlmICh0aGlzLmRhdGEgIT0gbnVsbCkge1xuICAgICAgdGhpcy5kYXRhLnNldENvbW1lbnQoXG4gICAgICAgIHRoaXMuZ2V0VmFsdWVOYW1lKCksXG4gICAgICAgIG5ld1ZhbHVlLFxuICAgICAgICB0aGlzLmlzU3VydmV5SW5wdXRUZXh0VXBkYXRlID8gXCJ0ZXh0XCIgOiBmYWxzZVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGdldFZhbGlkTmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghbmFtZSkgcmV0dXJuIG5hbWU7XG4gICAgcmV0dXJuIG5hbWUudHJpbSgpLnJlcGxhY2UoL1tcXHtcXH1dKy9nLCBcIlwiKTtcbiAgfVxuICAvL0lRdWVzdGlvblxuICB1cGRhdGVWYWx1ZUZyb21TdXJ2ZXkobmV3VmFsdWU6IGFueSkge1xuICAgIG5ld1ZhbHVlID0gdGhpcy5nZXRVbmJpbmRWYWx1ZShuZXdWYWx1ZSk7XG4gICAgaWYgKCEhdGhpcy52YWx1ZUZyb21EYXRhQ2FsbGJhY2spIHtcbiAgICAgIG5ld1ZhbHVlID0gdGhpcy52YWx1ZUZyb21EYXRhQ2FsbGJhY2sobmV3VmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLnNldFF1ZXN0aW9uVmFsdWUodGhpcy52YWx1ZUZyb21EYXRhKG5ld1ZhbHVlKSk7XG4gIH1cbiAgdXBkYXRlQ29tbWVudEZyb21TdXJ2ZXkobmV3VmFsdWU6IGFueSk6IGFueSB7XG4gICAgdGhpcy5xdWVzdGlvbkNvbW1lbnQgPSBuZXdWYWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0UXVlc3Rpb25WYWx1ZShuZXdWYWx1ZTogYW55LCB1cGRhdGVJc0Fuc3dlcmVkOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIHRoaXMucXVlc3Rpb25WYWx1ZSA9IG5ld1ZhbHVlO1xuICAgIHRoaXMuYWxsb3dOb3RpZnlWYWx1ZUNoYW5nZWQgJiZcbiAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMudmFsdWVDaGFuZ2VkQ2FsbGJhY2spO1xuICAgIGlmICh1cGRhdGVJc0Fuc3dlcmVkKSB0aGlzLnVwZGF0ZUlzQW5zd2VyZWQoKTtcbiAgfVxuICBvblN1cnZleVZhbHVlQ2hhbmdlZChuZXdWYWx1ZTogYW55KSB7fVxuICBwdWJsaWMgc2V0VmlzaWJsZUluZGV4KHZhbDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5pc1Zpc2libGUgfHxcbiAgICAgICghdGhpcy5oYXNUaXRsZSAmJiAhc2V0dGluZ3Muc2V0UXVlc3Rpb25WaXNpYmxlSW5kZXhGb3JIaWRkZW5UaXRsZSkgfHxcbiAgICAgICh0aGlzLmhpZGVOdW1iZXIgJiYgIXNldHRpbmdzLnNldFF1ZXN0aW9uVmlzaWJsZUluZGV4Rm9ySGlkZGVuTnVtYmVyKVxuICAgICkge1xuICAgICAgdmFsID0gLTE7XG4gICAgfVxuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVJbmRleFwiLCB2YWwpO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm5vXCIsIHRoaXMuY2FsY05vKCkpO1xuICAgIHJldHVybiB2YWwgPCAwID8gMCA6IDE7XG4gIH1cbiAgcHVibGljIHJlbW92ZUVsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIHN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgc3VwcG9ydEdvTmV4dFBhZ2VFcnJvcigpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogQ2FsbCB0aGlzIGZ1bmN0aW9uIHRvIHJlbW92ZSB2YWx1ZXMgZnJvbSB0aGUgY3VycmVudCBxdWVzdGlvbiwgdGhhdCBlbmQtdXNlciB3aWxsIG5vdCBiZSBhYmxlIHRvIGVudGVyLlxuICAgKiBGb3IgZXhhbXBsZSB0aGUgdmFsdWUgdGhhdCBkb2Vzbid0IGV4aXN0cyBpbiBhIHJhZGlncm91cC9kcm9wZG93bi9jaGVja2JveCBjaG9pY2VzIG9yIG1hdHJpeCByb3dzL2NvbHVtbnMuXG4gICAqL1xuICBwdWJsaWMgY2xlYXJJbmNvcnJlY3RWYWx1ZXMoKSB7fVxuICBwdWJsaWMgY2xlYXJPbkRlbGV0aW5nQ29udGFpbmVyKCkge31cbiAgLyoqXG4gICAqIENhbGwgdGhpcyBmdW5jdGlvbiB0byBjbGVhciBhbGwgZXJyb3JzIGluIHRoZSBxdWVzdGlvblxuICAgKi9cbiAgcHVibGljIGNsZWFyRXJyb3JzKCkge1xuICAgIHRoaXMuZXJyb3JzID0gW107XG4gIH1cbiAgcHVibGljIGNsZWFyVW51c2VkVmFsdWVzKCkge31cbiAgb25BbnlWYWx1ZUNoYW5nZWQobmFtZTogc3RyaW5nKSB7fVxuICBjaGVja0JpbmRpbmdzKHZhbHVlTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgaWYgKHRoaXMuYmluZGluZ3MuaXNFbXB0eSgpIHx8ICF0aGlzLmRhdGEpIHJldHVybjtcbiAgICB2YXIgcHJvcHMgPSB0aGlzLmJpbmRpbmdzLmdldFByb3BlcnRpZXNCeVZhbHVlTmFtZSh2YWx1ZU5hbWUpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXNbcHJvcHNbaV1dID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIC8vSUxvY2FsaXphYmxlT3duZXJcbiAgbG9jT3duZXI6IElMb2NhbGl6YWJsZU93bmVyID0gbnVsbDtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgc3VydmV5IGxvY2FsZVxuICAgKiBAc2VlIFN1cnZleU1vZGVsLmxvY2FsZVxuICAgKi9cbiAgcHVibGljIGdldExvY2FsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleVxuICAgICAgPyAoPElMb2NhbGl6YWJsZU93bmVyPig8YW55PnRoaXMuc3VydmV5KSkuZ2V0TG9jYWxlKClcbiAgICAgIDogdGhpcy5sb2NPd25lclxuICAgICAgPyB0aGlzLmxvY093bmVyLmdldExvY2FsZSgpXG4gICAgICA6IFwiXCI7XG4gIH1cbiAgcHVibGljIGdldE1hcmtkb3duSHRtbCh0ZXh0OiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5XG4gICAgICA/IHRoaXMuc3VydmV5LmdldFN1cnZleU1hcmtkb3duSHRtbCh0aGlzLCB0ZXh0LCBuYW1lKVxuICAgICAgOiB0aGlzLmxvY093bmVyXG4gICAgICA/IHRoaXMubG9jT3duZXIuZ2V0TWFya2Rvd25IdG1sKHRleHQsIG5hbWUpXG4gICAgICA6IG51bGw7XG4gIH1cbiAgcHVibGljIGdldFJlbmRlcmVyKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5ICYmIHR5cGVvZiB0aGlzLnN1cnZleS5nZXRSZW5kZXJlckZvclN0cmluZyA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IHRoaXMuc3VydmV5LmdldFJlbmRlcmVyRm9yU3RyaW5nKHRoaXMsIG5hbWUpXG4gICAgICA6IHRoaXMubG9jT3duZXIgJiYgdHlwZW9mIHRoaXMubG9jT3duZXIuZ2V0UmVuZGVyZXIgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyB0aGlzLmxvY093bmVyLmdldFJlbmRlcmVyKG5hbWUpXG4gICAgICA6IG51bGw7XG4gIH1cbiAgcHVibGljIGdldFByb2Nlc3NlZFRleHQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbikgcmV0dXJuIHRleHQ7XG4gICAgaWYgKHRoaXMudGV4dFByb2Nlc3NvcilcbiAgICAgIHJldHVybiB0aGlzLnRleHRQcm9jZXNzb3IucHJvY2Vzc1RleHQodGV4dCwgdGhpcy51c2VEaXNwbGF5VmFsdWVzSW5UaXRsZSk7XG4gICAgaWYgKHRoaXMubG9jT3duZXIpIHJldHVybiB0aGlzLmxvY093bmVyLmdldFByb2Nlc3NlZFRleHQodGV4dCk7XG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cbiAgcHVibGljIGdldENvbXBvbmVudE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gUmVuZGVyZXJGYWN0b3J5Lkluc3RhbmNlLmdldFJlbmRlcmVyQnlRdWVzdGlvbih0aGlzKTtcbiAgfVxuXG4gIHB1YmxpYyBpc0RlZmF1bHRSZW5kZXJpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICEhdGhpcy5jdXN0b21XaWRnZXQgfHxcbiAgICAgIHRoaXMucmVuZGVyQXMgPT09IFwiZGVmYXVsdFwiIHx8XG4gICAgICB0aGlzLmdldENvbXBvbmVudE5hbWUoKSA9PT0gXCJkZWZhdWx0XCJcbiAgICApO1xuICB9XG5cbiAgQHByb3BlcnR5KHsgZGVmYXVsdFZhbHVlOiBcImRlZmF1bHRcIiB9KVxuICByZW5kZXJBczogc3RyaW5nO1xuXG4gIC8vSVN1cnZleUVycm9yT3duZXJcbiAgZ2V0RXJyb3JDdXN0b21UZXh0KHRleHQ6IHN0cmluZywgZXJyb3I6IFN1cnZleUVycm9yKTogc3RyaW5nIHtcbiAgICBpZiAoISF0aGlzLnN1cnZleSkgcmV0dXJuIHRoaXMuc3VydmV5LmdldEVycm9yQ3VzdG9tVGV4dCh0ZXh0LCBlcnJvcik7XG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cbiAgLy9JVmFsaWRhdG9yT3duZXJcbiAgZ2V0VmFsaWRhdG9yVGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBnZXQgdmFsaWRhdGVkVmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgfVxuICBzZXQgdmFsaWRhdGVkVmFsdWUodmFsOiBhbnkpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsO1xuICB9XG4gIGdldEFsbFZhbHVlcygpOiBhbnkge1xuICAgIHJldHVybiAhIXRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRBbGxWYWx1ZXMoKSA6IG51bGw7XG4gIH1cbn1cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXCJxdWVzdGlvblwiLCBbXG4gIFwiIW5hbWVcIixcbiAge1xuICAgIG5hbWU6IFwic3RhdGVcIixcbiAgICBkZWZhdWx0OiBcImRlZmF1bHRcIixcbiAgICBjaG9pY2VzOiBbXCJkZWZhdWx0XCIsIFwiY29sbGFwc2VkXCIsIFwiZXhwYW5kZWRcIl0sXG4gIH0sXG4gIHsgbmFtZTogXCJ2aXNpYmxlOnN3aXRjaFwiLCBkZWZhdWx0OiB0cnVlIH0sXG4gIHsgbmFtZTogXCJ1c2VEaXNwbGF5VmFsdWVzSW5UaXRsZTpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUsIGxheW91dDogXCJyb3dcIiB9LFxuICBcInZpc2libGVJZjpjb25kaXRpb25cIixcbiAgeyBuYW1lOiBcIndpZHRoXCIgfSxcbiAgeyBuYW1lOiBcIm1pbldpZHRoXCIsIGRlZmF1bHQ6IHNldHRpbmdzLm1pbldpZHRoIH0sXG4gIHsgbmFtZTogXCJtYXhXaWR0aFwiLCBkZWZhdWx0OiBzZXR0aW5ncy5tYXhXaWR0aCB9LFxuICB7IG5hbWU6IFwic3RhcnRXaXRoTmV3TGluZTpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUsIGxheW91dDogXCJyb3dcIiB9LFxuICB7IG5hbWU6IFwiaW5kZW50Om51bWJlclwiLCBkZWZhdWx0OiAwLCBjaG9pY2VzOiBbMCwgMSwgMiwgM10sIGxheW91dDogXCJyb3dcIiB9LFxuICB7XG4gICAgbmFtZTogXCJwYWdlXCIsXG4gICAgaXNTZXJpYWxpemFibGU6IGZhbHNlLFxuICAgIHZpc2libGVJZjogZnVuY3Rpb24ob2JqOiBhbnkpIHtcbiAgICAgIHZhciBzdXJ2ZXkgPSBvYmogPyBvYmouc3VydmV5IDogbnVsbDtcbiAgICAgIHJldHVybiAhc3VydmV5IHx8IHN1cnZleS5wYWdlcy5sZW5ndGggPiAxO1xuICAgIH0sXG4gICAgY2hvaWNlczogZnVuY3Rpb24ob2JqOiBhbnkpIHtcbiAgICAgIHZhciBzdXJ2ZXkgPSBvYmogPyBvYmouc3VydmV5IDogbnVsbDtcbiAgICAgIHJldHVybiBzdXJ2ZXlcbiAgICAgICAgPyBzdXJ2ZXkucGFnZXMubWFwKChwOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBwLm5hbWUsIHRleHQ6IHAudGl0bGUgfTtcbiAgICAgICAgICB9KVxuICAgICAgICA6IFtdO1xuICAgIH0sXG4gIH0sXG4gIHsgbmFtZTogXCJ0aXRsZTp0ZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NUaXRsZVwiLCBsYXlvdXQ6IFwicm93XCIgfSxcbiAge1xuICAgIG5hbWU6IFwidGl0bGVMb2NhdGlvblwiLFxuICAgIGRlZmF1bHQ6IFwiZGVmYXVsdFwiLFxuICAgIGNob2ljZXM6IFtcImRlZmF1bHRcIiwgXCJ0b3BcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCIsIFwiaGlkZGVuXCJdLFxuICAgIGxheW91dDogXCJyb3dcIixcbiAgfSxcbiAge1xuICAgIG5hbWU6IFwiZGVzY3JpcHRpb246dGV4dFwiLFxuICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NEZXNjcmlwdGlvblwiLFxuICAgIGxheW91dDogXCJyb3dcIixcbiAgfSxcbiAge1xuICAgIG5hbWU6IFwiZGVzY3JpcHRpb25Mb2NhdGlvblwiLFxuICAgIGRlZmF1bHQ6IFwiZGVmYXVsdFwiLFxuICAgIGNob2ljZXM6IFtcImRlZmF1bHRcIiwgXCJ1bmRlcklucHV0XCIsIFwidW5kZXJUaXRsZVwiXSxcbiAgfSxcbiAge1xuICAgIG5hbWU6IFwiaGlkZU51bWJlcjpib29sZWFuXCIsXG4gICAgZGVwZW5kc09uOiBcInRpdGxlTG9jYXRpb25cIixcbiAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uKG9iajogYW55KSB7XG4gICAgICBpZiAoIW9iaikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICgoPFF1ZXN0aW9uPm9iaikudGl0bGVMb2NhdGlvbiA9PT0gXCJoaWRkZW5cIikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB2YXIgcGFyZW50OiBQYW5lbE1vZGVsID0gb2JqID8gb2JqLnBhcmVudCA6IG51bGw7XG4gICAgICB2YXIgbnVtYmVyaW5nQWxsb3dlZEJ5UGFyZW50ID1cbiAgICAgICAgIXBhcmVudCB8fCBwYXJlbnQuc2hvd1F1ZXN0aW9uTnVtYmVycyAhPT0gXCJvZmZcIjtcbiAgICAgIGlmICghbnVtYmVyaW5nQWxsb3dlZEJ5UGFyZW50KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHZhciBzdXJ2ZXk6IFN1cnZleU1vZGVsID0gb2JqID8gb2JqLnN1cnZleSA6IG51bGw7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAhc3VydmV5IHx8XG4gICAgICAgIHN1cnZleS5zaG93UXVlc3Rpb25OdW1iZXJzICE9PSBcIm9mZlwiIHx8XG4gICAgICAgICghIXBhcmVudCAmJiBwYXJlbnQuc2hvd1F1ZXN0aW9uTnVtYmVycyA9PT0gXCJvbnBhbmVsXCIpXG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIFwidmFsdWVOYW1lXCIsXG4gIFwiZW5hYmxlSWY6Y29uZGl0aW9uXCIsXG4gIFwiZGVmYXVsdFZhbHVlOnZhbHVlXCIsXG4gIHtcbiAgICBuYW1lOiBcImRlZmF1bHRWYWx1ZUV4cHJlc3Npb246ZXhwcmVzc2lvblwiLFxuICAgIGNhdGVnb3J5OiBcImxvZ2ljXCIsXG4gIH0sXG4gIFwiY29ycmVjdEFuc3dlcjp2YWx1ZVwiLFxuICBcImlzUmVxdWlyZWQ6c3dpdGNoXCIsXG4gIFwicmVxdWlyZWRJZjpjb25kaXRpb25cIixcbiAge1xuICAgIG5hbWU6IFwicmVxdWlyZWRFcnJvclRleHQ6dGV4dFwiLFxuICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NSZXF1aXJlZEVycm9yVGV4dFwiLFxuICB9LFxuICBcInJlYWRPbmx5OnN3aXRjaFwiLFxuICB7XG4gICAgbmFtZTogXCJ2YWxpZGF0b3JzOnZhbGlkYXRvcnNcIixcbiAgICBiYXNlQ2xhc3NOYW1lOiBcInN1cnZleXZhbGlkYXRvclwiLFxuICAgIGNsYXNzTmFtZVBhcnQ6IFwidmFsaWRhdG9yXCIsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcImJpbmRpbmdzOmJpbmRpbmdzXCIsXG4gICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImJpbmRpbmdzXCIsXG4gICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgcmV0dXJuIG9iai5iaW5kaW5ncy5nZXROYW1lcygpLmxlbmd0aCA+IDA7XG4gICAgfSxcbiAgfSxcbiAgeyBuYW1lOiBcInJlbmRlckFzXCIsIGRlZmF1bHQ6IFwiZGVmYXVsdFwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuXSk7XG5TZXJpYWxpemVyLmFkZEFsdGVyTmF0aXZlQ2xhc3NOYW1lKFwicXVlc3Rpb25cIiwgXCJxdWVzdGlvbmJhc2VcIik7XG4iLCJpbXBvcnQgeyBCYXNlLCBFdmVudCB9IGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB7IElRdWVzdGlvbiB9IGZyb20gXCIuL2Jhc2UtaW50ZXJmYWNlc1wiO1xuXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25DdXN0b21XaWRnZXQge1xuICBwdWJsaWMgaHRtbFRlbXBsYXRlOiBzdHJpbmc7XG4gIHB1YmxpYyBpc0ZpcnN0UmVuZGVyOiBib29sZWFuID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nLCBwdWJsaWMgd2lkZ2V0SnNvbjogYW55KSB7XG4gICAgdGhpcy5odG1sVGVtcGxhdGUgPSB3aWRnZXRKc29uLmh0bWxUZW1wbGF0ZSA/IHdpZGdldEpzb24uaHRtbFRlbXBsYXRlIDogXCJcIjtcbiAgfVxuICBwdWJsaWMgYWZ0ZXJSZW5kZXIocXVlc3Rpb246IElRdWVzdGlvbiwgZWw6IGFueSkge1xuICAgIGlmICh0aGlzLmlzRmlyc3RSZW5kZXIpIHtcbiAgICAgIHRoaXMuaXNGaXJzdFJlbmRlciA9IGZhbHNlO1xuICAgICAgcXVlc3Rpb24uc3VydmV5Lm9uTG9jYWxlQ2hhbmdlZEV2ZW50LmFkZCgoKSA9PiB7XG4gICAgICAgIHRoaXMud2lkZ2V0SnNvbi53aWxsVW5tb3VudChxdWVzdGlvbiwgZWwpO1xuICAgICAgICB0aGlzLndpZGdldEpzb24uYWZ0ZXJSZW5kZXIocXVlc3Rpb24sIGVsKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLndpZGdldEpzb24uYWZ0ZXJSZW5kZXIpIHRoaXMud2lkZ2V0SnNvbi5hZnRlclJlbmRlcihxdWVzdGlvbiwgZWwpO1xuICB9XG4gIHB1YmxpYyB3aWxsVW5tb3VudChxdWVzdGlvbjogSVF1ZXN0aW9uLCBlbDogYW55KSB7XG4gICAgaWYgKHRoaXMud2lkZ2V0SnNvbi53aWxsVW5tb3VudCkgdGhpcy53aWRnZXRKc29uLndpbGxVbm1vdW50KHF1ZXN0aW9uLCBlbCk7XG4gIH1cbiAgcHVibGljIGdldERpc3BsYXlWYWx1ZShxdWVzdGlvbjogSVF1ZXN0aW9uLCB2YWx1ZTogYW55ID0gdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy53aWRnZXRKc29uLmdldERpc3BsYXlWYWx1ZSlcbiAgICAgIHJldHVybiB0aGlzLndpZGdldEpzb24uZ2V0RGlzcGxheVZhbHVlKHF1ZXN0aW9uLCB2YWx1ZSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHVibGljIGlzRml0KHF1ZXN0aW9uOiBJUXVlc3Rpb24pOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5pc0xpYnJhcnlMb2FkZWQoKSAmJiB0aGlzLndpZGdldEpzb24uaXNGaXQpXG4gICAgICByZXR1cm4gdGhpcy53aWRnZXRKc29uLmlzRml0KHF1ZXN0aW9uKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGdldCBjYW5TaG93SW5Ub29sYm94KCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLndpZGdldEpzb24uc2hvd0luVG9vbGJveCA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoXG4gICAgICBDdXN0b21XaWRnZXRDb2xsZWN0aW9uLkluc3RhbmNlLmdldEFjdGl2YXRlZEJ5KHRoaXMubmFtZSkgIT0gXCJjdXN0b210eXBlXCJcbiAgICApXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICF0aGlzLndpZGdldEpzb24ud2lkZ2V0SXNMb2FkZWQgfHwgdGhpcy53aWRnZXRKc29uLndpZGdldElzTG9hZGVkKCk7XG4gIH1cbiAgcHVibGljIGdldCBzaG93SW5Ub29sYm94KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLndpZGdldEpzb24uc2hvd0luVG9vbGJveCAhPT0gZmFsc2U7XG4gIH1cbiAgcHVibGljIHNldCBzaG93SW5Ub29sYm94KHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMud2lkZ2V0SnNvbi5zaG93SW5Ub29sYm94ID0gdmFsO1xuICB9XG4gIHB1YmxpYyBpbml0KCkge1xuICAgIGlmICh0aGlzLndpZGdldEpzb24uaW5pdCkge1xuICAgICAgdGhpcy53aWRnZXRKc29uLmluaXQoKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGFjdGl2YXRlZEJ5Q2hhbmdlZChhY3RpdmF0ZWRCeTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuaXNMaWJyYXJ5TG9hZGVkKCkgJiYgdGhpcy53aWRnZXRKc29uLmFjdGl2YXRlZEJ5Q2hhbmdlZCkge1xuICAgICAgdGhpcy53aWRnZXRKc29uLmFjdGl2YXRlZEJ5Q2hhbmdlZChhY3RpdmF0ZWRCeSk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgaXNMaWJyYXJ5TG9hZGVkKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLndpZGdldEpzb24ud2lkZ2V0SXNMb2FkZWQpXG4gICAgICByZXR1cm4gdGhpcy53aWRnZXRKc29uLndpZGdldElzTG9hZGVkKCkgPT0gdHJ1ZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzRGVmYXVsdFJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy53aWRnZXRKc29uLmlzRGVmYXVsdFJlbmRlcjtcbiAgfVxuICBwdWJsaWMgZ2V0IHBkZlF1ZXN0aW9uVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLndpZGdldEpzb24ucGRmUXVlc3Rpb25UeXBlO1xuICB9XG4gIHB1YmxpYyBnZXQgcGRmUmVuZGVyKCkge1xuICAgIHJldHVybiB0aGlzLndpZGdldEpzb24ucGRmUmVuZGVyO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDdXN0b21XaWRnZXRDb2xsZWN0aW9uIHtcbiAgcHVibGljIHN0YXRpYyBJbnN0YW5jZTogQ3VzdG9tV2lkZ2V0Q29sbGVjdGlvbiA9IG5ldyBDdXN0b21XaWRnZXRDb2xsZWN0aW9uKCk7XG4gIHByaXZhdGUgd2lkZ2V0c1ZhbHVlczogQXJyYXk8UXVlc3Rpb25DdXN0b21XaWRnZXQ+ID0gW107XG4gIHByaXZhdGUgd2lkZ2V0c0FjdGl2YXRlZEJ5ID0ge307XG5cbiAgcHVibGljIG9uQ3VzdG9tV2lkZ2V0QWRkZWQ6IEV2ZW50PFxuICAgIChjdXN0b21XaWRnZXQ6IFF1ZXN0aW9uQ3VzdG9tV2lkZ2V0KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgRXZlbnQ8KGN1c3RvbVdpZGdldDogUXVlc3Rpb25DdXN0b21XaWRnZXQpID0+IGFueSwgYW55PigpO1xuXG4gIHB1YmxpYyBnZXQgd2lkZ2V0cygpOiBBcnJheTxRdWVzdGlvbkN1c3RvbVdpZGdldD4ge1xuICAgIHJldHVybiB0aGlzLndpZGdldHNWYWx1ZXM7XG4gIH1cbiAgcHVibGljIGFkZCh3aWRnZXRKc29uOiBhbnksIGFjdGl2YXRlZEJ5OiBzdHJpbmcgPSBcInByb3BlcnR5XCIpIHtcbiAgICB0aGlzLmFkZEN1c3RvbVdpZGdldCh3aWRnZXRKc29uLCBhY3RpdmF0ZWRCeSk7XG4gIH1cbiAgcHVibGljIGFkZEN1c3RvbVdpZGdldChcbiAgICB3aWRnZXRKc29uOiBhbnksXG4gICAgYWN0aXZhdGVkQnk6IHN0cmluZyA9IFwicHJvcGVydHlcIlxuICApOiBRdWVzdGlvbkN1c3RvbVdpZGdldCB7XG4gICAgdmFyIG5hbWUgPSB3aWRnZXRKc29uLm5hbWU7XG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICBuYW1lID0gXCJ3aWRnZXRfXCIgKyB0aGlzLndpZGdldHMubGVuZ3RoICsgMTtcbiAgICB9XG4gICAgdmFyIGN1c3RvbVdpZGdldCA9IG5ldyBRdWVzdGlvbkN1c3RvbVdpZGdldChuYW1lLCB3aWRnZXRKc29uKTtcbiAgICB0aGlzLndpZGdldHNWYWx1ZXMucHVzaChjdXN0b21XaWRnZXQpO1xuICAgIGN1c3RvbVdpZGdldC5pbml0KCk7XG4gICAgKDxhbnk+dGhpcykud2lkZ2V0c0FjdGl2YXRlZEJ5W25hbWVdID0gYWN0aXZhdGVkQnk7XG4gICAgY3VzdG9tV2lkZ2V0LmFjdGl2YXRlZEJ5Q2hhbmdlZChhY3RpdmF0ZWRCeSk7XG4gICAgdGhpcy5vbkN1c3RvbVdpZGdldEFkZGVkLmZpcmUoY3VzdG9tV2lkZ2V0LCBudWxsKTtcbiAgICByZXR1cm4gY3VzdG9tV2lkZ2V0O1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB3YXkgdGhlIGN1c3RvbSB3aWdldCBpcyBhY3RpdmF0ZWQuIEl0IGNhbiBiZSBhY3RpdmF0ZWQgYnkgYSBwcm9wZXJ0eSAoXCJwcm9wZXJ0eVwiKSwgcXVlc3Rpb24gdHlwZSAoXCJ0eXBlXCIpIG9yIGJ5IG5ldy9jdXN0b20gcXVlc3Rpb24gdHlwZSAoXCJjdXN0b210eXBlXCIpLlxuICAgKiBAcGFyYW0gd2lkZ2V0TmFtZSB0aGUgY3VzdG9tIHdpZGdldCBuYW1lXG4gICAqIEBzZWUgc2V0QWN0aXZhdGVkQnlcbiAgICovXG4gIHB1YmxpYyBnZXRBY3RpdmF0ZWRCeSh3aWRnZXROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHZhciByZXMgPSAoPGFueT50aGlzKS53aWRnZXRzQWN0aXZhdGVkQnlbd2lkZ2V0TmFtZV07XG4gICAgcmV0dXJuIHJlcyA/IHJlcyA6IFwicHJvcGVydHlcIjtcbiAgfVxuICAvKipcbiAgICogU2V0cyB0aGUgd2F5IHRoZSBjdXN0b20gd2lnZXQgaXMgYWN0aXZhdGVkLiBUaGUgYWN0aXZhdGlvbiB0eXBlcyBhcmU6IHByb3BlcnR5IChcInByb3BlcnR5XCIpLCBxdWVzdGlvbiB0eXBlIChcInR5cGVcIikgb3IgbmV3L2N1c3RvbSBxdWVzdGlvbiB0eXBlIChcImN1c3RvbXR5cGVcIikuIEEgY3VzdG9tIHdpZ2V0IG1heSBzdXBwb3J0IGFsbCBvciBvbmx5IHNvbWUgb2YgdGhpcyBhY3RpdmF0aW9uIHR5cGVzLlxuICAgKiBAcGFyYW0gd2lkZ2V0TmFtZVxuICAgKiBAcGFyYW0gYWN0aXZhdGVkQnkgdGhlcmUgYXJlIHRocmVlIHBvc3NpYmxlIHZhcmlhbnRzOiBcInByb3BlcnR5XCIsIFwidHlwZVwiIGFuZCBcImN1c3RvbXR5cGVcIlxuICAgKi9cbiAgcHVibGljIHNldEFjdGl2YXRlZEJ5KHdpZGdldE5hbWU6IHN0cmluZywgYWN0aXZhdGVkQnk6IHN0cmluZykge1xuICAgIGlmICghd2lkZ2V0TmFtZSB8fCAhYWN0aXZhdGVkQnkpIHJldHVybjtcbiAgICB2YXIgd2lkZ2V0ID0gdGhpcy5nZXRDdXN0b21XaWRnZXRCeU5hbWUod2lkZ2V0TmFtZSk7XG4gICAgaWYgKCF3aWRnZXQpIHJldHVybjtcbiAgICAoPGFueT50aGlzKS53aWRnZXRzQWN0aXZhdGVkQnlbd2lkZ2V0TmFtZV0gPSBhY3RpdmF0ZWRCeTtcbiAgICB3aWRnZXQuYWN0aXZhdGVkQnlDaGFuZ2VkKGFjdGl2YXRlZEJ5KTtcbiAgfVxuICBwdWJsaWMgY2xlYXIoKSB7XG4gICAgdGhpcy53aWRnZXRzVmFsdWVzID0gW107XG4gIH1cbiAgcHVibGljIGdldEN1c3RvbVdpZGdldEJ5TmFtZShuYW1lOiBzdHJpbmcpOiBRdWVzdGlvbkN1c3RvbVdpZGdldCB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLndpZGdldHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLndpZGdldHNbaV0ubmFtZSA9PSBuYW1lKSByZXR1cm4gdGhpcy53aWRnZXRzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0Q3VzdG9tV2lkZ2V0KHF1ZXN0aW9uOiBJUXVlc3Rpb24pOiBRdWVzdGlvbkN1c3RvbVdpZGdldCB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLndpZGdldHNWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLndpZGdldHNWYWx1ZXNbaV0uaXNGaXQocXVlc3Rpb24pKSByZXR1cm4gdGhpcy53aWRnZXRzVmFsdWVzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuIiwiaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFN1cnZleUVycm9yIH0gZnJvbSBcIi4vc3VydmV5LWVycm9yXCI7XG5pbXBvcnQgeyBJU3VydmV5SW1wbCwgSVN1cnZleSB9IGZyb20gXCIuL2Jhc2UtaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgU3VydmV5TW9kZWwgfSBmcm9tIFwiLi9zdXJ2ZXlcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IEl0ZW1WYWx1ZSB9IGZyb20gXCIuL2l0ZW12YWx1ZVwiO1xuaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xuaW1wb3J0IHsgT3RoZXJFbXB0eUVycm9yIH0gZnJvbSBcIi4vZXJyb3JcIjtcbmltcG9ydCB7IENob2ljZXNSZXN0ZnVsIH0gZnJvbSBcIi4vY2hvaWNlc1Jlc3RmdWxcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcbmltcG9ydCB7IENvbmRpdGlvblJ1bm5lciB9IGZyb20gXCIuL2NvbmRpdGlvbnNcIjtcbmltcG9ydCB7IEhlbHBlcnMsIEhhc2hUYWJsZSB9IGZyb20gXCIuL2hlbHBlcnNcIjtcbmltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcblxuLyoqXG4gKiBJdCBpcyBhIGJhc2UgY2xhc3MgZm9yIGNoZWNrYm94LCBkcm9wZG93biBhbmQgcmFkaW9ncm91cCBxdWVzdGlvbnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvblNlbGVjdEJhc2UgZXh0ZW5kcyBRdWVzdGlvbiB7XG4gIHB1YmxpYyB2aXNpYmxlQ2hvaWNlc0NoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBmaWx0ZXJlZENob2ljZXNWYWx1ZTogQXJyYXk8SXRlbVZhbHVlPjtcbiAgcHJpdmF0ZSBjb25kaXRpb25DaG9pY2VzVmlzaWJsZUlmUnVubmVyOiBDb25kaXRpb25SdW5uZXI7XG4gIHByaXZhdGUgY29uZGl0aW9uQ2hvaWNlc0VuYWJsZUlmUnVubmVyOiBDb25kaXRpb25SdW5uZXI7XG4gIHByaXZhdGUgY29tbWVudFZhbHVlOiBzdHJpbmc7XG4gIHByaXZhdGUgcHJldkNvbW1lbnRWYWx1ZTogc3RyaW5nO1xuICBwcml2YXRlIG90aGVySXRlbVZhbHVlOiBJdGVtVmFsdWUgPSBuZXcgSXRlbVZhbHVlKFwib3RoZXJcIik7XG4gIHByaXZhdGUgY2hvaWNlc0Zyb21Vcmw6IEFycmF5PEl0ZW1WYWx1ZT47XG4gIHByaXZhdGUgY2FjaGVkVmFsdWVGb3JVcmxSZXF1ZXN0czogYW55O1xuICBwcml2YXRlIGlzQ2hvaWNlc0xvYWRlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBlbmFibGVPbkxvYWRpbmdDaG9pY2VzOiBib29sZWFuO1xuICBwcml2YXRlIGRlcGVuZGVkUXVlc3Rpb25zOiBBcnJheTxRdWVzdGlvblNlbGVjdEJhc2U+ID0gW107XG4gIHByaXZhdGUgbm9uZUl0ZW1WYWx1ZTogSXRlbVZhbHVlID0gbmV3IEl0ZW1WYWx1ZShcIm5vbmVcIik7XG4gIHByaXZhdGUgbmV3SXRlbVZhbHVlOiBJdGVtVmFsdWU7XG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIHZhciBub25lSXRlbVRleHQgPSB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwibm9uZVRleHRcIiwgdGhpcywgdHJ1ZSk7XG4gICAgbm9uZUl0ZW1UZXh0Lm9uR2V0VGV4dENhbGxiYWNrID0gZnVuY3Rpb24odGV4dCkge1xuICAgICAgcmV0dXJuICEhdGV4dCA/IHRleHQgOiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwibm9uZUl0ZW1UZXh0XCIpO1xuICAgIH07XG4gICAgdGhpcy5ub25lSXRlbVZhbHVlLmxvY093bmVyID0gdGhpcztcbiAgICB0aGlzLm5vbmVJdGVtVmFsdWUuc2V0TG9jVGV4dChub25lSXRlbVRleHQpO1xuXG4gICAgdGhpcy5jcmVhdGVJdGVtVmFsdWVzKFwiY2hvaWNlc1wiKTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFwiY2hvaWNlc1wiLCAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZmlsdGVySXRlbXMoKSkge1xuICAgICAgICB0aGlzLm9uVmlzaWJsZUNob2ljZXNDaGFuZ2VkKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0aWVzVmFsdWVDaGFuZ2VkKFxuICAgICAgW1wiY2hvaWNlc0Zyb21RdWVzdGlvblwiLCBcImNob2ljZXNGcm9tUXVlc3Rpb25Nb2RlXCIsIFwiaGFzTm9uZVwiXSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5vblZpc2libGVDaG9pY2VzQ2hhbmdlZCgpO1xuICAgICAgfVxuICAgICk7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcImhpZGVJZkNob2ljZXNFbXB0eVwiLCAoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVZpc2liaWxpdHlCYXNlZE9uQ2hvaWNlcygpO1xuICAgIH0pO1xuICAgIHRoaXMuY3JlYXRlTmV3QXJyYXkoXCJ2aXNpYmxlQ2hvaWNlc1wiKTtcbiAgICB0aGlzLnNldE5ld1Jlc3RmdWxQcm9wZXJ0eSgpO1xuICAgIHZhciBsb2NPdGhlclRleHQgPSB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwib3RoZXJUZXh0XCIsIHRoaXMsIHRydWUpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJvdGhlckVycm9yVGV4dFwiLCB0aGlzLCB0cnVlKTtcbiAgICB0aGlzLm90aGVySXRlbVZhbHVlLmxvY093bmVyID0gdGhpcztcbiAgICB0aGlzLm90aGVySXRlbVZhbHVlLnNldExvY1RleHQobG9jT3RoZXJUZXh0KTtcbiAgICBsb2NPdGhlclRleHQub25HZXRUZXh0Q2FsbGJhY2sgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgICByZXR1cm4gISF0ZXh0ID8gdGV4dCA6IHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJvdGhlckl0ZW1UZXh0XCIpO1xuICAgIH07XG4gICAgdGhpcy5jaG9pY2VzQnlVcmwuYmVmb3JlU2VuZFJlcXVlc3RDYWxsYmFjayA9ICgpOiB2b2lkID0+IHtcbiAgICAgIHRoaXMub25CZWZvcmVTZW5kUmVxdWVzdCgpO1xuICAgIH07XG4gICAgdGhpcy5jaG9pY2VzQnlVcmwuZ2V0UmVzdWx0Q2FsbGJhY2sgPSAoaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4pOiB2b2lkID0+IHtcbiAgICAgIHRoaXMub25Mb2FkQ2hvaWNlc0Zyb21VcmwoaXRlbXMpO1xuICAgIH07XG4gICAgdGhpcy5jaG9pY2VzQnlVcmwudXBkYXRlUmVzdWx0Q2FsbGJhY2sgPSAoXG4gICAgICBpdGVtczogQXJyYXk8SXRlbVZhbHVlPixcbiAgICAgIHNlcnZlclJlc3VsdDogYW55XG4gICAgKTogQXJyYXk8SXRlbVZhbHVlPiA9PiB7XG4gICAgICBpZiAodGhpcy5zdXJ2ZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VydmV5LnVwZGF0ZUNob2ljZXNGcm9tU2VydmVyKHRoaXMsIGl0ZW1zLCBzZXJ2ZXJSZXN1bHQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH07XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcIm90aGVyUGxhY2VIb2xkZXJcIiwgdGhpcyk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJzZWxlY3RiYXNlXCI7XG4gIH1cbiAgcHVibGljIGRpc3Bvc2UoKSB7XG4gICAgc3VwZXIuZGlzcG9zZSgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kZXBlbmRlZFF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5kZXBlbmRlZFF1ZXN0aW9uc1tpXS5jaG9pY2VzRnJvbVF1ZXN0aW9uID0gXCJcIjtcbiAgICB9XG4gICAgdGhpcy5yZW1vdmVGcm9tRGVwZW5kZWRRdWVzdGlvbih0aGlzLmdldFF1ZXN0aW9uV2l0aENob2ljZXMoKSk7XG4gIH1cbiAgcHVibGljIHN1cHBvcnRHb05leHRQYWdlRXJyb3IoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzT3RoZXJTZWxlY3RlZCB8fCAhIXRoaXMuY29tbWVudDtcbiAgfVxuICBpc0xheW91dFR5cGVTdXBwb3J0ZWQobGF5b3V0VHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHVibGljIGxvY2FsZUNoYW5nZWQoKSB7XG4gICAgc3VwZXIubG9jYWxlQ2hhbmdlZCgpO1xuICAgIGlmICh0aGlzLmNob2ljZXNPcmRlciAhPT0gXCJub25lXCIpIHtcbiAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUNob2ljZXMoKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGxvY1N0cnNDaGFuZ2VkKCkge1xuICAgIHN1cGVyLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgaWYgKCEhdGhpcy5jaG9pY2VzRnJvbVVybCkge1xuICAgICAgSXRlbVZhbHVlLmxvY1N0cnNDaGFuZ2VkKHRoaXMuY2hvaWNlc0Zyb21VcmwpO1xuICAgICAgSXRlbVZhbHVlLmxvY1N0cnNDaGFuZ2VkKHRoaXMudmlzaWJsZUNob2ljZXMpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgb3RoZXIgaXRlbS4gQnkgdXNpbmcgdGhpcyBwcm9wZXJ0eSwgeW91IG1heSBjaGFuZ2UgcHJvZ3JhbW1hdGljYWxseSBpdCdzIHZhbHVlIGFuZCB0ZXh0LlxuICAgKiBAc2VlIGhhc090aGVyXG4gICAqL1xuICBwdWJsaWMgZ2V0IG90aGVySXRlbSgpOiBJdGVtVmFsdWUge1xuICAgIHJldHVybiB0aGlzLm90aGVySXRlbVZhbHVlO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgYSB1c2VyIHNlbGVjdCB0aGUgJ290aGVyJyBpdGVtLlxuICAgKi9cbiAgcHVibGljIGdldCBpc090aGVyU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzT3RoZXIgJiYgdGhpcy5nZXRIYXNPdGhlcih0aGlzLnJlbmRlcmVkVmFsdWUpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byB0cnVlLCB0byBzaG93IHRoZSBcIk5vbmVcIiBpdGVtIG9uIHRoZSBib3R0b20uIElmIGVuZC11c2VyIGNoZWNrcyB0aGlzIGl0ZW0sIGFsbCBvdGhlciBpdGVtcyB3b3VsZCBiZSB1bmNoZWNrZWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGhhc05vbmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImhhc05vbmVcIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXQgaGFzTm9uZSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJoYXNOb25lXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG5vbmUgaXRlbS4gQnkgdXNpbmcgdGhpcyBwcm9wZXJ0eSwgeW91IG1heSBjaGFuZ2UgcHJvZ3JhbW1hdGljYWxseSBpdCdzIHZhbHVlIGFuZCB0ZXh0LlxuICAgKiBAc2VlIGhhc05vbmVcbiAgICovXG4gIHB1YmxpYyBnZXQgbm9uZUl0ZW0oKTogSXRlbVZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5ub25lSXRlbVZhbHVlO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBzZXQgdGhlIGRpZmZlcmVudCB0ZXh0IGZvciBub25lIGl0ZW0uXG4gICAqL1xuICBwdWJsaWMgZ2V0IG5vbmVUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgICAgXCJub25lVGV4dFwiLFxuICAgICAgc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm5vbmVJdGVtVGV4dFwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBub25lVGV4dCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwibm9uZVRleHRcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jTm9uZVRleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwibm9uZVRleHRcIik7XG4gIH1cbiAgLyoqXG4gICAqIEFuIGV4cHJlc3Npb24gdGhhdCByZXR1cm5zIHRydWUgb3IgZmFsc2UuIEl0IHJ1bnMgYWdhaW5zdCBlYWNoIGNob2ljZXMgaXRlbSBhbmQgaWYgZm9yIHRoaXMgaXRlbSBpdCByZXR1cm5zIHRydWUsIHRoZW4gdGhlIGl0ZW0gaXMgdmlzaWJsZSBvdGhlcndpc2UgdGhlIGl0ZW0gYmVjb21lcyBpbnZpc2libGUuIFBsZWFzZSB1c2Uge2l0ZW19IHRvIGdldCB0aGUgY3VycmVudCBpdGVtIHZhbHVlIGluIHRoZSBleHByZXNzaW9uLlxuICAgKiBAc2VlIHZpc2libGVJZlxuICAgKiBAc2VlIGNob2ljZXNFbmFibGVJZlxuICAgKi9cbiAgcHVibGljIGdldCBjaG9pY2VzVmlzaWJsZUlmKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNob2ljZXNWaXNpYmxlSWZcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBjaG9pY2VzVmlzaWJsZUlmKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlc1Zpc2libGVJZlwiLCB2YWwpO1xuICAgIHRoaXMuZmlsdGVySXRlbXMoKTtcbiAgfVxuICAvKipcbiAgICogQW4gZXhwcmVzc2lvbiB0aGF0IHJldHVybnMgdHJ1ZSBvciBmYWxzZS4gSXQgcnVucyBhZ2FpbnN0IGVhY2ggY2hvaWNlcyBpdGVtIGFuZCBpZiBmb3IgdGhpcyBpdGVtIGl0IHJldHVybnMgdHJ1ZSwgdGhlbiB0aGUgaXRlbSBpcyBlbmFibGVkIG90aGVyd2lzZSB0aGUgaXRlbSBiZWNvbWVzIGRpc2FibGVkLiBQbGVhc2UgdXNlIHtpdGVtfSB0byBnZXQgdGhlIGN1cnJlbnQgaXRlbSB2YWx1ZSBpbiB0aGUgZXhwcmVzc2lvbi5cbiAgICogQHNlZSBjaG9pY2VzVmlzaWJsZUlmXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNob2ljZXNFbmFibGVJZigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjaG9pY2VzRW5hYmxlSWZcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBjaG9pY2VzRW5hYmxlSWYodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjaG9pY2VzRW5hYmxlSWZcIiwgdmFsKTtcbiAgICB0aGlzLmZpbHRlckl0ZW1zKCk7XG4gIH1cbiAgcHVibGljIHJ1bkNvbmRpdGlvbih2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIHN1cGVyLnJ1bkNvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIHRoaXMucnVuSXRlbXNFbmFibGVDb25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICB0aGlzLnJ1bkl0ZW1zQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGlzVGV4dFZhbHVlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlOyAvL2ZvciBjb21tZW50cyBhbmQgb3RoZXJzXG4gIH1cbiAgcHJpdmF0ZSBpc1NldHRpbmdEZWZhdWx0VmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJvdGVjdGVkIHNldERlZmF1bHRWYWx1ZSgpIHtcbiAgICB0aGlzLmlzU2V0dGluZ0RlZmF1bHRWYWx1ZSA9XG4gICAgICAhdGhpcy5pc1ZhbHVlRW1wdHkodGhpcy5kZWZhdWx0VmFsdWUpICYmXG4gICAgICB0aGlzLmhhc1Vua25vd25WYWx1ZSh0aGlzLmRlZmF1bHRWYWx1ZSk7XG4gICAgdGhpcy5wcmV2Q29tbWVudFZhbHVlID0gdW5kZWZpbmVkO1xuICAgIHN1cGVyLnNldERlZmF1bHRWYWx1ZSgpO1xuICAgIHRoaXMuaXNTZXR0aW5nRGVmYXVsdFZhbHVlID0gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIGdldElzTXVsdGlwbGVWYWx1ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIGNvbnZlcnREZWZhdWx0VmFsdWUodmFsOiBhbnkpOiBhbnkge1xuICAgIGlmICh2YWwgPT0gbnVsbCB8fCB2YWwgPT0gdW5kZWZpbmVkKSByZXR1cm4gdmFsO1xuICAgIGlmICh0aGlzLmdldElzTXVsdGlwbGVWYWx1ZSgpKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsKSkgcmV0dXJuIFt2YWxdO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpICYmIHZhbC5sZW5ndGggPiAwKSByZXR1cm4gdmFsWzBdO1xuICAgIH1cbiAgICByZXR1cm4gdmFsO1xuICB9XG4gIHByb3RlY3RlZCBmaWx0ZXJJdGVtcygpOiBib29sZWFuIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmlzTG9hZGluZ0Zyb21Kc29uIHx8XG4gICAgICAhdGhpcy5kYXRhIHx8XG4gICAgICB0aGlzLmFyZUludmlzaWJsZUVsZW1lbnRzU2hvd2luZ1xuICAgIClcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB2YXIgdmFsdWVzID0gdGhpcy5nZXREYXRhRmlsdGVyZWRWYWx1ZXMoKTtcbiAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMuZ2V0RGF0YUZpbHRlcmVkUHJvcGVydGllcygpO1xuICAgIHRoaXMucnVuSXRlbXNFbmFibGVDb25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICByZXR1cm4gdGhpcy5ydW5JdGVtc0NvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICB9XG4gIHByb3RlY3RlZCBydW5JdGVtc0NvbmRpdGlvbihcbiAgICB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+XG4gICk6IGJvb2xlYW4ge1xuICAgIHRoaXMuc2V0Q29uZGl0aW9uYWxDaG9pY2VzUnVubmVyKCk7XG4gICAgdmFyIGhhc0NoYW5nZXMgPSB0aGlzLnJ1bkNvbmRpdGlvbnNGb3JJdGVtcyh2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIGlmIChcbiAgICAgICEhdGhpcy5maWx0ZXJlZENob2ljZXNWYWx1ZSAmJlxuICAgICAgdGhpcy5maWx0ZXJlZENob2ljZXNWYWx1ZS5sZW5ndGggPT09IHRoaXMuYWN0aXZlQ2hvaWNlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRDaG9pY2VzVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmIChoYXNDaGFuZ2VzKSB7XG4gICAgICB0aGlzLm9uVmlzaWJsZUNob2ljZXNDaGFuZ2VkKCk7XG4gICAgICB0aGlzLmNsZWFySW5jb3JyZWN0VmFsdWVzKCk7XG4gICAgfVxuICAgIHJldHVybiBoYXNDaGFuZ2VzO1xuICB9XG4gIHByb3RlY3RlZCBydW5JdGVtc0VuYWJsZUNvbmRpdGlvbihcbiAgICB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+XG4gICk6IGFueSB7XG4gICAgdGhpcy5zZXRDb25kaXRpb25hbEVuYWJsZUNob2ljZXNSdW5uZXIoKTtcbiAgICB2YXIgaGFzQ2hhbmdlZCA9IEl0ZW1WYWx1ZS5ydW5FbmFibGVkQ29uZGl0aW9uc0Zvckl0ZW1zKFxuICAgICAgdGhpcy5hY3RpdmVDaG9pY2VzLFxuICAgICAgdGhpcy5jb25kaXRpb25DaG9pY2VzRW5hYmxlSWZSdW5uZXIsXG4gICAgICB2YWx1ZXMsXG4gICAgICBwcm9wZXJ0aWVzLFxuICAgICAgKGl0ZW06IEl0ZW1WYWx1ZSk6IGJvb2xlYW4gPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5vbkVuYWJsZUl0ZW1DYWxsQmFjayhpdGVtKTtcbiAgICAgIH1cbiAgICApO1xuICAgIGlmIChoYXNDaGFuZ2VkKSB7XG4gICAgICB0aGlzLmNsZWFyRGlzYWJsZWRWYWx1ZXMoKTtcbiAgICB9XG4gICAgdGhpcy5vbkFmdGVyUnVuSXRlbXNFbmFibGVDb25kaXRpb24oKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25BZnRlclJ1bkl0ZW1zRW5hYmxlQ29uZGl0aW9uKCkge31cbiAgcHJvdGVjdGVkIG9uRW5hYmxlSXRlbUNhbGxCYWNrKGl0ZW06IEl0ZW1WYWx1ZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByaXZhdGUgc2V0Q29uZGl0aW9uYWxDaG9pY2VzUnVubmVyKCkge1xuICAgIGlmICh0aGlzLmNob2ljZXNWaXNpYmxlSWYpIHtcbiAgICAgIGlmICghdGhpcy5jb25kaXRpb25DaG9pY2VzVmlzaWJsZUlmUnVubmVyKSB7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uQ2hvaWNlc1Zpc2libGVJZlJ1bm5lciA9IG5ldyBDb25kaXRpb25SdW5uZXIoXG4gICAgICAgICAgdGhpcy5jaG9pY2VzVmlzaWJsZUlmXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aGlzLmNvbmRpdGlvbkNob2ljZXNWaXNpYmxlSWZSdW5uZXIuZXhwcmVzc2lvbiA9IHRoaXMuY2hvaWNlc1Zpc2libGVJZjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb25kaXRpb25DaG9pY2VzVmlzaWJsZUlmUnVubmVyID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBzZXRDb25kaXRpb25hbEVuYWJsZUNob2ljZXNSdW5uZXIoKSB7XG4gICAgaWYgKHRoaXMuY2hvaWNlc0VuYWJsZUlmKSB7XG4gICAgICBpZiAoIXRoaXMuY29uZGl0aW9uQ2hvaWNlc0VuYWJsZUlmUnVubmVyKSB7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uQ2hvaWNlc0VuYWJsZUlmUnVubmVyID0gbmV3IENvbmRpdGlvblJ1bm5lcihcbiAgICAgICAgICB0aGlzLmNob2ljZXNFbmFibGVJZlxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdGhpcy5jb25kaXRpb25DaG9pY2VzRW5hYmxlSWZSdW5uZXIuZXhwcmVzc2lvbiA9IHRoaXMuY2hvaWNlc0VuYWJsZUlmO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbmRpdGlvbkNob2ljZXNFbmFibGVJZlJ1bm5lciA9IG51bGw7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgcnVuQ29uZGl0aW9uc0Zvckl0ZW1zKFxuICAgIHZhbHVlczogSGFzaFRhYmxlPGFueT4sXG4gICAgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT5cbiAgKTogYm9vbGVhbiB7XG4gICAgdGhpcy5maWx0ZXJlZENob2ljZXNWYWx1ZSA9IFtdO1xuICAgIHJldHVybiBJdGVtVmFsdWUucnVuQ29uZGl0aW9uc0Zvckl0ZW1zKFxuICAgICAgdGhpcy5hY3RpdmVDaG9pY2VzLFxuICAgICAgdGhpcy5nZXRGaWx0ZXJlZENob2ljZXMoKSxcbiAgICAgIHRoaXMuYXJlSW52aXNpYmxlRWxlbWVudHNTaG93aW5nXG4gICAgICAgID8gbnVsbFxuICAgICAgICA6IHRoaXMuY29uZGl0aW9uQ2hvaWNlc1Zpc2libGVJZlJ1bm5lcixcbiAgICAgIHZhbHVlcyxcbiAgICAgIHByb3BlcnRpZXMsXG4gICAgICAhdGhpcy5zdXJ2ZXkgfHwgIXRoaXMuc3VydmV5LmFyZUludmlzaWJsZUVsZW1lbnRzU2hvd2luZ1xuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEhhc090aGVyKHZhbDogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHZhbCA9PT0gdGhpcy5vdGhlckl0ZW0udmFsdWU7XG4gIH1cbiAgZ2V0IHZhbGlkYXRlZFZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucmVuZHJlZFZhbHVlVG9EYXRhQ29yZSh0aGlzLnZhbHVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlUmVzdGZ1bCgpOiBDaG9pY2VzUmVzdGZ1bCB7XG4gICAgcmV0dXJuIG5ldyBDaG9pY2VzUmVzdGZ1bCgpO1xuICB9XG4gIHByaXZhdGUgc2V0TmV3UmVzdGZ1bFByb3BlcnR5KCkge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNob2ljZXNCeVVybFwiLCB0aGlzLmNyZWF0ZVJlc3RmdWwoKSk7XG4gICAgdGhpcy5jaG9pY2VzQnlVcmwub3duZXIgPSB0aGlzO1xuICAgIHRoaXMuY2hvaWNlc0J5VXJsLmxvYWRpbmdPd25lciA9IHRoaXM7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFF1ZXN0aW9uQ29tbWVudCgpOiBzdHJpbmcge1xuICAgIGlmICghIXRoaXMuY29tbWVudFZhbHVlKSByZXR1cm4gdGhpcy5jb21tZW50VmFsdWU7XG4gICAgaWYgKHRoaXMuaGFzQ29tbWVudCB8fCB0aGlzLmdldFN0b3JlT3RoZXJzQXNDb21tZW50KCkpXG4gICAgICByZXR1cm4gc3VwZXIuZ2V0UXVlc3Rpb25Db21tZW50KCk7XG4gICAgcmV0dXJuIHRoaXMuY29tbWVudFZhbHVlO1xuICB9XG4gIHByaXZhdGUgaXNTZXR0aW5nQ29tbWVudDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgc2V0UXVlc3Rpb25Db21tZW50KG5ld1ZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5oYXNDb21tZW50IHx8IHRoaXMuZ2V0U3RvcmVPdGhlcnNBc0NvbW1lbnQoKSlcbiAgICAgIHN1cGVyLnNldFF1ZXN0aW9uQ29tbWVudChuZXdWYWx1ZSk7XG4gICAgZWxzZSB7XG4gICAgICBpZiAoIXRoaXMuaXNTZXR0aW5nQ29tbWVudCAmJiBuZXdWYWx1ZSAhPSB0aGlzLmNvbW1lbnRWYWx1ZSkge1xuICAgICAgICB0aGlzLmlzU2V0dGluZ0NvbW1lbnQgPSB0cnVlO1xuICAgICAgICB0aGlzLmNvbW1lbnRWYWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICBpZiAodGhpcy5pc090aGVyU2VsZWN0ZWQgJiYgIXRoaXMuaXNSZW5kZXJlZFZhbHVlU2V0dGluZykge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnJlbmRyZWRWYWx1ZVRvRGF0YSh0aGlzLnJlbmRlcmVkVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNTZXR0aW5nQ29tbWVudCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwdWJsaWMgY2xlYXJWYWx1ZSgpIHtcbiAgICBzdXBlci5jbGVhclZhbHVlKCk7XG4gICAgdGhpcy5wcmV2Q29tbWVudFZhbHVlID0gdW5kZWZpbmVkO1xuICB9XG4gIHB1YmxpYyBnZXQgcmVuZGVyZWRWYWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyZW5kZXJlZFZhbHVlXCIsIG51bGwpO1xuICB9XG4gIHB1YmxpYyBzZXQgcmVuZGVyZWRWYWx1ZSh2YWw6IGFueSkge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJlbmRlcmVkVmFsdWVcIiwgdmFsKTtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5yZW5kcmVkVmFsdWVUb0RhdGEodmFsKTtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0UXVlc3Rpb25WYWx1ZShcbiAgICBuZXdWYWx1ZTogYW55LFxuICAgIHVwZGF0ZUlzQW5zd2VyZWQ6IGJvb2xlYW4gPSB0cnVlLFxuICAgIHVwZGF0ZUNvbW1lbnQ6IGJvb2xlYW4gPSB0cnVlXG4gICkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuaXNMb2FkaW5nRnJvbUpzb24gfHxcbiAgICAgIEhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyh0aGlzLnZhbHVlLCBuZXdWYWx1ZSlcbiAgICApXG4gICAgICByZXR1cm47XG4gICAgc3VwZXIuc2V0UXVlc3Rpb25WYWx1ZShuZXdWYWx1ZSwgdXBkYXRlSXNBbnN3ZXJlZCk7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicmVuZGVyZWRWYWx1ZVwiLCB0aGlzLnJlbmRyZWRWYWx1ZUZyb21EYXRhKG5ld1ZhbHVlKSk7XG4gICAgaWYgKHRoaXMuaGFzQ29tbWVudCB8fCAhdXBkYXRlQ29tbWVudCkgcmV0dXJuO1xuICAgIHZhciBpc090aGVyU2VsID0gdGhpcy5pc090aGVyU2VsZWN0ZWQ7XG4gICAgaWYgKGlzT3RoZXJTZWwgJiYgISF0aGlzLnByZXZDb21tZW50VmFsdWUpIHtcbiAgICAgIHZhciBvbGRDb21tZW50ID0gdGhpcy5wcmV2Q29tbWVudFZhbHVlO1xuICAgICAgdGhpcy5wcmV2Q29tbWVudFZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5jb21tZW50ID0gb2xkQ29tbWVudDtcbiAgICB9XG4gICAgaWYgKCFpc090aGVyU2VsICYmICEhdGhpcy5jb21tZW50KSB7XG4gICAgICBpZiAodGhpcy5nZXRTdG9yZU90aGVyc0FzQ29tbWVudCgpKSB7XG4gICAgICAgIHRoaXMucHJldkNvbW1lbnRWYWx1ZSA9IHRoaXMuY29tbWVudDtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29tbWVudCA9IFwiXCI7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBzZXROZXdWYWx1ZShuZXdWYWx1ZTogYW55KSB7XG4gICAgbmV3VmFsdWUgPSB0aGlzLnZhbHVlRnJvbURhdGEobmV3VmFsdWUpO1xuICAgIGlmIChcbiAgICAgICghdGhpcy5jaG9pY2VzQnlVcmwuaXNSdW5uaW5nICYmXG4gICAgICAgICF0aGlzLmNob2ljZXNCeVVybC5pc1dhaXRpbmdGb3JQYXJhbWV0ZXJzKSB8fFxuICAgICAgIXRoaXMuaXNWYWx1ZUVtcHR5KG5ld1ZhbHVlKVxuICAgICkge1xuICAgICAgdGhpcy5jYWNoZWRWYWx1ZUZvclVybFJlcXVlc3RzID0gbmV3VmFsdWU7XG4gICAgfVxuICAgIHN1cGVyLnNldE5ld1ZhbHVlKG5ld1ZhbHVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgdmFsdWVGcm9tRGF0YSh2YWw6IGFueSk6IGFueSB7XG4gICAgbGV0IGNob2ljZWl0ZW0gPSBJdGVtVmFsdWUuZ2V0SXRlbUJ5VmFsdWUodGhpcy5hY3RpdmVDaG9pY2VzLCB2YWwpO1xuICAgIGlmICghIWNob2ljZWl0ZW0pIHtcbiAgICAgIHJldHVybiBjaG9pY2VpdGVtLnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gc3VwZXIudmFsdWVGcm9tRGF0YSh2YWwpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kcmVkVmFsdWVGcm9tRGF0YSh2YWw6IGFueSk6IGFueSB7XG4gICAgaWYgKHRoaXMuZ2V0U3RvcmVPdGhlcnNBc0NvbW1lbnQoKSkgcmV0dXJuIHZhbDtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJlZFZhbHVlRnJvbURhdGFDb3JlKHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRyZWRWYWx1ZVRvRGF0YSh2YWw6IGFueSk6IGFueSB7XG4gICAgaWYgKHRoaXMuZ2V0U3RvcmVPdGhlcnNBc0NvbW1lbnQoKSkgcmV0dXJuIHZhbDtcbiAgICByZXR1cm4gdGhpcy5yZW5kcmVkVmFsdWVUb0RhdGFDb3JlKHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlcmVkVmFsdWVGcm9tRGF0YUNvcmUodmFsOiBhbnkpOiBhbnkge1xuICAgIGlmICghdGhpcy5oYXNVbmtub3duVmFsdWUodmFsLCB0cnVlLCBmYWxzZSkpIHJldHVybiB0aGlzLnZhbHVlRnJvbURhdGEodmFsKTtcbiAgICB0aGlzLmNvbW1lbnQgPSB2YWw7XG4gICAgcmV0dXJuIHRoaXMub3RoZXJJdGVtLnZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCByZW5kcmVkVmFsdWVUb0RhdGFDb3JlKHZhbDogYW55KTogYW55IHtcbiAgICBpZiAodmFsID09IHRoaXMub3RoZXJJdGVtLnZhbHVlICYmIHRoaXMuZ2V0UXVlc3Rpb25Db21tZW50KCkpIHtcbiAgICAgIHZhbCA9IHRoaXMuZ2V0UXVlc3Rpb25Db21tZW50KCk7XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG4gIH1cbiAgcHJvdGVjdGVkIGhhc1Vua25vd25WYWx1ZShcbiAgICB2YWw6IGFueSxcbiAgICBpbmNsdWRlT3RoZXI6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBpc0ZpbHRlcmVkQ2hvaWNlczogYm9vbGVhbiA9IHRydWUsXG4gICAgY2hlY2tFbXB0eVZhbHVlOiBib29sZWFuID0gZmFsc2VcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKCFjaGVja0VtcHR5VmFsdWUgJiYgdGhpcy5pc1ZhbHVlRW1wdHkodmFsKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChpbmNsdWRlT3RoZXIgJiYgdmFsID09IHRoaXMub3RoZXJJdGVtLnZhbHVlKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRoaXMuaGFzTm9uZSAmJiB2YWwgPT0gdGhpcy5ub25lSXRlbS52YWx1ZSkgcmV0dXJuIGZhbHNlO1xuICAgIHZhciBjaG9pY2VzID0gaXNGaWx0ZXJlZENob2ljZXNcbiAgICAgID8gdGhpcy5nZXRGaWx0ZXJlZENob2ljZXMoKVxuICAgICAgOiB0aGlzLmFjdGl2ZUNob2ljZXM7XG4gICAgcmV0dXJuIEl0ZW1WYWx1ZS5nZXRJdGVtQnlWYWx1ZShjaG9pY2VzLCB2YWwpID09IG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIGlzVmFsdWVEaXNhYmxlZCh2YWw6IGFueSk6IGJvb2xlYW4ge1xuICAgIHZhciBpdGVtVmFsdWUgPSBJdGVtVmFsdWUuZ2V0SXRlbUJ5VmFsdWUodGhpcy5nZXRGaWx0ZXJlZENob2ljZXMoKSwgdmFsKTtcbiAgICByZXR1cm4gISFpdGVtVmFsdWUgJiYgIWl0ZW1WYWx1ZS5pc0VuYWJsZWQ7XG4gIH1cbiAgLyoqXG4gICAqIElmIHRoZSBjbGVhckluY29ycmVjdFZhbHVlc0NhbGxiYWNrIGlzIHNldCwgaXQgaXMgdXNlZCB0byBjbGVhciBpbmNvcnJlY3QgdmFsdWVzIGluc3RlYWQgb2YgZGVmYXVsdCBiZWhhdmlvdXIuXG4gICAqL1xuICBwdWJsaWMgY2xlYXJJbmNvcnJlY3RWYWx1ZXNDYWxsYmFjazogKCkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIGZpbGwgdGhlIGNob2ljZXMgZnJvbSBhIFJFU1RmdWwgc2VydmljZS5cbiAgICogQHNlZSBjaG9pY2VzXG4gICAqIEBzZWUgQ2hvaWNlc1Jlc3RmdWxcbiAgICogQHNlZSBbRXhhbXBsZTogUkVTVGZ1bCBEcm9wZG93bl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9FeGFtcGxlcy9MaWJyYXJ5Lz9pZD1xdWVzdGlvbnR5cGUtZHJvcGRvd25yZXN0ZnVsbClcbiAgICogQHNlZSBbRG9jczogRmlsbCBDaG9pY2VzIGZyb20gYSBSRVNUZnVsIFNlcnZpY2VdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5Lz9pZD1MaWJyYXJ5T3ZlcnZpZXcjZmlsbC10aGUtY2hvaWNlcy1mcm9tLWEtcmVzdGZ1bC1zZXJ2aWNlKVxuICAgKi9cbiAgcHVibGljIGdldCBjaG9pY2VzQnlVcmwoKTogQ2hvaWNlc1Jlc3RmdWwge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjaG9pY2VzQnlVcmxcIik7XG4gIH1cbiAgcHVibGljIHNldCBjaG9pY2VzQnlVcmwodmFsOiBDaG9pY2VzUmVzdGZ1bCkge1xuICAgIGlmICghdmFsKSByZXR1cm47XG4gICAgdGhpcy5zZXROZXdSZXN0ZnVsUHJvcGVydHkoKTtcbiAgICB0aGlzLmNob2ljZXNCeVVybC5mcm9tSlNPTih2YWwudG9KU09OKCkpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBpdGVtcy4gRXZlcnkgaXRlbSBoYXMgdmFsdWUgYW5kIHRleHQuIElmIHRleHQgaXMgZW1wdHksIHRoZSB2YWx1ZSBpcyByZW5kZXJlZC4gVGhlIGl0ZW0gdGV4dCBzdXBwb3J0cyBtYXJrZG93bi5cbiAgICogQHNlZSBjaG9pY2VzQnlVcmxcbiAgICogQHNlZSBjaG9pY2VzRnJvbVF1ZXN0aW9uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNob2ljZXMoKTogQXJyYXk8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNob2ljZXNcIik7XG4gIH1cbiAgcHVibGljIHNldCBjaG9pY2VzKG5ld1ZhbHVlOiBBcnJheTxhbnk+KSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlc1wiLCBuZXdWYWx1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGdldCBjaG9pY2VzIGZyb20gdGhlIHNwZWNpZmllZCBxdWVzdGlvbiBpbnN0ZWFkIG9mIGRlZmluaW5nIHRoZW0gaW4gdGhlIGN1cnJlbnQgcXVlc3Rpb24uIFRoaXMgYXZvaWRzIGR1cGxpY2F0aW9uIG9mIGNob2ljZXMgZGVjbGFyYXRpb24gaW4geW91ciBzdXJ2ZXkgZGVmaW5pdGlvbi5cbiAgICogQnkgc2V0dGluZyB0aGlzIHByb3BlcnR5LCB0aGUgXCJjaG9pY2VzXCIsIFwiY2hvaWNlc1Zpc2libGVJZlwiLCBcImNob2ljZXNFbmFibGVJZlwiIGFuZCBcImNob2ljZXNPcmRlclwiIHByb3BlcnRpZXMgYmVjb21lIGludmlzaWJsZSwgYmVjYXVzZSB0aGVzZSBxdWVzdGlvbiBjaGFyYWN0ZXJpc3RpY3MgZGVwZW5kIG9uIGFjdGlvbnMgaW4gYW5vdGhlciAoc3BlY2lmaWVkKSBxdWVzdGlvbi5cbiAgICogVXNlIHRoZSBgY2hvaWNlc0Zyb21RdWVzdGlvbk1vZGVgIHByb3BlcnR5IHRvIGZpbHRlciBjaG9pY2VzIG9idGFpbmVkIGZyb20gdGhlIHNwZWNpZmllZCBxdWVzdGlvbi5cbiAgICogQHNlZSBjaG9pY2VzXG4gICAqIEBzZWUgY2hvaWNlc0Zyb21RdWVzdGlvbk1vZGVcbiAgICovXG4gIHB1YmxpYyBnZXQgY2hvaWNlc0Zyb21RdWVzdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjaG9pY2VzRnJvbVF1ZXN0aW9uXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY2hvaWNlc0Zyb21RdWVzdGlvbih2YWw6IHN0cmluZykge1xuICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuZ2V0UXVlc3Rpb25XaXRoQ2hvaWNlcygpO1xuICAgIGlmICghIXF1ZXN0aW9uKSB7XG4gICAgICBxdWVzdGlvbi5yZW1vdmVGcm9tRGVwZW5kZWRRdWVzdGlvbih0aGlzKTtcbiAgICB9XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlc0Zyb21RdWVzdGlvblwiLCB2YWwpO1xuICB9XG4gIHByaXZhdGUgYWRkSW50b0RlcGVuZGVkUXVlc3Rpb24ocXVlc3Rpb246IFF1ZXN0aW9uU2VsZWN0QmFzZSkge1xuICAgIGlmICghcXVlc3Rpb24gfHwgcXVlc3Rpb24uZGVwZW5kZWRRdWVzdGlvbnMuaW5kZXhPZih0aGlzKSA+IC0xKSByZXR1cm47XG4gICAgcXVlc3Rpb24uZGVwZW5kZWRRdWVzdGlvbnMucHVzaCh0aGlzKTtcbiAgfVxuICBwcml2YXRlIHJlbW92ZUZyb21EZXBlbmRlZFF1ZXN0aW9uKHF1ZXN0aW9uOiBRdWVzdGlvblNlbGVjdEJhc2UpIHtcbiAgICBpZiAoIXF1ZXN0aW9uKSByZXR1cm47XG4gICAgdmFyIGluZGV4ID0gcXVlc3Rpb24uZGVwZW5kZWRRdWVzdGlvbnMuaW5kZXhPZih0aGlzKTtcbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgcXVlc3Rpb24uZGVwZW5kZWRRdWVzdGlvbnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFRoaXMgcHJvcGVydHkgYmVjb21lcyB2aXNpYmxlIHdoZW4gdGhlIGBjaG9pY2VzRnJvbVF1ZXN0aW9uYCBwcm9wZXJ0eSBpcyBzZWxlY3RlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgXCJhbGxcIiAoYWxsIHZpc2libGUgY2hvaWNlcyBmcm9tIGFub3RoZXIgcXVlc3Rpb24gYXJlIGRpc3BsYXllZCBhcyB0aGV5IGFyZSkuXG4gICAqIFlvdSBjYW4gc2V0IHRoaXMgcHJvcGVydHkgdG8gXCJzZWxlY3RlZFwiIG9yIFwidW5zZWxlY3RlZFwiIHRvIGRpc3BsYXkgb25seSBzZWxlY3RlZCBvciB1bnNlbGVjdGVkIGNob2ljZXMgZnJvbSB0aGUgc3BlY2lmaWVkIHF1ZXN0aW9uLlxuICAgKiBAc2VlIGNob2ljZXNGcm9tUXVlc3Rpb25cbiAgICovXG4gIHB1YmxpYyBnZXQgY2hvaWNlc0Zyb21RdWVzdGlvbk1vZGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlc0Zyb21RdWVzdGlvbk1vZGVcIik7XG4gIH1cbiAgcHVibGljIHNldCBjaG9pY2VzRnJvbVF1ZXN0aW9uTW9kZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNob2ljZXNGcm9tUXVlc3Rpb25Nb2RlXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIHRydWUgdG8gaGlkZSB0aGUgcXVlc3Rpb24gaWYgdGhlcmUgaXMgbm8gdmlzaWJsZSBjaG9pY2VzLlxuICAgKi9cbiAgcHVibGljIGdldCBoaWRlSWZDaG9pY2VzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImhpZGVJZkNob2ljZXNFbXB0eVwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBoaWRlSWZDaG9pY2VzRW1wdHkodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaGlkZUlmQ2hvaWNlc0VtcHR5XCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBrZWVwSW5jb3JyZWN0VmFsdWVzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJrZWVwSW5jb3JyZWN0VmFsdWVzXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGtlZXBJbmNvcnJlY3RWYWx1ZXModmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwia2VlcEluY29ycmVjdFZhbHVlc1wiLCB2YWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBsZWFzZSB1c2Ugc3VydmV5LnN0b3JlT3RoZXJzQXNDb21tZW50IHRvIGNoYW5nZSB0aGUgYmVoYXZpb3Igb24gdGhlIHN1cnZleSBsZXZlbC4gVGhpcyBwcm9wZXJ0eSBpcyBkZXByaWNhdGVkIGFuZCBpbnZpc2libGUgaW4gU3VydmV5IENyZWF0b3IuXG4gICAqIEJ5IGRlZmF1bHQgdGhlIGVudGVyZWQgdGV4dCBpbiB0aGUgb3RoZXJzIGlucHV0IGluIHRoZSBjaGVja2JveC9yYWRpb2dyb3VwL2Ryb3Bkb3duIGFyZSBzdG9yZWQgYXMgXCJxdWVzdGlvbiBuYW1lIFwiICsgXCItQ29tbWVudFwiLiBUaGUgdmFsdWUgaXRzZWxmIGlzIFwicXVlc3Rpb24gbmFtZVwiOiBcIm90aGVyc1wiLiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBmYWxzZSwgdG8gc3RvcmUgdGhlIGVudGVyZWQgdGV4dCBkaXJlY3RseSBpbiB0aGUgXCJxdWVzdGlvbiBuYW1lXCIga2V5LlxuICAgKiBQb3NzaWJsZSB2YWx1ZXMgYXJlOiBcImRlZmF1bHRcIiwgdHJ1ZSwgZmFsc2VcbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5zdG9yZU90aGVyc0FzQ29tbWVudFxuICAgKi9cbiAgcHVibGljIGdldCBzdG9yZU90aGVyc0FzQ29tbWVudCgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzdG9yZU90aGVyc0FzQ29tbWVudFwiLCBcImRlZmF1bHRcIik7XG4gIH1cbiAgcHVibGljIHNldCBzdG9yZU90aGVyc0FzQ29tbWVudCh2YWw6IGFueSkge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInN0b3JlT3RoZXJzQXNDb21tZW50XCIsIHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIGhhc090aGVyQ2hhbmdlZCgpIHtcbiAgICB0aGlzLm9uVmlzaWJsZUNob2ljZXNDaGFuZ2VkKCk7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIHJlbmRlciBpdGVtcyBpbiBhIHNwZWNpZmljIG9yZGVyOiBcImFzY1wiLCBcImRlc2NcIiwgXCJyYW5kb21cIi4gRGVmYXVsdCB2YWx1ZSBpcyBcIm5vbmVcIi5cbiAgICovXG4gIHB1YmxpYyBnZXQgY2hvaWNlc09yZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNob2ljZXNPcmRlclwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNob2ljZXNPcmRlcih2YWw6IHN0cmluZykge1xuICAgIHZhbCA9IHZhbC50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICh2YWwgPT0gdGhpcy5jaG9pY2VzT3JkZXIpIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjaG9pY2VzT3JkZXJcIiwgdmFsKTtcbiAgICB0aGlzLm9uVmlzaWJsZUNob2ljZXNDaGFuZ2VkKCk7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIHNldCB0aGUgZGlmZmVyZW50IHRleHQgZm9yIG90aGVyIGl0ZW0uXG4gICAqL1xuICBwdWJsaWMgZ2V0IG90aGVyVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcbiAgICAgIFwib3RoZXJUZXh0XCIsXG4gICAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwib3RoZXJJdGVtVGV4dFwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBvdGhlclRleHQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcIm90aGVyVGV4dFwiLCB2YWwpO1xuICAgIHRoaXMub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKTtcbiAgfVxuICBnZXQgbG9jT3RoZXJUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcIm90aGVyVGV4dFwiKTtcbiAgfVxuICAvKipcbiAgICogIFVzZSB0aGlzIHByb3BlcnR5IHRvIHNldCB0aGUgcGxhY2UgaG9sZGVyIHRleHQgZm9yIG90aGVyIG9yIGNvbW1lbnQgZmllbGQgIC5cbiAgICovXG4gIHB1YmxpYyBnZXQgb3RoZXJQbGFjZUhvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcIm90aGVyUGxhY2VIb2xkZXJcIik7XG4gIH1cbiAgcHVibGljIHNldCBvdGhlclBsYWNlSG9sZGVyKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJvdGhlclBsYWNlSG9sZGVyXCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY090aGVyUGxhY2VIb2xkZXIoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwib3RoZXJQbGFjZUhvbGRlclwiKTtcbiAgfVxuICAvKipcbiAgICogVGhlIHRleHQgdGhhdCBzaG93cyB3aGVuIHRoZSBvdGhlciBpdGVtIGlzIGNob29zZWQgYnkgdGhlIG90aGVyIGlucHV0IGlzIGVtcHR5LlxuICAgKi9cbiAgcHVibGljIGdldCBvdGhlckVycm9yVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcbiAgICAgIFwib3RoZXJFcnJvclRleHRcIixcbiAgICAgIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJvdGhlclJlcXVpcmVkRXJyb3JcIilcbiAgICApO1xuICB9XG4gIHB1YmxpYyBzZXQgb3RoZXJFcnJvclRleHQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcIm90aGVyRXJyb3JUZXh0XCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY090aGVyRXJyb3JUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcIm90aGVyRXJyb3JUZXh0XCIpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBpdGVtcyBhcyB0aGV5IHdpbGwgYmUgcmVuZGVyZWQuIElmIG5lZWRlZCBpdGVtcyBhcmUgc29ydGVkIGFuZCB0aGUgb3RoZXIgaXRlbSBpcyBhZGRlZC5cbiAgICogQHNlZSBoYXNPdGhlclxuICAgKiBAc2VlIGNob2ljZXNPcmRlclxuICAgKiBAc2VlIGVuYWJsZWRDaG9pY2VzXG4gICAqL1xuICBwdWJsaWMgZ2V0IHZpc2libGVDaG9pY2VzKCk6IEFycmF5PEl0ZW1WYWx1ZT4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmxlQ2hvaWNlc1wiLCBbXSk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIGVuYWJsZWQgaXRlbXMgYXMgdGhleSB3aWxsIGJlIHJlbmRlcmVkLiBUaGUgZGlzYWJsZWQgaXRlbXMgYXJlIG5vdCBpbmNsdWRlZFxuICAgKiBAc2VlIGhhc090aGVyXG4gICAqIEBzZWUgY2hvaWNlc09yZGVyXG4gICAqIEBzZWUgdmlzaWJsZUNob2ljZXNcbiAgICovXG4gIHB1YmxpYyBnZXQgZW5hYmxlZENob2ljZXMoKTogQXJyYXk8SXRlbVZhbHVlPiB7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHZhciBpdGVtcyA9IHRoaXMudmlzaWJsZUNob2ljZXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGl0ZW1zW2ldLmlzRW5hYmxlZCkgcmVzLnB1c2goaXRlbXNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByb3RlY3RlZCB1cGRhdGVWaXNpYmxlQ2hvaWNlcygpIHtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbikgcmV0dXJuO1xuICAgIHZhciBuZXdWYWx1ZSA9IG5ldyBBcnJheTxJdGVtVmFsdWU+KCk7XG4gICAgdmFyIGNhbGNWYWx1ZSA9IHRoaXMuY2FsY1Zpc2libGVDaG9pY2VzKCk7XG4gICAgaWYgKCFjYWxjVmFsdWUpIGNhbGNWYWx1ZSA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2FsY1ZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBuZXdWYWx1ZS5wdXNoKGNhbGNWYWx1ZVtpXSk7XG4gICAgfVxuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVDaG9pY2VzXCIsIG5ld1ZhbHVlKTtcbiAgfVxuICBwcml2YXRlIGNhbGNWaXNpYmxlQ2hvaWNlcygpOiBBcnJheTxJdGVtVmFsdWU+IHtcbiAgICBpZiAodGhpcy5jYW5Vc2VGaWx0ZXJlZENob2ljZXMoKSkgcmV0dXJuIHRoaXMuZ2V0RmlsdGVyZWRDaG9pY2VzKCk7XG4gICAgdmFyIHJlcyA9IHRoaXMuc29ydFZpc2libGVDaG9pY2VzKHRoaXMuZ2V0RmlsdGVyZWRDaG9pY2VzKCkuc2xpY2UoKSk7XG4gICAgdGhpcy5hZGRUb1Zpc2libGVDaG9pY2VzKHJlcywgdGhpcy5pc0FkZERlZmF1bHRJdGVtcyk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcm90ZWN0ZWQgY2FuVXNlRmlsdGVyZWRDaG9pY2VzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAhdGhpcy5pc0FkZERlZmF1bHRJdGVtcyAmJlxuICAgICAgIXRoaXMuaGFzTm9uZSAmJlxuICAgICAgIXRoaXMuaGFzT3RoZXIgJiZcbiAgICAgIHRoaXMuY2hvaWNlc09yZGVyID09IFwibm9uZVwiXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgYWRkVG9WaXNpYmxlQ2hvaWNlcyhpdGVtczogQXJyYXk8SXRlbVZhbHVlPiwgaXNBZGRBbGw6IGJvb2xlYW4pIHtcbiAgICBpZiAoaXNBZGRBbGwpIHtcbiAgICAgIGlmICghdGhpcy5uZXdJdGVtVmFsdWUpIHtcbiAgICAgICAgdGhpcy5uZXdJdGVtVmFsdWUgPSBuZXcgSXRlbVZhbHVlKFwibmV3aXRlbVwiKTsgLy9UT0RPXG4gICAgICB9XG4gICAgICBpdGVtcy5wdXNoKHRoaXMubmV3SXRlbVZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3VwcG9ydE90aGVyKCkgJiYgKGlzQWRkQWxsIHx8IHRoaXMuaGFzT3RoZXIpKSB7XG4gICAgICBpdGVtcy5wdXNoKHRoaXMub3RoZXJJdGVtKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3VwcG9ydE5vbmUoKSAmJiAoaXNBZGRBbGwgfHwgdGhpcy5oYXNOb25lKSkge1xuICAgICAgaXRlbXMucHVzaCh0aGlzLm5vbmVJdGVtKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEZvciBpbnRlcm5hbCB1c2UgaW4gU3VydmV5SlMgQ3JlYXRvciBWMi5cbiAgICovXG4gIHB1YmxpYyBpc0l0ZW1Jbkxpc3QoaXRlbTogSXRlbVZhbHVlKTogYm9vbGVhbiB7XG4gICAgaWYgKGl0ZW0gPT09IHRoaXMub3RoZXJJdGVtKSByZXR1cm4gdGhpcy5oYXNPdGhlcjtcbiAgICBpZiAoaXRlbSA9PT0gdGhpcy5ub25lSXRlbSkgcmV0dXJuIHRoaXMuaGFzTm9uZTtcbiAgICBpZiAoaXRlbSA9PT0gdGhpcy5uZXdJdGVtVmFsdWUpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGlzQWRkRGVmYXVsdEl0ZW1zKCkge1xuICAgIHJldHVybiAoXG4gICAgICBzZXR0aW5ncy5zdXBwb3J0Q3JlYXRvclYyICYmIHRoaXMuaXNEZXNpZ25Nb2RlICYmICF0aGlzLnBhcmVudFF1ZXN0aW9uXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0UGxhaW5EYXRhKFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGluY2x1ZGVFbXB0eT86IGJvb2xlYW47XG4gICAgICBpbmNsdWRlUXVlc3Rpb25UeXBlcz86IGJvb2xlYW47XG4gICAgICBjYWxjdWxhdGlvbnM/OiBBcnJheTx7XG4gICAgICAgIHByb3BlcnR5TmFtZTogc3RyaW5nO1xuICAgICAgfT47XG4gICAgfSA9IHtcbiAgICAgIGluY2x1ZGVFbXB0eTogdHJ1ZSxcbiAgICAgIGluY2x1ZGVRdWVzdGlvblR5cGVzOiBmYWxzZSxcbiAgICB9XG4gICkge1xuICAgIHZhciBxdWVzdGlvblBsYWluRGF0YSA9IHN1cGVyLmdldFBsYWluRGF0YShvcHRpb25zKTtcbiAgICBpZiAoISFxdWVzdGlvblBsYWluRGF0YSkge1xuICAgICAgdmFyIHZhbHVlcyA9IEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgPyB0aGlzLnZhbHVlIDogW3RoaXMudmFsdWVdO1xuICAgICAgcXVlc3Rpb25QbGFpbkRhdGEuaXNOb2RlID0gdHJ1ZTtcbiAgICAgIHF1ZXN0aW9uUGxhaW5EYXRhLmRhdGEgPSAocXVlc3Rpb25QbGFpbkRhdGEuZGF0YSB8fCBbXSkuY29uY2F0KFxuICAgICAgICB2YWx1ZXMubWFwKChkYXRhVmFsdWUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgdmFyIGNob2ljZSA9IEl0ZW1WYWx1ZS5nZXRJdGVtQnlWYWx1ZSh0aGlzLnZpc2libGVDaG9pY2VzLCBkYXRhVmFsdWUpO1xuICAgICAgICAgIHZhciBjaG9pY2VEYXRhSXRlbSA9IDxhbnk+e1xuICAgICAgICAgICAgbmFtZTogaW5kZXgsXG4gICAgICAgICAgICB0aXRsZTogXCJDaG9pY2VcIixcbiAgICAgICAgICAgIHZhbHVlOiBkYXRhVmFsdWUsXG4gICAgICAgICAgICBkaXNwbGF5VmFsdWU6IHRoaXMuZ2V0Q2hvaWNlc0Rpc3BsYXlWYWx1ZShcbiAgICAgICAgICAgICAgdGhpcy52aXNpYmxlQ2hvaWNlcyxcbiAgICAgICAgICAgICAgZGF0YVZhbHVlXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgZ2V0U3RyaW5nOiAodmFsOiBhbnkpID0+XG4gICAgICAgICAgICAgIHR5cGVvZiB2YWwgPT09IFwib2JqZWN0XCIgPyBKU09OLnN0cmluZ2lmeSh2YWwpIDogdmFsLFxuICAgICAgICAgICAgaXNOb2RlOiBmYWxzZSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmICghIWNob2ljZSkge1xuICAgICAgICAgICAgKG9wdGlvbnMuY2FsY3VsYXRpb25zIHx8IFtdKS5mb3JFYWNoKChjYWxjdWxhdGlvbikgPT4ge1xuICAgICAgICAgICAgICBjaG9pY2VEYXRhSXRlbVtjYWxjdWxhdGlvbi5wcm9wZXJ0eU5hbWVdID1cbiAgICAgICAgICAgICAgICBjaG9pY2VbY2FsY3VsYXRpb24ucHJvcGVydHlOYW1lXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5pc090aGVyU2VsZWN0ZWQgJiYgdGhpcy5vdGhlckl0ZW1WYWx1ZSA9PT0gY2hvaWNlKSB7XG4gICAgICAgICAgICBjaG9pY2VEYXRhSXRlbS5pc090aGVyID0gdHJ1ZTtcbiAgICAgICAgICAgIGNob2ljZURhdGFJdGVtLmRpc3BsYXlWYWx1ZSA9IHRoaXMuY29tbWVudDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNob2ljZURhdGFJdGVtO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHF1ZXN0aW9uUGxhaW5EYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHRleHQgZm9yIHRoZSBjdXJyZW50IHZhbHVlLiBJZiB0aGUgdmFsdWUgaXMgbnVsbCB0aGVuIHJldHVybnMgZW1wdHkgc3RyaW5nLiBJZiAnb3RoZXInIGlzIHNlbGVjdGVkIHRoZW4gcmV0dXJucyB0aGUgdGV4dCBmb3Igb3RoZXIgdmFsdWUuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0RGlzcGxheVZhbHVlQ29yZShrZXlzQXNUZXh0OiBib29sZWFuLCB2YWx1ZTogYW55KTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRDaG9pY2VzRGlzcGxheVZhbHVlKHRoaXMudmlzaWJsZUNob2ljZXMsIHZhbHVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RGlzcGxheVZhbHVlRW1wdHkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gSXRlbVZhbHVlLmdldFRleHRPckh0bWxCeVZhbHVlKHRoaXMudmlzaWJsZUNob2ljZXMsIHVuZGVmaW5lZCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENob2ljZXNEaXNwbGF5VmFsdWUoaXRlbXM6IEl0ZW1WYWx1ZVtdLCB2YWw6IGFueSk6IGFueSB7XG4gICAgaWYgKHZhbCA9PSB0aGlzLm90aGVySXRlbVZhbHVlLnZhbHVlKVxuICAgICAgcmV0dXJuIHRoaXMuY29tbWVudCA/IHRoaXMuY29tbWVudCA6IHRoaXMubG9jT3RoZXJUZXh0LnRleHRPckh0bWw7XG4gICAgdmFyIHN0ciA9IEl0ZW1WYWx1ZS5nZXRUZXh0T3JIdG1sQnlWYWx1ZShpdGVtcywgdmFsKTtcbiAgICByZXR1cm4gc3RyID09IFwiXCIgJiYgdmFsID8gdmFsIDogc3RyO1xuICB9XG4gIHByaXZhdGUgZ2V0RmlsdGVyZWRDaG9pY2VzKCk6IEFycmF5PEl0ZW1WYWx1ZT4ge1xuICAgIHJldHVybiB0aGlzLmZpbHRlcmVkQ2hvaWNlc1ZhbHVlXG4gICAgICA/IHRoaXMuZmlsdGVyZWRDaG9pY2VzVmFsdWVcbiAgICAgIDogdGhpcy5hY3RpdmVDaG9pY2VzO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgYWN0aXZlQ2hvaWNlcygpOiBBcnJheTxJdGVtVmFsdWU+IHtcbiAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLmdldFF1ZXN0aW9uV2l0aENob2ljZXMoKTtcbiAgICBpZiAoISFxdWVzdGlvbikge1xuICAgICAgdGhpcy5hZGRJbnRvRGVwZW5kZWRRdWVzdGlvbihxdWVzdGlvbik7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDaG9pY2VzRnJvbVF1ZXN0aW9uKHF1ZXN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2hvaWNlc0Zyb21VcmwgPyB0aGlzLmNob2ljZXNGcm9tVXJsIDogdGhpcy5nZXRDaG9pY2VzKCk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRRdWVzdGlvbldpdGhDaG9pY2VzKCk6IFF1ZXN0aW9uU2VsZWN0QmFzZSB7XG4gICAgaWYgKCF0aGlzLmNob2ljZXNGcm9tUXVlc3Rpb24gfHwgIXRoaXMuc3VydmV5KSByZXR1cm4gbnVsbDtcbiAgICB2YXIgcmVzOiBhbnkgPSB0aGlzLnN1cnZleS5nZXRRdWVzdGlvbkJ5TmFtZSh0aGlzLmNob2ljZXNGcm9tUXVlc3Rpb24pO1xuICAgIHJldHVybiAhIXJlcyAmJiAhIXJlcy52aXNpYmxlQ2hvaWNlcyAmJiByZXMgIT09IHRoaXMgPyByZXMgOiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBnZXRDaG9pY2VzRnJvbVF1ZXN0aW9uKFxuICAgIHF1ZXN0aW9uOiBRdWVzdGlvblNlbGVjdEJhc2VcbiAgKTogQXJyYXk8SXRlbVZhbHVlPiB7XG4gICAgdmFyIHJlczogQXJyYXk8SXRlbVZhbHVlPiA9IFtdO1xuICAgIHZhciBpc1NlbGVjdGVkID1cbiAgICAgIHRoaXMuY2hvaWNlc0Zyb21RdWVzdGlvbk1vZGUgPT0gXCJzZWxlY3RlZFwiXG4gICAgICAgID8gdHJ1ZVxuICAgICAgICA6IHRoaXMuY2hvaWNlc0Zyb21RdWVzdGlvbk1vZGUgPT0gXCJ1bnNlbGVjdGVkXCJcbiAgICAgICAgPyBmYWxzZVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB2YXIgY2hvaWNlcyA9IHF1ZXN0aW9uLnZpc2libGVDaG9pY2VzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hvaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuaXNCdWlsdEluQ2hvaWNlKGNob2ljZXNbaV0sIHF1ZXN0aW9uKSkgY29udGludWU7XG4gICAgICBpZiAoaXNTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlcy5wdXNoKGNob2ljZXNbaV0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBpdGVtc1NlbGVjdGVkID0gcXVlc3Rpb24uaXNJdGVtU2VsZWN0ZWQoY2hvaWNlc1tpXSk7XG4gICAgICBpZiAoKGl0ZW1zU2VsZWN0ZWQgJiYgaXNTZWxlY3RlZCkgfHwgKCFpdGVtc1NlbGVjdGVkICYmICFpc1NlbGVjdGVkKSkge1xuICAgICAgICByZXMucHVzaChjaG9pY2VzW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGhhc0FjdGl2ZUNob2ljZXMoKTogYm9vbGVhbiB7XG4gICAgdmFyIGNob2ljZXMgPSB0aGlzLnZpc2libGVDaG9pY2VzO1xuICAgIGlmICghY2hvaWNlcyB8fCBjaG9pY2VzLmxlbmd0aCA9PSAwKSB7XG4gICAgICB0aGlzLm9uVmlzaWJsZUNob2ljZXNDaGFuZ2VkKCk7XG4gICAgICBjaG9pY2VzID0gdGhpcy52aXNpYmxlQ2hvaWNlcztcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaG9pY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIXRoaXMuaXNCdWlsdEluQ2hvaWNlKGNob2ljZXNbaV0sIHRoaXMpKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHByb3RlY3RlZCBpc0J1aWx0SW5DaG9pY2UoXG4gICAgaXRlbTogSXRlbVZhbHVlLFxuICAgIHF1ZXN0aW9uOiBRdWVzdGlvblNlbGVjdEJhc2VcbiAgKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGl0ZW0gPT09IHF1ZXN0aW9uLm5vbmVJdGVtIHx8XG4gICAgICBpdGVtID09PSBxdWVzdGlvbi5vdGhlckl0ZW0gfHxcbiAgICAgIGl0ZW0gPT09IHF1ZXN0aW9uLm5ld0l0ZW1WYWx1ZVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENob2ljZXMoKTogQXJyYXk8SXRlbVZhbHVlPiB7XG4gICAgcmV0dXJuIHRoaXMuY2hvaWNlcztcbiAgfVxuICBwdWJsaWMgc3VwcG9ydENvbW1lbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHVibGljIHN1cHBvcnRPdGhlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1N1cHBvcnRQcm9wZXJ0eShcImhhc090aGVyXCIpO1xuICB9XG4gIHB1YmxpYyBzdXBwb3J0Tm9uZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1N1cHBvcnRQcm9wZXJ0eShcImhhc05vbmVcIik7XG4gIH1cbiAgcHJvdGVjdGVkIGlzU3VwcG9ydFByb3BlcnR5KHByb3BOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgIXRoaXMuaXNEZXNpZ25Nb2RlIHx8XG4gICAgICBTZXJpYWxpemVyLmZpbmRQcm9wZXJ0eSh0aGlzLmdldFR5cGUoKSwgcHJvcE5hbWUpLnZpc2libGVcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBvbkNoZWNrRm9yRXJyb3JzKFxuICAgIGVycm9yczogQXJyYXk8U3VydmV5RXJyb3I+LFxuICAgIGlzT25WYWx1ZUNoYW5nZWQ6IGJvb2xlYW5cbiAgKSB7XG4gICAgc3VwZXIub25DaGVja0ZvckVycm9ycyhlcnJvcnMsIGlzT25WYWx1ZUNoYW5nZWQpO1xuICAgIGlmICghdGhpcy5oYXNPdGhlciB8fCAhdGhpcy5pc090aGVyU2VsZWN0ZWQgfHwgdGhpcy5jb21tZW50KSByZXR1cm47XG4gICAgZXJyb3JzLnB1c2gobmV3IE90aGVyRW1wdHlFcnJvcih0aGlzLm90aGVyRXJyb3JUZXh0LCB0aGlzKSk7XG4gIH1cbiAgcHVibGljIHNldFN1cnZleUltcGwodmFsdWU6IElTdXJ2ZXlJbXBsKSB7XG4gICAgc3VwZXIuc2V0U3VydmV5SW1wbCh2YWx1ZSk7XG4gICAgdGhpcy5ydW5DaG9pY2VzQnlVcmwoKTtcbiAgICBpZiAodGhpcy5pc0FkZERlZmF1bHRJdGVtcykge1xuICAgICAgdGhpcy51cGRhdGVWaXNpYmxlQ2hvaWNlcygpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgc2V0U3VydmV5Q29yZSh2YWx1ZTogSVN1cnZleSkge1xuICAgIHN1cGVyLnNldFN1cnZleUNvcmUodmFsdWUpO1xuICAgIGlmICghIXZhbHVlICYmICEhdGhpcy5jaG9pY2VzRnJvbVF1ZXN0aW9uKSB7XG4gICAgICB0aGlzLm9uVmlzaWJsZUNob2ljZXNDaGFuZ2VkKCk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBnZXRTdG9yZU90aGVyc0FzQ29tbWVudCgpIHtcbiAgICBpZiAodGhpcy5pc1NldHRpbmdEZWZhdWx0VmFsdWUpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5zdG9yZU90aGVyc0FzQ29tbWVudCA9PT0gdHJ1ZSB8fFxuICAgICAgKHRoaXMuc3RvcmVPdGhlcnNBc0NvbW1lbnQgPT0gXCJkZWZhdWx0XCIgJiZcbiAgICAgICAgKHRoaXMuc3VydmV5ICE9IG51bGwgPyB0aGlzLnN1cnZleS5zdG9yZU90aGVyc0FzQ29tbWVudCA6IHRydWUpKSB8fFxuICAgICAgKCF0aGlzLmNob2ljZXNCeVVybC5pc0VtcHR5ICYmICF0aGlzLmNob2ljZXNGcm9tVXJsKVxuICAgICk7XG4gIH1cbiAgb25TdXJ2ZXlMb2FkKCkge1xuICAgIHRoaXMucnVuQ2hvaWNlc0J5VXJsKCk7XG4gICAgdGhpcy5vblZpc2libGVDaG9pY2VzQ2hhbmdlZCgpO1xuICAgIHN1cGVyLm9uU3VydmV5TG9hZCgpO1xuICB9XG4gIG9uQW55VmFsdWVDaGFuZ2VkKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyLm9uQW55VmFsdWVDaGFuZ2VkKG5hbWUpO1xuICAgIGlmIChuYW1lICE9IHRoaXMuZ2V0VmFsdWVOYW1lKCkpIHtcbiAgICAgIHRoaXMucnVuQ2hvaWNlc0J5VXJsKCk7XG4gICAgfVxuICAgIGlmICghIW5hbWUgJiYgbmFtZSA9PSB0aGlzLmNob2ljZXNGcm9tUXVlc3Rpb24pIHtcbiAgICAgIHRoaXMub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKTtcbiAgICB9XG4gIH1cbiAgdXBkYXRlVmFsdWVGcm9tU3VydmV5KG5ld1ZhbHVlOiBhbnkpIHtcbiAgICB2YXIgbmV3Q29tbWVudCA9IFwiXCI7XG4gICAgaWYgKFxuICAgICAgdGhpcy5oYXNPdGhlciAmJlxuICAgICAgIXRoaXMuaXNSdW5uaW5nQ2hvaWNlcyAmJlxuICAgICAgIXRoaXMuY2hvaWNlc0J5VXJsLmlzUnVubmluZyAmJlxuICAgICAgdGhpcy5nZXRTdG9yZU90aGVyc0FzQ29tbWVudCgpXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5oYXNVbmtub3duVmFsdWUobmV3VmFsdWUpICYmICF0aGlzLmdldEhhc090aGVyKG5ld1ZhbHVlKSkge1xuICAgICAgICBuZXdDb21tZW50ID0gdGhpcy5nZXRDb21tZW50RnJvbVZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgICAgbmV3VmFsdWUgPSB0aGlzLnNldE90aGVyVmFsdWVJbnRvVmFsdWUobmV3VmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3Q29tbWVudCA9IHRoaXMuZGF0YS5nZXRDb21tZW50KHRoaXMuZ2V0VmFsdWVOYW1lKCkpO1xuICAgICAgfVxuICAgIH1cbiAgICBzdXBlci51cGRhdGVWYWx1ZUZyb21TdXJ2ZXkobmV3VmFsdWUpO1xuICAgIGlmICghIW5ld0NvbW1lbnQpIHtcbiAgICAgIHRoaXMuc2V0TmV3Q29tbWVudChuZXdDb21tZW50KTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGdldENvbW1lbnRGcm9tVmFsdWUobmV3VmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ld1ZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBzZXRPdGhlclZhbHVlSW50b1ZhbHVlKG5ld1ZhbHVlOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLm90aGVySXRlbS52YWx1ZTtcbiAgfVxuICBwcml2YXRlIGlzUnVubmluZ0Nob2ljZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBydW5DaG9pY2VzQnlVcmwoKSB7XG4gICAgaWYgKCF0aGlzLmNob2ljZXNCeVVybCB8fCB0aGlzLmlzTG9hZGluZ0Zyb21Kc29uIHx8IHRoaXMuaXNSdW5uaW5nQ2hvaWNlcylcbiAgICAgIHJldHVybjtcbiAgICB2YXIgcHJvY2Vzc29yID0gdGhpcy5zdXJ2ZXlJbXBsXG4gICAgICA/IHRoaXMuc3VydmV5SW1wbC5nZXRUZXh0UHJvY2Vzc29yKClcbiAgICAgIDogdGhpcy50ZXh0UHJvY2Vzc29yO1xuICAgIGlmICghcHJvY2Vzc29yKSBwcm9jZXNzb3IgPSB0aGlzLnN1cnZleTtcbiAgICBpZiAoIXByb2Nlc3NvcikgcmV0dXJuO1xuICAgIHRoaXMuaXNSZWFkeVZhbHVlID0gdGhpcy5pc0Nob2ljZXNMb2FkZWQgfHwgdGhpcy5jaG9pY2VzQnlVcmwuaXNFbXB0eTtcbiAgICB0aGlzLmlzUnVubmluZ0Nob2ljZXMgPSB0cnVlO1xuICAgIHRoaXMuY2hvaWNlc0J5VXJsLnJ1bihwcm9jZXNzb3IpO1xuICAgIHRoaXMuaXNSdW5uaW5nQ2hvaWNlcyA9IGZhbHNlO1xuICB9XG4gIHByaXZhdGUgaXNGaXJzdExvYWRDaG9pY2VzRnJvbVVybCA9IHRydWU7XG4gIHByb3RlY3RlZCBvbkJlZm9yZVNlbmRSZXF1ZXN0KCkge1xuICAgIGlmIChzZXR0aW5ncy5kaXNhYmxlT25HZXR0aW5nQ2hvaWNlc0Zyb21XZWIgPT09IHRydWUgJiYgIXRoaXMuaXNSZWFkT25seSkge1xuICAgICAgdGhpcy5lbmFibGVPbkxvYWRpbmdDaG9pY2VzID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVhZE9ubHkgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgb25Mb2FkQ2hvaWNlc0Zyb21VcmwoYXJyYXk6IEFycmF5PEl0ZW1WYWx1ZT4pIHtcbiAgICBpZiAodGhpcy5lbmFibGVPbkxvYWRpbmdDaG9pY2VzKSB7XG4gICAgICB0aGlzLnJlYWRPbmx5ID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc1JlYWRPbmx5KSB7XG4gICAgICB2YXIgZXJyb3JzID0gW107XG4gICAgICBpZiAodGhpcy5jaG9pY2VzQnlVcmwgJiYgdGhpcy5jaG9pY2VzQnlVcmwuZXJyb3IpIHtcbiAgICAgICAgZXJyb3JzLnB1c2godGhpcy5jaG9pY2VzQnlVcmwuZXJyb3IpO1xuICAgICAgfVxuICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnM7XG4gICAgfVxuICAgIHZhciBuZXdDaG9pY2VzID0gbnVsbDtcbiAgICB2YXIgY2hlY2tDYWNoZWRWYWx1ZXNPbkV4aXN0aW5nID0gdHJ1ZTtcbiAgICBpZiAoXG4gICAgICB0aGlzLmlzRmlyc3RMb2FkQ2hvaWNlc0Zyb21VcmwgJiZcbiAgICAgICF0aGlzLmNhY2hlZFZhbHVlRm9yVXJsUmVxdWVzdHMgJiZcbiAgICAgIHRoaXMuZGVmYXVsdFZhbHVlXG4gICAgKSB7XG4gICAgICB0aGlzLmNhY2hlZFZhbHVlRm9yVXJsUmVxdWVzdHMgPSB0aGlzLmRlZmF1bHRWYWx1ZTtcbiAgICAgIGNoZWNrQ2FjaGVkVmFsdWVzT25FeGlzdGluZyA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1ZhbHVlRW1wdHkodGhpcy5jYWNoZWRWYWx1ZUZvclVybFJlcXVlc3RzKSkge1xuICAgICAgdGhpcy5jYWNoZWRWYWx1ZUZvclVybFJlcXVlc3RzID0gdGhpcy52YWx1ZTtcbiAgICB9XG4gICAgdGhpcy5pc0ZpcnN0TG9hZENob2ljZXNGcm9tVXJsID0gZmFsc2U7XG4gICAgdmFyIGNhY2hlZFZhbHVlcyA9IHRoaXMuY3JlYXRlQ2FjaGVkVmFsdWVGb3JVcmxSZXF1ZXN0cyhcbiAgICAgIHRoaXMuY2FjaGVkVmFsdWVGb3JVcmxSZXF1ZXN0cyxcbiAgICAgIGNoZWNrQ2FjaGVkVmFsdWVzT25FeGlzdGluZ1xuICAgICk7XG4gICAgaWYgKGFycmF5ICYmIChhcnJheS5sZW5ndGggPiAwIHx8IHRoaXMuY2hvaWNlc0J5VXJsLmFsbG93RW1wdHlSZXNwb25zZSkpIHtcbiAgICAgIG5ld0Nob2ljZXMgPSBuZXcgQXJyYXk8SXRlbVZhbHVlPigpO1xuICAgICAgSXRlbVZhbHVlLnNldERhdGEobmV3Q2hvaWNlcywgYXJyYXkpO1xuICAgIH1cbiAgICBpZiAoISFuZXdDaG9pY2VzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld0Nob2ljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbmV3Q2hvaWNlc1tpXS5sb2NPd25lciA9IHRoaXM7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2hvaWNlc0Zyb21VcmwgPSBuZXdDaG9pY2VzO1xuICAgIHRoaXMuZmlsdGVySXRlbXMoKTtcbiAgICB0aGlzLm9uVmlzaWJsZUNob2ljZXNDaGFuZ2VkKCk7XG4gICAgaWYgKG5ld0Nob2ljZXMpIHtcbiAgICAgIHZhciBuZXdWYWx1ZSA9IHRoaXMudXBkYXRlQ2FjaGVkVmFsdWVGb3JVcmxSZXF1ZXN0cyhcbiAgICAgICAgY2FjaGVkVmFsdWVzLFxuICAgICAgICBuZXdDaG9pY2VzXG4gICAgICApO1xuICAgICAgaWYgKCEhbmV3VmFsdWUgJiYgIXRoaXMuaXNSZWFkT25seSkge1xuICAgICAgICB2YXIgaGFzQ2hhbmdlZCA9ICFIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHModGhpcy52YWx1ZSwgbmV3VmFsdWUudmFsdWUpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICghdGhpcy5pc1ZhbHVlRW1wdHkobmV3VmFsdWUudmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLmFsbG93Tm90aWZ5VmFsdWVDaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNldFF1ZXN0aW9uVmFsdWUodW5kZWZpbmVkLCB0cnVlLCBmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuYWxsb3dOb3RpZnlWYWx1ZUNoYW5nZWQgPSBoYXNDaGFuZ2VkO1xuICAgICAgICAgIGlmIChoYXNDaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWUudmFsdWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UXVlc3Rpb25WYWx1ZShuZXdWYWx1ZS52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRoaXMuYWxsb3dOb3RpZnlWYWx1ZUNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2hvaWNlc0xvYWRlZCgpO1xuICB9XG4gIHByaXZhdGUgY3JlYXRlQ2FjaGVkVmFsdWVGb3JVcmxSZXF1ZXN0cyhcbiAgICB2YWw6IGFueSxcbiAgICBjaGVja09uRXhpc3Rpbmc6IGJvb2xlYW5cbiAgKTogYW55IHtcbiAgICBpZiAodGhpcy5pc1ZhbHVlRW1wdHkodmFsKSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgdmFyIHJlcyA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzLnB1c2godGhpcy5jcmVhdGVDYWNoZWRWYWx1ZUZvclVybFJlcXVlc3RzKHZhbFtpXSwgdHJ1ZSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgdmFyIGlzRXhpc3RzID0gY2hlY2tPbkV4aXN0aW5nID8gIXRoaXMuaGFzVW5rbm93blZhbHVlKHZhbCkgOiB0cnVlO1xuICAgIHJldHVybiB7IHZhbHVlOiB2YWwsIGlzRXhpc3RzOiBpc0V4aXN0cyB9O1xuICB9XG4gIHByaXZhdGUgdXBkYXRlQ2FjaGVkVmFsdWVGb3JVcmxSZXF1ZXN0cyhcbiAgICB2YWw6IGFueSxcbiAgICBuZXdDaG9pY2VzOiBBcnJheTxJdGVtVmFsdWU+XG4gICk6IGFueSB7XG4gICAgaWYgKHRoaXMuaXNWYWx1ZUVtcHR5KHZhbCkpIHJldHVybiBudWxsO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgIHZhciByZXMgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciB1cGRhdGVkVmFsdWUgPSB0aGlzLnVwZGF0ZUNhY2hlZFZhbHVlRm9yVXJsUmVxdWVzdHMoXG4gICAgICAgICAgdmFsW2ldLFxuICAgICAgICAgIG5ld0Nob2ljZXNcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHVwZGF0ZWRWYWx1ZSAmJiAhdGhpcy5pc1ZhbHVlRW1wdHkodXBkYXRlZFZhbHVlLnZhbHVlKSkge1xuICAgICAgICAgIHZhciBuZXdWYWx1ZSA9IHVwZGF0ZWRWYWx1ZS52YWx1ZTtcbiAgICAgICAgICB2YXIgaXRlbSA9IEl0ZW1WYWx1ZS5nZXRJdGVtQnlWYWx1ZShuZXdDaG9pY2VzLCB1cGRhdGVkVmFsdWUudmFsdWUpO1xuICAgICAgICAgIGlmICghIWl0ZW0pIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gaXRlbS52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzLnB1c2gobmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4geyB2YWx1ZTogcmVzIH07XG4gICAgfVxuICAgIHZhciB2YWx1ZSA9XG4gICAgICB2YWwuaXNFeGlzdHMgJiYgdGhpcy5oYXNVbmtub3duVmFsdWUodmFsLnZhbHVlKSA/IG51bGwgOiB2YWwudmFsdWU7XG4gICAgdmFyIGl0ZW0gPSBJdGVtVmFsdWUuZ2V0SXRlbUJ5VmFsdWUobmV3Q2hvaWNlcywgdmFsdWUpO1xuICAgIGlmICghIWl0ZW0pIHtcbiAgICAgIHZhbHVlID0gaXRlbS52YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlIH07XG4gIH1cbiAgcHJpdmF0ZSBpc1VwZGF0aW5nQ2hvaWNlc0RlcGVuZGVkUXVlc3Rpb25zID0gZmFsc2U7XG4gIHByb3RlY3RlZCB1cGRhdGVDaG9pY2VzRGVwZW5kZWRRdWVzdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMuaXNVcGRhdGluZ0Nob2ljZXNEZXBlbmRlZFF1ZXN0aW9ucykgcmV0dXJuO1xuICAgIHRoaXMuaXNVcGRhdGluZ0Nob2ljZXNEZXBlbmRlZFF1ZXN0aW9ucyA9IHRydWU7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRlcGVuZGVkUXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmRlcGVuZGVkUXVlc3Rpb25zW2ldLm9uVmlzaWJsZUNob2ljZXNDaGFuZ2VkKCk7XG4gICAgICB0aGlzLmRlcGVuZGVkUXVlc3Rpb25zW2ldLnVwZGF0ZUNob2ljZXNEZXBlbmRlZFF1ZXN0aW9ucygpO1xuICAgIH1cbiAgICB0aGlzLmlzVXBkYXRpbmdDaG9pY2VzRGVwZW5kZWRRdWVzdGlvbnMgPSBmYWxzZTtcbiAgfVxuICBvblN1cnZleVZhbHVlQ2hhbmdlZChuZXdWYWx1ZTogYW55KSB7XG4gICAgc3VwZXIub25TdXJ2ZXlWYWx1ZUNoYW5nZWQobmV3VmFsdWUpO1xuICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSByZXR1cm47XG4gICAgdGhpcy51cGRhdGVDaG9pY2VzRGVwZW5kZWRRdWVzdGlvbnMoKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKSB7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHJldHVybjtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVDaG9pY2VzKCk7XG4gICAgdGhpcy51cGRhdGVWaXNpYmlsaXR5QmFzZWRPbkNob2ljZXMoKTtcbiAgICBpZiAoISF0aGlzLnZpc2libGVDaG9pY2VzQ2hhbmdlZENhbGxiYWNrKSB7XG4gICAgICB0aGlzLnZpc2libGVDaG9pY2VzQ2hhbmdlZENhbGxiYWNrKCk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlQ2hvaWNlc0RlcGVuZGVkUXVlc3Rpb25zKCk7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVWaXNpYmlsaXR5QmFzZWRPbkNob2ljZXMoKSB7XG4gICAgaWYgKHRoaXMuaGlkZUlmQ2hvaWNlc0VtcHR5KSB7XG4gICAgICB2YXIgZmlsdGVyZWRDaG9pY2VzID0gdGhpcy5nZXRGaWx0ZXJlZENob2ljZXMoKTtcbiAgICAgIHRoaXMudmlzaWJsZSA9ICFmaWx0ZXJlZENob2ljZXMgfHwgZmlsdGVyZWRDaG9pY2VzLmxlbmd0aCA+IDA7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgc29ydFZpc2libGVDaG9pY2VzKGFycmF5OiBBcnJheTxJdGVtVmFsdWU+KTogQXJyYXk8SXRlbVZhbHVlPiB7XG4gICAgdmFyIG9yZGVyID0gdGhpcy5jaG9pY2VzT3JkZXIudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAob3JkZXIgPT0gXCJhc2NcIikgcmV0dXJuIHRoaXMuc29ydEFycmF5KGFycmF5LCAxKTtcbiAgICBpZiAob3JkZXIgPT0gXCJkZXNjXCIpIHJldHVybiB0aGlzLnNvcnRBcnJheShhcnJheSwgLTEpO1xuICAgIGlmIChvcmRlciA9PSBcInJhbmRvbVwiKSByZXR1cm4gdGhpcy5yYW5kb21pemVBcnJheShhcnJheSk7XG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG4gIHByaXZhdGUgc29ydEFycmF5KGFycmF5OiBBcnJheTxJdGVtVmFsdWU+LCBtdWx0OiBudW1iZXIpOiBBcnJheTxJdGVtVmFsdWU+IHtcbiAgICByZXR1cm4gYXJyYXkuc29ydChmdW5jdGlvbihhLCBiKSB7XG4gICAgICBpZiAoYS5jYWxjdWxhdGVkVGV4dCA8IGIuY2FsY3VsYXRlZFRleHQpIHJldHVybiAtMSAqIG11bHQ7XG4gICAgICBpZiAoYS5jYWxjdWxhdGVkVGV4dCA+IGIuY2FsY3VsYXRlZFRleHQpIHJldHVybiAxICogbXVsdDtcbiAgICAgIHJldHVybiAwO1xuICAgIH0pO1xuICB9XG4gIHByaXZhdGUgcmFuZG9taXplQXJyYXkoYXJyYXk6IEFycmF5PEl0ZW1WYWx1ZT4pOiBBcnJheTxJdGVtVmFsdWU+IHtcbiAgICByZXR1cm4gSGVscGVycy5yYW5kb21pemVBcnJheTxJdGVtVmFsdWU+KGFycmF5KTtcbiAgfVxuICBwdWJsaWMgY2xlYXJJbmNvcnJlY3RWYWx1ZXMoKSB7XG4gICAgaWYgKHRoaXMua2VlcEluY29ycmVjdFZhbHVlcyB8fCB0aGlzLmlzRW1wdHkoKSkgcmV0dXJuO1xuICAgIGlmIChcbiAgICAgICEhdGhpcy5zdXJ2ZXkgJiZcbiAgICAgIHRoaXMuc3VydmV5LnF1ZXN0aW9uQ291bnRCeVZhbHVlTmFtZSh0aGlzLmdldFZhbHVlTmFtZSgpKSA+IDFcbiAgICApXG4gICAgICByZXR1cm47XG4gICAgaWYgKFxuICAgICAgISF0aGlzLmNob2ljZXNCeVVybCAmJlxuICAgICAgIXRoaXMuY2hvaWNlc0J5VXJsLmlzRW1wdHkgJiZcbiAgICAgICghdGhpcy5jaG9pY2VzRnJvbVVybCB8fCB0aGlzLmNob2ljZXNGcm9tVXJsLmxlbmd0aCA9PSAwKVxuICAgIClcbiAgICAgIHJldHVybjtcbiAgICBpZiAodGhpcy5jbGVhckluY29ycmVjdFZhbHVlc0NhbGxiYWNrKSB7XG4gICAgICB0aGlzLmNsZWFySW5jb3JyZWN0VmFsdWVzQ2FsbGJhY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jbGVhckluY29ycmVjdFZhbHVlc0NvcmUoKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGNsZWFyVmFsdWVJZkludmlzaWJsZSgpIHtcbiAgICBzdXBlci5jbGVhclZhbHVlSWZJbnZpc2libGUoKTtcbiAgICB0aGlzLmNsZWFySW5jb3JyZWN0VmFsdWVzKCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBpdGVtIGlzIHNlbGVjdGVkXG4gICAqIEBwYXJhbSBpdGVtIGNoZWNrYm94IG9yIHJhZGlvIGl0ZW0gdmFsdWVcbiAgICovXG4gIHB1YmxpYyBpc0l0ZW1TZWxlY3RlZChpdGVtOiBJdGVtVmFsdWUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXRlbS52YWx1ZSA9PT0gdGhpcy52YWx1ZTtcbiAgfVxuICBwcml2YXRlIGNsZWFyRGlzYWJsZWRWYWx1ZXMoKSB7XG4gICAgaWYgKCF0aGlzLnN1cnZleSB8fCAhdGhpcy5zdXJ2ZXkuY2xlYXJWYWx1ZU9uRGlzYWJsZUl0ZW1zKSByZXR1cm47XG4gICAgdGhpcy5jbGVhckRpc2FibGVkVmFsdWVzQ29yZSgpO1xuICB9XG4gIHByb3RlY3RlZCBjbGVhckluY29ycmVjdFZhbHVlc0NvcmUoKSB7XG4gICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XG4gICAgaWYgKHRoaXMuY2FuQ2xlYXJWYWx1ZUFuVW5rbm93KHZhbCkpIHtcbiAgICAgIHRoaXMuY2xlYXJWYWx1ZSgpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY2FuQ2xlYXJWYWx1ZUFuVW5rbm93KHZhbDogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmdldFN0b3JlT3RoZXJzQXNDb21tZW50KCkgJiYgdGhpcy5pc090aGVyU2VsZWN0ZWQpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5oYXNVbmtub3duVmFsdWUodmFsLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgY2xlYXJEaXNhYmxlZFZhbHVlc0NvcmUoKSB7XG4gICAgaWYgKHRoaXMuaXNWYWx1ZURpc2FibGVkKHRoaXMudmFsdWUpKSB7XG4gICAgICB0aGlzLmNsZWFyVmFsdWUoKTtcbiAgICB9XG4gIH1cbiAgY2xlYXJVbnVzZWRWYWx1ZXMoKSB7XG4gICAgc3VwZXIuY2xlYXJVbnVzZWRWYWx1ZXMoKTtcbiAgICBpZiAoIXRoaXMuaXNPdGhlclNlbGVjdGVkICYmICF0aGlzLmhhc0NvbW1lbnQpIHtcbiAgICAgIHRoaXMuY29tbWVudCA9IFwiXCI7XG4gICAgfVxuICB9XG4gIGdldENvbHVtbkNsYXNzKCkge1xuICAgIHZhciBjb2x1bW5DbGFzcyA9IHRoaXMuY3NzQ2xhc3Nlcy5jb2x1bW47XG4gICAgaWYgKHRoaXMuaGFzQ29sdW1ucykge1xuICAgICAgY29sdW1uQ2xhc3MgKz0gXCIgc3YtcS1jb2x1bW4tXCIgKyB0aGlzLmNvbENvdW50O1xuICAgIH1cbiAgICByZXR1cm4gY29sdW1uQ2xhc3M7XG4gIH1cbiAgZ2V0SXRlbUluZGV4KGl0ZW06IGFueSkge1xuICAgIHJldHVybiB0aGlzLnZpc2libGVDaG9pY2VzLmluZGV4T2YoaXRlbSk7XG4gIH1cbiAgZ2V0SXRlbUNsYXNzKGl0ZW06IGFueSkge1xuICAgIGxldCBpdGVtQ2xhc3MgPSB0aGlzLmNzc0NsYXNzZXMuaXRlbTtcbiAgICBjb25zdCBpc0Rpc2FibGVkID0gdGhpcy5pc1JlYWRPbmx5IHx8ICFpdGVtLmlzRW5hYmxlZDtcbiAgICBjb25zdCBpc0NoZWNrZWQgPVxuICAgICAgdGhpcy5pc0l0ZW1TZWxlY3RlZChpdGVtKSB8fFxuICAgICAgKHRoaXMuaXNPdGhlclNlbGVjdGVkICYmIHRoaXMub3RoZXJJdGVtLnZhbHVlID09PSBpdGVtLnZhbHVlKTtcbiAgICBjb25zdCBhbGxvd0hvdmVyID1cbiAgICAgICFpc0Rpc2FibGVkICYmICFpc0NoZWNrZWQgJiYgISghIXRoaXMuc3VydmV5ICYmIHRoaXMuc3VydmV5LmlzRGVzaWduTW9kZSk7XG4gICAgY29uc3QgaXNOb25lID0gaXRlbSA9PT0gdGhpcy5ub25lSXRlbTtcbiAgICBpZiAoIXRoaXMuaGFzQ29sdW1ucykge1xuICAgICAgaXRlbUNsYXNzICs9XG4gICAgICAgIHRoaXMuY29sQ291bnQgPT09IDBcbiAgICAgICAgICA/IFwiIFwiICsgdGhpcy5jc3NDbGFzc2VzLml0ZW1JbmxpbmVcbiAgICAgICAgICA6IFwiIHN2LXEtY29sLVwiICsgdGhpcy5jb2xDb3VudDtcbiAgICB9XG4gICAgaWYgKGlzRGlzYWJsZWQgJiYgISF0aGlzLmNzc0NsYXNzZXMuaXRlbURpc2FibGVkKVxuICAgICAgaXRlbUNsYXNzICs9IFwiIFwiICsgdGhpcy5jc3NDbGFzc2VzLml0ZW1EaXNhYmxlZDtcbiAgICBpZiAoaXNDaGVja2VkICYmICEhdGhpcy5jc3NDbGFzc2VzLml0ZW1DaGVja2VkKVxuICAgICAgaXRlbUNsYXNzICs9IFwiIFwiICsgdGhpcy5jc3NDbGFzc2VzLml0ZW1DaGVja2VkO1xuICAgIGlmIChhbGxvd0hvdmVyICYmICEhdGhpcy5jc3NDbGFzc2VzLml0ZW1Ib3ZlcilcbiAgICAgIGl0ZW1DbGFzcyArPSBcIiBcIiArIHRoaXMuY3NzQ2xhc3Nlcy5pdGVtSG92ZXI7XG4gICAgaWYgKGlzTm9uZSAmJiAhIXRoaXMuY3NzQ2xhc3Nlcy5pdGVtTm9uZSlcbiAgICAgIGl0ZW1DbGFzcyArPSBcIiBcIiArIHRoaXMuY3NzQ2xhc3Nlcy5pdGVtTm9uZTtcbiAgICByZXR1cm4gaXRlbUNsYXNzO1xuICB9XG4gIGdldExhYmVsQ2xhc3MoaXRlbTogSXRlbVZhbHVlKSB7XG4gICAgdmFyIGxhYmVsQ2xhc3MgPSB0aGlzLmNzc0NsYXNzZXMubGFiZWw7XG4gICAgaWYgKHRoaXMuaXNJdGVtU2VsZWN0ZWQoaXRlbSkpIHtcbiAgICAgIGxhYmVsQ2xhc3MgKz0gXCIgXCIgKyB0aGlzLmNzc0NsYXNzZXMubGFiZWxDaGVja2VkO1xuICAgIH1cbiAgICByZXR1cm4gbGFiZWxDbGFzcztcbiAgfVxuICBnZXRDb250cm9sTGFiZWxDbGFzcyhpdGVtOiBJdGVtVmFsdWUpIHtcbiAgICB2YXIgY29udHJvbExhYmVsQ2xhc3MgPSB0aGlzLmNzc0NsYXNzZXMuY29udHJvbExhYmVsO1xuICAgIGlmICh0aGlzLmlzSXRlbVNlbGVjdGVkKGl0ZW0pKSB7XG4gICAgICBjb250cm9sTGFiZWxDbGFzcyArPSBcIiBcIiArIHRoaXMuY3NzQ2xhc3Nlcy5jb250cm9sTGFiZWxDaGVja2VkO1xuICAgIH1cbiAgICByZXR1cm4gY29udHJvbExhYmVsQ2xhc3M7XG4gIH1cbiAgZ2V0IGNvbHVtbnMoKSB7XG4gICAgdmFyIGNvbHVtbnMgPSBbXTtcbiAgICB2YXIgY29sQ291bnQgPSB0aGlzLmNvbENvdW50O1xuICAgIGlmICh0aGlzLmhhc0NvbHVtbnMgJiYgdGhpcy52aXNpYmxlQ2hvaWNlcy5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoc2V0dGluZ3Muc2hvd0l0ZW1zSW5PcmRlciA9PSBcImNvbHVtblwiKSB7XG4gICAgICAgIHZhciBwcmV2SW5kZXggPSAwO1xuICAgICAgICB2YXIgbGVmdEVsZW1lbnRzQ291bnQgPSB0aGlzLnZpc2libGVDaG9pY2VzLmxlbmd0aCAlIGNvbENvdW50O1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbENvdW50OyBpKyspIHtcbiAgICAgICAgICB2YXIgY29sdW1uID0gW107XG4gICAgICAgICAgZm9yIChcbiAgICAgICAgICAgIHZhciBqID0gcHJldkluZGV4O1xuICAgICAgICAgICAgaiA8IHByZXZJbmRleCArIE1hdGguZmxvb3IodGhpcy52aXNpYmxlQ2hvaWNlcy5sZW5ndGggLyBjb2xDb3VudCk7XG4gICAgICAgICAgICBqKytcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbHVtbi5wdXNoKHRoaXMudmlzaWJsZUNob2ljZXNbal0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobGVmdEVsZW1lbnRzQ291bnQgPiAwKSB7XG4gICAgICAgICAgICBsZWZ0RWxlbWVudHNDb3VudC0tO1xuICAgICAgICAgICAgY29sdW1uLnB1c2godGhpcy52aXNpYmxlQ2hvaWNlc1tqXSk7XG4gICAgICAgICAgICBqKys7XG4gICAgICAgICAgfVxuICAgICAgICAgIHByZXZJbmRleCA9IGo7XG4gICAgICAgICAgY29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29sQ291bnQ7IGkrKykge1xuICAgICAgICAgIHZhciBjb2x1bW4gPSBbXTtcbiAgICAgICAgICBmb3IgKHZhciBqID0gaTsgaiA8IHRoaXMudmlzaWJsZUNob2ljZXMubGVuZ3RoOyBqICs9IGNvbENvdW50KSB7XG4gICAgICAgICAgICBjb2x1bW4ucHVzaCh0aGlzLnZpc2libGVDaG9pY2VzW2pdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbHVtbnM7XG4gIH1cbiAgZ2V0IGhhc0NvbHVtbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29sQ291bnQgPiAxO1xuICB9XG4gIHB1YmxpYyBjaG9pY2VzTG9hZGVkKCk6IHZvaWQge1xuICAgIHRoaXMuaXNDaG9pY2VzTG9hZGVkID0gdHJ1ZTtcbiAgICBsZXQgb2xkSXNSZWFkeTogYm9vbGVhbiA9IHRoaXMuaXNSZWFkeVZhbHVlO1xuICAgIHRoaXMuaXNSZWFkeVZhbHVlID0gdHJ1ZTtcbiAgICB0aGlzLm9uUmVhZHlDaGFuZ2VkICYmXG4gICAgICB0aGlzLm9uUmVhZHlDaGFuZ2VkLmZpcmUodGhpcywge1xuICAgICAgICBxdWVzdGlvbjogdGhpcyxcbiAgICAgICAgaXNSZWFkeTogdHJ1ZSxcbiAgICAgICAgb2xkSXNSZWFkeTogb2xkSXNSZWFkeSxcbiAgICAgIH0pO1xuICB9XG4gIHB1YmxpYyBnZXRJdGVtVmFsdWVXcmFwcGVyQ29tcG9uZW50TmFtZShpdGVtOiBJdGVtVmFsdWUpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN1cnZleTogU3VydmV5TW9kZWwgPSB0aGlzLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbDtcbiAgICBpZiAoc3VydmV5KSB7XG4gICAgICByZXR1cm4gc3VydmV5LmdldEl0ZW1WYWx1ZVdyYXBwZXJDb21wb25lbnROYW1lKGl0ZW0sIHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4gU3VydmV5TW9kZWwuVGVtcGxhdGVSZW5kZXJlckNvbXBvbmVudE5hbWU7XG4gIH1cbiAgcHVibGljIGdldEl0ZW1WYWx1ZVdyYXBwZXJDb21wb25lbnREYXRhKGl0ZW06IEl0ZW1WYWx1ZSk6IGFueSB7XG4gICAgY29uc3Qgc3VydmV5OiBTdXJ2ZXlNb2RlbCA9IHRoaXMuc3VydmV5IGFzIFN1cnZleU1vZGVsO1xuICAgIGlmIChzdXJ2ZXkpIHtcbiAgICAgIHJldHVybiBzdXJ2ZXkuZ2V0SXRlbVZhbHVlV3JhcHBlckNvbXBvbmVudERhdGEoaXRlbSwgdGhpcyk7XG4gICAgfVxuICAgIHJldHVybiBpdGVtO1xuICB9XG59XG4vKipcbiAqIEEgYmFzZSBjbGFzcyBmb3IgY2hlY2tib3ggYW5kIHJhZGlvZ3JvdXAgcXVlc3Rpb25zLiBJdCBpbnRyb2R1Y2VkIGEgY29sQ291bnQgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkNoZWNrYm94QmFzZSBleHRlbmRzIFF1ZXN0aW9uU2VsZWN0QmFzZSB7XG4gIGNvbENvdW50Q2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgfVxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBjb2x1bW5zIGZvciByYWRpb2dyb3VwIGFuZCBjaGVja2JveCBxdWVzdGlvbnMuIEl0ZW1zIGFyZSByZW5kcmVkIGluIG9uZSBsaW5lIGlmIHRoZSB2YWx1ZSBpcyAwLlxuICAgKi9cbiAgcHVibGljIGdldCBjb2xDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjb2xDb3VudFwiLCB0aGlzLmlzRmxvd0xheW91dCA/IDAgOiAxKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNvbENvdW50KHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodmFsdWUgPCAwIHx8IHZhbHVlID4gNSB8fCB0aGlzLmlzRmxvd0xheW91dCkgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNvbENvdW50XCIsIHZhbHVlKTtcbiAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLmNvbENvdW50Q2hhbmdlZENhbGxiYWNrKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25QYXJlbnRDaGFuZ2VkKCkge1xuICAgIHN1cGVyLm9uUGFyZW50Q2hhbmdlZCgpO1xuICAgIGlmICh0aGlzLmlzRmxvd0xheW91dCkge1xuICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY29sQ291bnRcIiwgbnVsbCk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBvblBhcmVudFF1ZXN0aW9uQ2hhbmdlZCgpIHtcbiAgICB0aGlzLm9uVmlzaWJsZUNob2ljZXNDaGFuZ2VkKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFNlYXJjaGFibGVJdGVtVmFsdWVLZXlzKGtleXM6IEFycmF5PHN0cmluZz4pIHtcbiAgICBrZXlzLnB1c2goXCJjaG9pY2VzXCIpO1xuICB9XG59XG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcInNlbGVjdGJhc2VcIixcbiAgW1xuICAgIHsgbmFtZTogXCJoYXNDb21tZW50OnN3aXRjaFwiLCBsYXlvdXQ6IFwicm93XCIgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImNvbW1lbnRUZXh0XCIsXG4gICAgICBkZXBlbmRzT246IFwiaGFzQ29tbWVudFwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICByZXR1cm4gb2JqLmhhc0NvbW1lbnQ7XG4gICAgICB9LFxuICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0NvbW1lbnRUZXh0XCIsXG4gICAgICBsYXlvdXQ6IFwicm93XCIsXG4gICAgfSxcbiAgICBcImNob2ljZXNGcm9tUXVlc3Rpb246cXVlc3Rpb25fc2VsZWN0YmFzZVwiLFxuICAgIHtcbiAgICAgIG5hbWU6IFwiY2hvaWNlczppdGVtdmFsdWVbXVwiLFxuICAgICAgYmFzZVZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJjaG9pY2VzX0l0ZW1cIik7XG4gICAgICB9LFxuICAgICAgZGVwZW5kc09uOiBcImNob2ljZXNGcm9tUXVlc3Rpb25cIixcbiAgICAgIHZpc2libGVJZjogKG9iajogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiAhb2JqLmNob2ljZXNGcm9tUXVlc3Rpb247XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJjaG9pY2VzRnJvbVF1ZXN0aW9uTW9kZVwiLFxuICAgICAgZGVmYXVsdDogXCJhbGxcIixcbiAgICAgIGNob2ljZXM6IFtcImFsbFwiLCBcInNlbGVjdGVkXCIsIFwidW5zZWxlY3RlZFwiXSxcbiAgICAgIGRlcGVuZHNPbjogXCJjaG9pY2VzRnJvbVF1ZXN0aW9uXCIsXG4gICAgICB2aXNpYmxlSWY6IChvYmo6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gISFvYmouY2hvaWNlc0Zyb21RdWVzdGlvbjtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImNob2ljZXNPcmRlclwiLFxuICAgICAgZGVmYXVsdDogXCJub25lXCIsXG4gICAgICBjaG9pY2VzOiBbXCJub25lXCIsIFwiYXNjXCIsIFwiZGVzY1wiLCBcInJhbmRvbVwiXSxcbiAgICAgIGRlcGVuZHNPbjogXCJjaG9pY2VzRnJvbVF1ZXN0aW9uXCIsXG4gICAgICB2aXNpYmxlSWY6IChvYmo6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gIW9iai5jaG9pY2VzRnJvbVF1ZXN0aW9uO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiY2hvaWNlc0J5VXJsOnJlc3RmdWxsXCIsXG4gICAgICBjbGFzc05hbWU6IFwiQ2hvaWNlc1Jlc3RmdWxcIixcbiAgICAgIG9uR2V0VmFsdWU6IGZ1bmN0aW9uKG9iajogYW55KSB7XG4gICAgICAgIHJldHVybiBvYmouY2hvaWNlc0J5VXJsLmdldERhdGEoKTtcbiAgICAgIH0sXG4gICAgICBvblNldFZhbHVlOiBmdW5jdGlvbihvYmo6IGFueSwgdmFsdWU6IGFueSkge1xuICAgICAgICBvYmouY2hvaWNlc0J5VXJsLnNldERhdGEodmFsdWUpO1xuICAgICAgfSxcbiAgICB9LFxuICAgIFwiaGlkZUlmQ2hvaWNlc0VtcHR5OmJvb2xlYW5cIixcbiAgICB7XG4gICAgICBuYW1lOiBcImNob2ljZXNWaXNpYmxlSWY6Y29uZGl0aW9uXCIsXG4gICAgICBkZXBlbmRzT246IFwiY2hvaWNlc0Zyb21RdWVzdGlvblwiLFxuICAgICAgdmlzaWJsZUlmOiAob2JqOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuICFvYmouY2hvaWNlc0Zyb21RdWVzdGlvbjtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImNob2ljZXNFbmFibGVJZjpjb25kaXRpb25cIixcbiAgICAgIGRlcGVuZHNPbjogXCJjaG9pY2VzRnJvbVF1ZXN0aW9uXCIsXG4gICAgICB2aXNpYmxlSWY6IChvYmo6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gIW9iai5jaG9pY2VzRnJvbVF1ZXN0aW9uO1xuICAgICAgfSxcbiAgICB9LFxuICAgIFwiaGFzT3RoZXI6Ym9vbGVhblwiLFxuICAgIFwiaGFzTm9uZTpib29sZWFuXCIsXG4gICAge1xuICAgICAgbmFtZTogXCJvdGhlclBsYWNlSG9sZGVyXCIsXG4gICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jT3RoZXJQbGFjZUhvbGRlclwiLFxuICAgICAgZGVwZW5kc09uOiBcImhhc090aGVyXCIsXG4gICAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uKG9iajogYW55KSB7XG4gICAgICAgIHJldHVybiBvYmouaGFzT3RoZXI7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJub25lVGV4dFwiLFxuICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY05vbmVUZXh0XCIsXG4gICAgICBkZXBlbmRzT246IFwiaGFzTm9uZVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICByZXR1cm4gb2JqLmhhc05vbmU7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJvdGhlclRleHRcIixcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NPdGhlclRleHRcIixcbiAgICAgIGRlcGVuZHNPbjogXCJoYXNPdGhlclwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICByZXR1cm4gb2JqLmhhc090aGVyO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwib3RoZXJFcnJvclRleHRcIixcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NPdGhlckVycm9yVGV4dFwiLFxuICAgICAgZGVwZW5kc09uOiBcImhhc090aGVyXCIsXG4gICAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uKG9iajogYW55KSB7XG4gICAgICAgIHJldHVybiBvYmouaGFzT3RoZXI7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJzdG9yZU90aGVyc0FzQ29tbWVudFwiLFxuICAgICAgZGVmYXVsdDogXCJkZWZhdWx0XCIsXG4gICAgICBjaG9pY2VzOiBbXCJkZWZhdWx0XCIsIHRydWUsIGZhbHNlXSxcbiAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgIH0sXG4gIF0sXG4gIG51bGwsXG4gIFwicXVlc3Rpb25cIlxuKTtcblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJjaGVja2JveGJhc2VcIixcbiAgW1xuICAgIHtcbiAgICAgIG5hbWU6IFwiY29sQ291bnQ6bnVtYmVyXCIsXG4gICAgICBkZWZhdWx0OiAxLFxuICAgICAgY2hvaWNlczogWzAsIDEsIDIsIDMsIDQsIDVdLFxuICAgICAgbGF5b3V0OiBcInJvd1wiLFxuICAgIH0sXG4gIF0sXG4gIG51bGwsXG4gIFwic2VsZWN0YmFzZVwiXG4pO1xuIiwiaW1wb3J0IHsgUXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XG5pbXBvcnQgeyBwcm9wZXJ0eSwgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcblxuLyoqXG4gKiBBIE1vZGVsIGZvciBhIGJvb2xlYW4gcXVlc3Rpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkJvb2xlYW5Nb2RlbCBleHRlbmRzIFF1ZXN0aW9uIHtcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcImxhYmVsRmFsc2VcIiwgdGhpcywgdHJ1ZSk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcImxhYmVsVHJ1ZVwiLCB0aGlzLCB0cnVlKTtcbiAgICB0aGlzLmxvY0xhYmVsRmFsc2Uub25HZXRUZXh0Q2FsbGJhY2sgPSAodGV4dDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICAgIHJldHVybiAhIXRleHRcbiAgICAgICAgPyB0ZXh0XG4gICAgICAgIDogc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcImJvb2xlYW5VbmNoZWNrZWRMYWJlbFwiKTtcbiAgICB9O1xuICAgIHRoaXMubG9jTGFiZWxUcnVlLm9uR2V0VGV4dENhbGxiYWNrID0gKHRleHQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gISF0ZXh0XG4gICAgICAgID8gdGV4dFxuICAgICAgICA6IHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJib29sZWFuQ2hlY2tlZExhYmVsXCIpO1xuICAgIH07XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJib29sZWFuXCI7XG4gIH1cbiAgaXNMYXlvdXRUeXBlU3VwcG9ydGVkKGxheW91dFR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkge1xuICAgIHJldHVybiB0aGlzLnJlbmRlckFzICE9PSBcImNoZWNrYm94XCI7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcXVlc3Rpb24gY2hlY2sgd2lsbCBiZSByZW5kZXJlZCBpbiBpbmRldGVybWluYXRlIG1vZGUuIHZhbHVlIGlzIGVtcHR5LlxuICAgKi9cbiAgcHVibGljIGdldCBpc0luZGV0ZXJtaW5hdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNFbXB0eSgpO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzVGl0bGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIEdldC9zZXQgcXVlc3Rpb24gdmFsdWUgaW4gMyBtb2RlczogaW5kZXRlcm1pbmF0ZSAodmFsdWUgaXMgZW1wdHkpLCB0cnVlIChjaGVjayBpcyBzZXQpIGFuZCBmYWxzZSAoY2hlY2sgaXMgdW5zZXQpLlxuICAgKiBAc2VlIHZhbHVlVHJ1ZVxuICAgKiBAc2VlIHZhbHVlRmFsc2VcbiAgICovXG4gIHB1YmxpYyBnZXQgY2hlY2tlZFZhbHVlKCk6IGFueSB7XG4gICAgaWYgKHRoaXMuaXNFbXB0eSgpKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy52YWx1ZSA9PSB0aGlzLmdldFZhbHVlVHJ1ZSgpO1xuICB9XG4gIHB1YmxpYyBzZXQgY2hlY2tlZFZhbHVlKHZhbDogYW55KSB7XG4gICAgaWYgKHRoaXMuaXNSZWFkT25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNldENoZWNrZWRWYWx1ZSh2YWwpO1xuICB9XG4gIHByaXZhdGUgc2V0Q2hlY2tlZFZhbHVlKHZhbDogYW55KSB7XG4gICAgaWYgKHRoaXMuaXNWYWx1ZUVtcHR5KHZhbCkpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsID09IHRydWUgPyB0aGlzLmdldFZhbHVlVHJ1ZSgpIDogdGhpcy5nZXRWYWx1ZUZhbHNlKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhlIGRlZmF1bHQgc3RhdGUgb2YgdGhlIGNoZWNrOiBcImluZGV0ZXJtaW5hdGVcIiAtIGRlZmF1bHQgKHZhbHVlIGlzIGVtcHR5L251bGwpLCBcInRydWVcIiAtIHZhbHVlIGVxdWFscyB2YWx1ZVRydWUgb3IgdHJ1ZSwgXCJmYWxzZVwiIC0gdmFsdWUgZXF1YWxzIHZhbHVlRmFsc2Ugb3IgZmFsc2UuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRlZmF1bHRWYWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJkZWZhdWx0VmFsdWVcIik7XG4gIH1cbiAgcHVibGljIHNldCBkZWZhdWx0VmFsdWUodmFsOiBhbnkpIHtcbiAgICBpZiAodmFsID09PSB0cnVlKSB2YWwgPSBcInRydWVcIjtcbiAgICBpZiAodmFsID09PSBmYWxzZSkgdmFsID0gXCJmYWxzZVwiO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImRlZmF1bHRWYWx1ZVwiLCB2YWwpO1xuICAgIHRoaXMudXBkYXRlVmFsdWVXaXRoRGVmYXVsdHMoKTtcbiAgfVxuICBwdWJsaWMgZ2V0RGVmYXVsdFZhbHVlKCk6IGFueSB7XG4gICAgaWYgKHRoaXMuZGVmYXVsdFZhbHVlID09IFwiaW5kZXRlcm1pbmF0ZVwiKSByZXR1cm4gbnVsbDtcbiAgICBpZiAodGhpcy5kZWZhdWx0VmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdFZhbHVlID09IFwidHJ1ZVwiXG4gICAgICA/IHRoaXMuZ2V0VmFsdWVUcnVlKClcbiAgICAgIDogdGhpcy5nZXRWYWx1ZUZhbHNlKCk7XG4gIH1cbiAgcHVibGljIGdldCBsb2NUaXRsZSgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd1RpdGxlIHx8IHRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMubG9jTGFiZWwudGV4dClcbiAgICAgID8gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInRpdGxlXCIpXG4gICAgICA6IHRoaXMubG9jTGFiZWw7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBjaGVja2JveCBsYWJlbC4gSWYgaXQgaXMgZW1wdHkgYW5kIHNob3dUaXRsZSBpcyBmYWxzZSB0aGVuIHRpdGxlIGlzIHJlbmRlcmVkXG4gICAqIEBzZWUgc2hvd1RpdGxlXG4gICAqIEBzZWUgdGl0bGVcbiAgICovXG4gIEBwcm9wZXJ0eSh7IGxvY2FsaXphYmxlOiB0cnVlIH0pXG4gIGxhYmVsOiBzdHJpbmc7XG5cbiAgZ2V0IGxvY0Rpc3BsYXlMYWJlbCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgaWYgKHRoaXMubG9jTGFiZWwudGV4dCkgcmV0dXJuIHRoaXMubG9jTGFiZWw7XG4gICAgcmV0dXJuIHRoaXMuc2hvd1RpdGxlID8gdGhpcy5sb2NMYWJlbCA6IHRoaXMubG9jVGl0bGU7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHksIGlmIHlvdSB3YW50IHRvIGhhdmUgYSBkaWZmZXJlbnQgbGFiZWwgZm9yIHN0YXRlIHdoZW4gY2hlY2sgaXMgc2V0LlxuICAgKi9cbiAgcHVibGljIGdldCBsYWJlbFRydWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJsYWJlbFRydWVcIik7XG4gIH1cbiAgcHVibGljIHNldCBsYWJlbFRydWUodmFsOiBhbnkpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImxhYmVsVHJ1ZVwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NMYWJlbFRydWUoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwibGFiZWxUcnVlXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5LCBpZiB5b3Ugd2FudCB0byBoYXZlIGEgZGlmZmVyZW50IGxhYmVsIGZvciBzdGF0ZSB3aGVuIGNoZWNrIGlzIHVuc2V0LlxuICAgKi9cbiAgcHVibGljIGdldCBsYWJlbEZhbHNlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwibGFiZWxGYWxzZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGxhYmVsRmFsc2UodmFsOiBhbnkpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImxhYmVsRmFsc2VcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jTGFiZWxGYWxzZSgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJsYWJlbEZhbHNlXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIHRydWUgdG8gc2hvdyB0aGUgcXVlc3Rpb24gdGl0bGUuIEl0IGlzIGhpZGRlbiBieSBkZWZhdWx0LlxuICAgKi9cbiAgQHByb3BlcnR5KClcbiAgc2hvd1RpdGxlOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSwgaWYgeW91IHdhbnQgdG8gaGF2ZSBhIGRpZmZlcmVudCB2YWx1ZSBmcm9tIHRydWUgd2hlbiBjaGVjayBpcyBzZXQuXG4gICAqL1xuICBAcHJvcGVydHkoKVxuICB2YWx1ZVRydWU6IGFueTtcbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5LCBpZiB5b3Ugd2FudCB0byBoYXZlIGEgZGlmZmVyZW50IHZhbHVlIGZyb20gZmFsc2Ugd2hlbiBjaGVjayBpcyB1bnNldC5cbiAgICovXG4gIEBwcm9wZXJ0eSgpXG4gIHZhbHVlRmFsc2U6IGFueTtcblxuICBwcml2YXRlIGdldFZhbHVlVHJ1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlVHJ1ZSA/IHRoaXMudmFsdWVUcnVlIDogdHJ1ZTtcbiAgfVxuICBwcml2YXRlIGdldFZhbHVlRmFsc2UoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZUZhbHNlID8gdGhpcy52YWx1ZUZhbHNlIDogZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIHNldERlZmF1bHRWYWx1ZSgpIHtcbiAgICBpZiAodGhpcy5kZWZhdWx0VmFsdWUgPT0gXCJ0cnVlXCIpIHRoaXMuc2V0Q2hlY2tlZFZhbHVlKHRydWUpO1xuICAgIGlmICh0aGlzLmRlZmF1bHRWYWx1ZSA9PSBcImZhbHNlXCIpIHRoaXMuc2V0Q2hlY2tlZFZhbHVlKGZhbHNlKTtcbiAgICBpZiAodGhpcy5kZWZhdWx0VmFsdWUgPT0gXCJpbmRldGVybWluYXRlXCIpIHRoaXMuc2V0Q2hlY2tlZFZhbHVlKG51bGwpO1xuICB9XG4gIHByb3RlY3RlZCBnZXREaXNwbGF5VmFsdWVDb3JlKGtleXNBc1RleHQ6IGJvb2xlYW4sIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGlmICh2YWx1ZSA9PSB0aGlzLmdldFZhbHVlVHJ1ZSgpKSByZXR1cm4gdGhpcy5sb2NMYWJlbFRydWUudGV4dE9ySHRtbDtcbiAgICByZXR1cm4gdGhpcy5sb2NMYWJlbEZhbHNlLnRleHRPckh0bWw7XG4gIH1cbn1cblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJib29sZWFuXCIsXG4gIFtcbiAgICB7IG5hbWU6IFwibGFiZWw6dGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jTGFiZWxcIiB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwibGFiZWxUcnVlOnRleHRcIixcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NMYWJlbFRydWVcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwibGFiZWxGYWxzZTp0ZXh0XCIsXG4gICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jTGFiZWxGYWxzZVwiLFxuICAgIH0sXG4gICAgXCJzaG93VGl0bGU6Ym9vbGVhblwiLFxuICAgIFwidmFsdWVUcnVlXCIsXG4gICAgXCJ2YWx1ZUZhbHNlXCIsXG4gICAgeyBuYW1lOiBcInJlbmRlckFzXCIsIGRlZmF1bHQ6IFwiZGVmYXVsdFwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICBdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uQm9vbGVhbk1vZGVsKFwiXCIpO1xuICB9LFxuICBcInF1ZXN0aW9uXCJcbik7XG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImJvb2xlYW5cIiwgKG5hbWUpID0+IHtcbiAgcmV0dXJuIG5ldyBRdWVzdGlvbkJvb2xlYW5Nb2RlbChuYW1lKTtcbn0pO1xuIiwiaW1wb3J0IHsgU2VyaWFsaXplciwgcHJvcGVydHkgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmltcG9ydCB7IEl0ZW1WYWx1ZSB9IGZyb20gXCIuL2l0ZW12YWx1ZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25DaGVja2JveEJhc2UgfSBmcm9tIFwiLi9xdWVzdGlvbl9iYXNlc2VsZWN0XCI7XG5pbXBvcnQgeyBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5cbmV4cG9ydCBjbGFzcyBCdXR0b25Hcm91cEl0ZW1WYWx1ZSBleHRlbmRzIEl0ZW1WYWx1ZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHZhbHVlOiBhbnksXG4gICAgdGV4dDogc3RyaW5nID0gbnVsbCxcbiAgICBwcm90ZWN0ZWQgdHlwZU5hbWUgPSBcImJ1dHRvbmdyb3VwaXRlbXZhbHVlXCJcbiAgKSB7XG4gICAgc3VwZXIodmFsdWUsIHRleHQsIHR5cGVOYW1lKTtcbiAgfVxuICAvKlxuICAgIEl0ZW0gaWNvbiBwcm9wZXJ0eVxuICAqL1xuICBAcHJvcGVydHkoKVxuICBpY29uTmFtZTogc3RyaW5nO1xuICAvKlxuICAgIEJ5IGRlZmF1bHQgaWNvbiBzaXplIGlzIDI0LlxuICAgIFVzZSB0aGlzIHByb3BlcnR5IHRvIGNoYW5nZSBpdGVtIGljb24gc2l6ZS4gIFxuICAqL1xuICBAcHJvcGVydHkoKVxuICBpY29uU2l6ZTogbnVtYmVyO1xuICAvKipcbiAgICogQnkgZGVmYXVsdCBpdGVtIGNhcHRpb24gaXMgdmlzaWJsZS5cbiAgICogU2V0IGl0ICdmYWxzZScgdG8gaGlkZSBpdGVtIGNhcHRpb24uXG4gICAqL1xuICBAcHJvcGVydHkoKVxuICBzaG93Q2FwdGlvbjogYm9vbGVhbjtcbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gISF0aGlzLnR5cGVOYW1lID8gdGhpcy50eXBlTmFtZSA6IFwiYnV0dG9uZ3JvdXBpdGVtdmFsdWVcIjtcbiAgfVxufVxuXG4vKipcbiAqIEEgTW9kZWwgZm9yIGEgYnV0dG9uIGdyb3VwIHF1ZXN0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25CdXR0b25Hcm91cE1vZGVsIGV4dGVuZHMgUXVlc3Rpb25DaGVja2JveEJhc2Uge1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImJ1dHRvbmdyb3VwXCI7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEl0ZW1WYWx1ZVR5cGUoKSB7XG4gICAgcmV0dXJuIFwiYnV0dG9uZ3JvdXBpdGVtdmFsdWVcIjtcbiAgfVxuICBwdWJsaWMgc3VwcG9ydE90aGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcImJ1dHRvbmdyb3VwXCIsXG4gIFtcbiAgICB7XG4gICAgICBuYW1lOiBcImNob2ljZXM6YnV0dG9uZ3JvdXBpdGVtdmFsdWVbXVwiLFxuICAgIH0sXG4gIF0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25CdXR0b25Hcm91cE1vZGVsKFwiXCIpO1xuICB9LFxuICBcImNoZWNrYm94YmFzZVwiXG4pO1xuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcImJ1dHRvbmdyb3VwaXRlbXZhbHVlXCIsXG4gIFtcbiAgICB7IG5hbWU6IFwic2hvd0NhcHRpb246Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgeyBuYW1lOiBcImljb25OYW1lOnRleHRcIiB9LFxuICAgIHsgbmFtZTogXCJpY29uU2l6ZTpudW1iZXJcIiB9LFxuICBdLFxuICAodmFsdWU6IGFueSkgPT4gbmV3IEJ1dHRvbkdyb3VwSXRlbVZhbHVlKHZhbHVlKSxcbiAgXCJpdGVtdmFsdWVcIlxuKTtcblxuLy8gUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJidXR0b25ncm91cFwiLCBuYW1lID0+IHtcbi8vICAgdmFyIHEgPSBuZXcgUXVlc3Rpb25CdXR0b25Hcm91cE1vZGVsKG5hbWUpO1xuLy8gICBxLmNob2ljZXMgPSBRdWVzdGlvbkZhY3RvcnkuRGVmYXVsdENob2ljZXM7XG4vLyAgIHJldHVybiBxO1xuLy8gfSk7XG5cbmV4cG9ydCBjbGFzcyBCdXR0b25Hcm91cEl0ZW1Nb2RlbCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBxdWVzdGlvbjogUXVlc3Rpb25CdXR0b25Hcm91cE1vZGVsLFxuICAgIHB1YmxpYyBpdGVtOiBJdGVtVmFsdWUsXG4gICAgcHVibGljIGluZGV4OiBudW1iZXJcbiAgKSB7fVxuICBwdWJsaWMgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLml0ZW0udmFsdWU7XG4gIH1cbiAgcHVibGljIGdldCBpY29uTmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtLmljb25OYW1lO1xuICB9XG4gIHB1YmxpYyBnZXQgaWNvblNpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbS5pY29uU2l6ZSB8fCAyNDtcbiAgfVxuICBwdWJsaWMgZ2V0IGNhcHRpb24oKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLml0ZW0ubG9jVGV4dDtcbiAgfVxuICBwdWJsaWMgZ2V0IHNob3dDYXB0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLml0ZW0uc2hvd0NhcHRpb24gfHwgdGhpcy5pdGVtLnNob3dDYXB0aW9uID09PSB1bmRlZmluZWQ7XG4gIH1cbiAgcHVibGljIGdldCBpc1JlcXVpcmVkKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmlzUmVxdWlyZWQ7XG4gIH1cbiAgcHVibGljIGdldCBzZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5pc0l0ZW1TZWxlY3RlZCh0aGlzLml0ZW0pO1xuICB9XG4gIHB1YmxpYyBnZXQgcmVhZE9ubHkoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5IHx8ICF0aGlzLml0ZW0uaXNFbmFibGVkO1xuICB9XG4gIHB1YmxpYyBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5uYW1lICsgXCJfXCIgKyB0aGlzLnF1ZXN0aW9uLmlkO1xuICB9XG4gIHB1YmxpYyBnZXQgaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uaW5wdXRJZCArIFwiX1wiICsgdGhpcy5pbmRleDtcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc0Vycm9ycygpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5lcnJvcnMubGVuZ3RoID4gMDtcbiAgfVxuICBwdWJsaWMgZ2V0IGRlc2NyaWJlZEJ5KCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmVycm9ycy5sZW5ndGggPiAwXG4gICAgICA/IHRoaXMucXVlc3Rpb24uaWQgKyBcIl9lcnJvcnNcIlxuICAgICAgOiBudWxsO1xuICB9XG4gIHByaXZhdGUgZ2V0IGxhYmVsQ2xhc3MoKSB7XG4gICAgbGV0IGNzcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkKSB7XG4gICAgICBjc3MgKz0gXCIgXCIgKyB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbVNlbGVjdGVkO1xuICAgIH1cbiAgICBpZiAoIXRoaXMucmVhZE9ubHkgJiYgIXRoaXMuc2VsZWN0ZWQpIHtcbiAgICAgIGNzcyArPSBcIiBcIiArIHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtSG92ZXI7XG4gICAgfVxuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzUmVhZE9ubHkgfHwgIXRoaXMuaXRlbS5pc0VuYWJsZWQpIHtcbiAgICAgIGNzcyArPSBcIiBcIiArIHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtRGlzYWJsZWQ7XG4gICAgfVxuICAgIHJldHVybiBjc3M7XG4gIH1cbiAgcHVibGljIGdldCBjc3MoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiB0aGlzLmxhYmVsQ2xhc3MsXG4gICAgICBpY29uOiB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbUljb24sXG4gICAgICBjb250cm9sOiB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbUNvbnRyb2wsXG4gICAgICBjYXB0aW9uOiB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbUNhcHRpb24sXG4gICAgICBkZWNvcmF0b3I6IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtRGVjb3JhdG9yLFxuICAgIH07XG4gIH1cbiAgcHVibGljIG9uQ2hhbmdlKCkge1xuICAgIHRoaXMucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSA9IHRoaXMuaXRlbS52YWx1ZTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xuaW1wb3J0IHtcbiAgUXVlc3Rpb25DaGVja2JveEJhc2UsXG4gIFF1ZXN0aW9uU2VsZWN0QmFzZSxcbn0gZnJvbSBcIi4vcXVlc3Rpb25fYmFzZXNlbGVjdFwiO1xuaW1wb3J0IHsgSGVscGVycyB9IGZyb20gXCIuL2hlbHBlcnNcIjtcbmltcG9ydCB7IEl0ZW1WYWx1ZSB9IGZyb20gXCIuL2l0ZW12YWx1ZVwiO1xuaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuXG4vKipcbiAqIEEgTW9kZWwgZm9yIGEgY2hlY2tib3ggcXVlc3Rpb25cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uQ2hlY2tib3hNb2RlbCBleHRlbmRzIFF1ZXN0aW9uQ2hlY2tib3hCYXNlIHtcbiAgcHJpdmF0ZSBzZWxlY3RBbGxJdGVtVmFsdWU6IEl0ZW1WYWx1ZSA9IG5ldyBJdGVtVmFsdWUoXCJzZWxlY3RhbGxcIik7XG4gIHByaXZhdGUgaW52aXNpYmxlT2xkVmFsdWVzOiBhbnkgPSB7fTtcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gICAgdmFyIHNlbGVjdEFsbEl0ZW1UZXh0ID0gdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcbiAgICAgIFwic2VsZWN0QWxsVGV4dFwiLFxuICAgICAgdGhpcyxcbiAgICAgIHRydWVcbiAgICApO1xuICAgIHNlbGVjdEFsbEl0ZW1UZXh0Lm9uR2V0VGV4dENhbGxiYWNrID0gZnVuY3Rpb24odGV4dCkge1xuICAgICAgcmV0dXJuICEhdGV4dCA/IHRleHQgOiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwic2VsZWN0QWxsSXRlbVRleHRcIik7XG4gICAgfTtcbiAgICB0aGlzLnNlbGVjdEFsbEl0ZW0ubG9jT3duZXIgPSB0aGlzO1xuICAgIHRoaXMuc2VsZWN0QWxsSXRlbS5zZXRMb2NUZXh0KHNlbGVjdEFsbEl0ZW1UZXh0KTtcblxuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydGllc1ZhbHVlQ2hhbmdlZChcbiAgICAgIFtcImhhc1NlbGVjdEFsbFwiLCBcInNlbGVjdEFsbFRleHRcIl0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXQgYXJpYVJvbGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJncm91cFwiO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiY2hlY2tib3hcIjtcbiAgfVxuICBwcm90ZWN0ZWQgb25DcmVhdGluZygpIHtcbiAgICBzdXBlci5vbkNyZWF0aW5nKCk7XG4gICAgdGhpcy5jcmVhdGVOZXdBcnJheShcInJlbmRlcmVkVmFsdWVcIik7XG4gICAgdGhpcy5jcmVhdGVOZXdBcnJheShcInZhbHVlXCIpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRGaXJzdElucHV0RWxlbWVudElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXRJZCArIFwiXzBcIjtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgc2VsZWN0IGFsbCBpdGVtLiBCeSB1c2luZyB0aGlzIHByb3BlcnR5LCB5b3UgbWF5IGNoYW5nZSBwcm9ncmFtbWF0aWNhbGx5IGl0J3MgdmFsdWUgYW5kIHRleHQuXG4gICAqIEBzZWUgaGFzU2VsZWN0QWxsXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNlbGVjdEFsbEl0ZW0oKTogSXRlbVZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RBbGxJdGVtVmFsdWU7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIHNldCB0aGUgZGlmZmVyZW50IHRleHQgZm9yIFNlbGVjdCBBbGwgaXRlbS5cbiAgICovXG4gIHB1YmxpYyBnZXQgc2VsZWN0QWxsVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcbiAgICAgIFwic2VsZWN0QWxsVGV4dFwiLFxuICAgICAgc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcInNlbGVjdEFsbEl0ZW1UZXh0XCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNlbGVjdEFsbFRleHQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInNlbGVjdEFsbFRleHRcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jU2VsZWN0QWxsVGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJzZWxlY3RBbGxUZXh0XCIpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byB0cnVlLCB0byBzaG93IHRoZSBcIlNlbGVjdCBBbGxcIiBpdGVtIG9uIHRoZSB0b3AuIElmIGVuZC11c2VyIGNoZWNrcyB0aGlzIGl0ZW0sIHRoZW4gYWxsIGl0ZW1zIGFyZSBjaGVja2VkLlxuICAgKi9cbiAgcHVibGljIGdldCBoYXNTZWxlY3RBbGwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImhhc1NlbGVjdEFsbFwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBoYXNTZWxlY3RBbGwodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaGFzU2VsZWN0QWxsXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBhbGwgaXRlbXMgYXJlIHNlbGVjdGVkXG4gICAqIEBzZWUgdG9nZ2xlU2VsZWN0QWxsXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzQWxsU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XG4gICAgaWYgKCF2YWwgfHwgIUFycmF5LmlzQXJyYXkodmFsKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0aGlzLmlzSXRlbVNlbGVjdGVkKHRoaXMubm9uZUl0ZW0pKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIGFsbEl0ZW1Db3VudCA9IHRoaXMudmlzaWJsZUNob2ljZXMubGVuZ3RoO1xuICAgIGlmICh0aGlzLmhhc090aGVyKSBhbGxJdGVtQ291bnQtLTtcbiAgICBpZiAodGhpcy5oYXNOb25lKSBhbGxJdGVtQ291bnQtLTtcbiAgICBpZiAodGhpcy5oYXNTZWxlY3RBbGwpIGFsbEl0ZW1Db3VudC0tO1xuICAgIHZhciBzZWxlY3RlZENvdW50ID0gdmFsLmxlbmd0aDtcbiAgICBpZiAodGhpcy5pc0l0ZW1TZWxlY3RlZCh0aGlzLm90aGVySXRlbSkpIHNlbGVjdGVkQ291bnQtLTtcbiAgICByZXR1cm4gc2VsZWN0ZWRDb3VudCA9PT0gYWxsSXRlbUNvdW50O1xuICB9XG4gIHB1YmxpYyBzZXQgaXNBbGxTZWxlY3RlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICBpZiAodmFsKSB7XG4gICAgICB0aGlzLnNlbGVjdEFsbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsZWFyVmFsdWUoKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEl0IHdpbGwgc2VsZWN0IGFsbCBpdGVtcywgZXhjZXB0IG90aGVyIGFuZCBub25lLiBJZiBhbGwgaXRlbXMgaGF2ZSBiZWVuIGFscmVhZHkgc2VsZWN0ZWQgdGhlbiBpdCB3aWxsIGNsZWFyIHRoZSB2YWx1ZVxuICAgKiBAc2VlIGlzQWxsU2VsZWN0ZWRcbiAgICogQHNlZSBzZWxlY3RBbGxcbiAgICovXG4gIHB1YmxpYyB0b2dnbGVTZWxlY3RBbGwoKSB7XG4gICAgdGhpcy5pc0FsbFNlbGVjdGVkID0gIXRoaXMuaXNBbGxTZWxlY3RlZDtcbiAgfVxuICAvKipcbiAgICogU2VsZWN0IGFsbCBpdGVtcywgZXhjZXB0IG90aGVyIGFuZCBub25lLlxuICAgKi9cbiAgcHVibGljIHNlbGVjdEFsbCgpIHtcbiAgICB2YXIgdmFsID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnZpc2libGVDaG9pY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IHRoaXMudmlzaWJsZUNob2ljZXNbaV07XG4gICAgICBpZiAoXG4gICAgICAgIGl0ZW0gPT09IHRoaXMubm9uZUl0ZW0gfHxcbiAgICAgICAgaXRlbSA9PT0gdGhpcy5vdGhlckl0ZW0gfHxcbiAgICAgICAgaXRlbSA9PT0gdGhpcy5zZWxlY3RBbGxJdGVtXG4gICAgICApXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgdmFsLnB1c2goaXRlbS52YWx1ZSk7XG4gICAgfVxuICAgIHRoaXMudmFsdWUgPSB2YWw7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBpdGVtIGlzIGNoZWNrZWRcbiAgICogQHBhcmFtIGl0ZW0gY2hlY2tib3ggaXRlbSB2YWx1ZVxuICAgKi9cbiAgcHVibGljIGlzSXRlbVNlbGVjdGVkKGl0ZW06IEl0ZW1WYWx1ZSk6IGJvb2xlYW4ge1xuICAgIGlmIChpdGVtID09PSB0aGlzLnNlbGVjdEFsbEl0ZW0pIHJldHVybiB0aGlzLmlzQWxsU2VsZWN0ZWQ7XG4gICAgdmFyIHZhbCA9IHRoaXMucmVuZGVyZWRWYWx1ZTtcbiAgICBpZiAoIXZhbCB8fCAhQXJyYXkuaXNBcnJheSh2YWwpKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHModmFsW2ldLCBpdGVtLnZhbHVlKSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgZGlmZmVyZW50IHRvIDAgdG8gbGltaXQgdGhlIG51bWJlciBvZiBzZWxlY3RlZCBjaG9pY2VzIGluIHRoZSBjaGVja2JveC5cbiAgICovXG4gIHB1YmxpYyBnZXQgbWF4U2VsZWN0ZWRDaG9pY2VzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1heFNlbGVjdGVkQ2hvaWNlc1wiLCAwKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1heFNlbGVjdGVkQ2hvaWNlcyh2YWw6IG51bWJlcikge1xuICAgIGlmICh2YWwgPCAwKSB2YWwgPSAwO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1heFNlbGVjdGVkQ2hvaWNlc1wiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHNlbGVjdGVkIGl0ZW1zIGluIHRoZSBjaGVja2JveC4gUmV0dXJucyBlbXB0eSBhcnJheSBpZiB0aGUgdmFsdWUgaXMgZW1wdHlcbiAgICovXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRJdGVtcygpOiBBcnJheTxJdGVtVmFsdWU+IHtcbiAgICBpZiAodGhpcy5pc0VtcHR5KCkpIHJldHVybiBbXTtcbiAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlcy5wdXNoKEl0ZW1WYWx1ZS5nZXRJdGVtQnlWYWx1ZSh0aGlzLnZpc2libGVDaG9pY2VzLCB2YWxbaV0pKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcm90ZWN0ZWQgb25FbmFibGVJdGVtQ2FsbEJhY2soaXRlbTogSXRlbVZhbHVlKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnNob3VsZENoZWNrTWF4U2VsZWN0ZWRDaG9pY2VzKCkpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiB0aGlzLmlzSXRlbVNlbGVjdGVkKGl0ZW0pO1xuICB9XG4gIHByb3RlY3RlZCBvbkFmdGVyUnVuSXRlbXNFbmFibGVDb25kaXRpb24oKSB7XG4gICAgaWYgKHRoaXMubWF4U2VsZWN0ZWRDaG9pY2VzIDwgMSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmhhc1NlbGVjdEFsbCkge1xuICAgICAgdGhpcy5zZWxlY3RBbGxJdGVtLnNldElzRW5hYmxlZChcbiAgICAgICAgdGhpcy5tYXhTZWxlY3RlZENob2ljZXMgPj0gdGhpcy5hY3RpdmVDaG9pY2VzLmxlbmd0aFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzT3RoZXIpIHtcbiAgICAgIHRoaXMub3RoZXJJdGVtLnNldElzRW5hYmxlZChcbiAgICAgICAgIXRoaXMuc2hvdWxkQ2hlY2tNYXhTZWxlY3RlZENob2ljZXMoKSB8fCB0aGlzLmlzT3RoZXJTZWxlY3RlZFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBzaG91bGRDaGVja01heFNlbGVjdGVkQ2hvaWNlcygpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5tYXhTZWxlY3RlZENob2ljZXMgPCAxKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XG4gICAgdmFyIGxlbiA9ICFBcnJheS5pc0FycmF5KHZhbCkgPyAwIDogdmFsLmxlbmd0aDtcbiAgICByZXR1cm4gbGVuID49IHRoaXMubWF4U2VsZWN0ZWRDaG9pY2VzO1xuICB9XG4gIGdldEl0ZW1DbGFzcyhpdGVtOiBhbnkpIHtcbiAgICBsZXQgdmFsID0gdGhpcy52YWx1ZTsgLy90cmlnZ2VyIGRlcGVuZGVuY2llcyBmcm9tIGtvVmFsdWUgZm9yIGtub2Nrb3V0XG4gICAgbGV0IGl0ZW1DbGFzcyA9IHN1cGVyLmdldEl0ZW1DbGFzcyhpdGVtKTtcbiAgICBjb25zdCBpc1NlbGVjdEFsbCA9IGl0ZW0gPT09IHRoaXMuc2VsZWN0QWxsSXRlbTtcbiAgICBpZiAoaXNTZWxlY3RBbGwgJiYgISF0aGlzLmNzc0NsYXNzZXMuaXRlbVNlbGVjdEFsbClcbiAgICAgIGl0ZW1DbGFzcyArPSBcIiBcIiArIHRoaXMuY3NzQ2xhc3Nlcy5pdGVtU2VsZWN0QWxsO1xuICAgIHJldHVybiBpdGVtQ2xhc3M7XG4gIH1cbiAgcHJvdGVjdGVkIHNldE5ld1ZhbHVlKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBpZiAoIXRoaXMuaXNDaGFuZ2luZ1ZhbHVlT25DbGVhckluY29ycmVjdCkge1xuICAgICAgdGhpcy5pbnZpc2libGVPbGRWYWx1ZXMgPSBbXTtcbiAgICB9XG4gICAgbmV3VmFsdWUgPSB0aGlzLnZhbHVlRnJvbURhdGEobmV3VmFsdWUpO1xuICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgaWYgKCFuZXdWYWx1ZSkgbmV3VmFsdWUgPSBbXTtcbiAgICBpZiAoIXZhbHVlKSB2YWx1ZSA9IFtdO1xuICAgIGlmIChIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHModmFsdWUsIG5ld1ZhbHVlKSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmhhc05vbmUpIHtcbiAgICAgIHZhciBwcmV2Tm9uZUluZGV4ID0gdGhpcy5ub25lSW5kZXhJbkFycmF5KHZhbHVlKTtcbiAgICAgIHZhciBuZXdOb25lSW5kZXggPSB0aGlzLm5vbmVJbmRleEluQXJyYXkobmV3VmFsdWUpO1xuICAgICAgaWYgKHByZXZOb25lSW5kZXggPiAtMSkge1xuICAgICAgICBpZiAobmV3Tm9uZUluZGV4ID4gLTEgJiYgbmV3VmFsdWUubGVuZ3RoID4gMSkge1xuICAgICAgICAgIG5ld1ZhbHVlLnNwbGljZShuZXdOb25lSW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobmV3Tm9uZUluZGV4ID4gLTEpIHtcbiAgICAgICAgICBuZXdWYWx1ZS5zcGxpY2UoMCwgbmV3VmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICBuZXdWYWx1ZS5wdXNoKHRoaXMubm9uZUl0ZW0udmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHN1cGVyLnNldE5ld1ZhbHVlKHRoaXMucmVuZHJlZFZhbHVlVG9EYXRhKG5ld1ZhbHVlKSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldElzTXVsdGlwbGVWYWx1ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q29tbWVudEZyb21WYWx1ZShuZXdWYWx1ZTogYW55KTogc3RyaW5nIHtcbiAgICB2YXIgaW5kID0gdGhpcy5nZXRGaXJzdFVua25vd25JbmRleChuZXdWYWx1ZSk7XG4gICAgaWYgKGluZCA8IDApIHJldHVybiBcIlwiO1xuICAgIHJldHVybiBuZXdWYWx1ZVtpbmRdO1xuICB9XG4gIHByb3RlY3RlZCBzZXRPdGhlclZhbHVlSW50b1ZhbHVlKG5ld1ZhbHVlOiBhbnkpOiBhbnkge1xuICAgIHZhciBpbmQgPSB0aGlzLmdldEZpcnN0VW5rbm93bkluZGV4KG5ld1ZhbHVlKTtcbiAgICBpZiAoaW5kIDwgMCkgcmV0dXJuIG5ld1ZhbHVlO1xuICAgIG5ld1ZhbHVlLnNwbGljZShpbmQsIDEsIHRoaXMub3RoZXJJdGVtLnZhbHVlKTtcbiAgICByZXR1cm4gbmV3VmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBnZXRGaXJzdFVua25vd25JbmRleChuZXdWYWx1ZTogYW55KTogbnVtYmVyIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkobmV3VmFsdWUpKSByZXR1cm4gLTE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXdWYWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuaGFzVW5rbm93blZhbHVlKG5ld1ZhbHVlW2ldKSkgcmV0dXJuIGk7XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfVxuICBwcml2YXRlIG5vbmVJbmRleEluQXJyYXkodmFsOiBhbnkpIHtcbiAgICBpZiAoIXZhbCB8fCAhQXJyYXkuaXNBcnJheSh2YWwpKSByZXR1cm4gLTE7XG4gICAgdmFyIG5vbmVWYWx1ZSA9IHRoaXMubm9uZUl0ZW0udmFsdWU7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh2YWxbaV0gPT0gbm9uZVZhbHVlKSByZXR1cm4gaTtcbiAgICB9XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIHByb3RlY3RlZCBjYW5Vc2VGaWx0ZXJlZENob2ljZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmhhc1NlbGVjdEFsbCAmJiBzdXBlci5jYW5Vc2VGaWx0ZXJlZENob2ljZXMoKTtcbiAgfVxuICBwcm90ZWN0ZWQgc3VwcG9ydFNlbGVjdEFsbCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1N1cHBvcnRQcm9wZXJ0eShcImhhc1NlbGVjdEFsbFwiKTtcbiAgfVxuICBwcm90ZWN0ZWQgYWRkVG9WaXNpYmxlQ2hvaWNlcyhpdGVtczogQXJyYXk8SXRlbVZhbHVlPiwgaXNBZGRBbGw6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5zdXBwb3J0U2VsZWN0QWxsKCkgJiYgKGlzQWRkQWxsIHx8IHRoaXMuaGFzU2VsZWN0QWxsKSkge1xuICAgICAgaXRlbXMudW5zaGlmdCh0aGlzLnNlbGVjdEFsbEl0ZW0pO1xuICAgIH1cbiAgICBzdXBlci5hZGRUb1Zpc2libGVDaG9pY2VzKGl0ZW1zLCBpc0FkZEFsbCk7XG4gIH1cbiAgcHJvdGVjdGVkIGlzQnVpbHRJbkNob2ljZShcbiAgICBpdGVtOiBJdGVtVmFsdWUsXG4gICAgcXVlc3Rpb246IFF1ZXN0aW9uU2VsZWN0QmFzZVxuICApOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgaXRlbSA9PT0gKDxRdWVzdGlvbkNoZWNrYm94QmFzZT5xdWVzdGlvbikuc2VsZWN0QWxsSXRlbSB8fFxuICAgICAgc3VwZXIuaXNCdWlsdEluQ2hvaWNlKGl0ZW0sIHF1ZXN0aW9uKVxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIEZvciBpbnRlcm5hbCB1c2UgaW4gU3VydmV5SlMgQ3JlYXRvciBWMi5cbiAgICovXG4gIHB1YmxpYyBpc0l0ZW1Jbkxpc3QoaXRlbTogSXRlbVZhbHVlKTogYm9vbGVhbiB7XG4gICAgaWYgKGl0ZW0gPT0gdGhpcy5zZWxlY3RBbGxJdGVtKSByZXR1cm4gdGhpcy5oYXNTZWxlY3RBbGw7XG4gICAgcmV0dXJuIHN1cGVyLmlzSXRlbUluTGlzdChpdGVtKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RGlzcGxheVZhbHVlQ29yZShrZXlzQXNUZXh0OiBib29sZWFuLCB2YWx1ZTogYW55KTogYW55IHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKVxuICAgICAgcmV0dXJuIHN1cGVyLmdldERpc3BsYXlWYWx1ZUNvcmUoa2V5c0FzVGV4dCwgdmFsdWUpO1xuICAgIHZhciBpdGVtcyA9IHRoaXMudmlzaWJsZUNob2ljZXM7XG4gICAgdmFyIHN0ciA9IFwiXCI7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbFN0ciA9IHRoaXMuZ2V0Q2hvaWNlc0Rpc3BsYXlWYWx1ZShpdGVtcywgdmFsdWVbaV0pO1xuICAgICAgaWYgKHZhbFN0cikge1xuICAgICAgICBpZiAoc3RyKSBzdHIgKz0gXCIsIFwiO1xuICAgICAgICBzdHIgKz0gdmFsU3RyO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIHByb3RlY3RlZCBjbGVhckluY29ycmVjdFZhbHVlc0NvcmUoKSB7XG4gICAgdGhpcy5jbGVhckluY29ycmVjdEFuZERpc2FibGVkVmFsdWVzKGZhbHNlKTtcbiAgfVxuICBwcm90ZWN0ZWQgY2xlYXJEaXNhYmxlZFZhbHVlc0NvcmUoKSB7XG4gICAgdGhpcy5jbGVhckluY29ycmVjdEFuZERpc2FibGVkVmFsdWVzKHRydWUpO1xuICB9XG4gIHByaXZhdGUgaXNDaGFuZ2luZ1ZhbHVlT25DbGVhckluY29ycmVjdDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGNsZWFySW5jb3JyZWN0QW5kRGlzYWJsZWRWYWx1ZXMoY2xlYXJEaXNhYmxlZDogYm9vbGVhbikge1xuICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xuICAgIHZhciBoYXNDaGFuZ2VkID0gZmFsc2U7XG4gICAgdmFyIHJlc3RvcmVkVmFsdWVzID0gdGhpcy5yZXN0b3JlVmFsdWVzRnJvbUludmlzaWJsZSgpO1xuICAgIGlmICghdmFsICYmIHJlc3RvcmVkVmFsdWVzLmxlbmd0aCA9PSAwKSByZXR1cm47XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbCkgfHwgdmFsLmxlbmd0aCA9PSAwKSB7XG4gICAgICB0aGlzLmlzQ2hhbmdpbmdWYWx1ZU9uQ2xlYXJJbmNvcnJlY3QgPSB0cnVlO1xuICAgICAgaWYgKCFjbGVhckRpc2FibGVkKSB7XG4gICAgICAgIGlmICh0aGlzLmhhc0NvbW1lbnQpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNsZWFyVmFsdWUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5pc0NoYW5naW5nVmFsdWVPbkNsZWFySW5jb3JyZWN0ID0gZmFsc2U7XG4gICAgICBpZiAocmVzdG9yZWRWYWx1ZXMubGVuZ3RoID09IDApIHJldHVybjtcbiAgICAgIHZhbCA9IFtdO1xuICAgIH1cbiAgICB2YXIgbmV3VmFsdWUgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGlzVW5rb3duID0gdGhpcy5jYW5DbGVhclZhbHVlQW5Vbmtub3codmFsW2ldKTtcbiAgICAgIGlmIChcbiAgICAgICAgKCFjbGVhckRpc2FibGVkICYmICFpc1Vua293bikgfHxcbiAgICAgICAgKGNsZWFyRGlzYWJsZWQgJiYgIXRoaXMuaXNWYWx1ZURpc2FibGVkKHZhbFtpXSkpXG4gICAgICApIHtcbiAgICAgICAgbmV3VmFsdWUucHVzaCh2YWxbaV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGFzQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgIGlmIChpc1Vua293bikge1xuICAgICAgICAgIHRoaXMuaW52aXNpYmxlT2xkVmFsdWVzW3ZhbFtpXV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdG9yZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG5ld1ZhbHVlLnB1c2gocmVzdG9yZWRWYWx1ZXNbaV0pO1xuICAgICAgaGFzQ2hhbmdlZCA9IHRydWU7XG4gICAgfVxuICAgIGlmICghaGFzQ2hhbmdlZCkgcmV0dXJuO1xuICAgIHRoaXMuaXNDaGFuZ2luZ1ZhbHVlT25DbGVhckluY29ycmVjdCA9IHRydWU7XG4gICAgaWYgKG5ld1ZhbHVlLmxlbmd0aCA9PSAwKSB7XG4gICAgICB0aGlzLmNsZWFyVmFsdWUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgIH1cbiAgICB0aGlzLmlzQ2hhbmdpbmdWYWx1ZU9uQ2xlYXJJbmNvcnJlY3QgPSBmYWxzZTtcbiAgfVxuICBwcml2YXRlIHJlc3RvcmVWYWx1ZXNGcm9tSW52aXNpYmxlKCk6IEFycmF5PGFueT4ge1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgdmlzSXRlbXMgPSB0aGlzLnZpc2libGVDaG9pY2VzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlzSXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2YWwgPSB2aXNJdGVtc1tpXS52YWx1ZTtcbiAgICAgIGlmICh0aGlzLmludmlzaWJsZU9sZFZhbHVlc1t2YWxdKSB7XG4gICAgICAgIHJlcy5wdXNoKHZhbCk7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmludmlzaWJsZU9sZFZhbHVlc1t2YWxdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBnZXRDb25kaXRpb25Kc29uKG9wZXJhdG9yOiBzdHJpbmcgPSBudWxsLCBwYXRoOiBzdHJpbmcgPSBudWxsKTogYW55IHtcbiAgICB2YXIganNvbiA9IHN1cGVyLmdldENvbmRpdGlvbkpzb24oKTtcbiAgICBpZiAob3BlcmF0b3IgPT0gXCJjb250YWluc1wiIHx8IG9wZXJhdG9yID09IFwibm90Y29udGFpbnNcIikge1xuICAgICAganNvbltcInR5cGVcIl0gPSBcInJhZGlvZ3JvdXBcIjtcbiAgICB9XG4gICAgcmV0dXJuIGpzb247XG4gIH1cbiAgcHVibGljIGlzQW5zd2VyQ29ycmVjdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gSGVscGVycy5pc0FycmF5Q29udGFpbnNFcXVhbCh0aGlzLnZhbHVlLCB0aGlzLmNvcnJlY3RBbnN3ZXIpO1xuICB9XG4gIHByb3RlY3RlZCBzZXREZWZhdWx0VmFsdWVXaXRoT3RoZXJzKCkge1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLnJlbmRlcmVkVmFsdWVGcm9tRGF0YUNvcmUodGhpcy5kZWZhdWx0VmFsdWUpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRIYXNPdGhlcih2YWw6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghdmFsIHx8ICFBcnJheS5pc0FycmF5KHZhbCkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdmFsLmluZGV4T2YodGhpcy5vdGhlckl0ZW0udmFsdWUpID49IDA7XG4gIH1cbiAgcHJvdGVjdGVkIHZhbHVlRnJvbURhdGEodmFsOiBhbnkpOiBhbnkge1xuICAgIGlmICghdmFsKSByZXR1cm4gdmFsO1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWwpKSByZXR1cm4gW3N1cGVyLnZhbHVlRnJvbURhdGEodmFsKV07XG4gICAgbGV0IHZhbHVlID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBjaG9pY2VpdGVtID0gSXRlbVZhbHVlLmdldEl0ZW1CeVZhbHVlKHRoaXMuYWN0aXZlQ2hvaWNlcywgdmFsW2ldKTtcbiAgICAgIGlmICghIWNob2ljZWl0ZW0pIHtcbiAgICAgICAgdmFsdWUucHVzaChjaG9pY2VpdGVtLnZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlLnB1c2godmFsW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJlZFZhbHVlRnJvbURhdGFDb3JlKHZhbDogYW55KTogYW55IHtcbiAgICBpZiAoIXZhbCB8fCAhQXJyYXkuaXNBcnJheSh2YWwpKSB2YWwgPSBbXTtcbiAgICBpZiAoIXRoaXMuaGFzQWN0aXZlQ2hvaWNlcykgcmV0dXJuIHZhbDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHZhbFtpXSA9PSB0aGlzLm90aGVySXRlbS52YWx1ZSkgcmV0dXJuIHZhbDtcbiAgICAgIGlmICh0aGlzLmhhc1Vua25vd25WYWx1ZSh2YWxbaV0sIHRydWUsIGZhbHNlKSkge1xuICAgICAgICB0aGlzLmNvbW1lbnQgPSB2YWxbaV07XG4gICAgICAgIHZhciBuZXdWYWwgPSB2YWwuc2xpY2UoKTtcbiAgICAgICAgbmV3VmFsW2ldID0gdGhpcy5vdGhlckl0ZW0udmFsdWU7XG4gICAgICAgIHJldHVybiBuZXdWYWw7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRyZWRWYWx1ZVRvRGF0YUNvcmUodmFsOiBhbnkpOiBhbnkge1xuICAgIGlmICghdmFsIHx8ICF2YWwubGVuZ3RoKSByZXR1cm4gdmFsO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodmFsW2ldID09IHRoaXMub3RoZXJJdGVtLnZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmdldFF1ZXN0aW9uQ29tbWVudCgpKSB7XG4gICAgICAgICAgdmFyIG5ld1ZhbCA9IHZhbC5zbGljZSgpO1xuICAgICAgICAgIG5ld1ZhbFtpXSA9IHRoaXMuZ2V0UXVlc3Rpb25Db21tZW50KCk7XG4gICAgICAgICAgcmV0dXJuIG5ld1ZhbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsO1xuICB9XG59XG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcImNoZWNrYm94XCIsXG4gIFtcbiAgICBcImhhc1NlbGVjdEFsbDpib29sZWFuXCIsXG4gICAgeyBuYW1lOiBcIm1heFNlbGVjdGVkQ2hvaWNlczpudW1iZXJcIiwgZGVmYXVsdDogMCB9LFxuICAgIHsgbmFtZTogXCJzZWxlY3RBbGxUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NTZWxlY3RBbGxUZXh0XCIgfSxcbiAgXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbkNoZWNrYm94TW9kZWwoXCJcIik7XG4gIH0sXG4gIFwiY2hlY2tib3hiYXNlXCJcbik7XG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImNoZWNrYm94XCIsIChuYW1lKSA9PiB7XG4gIHZhciBxID0gbmV3IFF1ZXN0aW9uQ2hlY2tib3hNb2RlbChuYW1lKTtcbiAgcS5jaG9pY2VzID0gUXVlc3Rpb25GYWN0b3J5LkRlZmF1bHRDaG9pY2VzO1xuICByZXR1cm4gcTtcbn0pO1xuIiwiaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuaW1wb3J0IHsgUXVlc3Rpb25UZXh0QmFzZSB9IGZyb20gXCIuL3F1ZXN0aW9uX3RleHRiYXNlXCI7XG5cbi8qKlxuICogQSBNb2RlbCBmb3IgYSBjb21tZW50IHF1ZXN0aW9uXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkNvbW1lbnRNb2RlbCBleHRlbmRzIFF1ZXN0aW9uVGV4dEJhc2Uge1xuICAvKipcbiAgICogVGhlIGh0bWwgcm93cyBhdHRyaWJ1dGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJvd3MoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicm93c1wiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJvd3ModmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyb3dzXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBodG1sIGNvbHMgYXR0cmlidXRlLlxuICAgKi9cbiAgcHVibGljIGdldCBjb2xzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNvbHNcIik7XG4gIH1cbiAgcHVibGljIHNldCBjb2xzKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY29sc1wiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICB9XG59XG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcImNvbW1lbnRcIixcbiAgW1xuICAgIHsgbmFtZTogXCJtYXhMZW5ndGg6bnVtYmVyXCIsIGRlZmF1bHQ6IC0xIH0sXG4gICAgeyBuYW1lOiBcImNvbHM6bnVtYmVyXCIsIGRlZmF1bHQ6IDUwIH0sXG4gICAgeyBuYW1lOiBcInJvd3M6bnVtYmVyXCIsIGRlZmF1bHQ6IDQgfSxcbiAgICB7IG5hbWU6IFwicGxhY2VIb2xkZXJcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1BsYWNlSG9sZGVyXCIgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInRleHRVcGRhdGVNb2RlXCIsXG4gICAgICBkZWZhdWx0OiBcImRlZmF1bHRcIixcbiAgICAgIGNob2ljZXM6IFtcImRlZmF1bHRcIiwgXCJvbkJsdXJcIiwgXCJvblR5cGluZ1wiXSxcbiAgICB9LFxuICBdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uQ29tbWVudE1vZGVsKFwiXCIpO1xuICB9LFxuICBcInRleHRiYXNlXCJcbik7XG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImNvbW1lbnRcIiwgKG5hbWUpID0+IHtcbiAgcmV0dXJuIG5ldyBRdWVzdGlvbkNvbW1lbnRNb2RlbChuYW1lKTtcbn0pO1xuIiwiaW1wb3J0IHsgUXVlc3Rpb24sIElDb25kaXRpb25PYmplY3QgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgU2VyaWFsaXplciwgQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb24gfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQge1xuICBJU3VydmV5SW1wbCxcbiAgSVN1cnZleURhdGEsXG4gIElTdXJ2ZXksXG4gIElUZXh0UHJvY2Vzc29yLFxuICBJUGFuZWwsXG4gIElFbGVtZW50XG59IGZyb20gXCIuL2Jhc2UtaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudCB9IGZyb20gXCIuL3N1cnZleS1lbGVtZW50XCI7XG5pbXBvcnQgeyBQYW5lbE1vZGVsIH0gZnJvbSBcIi4vcGFuZWxcIjtcbmltcG9ydCB7IEhlbHBlcnMsIEhhc2hUYWJsZSB9IGZyb20gXCIuL2hlbHBlcnNcIjtcbmltcG9ydCB7IEl0ZW1WYWx1ZSB9IGZyb20gXCIuL2l0ZW12YWx1ZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25UZXh0UHJvY2Vzc29yIH0gZnJvbSBcIi4vdGV4dFByZVByb2Nlc3NvclwiO1xuXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50UXVlc3Rpb25KU09OIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcsIHB1YmxpYyBqc29uOiBhbnkpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgICAgIG5hbWUsXG4gICAgICBbXSxcbiAgICAgIGZ1bmN0aW9uKGpzb246IGFueSkge1xuICAgICAgICByZXR1cm4gQ29tcG9uZW50Q29sbGVjdGlvbi5JbnN0YW5jZS5jcmVhdGVRdWVzdGlvbihcbiAgICAgICAgICAhIWpzb24gPyBqc29uLm5hbWUgOiBcIlwiLFxuICAgICAgICAgIHNlbGZcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBcInF1ZXN0aW9uXCJcbiAgICApO1xuICAgIHRoaXMub25Jbml0KCk7XG4gIH1cbiAgcHVibGljIG9uSW5pdCgpIHtcbiAgICBpZiAoIXRoaXMuanNvbi5vbkluaXQpIHJldHVybjtcbiAgICB0aGlzLmpzb24ub25Jbml0KCk7XG4gIH1cbiAgcHVibGljIG9uQ3JlYXRlZChxdWVzdGlvbjogUXVlc3Rpb24pIHtcbiAgICBpZiAoIXRoaXMuanNvbi5vbkNyZWF0ZWQpIHJldHVybjtcbiAgICB0aGlzLmpzb24ub25DcmVhdGVkKHF1ZXN0aW9uKTtcbiAgfVxuICBwdWJsaWMgb25Mb2FkZWQocXVlc3Rpb246IFF1ZXN0aW9uKSB7XG4gICAgaWYgKCF0aGlzLmpzb24ub25Mb2FkZWQpIHJldHVybjtcbiAgICB0aGlzLmpzb24ub25Mb2FkZWQocXVlc3Rpb24pO1xuICB9XG4gIHB1YmxpYyBvbkFmdGVyUmVuZGVyKHF1ZXN0aW9uOiBRdWVzdGlvbiwgaHRtbEVsZW1lbnQ6IGFueSkge1xuICAgIGlmICghdGhpcy5qc29uLm9uQWZ0ZXJSZW5kZXIpIHJldHVybjtcbiAgICB0aGlzLmpzb24ub25BZnRlclJlbmRlcihxdWVzdGlvbiwgaHRtbEVsZW1lbnQpO1xuICB9XG4gIHB1YmxpYyBvbkFmdGVyUmVuZGVyQ29udGVudEVsZW1lbnQoXG4gICAgcXVlc3Rpb246IFF1ZXN0aW9uLFxuICAgIGVsZW1lbnQ6IFF1ZXN0aW9uLFxuICAgIGh0bWxFbGVtZW50OiBhbnlcbiAgKSB7XG4gICAgaWYgKCF0aGlzLmpzb24ub25BZnRlclJlbmRlckNvbnRlbnRFbGVtZW50KSByZXR1cm47XG4gICAgdGhpcy5qc29uLm9uQWZ0ZXJSZW5kZXJDb250ZW50RWxlbWVudChxdWVzdGlvbiwgZWxlbWVudCwgaHRtbEVsZW1lbnQpO1xuICB9XG4gIHB1YmxpYyBvblByb3BlcnR5Q2hhbmdlZChcbiAgICBxdWVzdGlvbjogUXVlc3Rpb24sXG4gICAgcHJvcGVydHlOYW1lOiBzdHJpbmcsXG4gICAgbmV3VmFsdWU6IGFueVxuICApIHtcbiAgICBpZiAoIXRoaXMuanNvbi5vblByb3BlcnR5Q2hhbmdlZCkgcmV0dXJuO1xuICAgIHRoaXMuanNvbi5vblByb3BlcnR5Q2hhbmdlZChxdWVzdGlvbiwgcHJvcGVydHlOYW1lLCBuZXdWYWx1ZSk7XG4gIH1cbiAgcHVibGljIG9uVmFsdWVDaGFuZ2VkKHF1ZXN0aW9uOiBRdWVzdGlvbiwgbmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogYW55KSB7XG4gICAgaWYgKCF0aGlzLmpzb24ub25WYWx1ZUNoYW5nZWQpIHJldHVybjtcbiAgICB0aGlzLmpzb24ub25WYWx1ZUNoYW5nZWQocXVlc3Rpb24sIG5hbWUsIG5ld1ZhbHVlKTtcbiAgfVxuICBwdWJsaWMgb25JdGVtVmFsdWVQcm9wZXJ0eUNoYW5nZWQoXG4gICAgcXVlc3Rpb246IFF1ZXN0aW9uLFxuICAgIGl0ZW06IEl0ZW1WYWx1ZSxcbiAgICBwcm9wZXJ0eU5hbWU6IHN0cmluZyxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgbmV3VmFsdWU6IGFueVxuICApIHtcbiAgICBpZiAoIXRoaXMuanNvbi5vbkl0ZW1WYWx1ZVByb3BlcnR5Q2hhbmdlZCkgcmV0dXJuO1xuICAgIHRoaXMuanNvbi5vbkl0ZW1WYWx1ZVByb3BlcnR5Q2hhbmdlZChxdWVzdGlvbiwge1xuICAgICAgb2JqOiBpdGVtLFxuICAgICAgcHJvcGVydHlOYW1lOiBwcm9wZXJ0eU5hbWUsXG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgbmV3VmFsdWU6IG5ld1ZhbHVlLFxuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNDb21wb3NpdGUoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5qc29uLmVsZW1lbnRzSlNPTiB8fCAhIXRoaXMuanNvbi5jcmVhdGVFbGVtZW50cztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50Q29sbGVjdGlvbiB7XG4gIHB1YmxpYyBzdGF0aWMgSW5zdGFuY2U6IENvbXBvbmVudENvbGxlY3Rpb24gPSBuZXcgQ29tcG9uZW50Q29sbGVjdGlvbigpO1xuICBwcml2YXRlIGN1c3RvbVF1ZXN0aW9uVmFsdWVzOiBBcnJheTxDb21wb25lbnRRdWVzdGlvbkpTT04+ID0gW107XG4gIHB1YmxpYyBvbkNyZWF0ZUNvbXBvc2l0ZTogKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBxdWVzdGlvbkpTT046IENvbXBvbmVudFF1ZXN0aW9uSlNPTlxuICApID0+IFF1ZXN0aW9uQ29tcG9zaXRlTW9kZWw7XG4gIHB1YmxpYyBvbkNyZWF0ZUN1c3RvbTogKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBxdWVzdGlvbkpTT046IENvbXBvbmVudFF1ZXN0aW9uSlNPTlxuICApID0+IFF1ZXN0aW9uQ3VzdG9tTW9kZWw7XG4gIHB1YmxpYyBvbkFkZGluZ0pzb246IChuYW1lOiBzdHJpbmcsIGlzQ29tcG9zaXRlOiBib29sZWFuKSA9PiB2b2lkO1xuICBwdWJsaWMgYWRkKGpzb246IGFueSkge1xuICAgIGlmICghanNvbikgcmV0dXJuO1xuICAgIGxldCBuYW1lID0ganNvbi5uYW1lO1xuICAgIGlmICghbmFtZSkge1xuICAgICAgdGhyb3cgXCJBdHRyaWJ1dGUgbmFtZSBpcyBtaXNzZWRcIjtcbiAgICB9XG4gICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoISF0aGlzLmdldEN1c3RvbVF1ZXN0aW9uQnlOYW1lKG5hbWUpKSB7XG4gICAgICB0aHJvdyBcIlRoZXJlIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBjdXN0b20gcXVlc3Rpb24gd2l0aCBuYW1lICdcIiArXG4gICAgICAgIG5hbWUgK1xuICAgICAgICBcIidcIjtcbiAgICB9XG4gICAgaWYgKCEhU2VyaWFsaXplci5maW5kQ2xhc3MobmFtZSkpIHtcbiAgICAgIHRocm93IFwiVGhlcmUgaXMgYWxyZWFkeSBjbGFzcyB3aXRoIG5hbWUgJ1wiICsgbmFtZSArIFwiJ1wiO1xuICAgIH1cbiAgICB2YXIgY3VzdG9tUXVlc3Rpb24gPSBuZXcgQ29tcG9uZW50UXVlc3Rpb25KU09OKG5hbWUsIGpzb24pO1xuICAgIGlmICghIXRoaXMub25BZGRpbmdKc29uKVxuICAgICAgdGhpcy5vbkFkZGluZ0pzb24obmFtZSwgY3VzdG9tUXVlc3Rpb24uaXNDb21wb3NpdGUpO1xuICAgIHRoaXMuY3VzdG9tUXVlc3Rpb25WYWx1ZXMucHVzaChjdXN0b21RdWVzdGlvbik7XG4gIH1cbiAgcHVibGljIGdldCBpdGVtcygpOiBBcnJheTxDb21wb25lbnRRdWVzdGlvbkpTT04+IHtcbiAgICByZXR1cm4gdGhpcy5jdXN0b21RdWVzdGlvblZhbHVlcztcbiAgfVxuICBwdWJsaWMgZ2V0Q3VzdG9tUXVlc3Rpb25CeU5hbWUobmFtZTogc3RyaW5nKTogQ29tcG9uZW50UXVlc3Rpb25KU09OIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY3VzdG9tUXVlc3Rpb25WYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmN1c3RvbVF1ZXN0aW9uVmFsdWVzW2ldLm5hbWUgPT0gbmFtZSlcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tUXVlc3Rpb25WYWx1ZXNbaV07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHB1YmxpYyBjbGVhcigpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY3VzdG9tUXVlc3Rpb25WYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIFNlcmlhbGl6ZXIucmVtb3ZlQ2xhc3ModGhpcy5jdXN0b21RdWVzdGlvblZhbHVlc1tpXS5uYW1lKTtcbiAgICB9XG4gICAgdGhpcy5jdXN0b21RdWVzdGlvblZhbHVlcyA9IFtdO1xuICB9XG4gIHB1YmxpYyBjcmVhdGVRdWVzdGlvbihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcXVlc3Rpb25KU09OOiBDb21wb25lbnRRdWVzdGlvbkpTT05cbiAgKTogUXVlc3Rpb24ge1xuICAgIGlmICghIXF1ZXN0aW9uSlNPTi5pc0NvbXBvc2l0ZSlcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUNvbXBvc2l0ZU1vZGVsKG5hbWUsIHF1ZXN0aW9uSlNPTik7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlQ3VzdG9tTW9kZWwobmFtZSwgcXVlc3Rpb25KU09OKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlQ29tcG9zaXRlTW9kZWwoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHF1ZXN0aW9uSlNPTjogQ29tcG9uZW50UXVlc3Rpb25KU09OXG4gICk6IFF1ZXN0aW9uQ29tcG9zaXRlTW9kZWwge1xuICAgIGlmICghIXRoaXMub25DcmVhdGVDb21wb3NpdGUpXG4gICAgICByZXR1cm4gdGhpcy5vbkNyZWF0ZUNvbXBvc2l0ZShuYW1lLCBxdWVzdGlvbkpTT04pO1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25Db21wb3NpdGVNb2RlbChuYW1lLCBxdWVzdGlvbkpTT04pO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVDdXN0b21Nb2RlbChcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcXVlc3Rpb25KU09OOiBDb21wb25lbnRRdWVzdGlvbkpTT05cbiAgKTogUXVlc3Rpb25DdXN0b21Nb2RlbCB7XG4gICAgaWYgKCEhdGhpcy5vbkNyZWF0ZUN1c3RvbSkgcmV0dXJuIHRoaXMub25DcmVhdGVDdXN0b20obmFtZSwgcXVlc3Rpb25KU09OKTtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uQ3VzdG9tTW9kZWwobmFtZSwgcXVlc3Rpb25KU09OKTtcbiAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUXVlc3Rpb25DdXN0b21Nb2RlbEJhc2UgZXh0ZW5kcyBRdWVzdGlvblxuICBpbXBsZW1lbnRzIElTdXJ2ZXlJbXBsLCBJU3VydmV5RGF0YSwgSVBhbmVsIHtcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nLCBwdWJsaWMgY3VzdG9tUXVlc3Rpb246IENvbXBvbmVudFF1ZXN0aW9uSlNPTikge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLmNyZWF0ZVByb3BlcnRpZXModGhpcyk7XG4gICAgU3VydmV5RWxlbWVudC5DcmVhdGVEaXNhYmxlZERlc2lnbkVsZW1lbnRzID0gdHJ1ZTtcbiAgICB0aGlzLmNyZWF0ZVdyYXBwZXIoKTtcbiAgICBTdXJ2ZXlFbGVtZW50LkNyZWF0ZURpc2FibGVkRGVzaWduRWxlbWVudHMgPSBmYWxzZTtcbiAgICBpZiAoISF0aGlzLmN1c3RvbVF1ZXN0aW9uKSB7XG4gICAgICB0aGlzLmN1c3RvbVF1ZXN0aW9uLm9uQ3JlYXRlZCh0aGlzKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gISF0aGlzLmN1c3RvbVF1ZXN0aW9uID8gdGhpcy5jdXN0b21RdWVzdGlvbi5uYW1lIDogXCJjdXN0b21cIjtcbiAgfVxuICBwdWJsaWMgbG9jU3Ryc0NoYW5nZWQoKSB7XG4gICAgc3VwZXIubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICBpZiAoISF0aGlzLmdldEVsZW1lbnQoKSkge1xuICAgICAgdGhpcy5nZXRFbGVtZW50KCkubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVdyYXBwZXIoKSB7fVxuICBwcm90ZWN0ZWQgb25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChuYW1lOiBzdHJpbmcsIG9sZFZhbHVlOiBhbnksIG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBzdXBlci5vblByb3BlcnR5VmFsdWVDaGFuZ2VkKG5hbWUsIG9sZFZhbHVlLCBuZXdWYWx1ZSk7XG4gICAgaWYgKCEhdGhpcy5jdXN0b21RdWVzdGlvbiAmJiAhdGhpcy5pc0xvYWRpbmdGcm9tSnNvbikge1xuICAgICAgdGhpcy5jdXN0b21RdWVzdGlvbi5vblByb3BlcnR5Q2hhbmdlZCh0aGlzLCBuYW1lLCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBpdGVtVmFsdWVQcm9wZXJ0eUNoYW5nZWQoXG4gICAgaXRlbTogSXRlbVZhbHVlLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBvbGRWYWx1ZTogYW55LFxuICAgIG5ld1ZhbHVlOiBhbnlcbiAgKSB7XG4gICAgc3VwZXIuaXRlbVZhbHVlUHJvcGVydHlDaGFuZ2VkKGl0ZW0sIG5hbWUsIG9sZFZhbHVlLCBuZXdWYWx1ZSk7XG4gICAgaWYgKCEhdGhpcy5jdXN0b21RdWVzdGlvbiAmJiAhdGhpcy5pc0xvYWRpbmdGcm9tSnNvbikge1xuICAgICAgdGhpcy5jdXN0b21RdWVzdGlvbi5vbkl0ZW1WYWx1ZVByb3BlcnR5Q2hhbmdlZChcbiAgICAgICAgdGhpcyxcbiAgICAgICAgaXRlbSxcbiAgICAgICAgaXRlbS5vd25lclByb3BlcnR5TmFtZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgbmV3VmFsdWVcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBvbkZpcnN0UmVuZGVyaW5nKCkge1xuICAgIHZhciBlbCA9IHRoaXMuZ2V0RWxlbWVudCgpO1xuICAgIGlmICghIWVsKSB7XG4gICAgICBlbC5vbkZpcnN0UmVuZGVyaW5nKCk7XG4gICAgfVxuICAgIHN1cGVyLm9uRmlyc3RSZW5kZXJpbmcoKTtcbiAgfVxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0RWxlbWVudCgpOiBTdXJ2ZXlFbGVtZW50O1xuICBwcm90ZWN0ZWQgaW5pdEVsZW1lbnQoZWw6IFN1cnZleUVsZW1lbnQpIHtcbiAgICBpZiAoIWVsKSByZXR1cm47XG4gICAgZWwuc2V0U3VydmV5SW1wbCh0aGlzKTtcbiAgICBlbC5kaXNhYmxlRGVzaWduQWN0aW9ucyA9IHRydWU7XG4gIH1cbiAgcHVibGljIHNldFN1cnZleUltcGwodmFsdWU6IElTdXJ2ZXlJbXBsKSB7XG4gICAgc3VwZXIuc2V0U3VydmV5SW1wbCh2YWx1ZSk7XG4gICAgdGhpcy5pbml0RWxlbWVudCh0aGlzLmdldEVsZW1lbnQoKSk7XG4gIH1cbiAgcHVibGljIG9uU3VydmV5TG9hZCgpIHtcbiAgICBzdXBlci5vblN1cnZleUxvYWQoKTtcbiAgICBpZiAoISF0aGlzLmdldEVsZW1lbnQoKSkge1xuICAgICAgdGhpcy5nZXRFbGVtZW50KCkub25TdXJ2ZXlMb2FkKCk7XG4gICAgICB0aGlzLmN1c3RvbVF1ZXN0aW9uLm9uTG9hZGVkKHRoaXMpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgYWZ0ZXJSZW5kZXJRdWVzdGlvbkVsZW1lbnQoZWw6IEhUTUxFbGVtZW50KSB7XG4gICAgLy9EbyBub3RoaW5nXG4gIH1cbiAgcHVibGljIGFmdGVyUmVuZGVyKGVsOiBhbnkpIHtcbiAgICBzdXBlci5hZnRlclJlbmRlcihlbCk7XG4gICAgaWYgKCEhdGhpcy5jdXN0b21RdWVzdGlvbikge1xuICAgICAgdGhpcy5jdXN0b21RdWVzdGlvbi5vbkFmdGVyUmVuZGVyKHRoaXMsIGVsKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIHNldFF1ZXN0aW9uVmFsdWUobmV3VmFsdWU6IGFueSwgdXBkYXRlSXNBbnN3ZXJlZDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBzdXBlci5zZXRRdWVzdGlvblZhbHVlKG5ld1ZhbHVlLCB1cGRhdGVJc0Fuc3dlcmVkKTtcbiAgICB0aGlzLnVwZGF0ZUVsZW1lbnRDc3MoKTtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0TmV3VmFsdWUobmV3VmFsdWU6IGFueSkge1xuICAgIHN1cGVyLnNldE5ld1ZhbHVlKG5ld1ZhbHVlKTtcbiAgICB0aGlzLnVwZGF0ZUVsZW1lbnRDc3MoKTtcbiAgfVxuICAvL0lTdXJ2ZXlJbXBsXG4gIGdldFN1cnZleURhdGEoKTogSVN1cnZleURhdGEge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIC8vIGdldFN1cnZleSgpOiBJU3VydmV5IHtcbiAgLy8gICByZXR1cm4gdGhpcy5zdXJ2ZXk7XG4gIC8vIH1cbiAgZ2V0VGV4dFByb2Nlc3NvcigpOiBJVGV4dFByb2Nlc3NvciB7XG4gICAgcmV0dXJuIHRoaXMudGV4dFByb2Nlc3NvcjtcbiAgfVxuICAvL0lTdXJ2ZXlEYXRhXG4gIGdldFZhbHVlKG5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gIH1cbiAgc2V0VmFsdWUoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG5ld1ZhbHVlOiBhbnksXG4gICAgbG9jTm90aWZpY2F0aW9uOiBhbnksXG4gICAgYWxsb3dOb3RpZnlWYWx1ZUNoYW5nZWQ/OiBib29sZWFuXG4gICk6IGFueSB7XG4gICAgaWYgKCF0aGlzLmRhdGEpIHJldHVybjtcbiAgICB2YXIgbmV3TmFtZSA9IHRoaXMuY29udmVydERhdGFOYW1lKG5hbWUpO1xuICAgIHRoaXMuZGF0YS5zZXRWYWx1ZShcbiAgICAgIG5ld05hbWUsXG4gICAgICB0aGlzLmNvbnZlcnREYXRhVmFsdWUobmFtZSwgbmV3VmFsdWUpLFxuICAgICAgbG9jTm90aWZpY2F0aW9uLFxuICAgICAgYWxsb3dOb3RpZnlWYWx1ZUNoYW5nZWRcbiAgICApO1xuICAgIHRoaXMudXBkYXRlSXNBbnN3ZXJlZCgpO1xuICAgIHRoaXMudXBkYXRlRWxlbWVudENzcygpO1xuICAgIGlmICghIXRoaXMuY3VzdG9tUXVlc3Rpb24pIHtcbiAgICAgIHRoaXMuY3VzdG9tUXVlc3Rpb24ub25WYWx1ZUNoYW5nZWQodGhpcywgbmFtZSwgbmV3VmFsdWUpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY29udmVydERhdGFOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWVOYW1lKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNvbnZlcnREYXRhVmFsdWUobmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogYW55KTogYW55IHtcbiAgICByZXR1cm4gbmV3VmFsdWU7XG4gIH1cbiAgZ2V0VmFyaWFibGUobmFtZTogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gISF0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0VmFyaWFibGUobmFtZSkgOiBudWxsO1xuICB9XG4gIHNldFZhcmlhYmxlKG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kYXRhKSByZXR1cm47XG4gICAgdGhpcy5kYXRhLnNldFZhcmlhYmxlKG5hbWUsIG5ld1ZhbHVlKTtcbiAgfVxuICBnZXRDb21tZW50KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuICEhdGhpcy5kYXRhID8gdGhpcy5kYXRhLmdldENvbW1lbnQodGhpcy5nZXRWYWx1ZU5hbWUoKSkgOiBcIlwiO1xuICB9XG4gIHNldENvbW1lbnQobmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogc3RyaW5nLCBsb2NOb3RpZmljYXRpb246IGFueSk6IGFueSB7XG4gICAgaWYgKCF0aGlzLmRhdGEpIHJldHVybjtcbiAgICB0aGlzLmRhdGEuc2V0Q29tbWVudCh0aGlzLmdldFZhbHVlTmFtZSgpLCBuZXdWYWx1ZSwgbG9jTm90aWZpY2F0aW9uKTtcbiAgfVxuICBnZXRBbGxWYWx1ZXMoKTogYW55IHtcbiAgICByZXR1cm4gISF0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0QWxsVmFsdWVzKCkgOiB7fTtcbiAgfVxuICBnZXRGaWx0ZXJlZFZhbHVlcygpOiBhbnkge1xuICAgIHJldHVybiAhIXRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRGaWx0ZXJlZFZhbHVlcygpIDoge307XG4gIH1cbiAgZ2V0RmlsdGVyZWRQcm9wZXJ0aWVzKCk6IGFueSB7XG4gICAgcmV0dXJuICEhdGhpcy5kYXRhID8gdGhpcy5kYXRhLmdldEZpbHRlcmVkUHJvcGVydGllcygpIDoge307XG4gIH1cbiAgLy9JUGFuZWxcbiAgYWRkRWxlbWVudChlbGVtZW50OiBJRWxlbWVudCwgaW5kZXg6IG51bWJlcikge31cbiAgcmVtb3ZlRWxlbWVudChlbGVtZW50OiBJRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBnZXRRdWVzdGlvblRpdGxlTG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJsZWZ0XCI7XG4gIH1cbiAgZ2V0UXVlc3Rpb25TdGFydEluZGV4KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RhcnRJbmRleCgpO1xuICB9XG4gIGdldENoaWxkcmVuTGF5b3V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInJvd1wiO1xuICB9XG4gIGVsZW1lbnRXaWR0aENoYW5nZWQoZWw6IElFbGVtZW50KSB7fVxuICBnZXQgZWxlbWVudHMoKTogQXJyYXk8SUVsZW1lbnQ+IHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgaW5kZXhPZihlbDogSUVsZW1lbnQpOiBudW1iZXIge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICBlbnN1cmVSb3dzVmlzaWJpbGl0eSgpOiB2b2lkIHtcbiAgICAvLyBkbyBub3RoaW5nXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uQ3VzdG9tTW9kZWwgZXh0ZW5kcyBRdWVzdGlvbkN1c3RvbU1vZGVsQmFzZSB7XG4gIHByaXZhdGUgcXVlc3Rpb25XcmFwcGVyOiBRdWVzdGlvbjtcbiAgcHVibGljIGdldFRlbXBsYXRlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiY3VzdG9tXCI7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVdyYXBwZXIoKSB7XG4gICAgdGhpcy5xdWVzdGlvbldyYXBwZXIgPSB0aGlzLmNyZWF0ZVF1ZXN0aW9uKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEVsZW1lbnQoKTogU3VydmV5RWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudFF1ZXN0aW9uO1xuICB9XG4gIG9uQW55VmFsdWVDaGFuZ2VkKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyLm9uQW55VmFsdWVDaGFuZ2VkKG5hbWUpO1xuICAgIGlmICghIXRoaXMuY29udGVudFF1ZXN0aW9uKSB7XG4gICAgICB0aGlzLmNvbnRlbnRRdWVzdGlvbi5vbkFueVZhbHVlQ2hhbmdlZChuYW1lKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGhhc0Vycm9ycyhmaXJlQ2FsbGJhY2s6IGJvb2xlYW4gPSB0cnVlLCByZWM6IGFueSA9IG51bGwpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY29udGVudFF1ZXN0aW9uKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHJlcyA9IHRoaXMuY29udGVudFF1ZXN0aW9uLmhhc0Vycm9ycyhmaXJlQ2FsbGJhY2ssIHJlYyk7XG4gICAgdGhpcy5lcnJvcnMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29udGVudFF1ZXN0aW9uLmVycm9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5lcnJvcnMucHVzaCh0aGlzLmNvbnRlbnRRdWVzdGlvbi5lcnJvcnNbaV0pO1xuICAgIH1cbiAgICBpZiAoIXJlcykge1xuICAgICAgcmVzID0gc3VwZXIuaGFzRXJyb3JzKGZpcmVDYWxsYmFjaywgcmVjKTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVFbGVtZW50Q3NzKCk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgZm9jdXMob25FcnJvcjogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgaWYgKCEhdGhpcy5jb250ZW50UXVlc3Rpb24pIHtcbiAgICAgIHRoaXMuY29udGVudFF1ZXN0aW9uLmZvY3VzKG9uRXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdXBlci5mb2N1cyhvbkVycm9yKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCBjb250ZW50UXVlc3Rpb24oKTogUXVlc3Rpb24ge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uV3JhcHBlcjtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlUXVlc3Rpb24oKTogUXVlc3Rpb24ge1xuICAgIHZhciBqc29uID0gdGhpcy5jdXN0b21RdWVzdGlvbi5qc29uO1xuICAgIHZhciByZXMgPSBudWxsO1xuICAgIGlmICghIWpzb24ucXVlc3Rpb25KU09OKSB7XG4gICAgICB2YXIgcVR5cGUgPSBqc29uLnF1ZXN0aW9uSlNPTi50eXBlO1xuICAgICAgaWYgKCFxVHlwZSB8fCAhU2VyaWFsaXplci5maW5kQ2xhc3MocVR5cGUpKVxuICAgICAgICB0aHJvdyBcInR5cGUgYXR0cmlidXRlIGluIHF1ZXN0aW9uSlNPTiBpcyBlbXB0eSBvciBpbmNvcnJlY3RcIjtcbiAgICAgIHJlcyA9IDxRdWVzdGlvbj5TZXJpYWxpemVyLmNyZWF0ZUNsYXNzKHFUeXBlKTtcbiAgICAgIHRoaXMuaW5pdEVsZW1lbnQocmVzKTtcbiAgICAgIHJlcy5mcm9tSlNPTihqc29uLnF1ZXN0aW9uSlNPTik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghIWpzb24uY3JlYXRlUXVlc3Rpb24pIHtcbiAgICAgICAgcmVzID0ganNvbi5jcmVhdGVRdWVzdGlvbigpO1xuICAgICAgICB0aGlzLmluaXRFbGVtZW50KHJlcyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghIXJlcyAmJiAhcmVzLm5hbWUpIHtcbiAgICAgIHJlcy5uYW1lID0gXCJxdWVzdGlvblwiO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBvblN1cnZleUxvYWQoKSB7XG4gICAgc3VwZXIub25TdXJ2ZXlMb2FkKCk7XG4gICAgaWYgKCF0aGlzLmNvbnRlbnRRdWVzdGlvbikgcmV0dXJuO1xuICAgIGlmICh0aGlzLmlzRW1wdHkoKSAmJiAhdGhpcy5jb250ZW50UXVlc3Rpb24uaXNFbXB0eSgpKSB7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5jb250ZW50UXVlc3Rpb24udmFsdWU7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBydW5Db25kaXRpb24odmFsdWVzOiBIYXNoVGFibGU8YW55PiwgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4pIHtcbiAgICBzdXBlci5ydW5Db25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICBpZiAoISF0aGlzLmNvbnRlbnRRdWVzdGlvbikge1xuICAgICAgdGhpcy5jb250ZW50UXVlc3Rpb24ucnVuQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBjb252ZXJ0RGF0YU5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuY29udGVudFF1ZXN0aW9uKSByZXR1cm4gc3VwZXIuY29udmVydERhdGFOYW1lKG5hbWUpO1xuICAgIHZhciBuZXdOYW1lID0gbmFtZS5yZXBsYWNlKFxuICAgICAgdGhpcy5jb250ZW50UXVlc3Rpb24uZ2V0VmFsdWVOYW1lKCksXG4gICAgICB0aGlzLmdldFZhbHVlTmFtZSgpXG4gICAgKTtcbiAgICByZXR1cm4gbmV3TmFtZS5pbmRleE9mKHRoaXMuZ2V0VmFsdWVOYW1lKCkpID09IDBcbiAgICAgID8gbmV3TmFtZVxuICAgICAgOiBzdXBlci5jb252ZXJ0RGF0YU5hbWUobmFtZSk7XG4gIH1cbiAgcHJvdGVjdGVkIGNvbnZlcnREYXRhVmFsdWUobmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogYW55KTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5jb252ZXJ0RGF0YU5hbWUobmFtZSkgPT0gc3VwZXIuY29udmVydERhdGFOYW1lKG5hbWUpXG4gICAgICA/IHRoaXMuY29udGVudFF1ZXN0aW9uLnZhbHVlXG4gICAgICA6IG5ld1ZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBzZXRRdWVzdGlvblZhbHVlKG5ld1ZhbHVlOiBhbnksIHVwZGF0ZUlzQW5zd2VyZWQ6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgc3VwZXIuc2V0UXVlc3Rpb25WYWx1ZShuZXdWYWx1ZSwgdXBkYXRlSXNBbnN3ZXJlZCk7XG4gICAgaWYgKFxuICAgICAgISF0aGlzLmNvbnRlbnRRdWVzdGlvbiAmJlxuICAgICAgIUhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyh0aGlzLmNvbnRlbnRRdWVzdGlvbi52YWx1ZSwgbmV3VmFsdWUpXG4gICAgKSB7XG4gICAgICB0aGlzLmNvbnRlbnRRdWVzdGlvbi52YWx1ZSA9IHRoaXMuZ2V0VW5iaW5kVmFsdWUobmV3VmFsdWUpO1xuICAgIH1cbiAgfVxuICBvblN1cnZleVZhbHVlQ2hhbmdlZChuZXdWYWx1ZTogYW55KSB7XG4gICAgc3VwZXIub25TdXJ2ZXlWYWx1ZUNoYW5nZWQobmV3VmFsdWUpO1xuICAgIGlmICghIXRoaXMuY29udGVudFF1ZXN0aW9uKSB7XG4gICAgICB0aGlzLmNvbnRlbnRRdWVzdGlvbi5vblN1cnZleVZhbHVlQ2hhbmdlZChuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBnZXRWYWx1ZUNvcmUoKSB7XG4gICAgaWYgKCEhdGhpcy5jb250ZW50UXVlc3Rpb24pIHJldHVybiB0aGlzLmNvbnRlbnRRdWVzdGlvbi52YWx1ZTtcbiAgICByZXR1cm4gc3VwZXIuZ2V0VmFsdWVDb3JlKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGluaXRFbGVtZW50KGVsOiBTdXJ2ZXlFbGVtZW50KSB7XG4gICAgc3VwZXIuaW5pdEVsZW1lbnQoZWwpO1xuICAgIGlmICghIWVsKSB7XG4gICAgICAoPFF1ZXN0aW9uPmVsKS5wYXJlbnQgPSB0aGlzO1xuICAgICAgKDxRdWVzdGlvbj5lbCkuYWZ0ZXJSZW5kZXJRdWVzdGlvbkNhbGxiYWNrID0gKFxuICAgICAgICBxdWVzdGlvbjogUXVlc3Rpb24sXG4gICAgICAgIGVsZW1lbnQ6IGFueVxuICAgICAgKSA9PiB7XG4gICAgICAgIGlmICghIXRoaXMuY3VzdG9tUXVlc3Rpb24pIHtcbiAgICAgICAgICB0aGlzLmN1c3RvbVF1ZXN0aW9uLm9uQWZ0ZXJSZW5kZXJDb250ZW50RWxlbWVudChcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICBxdWVzdGlvbixcbiAgICAgICAgICAgIGVsZW1lbnRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgdXBkYXRlRWxlbWVudENzc0NvcmUoY3NzQ2xhc3NlczogYW55KSB7XG4gICAgaWYgKCEhdGhpcy5jb250ZW50UXVlc3Rpb24pIHtcbiAgICAgIGNzc0NsYXNzZXMgPSB0aGlzLmNvbnRlbnRRdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIH1cbiAgICBzdXBlci51cGRhdGVFbGVtZW50Q3NzQ29yZShjc3NDbGFzc2VzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RGlzcGxheVZhbHVlQ29yZShrZXlBc1RleHQ6IGJvb2xlYW4sIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiAhIXRoaXMuY29udGVudFF1ZXN0aW9uXG4gICAgICA/IHRoaXMuY29udGVudFF1ZXN0aW9uLmdldERpc3BsYXlWYWx1ZShrZXlBc1RleHQsIHZhbHVlKVxuICAgICAgOiBzdXBlci5nZXREaXNwbGF5VmFsdWVDb3JlKGtleUFzVGV4dCwgdmFsdWUpO1xuICB9XG59XG5cbmNsYXNzIFF1ZXN0aW9uQ29tcG9zaXRlVGV4dFByb2Nlc3NvciBleHRlbmRzIFF1ZXN0aW9uVGV4dFByb2Nlc3NvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBjb21wb3NpdGU6IFF1ZXN0aW9uQ29tcG9zaXRlTW9kZWwsXG4gICAgcHJvdGVjdGVkIHZhcmlhYmxlTmFtZTogc3RyaW5nXG4gICkge1xuICAgIHN1cGVyKHZhcmlhYmxlTmFtZSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBzdXJ2ZXkoKTogSVN1cnZleSB7XG4gICAgcmV0dXJuIHRoaXMuY29tcG9zaXRlLnN1cnZleTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHBhbmVsKCk6IFBhbmVsTW9kZWwge1xuICAgIHJldHVybiB0aGlzLmNvbXBvc2l0ZS5jb250ZW50UGFuZWw7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uQ29tcG9zaXRlTW9kZWwgZXh0ZW5kcyBRdWVzdGlvbkN1c3RvbU1vZGVsQmFzZSB7XG4gIHB1YmxpYyBzdGF0aWMgSXRlbVZhcmlhYmxlTmFtZSA9IFwiY29tcG9zaXRlXCI7XG4gIHByaXZhdGUgcGFuZWxXcmFwcGVyOiBQYW5lbE1vZGVsO1xuICBwcml2YXRlIHRleHRQcm9jZXNzaW5nOiBRdWVzdGlvbkNvbXBvc2l0ZVRleHRQcm9jZXNzb3I7XG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZywgcHVibGljIGN1c3RvbVF1ZXN0aW9uOiBDb21wb25lbnRRdWVzdGlvbkpTT04pIHtcbiAgICBzdXBlcihuYW1lLCBjdXN0b21RdWVzdGlvbik7XG4gICAgdGhpcy50ZXh0UHJvY2Vzc2luZyA9IG5ldyBRdWVzdGlvbkNvbXBvc2l0ZVRleHRQcm9jZXNzb3IoXG4gICAgICB0aGlzLFxuICAgICAgUXVlc3Rpb25Db21wb3NpdGVNb2RlbC5JdGVtVmFyaWFibGVOYW1lXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlV3JhcHBlcigpIHtcbiAgICB0aGlzLnBhbmVsV3JhcHBlciA9IHRoaXMuY3JlYXRlUGFuZWwoKTtcbiAgfVxuICBwdWJsaWMgZ2V0VGVtcGxhdGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJjb21wb3NpdGVcIjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q3NzVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImNvbXBvc2l0ZVwiO1xuICB9XG4gIHByb3RlY3RlZCBnZXRFbGVtZW50KCk6IFN1cnZleUVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLmNvbnRlbnRQYW5lbDtcbiAgfVxuICBwdWJsaWMgZ2V0IGNvbnRlbnRQYW5lbCgpOiBQYW5lbE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wYW5lbFdyYXBwZXI7XG4gIH1cbiAgcHVibGljIGhhc0Vycm9ycyhmaXJlQ2FsbGJhY2s6IGJvb2xlYW4gPSB0cnVlLCByZWM6IGFueSA9IG51bGwpOiBib29sZWFuIHtcbiAgICB2YXIgcmVzID0gc3VwZXIuaGFzRXJyb3JzKGZpcmVDYWxsYmFjaywgcmVjKTtcbiAgICBpZiAoIXRoaXMuY29udGVudFBhbmVsKSByZXR1cm4gcmVzO1xuICAgIHJldHVybiB0aGlzLmNvbnRlbnRQYW5lbC5oYXNFcnJvcnMoZmlyZUNhbGxiYWNrLCBmYWxzZSwgcmVjKSB8fCByZXM7XG4gIH1cbiAgcHVibGljIHVwZGF0ZUVsZW1lbnRDc3MocmVOZXc/OiBib29sZWFuKSB7XG4gICAgc3VwZXIudXBkYXRlRWxlbWVudENzcyhyZU5ldyk7XG4gICAgaWYgKHRoaXMuY29udGVudFBhbmVsKSB7XG4gICAgICB0aGlzLmNvbnRlbnRQYW5lbC51cGRhdGVFbGVtZW50Q3NzKHJlTmV3KTtcbiAgICB9XG4gIH1cbiAgZ2V0VGV4dFByb2Nlc3NvcigpOiBJVGV4dFByb2Nlc3NvciB7XG4gICAgcmV0dXJuIHRoaXMudGV4dFByb2Nlc3Npbmc7XG4gIH1cbiAgY2xlYXJWYWx1ZUlmSW52aXNpYmxlKCkge1xuICAgIHN1cGVyLmNsZWFyVmFsdWVJZkludmlzaWJsZSgpO1xuICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmNvbnRlbnRQYW5lbC5xdWVzdGlvbnM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHF1ZXN0aW9uc1tpXS5jbGVhclZhbHVlSWZJbnZpc2libGUoKTtcbiAgICB9XG4gIH1cbiAgb25BbnlWYWx1ZUNoYW5nZWQobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIub25BbnlWYWx1ZUNoYW5nZWQobmFtZSk7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuY29udGVudFBhbmVsLnF1ZXN0aW9ucztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgcXVlc3Rpb25zW2ldLm9uQW55VmFsdWVDaGFuZ2VkKG5hbWUpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlUGFuZWwoKTogUGFuZWxNb2RlbCB7XG4gICAgdmFyIHJlcyA9IDxQYW5lbE1vZGVsPlNlcmlhbGl6ZXIuY3JlYXRlQ2xhc3MoXCJwYW5lbFwiKTtcbiAgICByZXMuc2hvd1F1ZXN0aW9uTnVtYmVycyA9IFwib2ZmXCI7XG4gICAgcmVzLnJlbmRlcldpZHRoID0gXCIxMDAlXCI7XG4gICAgdmFyIGpzb24gPSB0aGlzLmN1c3RvbVF1ZXN0aW9uLmpzb247XG4gICAgaWYgKCEhanNvbi5lbGVtZW50c0pTT04pIHtcbiAgICAgIHJlcy5mcm9tSlNPTih7IGVsZW1lbnRzOiBqc29uLmVsZW1lbnRzSlNPTiB9KTtcbiAgICB9XG4gICAgaWYgKCEhanNvbi5jcmVhdGVFbGVtZW50cykge1xuICAgICAganNvbi5jcmVhdGVFbGVtZW50cyhyZXMsIHRoaXMpO1xuICAgIH1cbiAgICB0aGlzLmluaXRFbGVtZW50KHJlcyk7XG4gICAgcmVzLnJlYWRPbmx5ID0gdGhpcy5pc1JlYWRPbmx5O1xuICAgIHRoaXMuc2V0QWZ0ZXJSZW5kZXJDYWxsYmFja3MocmVzKTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByb3RlY3RlZCBvblJlYWRPbmx5Q2hhbmdlZCgpIHtcbiAgICBpZiAoISF0aGlzLmNvbnRlbnRQYW5lbCkge1xuICAgICAgdGhpcy5jb250ZW50UGFuZWwucmVhZE9ubHkgPSB0aGlzLmlzUmVhZE9ubHk7XG4gICAgfVxuICAgIHN1cGVyLm9uUmVhZE9ubHlDaGFuZ2VkKCk7XG4gIH1cbiAgcHVibGljIG9uU3VydmV5TG9hZCgpIHtcbiAgICBpZiAoISF0aGlzLmNvbnRlbnRQYW5lbCkge1xuICAgICAgdGhpcy5jb250ZW50UGFuZWwucmVhZE9ubHkgPSB0aGlzLmlzUmVhZE9ubHk7XG4gICAgICB0aGlzLnNldElzQ29udGVudEVsZW1lbnQodGhpcy5jb250ZW50UGFuZWwpO1xuICAgIH1cbiAgICBzdXBlci5vblN1cnZleUxvYWQoKTtcbiAgfVxuICBwcml2YXRlIHNldElzQ29udGVudEVsZW1lbnQocGFuZWw6IFBhbmVsTW9kZWwpIHtcbiAgICBwYW5lbC5pc0NvbnRlbnRFbGVtZW50ID0gdHJ1ZTtcbiAgICB2YXIgZWxlbWVudHMgPSBwYW5lbC5lbGVtZW50cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWwgPSBlbGVtZW50c1tpXTtcbiAgICAgIGlmIChlbC5pc1BhbmVsKSB7XG4gICAgICAgIHRoaXMuc2V0SXNDb250ZW50RWxlbWVudCg8UGFuZWxNb2RlbD5lbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAoPFF1ZXN0aW9uPmVsKS5pc0NvbnRlbnRFbGVtZW50ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHVibGljIHNldFZpc2libGVJbmRleCh2YWw6IG51bWJlcik6IG51bWJlciB7XG4gICAgdmFyIHJlcyA9IHN1cGVyLnNldFZpc2libGVJbmRleCh2YWwpO1xuICAgIGlmICh0aGlzLmlzVmlzaWJsZSAmJiAhIXRoaXMuY29udGVudFBhbmVsKSB7XG4gICAgICByZXMgKz0gdGhpcy5jb250ZW50UGFuZWwuc2V0VmlzaWJsZUluZGV4KHZhbCk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIHJ1bkNvbmRpdGlvbih2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIHN1cGVyLnJ1bkNvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIGlmICghIXRoaXMuY29udGVudFBhbmVsKSB7XG4gICAgICB2YXIgb2xkQ29tcG9zaXRlID0gdmFsdWVzW1F1ZXN0aW9uQ29tcG9zaXRlTW9kZWwuSXRlbVZhcmlhYmxlTmFtZV07XG4gICAgICB2YWx1ZXNbXG4gICAgICAgIFF1ZXN0aW9uQ29tcG9zaXRlTW9kZWwuSXRlbVZhcmlhYmxlTmFtZVxuICAgICAgXSA9IHRoaXMuY29udGVudFBhbmVsLmdldFZhbHVlKCk7XG4gICAgICB0aGlzLmNvbnRlbnRQYW5lbC5ydW5Db25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICAgIGRlbGV0ZSB2YWx1ZXNbUXVlc3Rpb25Db21wb3NpdGVNb2RlbC5JdGVtVmFyaWFibGVOYW1lXTtcbiAgICAgIGlmICghIW9sZENvbXBvc2l0ZSkge1xuICAgICAgICB2YWx1ZXNbUXVlc3Rpb25Db21wb3NpdGVNb2RlbC5JdGVtVmFyaWFibGVOYW1lXSA9IG9sZENvbXBvc2l0ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZ2V0VmFsdWUobmFtZTogc3RyaW5nKTogYW55IHtcbiAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcbiAgICByZXR1cm4gISF2YWwgPyB2YWxbbmFtZV0gOiBudWxsO1xuICB9XG4gIHByaXZhdGUgc2V0dGluZ05ld1ZhbHVlOiBib29sZWFuID0gZmFsc2U7XG4gIHNldFZhbHVlKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBuZXdWYWx1ZTogYW55LFxuICAgIGxvY05vdGlmaWNhdGlvbjogYW55LFxuICAgIGFsbG93Tm90aWZ5VmFsdWVDaGFuZ2VkPzogYm9vbGVhblxuICApOiBhbnkge1xuICAgIGlmICh0aGlzLnNldHRpbmdOZXdWYWx1ZSkgcmV0dXJuO1xuICAgIHN1cGVyLnNldFZhbHVlKG5hbWUsIG5ld1ZhbHVlLCBsb2NOb3RpZmljYXRpb24sIGFsbG93Tm90aWZ5VmFsdWVDaGFuZ2VkKTtcbiAgICBpZiAoIXRoaXMuY29udGVudFBhbmVsKSByZXR1cm47XG4gICAgdmFyIHEgPSB0aGlzLmNvbnRlbnRQYW5lbC5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lKTtcbiAgICBpZiAoISFxICYmICFIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMobmV3VmFsdWUsIHEudmFsdWUpKSB7XG4gICAgICB0aGlzLnNldHRpbmdOZXdWYWx1ZSA9IHRydWU7XG4gICAgICBxLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgICB0aGlzLnNldHRpbmdOZXdWYWx1ZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgYWRkQ29uZGl0aW9uT2JqZWN0c0J5Q29udGV4dChcbiAgICBvYmplY3RzOiBBcnJheTxJQ29uZGl0aW9uT2JqZWN0PixcbiAgICBjb250ZXh0OiBhbnlcbiAgKSB7XG4gICAgaWYgKCF0aGlzLmNvbnRlbnRQYW5lbCkgcmV0dXJuO1xuICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmNvbnRlbnRQYW5lbC5xdWVzdGlvbnM7XG4gICAgdmFyIHByZWZpeE5hbWUgPSB0aGlzLm5hbWU7XG4gICAgdmFyIHByZWZpeFRleHQgPSB0aGlzLnRpdGxlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBvYmplY3RzLnB1c2goe1xuICAgICAgICBuYW1lOiBwcmVmaXhOYW1lICsgXCIuXCIgKyBxdWVzdGlvbnNbaV0ubmFtZSxcbiAgICAgICAgdGV4dDogcHJlZml4VGV4dCArIFwiLlwiICsgcXVlc3Rpb25zW2ldLnRpdGxlLFxuICAgICAgICBxdWVzdGlvbjogcXVlc3Rpb25zW2ldLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBjb252ZXJ0RGF0YVZhbHVlKG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IGFueSk6IGFueSB7XG4gICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XG4gICAgaWYgKCF2YWwpIHZhbCA9IHt9O1xuICAgIGlmICh0aGlzLmlzVmFsdWVFbXB0eShuZXdWYWx1ZSkgJiYgIXRoaXMuaXNFZGl0aW5nU3VydmV5RWxlbWVudCkge1xuICAgICAgZGVsZXRlIHZhbFtuYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsW25hbWVdID0gbmV3VmFsdWU7XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG4gIH1cbiAgcHJvdGVjdGVkIHNldFF1ZXN0aW9uVmFsdWUobmV3VmFsdWU6IGFueSwgdXBkYXRlSXNBbnN3ZXJlZDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBzdXBlci5zZXRRdWVzdGlvblZhbHVlKG5ld1ZhbHVlLCB1cGRhdGVJc0Fuc3dlcmVkKTtcbiAgICB0aGlzLnNldHRpbmdOZXdWYWx1ZSA9IHRydWU7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuY29udGVudFBhbmVsLnF1ZXN0aW9ucztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IHF1ZXN0aW9uc1tpXS5nZXRWYWx1ZU5hbWUoKTtcbiAgICAgIHF1ZXN0aW9uc1tpXS52YWx1ZSA9ICEhbmV3VmFsdWUgPyBuZXdWYWx1ZVtrZXldIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLnNldHRpbmdOZXdWYWx1ZSA9IGZhbHNlO1xuICB9XG4gIHByb3RlY3RlZCBnZXREaXNwbGF5VmFsdWVDb3JlKGtleUFzVGV4dDogYm9vbGVhbiwgdmFsdWU6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuICEhdGhpcy5jb250ZW50UGFuZWxcbiAgICAgID8gdGhpcy5jb250ZW50UGFuZWwuZ2V0RGlzcGxheVZhbHVlKGtleUFzVGV4dClcbiAgICAgIDogc3VwZXIuZ2V0RGlzcGxheVZhbHVlQ29yZShrZXlBc1RleHQsIHZhbHVlKTtcbiAgfVxuICBwcml2YXRlIHNldEFmdGVyUmVuZGVyQ2FsbGJhY2tzKHBhbmVsOiBQYW5lbE1vZGVsKSB7XG4gICAgaWYgKCFwYW5lbCB8fCAhdGhpcy5jdXN0b21RdWVzdGlvbikgcmV0dXJuO1xuICAgIHZhciBxdWVzdGlvbnMgPSBwYW5lbC5xdWVzdGlvbnM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHF1ZXN0aW9uc1tpXS5hZnRlclJlbmRlclF1ZXN0aW9uQ2FsbGJhY2sgPSAoXG4gICAgICAgIHF1ZXN0aW9uOiBRdWVzdGlvbixcbiAgICAgICAgZWxlbWVudDogYW55XG4gICAgICApID0+IHtcbiAgICAgICAgdGhpcy5jdXN0b21RdWVzdGlvbi5vbkFmdGVyUmVuZGVyQ29udGVudEVsZW1lbnQoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBxdWVzdGlvbixcbiAgICAgICAgICBlbGVtZW50XG4gICAgICAgICk7XG4gICAgICB9O1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25TZWxlY3RCYXNlIH0gZnJvbSBcIi4vcXVlc3Rpb25fYmFzZXNlbGVjdFwiO1xuaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcIi4vaXRlbXZhbHVlXCI7XG5cbi8qKlxuICogQSBNb2RlbCBmb3IgYSBkcm9wZG93biBxdWVzdGlvblxuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25Ecm9wZG93bk1vZGVsIGV4dGVuZHMgUXVlc3Rpb25TZWxlY3RCYXNlIHtcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcIm9wdGlvbnNDYXB0aW9uXCIsIHRoaXMpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnRpZXNWYWx1ZUNoYW5nZWQoXG4gICAgICBbXCJjaG9pY2VzTWluXCIsIFwiY2hvaWNlc01heFwiLCBcImNob2ljZXNTdGVwXCJdLFxuICAgICAgZnVuY3Rpb24oKSB7XG4gICAgICAgIHNlbGYub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBUaGlzIGZsYWcgY29udHJvbHMgd2hldGhlciB0byBzaG93IG9wdGlvbnMgY2FwdGlvbiBpdGVtICgnQ2hvb3NlLi4uJykuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNob3dPcHRpb25zQ2FwdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd09wdGlvbnNDYXB0aW9uXCIsIHRydWUpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2hvd09wdGlvbnNDYXB0aW9uKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dPcHRpb25zQ2FwdGlvblwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBzZXQgdGhlIG9wdGlvbnMgY2FwdGlvbiBkaWZmZXJlbnQgZnJvbSB0aGUgZGVmYXVsdCB2YWx1ZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgdGFrZW4gZnJvbSBsb2NhbGl6YXRpb24gc3RyaW5ncy5cbiAgICovXG4gIHB1YmxpYyBnZXQgb3B0aW9uc0NhcHRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgICAgXCJvcHRpb25zQ2FwdGlvblwiLFxuICAgICAgc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm9wdGlvbnNDYXB0aW9uXCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc2V0IG9wdGlvbnNDYXB0aW9uKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJvcHRpb25zQ2FwdGlvblwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NPcHRpb25zQ2FwdGlvbigpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJvcHRpb25zQ2FwdGlvblwiKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImRyb3Bkb3duXCI7XG4gIH1cbiAgcHVibGljIGdldCBzZWxlY3RlZEl0ZW0oKTogSXRlbVZhbHVlIHtcbiAgICBpZiAodGhpcy5pc0VtcHR5KCkpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBJdGVtVmFsdWUuZ2V0SXRlbUJ5VmFsdWUodGhpcy52aXNpYmxlQ2hvaWNlcywgdGhpcy52YWx1ZSk7XG4gIH1cbiAgc3VwcG9ydEdvTmV4dFBhZ2VBdXRvbWF0aWMoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJpdmF0ZSBtaW5NYXhDaG9pY2VzID0gPEFycmF5PEl0ZW1WYWx1ZT4+W107XG4gIHByb3RlY3RlZCBnZXRDaG9pY2VzKCk6IEFycmF5PEl0ZW1WYWx1ZT4ge1xuICAgIHZhciBpdGVtcyA9IHN1cGVyLmdldENob2ljZXMoKTtcbiAgICBpZiAodGhpcy5jaG9pY2VzTWF4IDw9IHRoaXMuY2hvaWNlc01pbikgcmV0dXJuIGl0ZW1zO1xuICAgIHZhciByZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXMucHVzaChpdGVtc1tpXSk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMubWluTWF4Q2hvaWNlcy5sZW5ndGggPT09IDAgfHxcbiAgICAgIHRoaXMubWluTWF4Q2hvaWNlcy5sZW5ndGggIT09XG4gICAgICAgICh0aGlzLmNob2ljZXNNYXggLSB0aGlzLmNob2ljZXNNaW4pIC8gdGhpcy5jaG9pY2VzU3RlcCArIDFcbiAgICApIHtcbiAgICAgIHRoaXMubWluTWF4Q2hvaWNlcyA9IFtdO1xuICAgICAgZm9yIChcbiAgICAgICAgdmFyIGkgPSB0aGlzLmNob2ljZXNNaW47XG4gICAgICAgIGkgPD0gdGhpcy5jaG9pY2VzTWF4O1xuICAgICAgICBpICs9IHRoaXMuY2hvaWNlc1N0ZXBcbiAgICAgICkge1xuICAgICAgICB0aGlzLm1pbk1heENob2ljZXMucHVzaChuZXcgSXRlbVZhbHVlKGkpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzID0gcmVzLmNvbmNhdCh0aGlzLm1pbk1heENob2ljZXMpO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIGFuZCBjaG9pY2VzTWF4IHByb3BlcnR5IHRvIGF1dG9tYXRpY2FsbHkgYWRkIGNob2ljZXMuIEZvciBleGFtcGxlIGNob2ljZXNNaW4gPSAxIGFuZCBjaG9pY2VzTWF4ID0gMTAgd2lsbCBnZW5lcmF0ZSB0ZW4gYWRkaXRpb25hbCBjaG9pY2VzIGZyb20gMSB0byAxMC5cbiAgICogQHNlZSBjaG9pY2VzTWF4XG4gICAqIEBzZWUgY2hvaWNlc1N0ZXBcbiAgICovXG4gIHB1YmxpYyBnZXQgY2hvaWNlc01pbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjaG9pY2VzTWluXCIsIDApO1xuICB9XG4gIHB1YmxpYyBzZXQgY2hvaWNlc01pbih2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNob2ljZXNNaW5cIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgYW5kIGNob2ljZXNNYXggcHJvcGVydHkgdG8gYXV0b21hdGljYWxseSBhZGQgY2hvaWNlcy4gRm9yIGV4YW1wbGUgY2hvaWNlc01pbiA9IDEgYW5kIGNob2ljZXNNYXggPSAxMCB3aWxsIGdlbmVyYXRlIHRlbiBhZGRpdGlvbmFsIGNob2ljZXMgZnJvbSAxIHRvIDEwLlxuICAgKiBAc2VlIGNob2ljZXNNaW5cbiAgICogQHNlZSBjaG9pY2VzU3RlcFxuICAgKi9cbiAgcHVibGljIGdldCBjaG9pY2VzTWF4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNob2ljZXNNYXhcIiwgMCk7XG4gIH1cbiAgcHVibGljIHNldCBjaG9pY2VzTWF4KHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlc01heFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxLiBJdCB0ZWxscyB0aGUgdmFsdWUgb2YgdGhlIGl0ZXJhdG9yIGJldHdlZW4gY2hvaWNlc01pbiBhbmQgY2hvaWNlc01heCBwcm9wZXJ0aWVzLlxuICAgKiBJZiBjaG9pY2VzTWluID0gMTAsIGNob2ljZXNNYXggPSAzMCBhbmQgY2hvaWNlc1N0ZXAgPSAxMCB0aGVuIHlvdSB3aWxsIGhhdmUgb25seSB0aHJlZSBhZGRpdGlvbmFsIGNob2ljZXM6IFsxMCwgMjAsIDMwXS5cbiAgICogQHNlZSBjaG9pY2VzTWluXG4gICAqIEBzZWUgY2hvaWNlc01heFxuICAgKi9cbiAgcHVibGljIGdldCBjaG9pY2VzU3RlcCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjaG9pY2VzU3RlcFwiLCAxKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNob2ljZXNTdGVwKHZhbDogbnVtYmVyKSB7XG4gICAgaWYgKHZhbCA8IDEpIHZhbCA9IDE7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlc1N0ZXBcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogRHJvcGRvd24gYXV0byBjb21wbGV0ZVxuICAgKi9cbiAgcHVibGljIGdldCBhdXRvQ29tcGxldGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiYXV0b0NvbXBsZXRlXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgYXV0b0NvbXBsZXRlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYXV0b0NvbXBsZXRlXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldENvbnRyb2xDbGFzcygpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNzc0NsYXNzZXMgPSB0aGlzLmNzc0NsYXNzZXM7XG4gICAgbGV0IHJlc3VsdCA9XG4gICAgICBjc3NDbGFzc2VzLmNvbnRyb2wgK1xuICAgICAgKHRoaXMuZXJyb3JzLmxlbmd0aCA+IDAgPyBcIiBcIiArIGNzc0NsYXNzZXMub25FcnJvciA6IFwiXCIpO1xuICAgIGlmICh0aGlzLmlzUmVhZE9ubHkpIHtcbiAgICAgIHJlc3VsdCArPSBcIiBcIiArIGNzc0NsYXNzZXMuY29udHJvbERpc2FibGVkO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcImRyb3Bkb3duXCIsXG4gIFtcbiAgICB7IG5hbWU6IFwib3B0aW9uc0NhcHRpb25cIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY09wdGlvbnNDYXB0aW9uXCIgfSxcbiAgICB7IG5hbWU6IFwic2hvd09wdGlvbnNDYXB0aW9uOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIHsgbmFtZTogXCJjaG9pY2VzTWluOm51bWJlclwiLCBkZWZhdWx0OiAwIH0sXG4gICAgeyBuYW1lOiBcImNob2ljZXNNYXg6bnVtYmVyXCIsIGRlZmF1bHQ6IDAgfSxcbiAgICB7IG5hbWU6IFwiY2hvaWNlc1N0ZXA6bnVtYmVyXCIsIGRlZmF1bHQ6IDEsIG1pblZhbHVlOiAxIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJhdXRvQ29tcGxldGVcIixcbiAgICAgIGRhdGFMaXN0OiBbXG4gICAgICAgIFwibmFtZVwiLFxuICAgICAgICBcImhvbm9yaWZpYy1wcmVmaXhcIixcbiAgICAgICAgXCJnaXZlbi1uYW1lXCIsXG4gICAgICAgIFwiYWRkaXRpb25hbC1uYW1lXCIsXG4gICAgICAgIFwiZmFtaWx5LW5hbWVcIixcbiAgICAgICAgXCJob25vcmlmaWMtc3VmZml4XCIsXG4gICAgICAgIFwibmlja25hbWVcIixcbiAgICAgICAgXCJvcmdhbml6YXRpb24tdGl0bGVcIixcbiAgICAgICAgXCJ1c2VybmFtZVwiLFxuICAgICAgICBcIm5ldy1wYXNzd29yZFwiLFxuICAgICAgICBcImN1cnJlbnQtcGFzc3dvcmRcIixcbiAgICAgICAgXCJvcmdhbml6YXRpb25cIixcbiAgICAgICAgXCJzdHJlZXQtYWRkcmVzc1wiLFxuICAgICAgICBcImFkZHJlc3MtbGluZTFcIixcbiAgICAgICAgXCJhZGRyZXNzLWxpbmUyXCIsXG4gICAgICAgIFwiYWRkcmVzcy1saW5lM1wiLFxuICAgICAgICBcImFkZHJlc3MtbGV2ZWw0XCIsXG4gICAgICAgIFwiYWRkcmVzcy1sZXZlbDNcIixcbiAgICAgICAgXCJhZGRyZXNzLWxldmVsMlwiLFxuICAgICAgICBcImFkZHJlc3MtbGV2ZWwxXCIsXG4gICAgICAgIFwiY291bnRyeVwiLFxuICAgICAgICBcImNvdW50cnktbmFtZVwiLFxuICAgICAgICBcInBvc3RhbC1jb2RlXCIsXG4gICAgICAgIFwiY2MtbmFtZVwiLFxuICAgICAgICBcImNjLWdpdmVuLW5hbWVcIixcbiAgICAgICAgXCJjYy1hZGRpdGlvbmFsLW5hbWVcIixcbiAgICAgICAgXCJjYy1mYW1pbHktbmFtZVwiLFxuICAgICAgICBcImNjLW51bWJlclwiLFxuICAgICAgICBcImNjLWV4cFwiLFxuICAgICAgICBcImNjLWV4cC1tb250aFwiLFxuICAgICAgICBcImNjLWV4cC15ZWFyXCIsXG4gICAgICAgIFwiY2MtY3NjXCIsXG4gICAgICAgIFwiY2MtdHlwZVwiLFxuICAgICAgICBcInRyYW5zYWN0aW9uLWN1cnJlbmN5XCIsXG4gICAgICAgIFwidHJhbnNhY3Rpb24tYW1vdW50XCIsXG4gICAgICAgIFwibGFuZ3VhZ2VcIixcbiAgICAgICAgXCJiZGF5XCIsXG4gICAgICAgIFwiYmRheS1kYXlcIixcbiAgICAgICAgXCJiZGF5LW1vbnRoXCIsXG4gICAgICAgIFwiYmRheS15ZWFyXCIsXG4gICAgICAgIFwic2V4XCIsXG4gICAgICAgIFwidXJsXCIsXG4gICAgICAgIFwicGhvdG9cIixcbiAgICAgICAgXCJ0ZWxcIixcbiAgICAgICAgXCJ0ZWwtY291bnRyeS1jb2RlXCIsXG4gICAgICAgIFwidGVsLW5hdGlvbmFsXCIsXG4gICAgICAgIFwidGVsLWFyZWEtY29kZVwiLFxuICAgICAgICBcInRlbC1sb2NhbFwiLFxuICAgICAgICBcInRlbC1sb2NhbC1wcmVmaXhcIixcbiAgICAgICAgXCJ0ZWwtbG9jYWwtc3VmZml4XCIsXG4gICAgICAgIFwidGVsLWV4dGVuc2lvblwiLFxuICAgICAgICBcImVtYWlsXCIsXG4gICAgICAgIFwiaW1wcFwiLFxuICAgICAgXSxcbiAgICB9LFxuICBdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uRHJvcGRvd25Nb2RlbChcIlwiKTtcbiAgfSxcbiAgXCJzZWxlY3RiYXNlXCJcbik7XG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImRyb3Bkb3duXCIsIChuYW1lKSA9PiB7XG4gIHZhciBxID0gbmV3IFF1ZXN0aW9uRHJvcGRvd25Nb2RlbChuYW1lKTtcbiAgcS5jaG9pY2VzID0gUXVlc3Rpb25GYWN0b3J5LkRlZmF1bHRDaG9pY2VzO1xuICByZXR1cm4gcTtcbn0pO1xuIiwiaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcblxuLyoqXG4gKiBBIE1vZGVsIGZvciBhbiBxdWVzdGlvbiB0aGF0IHJlbmRlcnMgZW1wdHkgXCJkaXZcIiB0YWcuIEl0IHVzZWQgYXMgYSBiYXNlIGNsYXNzIGZvciBzb21lIGN1c3RvbSB3aWRnZXRzXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkVtcHR5TW9kZWwgZXh0ZW5kcyBRdWVzdGlvbiB7XG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKG5hbWUpO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiZW1wdHlcIjtcbiAgfVxufVxuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcImVtcHR5XCIsXG4gIFtdLFxuICBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbkVtcHR5TW9kZWwoXCJcIik7XG4gIH0sXG4gIFwicXVlc3Rpb25cIlxuKTtcbiIsImltcG9ydCB7IEhhc2hUYWJsZSwgSGVscGVycyB9IGZyb20gXCIuL2hlbHBlcnNcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcbmltcG9ydCB7IEV4cHJlc3Npb25SdW5uZXIgfSBmcm9tIFwiLi9jb25kaXRpb25zXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFcnJvciB9IGZyb20gXCIuL3N1cnZleS1lcnJvclwiO1xuXG4vKipcbiAqIEEgTW9kZWwgZm9yIGV4cHJlc3Npb24gcXVlc3Rpb24uIEl0IGlzIGEgcmVhZC1vbmx5IHF1ZXN0aW9uLiBJdCBjYWxjdWxhdGVzIHZhbHVlIGJhc2VkIG9uIGVweHJlc3Npb24gcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkV4cHJlc3Npb25Nb2RlbCBleHRlbmRzIFF1ZXN0aW9uIHtcbiAgcHJpdmF0ZSBleHByZXNzaW9uSXNSdW5uaW5nOiBib29sZWFuO1xuICBwcml2YXRlIGV4cHJlc3Npb25SdW5uZXI6IEV4cHJlc3Npb25SdW5uZXI7XG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJmb3JtYXRcIiwgdGhpcyk7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJleHByZXNzaW9uXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHNlbGYuZXhwcmVzc2lvblJ1bm5lcikge1xuICAgICAgICBzZWxmLmV4cHJlc3Npb25SdW5uZXIgPSBuZXcgRXhwcmVzc2lvblJ1bm5lcihzZWxmLmV4cHJlc3Npb24pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiZXhwcmVzc2lvblwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzSW5wdXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBkaXNwbGF5IHRoZSB2YWx1ZSBpbiB5b3VyIG93biBmb3JtYXQuIE1ha2Ugc3VyZSB5b3UgaGF2ZSBcInswfVwiIHN1YnN0cmluZyBpbiB5b3VyIHN0cmluZywgdG8gZGlzcGxheSB0aGUgYWN0dWFsIHZhbHVlLlxuICAgKi9cbiAgcHVibGljIGdldCBmb3JtYXQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJmb3JtYXRcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBmb3JtYXQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImZvcm1hdFwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NGb3JtYXQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwiZm9ybWF0XCIpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgRXhwcmVzc2lvbiB0aGF0IHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBxdWVzdGlvbiB2YWx1ZS4gWW91IG1heSB1c2Ugc3RhbmRhcmQgb3BlcmF0b3JzIGxpa2UgKywgLSwgKiBhbmQgLywgc3F1YXJlcyAoKS4gSGVyZSBpcyB0aGUgZXhhbXBsZSBvZiBhY2Nlc3NpbmcgdGhlIHF1ZXN0aW9uIHZhbHVlIHtxdWVzdGlvbm5hbWV9LlxuICAgKiA8YnIvPkV4YW1wbGU6IFwiKHtxdWFudGl0eX0gKiB7cHJpY2V9KSAqICgxMDAgLSB7ZGlzY291bnR9KSAvIDEwMFwiXG4gICAqL1xuICBwdWJsaWMgZ2V0IGV4cHJlc3Npb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZXhwcmVzc2lvblwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGV4cHJlc3Npb24odmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJleHByZXNzaW9uXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGxvY0NhbGN1bGF0aW9uKCkge1xuICAgIHRoaXMuZXhwcmVzc2lvbklzUnVubmluZyA9IHRydWU7XG4gIH1cbiAgcHVibGljIHVubG9jQ2FsY3VsYXRpb24oKSB7XG4gICAgdGhpcy5leHByZXNzaW9uSXNSdW5uaW5nID0gZmFsc2U7XG4gIH1cbiAgcHVibGljIHJ1bkNvbmRpdGlvbih2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIHN1cGVyLnJ1bkNvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIGlmIChcbiAgICAgICF0aGlzLmV4cHJlc3Npb24gfHxcbiAgICAgIHRoaXMuZXhwcmVzc2lvbklzUnVubmluZyB8fFxuICAgICAgKCF0aGlzLnJ1bklmUmVhZE9ubHkgJiYgdGhpcy5pc1JlYWRPbmx5KVxuICAgIClcbiAgICAgIHJldHVybjtcbiAgICB0aGlzLmxvY0NhbGN1bGF0aW9uKCk7XG4gICAgaWYgKCF0aGlzLmV4cHJlc3Npb25SdW5uZXIpIHtcbiAgICAgIHRoaXMuZXhwcmVzc2lvblJ1bm5lciA9IG5ldyBFeHByZXNzaW9uUnVubmVyKHRoaXMuZXhwcmVzc2lvbik7XG4gICAgfVxuICAgIHRoaXMuZXhwcmVzc2lvblJ1bm5lci5vblJ1bkNvbXBsZXRlID0gKG5ld1ZhbHVlKSA9PiB7XG4gICAgICBpZiAoIUhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyhuZXdWYWx1ZSwgdGhpcy52YWx1ZSkpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgfVxuICAgICAgdGhpcy51bmxvY0NhbGN1bGF0aW9uKCk7XG4gICAgfTtcbiAgICB0aGlzLmV4cHJlc3Npb25SdW5uZXIucnVuKHZhbHVlcywgcHJvcGVydGllcyk7XG4gIH1cbiAgcHVibGljIGhhc0Vycm9ycyhmaXJlQ2FsbGJhY2s6IGJvb2xlYW4gPSB0cnVlLCByZWM6IGFueSA9IG51bGwpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGdldEFsbEVycm9ycygpOiBBcnJheTxTdXJ2ZXlFcnJvcj4ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICAvKipcbiAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGZyYWN0aW9uIGRpZ2l0cyB0byB1c2UgaWYgZGlzcGxheVN0eWxlIGlzIG5vdCBcIm5vbmVcIi4gUG9zc2libGUgdmFsdWVzIGFyZSBmcm9tIDAgdG8gMjAuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIC0xIGFuZCBpdCBtZWFucyB0aGF0IHRoaXMgcHJvcGVydHkgaXMgbm90IHVzZWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1heGltdW1GcmFjdGlvbkRpZ2l0cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtYXhpbXVtRnJhY3Rpb25EaWdpdHNcIiwgLTEpO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4aW11bUZyYWN0aW9uRGlnaXRzKHZhbDogbnVtYmVyKSB7XG4gICAgaWYgKHZhbCA8IC0xIHx8IHZhbCA+IDIwKSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWF4aW11bUZyYWN0aW9uRGlnaXRzXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBtaW5pbXVtIG51bWJlciBvZiBmcmFjdGlvbiBkaWdpdHMgdG8gdXNlIGlmIGRpc3BsYXlTdHlsZSBpcyBub3QgXCJub25lXCIuIFBvc3NpYmxlIHZhbHVlcyBhcmUgZnJvbSAwIHRvIDIwLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAtMSBhbmQgaXQgbWVhbnMgdGhhdCB0aGlzIHByb3BlcnR5IGlzIG5vdCB1c2VkLlxuICAgKi9cbiAgcHVibGljIGdldCBtaW5pbXVtRnJhY3Rpb25EaWdpdHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWluaW11bUZyYWN0aW9uRGlnaXRzXCIsIC0xKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1pbmltdW1GcmFjdGlvbkRpZ2l0cyh2YWw6IG51bWJlcikge1xuICAgIGlmICh2YWwgPCAtMSB8fCB2YWwgPiAyMCkgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1pbmltdW1GcmFjdGlvbkRpZ2l0c1wiLCB2YWwpO1xuICB9XG4gIHByaXZhdGUgcnVuSWZSZWFkT25seVZhbHVlOiBib29sZWFuO1xuICBwdWJsaWMgZ2V0IHJ1bklmUmVhZE9ubHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucnVuSWZSZWFkT25seVZhbHVlID09PSB0cnVlO1xuICB9XG4gIHB1YmxpYyBzZXQgcnVuSWZSZWFkT25seSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnJ1bklmUmVhZE9ubHlWYWx1ZSA9IHZhbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RGlzcGxheVZhbHVlQ29yZShrZXlzQXNUZXh0OiBib29sZWFuLCB2YWx1ZTogYW55KTogYW55IHtcbiAgICB2YXIgdmFsID0gdGhpcy5pc1ZhbHVlRW1wdHkodmFsdWUpID8gdGhpcy5kZWZhdWx0VmFsdWUgOiB2YWx1ZTtcbiAgICB2YXIgcmVzID0gXCJcIjtcbiAgICBpZiAoIXRoaXMuaXNWYWx1ZUVtcHR5KHZhbCkpIHtcbiAgICAgIHZhciBzdHIgPSB0aGlzLmdldFZhbHVlQXNTdHIodmFsKTtcbiAgICAgIHJlcyA9ICF0aGlzLmZvcm1hdCA/IHN0ciA6ICg8YW55PnRoaXMuZm9ybWF0KVtcImZvcm1hdFwiXShzdHIpO1xuICAgIH1cbiAgICBpZiAoISF0aGlzLnN1cnZleSkge1xuICAgICAgcmVzID0gdGhpcy5zdXJ2ZXkuZ2V0RXhwcmVzc2lvbkRpc3BsYXlWYWx1ZSh0aGlzLCB2YWwsIHJlcyk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgLyoqXG4gICAqIFlvdSBtYXkgc2V0IHRoaXMgcHJvcGVydHkgdG8gXCJkZWNpbWFsXCIsIFwiY3VycmVuY3lcIiwgXCJwZXJjZW50XCIgb3IgXCJkYXRlXCIuIElmIHlvdSBzZXQgaXQgdG8gXCJjdXJyZW5jeVwiLCB5b3UgbWF5IHVzZSB0aGUgY3VycmVuY3kgcHJvcGVydHkgdG8gZGlzcGxheSB0aGUgdmFsdWUgaW4gY3VycmVuY3kgZGlmZmVyZW50IGZyb20gVVNELlxuICAgKiBAc2VlIGN1cnJlbmN5XG4gICAqL1xuICBwdWJsaWMgZ2V0IGRpc3BsYXlTdHlsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJkaXNwbGF5U3R5bGVcIik7XG4gIH1cbiAgcHVibGljIHNldCBkaXNwbGF5U3R5bGUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJkaXNwbGF5U3R5bGVcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVXNlIGl0IHRvIGRpc3BsYXkgdGhlIHZhbHVlIGluIHRoZSBjdXJyZW5jeSBkaWZmZXJlbiBmcm9tIFVTRC4gVGhlIGRpc3BsYXlTdHlwZSBzaG91bGQgYmUgc2V0IHRvIFwiY3VycmVuY3lcIi5cbiAgICogQHNlZSBkaXNwbGF5U3R5bGVcbiAgICovXG4gIHB1YmxpYyBnZXQgY3VycmVuY3koKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY3VycmVuY3lcIik7XG4gIH1cbiAgcHVibGljIHNldCBjdXJyZW5jeSh2YWw6IHN0cmluZykge1xuICAgIGlmIChnZXRDdXJyZWN5Q29kZXMoKS5pbmRleE9mKHZhbCkgPCAwKSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY3VycmVuY3lcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogXHREZXRlcm1pbmVzIHdoZXRoZXIgdG8gZGlzcGxheSBncm91cGluZyBzZXBhcmF0b3JzLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0cnVlLlxuICAgKi9cbiAgcHVibGljIGdldCB1c2VHcm91cGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidXNlR3JvdXBpbmdcIiwgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIHNldCB1c2VHcm91cGluZyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ1c2VHcm91cGluZ1wiLCB2YWwpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRWYWx1ZUFzU3RyKHZhbDogYW55KTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5kaXNwbGF5U3R5bGUgPT0gXCJkYXRlXCIpIHtcbiAgICAgIHZhciBkID0gbmV3IERhdGUodmFsKTtcbiAgICAgIGlmICghIWQgJiYgISFkLnRvTG9jYWxlRGF0ZVN0cmluZykgcmV0dXJuIGQudG9Mb2NhbGVEYXRlU3RyaW5nKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRpc3BsYXlTdHlsZSAhPSBcIm5vbmVcIiAmJiBIZWxwZXJzLmlzTnVtYmVyKHZhbCkpIHtcbiAgICAgIHZhciBsb2NhbGUgPSB0aGlzLmdldExvY2FsZSgpO1xuICAgICAgaWYgKCFsb2NhbGUpIGxvY2FsZSA9IFwiZW5cIjtcbiAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICBzdHlsZTogdGhpcy5kaXNwbGF5U3R5bGUsXG4gICAgICAgIGN1cnJlbmN5OiB0aGlzLmN1cnJlbmN5LFxuICAgICAgICB1c2VHcm91cGluZzogdGhpcy51c2VHcm91cGluZyxcbiAgICAgIH07XG4gICAgICBpZiAodGhpcy5tYXhpbXVtRnJhY3Rpb25EaWdpdHMgPiAtMSkge1xuICAgICAgICAoPGFueT5vcHRpb25zKVtcIm1heGltdW1GcmFjdGlvbkRpZ2l0c1wiXSA9IHRoaXMubWF4aW11bUZyYWN0aW9uRGlnaXRzO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubWluaW11bUZyYWN0aW9uRGlnaXRzID4gLTEpIHtcbiAgICAgICAgKDxhbnk+b3B0aW9ucylbXCJtaW5pbXVtRnJhY3Rpb25EaWdpdHNcIl0gPSB0aGlzLm1pbmltdW1GcmFjdGlvbkRpZ2l0cztcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWwudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCBvcHRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbC50b1N0cmluZygpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJyZWN5Q29kZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gIHJldHVybiBbXG4gICAgXCJBRURcIixcbiAgICBcIkFGTlwiLFxuICAgIFwiQUxMXCIsXG4gICAgXCJBTURcIixcbiAgICBcIkFOR1wiLFxuICAgIFwiQU9BXCIsXG4gICAgXCJBUlNcIixcbiAgICBcIkFVRFwiLFxuICAgIFwiQVdHXCIsXG4gICAgXCJBWk5cIixcbiAgICBcIkJBTVwiLFxuICAgIFwiQkJEXCIsXG4gICAgXCJCRFRcIixcbiAgICBcIkJHTlwiLFxuICAgIFwiQkhEXCIsXG4gICAgXCJCSUZcIixcbiAgICBcIkJNRFwiLFxuICAgIFwiQk5EXCIsXG4gICAgXCJCT0JcIixcbiAgICBcIkJPVlwiLFxuICAgIFwiQlJMXCIsXG4gICAgXCJCU0RcIixcbiAgICBcIkJUTlwiLFxuICAgIFwiQldQXCIsXG4gICAgXCJCWU5cIixcbiAgICBcIkJaRFwiLFxuICAgIFwiQ0FEXCIsXG4gICAgXCJDREZcIixcbiAgICBcIkNIRVwiLFxuICAgIFwiQ0hGXCIsXG4gICAgXCJDSFdcIixcbiAgICBcIkNMRlwiLFxuICAgIFwiQ0xQXCIsXG4gICAgXCJDTllcIixcbiAgICBcIkNPUFwiLFxuICAgIFwiQ09VXCIsXG4gICAgXCJDUkNcIixcbiAgICBcIkNVQ1wiLFxuICAgIFwiQ1VQXCIsXG4gICAgXCJDVkVcIixcbiAgICBcIkNaS1wiLFxuICAgIFwiREpGXCIsXG4gICAgXCJES0tcIixcbiAgICBcIkRPUFwiLFxuICAgIFwiRFpEXCIsXG4gICAgXCJFR1BcIixcbiAgICBcIkVSTlwiLFxuICAgIFwiRVRCXCIsXG4gICAgXCJFVVJcIixcbiAgICBcIkZKRFwiLFxuICAgIFwiRktQXCIsXG4gICAgXCJHQlBcIixcbiAgICBcIkdFTFwiLFxuICAgIFwiR0hTXCIsXG4gICAgXCJHSVBcIixcbiAgICBcIkdNRFwiLFxuICAgIFwiR05GXCIsXG4gICAgXCJHVFFcIixcbiAgICBcIkdZRFwiLFxuICAgIFwiSEtEXCIsXG4gICAgXCJITkxcIixcbiAgICBcIkhSS1wiLFxuICAgIFwiSFRHXCIsXG4gICAgXCJIVUZcIixcbiAgICBcIklEUlwiLFxuICAgIFwiSUxTXCIsXG4gICAgXCJJTlJcIixcbiAgICBcIklRRFwiLFxuICAgIFwiSVJSXCIsXG4gICAgXCJJU0tcIixcbiAgICBcIkpNRFwiLFxuICAgIFwiSk9EXCIsXG4gICAgXCJKUFlcIixcbiAgICBcIktFU1wiLFxuICAgIFwiS0dTXCIsXG4gICAgXCJLSFJcIixcbiAgICBcIktNRlwiLFxuICAgIFwiS1BXXCIsXG4gICAgXCJLUldcIixcbiAgICBcIktXRFwiLFxuICAgIFwiS1lEXCIsXG4gICAgXCJLWlRcIixcbiAgICBcIkxBS1wiLFxuICAgIFwiTEJQXCIsXG4gICAgXCJMS1JcIixcbiAgICBcIkxSRFwiLFxuICAgIFwiTFNMXCIsXG4gICAgXCJMWURcIixcbiAgICBcIk1BRFwiLFxuICAgIFwiTURMXCIsXG4gICAgXCJNR0FcIixcbiAgICBcIk1LRFwiLFxuICAgIFwiTU1LXCIsXG4gICAgXCJNTlRcIixcbiAgICBcIk1PUFwiLFxuICAgIFwiTVJPXCIsXG4gICAgXCJNVVJcIixcbiAgICBcIk1WUlwiLFxuICAgIFwiTVdLXCIsXG4gICAgXCJNWE5cIixcbiAgICBcIk1YVlwiLFxuICAgIFwiTVlSXCIsXG4gICAgXCJNWk5cIixcbiAgICBcIk5BRFwiLFxuICAgIFwiTkdOXCIsXG4gICAgXCJOSU9cIixcbiAgICBcIk5PS1wiLFxuICAgIFwiTlBSXCIsXG4gICAgXCJOWkRcIixcbiAgICBcIk9NUlwiLFxuICAgIFwiUEFCXCIsXG4gICAgXCJQRU5cIixcbiAgICBcIlBHS1wiLFxuICAgIFwiUEhQXCIsXG4gICAgXCJQS1JcIixcbiAgICBcIlBMTlwiLFxuICAgIFwiUFlHXCIsXG4gICAgXCJRQVJcIixcbiAgICBcIlJPTlwiLFxuICAgIFwiUlNEXCIsXG4gICAgXCJSVUJcIixcbiAgICBcIlJXRlwiLFxuICAgIFwiU0FSXCIsXG4gICAgXCJTQkRcIixcbiAgICBcIlNDUlwiLFxuICAgIFwiU0RHXCIsXG4gICAgXCJTRUtcIixcbiAgICBcIlNHRFwiLFxuICAgIFwiU0hQXCIsXG4gICAgXCJTTExcIixcbiAgICBcIlNPU1wiLFxuICAgIFwiU1JEXCIsXG4gICAgXCJTU1BcIixcbiAgICBcIlNURFwiLFxuICAgIFwiU1ZDXCIsXG4gICAgXCJTWVBcIixcbiAgICBcIlNaTFwiLFxuICAgIFwiVEhCXCIsXG4gICAgXCJUSlNcIixcbiAgICBcIlRNVFwiLFxuICAgIFwiVE5EXCIsXG4gICAgXCJUT1BcIixcbiAgICBcIlRSWVwiLFxuICAgIFwiVFREXCIsXG4gICAgXCJUV0RcIixcbiAgICBcIlRaU1wiLFxuICAgIFwiVUFIXCIsXG4gICAgXCJVR1hcIixcbiAgICBcIlVTRFwiLFxuICAgIFwiVVNOXCIsXG4gICAgXCJVWUlcIixcbiAgICBcIlVZVVwiLFxuICAgIFwiVVpTXCIsXG4gICAgXCJWRUZcIixcbiAgICBcIlZORFwiLFxuICAgIFwiVlVWXCIsXG4gICAgXCJXU1RcIixcbiAgICBcIlhBRlwiLFxuICAgIFwiWEFHXCIsXG4gICAgXCJYQVVcIixcbiAgICBcIlhCQVwiLFxuICAgIFwiWEJCXCIsXG4gICAgXCJYQkNcIixcbiAgICBcIlhCRFwiLFxuICAgIFwiWENEXCIsXG4gICAgXCJYRFJcIixcbiAgICBcIlhPRlwiLFxuICAgIFwiWFBEXCIsXG4gICAgXCJYUEZcIixcbiAgICBcIlhQVFwiLFxuICAgIFwiWFNVXCIsXG4gICAgXCJYVFNcIixcbiAgICBcIlhVQVwiLFxuICAgIFwiWFhYXCIsXG4gICAgXCJZRVJcIixcbiAgICBcIlpBUlwiLFxuICAgIFwiWk1XXCIsXG4gICAgXCJaV0xcIixcbiAgXTtcbn1cblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJleHByZXNzaW9uXCIsXG4gIFtcbiAgICBcImV4cHJlc3Npb246ZXhwcmVzc2lvblwiLFxuICAgIHsgbmFtZTogXCJmb3JtYXRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0Zvcm1hdFwiIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJkaXNwbGF5U3R5bGVcIixcbiAgICAgIGRlZmF1bHQ6IFwibm9uZVwiLFxuICAgICAgY2hvaWNlczogW1wibm9uZVwiLCBcImRlY2ltYWxcIiwgXCJjdXJyZW5jeVwiLCBcInBlcmNlbnRcIiwgXCJkYXRlXCJdLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJjdXJyZW5jeVwiLFxuICAgICAgY2hvaWNlczogKCkgPT4ge1xuICAgICAgICByZXR1cm4gZ2V0Q3VycmVjeUNvZGVzKCk7XG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogXCJVU0RcIixcbiAgICB9LFxuICAgIHsgbmFtZTogXCJtYXhpbXVtRnJhY3Rpb25EaWdpdHM6bnVtYmVyXCIsIGRlZmF1bHQ6IC0xIH0sXG4gICAgeyBuYW1lOiBcIm1pbmltdW1GcmFjdGlvbkRpZ2l0czpudW1iZXJcIiwgZGVmYXVsdDogLTEgfSxcbiAgICB7IG5hbWU6IFwidXNlR3JvdXBpbmc6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgeyBuYW1lOiBcImVuYWJsZUlmXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcImlzUmVxdWlyZWRcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwicmVhZE9ubHlcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwicmVxdWlyZWRFcnJvclRleHRcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwidmFsaWRhdG9yc1wiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJkZWZhdWx0VmFsdWVcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwiY29ycmVjdEFuc3dlclwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJyZXF1aXJlZElmXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gIF0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25FeHByZXNzaW9uTW9kZWwoXCJcIik7XG4gIH0sXG4gIFwicXVlc3Rpb25cIlxuKTtcblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiZXhwcmVzc2lvblwiLCAobmFtZSkgPT4ge1xuICByZXR1cm4gbmV3IFF1ZXN0aW9uRXhwcmVzc2lvbk1vZGVsKG5hbWUpO1xufSk7XG4iLCJpbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBTZXJpYWxpemVyIH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XG5pbXBvcnQgeyBFdmVudEJhc2UgfSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQgeyBVcGxvYWRpbmdGaWxlRXJyb3IsIEV4Y2VlZFNpemVFcnJvciB9IGZyb20gXCIuL2Vycm9yXCI7XG5pbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFcnJvciB9IGZyb20gXCIuL3N1cnZleS1lcnJvclwiO1xuXG4vKipcbiAqIEEgTW9kZWwgZm9yIGEgZmlsZSBxdWVzdGlvblxuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25GaWxlTW9kZWwgZXh0ZW5kcyBRdWVzdGlvbiB7XG4gIHByaXZhdGUgaXNVcGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBhZnRlciBxdWVzdGlvbiBzdGF0ZSBoYXMgYmVlbiBjaGFuZ2VkLlxuICAgKiA8YnIvPiBzZW5kZXIgdGhlIHF1ZXN0aW9uIG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudFxuICAgKiA8YnIvPiBvcHRpb25zLnN0YXRlIG5ldyBxdWVzdGlvbiBzdGF0ZSB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyBvblN0YXRlQ2hhbmdlZDogRXZlbnRCYXNlPFF1ZXN0aW9uRmlsZU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgUXVlc3Rpb25GaWxlTW9kZWxcbiAgPigpO1xuICBwdWJsaWMgcHJldmlld1ZhbHVlOiBhbnlbXSA9IFtdO1xuICBwdWJsaWMgY3VycmVudFN0YXRlID0gXCJlbXB0eVwiO1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImZpbGVcIjtcbiAgfVxuICBwdWJsaWMgY2xlYXJPbkRlbGV0aW5nQ29udGFpbmVyKCkge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkpIHJldHVybjtcbiAgICB0aGlzLnN1cnZleS5jbGVhckZpbGVzKHRoaXMsIHRoaXMubmFtZSwgdGhpcy52YWx1ZSwgbnVsbCwgKCkgPT4ge30pO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgaXQgdG8gdHJ1ZSwgdG8gc2hvdyB0aGUgcHJldmlldyBmb3IgdGhlIGltYWdlIGZpbGVzLlxuICAgKi9cbiAgcHVibGljIGdldCBzaG93UHJldmlldygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1ByZXZpZXdcIik7XG4gIH1cbiAgcHVibGljIHNldCBzaG93UHJldmlldyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93UHJldmlld1wiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgaXQgdG8gdHJ1ZSwgdG8gYWxsb3cgc2VsZWN0IG11bHRpcGxlIGZpbGVzLlxuICAgKi9cbiAgcHVibGljIGdldCBhbGxvd011bHRpcGxlKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJhbGxvd011bHRpcGxlXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGFsbG93TXVsdGlwbGUodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dNdWx0aXBsZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgaW1hZ2UgaGVpZ2h0LlxuICAgKi9cbiAgcHVibGljIGdldCBpbWFnZUhlaWdodCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpbWFnZUhlaWdodFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGltYWdlSGVpZ2h0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaW1hZ2VIZWlnaHRcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGltYWdlIHdpZHRoLlxuICAgKi9cbiAgcHVibGljIGdldCBpbWFnZVdpZHRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImltYWdlV2lkdGhcIik7XG4gIH1cbiAgcHVibGljIHNldCBpbWFnZVdpZHRoKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaW1hZ2VXaWR0aFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBBY2NlcHRlZCBmaWxlIHR5cGVzLiBQYXNzZWQgdG8gdGhlICdhY2NlcHQnIGF0dHJpYnV0ZSBvZiB0aGUgZmlsZSBpbnB1dCB0YWcuIFNlZSBodHRwczovL3d3dy53M3NjaG9vbHMuY29tL3RhZ3MvYXR0X2lucHV0X2FjY2VwdC5hc3AgZm9yIG1vcmUgZGV0YWlscy5cbiAgICovXG4gIHB1YmxpYyBnZXQgYWNjZXB0ZWRUeXBlcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJhY2NlcHRlZFR5cGVzXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgYWNjZXB0ZWRUeXBlcyh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImFjY2VwdGVkVHlwZXNcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogU2V0IGl0IHRvIGZhbHNlIGlmIHlvdSBkbyBub3Qgd2FudCB0byBzZXJpYWxpemUgZmlsZSBjb250ZW50IGFzIHRleHQgaW4gdGhlIHN1cnZleS5kYXRhLlxuICAgKiBJbiB0aGlzIGNhc2UsIHlvdSBoYXZlIHRvIHdyaXRlIHRoZSBjb2RlIG9uVXBsb2FkRmlsZXMgZXZlbnQgdG8gc3RvcmUgdGhlIGZpbGUgY29udGVudC5cbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5vblVwbG9hZEZpbGVzXG4gICAqL1xuICBwdWJsaWMgZ2V0IHN0b3JlRGF0YUFzVGV4dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic3RvcmVEYXRhQXNUZXh0XCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgc3RvcmVEYXRhQXNUZXh0KHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInN0b3JlRGF0YUFzVGV4dFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgaXQgdG8gdHJ1ZSBpZiB5b3Ugd2FudCB0byB3YWl0IHVudGlsIGZpbGVzIHdpbGwgYmUgdXBsb2FkZWQgdG8geW91ciBzZXJ2ZXIuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHdhaXRGb3JVcGxvYWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIndhaXRGb3JVcGxvYWRcIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXQgd2FpdEZvclVwbG9hZCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ3YWl0Rm9yVXBsb2FkXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCBpdCB0byBmYWxzZSBpZiB5b3Ugd2FudCB0byBkaXNhYmxlIGltYWdlcyBwcmV2aWV3LlxuICAgKi9cbiAgcHVibGljIGdldCBhbGxvd0ltYWdlc1ByZXZpZXcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImFsbG93SW1hZ2VzUHJldmlld1wiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGFsbG93SW1hZ2VzUHJldmlldyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJhbGxvd0ltYWdlc1ByZXZpZXdcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gc2V0dXAgdGhlIG1heGltdW0gYWxsb3dlZCBmaWxlIHNpemUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1heFNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWF4U2l6ZVwiLCAwKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1heFNpemUodmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtYXhTaXplXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIHNldHVwIGNvbmZpcm1hdGlvbiB0byByZW1vdmUgZmlsZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgbmVlZENvbmZpcm1SZW1vdmVGaWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJuZWVkQ29uZmlybVJlbW92ZUZpbGVcIik7XG4gIH1cbiAgcHVibGljIHNldCBuZWVkQ29uZmlybVJlbW92ZUZpbGUodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibmVlZENvbmZpcm1SZW1vdmVGaWxlXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSByZW1vdmUgZmlsZSBjb25maXJtYXRpb24gbWVzc2FnZS5cbiAgICovXG4gIHB1YmxpYyBnZXRDb25maXJtUmVtb3ZlTWVzc2FnZShmaWxlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uXG4gICAgICAuZ2V0U3RyaW5nKFwiY29uZmlybVJlbW92ZUZpbGVcIilcbiAgICAgIFtcImZvcm1hdFwiXShmaWxlTmFtZSk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSByZW1vdmUgYWxsIGZpbGVzIGNvbmZpcm1hdGlvbiBtZXNzYWdlLlxuICAgKi9cbiAgZ2V0IGNvbmZpcm1SZW1vdmVBbGxNZXNzYWdlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJjb25maXJtUmVtb3ZlQWxsRmlsZXNcIik7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBubyBmaWxlIGNob3NlbiBjYXB0aW9uIGZvciBtb2Rlcm4gdGhlbWUuXG4gICAqL1xuICBnZXQgbm9GaWxlQ2hvc2VuQ2FwdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwibm9GaWxlQ2hvc2VuXCIpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgY2hvb3NlIGZpbGVzIGJ1dHRvbiBjYXB0aW9uIGZvciBtb2Rlcm4gdGhlbWUuXG4gICAqL1xuICBnZXQgY2hvb3NlQnV0dG9uQ2FwdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiY2hvb3NlRmlsZUNhcHRpb25cIik7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBjbGVhbiBmaWxlcyBidXR0b24gY2FwdGlvbi5cbiAgICovXG4gIGdldCBjbGVhbkJ1dHRvbkNhcHRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcImNsZWFuQ2FwdGlvblwiKTtcbiAgfVxuICAvKipcbiAgICogVGhlIHJlbW92ZSBmaWxlIGJ1dHRvbiBjYXB0aW9uLlxuICAgKi9cbiAgZ2V0IHJlbW92ZUZpbGVDYXB0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJyZW1vdmVGaWxlQ2FwdGlvblwiKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGlucHV0IHRpdGxlIHZhbHVlLlxuICAgKi9cbiAgZ2V0IGlucHV0VGl0bGUoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5pc1VwbG9hZGluZykgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJsb2FkaW5nRmlsZVwiKTtcbiAgICBpZiAodGhpcy5pc0VtcHR5KCkpIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiY2hvb3NlRmlsZVwiKTtcbiAgICByZXR1cm4gXCIgXCI7XG4gIH1cbiAgLyoqXG4gICAqIENsZWFyIHZhbHVlIHByb2dyYW1tYXRpY2FsbHkuXG4gICAqL1xuICBwdWJsaWMgY2xlYXIoZG9uZUNhbGxiYWNrPzogKCkgPT4gdm9pZCkge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkpIHJldHVybjtcbiAgICB0aGlzLnN1cnZleS5jbGVhckZpbGVzKFxuICAgICAgdGhpcyxcbiAgICAgIHRoaXMubmFtZSxcbiAgICAgIHRoaXMudmFsdWUsXG4gICAgICBudWxsLFxuICAgICAgKHN0YXR1cywgZGF0YSkgPT4ge1xuICAgICAgICBpZiAoc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgdGhpcy5lcnJvcnMgPSBbXTtcbiAgICAgICAgICAhIWRvbmVDYWxsYmFjayAmJiBkb25lQ2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIFJlbW92ZSBmaWxlIGl0ZW0gcHJvZ3JhbW1hdGljYWxseS5cbiAgICovXG4gIHB1YmxpYyByZW1vdmVGaWxlKGNvbnRlbnQ6IHsgbmFtZTogc3RyaW5nIH0pIHtcbiAgICBpZiAoIXRoaXMuc3VydmV5KSByZXR1cm47XG4gICAgdGhpcy5zdXJ2ZXkuY2xlYXJGaWxlcyhcbiAgICAgIHRoaXMsXG4gICAgICB0aGlzLm5hbWUsXG4gICAgICB0aGlzLnZhbHVlLFxuICAgICAgY29udGVudC5uYW1lLFxuICAgICAgKHN0YXR1cywgZGF0YSkgPT4ge1xuICAgICAgICBpZiAoc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2xkVmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gb2xkVmFsdWUuZmlsdGVyKChmKSA9PiBmLm5hbWUgIT09IGNvbnRlbnQubmFtZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgfVxuICAvKipcbiAgICogTG9hZCBtdWx0aXBsZSBmaWxlcyBwcm9ncmFtbWF0aWNhbGx5LlxuICAgKiBAcGFyYW0gZmlsZXNcbiAgICovXG4gIHB1YmxpYyBsb2FkRmlsZXMoZmlsZXM6IEZpbGVbXSkge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5lcnJvcnMgPSBbXTtcbiAgICBpZiAoIXRoaXMuYWxsRmlsZXNPayhmaWxlcykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlQ2hhbmdlZChcImxvYWRpbmdcIik7XG5cbiAgICB2YXIgbG9hZEZpbGVzUHJvYyA9ICgpID0+IHtcbiAgICAgIHZhciBjb250ZW50ID0gPEFycmF5PGFueT4+W107XG4gICAgICBpZiAodGhpcy5zdG9yZURhdGFBc1RleHQpIHtcbiAgICAgICAgZmlsZXMuZm9yRWFjaCgoZmlsZSkgPT4ge1xuICAgICAgICAgIGxldCBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICBmaWxlUmVhZGVyLm9ubG9hZCA9IChlKSA9PiB7XG4gICAgICAgICAgICBjb250ZW50ID0gY29udGVudC5jb25jYXQoW1xuICAgICAgICAgICAgICB7IG5hbWU6IGZpbGUubmFtZSwgdHlwZTogZmlsZS50eXBlLCBjb250ZW50OiBmaWxlUmVhZGVyLnJlc3VsdCB9LFxuICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICBpZiAoY29udGVudC5sZW5ndGggPT09IGZpbGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gKHRoaXMudmFsdWUgfHwgW10pLmNvbmNhdChjb250ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIGZpbGVSZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5zdXJ2ZXkpIHtcbiAgICAgICAgICB0aGlzLnN1cnZleS51cGxvYWRGaWxlcyh0aGlzLCB0aGlzLm5hbWUsIGZpbGVzLCAoc3RhdHVzLCBkYXRhKSA9PiB7XG4gICAgICAgICAgICBpZiAoc3RhdHVzID09PSBcImVycm9yXCIpIHtcbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZWQoXCJlcnJvclwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICAgIHRoaXMudmFsdWUgPSAodGhpcy52YWx1ZSB8fCBbXSkuY29uY2F0KFxuICAgICAgICAgICAgICAgIGRhdGEubWFwKChyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IHIuZmlsZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiByLmZpbGUudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogci5jb250ZW50LFxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAodGhpcy5hbGxvd011bHRpcGxlKSB7XG4gICAgICBsb2FkRmlsZXNQcm9jKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xlYXIobG9hZEZpbGVzUHJvYyk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBjYW5QcmV2aWV3SW1hZ2UoZmlsZUl0ZW06IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFsbG93SW1hZ2VzUHJldmlldyAmJiAhIWZpbGVJdGVtICYmIHRoaXMuaXNGaWxlSW1hZ2UoZmlsZUl0ZW0pO1xuICB9XG4gIHByb3RlY3RlZCBzZXRRdWVzdGlvblZhbHVlKG5ld1ZhbHVlOiBhbnksIHVwZGF0ZUlzQW5zd2VyZWQ6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgc3VwZXIuc2V0UXVlc3Rpb25WYWx1ZShuZXdWYWx1ZSwgdXBkYXRlSXNBbnN3ZXJlZCk7XG4gICAgdGhpcy5wcmV2aWV3VmFsdWUgPSBbXTtcbiAgICB2YXIgc3RhdGUgPVxuICAgICAgKCFBcnJheS5pc0FycmF5KG5ld1ZhbHVlKSAmJiAhIW5ld1ZhbHVlKSB8fFxuICAgICAgKEFycmF5LmlzQXJyYXkobmV3VmFsdWUpICYmIG5ld1ZhbHVlLmxlbmd0aCA+IDApXG4gICAgICAgID8gdGhpcy5zaG93UHJldmlld1xuICAgICAgICAgID8gXCJsb2FkaW5nXCJcbiAgICAgICAgICA6IFwibG9hZGVkXCJcbiAgICAgICAgOiBcImVtcHR5XCI7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZWQoc3RhdGUpO1xuICAgIGlmICghdGhpcy5zaG93UHJldmlldyB8fCAhbmV3VmFsdWUpIHJldHVybjtcbiAgICB2YXIgbmV3VmFsdWVzID0gQXJyYXkuaXNBcnJheShuZXdWYWx1ZSlcbiAgICAgID8gbmV3VmFsdWVcbiAgICAgIDogISFuZXdWYWx1ZVxuICAgICAgPyBbbmV3VmFsdWVdXG4gICAgICA6IFtdO1xuXG4gICAgaWYgKHRoaXMuc3RvcmVEYXRhQXNUZXh0KSB7XG4gICAgICBuZXdWYWx1ZXMuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgICAgdmFyIGNvbnRlbnQgPSB2YWx1ZS5jb250ZW50IHx8IHZhbHVlO1xuICAgICAgICB0aGlzLnByZXZpZXdWYWx1ZSA9IHRoaXMucHJldmlld1ZhbHVlLmNvbmNhdChbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogdmFsdWUubmFtZSxcbiAgICAgICAgICAgIHR5cGU6IHZhbHVlLnR5cGUsXG4gICAgICAgICAgICBjb250ZW50OiBjb250ZW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuICAgICAgfSk7XG4gICAgICBpZiAoc3RhdGUgPT09IFwibG9hZGluZ1wiKSB0aGlzLnN0YXRlQ2hhbmdlZChcImxvYWRlZFwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3VmFsdWVzLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgIHZhciBjb250ZW50ID0gdmFsdWUuY29udGVudCB8fCB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuc3VydmV5KSB7XG4gICAgICAgICAgdGhpcy5zdXJ2ZXkuZG93bmxvYWRGaWxlKHRoaXMubmFtZSwgdmFsdWUsIChzdGF0dXMsIGRhdGEpID0+IHtcbiAgICAgICAgICAgIGlmIChzdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICAgIHRoaXMucHJldmlld1ZhbHVlID0gdGhpcy5wcmV2aWV3VmFsdWUuY29uY2F0KFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBjb250ZW50OiBkYXRhLFxuICAgICAgICAgICAgICAgICAgbmFtZTogdmFsdWUubmFtZSxcbiAgICAgICAgICAgICAgICAgIHR5cGU6IHZhbHVlLnR5cGUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgIGlmICh0aGlzLnByZXZpZXdWYWx1ZS5sZW5ndGggPT09IG5ld1ZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlZChcImxvYWRlZFwiKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZWQoXCJlcnJvclwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBvbkNoZWNrRm9yRXJyb3JzKFxuICAgIGVycm9yczogQXJyYXk8U3VydmV5RXJyb3I+LFxuICAgIGlzT25WYWx1ZUNoYW5nZWQ6IGJvb2xlYW5cbiAgKSB7XG4gICAgc3VwZXIub25DaGVja0ZvckVycm9ycyhlcnJvcnMsIGlzT25WYWx1ZUNoYW5nZWQpO1xuICAgIGlmICh0aGlzLmlzVXBsb2FkaW5nICYmIHRoaXMud2FpdEZvclVwbG9hZCkge1xuICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgIG5ldyBVcGxvYWRpbmdGaWxlRXJyb3IoXG4gICAgICAgICAgc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcInVwbG9hZGluZ0ZpbGVcIiksXG4gICAgICAgICAgdGhpc1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgc3RhdGVDaGFuZ2VkKHN0YXRlOiBzdHJpbmcpIHtcbiAgICBpZiAoc3RhdGUgPT09IFwibG9hZGluZ1wiKSB7XG4gICAgICB0aGlzLmlzVXBsb2FkaW5nID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHN0YXRlID09PSBcImxvYWRlZFwiKSB7XG4gICAgICB0aGlzLmlzVXBsb2FkaW5nID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChzdGF0ZSA9PT0gXCJlcnJvclwiKSB7XG4gICAgICB0aGlzLmlzVXBsb2FkaW5nID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuY3VycmVudFN0YXRlID0gc3RhdGU7XG4gICAgdGhpcy5vblN0YXRlQ2hhbmdlZC5maXJlKHRoaXMsIHsgc3RhdGU6IHN0YXRlIH0pO1xuICB9XG4gIHByaXZhdGUgYWxsRmlsZXNPayhmaWxlczogRmlsZVtdKTogYm9vbGVhbiB7XG4gICAgdmFyIGVycm9yTGVuZ3RoID0gdGhpcy5lcnJvcnMgPyB0aGlzLmVycm9ycy5sZW5ndGggOiAwO1xuICAgIChmaWxlcyB8fCBbXSkuZm9yRWFjaCgoZmlsZSkgPT4ge1xuICAgICAgaWYgKHRoaXMubWF4U2l6ZSA+IDAgJiYgZmlsZS5zaXplID4gdGhpcy5tYXhTaXplKSB7XG4gICAgICAgIHRoaXMuZXJyb3JzLnB1c2gobmV3IEV4Y2VlZFNpemVFcnJvcih0aGlzLm1heFNpemUsIHRoaXMpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZXJyb3JMZW5ndGggPT09IHRoaXMuZXJyb3JzLmxlbmd0aDtcbiAgfVxuICBwcml2YXRlIGlzRmlsZUltYWdlKGZpbGU6IHtcbiAgICBjb250ZW50OiBzdHJpbmc7XG4gICAgbmFtZT86IHN0cmluZztcbiAgICB0eXBlPzogc3RyaW5nO1xuICB9KTogYm9vbGVhbiB7XG4gICAgaWYgKCFmaWxlKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgaW1hZ2VQcmVmaXggPSBcImRhdGE6aW1hZ2VcIjtcbiAgICB2YXIgc3ViU3RyID0gZmlsZS5jb250ZW50ICYmIGZpbGUuY29udGVudC5zdWJzdHIoMCwgaW1hZ2VQcmVmaXgubGVuZ3RoKTtcbiAgICBzdWJTdHIgPSBzdWJTdHIgJiYgc3ViU3RyLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIHJlc3VsdCA9XG4gICAgICBzdWJTdHIgPT09IGltYWdlUHJlZml4IHx8XG4gICAgICAoISFmaWxlLnR5cGUgJiYgZmlsZS50eXBlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihcImltYWdlL1wiKSA9PT0gMCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBwdWJsaWMgZ2V0UGxhaW5EYXRhKFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGluY2x1ZGVFbXB0eT86IGJvb2xlYW47XG4gICAgICBjYWxjdWxhdGlvbnM/OiBBcnJheTx7XG4gICAgICAgIHByb3BlcnR5TmFtZTogc3RyaW5nO1xuICAgICAgfT47XG4gICAgfSA9IHtcbiAgICAgIGluY2x1ZGVFbXB0eTogdHJ1ZSxcbiAgICB9XG4gICkge1xuICAgIHZhciBxdWVzdGlvblBsYWluRGF0YSA9IHN1cGVyLmdldFBsYWluRGF0YShvcHRpb25zKTtcbiAgICBpZiAoISFxdWVzdGlvblBsYWluRGF0YSAmJiAhdGhpcy5pc0VtcHR5KCkpIHtcbiAgICAgIHF1ZXN0aW9uUGxhaW5EYXRhLmlzTm9kZSA9IGZhbHNlO1xuICAgICAgdmFyIHZhbHVlcyA9IEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgPyB0aGlzLnZhbHVlIDogW3RoaXMudmFsdWVdO1xuICAgICAgcXVlc3Rpb25QbGFpbkRhdGEuZGF0YSA9IHZhbHVlcy5tYXAoKGRhdGFWYWx1ZSwgaW5kZXgpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBpbmRleCxcbiAgICAgICAgICB0aXRsZTogXCJGaWxlXCIsXG4gICAgICAgICAgdmFsdWU6IChkYXRhVmFsdWUuY29udGVudCAmJiBkYXRhVmFsdWUuY29udGVudCkgfHwgZGF0YVZhbHVlLFxuICAgICAgICAgIGRpc3BsYXlWYWx1ZTogKGRhdGFWYWx1ZS5uYW1lICYmIGRhdGFWYWx1ZS5uYW1lKSB8fCBkYXRhVmFsdWUsXG4gICAgICAgICAgZ2V0U3RyaW5nOiAodmFsOiBhbnkpID0+XG4gICAgICAgICAgICB0eXBlb2YgdmFsID09PSBcIm9iamVjdFwiID8gSlNPTi5zdHJpbmdpZnkodmFsKSA6IHZhbCxcbiAgICAgICAgICBpc05vZGU6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBxdWVzdGlvblBsYWluRGF0YTtcbiAgfVxuICBwdWJsaWMgc3VwcG9ydENvbW1lbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwiZmlsZVwiLFxuICBbXG4gICAgeyBuYW1lOiBcImhhc0NvbW1lbnQ6c3dpdGNoXCIsIGxheW91dDogXCJyb3dcIiB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiY29tbWVudFRleHRcIixcbiAgICAgIGRlcGVuZHNPbjogXCJoYXNDb21tZW50XCIsXG4gICAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uKG9iajogYW55KSB7XG4gICAgICAgIHJldHVybiBvYmouaGFzQ29tbWVudDtcbiAgICAgIH0sXG4gICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jQ29tbWVudFRleHRcIixcbiAgICAgIGxheW91dDogXCJyb3dcIixcbiAgICB9LFxuICAgIHsgbmFtZTogXCJzaG93UHJldmlldzpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBcImFsbG93TXVsdGlwbGU6Ym9vbGVhblwiLFxuICAgIHsgbmFtZTogXCJhbGxvd0ltYWdlc1ByZXZpZXc6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgXCJpbWFnZUhlaWdodFwiLFxuICAgIFwiaW1hZ2VXaWR0aFwiLFxuICAgIFwiYWNjZXB0ZWRUeXBlc1wiLFxuICAgIHsgbmFtZTogXCJzdG9yZURhdGFBc1RleHQ6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgeyBuYW1lOiBcIndhaXRGb3JVcGxvYWQ6Ym9vbGVhblwiLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIFwibWF4U2l6ZTpudW1iZXJcIixcbiAgICB7IG5hbWU6IFwiZGVmYXVsdFZhbHVlXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcImNvcnJlY3RBbnN3ZXJcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwidmFsaWRhdG9yc1wiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJuZWVkQ29uZmlybVJlbW92ZUZpbGU6Ym9vbGVhblwiLCB2aXNpYmxlOiB0cnVlLCBkZWZhdWx0OiBmYWxzZSB9LFxuICBdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uRmlsZU1vZGVsKFwiXCIpO1xuICB9LFxuICBcInF1ZXN0aW9uXCJcbik7XG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImZpbGVcIiwgKG5hbWUpID0+IHtcbiAgcmV0dXJuIG5ldyBRdWVzdGlvbkZpbGVNb2RlbChuYW1lKTtcbn0pO1xuIiwiaW1wb3J0IHsgUXVlc3Rpb25Ob25WYWx1ZSB9IGZyb20gXCIuL3F1ZXN0aW9ubm9udmFsdWVcIjtcbmltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcblxuLyoqXG4gKiBBIE1vZGVsIGZvciBodG1sIHF1ZXN0aW9uLiBVbmxpa2Ugb3RoZXIgcXVlc3Rpb25zIGl0IGRvZXNuJ3QgaGF2ZSB2YWx1ZSBhbmQgdGl0bGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkh0bWxNb2RlbCBleHRlbmRzIFF1ZXN0aW9uTm9uVmFsdWUge1xuICBwdWJsaWMgaWdub3JlSHRtbFByb2dyZXNzaW5nOiBib29sZWFuO1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgICB2YXIgbG9jSHRtbCA9IHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJodG1sXCIsIHRoaXMpO1xuICAgIGxvY0h0bWwub25HZXRUZXh0Q2FsbGJhY2sgPSAoc3RyOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgICAgcmV0dXJuICEhdGhpcy5zdXJ2ZXkgJiYgIXRoaXMuaWdub3JlSHRtbFByb2dyZXNzaW5nXG4gICAgICAgID8gdGhpcy5zdXJ2ZXkucHJvY2Vzc0h0bWwoc3RyKVxuICAgICAgICA6IHN0cjtcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiaHRtbFwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNDb21wb3NpdGVRdWVzdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0UHJvY2Vzc2VkVGV4dCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmlnbm9yZUh0bWxQcm9ncmVzc2luZykgcmV0dXJuIHRleHQ7XG4gICAgcmV0dXJuIHN1cGVyLmdldFByb2Nlc3NlZFRleHQodGV4dCk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCBodG1sIHRvIGRpc3BsYXkgaXRcbiAgICovXG4gIHB1YmxpYyBnZXQgaHRtbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImh0bWxcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBodG1sKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJodG1sXCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY0h0bWwoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwiaHRtbFwiKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHByb2Nlc3NlZEh0bWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5ID8gdGhpcy5zdXJ2ZXkucHJvY2Vzc0h0bWwodGhpcy5odG1sKSA6IHRoaXMuaHRtbDtcbiAgfVxufVxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJodG1sXCIsXG4gIFt7IG5hbWU6IFwiaHRtbDpodG1sXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NIdG1sXCIgfV0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25IdG1sTW9kZWwoXCJcIik7XG4gIH0sXG4gIFwibm9udmFsdWVcIlxuKTtcblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiaHRtbFwiLCBuYW1lID0+IHtcbiAgcmV0dXJuIG5ldyBRdWVzdGlvbkh0bWxNb2RlbChuYW1lKTtcbn0pO1xuIiwiaW1wb3J0IHsgUXVlc3Rpb25Ob25WYWx1ZSB9IGZyb20gXCIuL3F1ZXN0aW9ubm9udmFsdWVcIjtcbmltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcblxuLyoqXG4gKiBBIE1vZGVsIGZvciBpbWFnZSBxdWVzdGlvbi4gVGhpcyBxdWVzdGlvbiBoYXNuJ3QgYW55IGZ1bmN0aW9uYWxpdHkgYW5kIGNhbiBiZSB1c2VkIHRvIGltcHJvdmUgdGhlIGFwcGVhcmFuY2Ugb2YgdGhlIHN1cnZleS5cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uSW1hZ2VNb2RlbCBleHRlbmRzIFF1ZXN0aW9uTm9uVmFsdWUge1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwiaW1hZ2VMaW5rXCIsIHRoaXMsIGZhbHNlKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwidGV4dFwiLCB0aGlzLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJpbWFnZVwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNDb21wb3NpdGVRdWVzdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBpbWFnZSBVUkwuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGltYWdlTGluaygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImltYWdlTGlua1wiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGltYWdlTGluayh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiaW1hZ2VMaW5rXCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY0ltYWdlTGluaygpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJpbWFnZUxpbmtcIik7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBpbWFnZSBhbHQgdGV4dC5cbiAgICovXG4gIHB1YmxpYyBnZXQgdGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInRleHRcIik7XG4gIH1cbiAgcHVibGljIHNldCB0ZXh0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJ0ZXh0XCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY1RleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwidGV4dFwiKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGltYWdlIGhlaWdodC5cbiAgICovXG4gIHB1YmxpYyBnZXQgaW1hZ2VIZWlnaHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaW1hZ2VIZWlnaHRcIik7XG4gIH1cbiAgcHVibGljIHNldCBpbWFnZUhlaWdodCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImltYWdlSGVpZ2h0XCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBpbWFnZSB3aWR0aC5cbiAgICovXG4gIHB1YmxpYyBnZXQgaW1hZ2VXaWR0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpbWFnZVdpZHRoXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgaW1hZ2VXaWR0aCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImltYWdlV2lkdGhcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGltYWdlIGZpdCBtb2RlLlxuICAgKi9cbiAgcHVibGljIGdldCBpbWFnZUZpdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpbWFnZUZpdFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGltYWdlRml0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaW1hZ2VGaXRcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgbW9kZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgY29udGVudE1vZGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY29udGVudE1vZGVcIik7XG4gIH1cbiAgcHVibGljIHNldCBjb250ZW50TW9kZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNvbnRlbnRNb2RlXCIsIHZhbCk7XG4gICAgaWYgKHZhbCA9PT0gXCJ2aWRlb1wiKSB7XG4gICAgICB0aGlzLnNob3dMYWJlbCA9IHRydWU7XG4gICAgfVxuICB9XG59XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwiaW1hZ2VcIixcbiAgW1xuICAgIHsgbmFtZTogXCJpbWFnZUxpbmtcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0ltYWdlTGlua1wiIH0sXG4gICAgeyBuYW1lOiBcInRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1RleHRcIiB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiY29udGVudE1vZGVcIixcbiAgICAgIGRlZmF1bHQ6IFwiaW1hZ2VcIixcbiAgICAgIGNob2ljZXM6IFtcImltYWdlXCIsIFwidmlkZW9cIl0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImltYWdlRml0XCIsXG4gICAgICBkZWZhdWx0OiBcImNvbnRhaW5cIixcbiAgICAgIGNob2ljZXM6IFtcIm5vbmVcIiwgXCJjb250YWluXCIsIFwiY292ZXJcIiwgXCJmaWxsXCJdLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcImltYWdlSGVpZ2h0Om51bWJlclwiLCBkZWZhdWx0OiAxNTAsIG1pblZhbHVlOiAwIH0sXG4gICAgeyBuYW1lOiBcImltYWdlV2lkdGg6bnVtYmVyXCIsIGRlZmF1bHQ6IDIwMCwgbWluVmFsdWU6IDAgfSxcbiAgXSxcbiAgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25JbWFnZU1vZGVsKFwiXCIpO1xuICB9LFxuICBcIm5vbnZhbHVlXCJcbik7XG5cblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiaW1hZ2VcIiwgKG5hbWUpID0+IHtcbiAgcmV0dXJuIG5ldyBRdWVzdGlvbkltYWdlTW9kZWwobmFtZSk7XG59KTtcbiIsImltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmltcG9ydCB7IFF1ZXN0aW9uQ2hlY2tib3hCYXNlIH0gZnJvbSBcIi4vcXVlc3Rpb25fYmFzZXNlbGVjdFwiO1xuaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcIi4vaXRlbXZhbHVlXCI7XG5pbXBvcnQgeyBIZWxwZXJzIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuaW1wb3J0IHsgSUxvY2FsaXphYmxlT3duZXIsIExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcblxuZXhwb3J0IGNsYXNzIEltYWdlSXRlbVZhbHVlIGV4dGVuZHMgSXRlbVZhbHVlIGltcGxlbWVudHMgSUxvY2FsaXphYmxlT3duZXIge1xuICBjb25zdHJ1Y3RvcihcbiAgICB2YWx1ZTogYW55LFxuICAgIHRleHQ6IHN0cmluZyA9IG51bGwsXG4gICAgcHJvdGVjdGVkIHR5cGVOYW1lID0gXCJpbWFnZWl0ZW12YWx1ZVwiXG4gICkge1xuICAgIHN1cGVyKHZhbHVlLCB0ZXh0LCB0eXBlTmFtZSk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcImltYWdlTGlua1wiLCB0aGlzLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gISF0aGlzLnR5cGVOYW1lID8gdGhpcy50eXBlTmFtZSA6IFwiaXRlbXZhbHVlXCI7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBpbWFnZSBvciB2aWRlbyBsaW5rIHByb3BlcnR5LlxuICAgKi9cbiAgcHVibGljIGdldCBpbWFnZUxpbmsoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJpbWFnZUxpbmtcIik7XG4gIH1cbiAgcHVibGljIHNldCBpbWFnZUxpbmsodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImltYWdlTGlua1wiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NJbWFnZUxpbmsoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwiaW1hZ2VMaW5rXCIpO1xuICB9XG4gIGdldExvY2FsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAhIXRoaXMubG9jT3duZXIgPyB0aGlzLmxvY093bmVyLmdldExvY2FsZSgpIDogXCJcIjtcbiAgfVxuICBnZXRNYXJrZG93bkh0bWwodGV4dDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiAhIXRoaXMubG9jT3duZXIgPyB0aGlzLmxvY093bmVyLmdldE1hcmtkb3duSHRtbCh0ZXh0LCBuYW1lKSA6IHRleHQ7XG4gIH1cbiAgZ2V0UmVuZGVyZXIobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gISF0aGlzLmxvY093bmVyID8gdGhpcy5sb2NPd25lci5nZXRSZW5kZXJlcihuYW1lKSA6IG51bGw7XG4gIH1cbiAgZ2V0UHJvY2Vzc2VkVGV4dCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiAhIXRoaXMubG9jT3duZXIgPyB0aGlzLmxvY093bmVyLmdldFByb2Nlc3NlZFRleHQodGV4dCkgOiB0ZXh0O1xuICB9XG59XG5cbi8qKlxuICogQSBNb2RlbCBmb3IgYSBzZWxlY3QgaW1hZ2UgcXVlc3Rpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkltYWdlUGlja2VyTW9kZWwgZXh0ZW5kcyBRdWVzdGlvbkNoZWNrYm94QmFzZSB7XG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIHRoaXMuY29sQ291bnQgPSAwO1xuICAgIHRoaXMuY2hvaWNlc0J5VXJsLmNyZWF0ZUl0ZW1WYWx1ZSA9ICh2YWx1ZTogYW55KSA9PlxuICAgICAgbmV3IEltYWdlSXRlbVZhbHVlKHZhbHVlKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImltYWdlcGlja2VyXCI7XG4gIH1cbiAgc3VwcG9ydEdvTmV4dFBhZ2VBdXRvbWF0aWMoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHVibGljIGdldCBoYXNTaW5nbGVJbnB1dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEl0ZW1WYWx1ZVR5cGUoKSB7XG4gICAgcmV0dXJuIFwiaW1hZ2VpdGVtdmFsdWVcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzQ29tcG9zaXRlUXVlc3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHVibGljIHN1cHBvcnRPdGhlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIHN1cHBvcnROb25lKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvKipcbiAgICogTXVsdGkgc2VsZWN0IG9wdGlvbi4gSWYgc2V0IHRvIHRydWUsIHRoZW4gYWxsb3dzIHRvIHNlbGVjdCBtdWx0aXBsZSBpbWFnZXMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG11bHRpU2VsZWN0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtdWx0aVNlbGVjdFwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBtdWx0aVNlbGVjdChuZXdWYWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm11bHRpU2VsZWN0XCIsIG5ld1ZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIGl0ZW0gaXMgY2hlY2tlZFxuICAgKiBAcGFyYW0gaXRlbSBpbWFnZSBwaWNrZXIgaXRlbSB2YWx1ZVxuICAgKi9cbiAgcHVibGljIGlzSXRlbVNlbGVjdGVkKGl0ZW06IEl0ZW1WYWx1ZSk6IGJvb2xlYW4ge1xuICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xuICAgIGlmICh0aGlzLmlzVmFsdWVFbXB0eSh2YWwpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCF0aGlzLm11bHRpU2VsZWN0KSByZXR1cm4gSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKHZhbCwgaXRlbS52YWx1ZSk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbCkpIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKEhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyh2YWxbaV0sIGl0ZW0udmFsdWUpKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBjbGVhckluY29ycmVjdFZhbHVlcygpIHtcbiAgICBpZiAodGhpcy5tdWx0aVNlbGVjdCkge1xuICAgICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XG4gICAgICBpZiAoIXZhbCkgcmV0dXJuO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbCkgfHwgdmFsLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgIHRoaXMuY2xlYXJWYWx1ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgbmV3VmFsdWUgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghdGhpcy5oYXNVbmtub3duVmFsdWUodmFsW2ldLCB0cnVlKSkge1xuICAgICAgICAgIG5ld1ZhbHVlLnB1c2godmFsW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5ld1ZhbHVlLmxlbmd0aCA9PSB2YWwubGVuZ3RoKSByZXR1cm47XG4gICAgICBpZiAobmV3VmFsdWUubGVuZ3RoID09IDApIHtcbiAgICAgICAgdGhpcy5jbGVhclZhbHVlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN1cGVyLmNsZWFySW5jb3JyZWN0VmFsdWVzKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNob3cgbGFiZWwgdW5kZXIgdGhlIGltYWdlLlxuICAgKi9cbiAgcHVibGljIGdldCBzaG93TGFiZWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dMYWJlbFwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBzaG93TGFiZWwobmV3VmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93TGFiZWxcIiwgbmV3VmFsdWUpO1xuICB9XG4gIGVuZExvYWRpbmdGcm9tSnNvbigpIHtcbiAgICBzdXBlci5lbmRMb2FkaW5nRnJvbUpzb24oKTtcbiAgICBpZiAoIXRoaXMuaXNEZXNpZ25Nb2RlICYmIHRoaXMubXVsdGlTZWxlY3QpIHtcbiAgICAgIHRoaXMuY3JlYXRlTmV3QXJyYXkoXCJyZW5kZXJlZFZhbHVlXCIpO1xuICAgICAgdGhpcy5jcmVhdGVOZXdBcnJheShcInZhbHVlXCIpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VmFsdWVDb3JlKCkge1xuICAgIHZhciB2YWx1ZSA9IHN1cGVyLmdldFZhbHVlQ29yZSgpO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmICh0aGlzLm11bHRpU2VsZWN0KSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBwcml2YXRlIGNvbnZlcnRWYWxUb0FycmF5Rm9yTXVsdFNlbGVjdCh2YWw6IGFueSk6IGFueSB7XG4gICAgaWYgKCF0aGlzLm11bHRpU2VsZWN0KSByZXR1cm4gdmFsO1xuICAgIGlmICh0aGlzLmlzVmFsdWVFbXB0eSh2YWwpIHx8IEFycmF5LmlzQXJyYXkodmFsKSkgcmV0dXJuIHZhbDtcbiAgICByZXR1cm4gW3ZhbF07XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlcmVkVmFsdWVGcm9tRGF0YUNvcmUodmFsOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmNvbnZlcnRWYWxUb0FycmF5Rm9yTXVsdFNlbGVjdCh2YWwpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kcmVkVmFsdWVUb0RhdGFDb3JlKHZhbDogYW55KTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5jb252ZXJ0VmFsVG9BcnJheUZvck11bHRTZWxlY3QodmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGltYWdlIGhlaWdodC5cbiAgICovXG4gIHB1YmxpYyBnZXQgaW1hZ2VIZWlnaHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaW1hZ2VIZWlnaHRcIik7XG4gIH1cbiAgcHVibGljIHNldCBpbWFnZUhlaWdodCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImltYWdlSGVpZ2h0XCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBpbWFnZSB3aWR0aC5cbiAgICovXG4gIHB1YmxpYyBnZXQgaW1hZ2VXaWR0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpbWFnZVdpZHRoXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgaW1hZ2VXaWR0aCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImltYWdlV2lkdGhcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGltYWdlIGZpdCBtb2RlLlxuICAgKi9cbiAgcHVibGljIGdldCBpbWFnZUZpdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpbWFnZUZpdFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGltYWdlRml0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaW1hZ2VGaXRcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgbW9kZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgY29udGVudE1vZGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY29udGVudE1vZGVcIik7XG4gIH1cbiAgcHVibGljIHNldCBjb250ZW50TW9kZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNvbnRlbnRNb2RlXCIsIHZhbCk7XG4gICAgaWYgKHZhbCA9PT0gXCJ2aWRlb1wiKSB7XG4gICAgICB0aGlzLnNob3dMYWJlbCA9IHRydWU7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBjb252ZXJ0RGVmYXVsdFZhbHVlKHZhbDogYW55KTogYW55IHtcbiAgICByZXR1cm4gdmFsO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzQ29sdW1ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJpbWFnZWl0ZW12YWx1ZVwiLFxuICBbXSxcbiAgKHZhbHVlOiBhbnkpID0+IG5ldyBJbWFnZUl0ZW1WYWx1ZSh2YWx1ZSksXG4gIFwiaXRlbXZhbHVlXCJcbik7XG5TZXJpYWxpemVyLmFkZFByb3BlcnR5KFwiaW1hZ2VpdGVtdmFsdWVcIiwge1xuICBuYW1lOiBcImltYWdlTGlua1wiLFxuICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jSW1hZ2VMaW5rXCIsXG59KTtcblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJpbWFnZXBpY2tlclwiLFxuICBbXG4gICAgeyBuYW1lOiBcImhhc090aGVyXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcIm90aGVyVGV4dFwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJoYXNOb25lXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcIm5vbmVUZXh0XCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcIm9wdGlvbnNDYXB0aW9uXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcIm90aGVyRXJyb3JUZXh0XCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcInN0b3JlT3RoZXJzQXNDb21tZW50XCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJjb250ZW50TW9kZVwiLFxuICAgICAgZGVmYXVsdDogXCJpbWFnZVwiLFxuICAgICAgY2hvaWNlczogW1wiaW1hZ2VcIiwgXCJ2aWRlb1wiXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiaW1hZ2VGaXRcIixcbiAgICAgIGRlZmF1bHQ6IFwiY29udGFpblwiLFxuICAgICAgY2hvaWNlczogW1wibm9uZVwiLCBcImNvbnRhaW5cIiwgXCJjb3ZlclwiLCBcImZpbGxcIl0sXG4gICAgfSxcbiAgICB7IG5hbWU6IFwiaW1hZ2VIZWlnaHQ6bnVtYmVyXCIsIGRlZmF1bHQ6IDE1MCwgbWluVmFsdWU6IDAgfSxcbiAgICB7IG5hbWU6IFwiaW1hZ2VXaWR0aDpudW1iZXJcIiwgZGVmYXVsdDogMjAwLCBtaW5WYWx1ZTogMCB9LFxuICBdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbChcIlwiKTtcbiAgfSxcbiAgXCJjaGVja2JveGJhc2VcIlxuKTtcblNlcmlhbGl6ZXIuYWRkUHJvcGVydHkoXCJpbWFnZXBpY2tlclwiLCB7XG4gIG5hbWU6IFwic2hvd0xhYmVsOmJvb2xlYW5cIixcbiAgZGVmYXVsdDogZmFsc2UsXG59KTtcblNlcmlhbGl6ZXIuYWRkUHJvcGVydHkoXCJpbWFnZXBpY2tlclwiLCB7XG4gIG5hbWU6IFwiY29sQ291bnQ6bnVtYmVyXCIsXG4gIGRlZmF1bHQ6IDAsXG4gIGNob2ljZXM6IFswLCAxLCAyLCAzLCA0LCA1XSxcbn0pO1xuU2VyaWFsaXplci5hZGRQcm9wZXJ0eShcImltYWdlcGlja2VyXCIsIHtcbiAgbmFtZTogXCJtdWx0aVNlbGVjdDpib29sZWFuXCIsXG4gIGRlZmF1bHQ6IGZhbHNlLFxufSk7XG5TZXJpYWxpemVyLmFkZFByb3BlcnR5KFwiaW1hZ2VwaWNrZXJcIiwge1xuICBuYW1lOiBcImNob2ljZXM6aW1hZ2VpdGVtdmFsdWVbXVwiLFxufSk7XG5cblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiaW1hZ2VwaWNrZXJcIiwgKG5hbWUpID0+IHtcbiAgdmFyIHEgPSBuZXcgUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsKG5hbWUpO1xuICAvL3EuY2hvaWNlcyA9IFF1ZXN0aW9uRmFjdG9yeS5EZWZhdWx0Q2hvaWNlcztcbiAgcmV0dXJuIHE7XG59KTtcbiIsImltcG9ydCB7IEhlbHBlcnMgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBJdGVtVmFsdWUgfSBmcm9tIFwiLi9pdGVtdmFsdWVcIjtcbmltcG9ydCB7IFF1ZXN0aW9uTWF0cml4QmFzZU1vZGVsIH0gZnJvbSBcIi4vbWFydGl4QmFzZVwiO1xuaW1wb3J0IHsgSnNvbk9iamVjdCwgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFcnJvciB9IGZyb20gXCIuL3N1cnZleS1lcnJvclwiO1xuaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xuaW1wb3J0IHsgUmVxdWlyZWRJbkFsbFJvd3NFcnJvciB9IGZyb20gXCIuL2Vycm9yXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nLCBJTG9jYWxpemFibGVPd25lciB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkRyb3Bkb3duTW9kZWwgfSBmcm9tIFwiLi9xdWVzdGlvbl9kcm9wZG93blwiO1xuaW1wb3J0IHsgSUNvbmRpdGlvbk9iamVjdCB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBzZXR0aW5ncyB9IGZyb20gXCIuL3NldHRpbmdzXCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCIuL3N1cnZleVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElNYXRyaXhEYXRhIHtcbiAgb25NYXRyaXhSb3dDaGFuZ2VkKHJvdzogTWF0cml4Um93TW9kZWwpOiB2b2lkO1xuICBnZXRDb3JyZWN0ZWRSb3dWYWx1ZSh2YWx1ZTogYW55KTogYW55O1xufVxuXG5leHBvcnQgY2xhc3MgTWF0cml4Um93TW9kZWwgZXh0ZW5kcyBCYXNlIHtcbiAgcHJpdmF0ZSBkYXRhOiBJTWF0cml4RGF0YTtcbiAgcHJpdmF0ZSBpdGVtOiBJdGVtVmFsdWU7XG4gIHB1YmxpYyBjZWxsQ2xpY2s6IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBpdGVtOiBJdGVtVmFsdWUsXG4gICAgcHVibGljIGZ1bGxOYW1lOiBzdHJpbmcsXG4gICAgZGF0YTogSU1hdHJpeERhdGEsXG4gICAgdmFsdWU6IGFueVxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuaXRlbSA9IGl0ZW07XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5jZWxsQ2xpY2sgPSAoY29sdW1uOiBhbnkpID0+IHtcbiAgICAgIHRoaXMudmFsdWUgPSBjb2x1bW4udmFsdWU7XG4gICAgfTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFwidmFsdWVcIiwgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZGF0YSkgdGhpcy5kYXRhLm9uTWF0cml4Um93Q2hhbmdlZCh0aGlzKTtcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtLnZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXQgdGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLml0ZW0udGV4dDtcbiAgfVxuICBwdWJsaWMgZ2V0IGxvY1RleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLml0ZW0ubG9jVGV4dDtcbiAgfVxuICBwdWJsaWMgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ2YWx1ZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHZhbHVlKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBuZXdWYWx1ZSA9IHRoaXMuZGF0YS5nZXRDb3JyZWN0ZWRSb3dWYWx1ZShuZXdWYWx1ZSk7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidmFsdWVcIiwgbmV3VmFsdWUpO1xuICB9XG4gIHB1YmxpYyBnZXQgcm93Q2xhc3NlcygpOiBzdHJpbmcge1xuICAgIHZhciBjc3NDbGFzc2VzID0gKDxhbnk+dGhpcy5kYXRhKS5jc3NDbGFzc2VzO1xuICAgIHZhciByb3dDbGFzcyA9ICEhY3NzQ2xhc3Nlcy5yb3cgPyBjc3NDbGFzc2VzLnJvdyA6IFwiXCI7XG4gICAgdmFyIHJvd0Vycm9yQ2xhc3MgPSAhIWNzc0NsYXNzZXMucm93RXJyb3IgPyBjc3NDbGFzc2VzLnJvd0Vycm9yIDogXCJcIjtcbiAgICB2YXIgaGFzRXJyb3IgPSAhISg8YW55PnRoaXMuZGF0YSkuZ2V0RXJyb3JCeVR5cGUoXCJyZXF1aXJlZGluYWxscm93c2Vycm9yXCIpO1xuXG4gICAgdmFyIGNsYXNzZXMgPSByb3dDbGFzcztcbiAgICBpZiAoISFyb3dFcnJvckNsYXNzICYmIGhhc0Vycm9yICYmIHRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMudmFsdWUpKSB7XG4gICAgICBpZiAoISFjbGFzc2VzKSBjbGFzc2VzICs9IFwiIFwiO1xuICAgICAgY2xhc3NlcyArPSByb3dFcnJvckNsYXNzO1xuICAgIH1cbiAgICByZXR1cm4gY2xhc3NlcztcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElNYXRyaXhDZWxsc093bmVyIGV4dGVuZHMgSUxvY2FsaXphYmxlT3duZXIge1xuICBnZXRSb3dzKCk6IEFycmF5PGFueT47XG4gIGdldENvbHVtbnMoKTogQXJyYXk8YW55Pjtcbn1cblxuZXhwb3J0IGNsYXNzIE1hdHJpeENlbGxzIHtcbiAgcHJpdmF0ZSB2YWx1ZXM6IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICBwdWJsaWMgY29uc3RydWN0b3IocHVibGljIGNlbGxzT3duZXI6IElNYXRyaXhDZWxsc093bmVyKSB7fVxuICBwdWJsaWMgZ2V0IGlzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMudmFsdWVzKS5sZW5ndGggPT0gMDtcbiAgfVxuICBwdWJsaWMgc2V0Q2VsbFRleHQocm93OiBhbnksIGNvbHVtbjogYW55LCB2YWw6IHN0cmluZykge1xuICAgIHJvdyA9IHRoaXMuZ2V0Q2VsbFJvd0NvbHVtblZhbHVlKHJvdywgdGhpcy5yb3dzKTtcbiAgICBjb2x1bW4gPSB0aGlzLmdldENlbGxSb3dDb2x1bW5WYWx1ZShjb2x1bW4sIHRoaXMuY29sdW1ucyk7XG4gICAgaWYgKCFyb3cgfHwgIWNvbHVtbikgcmV0dXJuO1xuICAgIGlmICh2YWwpIHtcbiAgICAgIGlmICghdGhpcy52YWx1ZXNbcm93XSkgdGhpcy52YWx1ZXNbcm93XSA9IHt9O1xuICAgICAgaWYgKCF0aGlzLnZhbHVlc1tyb3ddW2NvbHVtbl0pXG4gICAgICAgIHRoaXMudmFsdWVzW3Jvd11bY29sdW1uXSA9IHRoaXMuY3JlYXRlU3RyaW5nKCk7XG4gICAgICB0aGlzLnZhbHVlc1tyb3ddW2NvbHVtbl0udGV4dCA9IHZhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMudmFsdWVzW3Jvd10gJiYgdGhpcy52YWx1ZXNbcm93XVtjb2x1bW5dKSB7XG4gICAgICAgIHZhciBsb2MgPSB0aGlzLnZhbHVlc1tyb3ddW2NvbHVtbl07XG4gICAgICAgIGxvYy50ZXh0ID0gXCJcIjtcbiAgICAgICAgaWYgKGxvYy5pc0VtcHR5KSB7XG4gICAgICAgICAgZGVsZXRlIHRoaXMudmFsdWVzW3Jvd11bY29sdW1uXTtcbiAgICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy52YWx1ZXNbcm93XSkubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnZhbHVlc1tyb3ddO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBwdWJsaWMgc2V0RGVmYXVsdENlbGxUZXh0KGNvbHVtbjogYW55LCB2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0Q2VsbFRleHQoc2V0dGluZ3MubWF0cml4RGVmYXVsdFJvd05hbWUsIGNvbHVtbiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0Q2VsbExvY1RleHQocm93OiBhbnksIGNvbHVtbjogYW55KTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJvdyA9IHRoaXMuZ2V0Q2VsbFJvd0NvbHVtblZhbHVlKHJvdywgdGhpcy5yb3dzKTtcbiAgICBjb2x1bW4gPSB0aGlzLmdldENlbGxSb3dDb2x1bW5WYWx1ZShjb2x1bW4sIHRoaXMuY29sdW1ucyk7XG4gICAgaWYgKCFyb3cgfHwgIWNvbHVtbikgcmV0dXJuIG51bGw7XG4gICAgaWYgKCF0aGlzLnZhbHVlc1tyb3ddKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoIXRoaXMudmFsdWVzW3Jvd11bY29sdW1uXSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVzW3Jvd11bY29sdW1uXTtcbiAgfVxuICBwdWJsaWMgZ2V0RGVmYXVsdENlbGxMb2NUZXh0KGNvbHVtbjogYW55LCB2YWw6IHN0cmluZyk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDZWxsTG9jVGV4dChzZXR0aW5ncy5tYXRyaXhEZWZhdWx0Um93TmFtZSwgY29sdW1uKTtcbiAgfVxuICBwdWJsaWMgZ2V0Q2VsbERpc3BsYXlMb2NUZXh0KHJvdzogYW55LCBjb2x1bW46IGFueSk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICB2YXIgY2VsbFRleHQgPSB0aGlzLmdldENlbGxMb2NUZXh0KHJvdywgY29sdW1uKTtcbiAgICBpZiAoY2VsbFRleHQgJiYgIWNlbGxUZXh0LmlzRW1wdHkpIHJldHVybiBjZWxsVGV4dDtcbiAgICBjZWxsVGV4dCA9IHRoaXMuZ2V0Q2VsbExvY1RleHQoc2V0dGluZ3MubWF0cml4RGVmYXVsdFJvd05hbWUsIGNvbHVtbik7XG4gICAgaWYgKGNlbGxUZXh0ICYmICFjZWxsVGV4dC5pc0VtcHR5KSByZXR1cm4gY2VsbFRleHQ7XG4gICAgaWYgKHR5cGVvZiBjb2x1bW4gPT0gXCJudW1iZXJcIikge1xuICAgICAgY29sdW1uID1cbiAgICAgICAgY29sdW1uID49IDAgJiYgY29sdW1uIDwgdGhpcy5jb2x1bW5zLmxlbmd0aFxuICAgICAgICAgID8gdGhpcy5jb2x1bW5zW2NvbHVtbl1cbiAgICAgICAgICA6IG51bGw7XG4gICAgfVxuICAgIGlmIChjb2x1bW4gJiYgY29sdW1uLmxvY1RleHQpIHJldHVybiBjb2x1bW4ubG9jVGV4dDtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0Q2VsbFRleHQocm93OiBhbnksIGNvbHVtbjogYW55KTogc3RyaW5nIHtcbiAgICB2YXIgbG9jID0gdGhpcy5nZXRDZWxsTG9jVGV4dChyb3csIGNvbHVtbik7XG4gICAgcmV0dXJuIGxvYyA/IGxvYy5jYWxjdWxhdGVkVGV4dCA6IG51bGw7XG4gIH1cbiAgcHVibGljIGdldERlZmF1bHRDZWxsVGV4dChjb2x1bW46IGFueSk6IHN0cmluZyB7XG4gICAgdmFyIGxvYyA9IHRoaXMuZ2V0Q2VsbExvY1RleHQoc2V0dGluZ3MubWF0cml4RGVmYXVsdFJvd05hbWUsIGNvbHVtbik7XG4gICAgcmV0dXJuIGxvYyA/IGxvYy5jYWxjdWxhdGVkVGV4dCA6IG51bGw7XG4gIH1cbiAgcHVibGljIGdldENlbGxEaXNwbGF5VGV4dChyb3c6IGFueSwgY29sdW1uOiBhbnkpOiBzdHJpbmcge1xuICAgIHZhciBsb2MgPSB0aGlzLmdldENlbGxEaXNwbGF5TG9jVGV4dChyb3csIGNvbHVtbik7XG4gICAgcmV0dXJuIGxvYyA/IGxvYy5jYWxjdWxhdGVkVGV4dCA6IG51bGw7XG4gIH1cbiAgcHVibGljIGdldCByb3dzKCk6IEFycmF5PGFueT4ge1xuICAgIHJldHVybiB0aGlzLmNlbGxzT3duZXIgPyB0aGlzLmNlbGxzT3duZXIuZ2V0Um93cygpIDogW107XG4gIH1cbiAgcHVibGljIGdldCBjb2x1bW5zKCk6IEFycmF5PGFueT4ge1xuICAgIHJldHVybiB0aGlzLmNlbGxzT3duZXIgPyB0aGlzLmNlbGxzT3duZXIuZ2V0Q29sdW1ucygpIDogW107XG4gIH1cbiAgcHJpdmF0ZSBnZXRDZWxsUm93Q29sdW1uVmFsdWUodmFsOiBhbnksIHZhbHVlczogQXJyYXk8YW55Pik6IGFueSB7XG4gICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkgcmV0dXJuIG51bGw7XG4gICAgaWYgKHR5cGVvZiB2YWwgPT0gXCJudW1iZXJcIikge1xuICAgICAgaWYgKHZhbCA8IDAgfHwgdmFsID49IHZhbHVlcy5sZW5ndGgpIHJldHVybiBudWxsO1xuICAgICAgdmFsID0gdmFsdWVzW3ZhbF0udmFsdWU7XG4gICAgfVxuICAgIGlmICh2YWwudmFsdWUpIHJldHVybiB2YWwudmFsdWU7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuICBwdWJsaWMgZ2V0SnNvbigpOiBhbnkge1xuICAgIGlmICh0aGlzLmlzRW1wdHkpIHJldHVybiBudWxsO1xuICAgIHZhciByZXM6IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIGZvciAodmFyIHJvdyBpbiB0aGlzLnZhbHVlcykge1xuICAgICAgdmFyIHJlc1JvdzogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgICB2YXIgcm93VmFsdWVzID0gdGhpcy52YWx1ZXNbcm93XTtcbiAgICAgIGZvciAodmFyIGNvbCBpbiByb3dWYWx1ZXMpIHtcbiAgICAgICAgcmVzUm93W2NvbF0gPSByb3dWYWx1ZXNbY29sXS5nZXRKc29uKCk7XG4gICAgICB9XG4gICAgICByZXNbcm93XSA9IHJlc1JvdztcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgc2V0SnNvbih2YWx1ZTogYW55KSB7XG4gICAgdGhpcy52YWx1ZXMgPSB7fTtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm47XG4gICAgZm9yICh2YXIgcm93IGluIHZhbHVlKSB7XG4gICAgICBpZiAocm93ID09IFwicG9zXCIpIGNvbnRpbnVlO1xuICAgICAgdmFyIHJvd1ZhbHVlcyA9IHZhbHVlW3Jvd107XG4gICAgICB0aGlzLnZhbHVlc1tyb3ddID0ge307XG4gICAgICBmb3IgKHZhciBjb2wgaW4gcm93VmFsdWVzKSB7XG4gICAgICAgIGlmIChjb2wgPT0gXCJwb3NcIikgY29udGludWU7XG4gICAgICAgIHZhciBsb2MgPSB0aGlzLmNyZWF0ZVN0cmluZygpO1xuICAgICAgICBsb2Muc2V0SnNvbihyb3dWYWx1ZXNbY29sXSk7XG4gICAgICAgIHRoaXMudmFsdWVzW3Jvd11bY29sXSA9IGxvYztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVN0cmluZygpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzLmNlbGxzT3duZXIsIHRydWUpO1xuICB9XG59XG5cbi8qKlxuICogQSBNb2RlbCBmb3IgYSBzaW1wbGUgbWF0cml4IHF1ZXN0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25NYXRyaXhNb2RlbFxuICBleHRlbmRzIFF1ZXN0aW9uTWF0cml4QmFzZU1vZGVsPE1hdHJpeFJvd01vZGVsLCBJdGVtVmFsdWU+XG4gIGltcGxlbWVudHMgSU1hdHJpeERhdGEsIElNYXRyaXhDZWxsc093bmVyIHtcbiAgcHJpdmF0ZSBpc1Jvd0NoYW5naW5nID0gZmFsc2U7XG4gIHByaXZhdGUgY2VsbHNWYWx1ZTogTWF0cml4Q2VsbHM7XG5cbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gICAgdGhpcy5jZWxsc1ZhbHVlID0gbmV3IE1hdHJpeENlbGxzKHRoaXMpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFwiY29sdW1uc1wiLCBmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYub25Db2x1bW5zQ2hhbmdlZCgpO1xuICAgIH0pO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJyb3dzXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKCFzZWxmLmZpbHRlckl0ZW1zKCkpIHtcbiAgICAgICAgc2VsZi5vblJvd3NDaGFuZ2VkKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcImhpZGVJZlJvd3NFbXB0eVwiLCBmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYudXBkYXRlVmlzaWJpbGl0eUJhc2VkT25Sb3dzKCk7XG4gICAgfSk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJtYXRyaXhcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc1NpbmdsZUlucHV0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gdHJ1ZSwgaWYgeW91IHdhbnQgYSB1c2VyIHRvIGFuc3dlciBhbGwgcm93cy5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXNBbGxSb3dSZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaXNBbGxSb3dSZXF1aXJlZFwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBpc0FsbFJvd1JlcXVpcmVkKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzQWxsUm93UmVxdWlyZWRcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlLCBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgcm93LlxuICAgKi9cbiAgcHVibGljIGdldCBoYXNSb3dzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJvd3MubGVuZ3RoID4gMDtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gcmVuZGVyIGl0ZW1zIGluIGEgc3BlY2lmaWMgb3JkZXI6IFwicmFuZG9tXCIgb3IgXCJpbml0aWFsXCIuIERlZmF1bHQgaXMgXCJpbml0aWFsXCIuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJvd3NPcmRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyb3dzT3JkZXJcIik7XG4gIH1cbiAgcHVibGljIHNldCByb3dzT3JkZXIodmFsOiBzdHJpbmcpIHtcbiAgICB2YWwgPSB2YWwudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAodmFsID09IHRoaXMucm93c09yZGVyKSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicm93c09yZGVyXCIsIHZhbCk7XG4gICAgdGhpcy5vblJvd3NDaGFuZ2VkKCk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIHRydWUgdG8gaGlkZSB0aGUgcXVlc3Rpb24gaWYgdGhlcmUgaXMgbm8gdmlzaWJsZSByb3dzIGluIHRoZSBtYXRyaXguXG4gICAqL1xuICBwdWJsaWMgZ2V0IGhpZGVJZlJvd3NFbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaGlkZUlmUm93c0VtcHR5XCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGhpZGVJZlJvd3NFbXB0eSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJoaWRlSWZSb3dzRW1wdHlcIiwgdmFsKTtcbiAgfVxuICBnZXRSb3dzKCk6IEFycmF5PGFueT4ge1xuICAgIHJldHVybiB0aGlzLnJvd3M7XG4gIH1cbiAgZ2V0Q29sdW1ucygpOiBBcnJheTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy52aXNpYmxlQ29sdW1ucztcbiAgfVxuICBwdWJsaWMgYWRkQ29sdW1uKHZhbHVlOiBhbnksIHRleHQ/OiBzdHJpbmcpOiBJdGVtVmFsdWUge1xuICAgIHZhciBjb2wgPSBuZXcgSXRlbVZhbHVlKHZhbHVlLCB0ZXh0KTtcbiAgICB0aGlzLmNvbHVtbnMucHVzaChjb2wpO1xuICAgIHJldHVybiBjb2w7XG4gIH1cbiAgcHVibGljIGdldEl0ZW1DbGFzcyhyb3c6IGFueSwgY29sdW1uOiBhbnkpIHtcbiAgICB2YXIgaXNDaGVja2VkID0gcm93LnZhbHVlID09IGNvbHVtbi52YWx1ZTtcbiAgICB2YXIgaXNEaXNhYmxlZCA9IHRoaXMuaXNSZWFkT25seTtcbiAgICB2YXIgYWxsb3dIb3ZlciA9ICFpc0NoZWNrZWQgJiYgIWlzRGlzYWJsZWQ7XG4gICAgdmFyIGNlbGxEaXNhYmxlZENsYXNzID0gdGhpcy5oYXNDZWxsVGV4dFxuICAgICAgPyB0aGlzLmNzc0NsYXNzZXMuY2VsbFRleHREaXNhYmxlZFxuICAgICAgOiB0aGlzLmNzc0NsYXNzZXMuaXRlbURpc2FibGVkO1xuXG4gICAgdmFyIGNlbGxTZWxlY3RlZENsYXNzID0gdGhpcy5oYXNDZWxsVGV4dFxuICAgICAgPyB0aGlzLmNzc0NsYXNzZXMuY2VsbFRleHRTZWxlY3RlZFxuICAgICAgOiB0aGlzLmNzc0NsYXNzZXMuaXRlbUNoZWNrZWQ7XG5cbiAgICB2YXIgaXRlbUhvdmVyQ2xhc3MgPSAhdGhpcy5oYXNDZWxsVGV4dCA/IHRoaXMuY3NzQ2xhc3Nlcy5pdGVtSG92ZXIgOiBcIlwiO1xuXG4gICAgdmFyIGNlbGxDbGFzcyA9IHRoaXMuaGFzQ2VsbFRleHRcbiAgICAgID8gdGhpcy5jc3NDbGFzc2VzLmNlbGxUZXh0XG4gICAgICA6IHRoaXMuY3NzQ2xhc3Nlcy5sYWJlbDtcblxuICAgIGxldCBpdGVtQ2xhc3MgPVxuICAgICAgdGhpcy5oYXNDZWxsVGV4dCAmJiAhIXRoaXMuY3NzQ2xhc3Nlcy5jZWxsXG4gICAgICAgID8gdGhpcy5jc3NDbGFzc2VzLmNlbGwgKyBcIiBcIlxuICAgICAgICA6IFwiXCI7XG4gICAgaXRlbUNsYXNzICs9XG4gICAgICBjZWxsQ2xhc3MgK1xuICAgICAgKGlzQ2hlY2tlZCA/IFwiIFwiICsgY2VsbFNlbGVjdGVkQ2xhc3MgOiBcIlwiKSArXG4gICAgICAoaXNEaXNhYmxlZCA/IFwiIFwiICsgY2VsbERpc2FibGVkQ2xhc3MgOiBcIlwiKSArXG4gICAgICAoYWxsb3dIb3ZlciA/IFwiIFwiICsgaXRlbUhvdmVyQ2xhc3MgOiBcIlwiKTtcbiAgICByZXR1cm4gaXRlbUNsYXNzO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFF1aXpRdWVzdGlvbkNvdW50KCkge1xuICAgIHZhciByZXMgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIXRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMuY29ycmVjdEFuc3dlclt0aGlzLnJvd3NbaV0udmFsdWVdKSkgcmVzKys7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENvcnJlY3RBbnN3ZXJDb3VudCgpOiBudW1iZXIge1xuICAgIHZhciByZXMgPSAwO1xuICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByb3cgPSB0aGlzLnJvd3NbaV0udmFsdWU7XG4gICAgICBpZiAoXG4gICAgICAgICF0aGlzLmlzVmFsdWVFbXB0eSh2YWx1ZVtyb3ddKSAmJlxuICAgICAgICBIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHModGhpcy5jb3JyZWN0QW5zd2VyW3Jvd10sIHZhbHVlW3Jvd10pXG4gICAgICApXG4gICAgICAgIHJlcysrO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFZpc2libGVSb3dzKCk6IEFycmF5PE1hdHJpeFJvd01vZGVsPiB7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheTxNYXRyaXhSb3dNb2RlbD4oKTtcbiAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcbiAgICBpZiAoIXZhbCkgdmFsID0ge307XG4gICAgdmFyIHJvd3MgPSAhIXRoaXMuZmlsdGVyZWRSb3dzID8gdGhpcy5maWx0ZXJlZFJvd3MgOiB0aGlzLnJvd3M7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcm93ID0gcm93c1tpXTtcbiAgICAgIGlmICh0aGlzLmlzVmFsdWVFbXB0eShyb3cudmFsdWUpKSBjb250aW51ZTtcbiAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICB0aGlzLmNyZWF0ZU1hdHJpeFJvdyhcbiAgICAgICAgICByb3csXG4gICAgICAgICAgdGhpcy5pZCArIFwiX1wiICsgcm93LnZhbHVlLnRvU3RyaW5nKCkucmVwbGFjZSgvXFxzL2csIFwiX1wiKSxcbiAgICAgICAgICB2YWxbcm93LnZhbHVlXVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAocmVzdWx0Lmxlbmd0aCA9PSAwICYmICF0aGlzLmZpbHRlcmVkUm93cykge1xuICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgIHRoaXMuY3JlYXRlTWF0cml4Um93KFxuICAgICAgICAgIG5ldyBJdGVtVmFsdWUobnVsbCksXG4gICAgICAgICAgdGhpcy5uYW1lLnJlcGxhY2UoL1xccy9nLCBcIl9cIiksXG4gICAgICAgICAgdmFsXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MgPSByZXN1bHQ7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBwcm90ZWN0ZWQgc29ydFZpc2libGVSb3dzKFxuICAgIGFycmF5OiBBcnJheTxNYXRyaXhSb3dNb2RlbD5cbiAgKTogQXJyYXk8TWF0cml4Um93TW9kZWw+IHtcbiAgICB2YXIgb3JkZXIgPSB0aGlzLnJvd3NPcmRlci50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChvcmRlciA9PT0gXCJyYW5kb21cIilcbiAgICAgIHJldHVybiBIZWxwZXJzLnJhbmRvbWl6ZUFycmF5PE1hdHJpeFJvd01vZGVsPihhcnJheSk7XG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG4gIGVuZExvYWRpbmdGcm9tSnNvbigpIHtcbiAgICBzdXBlci5lbmRMb2FkaW5nRnJvbUpzb24oKTtcbiAgICB0aGlzLnJvd3MgPSB0aGlzLnNvcnRWaXNpYmxlUm93cyh0aGlzLnJvd3MpO1xuICAgIHRoaXMudXBkYXRlVmlzaWJpbGl0eUJhc2VkT25Sb3dzKCk7XG4gIH1cbiAgcHJvdGVjdGVkIHByb2Nlc3NSb3dzT25TZXQobmV3Um93czogQXJyYXk8YW55Pikge1xuICAgIHJldHVybiB0aGlzLnNvcnRWaXNpYmxlUm93cyhuZXdSb3dzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIHZpc2libGUgcm93cyBhcyBtb2RlbCBvYmplY3RzLlxuICAgKiBAc2VlIHJvd3NWaXNpYmxlSWZcbiAgICovXG4gIHB1YmxpYyBnZXQgdmlzaWJsZVJvd3MoKTogQXJyYXk8TWF0cml4Um93TW9kZWw+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRWaXNpYmxlUm93cygpO1xuICB9XG4gIHB1YmxpYyBnZXQgY2VsbHMoKTogTWF0cml4Q2VsbHMge1xuICAgIHJldHVybiB0aGlzLmNlbGxzVmFsdWU7XG4gIH1cbiAgcHVibGljIHNldCBjZWxscyh2YWx1ZTogTWF0cml4Q2VsbHMpIHtcbiAgICB0aGlzLmNlbGxzLnNldEpzb24odmFsdWUgJiYgdmFsdWUuZ2V0SnNvbiA/IHZhbHVlLmdldEpzb24oKSA6IG51bGwpO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzQ2VsbFRleHQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmNlbGxzLmlzRW1wdHk7XG4gIH1cbiAgcHVibGljIHNldENlbGxUZXh0KHJvdzogYW55LCBjb2x1bW46IGFueSwgdmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLmNlbGxzLnNldENlbGxUZXh0KHJvdywgY29sdW1uLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXRDZWxsVGV4dChyb3c6IGFueSwgY29sdW1uOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNlbGxzLmdldENlbGxUZXh0KHJvdywgY29sdW1uKTtcbiAgfVxuICBwdWJsaWMgc2V0RGVmYXVsdENlbGxUZXh0KGNvbHVtbjogYW55LCB2YWw6IHN0cmluZykge1xuICAgIHRoaXMuY2VsbHMuc2V0RGVmYXVsdENlbGxUZXh0KGNvbHVtbiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0RGVmYXVsdENlbGxUZXh0KGNvbHVtbjogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jZWxscy5nZXREZWZhdWx0Q2VsbFRleHQoY29sdW1uKTtcbiAgfVxuICBwdWJsaWMgZ2V0Q2VsbERpc3BsYXlUZXh0KHJvdzogYW55LCBjb2x1bW46IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY2VsbHMuZ2V0Q2VsbERpc3BsYXlUZXh0KHJvdywgY29sdW1uKTtcbiAgfVxuICBwcml2YXRlIGVtcHR5TG9jYWxpemFibGVTdHJpbmcgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XG4gIHB1YmxpYyBnZXRDZWxsRGlzcGxheUxvY1RleHQocm93OiBhbnksIGNvbHVtbjogYW55KTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHZhciBsb2MgPSB0aGlzLmNlbGxzLmdldENlbGxEaXNwbGF5TG9jVGV4dChyb3csIGNvbHVtbik7XG4gICAgcmV0dXJuIGxvYyA/IGxvYyA6IHRoaXMuZW1wdHlMb2NhbGl6YWJsZVN0cmluZztcbiAgfVxuICBzdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNWYWx1ZXNJbkFsbFJvd3MoKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25DaGVja0ZvckVycm9ycyhcbiAgICBlcnJvcnM6IEFycmF5PFN1cnZleUVycm9yPixcbiAgICBpc09uVmFsdWVDaGFuZ2VkOiBib29sZWFuXG4gICkge1xuICAgIHN1cGVyLm9uQ2hlY2tGb3JFcnJvcnMoZXJyb3JzLCBpc09uVmFsdWVDaGFuZ2VkKTtcbiAgICBpZiAoXG4gICAgICAoIWlzT25WYWx1ZUNoYW5nZWQgfHwgdGhpcy5lcnJvcnMubGVuZ3RoID4gMCkgJiZcbiAgICAgIHRoaXMuaGFzRXJyb3JJblJvd3MoKVxuICAgICkge1xuICAgICAgZXJyb3JzLnB1c2gobmV3IFJlcXVpcmVkSW5BbGxSb3dzRXJyb3IobnVsbCwgdGhpcykpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGhhc0Vycm9ySW5Sb3dzKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5pc0FsbFJvd1JlcXVpcmVkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICF0aGlzLmhhc1ZhbHVlc0luQWxsUm93cygpO1xuICB9XG4gIHByaXZhdGUgaGFzVmFsdWVzSW5BbGxSb3dzKCk6IGJvb2xlYW4ge1xuICAgIHZhciByb3dzID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cztcbiAgICBpZiAoIXJvd3MpIHJvd3MgPSB0aGlzLnZpc2libGVSb3dzO1xuICAgIGlmICghcm93cykgcmV0dXJuIHRydWU7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5pc1ZhbHVlRW1wdHkocm93c1tpXS52YWx1ZSkpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJvdGVjdGVkIGdldElzQW5zd2VyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN1cGVyLmdldElzQW5zd2VyZWQoKSAmJiB0aGlzLmhhc1ZhbHVlc0luQWxsUm93cygpO1xuICB9XG4gIHByaXZhdGUgY3JlYXRlTWF0cml4Um93KFxuICAgIGl0ZW06IEl0ZW1WYWx1ZSxcbiAgICBmdWxsTmFtZTogc3RyaW5nLFxuICAgIHZhbHVlOiBhbnlcbiAgKTogTWF0cml4Um93TW9kZWwge1xuICAgIHZhciByb3cgPSBuZXcgTWF0cml4Um93TW9kZWwoaXRlbSwgZnVsbE5hbWUsIHRoaXMsIHZhbHVlKTtcbiAgICB0aGlzLm9uTWF0cml4Um93Q3JlYXRlZChyb3cpO1xuICAgIHJldHVybiByb3c7XG4gIH1cbiAgcHJvdGVjdGVkIG9uTWF0cml4Um93Q3JlYXRlZChyb3c6IE1hdHJpeFJvd01vZGVsKSB7fVxuICBwcm90ZWN0ZWQgc2V0UXVlc3Rpb25WYWx1ZShuZXdWYWx1ZTogYW55LCB1cGRhdGVJc0Fuc3dlcmVkOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIHN1cGVyLnNldFF1ZXN0aW9uVmFsdWUobmV3VmFsdWUsIHRoaXMuaXNSb3dDaGFuZ2luZyB8fCB1cGRhdGVJc0Fuc3dlcmVkKTtcbiAgICBpZiAoIXRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MgfHwgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5sZW5ndGggPT0gMClcbiAgICAgIHJldHVybjtcbiAgICB0aGlzLmlzUm93Q2hhbmdpbmcgPSB0cnVlO1xuICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xuICAgIGlmICghdmFsKSB2YWwgPSB7fTtcbiAgICBpZiAodGhpcy5yb3dzLmxlbmd0aCA9PSAwKSB7XG4gICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzWzBdLnZhbHVlID0gdmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHJvdyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3NbaV07XG4gICAgICAgIHZhciByb3dWYWwgPSB2YWxbcm93Lm5hbWVdO1xuICAgICAgICBpZiAodGhpcy5pc1ZhbHVlRW1wdHkocm93VmFsKSkgcm93VmFsID0gbnVsbDtcbiAgICAgICAgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1tpXS52YWx1ZSA9IHJvd1ZhbDtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy51cGRhdGVJc0Fuc3dlcmVkKCk7XG4gICAgdGhpcy5pc1Jvd0NoYW5naW5nID0gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERpc3BsYXlWYWx1ZUNvcmUoa2V5c0FzVGV4dDogYm9vbGVhbiwgdmFsdWU6IGFueSk6IGFueSB7XG4gICAgdmFyIHJlczogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgICB2YXIgbmV3S2V5ID0ga2V5c0FzVGV4dFxuICAgICAgICA/IEl0ZW1WYWx1ZS5nZXRUZXh0T3JIdG1sQnlWYWx1ZSh0aGlzLnJvd3MsIGtleSlcbiAgICAgICAgOiBrZXk7XG4gICAgICBpZiAoIW5ld0tleSkgbmV3S2V5ID0ga2V5O1xuICAgICAgdmFyIG5ld1ZhbHVlID0gSXRlbVZhbHVlLmdldFRleHRPckh0bWxCeVZhbHVlKHRoaXMuY29sdW1ucywgdmFsdWVba2V5XSk7XG4gICAgICBpZiAoIW5ld1ZhbHVlKSBuZXdWYWx1ZSA9IHZhbHVlW2tleV07XG4gICAgICByZXNbbmV3S2V5XSA9IG5ld1ZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBnZXRQbGFpbkRhdGEoXG4gICAgb3B0aW9uczoge1xuICAgICAgaW5jbHVkZUVtcHR5PzogYm9vbGVhbjtcbiAgICAgIGNhbGN1bGF0aW9ucz86IEFycmF5PHtcbiAgICAgICAgcHJvcGVydHlOYW1lOiBzdHJpbmc7XG4gICAgICB9PjtcbiAgICB9ID0ge1xuICAgICAgaW5jbHVkZUVtcHR5OiB0cnVlLFxuICAgIH1cbiAgKSB7XG4gICAgdmFyIHF1ZXN0aW9uUGxhaW5EYXRhID0gc3VwZXIuZ2V0UGxhaW5EYXRhKG9wdGlvbnMpO1xuICAgIGlmICghIXF1ZXN0aW9uUGxhaW5EYXRhKSB7XG4gICAgICB2YXIgdmFsdWVzID0gdGhpcy5jcmVhdGVWYWx1ZUNvcHkoKTtcbiAgICAgIHF1ZXN0aW9uUGxhaW5EYXRhLmlzTm9kZSA9IHRydWU7XG4gICAgICBxdWVzdGlvblBsYWluRGF0YS5kYXRhID0gT2JqZWN0LmtleXModmFsdWVzIHx8IHt9KS5tYXAoKHJvd05hbWUpID0+IHtcbiAgICAgICAgdmFyIHJvdyA9IHRoaXMucm93cy5maWx0ZXIoXG4gICAgICAgICAgKHI6IE1hdHJpeFJvd01vZGVsKSA9PiByLnZhbHVlID09PSByb3dOYW1lXG4gICAgICAgIClbMF07XG4gICAgICAgIHZhciByb3dEYXRhSXRlbSA9IDxhbnk+e1xuICAgICAgICAgIG5hbWU6IHJvd05hbWUsXG4gICAgICAgICAgdGl0bGU6ICEhcm93ID8gcm93LnRleHQgOiBcInJvd1wiLFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZXNbcm93TmFtZV0sXG4gICAgICAgICAgZGlzcGxheVZhbHVlOiBJdGVtVmFsdWUuZ2V0VGV4dE9ySHRtbEJ5VmFsdWUoXG4gICAgICAgICAgICB0aGlzLnZpc2libGVDb2x1bW5zLFxuICAgICAgICAgICAgdmFsdWVzW3Jvd05hbWVdXG4gICAgICAgICAgKSxcbiAgICAgICAgICBnZXRTdHJpbmc6ICh2YWw6IGFueSkgPT5cbiAgICAgICAgICAgIHR5cGVvZiB2YWwgPT09IFwib2JqZWN0XCIgPyBKU09OLnN0cmluZ2lmeSh2YWwpIDogdmFsLFxuICAgICAgICAgIGlzTm9kZTogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICAgIHZhciBpdGVtID0gSXRlbVZhbHVlLmdldEl0ZW1CeVZhbHVlKFxuICAgICAgICAgIHRoaXMudmlzaWJsZUNvbHVtbnMsXG4gICAgICAgICAgdmFsdWVzW3Jvd05hbWVdXG4gICAgICAgICk7XG4gICAgICAgIGlmICghIWl0ZW0pIHtcbiAgICAgICAgICAob3B0aW9ucy5jYWxjdWxhdGlvbnMgfHwgW10pLmZvckVhY2goKGNhbGN1bGF0aW9uKSA9PiB7XG4gICAgICAgICAgICByb3dEYXRhSXRlbVtjYWxjdWxhdGlvbi5wcm9wZXJ0eU5hbWVdID1cbiAgICAgICAgICAgICAgaXRlbVtjYWxjdWxhdGlvbi5wcm9wZXJ0eU5hbWVdO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByb3dEYXRhSXRlbTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcXVlc3Rpb25QbGFpbkRhdGE7XG4gIH1cbiAgcHVibGljIGFkZENvbmRpdGlvbk9iamVjdHNCeUNvbnRleHQoXG4gICAgb2JqZWN0czogQXJyYXk8SUNvbmRpdGlvbk9iamVjdD4sXG4gICAgY29udGV4dDogYW55XG4gICkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcm93ID0gdGhpcy5yb3dzW2ldO1xuICAgICAgaWYgKCEhcm93LnZhbHVlKSB7XG4gICAgICAgIG9iamVjdHMucHVzaCh7XG4gICAgICAgICAgbmFtZTogdGhpcy5nZXRWYWx1ZU5hbWUoKSArIFwiLlwiICsgcm93LnZhbHVlLFxuICAgICAgICAgIHRleHQ6IHRoaXMucHJvY2Vzc2VkVGl0bGUgKyBcIi5cIiArIHJvdy5jYWxjdWxhdGVkVGV4dCxcbiAgICAgICAgICBxdWVzdGlvbjogdGhpcyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXRDb25kaXRpb25Kc29uKG9wZXJhdG9yOiBzdHJpbmcgPSBudWxsLCBwYXRoOiBzdHJpbmcgPSBudWxsKTogYW55IHtcbiAgICBpZiAoIXBhdGgpIHJldHVybiBzdXBlci5nZXRDb25kaXRpb25Kc29uKCk7XG4gICAgdmFyIHF1ZXN0aW9uID0gbmV3IFF1ZXN0aW9uRHJvcGRvd25Nb2RlbChwYXRoKTtcbiAgICBxdWVzdGlvbi5jaG9pY2VzID0gdGhpcy5jb2x1bW5zO1xuICAgIHZhciBqc29uID0gbmV3IEpzb25PYmplY3QoKS50b0pzb25PYmplY3QocXVlc3Rpb24pO1xuICAgIGpzb25bXCJ0eXBlXCJdID0gcXVlc3Rpb24uZ2V0VHlwZSgpO1xuICAgIHJldHVybiBqc29uO1xuICB9XG4gIHB1YmxpYyBjbGVhclZhbHVlSWZJbnZpc2libGUoKSB7XG4gICAgc3VwZXIuY2xlYXJWYWx1ZUlmSW52aXNpYmxlKCk7XG4gICAgaWYgKHRoaXMuaGFzUm93cykge1xuICAgICAgdGhpcy5jbGVhckludmlzaWJsZVZhbHVlc0luUm93cygpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Rmlyc3RJbnB1dEVsZW1lbnRJZCgpOiBzdHJpbmcge1xuICAgIHZhciByb3dzID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cztcbiAgICBpZiAoIXJvd3MpIHJvd3MgPSB0aGlzLnZpc2libGVSb3dzO1xuICAgIGlmIChyb3dzLmxlbmd0aCA+IDAgJiYgdGhpcy52aXNpYmxlQ29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnB1dElkICsgXCJfXCIgKyByb3dzWzBdLm5hbWUgKyBcIl9cIiArIDA7XG4gICAgfVxuICAgIHJldHVybiBzdXBlci5nZXRGaXJzdElucHV0RWxlbWVudElkKCk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uUm93c0NoYW5nZWQoKSB7XG4gICAgdGhpcy51cGRhdGVWaXNpYmlsaXR5QmFzZWRPblJvd3MoKTtcbiAgICBzdXBlci5vblJvd3NDaGFuZ2VkKCk7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVWaXNpYmlsaXR5QmFzZWRPblJvd3MoKSB7XG4gICAgaWYgKHRoaXMuaGlkZUlmUm93c0VtcHR5KSB7XG4gICAgICB0aGlzLnZpc2libGUgPVxuICAgICAgICB0aGlzLnJvd3MubGVuZ3RoID4gMCAmJlxuICAgICAgICAoIXRoaXMuZmlsdGVyZWRSb3dzIHx8IHRoaXMuZmlsdGVyZWRSb3dzLmxlbmd0aCA+IDApO1xuICAgIH1cbiAgfVxuICAvL0lNYXRyaXhEYXRhXG4gIG9uTWF0cml4Um93Q2hhbmdlZChyb3c6IE1hdHJpeFJvd01vZGVsKSB7XG4gICAgaWYgKHRoaXMuaXNSb3dDaGFuZ2luZykgcmV0dXJuO1xuICAgIHRoaXMuaXNSb3dDaGFuZ2luZyA9IHRydWU7XG4gICAgaWYgKCF0aGlzLmhhc1Jvd3MpIHtcbiAgICAgIHRoaXMuc2V0TmV3VmFsdWUocm93LnZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG5ld1ZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgIGlmICghbmV3VmFsdWUpIHtcbiAgICAgICAgbmV3VmFsdWUgPSB7fTtcbiAgICAgIH1cbiAgICAgIG5ld1ZhbHVlW3Jvdy5uYW1lXSA9IHJvdy52YWx1ZTtcbiAgICAgIHRoaXMuc2V0TmV3VmFsdWUobmV3VmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLmlzUm93Q2hhbmdpbmcgPSBmYWxzZTtcbiAgfVxuICBnZXRDb3JyZWN0ZWRSb3dWYWx1ZSh2YWx1ZTogYW55KTogYW55IHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHZhbHVlID09PSB0aGlzLmNvbHVtbnNbaV0udmFsdWUpIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHModmFsdWUsIHRoaXMuY29sdW1uc1tpXS52YWx1ZSkpXG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbnNbaV0udmFsdWU7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U2VhcmNoYWJsZUl0ZW1WYWx1ZUtleXMoa2V5czogQXJyYXk8c3RyaW5nPikge1xuICAgIGtleXMucHVzaChcImNvbHVtbnNcIik7XG4gICAga2V5cy5wdXNoKFwicm93c1wiKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IFN1cnZleU1vZGVsKCkge1xuICAgIHJldHVybiB0aGlzLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbDtcbiAgfVxuICBwdWJsaWMgZ2V0Q29sdW1uSGVhZGVyV3JhcHBlckNvbXBvbmVudE5hbWUoY2VsbDogSXRlbVZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuU3VydmV5TW9kZWwuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnROYW1lKFxuICAgICAgeyBjb2x1bW46IGNlbGwgfSxcbiAgICAgIFwiY29sdW1uLWhlYWRlclwiXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0Q29sdW1uSGVhZGVyV3JhcHBlckNvbXBvbmVudERhdGEoY2VsbDogSXRlbVZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuU3VydmV5TW9kZWwuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnREYXRhKFxuICAgICAgeyBjb2x1bW46IGNlbGwgfSxcbiAgICAgIFwiY29sdW1uLWhlYWRlclwiXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0Um93SGVhZGVyV3JhcHBlckNvbXBvbmVudE5hbWUoY2VsbDogSXRlbVZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuU3VydmV5TW9kZWwuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnROYW1lKFxuICAgICAgeyByb3c6IGNlbGwgfSxcbiAgICAgIFwicm93LWhlYWRlclwiXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0Um93SGVhZGVyV3JhcHBlckNvbXBvbmVudERhdGEoY2VsbDogSXRlbVZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuU3VydmV5TW9kZWwuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnREYXRhKFxuICAgICAgeyByb3c6IGNlbGwgfSxcbiAgICAgIFwicm93LWhlYWRlclwiXG4gICAgKTtcbiAgfVxufVxuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcIm1hdHJpeFwiLFxuICBbXG4gICAge1xuICAgICAgbmFtZTogXCJjb2x1bW5zOml0ZW12YWx1ZVtdXCIsXG4gICAgICBiYXNlVmFsdWU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm1hdHJpeF9jb2x1bW5cIik7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJyb3dzOml0ZW12YWx1ZVtdXCIsXG4gICAgICBiYXNlVmFsdWU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm1hdHJpeF9yb3dcIik7XG4gICAgICB9LFxuICAgIH0sXG4gICAgeyBuYW1lOiBcImNlbGxzOmNlbGxzXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJjZWxsc1wiIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJyb3dzT3JkZXJcIixcbiAgICAgIGRlZmF1bHQ6IFwiaW5pdGlhbFwiLFxuICAgICAgY2hvaWNlczogW1wiaW5pdGlhbFwiLCBcInJhbmRvbVwiXSxcbiAgICB9LFxuICAgIFwiaXNBbGxSb3dSZXF1aXJlZDpib29sZWFuXCIsXG4gICAgXCJoaWRlSWZSb3dzRW1wdHk6Ym9vbGVhblwiLFxuICBdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uTWF0cml4TW9kZWwoXCJcIik7XG4gIH0sXG4gIFwibWF0cml4YmFzZVwiXG4pO1xuXG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcIm1hdHJpeFwiLCAobmFtZSkgPT4ge1xuICB2YXIgcSA9IG5ldyBRdWVzdGlvbk1hdHJpeE1vZGVsKG5hbWUpO1xuICBxLnJvd3MgPSBRdWVzdGlvbkZhY3RvcnkuRGVmYXVsdFJvd3M7XG4gIHEuY29sdW1ucyA9IFF1ZXN0aW9uRmFjdG9yeS5EZWZhdWx0Q29sdW1zO1xuICByZXR1cm4gcTtcbn0pO1xuIiwiaW1wb3J0IHtcbiAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSxcbiAgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gIElNYXRyaXhEcm9wZG93bkRhdGEsXG59IGZyb20gXCIuL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duYmFzZVwiO1xuaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IEl0ZW1WYWx1ZSB9IGZyb20gXCIuL2l0ZW12YWx1ZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XG5pbXBvcnQgeyBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5pbXBvcnQgeyBJQ29uZGl0aW9uT2JqZWN0IH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcblxuZXhwb3J0IGNsYXNzIE1hdHJpeERyb3Bkb3duUm93TW9kZWwgZXh0ZW5kcyBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSB7XG4gIHByaXZhdGUgaXRlbTogSXRlbVZhbHVlO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbmFtZTogc3RyaW5nLFxuICAgIGl0ZW06IEl0ZW1WYWx1ZSxcbiAgICBkYXRhOiBJTWF0cml4RHJvcGRvd25EYXRhLFxuICAgIHZhbHVlOiBhbnlcbiAgKSB7XG4gICAgc3VwZXIoZGF0YSwgdmFsdWUpO1xuICAgIHRoaXMuaXRlbSA9IGl0ZW07XG4gICAgdGhpcy5idWlsZENlbGxzKHZhbHVlKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHJvd05hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9XG4gIHB1YmxpYyBnZXQgdGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLml0ZW0udGV4dDtcbiAgfVxuICBwdWJsaWMgZ2V0IGxvY1RleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLml0ZW0ubG9jVGV4dDtcbiAgfVxufVxuLyoqXG4gKiBBIE1vZGVsIGZvciBhIG1hdHJpeCBkcm9wZG93biBxdWVzdGlvbi4gWW91IG1heSB1c2UgYSBkcm9wZG93biwgY2hlY2tib3gsIHJhZGlvZ3JvdXAsIHRleHQgYW5kIGNvbW1lbnQgcXVlc3Rpb25zIGFzIGEgY2VsbCBlZGl0b3JzLlxuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsIGV4dGVuZHMgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZVxuICBpbXBsZW1lbnRzIElNYXRyaXhEcm9wZG93bkRhdGEge1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwidG90YWxUZXh0XCIsIHRoaXMsIHRydWUpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFwicm93c1wiLCBmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYuY2xlYXJHZW5lcmF0ZWRSb3dzKCk7XG4gICAgICBzZWxmLnJlc2V0UmVuZGVyZWRUYWJsZSgpO1xuICAgICAgc2VsZi5maWx0ZXJJdGVtcygpO1xuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwibWF0cml4ZHJvcGRvd25cIjtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gc2hvdyBpdCBvbiB0aGUgZmlyc3QgY29sdW1uIGZvciB0aGUgdG90YWwgcm93LlxuICAgKi9cbiAgcHVibGljIGdldCB0b3RhbFRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwidG90YWxUZXh0XCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdG90YWxUZXh0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJ0b3RhbFRleHRcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGxvY1RvdGFsVGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJ0b3RhbFRleHRcIik7XG4gIH1cbiAgcHVibGljIGdldEZvb3RlclRleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmxvY1RvdGFsVGV4dDtcbiAgfVxuICAvKipcbiAgICogVGhlIGNvbHVtbiB3aWR0aCBmb3IgdGhlIGZpcnN0IGNvbHVtbiwgcm93IHRpdGxlIGNvbHVtbi5cbiAgICovXG4gIHB1YmxpYyBnZXQgcm93VGl0bGVXaWR0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyb3dUaXRsZVdpZHRoXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcm93VGl0bGVXaWR0aCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJvd1RpdGxlV2lkdGhcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0Um93VGl0bGVXaWR0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJvd1RpdGxlV2lkdGg7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERpc3BsYXlWYWx1ZUNvcmUoa2V5c0FzVGV4dDogYm9vbGVhbiwgdmFsdWU6IGFueSk6IGFueSB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIHZhbHVlO1xuICAgIHZhciByb3dzID0gdGhpcy52aXNpYmxlUm93cztcbiAgICB2YXIgcmVzID0ge307XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcm93VmFsdWUgPSB0aGlzLnJvd3NbaV0udmFsdWU7XG4gICAgICB2YXIgdmFsID0gdmFsdWVbcm93VmFsdWVdO1xuICAgICAgaWYgKCF2YWwpIGNvbnRpbnVlO1xuICAgICAgaWYgKGtleXNBc1RleHQpIHtcbiAgICAgICAgdmFyIGRpc3BsYXlSb3dWYWx1ZSA9IEl0ZW1WYWx1ZS5nZXRUZXh0T3JIdG1sQnlWYWx1ZShcbiAgICAgICAgICB0aGlzLnJvd3MsXG4gICAgICAgICAgcm93VmFsdWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCEhZGlzcGxheVJvd1ZhbHVlKSB7XG4gICAgICAgICAgcm93VmFsdWUgPSBkaXNwbGF5Um93VmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgICg8YW55PnJlcylbcm93VmFsdWVdID0gdGhpcy5nZXRSb3dEaXNwbGF5VmFsdWUoa2V5c0FzVGV4dCwgcm93c1tpXSwgdmFsKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgYWRkQ29uZGl0aW9uT2JqZWN0c0J5Q29udGV4dChcbiAgICBvYmplY3RzOiBBcnJheTxJQ29uZGl0aW9uT2JqZWN0PixcbiAgICBjb250ZXh0OiBhbnlcbiAgKSB7XG4gICAgdmFyIGhhc0NvbnRleHQgPSAhIWNvbnRleHQgPyB0aGlzLmNvbHVtbnMuaW5kZXhPZihjb250ZXh0KSA+IC0xIDogZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByb3cgPSB0aGlzLnJvd3NbaV07XG4gICAgICBpZiAoIXJvdy52YWx1ZSkgY29udGludWU7XG4gICAgICB2YXIgcHJlZml4TmFtZSA9IHRoaXMuZ2V0VmFsdWVOYW1lKCkgKyBcIi5cIiArIHJvdy52YWx1ZSArIFwiLlwiO1xuICAgICAgdmFyIHByZWZpeFRpdGxlID0gdGhpcy5wcm9jZXNzZWRUaXRsZSArIFwiLlwiICsgcm93LmNhbGN1bGF0ZWRUZXh0ICsgXCIuXCI7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuY29sdW1ucy5sZW5ndGg7IGorKykge1xuICAgICAgICB2YXIgY29sdW1uID0gdGhpcy5jb2x1bW5zW2pdO1xuICAgICAgICBvYmplY3RzLnB1c2goe1xuICAgICAgICAgIG5hbWU6IHByZWZpeE5hbWUgKyBjb2x1bW4ubmFtZSxcbiAgICAgICAgICB0ZXh0OiBwcmVmaXhUaXRsZSArIGNvbHVtbi5mdWxsVGl0bGUsXG4gICAgICAgICAgcXVlc3Rpb246IHRoaXMsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaGFzQ29udGV4dCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMuY29sdW1uc1tpXTtcbiAgICAgICAgaWYgKGNvbHVtbiA9PSBjb250ZXh0KSBjb250aW51ZTtcbiAgICAgICAgb2JqZWN0cy5wdXNoKHtcbiAgICAgICAgICBuYW1lOiBcInJvdy5cIiArIGNvbHVtbi5uYW1lLFxuICAgICAgICAgIHRleHQ6IFwicm93LlwiICsgY29sdW1uLmZ1bGxUaXRsZSxcbiAgICAgICAgICBxdWVzdGlvbjogdGhpcyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyBjbGVhckluY29ycmVjdFZhbHVlcygpIHtcbiAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcbiAgICBpZiAoIXZhbCkgcmV0dXJuO1xuICAgIHZhciBuZXdWYWwgPSBudWxsO1xuICAgIHZhciBpc0NoYW5nZWQgPSBmYWxzZTtcbiAgICB2YXIgcm93cyA9ICEhdGhpcy5maWx0ZXJlZFJvd3MgPyB0aGlzLmZpbHRlcmVkUm93cyA6IHRoaXMucm93cztcbiAgICBmb3IgKHZhciBrZXkgaW4gdmFsKSB7XG4gICAgICBpZiAoSXRlbVZhbHVlLmdldEl0ZW1CeVZhbHVlKHJvd3MsIGtleSkpIHtcbiAgICAgICAgaWYgKG5ld1ZhbCA9PSBudWxsKSBuZXdWYWwgPSB7fTtcbiAgICAgICAgKDxhbnk+bmV3VmFsKVtrZXldID0gdmFsW2tleV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNDaGFuZ2VkKSB7XG4gICAgICB0aGlzLnZhbHVlID0gbmV3VmFsO1xuICAgIH1cbiAgICBzdXBlci5jbGVhckluY29ycmVjdFZhbHVlcygpO1xuICB9XG4gIHB1YmxpYyBjbGVhclZhbHVlSWZJbnZpc2libGUoKSB7XG4gICAgc3VwZXIuY2xlYXJWYWx1ZUlmSW52aXNpYmxlKCk7XG4gICAgdGhpcy5jbGVhckludmlzaWJsZVZhbHVlc0luUm93cygpO1xuICB9XG4gIHByb3RlY3RlZCBnZW5lcmF0ZVJvd3MoKTogQXJyYXk8TWF0cml4RHJvcGRvd25Sb3dNb2RlbD4ge1xuICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXk8TWF0cml4RHJvcGRvd25Sb3dNb2RlbD4oKTtcbiAgICB2YXIgcm93cyA9ICEhdGhpcy5maWx0ZXJlZFJvd3MgPyB0aGlzLmZpbHRlcmVkUm93cyA6IHRoaXMucm93cztcbiAgICBpZiAoIXJvd3MgfHwgcm93cy5sZW5ndGggPT09IDApIHJldHVybiByZXN1bHQ7XG4gICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XG4gICAgaWYgKCF2YWwpIHZhbCA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFyb3dzW2ldLnZhbHVlKSBjb250aW51ZTtcbiAgICAgIHJlc3VsdC5wdXNoKHRoaXMuY3JlYXRlTWF0cml4Um93KHJvd3NbaV0sIHZhbFtyb3dzW2ldLnZhbHVlXSkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVNYXRyaXhSb3coXG4gICAgaXRlbTogSXRlbVZhbHVlLFxuICAgIHZhbHVlOiBhbnlcbiAgKTogTWF0cml4RHJvcGRvd25Sb3dNb2RlbCB7XG4gICAgcmV0dXJuIG5ldyBNYXRyaXhEcm9wZG93blJvd01vZGVsKGl0ZW0udmFsdWUsIGl0ZW0sIHRoaXMsIHZhbHVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U2VhcmNoYWJsZUl0ZW1WYWx1ZUtleXMoa2V5czogQXJyYXk8c3RyaW5nPikge1xuICAgIGtleXMucHVzaChcInJvd3NcIik7XG4gIH1cbn1cblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJtYXRyaXhkcm9wZG93blwiLFxuICBbXG4gICAge1xuICAgICAgbmFtZTogXCJyb3dzOml0ZW12YWx1ZVtdXCIsXG4gICAgfSxcbiAgICBcInJvd3NWaXNpYmxlSWY6Y29uZGl0aW9uXCIsXG4gICAgXCJyb3dUaXRsZVdpZHRoXCIsXG4gICAgeyBuYW1lOiBcInRvdGFsVGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jVG90YWxUZXh0XCIgfSxcbiAgXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWwoXCJcIik7XG4gIH0sXG4gIFwibWF0cml4ZHJvcGRvd25iYXNlXCJcbik7XG5cblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwibWF0cml4ZHJvcGRvd25cIiwgKG5hbWUpID0+IHtcbiAgdmFyIHEgPSBuZXcgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsKG5hbWUpO1xuICBxLmNob2ljZXMgPSBbMSwgMiwgMywgNCwgNV07XG4gIHEucm93cyA9IFF1ZXN0aW9uRmFjdG9yeS5EZWZhdWx0Um93cztcbiAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5hZGREZWZhdWx0Q29sdW1ucyhxKTtcbiAgcmV0dXJuIHE7XG59KTtcbiIsImltcG9ydCB7XG4gIEpzb25PYmplY3QsXG4gIEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLFxuICBKc29uT2JqZWN0UHJvcGVydHksXG4gIFNlcmlhbGl6ZXIsXG59IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uTWF0cml4QmFzZU1vZGVsIH0gZnJvbSBcIi4vbWFydGl4QmFzZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgSGFzaFRhYmxlLCBIZWxwZXJzIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB7XG4gIElFbGVtZW50LFxuICBJUXVlc3Rpb24sXG4gIElTdXJ2ZXlEYXRhLFxuICBJU3VydmV5LFxuICBJU3VydmV5SW1wbCxcbiAgSVRleHRQcm9jZXNzb3IsXG4gIElQcm9ncmVzc0luZm8sXG4gIElQYW5lbCxcbiAgSVdyYXBwZXJPYmplY3QsXG59IGZyb20gXCIuL2Jhc2UtaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudCB9IGZyb20gXCIuL3N1cnZleS1lbGVtZW50XCI7XG5pbXBvcnQge1xuICBUZXh0UHJlUHJvY2Vzc29yVmFsdWUsXG4gIFF1ZXN0aW9uVGV4dFByb2Nlc3Nvcixcbn0gZnJvbSBcIi4vdGV4dFByZVByb2Nlc3NvclwiO1xuaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcIi4vaXRlbXZhbHVlXCI7XG5pbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XG5pbXBvcnQgeyBRdWVzdGlvblNlbGVjdEJhc2UgfSBmcm9tIFwiLi9xdWVzdGlvbl9iYXNlc2VsZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmltcG9ydCB7IElMb2NhbGl6YWJsZU93bmVyLCBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5pbXBvcnQgeyBTdXJ2ZXlWYWxpZGF0b3IgfSBmcm9tIFwiLi92YWxpZGF0b3JcIjtcbmltcG9ydCB7IGdldEN1cnJlY3lDb2RlcyB9IGZyb20gXCIuL3F1ZXN0aW9uX2V4cHJlc3Npb25cIjtcbmltcG9ydCB7IEZ1bmN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL2Z1bmN0aW9uc2ZhY3RvcnlcIjtcbmltcG9ydCB7IFBhbmVsTW9kZWwgfSBmcm9tIFwiLi9wYW5lbFwiO1xuaW1wb3J0IHsgc2V0dGluZ3MgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xuaW1wb3J0IHsgS2V5RHVwbGljYXRpb25FcnJvciB9IGZyb20gXCIuL2Vycm9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCIuL3N1cnZleVwiO1xuaW1wb3J0IHsgU3VydmV5RXJyb3IgfSBmcm9tIFwiLi9zdXJ2ZXktZXJyb3JcIjtcbmltcG9ydCB7IEFjdGlvbiwgSUFjdGlvbiB9IGZyb20gXCIuL2FjdGlvbnMvYWN0aW9uXCI7XG5pbXBvcnQgeyBBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lciB9IGZyb20gXCIuL2FjdGlvbnMvYWRhcHRpdmUtY29udGFpbmVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU1hdHJpeERyb3Bkb3duRGF0YSB7XG4gIHZhbHVlOiBhbnk7XG4gIG9uUm93Q2hhbmdlZChcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIGNvbHVtbk5hbWU6IHN0cmluZyxcbiAgICBuZXdSb3dWYWx1ZTogYW55LFxuICAgIGlzRGVsZXRpbmdWYWx1ZTogYm9vbGVhblxuICApOiB2b2lkO1xuICBvblJvd0NoYW5naW5nKFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gICAgY29sdW1uTmFtZTogc3RyaW5nLFxuICAgIHJvd1ZhbHVlOiBhbnlcbiAgKTogYW55O1xuICBpc1ZhbGlkYXRlT25WYWx1ZUNoYW5naW5nOiBib29sZWFuO1xuICBnZXRSb3dJbmRleChyb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlKTogbnVtYmVyO1xuICBnZXRSb3dWYWx1ZShyb3dJbmRleDogbnVtYmVyKTogYW55O1xuICBjaGVja0lmVmFsdWVJblJvd0R1cGxpY2F0ZWQoXG4gICAgY2hlY2tlZFJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gICAgY2VsbFF1ZXN0aW9uOiBRdWVzdGlvblxuICApOiBib29sZWFuO1xuICBoYXNEZXRhaWxQYW5lbChyb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlKTogYm9vbGVhbjtcbiAgZ2V0SXNEZXRhaWxQYW5lbFNob3dpbmcocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSk6IGJvb2xlYW47XG4gIHNldElzRGV0YWlsUGFuZWxTaG93aW5nKHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsIHZhbDogYm9vbGVhbik6IHZvaWQ7XG4gIGNyZWF0ZVJvd0RldGFpbFBhbmVsKHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UpOiBQYW5lbE1vZGVsO1xuICB2YWxpZGF0ZUNlbGwoXG4gICAgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgICBjb2x1bW5OYW1lOiBzdHJpbmcsXG4gICAgcm93VmFsdWU6IGFueVxuICApOiBTdXJ2ZXlFcnJvcjtcbiAgY29sdW1uczogQXJyYXk8TWF0cml4RHJvcGRvd25Db2x1bW4+O1xuICBjcmVhdGVRdWVzdGlvbihcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW5cbiAgKTogUXVlc3Rpb247XG4gIGdldExvY2FsZSgpOiBzdHJpbmc7XG4gIGdldE1hcmtkb3duSHRtbCh0ZXh0OiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHN0cmluZztcbiAgZ2V0UmVuZGVyZXIobmFtZTogc3RyaW5nKTogc3RyaW5nO1xuICBnZXRQcm9jZXNzZWRUZXh0KHRleHQ6IHN0cmluZyk6IHN0cmluZztcbiAgZ2V0U2hhcmVkUXVlc3Rpb25CeU5hbWUoXG4gICAgY29sdW1uTmFtZTogc3RyaW5nLFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2VcbiAgKTogUXVlc3Rpb247XG4gIG9uVG90YWxWYWx1ZUNoYW5nZWQoKTogYW55O1xuICBnZXRTdXJ2ZXkoKTogSVN1cnZleTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTWF0cml4Q29sdW1uT3duZXIgZXh0ZW5kcyBJTG9jYWxpemFibGVPd25lciB7XG4gIGdldFJlcXVpcmVkVGV4dCgpOiBzdHJpbmc7XG4gIG9uQ29sdW1uUHJvcGVydHlDaGFuZ2VkKFxuICAgIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4sXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG5ld1ZhbHVlOiBhbnlcbiAgKTogdm9pZDtcbiAgb25Db2x1bW5JdGVtVmFsdWVQcm9wZXJ0eUNoYW5nZWQoXG4gICAgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbixcbiAgICBwcm9wZXJ0eU5hbWU6IHN0cmluZyxcbiAgICBvYmo6IEl0ZW1WYWx1ZSxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgbmV3VmFsdWU6IGFueSxcbiAgICBvbGRWYWx1ZTogYW55XG4gICk6IHZvaWQ7XG4gIG9uU2hvd0luTXVsdGlwbGVDb2x1bW5zQ2hhbmdlZChjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKTogdm9pZDtcbiAgZ2V0Q2VsbFR5cGUoKTogc3RyaW5nO1xuICBvbkNvbHVtbkNlbGxUeXBlQ2hhbmdlZChjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKTogdm9pZDtcbn1cblxuZnVuY3Rpb24gb25VcGRhdGVTZWxlY3RCYXNlQ2VsbFF1ZXN0aW9uKFxuICBjZWxsUXVlc3Rpb246IFF1ZXN0aW9uU2VsZWN0QmFzZSxcbiAgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbixcbiAgcXVlc3Rpb246IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UsXG4gIGRhdGE6IGFueVxuKSB7XG4gIGNlbGxRdWVzdGlvbi5zdG9yZU90aGVyc0FzQ29tbWVudCA9ICEhcXVlc3Rpb25cbiAgICA/IHF1ZXN0aW9uLnN0b3JlT3RoZXJzQXNDb21tZW50XG4gICAgOiBmYWxzZTtcbiAgaWYgKFxuICAgICghY2VsbFF1ZXN0aW9uLmNob2ljZXMgfHwgY2VsbFF1ZXN0aW9uLmNob2ljZXMubGVuZ3RoID09IDApICYmXG4gICAgY2VsbFF1ZXN0aW9uLmNob2ljZXNCeVVybC5pc0VtcHR5XG4gICkge1xuICAgIGNlbGxRdWVzdGlvbi5jaG9pY2VzID0gcXVlc3Rpb24uY2hvaWNlcztcbiAgfVxuICBpZiAoIWNlbGxRdWVzdGlvbi5jaG9pY2VzQnlVcmwuaXNFbXB0eSkge1xuICAgIGNlbGxRdWVzdGlvbi5jaG9pY2VzQnlVcmwucnVuKGRhdGEuZ2V0VGV4dFByb2Nlc3NvcigpKTtcbiAgfVxufVxuZXhwb3J0IHZhciBtYXRyaXhEcm9wZG93bkNvbHVtblR5cGVzID0ge1xuICBkcm9wZG93bjoge1xuICAgIHByb3BlcnRpZXM6IFtcbiAgICAgIFwiY2hvaWNlc1wiLFxuICAgICAgXCJjaG9pY2VzT3JkZXJcIixcbiAgICAgIFwiY2hvaWNlc0J5VXJsXCIsXG4gICAgICBcIm9wdGlvbnNDYXB0aW9uXCIsXG4gICAgICBcIm90aGVyVGV4dFwiLFxuICAgICAgXCJjaG9pY2VzVmlzaWJsZUlmXCIsXG4gICAgXSxcbiAgICBvbkNlbGxRdWVzdGlvblVwZGF0ZTogKFxuICAgICAgY2VsbFF1ZXN0aW9uOiBhbnksXG4gICAgICBjb2x1bW46IGFueSxcbiAgICAgIHF1ZXN0aW9uOiBhbnksXG4gICAgICBkYXRhOiBhbnlcbiAgICApID0+IHtcbiAgICAgIG9uVXBkYXRlU2VsZWN0QmFzZUNlbGxRdWVzdGlvbihjZWxsUXVlc3Rpb24sIGNvbHVtbiwgcXVlc3Rpb24sIGRhdGEpO1xuICAgICAgaWYgKFxuICAgICAgICAhIWNlbGxRdWVzdGlvbi5sb2NPcHRpb25zQ2FwdGlvbiAmJlxuICAgICAgICBjZWxsUXVlc3Rpb24ubG9jT3B0aW9uc0NhcHRpb24uaXNFbXB0eSAmJlxuICAgICAgICAhcXVlc3Rpb24ubG9jT3B0aW9uc0NhcHRpb24uaXNFbXB0eVxuICAgICAgKSB7XG4gICAgICAgIGNlbGxRdWVzdGlvbi5vcHRpb25zQ2FwdGlvbiA9IHF1ZXN0aW9uLm9wdGlvbnNDYXB0aW9uO1xuICAgICAgfVxuICAgIH0sXG4gIH0sXG4gIGNoZWNrYm94OiB7XG4gICAgcHJvcGVydGllczogW1xuICAgICAgXCJjaG9pY2VzXCIsXG4gICAgICBcImNob2ljZXNPcmRlclwiLFxuICAgICAgXCJjaG9pY2VzQnlVcmxcIixcbiAgICAgIFwib3RoZXJUZXh0XCIsXG4gICAgICBcImNob2ljZXNWaXNpYmxlSWZcIixcbiAgICAgIFwiaGFzU2VsZWN0QWxsXCIsXG4gICAgICBcImhhc05vbmVcIixcbiAgICBdLFxuICAgIG9uQ2VsbFF1ZXN0aW9uVXBkYXRlOiAoXG4gICAgICBjZWxsUXVlc3Rpb246IGFueSxcbiAgICAgIGNvbHVtbjogYW55LFxuICAgICAgcXVlc3Rpb246IGFueSxcbiAgICAgIGRhdGE6IGFueVxuICAgICkgPT4ge1xuICAgICAgb25VcGRhdGVTZWxlY3RCYXNlQ2VsbFF1ZXN0aW9uKGNlbGxRdWVzdGlvbiwgY29sdW1uLCBxdWVzdGlvbiwgZGF0YSk7XG4gICAgICBjZWxsUXVlc3Rpb24uY29sQ291bnQgPVxuICAgICAgICBjb2x1bW4uY29sQ291bnQgPiAtMSA/IGNvbHVtbi5jb2xDb3VudCA6IHF1ZXN0aW9uLmNvbHVtbkNvbENvdW50O1xuICAgIH0sXG4gIH0sXG4gIHJhZGlvZ3JvdXA6IHtcbiAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICBcImNob2ljZXNcIixcbiAgICAgIFwiY2hvaWNlc09yZGVyXCIsXG4gICAgICBcImNob2ljZXNCeVVybFwiLFxuICAgICAgXCJvdGhlclRleHRcIixcbiAgICAgIFwiY2hvaWNlc1Zpc2libGVJZlwiLFxuICAgIF0sXG4gICAgb25DZWxsUXVlc3Rpb25VcGRhdGU6IChcbiAgICAgIGNlbGxRdWVzdGlvbjogYW55LFxuICAgICAgY29sdW1uOiBhbnksXG4gICAgICBxdWVzdGlvbjogYW55LFxuICAgICAgZGF0YTogYW55XG4gICAgKSA9PiB7XG4gICAgICBvblVwZGF0ZVNlbGVjdEJhc2VDZWxsUXVlc3Rpb24oY2VsbFF1ZXN0aW9uLCBjb2x1bW4sIHF1ZXN0aW9uLCBkYXRhKTtcbiAgICAgIGNlbGxRdWVzdGlvbi5jb2xDb3VudCA9XG4gICAgICAgIGNvbHVtbi5jb2xDb3VudCA+IC0xID8gY29sdW1uLmNvbENvdW50IDogcXVlc3Rpb24uY29sdW1uQ29sQ291bnQ7XG4gICAgfSxcbiAgfSxcbiAgdGV4dDoge1xuICAgIHByb3BlcnRpZXM6IFtcInBsYWNlSG9sZGVyXCIsIFwiaW5wdXRUeXBlXCIsIFwibWF4TGVuZ3RoXCIsIFwibWluXCIsIFwibWF4XCIsIFwic3RlcFwiXSxcbiAgICBvbkNlbGxRdWVzdGlvblVwZGF0ZTogKFxuICAgICAgY2VsbFF1ZXN0aW9uOiBhbnksXG4gICAgICBjb2x1bW46IGFueSxcbiAgICAgIHF1ZXN0aW9uOiBhbnksXG4gICAgICBkYXRhOiBhbnlcbiAgICApID0+IHt9LFxuICB9LFxuICBjb21tZW50OiB7XG4gICAgcHJvcGVydGllczogW1wicGxhY2VIb2xkZXJcIiwgXCJyb3dzXCIsIFwibWF4TGVuZ3RoXCJdLFxuICAgIG9uQ2VsbFF1ZXN0aW9uVXBkYXRlOiAoXG4gICAgICBjZWxsUXVlc3Rpb246IGFueSxcbiAgICAgIGNvbHVtbjogYW55LFxuICAgICAgcXVlc3Rpb246IGFueSxcbiAgICAgIGRhdGE6IGFueVxuICAgICkgPT4ge30sXG4gIH0sXG4gIGJvb2xlYW46IHtcbiAgICBwcm9wZXJ0aWVzOiBbXCJyZW5kZXJBc1wiLCBcImRlZmF1bHRWYWx1ZVwiXSxcbiAgICBvbkNlbGxRdWVzdGlvblVwZGF0ZTogKFxuICAgICAgY2VsbFF1ZXN0aW9uOiBhbnksXG4gICAgICBjb2x1bW46IGFueSxcbiAgICAgIHF1ZXN0aW9uOiBhbnksXG4gICAgICBkYXRhOiBhbnlcbiAgICApID0+IHtcbiAgICAgIGNlbGxRdWVzdGlvbi5zaG93VGl0bGUgPSB0cnVlO1xuICAgICAgY2VsbFF1ZXN0aW9uLnJlbmRlckFzID0gY29sdW1uLnJlbmRlckFzO1xuICAgIH0sXG4gIH0sXG4gIGV4cHJlc3Npb246IHtcbiAgICBwcm9wZXJ0aWVzOiBbXCJleHByZXNzaW9uXCIsIFwiZGlzcGxheVN0eWxlXCIsIFwiY3VycmVuY3lcIl0sXG4gICAgb25DZWxsUXVlc3Rpb25VcGRhdGU6IChcbiAgICAgIGNlbGxRdWVzdGlvbjogYW55LFxuICAgICAgY29sdW1uOiBhbnksXG4gICAgICBxdWVzdGlvbjogYW55LFxuICAgICAgZGF0YTogYW55XG4gICAgKSA9PiB7fSxcbiAgfSxcbiAgcmF0aW5nOiB7XG4gICAgcHJvcGVydGllczogW1wicmF0ZVZhbHVlc1wiXSxcbiAgfSxcbn07XG5cbmV4cG9ydCBjbGFzcyBNYXRyaXhEcm9wZG93bkNvbHVtbiBleHRlbmRzIEJhc2VcbiAgaW1wbGVtZW50cyBJTG9jYWxpemFibGVPd25lciwgSVdyYXBwZXJPYmplY3Qge1xuICBwdWJsaWMgc3RhdGljIGdldENvbHVtblR5cGVzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHZhciByZXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gbWF0cml4RHJvcGRvd25Db2x1bW5UeXBlcykge1xuICAgICAgcmVzLnB1c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIHRlbXBsYXRlUXVlc3Rpb25WYWx1ZTogUXVlc3Rpb247XG4gIHByaXZhdGUgY29sT3duZXJWYWx1ZTogSU1hdHJpeENvbHVtbk93bmVyID0gbnVsbDtcbiAgcHJpdmF0ZSBpbmRleFZhbHVlID0gLTE7XG4gIHByaXZhdGUgX2lzVmlzaWJsZSA9IHRydWU7XG4gIHByaXZhdGUgX2hhc1Zpc2libGVDZWxsID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcgPSBudWxsKSB7XG4gICAgc3VwZXIoKTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInRvdGFsRm9ybWF0XCIsIHRoaXMpO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXG4gICAgICBcInNob3dJbk11bHRpcGxlQ29sdW1uc1wiLFxuICAgICAgZnVuY3Rpb24oKSB7XG4gICAgICAgIHNlbGYuZG9TaG93SW5NdWx0aXBsZUNvbHVtbnNDaGFuZ2VkKCk7XG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLnVwZGF0ZVRlbXBsYXRlUXVlc3Rpb24oKTtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIGlmICh0aXRsZSkge1xuICAgICAgdGhpcy50aXRsZSA9IHRpdGxlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ubG9jVGl0bGUuc3RyQ2hhbmdlZCgpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0T3JpZ2luYWxPYmooKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVRdWVzdGlvbjtcbiAgfVxuICBnZXRDbGFzc05hbWVQcm9wZXJ0eSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImNlbGxUeXBlXCI7XG4gIH1cbiAgcHVibGljIGdldFN1cnZleShsaXZlOiBib29sZWFuID0gZmFsc2UpOiBJU3VydmV5IHtcbiAgICByZXR1cm4gISF0aGlzLmNvbE93bmVyID8gKDxhbnk+dGhpcy5jb2xPd25lcikuc3VydmV5IDogbnVsbDtcbiAgfVxuICBlbmRMb2FkaW5nRnJvbUpzb24oKSB7XG4gICAgc3VwZXIuZW5kTG9hZGluZ0Zyb21Kc29uKCk7XG4gICAgdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLmVuZExvYWRpbmdGcm9tSnNvbigpO1xuICAgIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5vbkdldFN1cnZleSA9ICgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmdldFN1cnZleSgpO1xuICAgIH07XG4gIH1cbiAgZ2V0RHluYW1pY1Byb3BlcnR5TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImNlbGxUeXBlXCI7XG4gIH1cbiAgZ2V0RHluYW1pY1R5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jYWxjQ2VsbFF1ZXN0aW9uVHlwZSgpO1xuICB9XG4gIHB1YmxpYyBnZXQgY29sT3duZXIoKTogSU1hdHJpeENvbHVtbk93bmVyIHtcbiAgICByZXR1cm4gdGhpcy5jb2xPd25lclZhbHVlO1xuICB9XG4gIHB1YmxpYyBzZXQgY29sT3duZXIodmFsdWU6IElNYXRyaXhDb2x1bW5Pd25lcikge1xuICAgIHRoaXMuY29sT3duZXJWYWx1ZSA9IHZhbHVlO1xuICAgIGlmICghIXZhbHVlKSB7XG4gICAgICB0aGlzLnVwZGF0ZVRlbXBsYXRlUXVlc3Rpb24oKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGxvY1N0cnNDaGFuZ2VkKCkge1xuICAgIHN1cGVyLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgdGhpcy5sb2NUaXRsZS5zdHJDaGFuZ2VkKCk7XG4gIH1cbiAgcHVibGljIGFkZFVzZWRMb2NhbGVzKGxvY2FsZXM6IEFycmF5PHN0cmluZz4pIHtcbiAgICBzdXBlci5hZGRVc2VkTG9jYWxlcyhsb2NhbGVzKTtcbiAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb24uYWRkVXNlZExvY2FsZXMobG9jYWxlcyk7XG4gIH1cbiAgcHVibGljIGdldCBpbmRleCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbmRleFZhbHVlO1xuICB9XG4gIHB1YmxpYyBzZXRJbmRleCh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuaW5kZXhWYWx1ZSA9IHZhbDtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpIHtcbiAgICByZXR1cm4gXCJtYXRyaXhkcm9wZG93bmNvbHVtblwiO1xuICB9XG4gIHB1YmxpYyBnZXQgY2VsbFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY2VsbFR5cGVcIik7XG4gIH1cbiAgcHVibGljIHNldCBjZWxsVHlwZSh2YWw6IHN0cmluZykge1xuICAgIHZhbCA9IHZhbC50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNlbGxUeXBlXCIsIHZhbCk7XG4gICAgdGhpcy51cGRhdGVUZW1wbGF0ZVF1ZXN0aW9uKCk7XG4gICAgaWYgKCEhdGhpcy5jb2xPd25lcikge1xuICAgICAgdGhpcy5jb2xPd25lci5vbkNvbHVtbkNlbGxUeXBlQ2hhbmdlZCh0aGlzKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCB0ZW1wbGF0ZVF1ZXN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlUXVlc3Rpb25WYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ubmFtZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzVmlzaWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNWaXNpYmxlO1xuICB9XG4gIHB1YmxpYyBzZXRJc1Zpc2libGUobmV3VmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5faXNWaXNpYmxlID0gbmV3VmFsO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzVmlzaWJsZUNlbGwoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hhc1Zpc2libGVDZWxsO1xuICB9XG4gIHB1YmxpYyBzZXQgaGFzVmlzaWJsZUNlbGwobmV3VmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5faGFzVmlzaWJsZUNlbGwgPSBuZXdWYWw7XG4gIH1cbiAgcHVibGljIGdldCBuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ubmFtZTtcbiAgfVxuICBwdWJsaWMgc2V0IG5hbWUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ubmFtZSA9IHZhbDtcbiAgfVxuICBwdWJsaWMgZ2V0IHRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVRdWVzdGlvbi50aXRsZTtcbiAgfVxuICBwdWJsaWMgc2V0IHRpdGxlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLnRpdGxlID0gdmFsO1xuICB9XG4gIHB1YmxpYyBnZXQgbG9jVGl0bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5sb2NUaXRsZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGZ1bGxUaXRsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmxvY1RpdGxlLnRleHRPckh0bWw7XG4gIH1cbiAgcHVibGljIGdldCBpc1JlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlUXVlc3Rpb24uaXNSZXF1aXJlZDtcbiAgfVxuICBwdWJsaWMgc2V0IGlzUmVxdWlyZWQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLmlzUmVxdWlyZWQgPSB2YWw7XG4gIH1cbiAgcHVibGljIGdldCByZXF1aXJlZFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLnJlcXVpcmVkVGV4dDtcbiAgfVxuICBwdWJsaWMgZ2V0IHJlcXVpcmVkRXJyb3JUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5yZXF1aXJlZEVycm9yVGV4dDtcbiAgfVxuICBwdWJsaWMgc2V0IHJlcXVpcmVkRXJyb3JUZXh0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLnJlcXVpcmVkRXJyb3JUZXh0ID0gdmFsO1xuICB9XG4gIGdldCBsb2NSZXF1aXJlZEVycm9yVGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5sb2NSZXF1aXJlZEVycm9yVGV4dDtcbiAgfVxuICBwdWJsaWMgZ2V0IHJlYWRPbmx5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ucmVhZE9ubHk7XG4gIH1cbiAgcHVibGljIHNldCByZWFkT25seSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ucmVhZE9ubHkgPSB2YWw7XG4gIH1cbiAgcHVibGljIGdldCBoYXNPdGhlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLmhhc090aGVyO1xuICB9XG4gIHB1YmxpYyBzZXQgaGFzT3RoZXIodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLmhhc090aGVyID0gdmFsO1xuICB9XG4gIHB1YmxpYyBnZXQgdmlzaWJsZUlmKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVRdWVzdGlvbi52aXNpYmxlSWY7XG4gIH1cbiAgcHVibGljIHNldCB2aXNpYmxlSWYodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb24udmlzaWJsZUlmID0gdmFsO1xuICB9XG4gIHB1YmxpYyBnZXQgZW5hYmxlSWYoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLmVuYWJsZUlmO1xuICB9XG4gIHB1YmxpYyBzZXQgZW5hYmxlSWYodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb24uZW5hYmxlSWYgPSB2YWw7XG4gIH1cbiAgcHVibGljIGdldCByZXF1aXJlZElmKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5yZXF1aXJlZElmO1xuICB9XG4gIHB1YmxpYyBzZXQgcmVxdWlyZWRJZih2YWw6IHN0cmluZykge1xuICAgIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5yZXF1aXJlZElmID0gdmFsO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNVbmlxdWUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlzVW5pcXVlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgaXNVbmlxdWUodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNVbmlxdWVcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHNob3dJbk11bHRpcGxlQ29sdW1ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd0luTXVsdGlwbGVDb2x1bW5zXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNob3dJbk11bHRpcGxlQ29sdW1ucyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93SW5NdWx0aXBsZUNvbHVtbnNcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzU3VwcG9ydE11bHRpcGxlQ29sdW1ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gW1wiY2hlY2tib3hcIiwgXCJyYWRpb2dyb3VwXCJdLmluZGV4T2YodGhpcy5jZWxsVHlwZSkgPiAtMTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzU2hvd0luTXVsdGlwbGVDb2x1bW5zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNob3dJbk11bHRpcGxlQ29sdW1ucyAmJiB0aGlzLmlzU3VwcG9ydE11bHRpcGxlQ29sdW1ucztcbiAgfVxuICBwdWJsaWMgZ2V0IHZhbGlkYXRvcnMoKTogQXJyYXk8U3VydmV5VmFsaWRhdG9yPiB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVRdWVzdGlvbi52YWxpZGF0b3JzO1xuICB9XG4gIHB1YmxpYyBzZXQgdmFsaWRhdG9ycyh2YWw6IEFycmF5PFN1cnZleVZhbGlkYXRvcj4pIHtcbiAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb24udmFsaWRhdG9ycyA9IHZhbDtcbiAgfVxuICBwdWJsaWMgZ2V0IHRvdGFsVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ0b3RhbFR5cGVcIiwgXCJub25lXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdG90YWxUeXBlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidG90YWxUeXBlXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCB0b3RhbEV4cHJlc3Npb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidG90YWxFeHByZXNzaW9uXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdG90YWxFeHByZXNzaW9uKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidG90YWxFeHByZXNzaW9uXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBoYXNUb3RhbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50b3RhbFR5cGUgIT0gXCJub25lXCIgfHwgISF0aGlzLnRvdGFsRXhwcmVzc2lvbjtcbiAgfVxuICBwdWJsaWMgZ2V0IHRvdGFsRm9ybWF0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwidG90YWxGb3JtYXRcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCB0b3RhbEZvcm1hdCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwidG90YWxGb3JtYXRcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jVG90YWxGb3JtYXQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwidG90YWxGb3JtYXRcIik7XG4gIH1cbiAgcHVibGljIGdldCByZW5kZXJBcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyZW5kZXJBc1wiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJlbmRlckFzKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicmVuZGVyQXNcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHRvdGFsTWF4aW11bUZyYWN0aW9uRGlnaXRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInRvdGFsTWF4aW11bUZyYWN0aW9uRGlnaXRzXCIsIC0xKTtcbiAgfVxuICBwdWJsaWMgc2V0IHRvdGFsTWF4aW11bUZyYWN0aW9uRGlnaXRzKHZhbDogbnVtYmVyKSB7XG4gICAgaWYgKHZhbCA8IC0xIHx8IHZhbCA+IDIwKSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidG90YWxNYXhpbXVtRnJhY3Rpb25EaWdpdHNcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHRvdGFsTWluaW11bUZyYWN0aW9uRGlnaXRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInRvdGFsTWluaW11bUZyYWN0aW9uRGlnaXRzXCIsIC0xKTtcbiAgfVxuICBwdWJsaWMgc2V0IHRvdGFsTWluaW11bUZyYWN0aW9uRGlnaXRzKHZhbDogbnVtYmVyKSB7XG4gICAgaWYgKHZhbCA8IC0xIHx8IHZhbCA+IDIwKSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidG90YWxNaW5pbXVtRnJhY3Rpb25EaWdpdHNcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHRvdGFsRGlzcGxheVN0eWxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInRvdGFsRGlzcGxheVN0eWxlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdG90YWxEaXNwbGF5U3R5bGUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ0b3RhbERpc3BsYXlTdHlsZVwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgdG90YWxDdXJyZW5jeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ0b3RhbEN1cnJlbmN5XCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdG90YWxDdXJyZW5jeSh2YWw6IHN0cmluZykge1xuICAgIGlmIChnZXRDdXJyZWN5Q29kZXMoKS5pbmRleE9mKHZhbCkgPCAwKSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidG90YWxDdXJyZW5jeVwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgbWluV2lkdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWluV2lkdGhcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBtaW5XaWR0aCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1pbldpZHRoXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCB3aWR0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ3aWR0aFwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHdpZHRoKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwid2lkdGhcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNvbENvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNvbENvdW50XCIsIC0xKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNvbENvdW50KHZhbDogbnVtYmVyKSB7XG4gICAgaWYgKHZhbCA8IC0xIHx8IHZhbCA+IDQpIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjb2xDb3VudFwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXRMb2NhbGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb2xPd25lciA/IHRoaXMuY29sT3duZXIuZ2V0TG9jYWxlKCkgOiBcIlwiO1xuICB9XG4gIHB1YmxpYyBnZXRNYXJrZG93bkh0bWwodGV4dDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbE93bmVyID8gdGhpcy5jb2xPd25lci5nZXRNYXJrZG93bkh0bWwodGV4dCwgbmFtZSkgOiBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXRSZW5kZXJlcihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiAhIXRoaXMuY29sT3duZXIgPyB0aGlzLmNvbE93bmVyLmdldFJlbmRlcmVyKG5hbWUpIDogbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0UHJvY2Vzc2VkVGV4dCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbE93bmVyID8gdGhpcy5jb2xPd25lci5nZXRQcm9jZXNzZWRUZXh0KHRleHQpIDogdGV4dDtcbiAgfVxuICBwdWJsaWMgY3JlYXRlQ2VsbFF1ZXN0aW9uKGRhdGE6IGFueSk6IFF1ZXN0aW9uIHtcbiAgICB2YXIgcVR5cGUgPSB0aGlzLmNhbGNDZWxsUXVlc3Rpb25UeXBlKCk7XG4gICAgdmFyIGNlbGxRdWVzdGlvbiA9IDxRdWVzdGlvbj50aGlzLmNyZWF0ZU5ld1F1ZXN0aW9uKHFUeXBlKTtcbiAgICB0aGlzLmNhbGxPbkNlbGxRdWVzdGlvblVwZGF0ZShjZWxsUXVlc3Rpb24sIGRhdGEpO1xuICAgIHJldHVybiBjZWxsUXVlc3Rpb247XG4gIH1cbiAgcHVibGljIHVwZGF0ZUNlbGxRdWVzdGlvbihcbiAgICBjZWxsUXVlc3Rpb246IFF1ZXN0aW9uLFxuICAgIGRhdGE6IGFueSxcbiAgICBvblVwZGF0ZUpzb246IChqc29uOiBhbnkpID0+IGFueSA9IG51bGxcbiAgKSB7XG4gICAgdGhpcy5zZXRRdWVzdGlvblByb3BlcnRpZXMoY2VsbFF1ZXN0aW9uLCBvblVwZGF0ZUpzb24pO1xuICAgIHRoaXMuY2FsbE9uQ2VsbFF1ZXN0aW9uVXBkYXRlKGNlbGxRdWVzdGlvbiwgZGF0YSk7XG4gIH1cbiAgcHJpdmF0ZSBjYWxsT25DZWxsUXVlc3Rpb25VcGRhdGUoY2VsbFF1ZXN0aW9uOiBRdWVzdGlvbiwgZGF0YTogYW55KSB7XG4gICAgdmFyIHFUeXBlID0gY2VsbFF1ZXN0aW9uLmdldFR5cGUoKTtcbiAgICB2YXIgcURlZmluaXRpb24gPSAoPGFueT5tYXRyaXhEcm9wZG93bkNvbHVtblR5cGVzKVtxVHlwZV07XG4gICAgaWYgKHFEZWZpbml0aW9uICYmIHFEZWZpbml0aW9uW1wib25DZWxsUXVlc3Rpb25VcGRhdGVcIl0pIHtcbiAgICAgIHFEZWZpbml0aW9uW1wib25DZWxsUXVlc3Rpb25VcGRhdGVcIl0oXG4gICAgICAgIGNlbGxRdWVzdGlvbixcbiAgICAgICAgdGhpcyxcbiAgICAgICAgdGhpcy5jb2xPd25lcixcbiAgICAgICAgZGF0YVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgZGVmYXVsdENlbGxUeXBlQ2hhbmdlZCgpIHtcbiAgICB0aGlzLnVwZGF0ZVRlbXBsYXRlUXVlc3Rpb24oKTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FsY0NlbGxRdWVzdGlvblR5cGUoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5jZWxsVHlwZSAhPT0gXCJkZWZhdWx0XCIpIHJldHVybiB0aGlzLmNlbGxUeXBlO1xuICAgIGlmICh0aGlzLmNvbE93bmVyKSByZXR1cm4gdGhpcy5jb2xPd25lci5nZXRDZWxsVHlwZSgpO1xuICAgIHJldHVybiBzZXR0aW5ncy5tYXRyaXhEZWZhdWx0Q2VsbFR5cGU7XG4gIH1cbiAgcHJvdGVjdGVkIHVwZGF0ZVRlbXBsYXRlUXVlc3Rpb24oKSB7XG4gICAgdmFyIHByZXZDZWxsVHlwZSA9IHRoaXMudGVtcGxhdGVRdWVzdGlvblxuICAgICAgPyB0aGlzLnRlbXBsYXRlUXVlc3Rpb24uZ2V0VHlwZSgpXG4gICAgICA6IFwiXCI7XG4gICAgdmFyIGN1ckNlbGxUeXBlID0gdGhpcy5jYWxjQ2VsbFF1ZXN0aW9uVHlwZSgpO1xuICAgIGlmIChjdXJDZWxsVHlwZSA9PT0gcHJldkNlbGxUeXBlKSByZXR1cm47XG4gICAgaWYgKHRoaXMudGVtcGxhdGVRdWVzdGlvbikge1xuICAgICAgdGhpcy5yZW1vdmVQcm9wZXJ0aWVzKHByZXZDZWxsVHlwZSk7XG4gICAgfVxuICAgIHRoaXMudGVtcGxhdGVRdWVzdGlvblZhbHVlID0gdGhpcy5jcmVhdGVOZXdRdWVzdGlvbihjdXJDZWxsVHlwZSk7XG4gICAgdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLmxvY093bmVyID0gdGhpcztcbiAgICB0aGlzLmFkZFByb3BlcnRpZXMoY3VyQ2VsbFR5cGUpO1xuICAgIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5vblByb3BlcnR5Q2hhbmdlZC5hZGQoKHNlbmRlciwgb3B0aW9ucykgPT4ge1xuICAgICAgdGhpcy5wcm9wZXJ0eVZhbHVlQ2hhbmdlZChcbiAgICAgICAgb3B0aW9ucy5uYW1lLFxuICAgICAgICBvcHRpb25zLm9sZFZhbHVlLFxuICAgICAgICBvcHRpb25zLm5ld1ZhbHVlXG4gICAgICApO1xuICAgIH0pO1xuICAgIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5vbkl0ZW1WYWx1ZVByb3BlcnR5Q2hhbmdlZC5hZGQoKHNlbmRlciwgb3B0aW9ucykgPT4ge1xuICAgICAgdGhpcy5kb0l0ZW1WYWx1ZVByb3BlcnR5Q2hhbmdlZChcbiAgICAgICAgb3B0aW9ucy5wcm9wZXJ0eU5hbWUsXG4gICAgICAgIG9wdGlvbnMub2JqLFxuICAgICAgICBvcHRpb25zLm5hbWUsXG4gICAgICAgIG9wdGlvbnMubmV3VmFsdWUsXG4gICAgICAgIG9wdGlvbnMub2xkVmFsdWVcbiAgICAgICk7XG4gICAgfSk7XG4gICAgdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLmlzQ29udGVudEVsZW1lbnQgPSB0cnVlO1xuICAgIGlmICghdGhpcy5pc0xvYWRpbmdGcm9tSnNvbikge1xuICAgICAgdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLm9uR2V0U3VydmV5ID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRTdXJ2ZXkoKTtcbiAgICAgIH07XG4gICAgfVxuICAgIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5sb2NUaXRsZS5zdHJDaGFuZ2VkKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZU5ld1F1ZXN0aW9uKGNlbGxUeXBlOiBzdHJpbmcpOiBRdWVzdGlvbiB7XG4gICAgdmFyIHF1ZXN0aW9uID0gPFF1ZXN0aW9uPlNlcmlhbGl6ZXIuY3JlYXRlQ2xhc3MoY2VsbFR5cGUpO1xuICAgIGlmICghcXVlc3Rpb24pIHtcbiAgICAgIHF1ZXN0aW9uID0gPFF1ZXN0aW9uPlNlcmlhbGl6ZXIuY3JlYXRlQ2xhc3MoXCJ0ZXh0XCIpO1xuICAgIH1cbiAgICBxdWVzdGlvbi5sb2FkaW5nT3duZXIgPSB0aGlzO1xuICAgIHF1ZXN0aW9uLmlzRWRpdGFibGVUZW1wbGF0ZUVsZW1lbnQgPSB0cnVlO1xuICAgIHRoaXMuc2V0UXVlc3Rpb25Qcm9wZXJ0aWVzKHF1ZXN0aW9uKTtcbiAgICByZXR1cm4gcXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIHNldFF1ZXN0aW9uUHJvcGVydGllcyhcbiAgICBxdWVzdGlvbjogUXVlc3Rpb24sXG4gICAgb25VcGRhdGVKc29uOiAoanNvbjogYW55KSA9PiBhbnkgPSBudWxsXG4gICkge1xuICAgIGlmICh0aGlzLnRlbXBsYXRlUXVlc3Rpb24pIHtcbiAgICAgIHZhciBqc29uID0gbmV3IEpzb25PYmplY3QoKS50b0pzb25PYmplY3QodGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLCB0cnVlKTtcbiAgICAgIGlmIChvblVwZGF0ZUpzb24pIHtcbiAgICAgICAgb25VcGRhdGVKc29uKGpzb24pO1xuICAgICAgfVxuICAgICAganNvbi50eXBlID0gcXVlc3Rpb24uZ2V0VHlwZSgpO1xuICAgICAgbmV3IEpzb25PYmplY3QoKS50b09iamVjdChqc29uLCBxdWVzdGlvbik7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBwcm9wZXJ0eVZhbHVlQ2hhbmdlZChuYW1lOiBzdHJpbmcsIG9sZFZhbHVlOiBhbnksIG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBzdXBlci5wcm9wZXJ0eVZhbHVlQ2hhbmdlZChuYW1lLCBvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuICAgIGlmICghU2VyaWFsaXplci5oYXNPcmlnaW5hbFByb3BlcnR5KHRoaXMsIG5hbWUpKSByZXR1cm47XG4gICAgaWYgKHRoaXMuY29sT3duZXIgIT0gbnVsbCAmJiAhdGhpcy5pc0xvYWRpbmdGcm9tSnNvbikge1xuICAgICAgdGhpcy5jb2xPd25lci5vbkNvbHVtblByb3BlcnR5Q2hhbmdlZCh0aGlzLCBuYW1lLCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZG9JdGVtVmFsdWVQcm9wZXJ0eUNoYW5nZWQoXG4gICAgcHJvcGVydHlOYW1lOiBzdHJpbmcsXG4gICAgb2JqOiBJdGVtVmFsdWUsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG5ld1ZhbHVlOiBhbnksXG4gICAgb2xkVmFsdWU6IGFueVxuICApIHtcbiAgICBpZiAoIVNlcmlhbGl6ZXIuaGFzT3JpZ2luYWxQcm9wZXJ0eShvYmosIG5hbWUpKSByZXR1cm47XG4gICAgaWYgKHRoaXMuY29sT3duZXIgIT0gbnVsbCAmJiAhdGhpcy5pc0xvYWRpbmdGcm9tSnNvbikge1xuICAgICAgdGhpcy5jb2xPd25lci5vbkNvbHVtbkl0ZW1WYWx1ZVByb3BlcnR5Q2hhbmdlZChcbiAgICAgICAgdGhpcyxcbiAgICAgICAgcHJvcGVydHlOYW1lLFxuICAgICAgICBvYmosXG4gICAgICAgIG5hbWUsXG4gICAgICAgIG5ld1ZhbHVlLFxuICAgICAgICBvbGRWYWx1ZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRvU2hvd0luTXVsdGlwbGVDb2x1bW5zQ2hhbmdlZCgpIHtcbiAgICBpZiAodGhpcy5jb2xPd25lciAhPSBudWxsICYmICF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSB7XG4gICAgICB0aGlzLmNvbE93bmVyLm9uU2hvd0luTXVsdGlwbGVDb2x1bW5zQ2hhbmdlZCh0aGlzKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBnZXRQcm9wZXJ0aWVzKGN1ckNlbGxUeXBlOiBzdHJpbmcpOiBBcnJheTxKc29uT2JqZWN0UHJvcGVydHk+IHtcbiAgICByZXR1cm4gU2VyaWFsaXplci5nZXREeW5hbWljUHJvcGVydGllc0J5T2JqKHRoaXMsIGN1ckNlbGxUeXBlKTtcbiAgfVxuICBwcml2YXRlIHJlbW92ZVByb3BlcnRpZXMoY3VyQ2VsbFR5cGU6IHN0cmluZykge1xuICAgIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5nZXRQcm9wZXJ0aWVzKGN1ckNlbGxUeXBlKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwcm9wID0gcHJvcGVydGllc1tpXTtcbiAgICAgIGRlbGV0ZSAoPGFueT50aGlzKVtwcm9wLm5hbWVdO1xuICAgICAgaWYgKHByb3Auc2VyaWFsaXphdGlvblByb3BlcnR5KSB7XG4gICAgICAgIGRlbGV0ZSAoPGFueT50aGlzKVtwcm9wLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eV07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgYWRkUHJvcGVydGllcyhjdXJDZWxsVHlwZTogc3RyaW5nKSB7XG4gICAgdmFyIHF1ZXN0aW9uID0gdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uO1xuICAgIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5nZXRQcm9wZXJ0aWVzKGN1ckNlbGxUeXBlKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwcm9wID0gcHJvcGVydGllc1tpXTtcbiAgICAgIHRoaXMuYWRkUHJvcGVydHkocXVlc3Rpb24sIHByb3AubmFtZSwgZmFsc2UpO1xuICAgICAgaWYgKHByb3Auc2VyaWFsaXphdGlvblByb3BlcnR5KSB7XG4gICAgICAgIHRoaXMuYWRkUHJvcGVydHkocXVlc3Rpb24sIHByb3Auc2VyaWFsaXphdGlvblByb3BlcnR5LCB0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBhZGRQcm9wZXJ0eShcbiAgICBxdWVzdGlvbjogUXVlc3Rpb24sXG4gICAgcHJvcE5hbWU6IHN0cmluZyxcbiAgICBpc1JlYWRPbmx5OiBib29sZWFuXG4gICkge1xuICAgIHZhciBkZXNjID0ge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuICg8YW55PnF1ZXN0aW9uKVtwcm9wTmFtZV07XG4gICAgICB9LFxuICAgIH07XG4gICAgaWYgKCFpc1JlYWRPbmx5KSB7XG4gICAgICAoPGFueT5kZXNjKVtcInNldFwiXSA9IGZ1bmN0aW9uKHY6IGFueSkge1xuICAgICAgICAoPGFueT5xdWVzdGlvbilbcHJvcE5hbWVdID0gdjtcbiAgICAgIH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBwcm9wTmFtZSwgZGVzYyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1hdHJpeERyb3Bkb3duQ2VsbCB7XG4gIHByaXZhdGUgcXVlc3Rpb25WYWx1ZTogUXVlc3Rpb247XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uLFxuICAgIHB1YmxpYyByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIHB1YmxpYyBkYXRhOiBJTWF0cml4RHJvcGRvd25EYXRhXG4gICkge1xuICAgIHRoaXMucXVlc3Rpb25WYWx1ZSA9IHRoaXMuY3JlYXRlUXVlc3Rpb24oY29sdW1uLCByb3csIGRhdGEpO1xuICAgIHRoaXMucXVlc3Rpb25WYWx1ZS51cGRhdGVDdXN0b21XaWRnZXQoKTtcbiAgfVxuICBwdWJsaWMgbG9jU3Ryc0NoYW5nZWQoKSB7XG4gICAgdGhpcy5xdWVzdGlvbi5sb2NTdHJzQ2hhbmdlZCgpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVRdWVzdGlvbihcbiAgICBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uLFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gICAgZGF0YTogSU1hdHJpeERyb3Bkb3duRGF0YVxuICApOiBRdWVzdGlvbiB7XG4gICAgdmFyIHJlcyA9IGRhdGEuY3JlYXRlUXVlc3Rpb24odGhpcy5yb3csIHRoaXMuY29sdW1uKTtcbiAgICByZXMudmFsaWRhdGVWYWx1ZUNhbGxiYWNrID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZGF0YS52YWxpZGF0ZUNlbGwocm93LCBjb2x1bW4ubmFtZSwgcm93LnZhbHVlKTtcbiAgICB9O1xuICAgIEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLmdldFByb3BlcnRpZXMoY29sdW1uLmdldFR5cGUoKSkuZm9yRWFjaChcbiAgICAgIChwcm9wZXJ0eSkgPT4ge1xuICAgICAgICBsZXQgcHJvcGVydHlOYW1lID0gcHJvcGVydHkubmFtZTtcbiAgICAgICAgaWYgKCg8YW55PmNvbHVtbilbcHJvcGVydHlOYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmVzW3Byb3BlcnR5TmFtZV0gPSAoPGFueT5jb2x1bW4pW3Byb3BlcnR5TmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25WYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24udmFsdWU7XG4gIH1cbiAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5xdWVzdGlvbi52YWx1ZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyBydW5Db25kaXRpb24odmFsdWVzOiBIYXNoVGFibGU8YW55PiwgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4pIHtcbiAgICB0aGlzLnF1ZXN0aW9uLnJ1bkNvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNYXRyaXhEcm9wZG93blRvdGFsQ2VsbCBleHRlbmRzIE1hdHJpeERyb3Bkb3duQ2VsbCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uLFxuICAgIHB1YmxpYyByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIHB1YmxpYyBkYXRhOiBJTWF0cml4RHJvcGRvd25EYXRhXG4gICkge1xuICAgIHN1cGVyKGNvbHVtbiwgcm93LCBkYXRhKTtcbiAgICB0aGlzLnVwZGF0ZUNlbGxRdWVzdGlvbigpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVRdWVzdGlvbihcbiAgICBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uLFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gICAgZGF0YTogSU1hdHJpeERyb3Bkb3duRGF0YVxuICApOiBRdWVzdGlvbiB7XG4gICAgdmFyIHJlcyA9IDxRdWVzdGlvbj5TZXJpYWxpemVyLmNyZWF0ZUNsYXNzKFwiZXhwcmVzc2lvblwiKTtcbiAgICByZXMuc2V0U3VydmV5SW1wbChyb3cpO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIGxvY1N0cnNDaGFuZ2VkKCkge1xuICAgIHRoaXMudXBkYXRlQ2VsbFF1ZXN0aW9uKCk7XG4gICAgc3VwZXIubG9jU3Ryc0NoYW5nZWQoKTtcbiAgfVxuICBwdWJsaWMgdXBkYXRlQ2VsbFF1ZXN0aW9uKCkge1xuICAgIHRoaXMucXVlc3Rpb24ubG9jQ2FsY3VsYXRpb24oKTtcbiAgICB0aGlzLmNvbHVtbi51cGRhdGVDZWxsUXVlc3Rpb24odGhpcy5xdWVzdGlvbiwgbnVsbCwgZnVuY3Rpb24oanNvbikge1xuICAgICAgZGVsZXRlIGpzb25bXCJkZWZhdWx0VmFsdWVcIl07XG4gICAgfSk7XG4gICAgdGhpcy5xdWVzdGlvbi5leHByZXNzaW9uID0gdGhpcy5nZXRUb3RhbEV4cHJlc3Npb24oKTtcbiAgICB0aGlzLnF1ZXN0aW9uLmZvcm1hdCA9IHRoaXMuY29sdW1uLnRvdGFsRm9ybWF0O1xuICAgIHRoaXMucXVlc3Rpb24uY3VycmVuY3kgPSB0aGlzLmNvbHVtbi50b3RhbEN1cnJlbmN5O1xuICAgIHRoaXMucXVlc3Rpb24uZGlzcGxheVN0eWxlID0gdGhpcy5jb2x1bW4udG90YWxEaXNwbGF5U3R5bGU7XG4gICAgdGhpcy5xdWVzdGlvbi5tYXhpbXVtRnJhY3Rpb25EaWdpdHMgPSB0aGlzLmNvbHVtbi50b3RhbE1heGltdW1GcmFjdGlvbkRpZ2l0cztcbiAgICB0aGlzLnF1ZXN0aW9uLm1pbmltdW1GcmFjdGlvbkRpZ2l0cyA9IHRoaXMuY29sdW1uLnRvdGFsTWluaW11bUZyYWN0aW9uRGlnaXRzO1xuICAgIHRoaXMucXVlc3Rpb24udW5sb2NDYWxjdWxhdGlvbigpO1xuICAgIHRoaXMucXVlc3Rpb24ucnVuSWZSZWFkT25seSA9IHRydWU7XG4gIH1cbiAgcHVibGljIGdldFRvdGFsRXhwcmVzc2lvbigpOiBzdHJpbmcge1xuICAgIGlmICghIXRoaXMuY29sdW1uLnRvdGFsRXhwcmVzc2lvbikgcmV0dXJuIHRoaXMuY29sdW1uLnRvdGFsRXhwcmVzc2lvbjtcbiAgICBpZiAodGhpcy5jb2x1bW4udG90YWxUeXBlID09IFwibm9uZVwiKSByZXR1cm4gXCJcIjtcbiAgICB2YXIgZnVuTmFtZSA9IHRoaXMuY29sdW1uLnRvdGFsVHlwZSArIFwiSW5BcnJheVwiO1xuICAgIGlmICghRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLmhhc0Z1bmN0aW9uKGZ1bk5hbWUpKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gZnVuTmFtZSArIFwiKHtzZWxmfSwgJ1wiICsgdGhpcy5jb2x1bW4ubmFtZSArIFwiJylcIjtcbiAgfVxufVxuXG5jbGFzcyBNYXRyaXhEcm9wZG93blJvd1RleHRQcm9jZXNzb3IgZXh0ZW5kcyBRdWVzdGlvblRleHRQcm9jZXNzb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgICBwcm90ZWN0ZWQgdmFyaWFibGVOYW1lOiBzdHJpbmdcbiAgKSB7XG4gICAgc3VwZXIodmFyaWFibGVOYW1lKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHN1cnZleSgpOiBJU3VydmV5IHtcbiAgICByZXR1cm4gdGhpcy5yb3cuZ2V0U3VydmV5KCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFZhbHVlcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnJvdy52YWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UXVlc3Rpb25CeU5hbWUobmFtZTogc3RyaW5nKTogUXVlc3Rpb24ge1xuICAgIHJldHVybiB0aGlzLnJvdy5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25DdXN0b21Qcm9jZXNzVGV4dCh0ZXh0VmFsdWU6IFRleHRQcmVQcm9jZXNzb3JWYWx1ZSk6IGJvb2xlYW4ge1xuICAgIGlmICh0ZXh0VmFsdWUubmFtZSA9PSBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5JbmRleFZhcmlhYmxlTmFtZSkge1xuICAgICAgdGV4dFZhbHVlLmlzRXhpc3RzID0gdHJ1ZTtcbiAgICAgIHRleHRWYWx1ZS52YWx1ZSA9IHRoaXMucm93LnJvd0luZGV4O1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICh0ZXh0VmFsdWUubmFtZSA9PSBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5Sb3dWYWx1ZVZhcmlhYmxlTmFtZSkge1xuICAgICAgdGV4dFZhbHVlLmlzRXhpc3RzID0gdHJ1ZTtcbiAgICAgIHRleHRWYWx1ZS52YWx1ZSA9IHRoaXMucm93LnJvd05hbWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZVxuICBpbXBsZW1lbnRzIElTdXJ2ZXlEYXRhLCBJU3VydmV5SW1wbCwgSUxvY2FsaXphYmxlT3duZXIge1xuICBwdWJsaWMgc3RhdGljIFJvd1ZhcmlhYmxlTmFtZSA9IFwicm93XCI7XG4gIHB1YmxpYyBzdGF0aWMgT3duZXJWYXJpYWJsZU5hbWUgPSBcInNlbGZcIjtcbiAgcHVibGljIHN0YXRpYyBJbmRleFZhcmlhYmxlTmFtZSA9IFwicm93SW5kZXhcIjtcbiAgcHVibGljIHN0YXRpYyBSb3dWYWx1ZVZhcmlhYmxlTmFtZSA9IFwicm93VmFsdWVcIjtcblxuICBwcml2YXRlIHN0YXRpYyBpZENvdW50ZXI6IG51bWJlciA9IDE7XG4gIHByaXZhdGUgc3RhdGljIGdldElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwic3Jvd19cIiArIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLmlkQ291bnRlcisrO1xuICB9XG4gIHByb3RlY3RlZCBkYXRhOiBJTWF0cml4RHJvcGRvd25EYXRhO1xuICBwcm90ZWN0ZWQgaXNTZXR0aW5nVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBpZFZhbHVlOiBzdHJpbmc7XG4gIHByaXZhdGUgdGV4dFByZVByb2Nlc3NvcjogTWF0cml4RHJvcGRvd25Sb3dUZXh0UHJvY2Vzc29yO1xuICBwcml2YXRlIGRldGFpbFBhbmVsVmFsdWU6IFBhbmVsTW9kZWwgPSBudWxsO1xuXG4gIHB1YmxpYyBjZWxsczogQXJyYXk8TWF0cml4RHJvcGRvd25DZWxsPiA9IFtdO1xuICBwdWJsaWMgc2hvd0hpZGVEZXRhaWxQYW5lbENsaWNrOiBhbnk7XG4gIHB1YmxpYyBvbkRldGFpbFBhbmVsU2hvd2luZ0NoYW5nZWQ6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoZGF0YTogSU1hdHJpeERyb3Bkb3duRGF0YSwgdmFsdWU6IGFueSkge1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgdGhpcy5zdWJzY3JpYmVUb0NoYW5nZXModmFsdWUpO1xuICAgIHRoaXMudGV4dFByZVByb2Nlc3NvciA9IG5ldyBNYXRyaXhEcm9wZG93blJvd1RleHRQcm9jZXNzb3IoXG4gICAgICB0aGlzLFxuICAgICAgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UuUm93VmFyaWFibGVOYW1lXG4gICAgKTtcbiAgICB0aGlzLnNob3dIaWRlRGV0YWlsUGFuZWxDbGljayA9ICgpID0+IHtcbiAgICAgIHRoaXMuc2hvd0hpZGVEZXRhaWxQYW5lbCgpO1xuICAgIH07XG4gICAgdGhpcy5pZFZhbHVlID0gTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UuZ2V0SWQoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaWRWYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IHJvd05hbWUoKTogYW55IHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0IHRleHQoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5yb3dOYW1lO1xuICB9XG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogYW55IHtcbiAgICB2YXIgcmVzdWx0OiBhbnkgPSB7fTtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbnM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxdWVzdGlvbiA9IHF1ZXN0aW9uc1tpXTtcbiAgICAgIGlmICghcXVlc3Rpb24uaXNFbXB0eSgpKSB7XG4gICAgICAgIHJlc3VsdFtxdWVzdGlvbi5nZXRWYWx1ZU5hbWUoKV0gPSBxdWVzdGlvbi52YWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgISFxdWVzdGlvbi5jb21tZW50ICYmXG4gICAgICAgICEhdGhpcy5nZXRTdXJ2ZXkoKSAmJlxuICAgICAgICB0aGlzLmdldFN1cnZleSgpLnN0b3JlT3RoZXJzQXNDb21tZW50XG4gICAgICApIHtcbiAgICAgICAgcmVzdWx0W3F1ZXN0aW9uLmdldFZhbHVlTmFtZSgpICsgc2V0dGluZ3MuY29tbWVudFByZWZpeF0gPVxuICAgICAgICAgIHF1ZXN0aW9uLmNvbW1lbnQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHVibGljIGdldCBsb2NUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc1BhbmVsKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5kYXRhKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5oYXNEZXRhaWxQYW5lbCh0aGlzKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGRldGFpbFBhbmVsKCk6IFBhbmVsTW9kZWwge1xuICAgIHJldHVybiB0aGlzLmRldGFpbFBhbmVsVmFsdWU7XG4gIH1cbiAgcHVibGljIGdldCBkZXRhaWxQYW5lbElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICEhdGhpcy5kZXRhaWxQYW5lbCA/IHRoaXMuZGV0YWlsUGFuZWwuaWQgOiBcIlwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNEZXRhaWxQYW5lbFNob3dpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5kYXRhID8gdGhpcy5kYXRhLmdldElzRGV0YWlsUGFuZWxTaG93aW5nKHRoaXMpIDogZmFsc2U7XG4gIH1cbiAgcHJpdmF0ZSBzZXRJc0RldGFpbFBhbmVsU2hvd2luZyh2YWw6IGJvb2xlYW4pIHtcbiAgICBpZiAoISF0aGlzLmRhdGEpIHtcbiAgICAgIHRoaXMuZGF0YS5zZXRJc0RldGFpbFBhbmVsU2hvd2luZyh0aGlzLCB2YWwpO1xuICAgIH1cbiAgICBpZiAoISF0aGlzLm9uRGV0YWlsUGFuZWxTaG93aW5nQ2hhbmdlZCkge1xuICAgICAgdGhpcy5vbkRldGFpbFBhbmVsU2hvd2luZ0NoYW5nZWQoKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBzaG93SGlkZURldGFpbFBhbmVsKCkge1xuICAgIGlmICh0aGlzLmlzRGV0YWlsUGFuZWxTaG93aW5nKSB7XG4gICAgICB0aGlzLmhpZGVEZXRhaWxQYW5lbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNob3dEZXRhaWxQYW5lbCgpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGlzQ3JlYXRpbmdEZXRhaWxQYW5lbCA9IGZhbHNlO1xuICBwdWJsaWMgc2hvd0RldGFpbFBhbmVsKCkge1xuICAgIHRoaXMuZW5zdXJlRGV0YWlsUGFuZWwoKTtcbiAgICBpZiAoIXRoaXMuZGV0YWlsUGFuZWxWYWx1ZSkgcmV0dXJuO1xuICAgIHRoaXMuc2V0SXNEZXRhaWxQYW5lbFNob3dpbmcodHJ1ZSk7XG4gIH1cbiAgcHVibGljIGhpZGVEZXRhaWxQYW5lbChkZXN0cm95UGFuZWw6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIHRoaXMuc2V0SXNEZXRhaWxQYW5lbFNob3dpbmcoZmFsc2UpO1xuICAgIGlmIChkZXN0cm95UGFuZWwpIHtcbiAgICAgIHRoaXMuZGV0YWlsUGFuZWxWYWx1ZSA9IG51bGw7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZW5zdXJlRGV0YWlsUGFuZWwoKSB7XG4gICAgaWYgKHRoaXMuaXNDcmVhdGluZ0RldGFpbFBhbmVsKSByZXR1cm47XG4gICAgaWYgKCEhdGhpcy5kZXRhaWxQYW5lbFZhbHVlIHx8ICF0aGlzLmhhc1BhbmVsIHx8ICF0aGlzLmRhdGEpIHJldHVybjtcbiAgICB0aGlzLmlzQ3JlYXRpbmdEZXRhaWxQYW5lbCA9IHRydWU7XG4gICAgdGhpcy5kZXRhaWxQYW5lbFZhbHVlID0gdGhpcy5kYXRhLmNyZWF0ZVJvd0RldGFpbFBhbmVsKHRoaXMpO1xuICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmRldGFpbFBhbmVsVmFsdWUucXVlc3Rpb25zO1xuICAgIHZhciB2YWx1ZSA9IHRoaXMuZGF0YS5nZXRSb3dWYWx1ZSh0aGlzLmRhdGEuZ2V0Um93SW5kZXgodGhpcykpO1xuICAgIGlmICghSGVscGVycy5pc1ZhbHVlRW1wdHkodmFsdWUpKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIga2V5ID0gcXVlc3Rpb25zW2ldLmdldFZhbHVlTmFtZSgpO1xuICAgICAgICBpZiAoIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHZhbHVlW2tleV0pKSB7XG4gICAgICAgICAgcXVlc3Rpb25zW2ldLnZhbHVlID0gdmFsdWVba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmRldGFpbFBhbmVsVmFsdWUuc2V0U3VydmV5SW1wbCh0aGlzKTtcbiAgICB0aGlzLmlzQ3JlYXRpbmdEZXRhaWxQYW5lbCA9IGZhbHNlO1xuICB9XG4gIGdldEFsbFZhbHVlcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICB9XG4gIGdldEZpbHRlcmVkVmFsdWVzKCk6IGFueSB7XG4gICAgdmFyIGFsbFZhbHVlcyA9IHRoaXMuZ2V0QWxsVmFsdWVzKCk7XG4gICAgdmFyIHZhbHVlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHsgcm93OiBhbGxWYWx1ZXMgfTtcbiAgICBmb3IgKHZhciBrZXkgaW4gYWxsVmFsdWVzKSB7XG4gICAgICB2YWx1ZXNba2V5XSA9IGFsbFZhbHVlc1trZXldO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9XG4gIGdldEZpbHRlcmVkUHJvcGVydGllcygpOiBhbnkge1xuICAgIHJldHVybiB7IHN1cnZleTogdGhpcy5nZXRTdXJ2ZXkoKSwgcm93OiB0aGlzIH07XG4gIH1cbiAgcHVibGljIHJ1bkNvbmRpdGlvbih2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIGlmICghIXRoaXMuZGF0YSkge1xuICAgICAgdmFsdWVzW01hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLk93bmVyVmFyaWFibGVOYW1lXSA9IHRoaXMuZGF0YS52YWx1ZTtcbiAgICB9XG4gICAgdmFsdWVzW01hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLkluZGV4VmFyaWFibGVOYW1lXSA9IHRoaXMucm93SW5kZXg7XG4gICAgdmFsdWVzW01hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLlJvd1ZhbHVlVmFyaWFibGVOYW1lXSA9IHRoaXMucm93TmFtZTtcbiAgICBpZiAoIXByb3BlcnRpZXMpIHByb3BlcnRpZXMgPSB7fTtcbiAgICBwcm9wZXJ0aWVzW01hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLlJvd1ZhcmlhYmxlTmFtZV0gPSB0aGlzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jZWxscy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFsdWVzW01hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLlJvd1ZhcmlhYmxlTmFtZV0gPSB0aGlzLnZhbHVlO1xuICAgICAgdGhpcy5jZWxsc1tpXS5ydW5Db25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG4gICAgaWYgKCEhdGhpcy5kZXRhaWxQYW5lbCkge1xuICAgICAgdGhpcy5kZXRhaWxQYW5lbC5ydW5Db25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGNsZWFyVmFsdWUoKSB7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMucXVlc3Rpb25zO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBxdWVzdGlvbnNbaV0uY2xlYXJWYWx1ZSgpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgc2V0IHZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLmlzU2V0dGluZ1ZhbHVlID0gdHJ1ZTtcbiAgICB0aGlzLnN1YnNjcmliZVRvQ2hhbmdlcyh2YWx1ZSk7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMucXVlc3Rpb25zO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcXVlc3Rpb24gPSBxdWVzdGlvbnNbaV07XG4gICAgICB2YXIgdmFsID0gdGhpcy5nZXRDZWxsVmFsdWUodmFsdWUsIHF1ZXN0aW9uLmdldFZhbHVlTmFtZSgpKTtcbiAgICAgIHZhciBvbGRDb21tZW50ID0gcXVlc3Rpb24uY29tbWVudDtcbiAgICAgIHZhciBjb21tZW50ID0gISF2YWx1ZVxuICAgICAgICA/IHZhbHVlW3F1ZXN0aW9uLmdldFZhbHVlTmFtZSgpICsgc2V0dGluZ3MuY29tbWVudFByZWZpeF1cbiAgICAgICAgOiBcIlwiO1xuICAgICAgaWYgKGNvbW1lbnQgPT0gdW5kZWZpbmVkKSBjb21tZW50ID0gXCJcIjtcbiAgICAgIHF1ZXN0aW9uLnVwZGF0ZVZhbHVlRnJvbVN1cnZleSh2YWwpO1xuICAgICAgaWYgKCEhY29tbWVudCB8fCBIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMob2xkQ29tbWVudCwgcXVlc3Rpb24uY29tbWVudCkpIHtcbiAgICAgICAgcXVlc3Rpb24udXBkYXRlQ29tbWVudEZyb21TdXJ2ZXkoY29tbWVudCk7XG4gICAgICB9XG4gICAgICBxdWVzdGlvbi5vblN1cnZleVZhbHVlQ2hhbmdlZCh2YWwpO1xuICAgIH1cbiAgICB0aGlzLmlzU2V0dGluZ1ZhbHVlID0gZmFsc2U7XG4gIH1cbiAgcHVibGljIG9uQW55VmFsdWVDaGFuZ2VkKG5hbWU6IHN0cmluZykge1xuICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ucztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgcXVlc3Rpb25zW2ldLm9uQW55VmFsdWVDaGFuZ2VkKG5hbWUpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0RGF0YVZhbHVlQ29yZSh2YWx1ZXNIYXNoOiBhbnksIGtleTogc3RyaW5nKSB7XG4gICAgdmFyIHN1cnZleSA9IHRoaXMuZ2V0U3VydmV5KCk7XG4gICAgaWYgKCEhc3VydmV5KSB7XG4gICAgICByZXR1cm4gKDxhbnk+c3VydmV5KS5nZXREYXRhVmFsdWVDb3JlKHZhbHVlc0hhc2gsIGtleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB2YWx1ZXNIYXNoW2tleV07XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXRWYWx1ZShuYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuZ2V0UXVlc3Rpb25CeU5hbWUobmFtZSk7XG4gICAgcmV0dXJuICEhcXVlc3Rpb24gPyBxdWVzdGlvbi52YWx1ZSA6IG51bGw7XG4gIH1cbiAgcHVibGljIHNldFZhbHVlKG5hbWU6IHN0cmluZywgbmV3Q29sdW1uVmFsdWU6IGFueSkge1xuICAgIHRoaXMuc2V0VmFsdWVDb3JlKG5hbWUsIG5ld0NvbHVtblZhbHVlLCBmYWxzZSk7XG4gIH1cbiAgZ2V0VmFyaWFibGUobmFtZTogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHNldFZhcmlhYmxlKG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IGFueSkge31cbiAgcHVibGljIGdldENvbW1lbnQobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLmdldFF1ZXN0aW9uQnlOYW1lKG5hbWUpO1xuICAgIHJldHVybiAhIXF1ZXN0aW9uID8gcXVlc3Rpb24uY29tbWVudCA6IFwiXCI7XG4gIH1cbiAgcHVibGljIHNldENvbW1lbnQobmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogc3RyaW5nLCBsb2NOb3RpZmljYXRpb246IGFueSkge1xuICAgIHRoaXMuc2V0VmFsdWVDb3JlKG5hbWUsIG5ld1ZhbHVlLCB0cnVlKTtcbiAgfVxuICBwcml2YXRlIHNldFZhbHVlQ29yZShuYW1lOiBzdHJpbmcsIG5ld0NvbHVtblZhbHVlOiBhbnksIGlzQ29tbWVudDogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLmlzU2V0dGluZ1ZhbHVlKSByZXR1cm47XG4gICAgdGhpcy51cGRhdGVRdWVzdGlvbnNWYWx1ZShuYW1lLCBuZXdDb2x1bW5WYWx1ZSwgaXNDb21tZW50KTtcbiAgICB2YXIgbmV3VmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgIHZhciBjaGFuZ2VkTmFtZSA9IGlzQ29tbWVudCA/IG5hbWUgKyBzZXR0aW5ncy5jb21tZW50UHJlZml4IDogbmFtZTtcbiAgICB2YXIgY2hhbmdlZFZhbHVlID0gaXNDb21tZW50ID8gdGhpcy5nZXRDb21tZW50KG5hbWUpIDogdGhpcy5nZXRWYWx1ZShuYW1lKTtcbiAgICB2YXIgY2hhbmdlZFF1ZXN0aW9uID0gdGhpcy5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lKTtcbiAgICB2YXIgY2hhbmdpbmdWYWx1ZSA9IHRoaXMuZGF0YS5vblJvd0NoYW5naW5nKHRoaXMsIGNoYW5nZWROYW1lLCBuZXdWYWx1ZSk7XG4gICAgaWYgKFxuICAgICAgISFjaGFuZ2VkUXVlc3Rpb24gJiZcbiAgICAgICFIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMoY2hhbmdpbmdWYWx1ZSwgY2hhbmdlZFZhbHVlKVxuICAgICkge1xuICAgICAgaWYgKGlzQ29tbWVudCkge1xuICAgICAgICBjaGFuZ2VkUXVlc3Rpb24uY29tbWVudCA9IGNoYW5naW5nVmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGFuZ2VkUXVlc3Rpb24udmFsdWUgPSBjaGFuZ2luZ1ZhbHVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuZGF0YS5pc1ZhbGlkYXRlT25WYWx1ZUNoYW5naW5nICYmXG4gICAgICAgIHRoaXMuaGFzUXVlc3RvbkVycm9yKGNoYW5nZWRRdWVzdGlvbilcbiAgICAgIClcbiAgICAgICAgcmV0dXJuO1xuICAgICAgdGhpcy5kYXRhLm9uUm93Q2hhbmdlZChcbiAgICAgICAgdGhpcyxcbiAgICAgICAgY2hhbmdlZE5hbWUsXG4gICAgICAgIG5ld1ZhbHVlLFxuICAgICAgICBuZXdDb2x1bW5WYWx1ZSA9PSBudWxsICYmICFjaGFuZ2VkUXVlc3Rpb25cbiAgICAgICk7XG4gICAgICB0aGlzLm9uQW55VmFsdWVDaGFuZ2VkKE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLlJvd1ZhcmlhYmxlTmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVRdWVzdGlvbnNWYWx1ZShcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgbmV3Q29sdW1uVmFsdWU6IGFueSxcbiAgICBpc0NvbW1lbnQ6IGJvb2xlYW5cbiAgKSB7XG4gICAgaWYgKCF0aGlzLmRldGFpbFBhbmVsKSByZXR1cm47XG4gICAgdmFyIGNvbFF1ZXN0aW9uID0gdGhpcy5nZXRRdWVzdGlvbkJ5Q29sdW1uTmFtZShuYW1lKTtcbiAgICB2YXIgZGV0YWlsUXVlc3Rpb24gPSB0aGlzLmRldGFpbFBhbmVsLmdldFF1ZXN0aW9uQnlOYW1lKG5hbWUpO1xuICAgIGlmICghY29sUXVlc3Rpb24gfHwgIWRldGFpbFF1ZXN0aW9uKSByZXR1cm47XG4gICAgdmFyIGlzQ29sUXVlc3Rpb24gPSBIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMoXG4gICAgICBuZXdDb2x1bW5WYWx1ZSxcbiAgICAgIGlzQ29tbWVudCA/IGNvbFF1ZXN0aW9uLmNvbW1lbnQgOiBjb2xRdWVzdGlvbi52YWx1ZVxuICAgICk7XG4gICAgdmFyIHF1ZXN0aW9uID0gaXNDb2xRdWVzdGlvbiA/IGRldGFpbFF1ZXN0aW9uIDogY29sUXVlc3Rpb247XG4gICAgdGhpcy5pc1NldHRpbmdWYWx1ZSA9IHRydWU7XG4gICAgaWYgKCFpc0NvbW1lbnQpIHtcbiAgICAgIHF1ZXN0aW9uLnZhbHVlID0gbmV3Q29sdW1uVmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHF1ZXN0aW9uLmNvbW1lbnQgPSBuZXdDb2x1bW5WYWx1ZTtcbiAgICB9XG4gICAgdGhpcy5pc1NldHRpbmdWYWx1ZSA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNRdWVzdG9uRXJyb3IocXVlc3Rpb246IFF1ZXN0aW9uKTogYm9vbGVhbiB7XG4gICAgaWYgKCFxdWVzdGlvbikgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChcbiAgICAgIHF1ZXN0aW9uLmhhc0Vycm9ycyh0cnVlLCB7XG4gICAgICAgIGlzT25WYWx1ZUNoYW5nZWQ6ICF0aGlzLmRhdGEuaXNWYWxpZGF0ZU9uVmFsdWVDaGFuZ2luZyxcbiAgICAgIH0pXG4gICAgKVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgaWYgKHF1ZXN0aW9uLmlzRW1wdHkoKSkgcmV0dXJuIGZhbHNlO1xuICAgIHZhciBjZWxsID0gdGhpcy5nZXRDZWxsQnlDb2x1bW5OYW1lKHF1ZXN0aW9uLm5hbWUpO1xuICAgIGlmICghY2VsbCB8fCAhY2VsbC5jb2x1bW4gfHwgIWNlbGwuY29sdW1uLmlzVW5pcXVlKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5jaGVja0lmVmFsdWVJblJvd0R1cGxpY2F0ZWQodGhpcywgcXVlc3Rpb24pO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNFbXB0eSgpIHtcbiAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcbiAgICBpZiAoSGVscGVycy5pc1ZhbHVlRW1wdHkodmFsKSkgcmV0dXJuIHRydWU7XG4gICAgZm9yICh2YXIga2V5IGluIHZhbCkge1xuICAgICAgaWYgKHZhbFtrZXldICE9PSB1bmRlZmluZWQgJiYgdmFsW2tleV0gIT09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHVibGljIGdldFF1ZXN0aW9uQnlDb2x1bW4oY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbik6IFF1ZXN0aW9uIHtcbiAgICB2YXIgY2VsbCA9IHRoaXMuZ2V0Q2VsbEJ5Q29sdW1uKGNvbHVtbik7XG4gICAgcmV0dXJuICEhY2VsbCA/IGNlbGwucXVlc3Rpb24gOiBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXRDZWxsQnlDb2x1bW4oY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbik6IE1hdHJpeERyb3Bkb3duQ2VsbCB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5jZWxsc1tpXS5jb2x1bW4gPT0gY29sdW1uKSByZXR1cm4gdGhpcy5jZWxsc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBnZXRDZWxsQnlDb2x1bW5OYW1lKGNvbHVtbk5hbWU6IHN0cmluZyk6IE1hdHJpeERyb3Bkb3duQ2VsbCB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5jZWxsc1tpXS5jb2x1bW4ubmFtZSA9PSBjb2x1bW5OYW1lKSByZXR1cm4gdGhpcy5jZWxsc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHVibGljIGdldFF1ZXN0aW9uQnlDb2x1bW5OYW1lKGNvbHVtbk5hbWU6IHN0cmluZyk6IFF1ZXN0aW9uIHtcbiAgICB2YXIgY2VsbCA9IHRoaXMuZ2V0Q2VsbEJ5Q29sdW1uTmFtZShjb2x1bW5OYW1lKTtcbiAgICByZXR1cm4gISFjZWxsID8gY2VsbC5xdWVzdGlvbiA6IG51bGw7XG4gIH1cbiAgcHVibGljIGdldCBxdWVzdGlvbnMoKTogQXJyYXk8UXVlc3Rpb24+IHtcbiAgICB2YXIgcmVzOiBBcnJheTxRdWVzdGlvbj4gPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlcy5wdXNoKHRoaXMuY2VsbHNbaV0ucXVlc3Rpb24pO1xuICAgIH1cbiAgICB2YXIgZGV0YWlsUXVlc3Rpb25zID0gISF0aGlzLmRldGFpbFBhbmVsID8gdGhpcy5kZXRhaWxQYW5lbC5xdWVzdGlvbnMgOiBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRldGFpbFF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzLnB1c2goZGV0YWlsUXVlc3Rpb25zW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgZ2V0UXVlc3Rpb25CeU5hbWUobmFtZTogc3RyaW5nKTogUXVlc3Rpb24ge1xuICAgIHZhciByZXMgPSB0aGlzLmdldFF1ZXN0aW9uQnlDb2x1bW5OYW1lKG5hbWUpO1xuICAgIGlmICghIXJlcykgcmV0dXJuIHJlcztcbiAgICByZXR1cm4gISF0aGlzLmRldGFpbFBhbmVsID8gdGhpcy5kZXRhaWxQYW5lbC5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lKSA6IG51bGw7XG4gIH1cbiAgcHVibGljIGdldFF1ZXN0aW9uc0J5TmFtZShuYW1lOiBzdHJpbmcpOiBBcnJheTxRdWVzdGlvbj4ge1xuICAgIGxldCByZXMgPSBbXTtcbiAgICBsZXQgcSA9IHRoaXMuZ2V0UXVlc3Rpb25CeUNvbHVtbk5hbWUobmFtZSk7XG4gICAgaWYgKCEhcSkgcmVzLnB1c2gocSk7XG4gICAgaWYgKCEhdGhpcy5kZXRhaWxQYW5lbCkge1xuICAgICAgcSA9IHRoaXMuZGV0YWlsUGFuZWwuZ2V0UXVlc3Rpb25CeU5hbWUobmFtZSk7XG4gICAgICBpZiAoISFxKSByZXMucHVzaChxKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U2hhcmVkUXVlc3Rpb25CeU5hbWUoY29sdW1uTmFtZTogc3RyaW5nKTogUXVlc3Rpb24ge1xuICAgIHJldHVybiAhIXRoaXMuZGF0YVxuICAgICAgPyB0aGlzLmRhdGEuZ2V0U2hhcmVkUXVlc3Rpb25CeU5hbWUoY29sdW1uTmFtZSwgdGhpcylcbiAgICAgIDogbnVsbDtcbiAgfVxuICBwdWJsaWMgY2xlYXJJbmNvcnJlY3RWYWx1ZXModmFsOiBhbnkpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gdmFsKSB7XG4gICAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLmdldFF1ZXN0aW9uQnlOYW1lKGtleSk7XG4gICAgICBpZiAocXVlc3Rpb24pIHtcbiAgICAgICAgdmFyIHFWYWwgPSBxdWVzdGlvbi52YWx1ZTtcbiAgICAgICAgcXVlc3Rpb24uY2xlYXJJbmNvcnJlY3RWYWx1ZXMoKTtcbiAgICAgICAgaWYgKCFIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMocVZhbCwgcXVlc3Rpb24udmFsdWUpKSB7XG4gICAgICAgICAgdGhpcy5zZXRWYWx1ZShrZXksIHF1ZXN0aW9uLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICF0aGlzLmdldFNoYXJlZFF1ZXN0aW9uQnlOYW1lKGtleSkgJiZcbiAgICAgICAgICBrZXkuaW5kZXhPZihzZXR0aW5ncy5tYXRyaXhUb3RhbFZhbHVlUG9zdEZpeCkgPCAwXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuc2V0VmFsdWUoa2V5LCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0TG9jYWxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRMb2NhbGUoKSA6IFwiXCI7XG4gIH1cbiAgcHVibGljIGdldE1hcmtkb3duSHRtbCh0ZXh0OiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRNYXJrZG93bkh0bWwodGV4dCwgbmFtZSkgOiBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXRSZW5kZXJlcihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0UmVuZGVyZXIobmFtZSkgOiBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXRQcm9jZXNzZWRUZXh0KHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRQcm9jZXNzZWRUZXh0KHRleHQpIDogdGV4dDtcbiAgfVxuICBwdWJsaWMgbG9jU3Ryc0NoYW5nZWQoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmNlbGxzW2ldLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgfVxuICAgIGlmICghIXRoaXMuZGV0YWlsUGFuZWwpIHtcbiAgICAgIHRoaXMuZGV0YWlsUGFuZWwubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIHVwZGF0ZUNlbGxRdWVzdGlvbk9uQ29sdW1uQ2hhbmdlZChcbiAgICBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBuZXdWYWx1ZTogYW55XG4gICkge1xuICAgIHZhciBjZWxsID0gdGhpcy5nZXRDZWxsQnlDb2x1bW4oY29sdW1uKTtcbiAgICBpZiAoIWNlbGwpIHJldHVybjtcbiAgICB0aGlzLnVwZGF0ZUNlbGxPbkNvbHVtbkNoYW5nZWQoY2VsbCwgbmFtZSwgbmV3VmFsdWUpO1xuICB9XG4gIHB1YmxpYyB1cGRhdGVDZWxsUXVlc3Rpb25PbkNvbHVtbkl0ZW1WYWx1ZUNoYW5nZWQoXG4gICAgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbixcbiAgICBwcm9wZXJ0eU5hbWU6IHN0cmluZyxcbiAgICBvYmo6IEl0ZW1WYWx1ZSxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgbmV3VmFsdWU6IGFueSxcbiAgICBvbGRWYWx1ZTogYW55XG4gICkge1xuICAgIHZhciBjZWxsID0gdGhpcy5nZXRDZWxsQnlDb2x1bW4oY29sdW1uKTtcbiAgICBpZiAoIWNlbGwpIHJldHVybjtcbiAgICB0aGlzLnVwZGF0ZUNlbGxPbkNvbHVtbkl0ZW1WYWx1ZUNoYW5nZWQoXG4gICAgICBjZWxsLFxuICAgICAgcHJvcGVydHlOYW1lLFxuICAgICAgb2JqLFxuICAgICAgbmFtZSxcbiAgICAgIG5ld1ZhbHVlLFxuICAgICAgb2xkVmFsdWVcbiAgICApO1xuICB9XG4gIHB1YmxpYyBvblF1ZXN0aW9uUmVhZE9ubHlDaGFuZ2VkKHBhcmVudElzUmVhZE9ubHk6IGJvb2xlYW4pIHtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbnM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHF1ZXN0aW9uc1tpXS5yZWFkT25seSA9IHBhcmVudElzUmVhZE9ubHk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBoYXNFcnJvcnMoXG4gICAgZmlyZUNhbGxiYWNrOiBib29sZWFuLFxuICAgIHJlYzogYW55LFxuICAgIHJhaXNlT25Db21wbGV0ZWRBc3luY1ZhbGlkYXRvcnM6ICgpID0+IHZvaWRcbiAgKTogYm9vbGVhbiB7XG4gICAgdmFyIHJlcyA9IGZhbHNlO1xuICAgIHZhciBjZWxscyA9IHRoaXMuY2VsbHM7XG4gICAgaWYgKCFjZWxscykgcmV0dXJuIHJlcztcbiAgICBmb3IgKHZhciBjb2xJbmRleCA9IDA7IGNvbEluZGV4IDwgY2VsbHMubGVuZ3RoOyBjb2xJbmRleCsrKSB7XG4gICAgICBpZiAoIWNlbGxzW2NvbEluZGV4XSkgY29udGludWU7XG4gICAgICB2YXIgcXVlc3Rpb24gPSBjZWxsc1tjb2xJbmRleF0ucXVlc3Rpb247XG4gICAgICBpZiAoIXF1ZXN0aW9uIHx8ICFxdWVzdGlvbi52aXNpYmxlKSBjb250aW51ZTtcbiAgICAgIHF1ZXN0aW9uLm9uQ29tcGxldGVkQXN5bmNWYWxpZGF0b3JzID0gKGhhc0Vycm9yczogYm9vbGVhbikgPT4ge1xuICAgICAgICByYWlzZU9uQ29tcGxldGVkQXN5bmNWYWxpZGF0b3JzKCk7XG4gICAgICB9O1xuICAgICAgaWYgKCEhcmVjICYmIHJlYy5pc09uVmFsdWVDaGFuZ2VkID09PSB0cnVlICYmIHF1ZXN0aW9uLmlzRW1wdHkoKSlcbiAgICAgICAgY29udGludWU7XG4gICAgICByZXMgPSBxdWVzdGlvbi5oYXNFcnJvcnMoZmlyZUNhbGxiYWNrLCByZWMpIHx8IHJlcztcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzUGFuZWwpIHtcbiAgICAgIHRoaXMuZW5zdXJlRGV0YWlsUGFuZWwoKTtcbiAgICAgIHZhciBwYW5lbEhhc0Vycm9yID0gdGhpcy5kZXRhaWxQYW5lbC5oYXNFcnJvcnMoZmlyZUNhbGxiYWNrLCBmYWxzZSwgcmVjKTtcbiAgICAgIGlmICghcmVjLmhpZGVFcnJvcmVkUGFuZWwgJiYgcGFuZWxIYXNFcnJvciAmJiBmaXJlQ2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlYy5pc1NpbmdsZURldGFpbFBhbmVsKSB7XG4gICAgICAgICAgcmVjLmhpZGVFcnJvcmVkUGFuZWwgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2hvd0RldGFpbFBhbmVsKCk7XG4gICAgICB9XG4gICAgICByZXMgPSBwYW5lbEhhc0Vycm9yIHx8IHJlcztcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVDZWxsT25Db2x1bW5DaGFuZ2VkKFxuICAgIGNlbGw6IE1hdHJpeERyb3Bkb3duQ2VsbCxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgbmV3VmFsdWU6IGFueVxuICApIHtcbiAgICBjZWxsLnF1ZXN0aW9uW25hbWVdID0gbmV3VmFsdWU7XG4gIH1cbiAgcHVibGljIHVwZGF0ZUNlbGxPbkNvbHVtbkl0ZW1WYWx1ZUNoYW5nZWQoXG4gICAgY2VsbDogTWF0cml4RHJvcGRvd25DZWxsLFxuICAgIHByb3BlcnR5TmFtZTogc3RyaW5nLFxuICAgIG9iajogSXRlbVZhbHVlLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBuZXdWYWx1ZTogYW55LFxuICAgIG9sZFZhbHVlOiBhbnlcbiAgKSB7XG4gICAgdmFyIGl0ZW1zID0gY2VsbC5xdWVzdGlvbltwcm9wZXJ0eU5hbWVdO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShpdGVtcykpIHJldHVybjtcbiAgICB2YXIgdmFsID0gbmFtZSA9PT0gXCJ2YWx1ZVwiID8gb2xkVmFsdWUgOiBvYmpbXCJ2YWx1ZVwiXTtcbiAgICB2YXIgaXRlbSA9IEl0ZW1WYWx1ZS5nZXRJdGVtQnlWYWx1ZShpdGVtcywgdmFsKTtcbiAgICBpZiAoIWl0ZW0pIHJldHVybjtcbiAgICBpdGVtW25hbWVdID0gbmV3VmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIGJ1aWxkQ2VsbHModmFsdWU6IGFueSkge1xuICAgIHRoaXMuaXNTZXR0aW5nVmFsdWUgPSB0cnVlO1xuICAgIHZhciBjb2x1bW5zID0gdGhpcy5kYXRhLmNvbHVtbnM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY29sdW1uID0gY29sdW1uc1tpXTtcbiAgICAgIGlmICghY29sdW1uLmlzVmlzaWJsZSkgY29udGludWU7XG4gICAgICB2YXIgY2VsbCA9IHRoaXMuY3JlYXRlQ2VsbChjb2x1bW4pO1xuICAgICAgdGhpcy5jZWxscy5wdXNoKGNlbGwpO1xuICAgICAgdmFyIGNlbGxWYWx1ZSA9IHRoaXMuZ2V0Q2VsbFZhbHVlKHZhbHVlLCBjb2x1bW4ubmFtZSk7XG4gICAgICBpZiAoIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KGNlbGxWYWx1ZSkpIHtcbiAgICAgICAgY2VsbC5xdWVzdGlvbi52YWx1ZSA9IGNlbGxWYWx1ZTtcbiAgICAgICAgdmFyIGNvbW1lbnRLZXkgPSBjb2x1bW4ubmFtZSArIHNldHRpbmdzLmNvbW1lbnRQcmVmaXg7XG4gICAgICAgIGlmICghIXZhbHVlICYmICFIZWxwZXJzLmlzVmFsdWVFbXB0eSh2YWx1ZVtjb21tZW50S2V5XSkpIHtcbiAgICAgICAgICBjZWxsLnF1ZXN0aW9uLmNvbW1lbnQgPSB2YWx1ZVtjb21tZW50S2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmlzU2V0dGluZ1ZhbHVlID0gZmFsc2U7XG4gIH1cbiAgcHJpdmF0ZSBnZXRDZWxsVmFsdWUodmFsdWU6IGFueSwgbmFtZTogc3RyaW5nKTogYW55IHtcbiAgICBpZiAoISF0aGlzLmVkaXRpbmdPYmopXG4gICAgICByZXR1cm4gU2VyaWFsaXplci5nZXRPYmpQcm9wZXJ0eVZhbHVlKHRoaXMuZWRpdGluZ09iaiwgbmFtZSk7XG4gICAgcmV0dXJuICEhdmFsdWUgPyB2YWx1ZVtuYW1lXSA6IHVuZGVmaW5lZDtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlQ2VsbChjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKTogTWF0cml4RHJvcGRvd25DZWxsIHtcbiAgICByZXR1cm4gbmV3IE1hdHJpeERyb3Bkb3duQ2VsbChjb2x1bW4sIHRoaXMsIHRoaXMuZGF0YSk7XG4gIH1cbiAgZ2V0U3VydmV5RGF0YSgpOiBJU3VydmV5RGF0YSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgZ2V0U3VydmV5KCk6IElTdXJ2ZXkge1xuICAgIHJldHVybiB0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0U3VydmV5KCkgOiBudWxsO1xuICB9XG4gIGdldFRleHRQcm9jZXNzb3IoKTogSVRleHRQcm9jZXNzb3Ige1xuICAgIHJldHVybiB0aGlzLnRleHRQcmVQcm9jZXNzb3I7XG4gIH1cbiAgcHVibGljIGdldCByb3dJbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiAhIXRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRSb3dJbmRleCh0aGlzKSArIDEgOiAtMTtcbiAgfVxuICBwdWJsaWMgZ2V0IGVkaXRpbmdPYmooKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdGluZ09ialZhbHVlO1xuICB9XG4gIHByaXZhdGUgb25FZGl0aW5nT2JqUHJvcGVydHlDaGFuZ2VkOiAoc2VuZGVyOiBCYXNlLCBvcHRpb25zOiBhbnkpID0+IHZvaWQ7XG4gIHByaXZhdGUgZWRpdGluZ09ialZhbHVlOiBCYXNlO1xuICBwdWJsaWMgZGlzcG9zZSgpIHtcbiAgICBpZiAoISF0aGlzLmVkaXRpbmdPYmopIHtcbiAgICAgIHRoaXMuZWRpdGluZ09iai5vblByb3BlcnR5Q2hhbmdlZC5yZW1vdmUoXG4gICAgICAgIHRoaXMub25FZGl0aW5nT2JqUHJvcGVydHlDaGFuZ2VkXG4gICAgICApO1xuICAgICAgdGhpcy5lZGl0aW5nT2JqVmFsdWUgPSBudWxsO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIHN1YnNjcmliZVRvQ2hhbmdlcyh2YWx1ZTogYW55KSB7XG4gICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUuZ2V0VHlwZSB8fCAhdmFsdWUub25Qcm9wZXJ0eUNoYW5nZWQpIHJldHVybjtcbiAgICBpZiAodmFsdWUgPT09IHRoaXMuZWRpdGluZ09iaikgcmV0dXJuO1xuICAgIHRoaXMuZWRpdGluZ09ialZhbHVlID0gPEJhc2U+dmFsdWU7XG4gICAgdGhpcy5vbkVkaXRpbmdPYmpQcm9wZXJ0eUNoYW5nZWQgPSAoc2VuZGVyOiBCYXNlLCBvcHRpb25zOiBhbnkpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlT25TZXRWYWx1ZShvcHRpb25zLm5hbWUsIG9wdGlvbnMubmV3VmFsdWUpO1xuICAgIH07XG4gICAgdGhpcy5lZGl0aW5nT2JqLm9uUHJvcGVydHlDaGFuZ2VkLmFkZCh0aGlzLm9uRWRpdGluZ09ialByb3BlcnR5Q2hhbmdlZCk7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVPblNldFZhbHVlKG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IGFueSkge1xuICAgIHRoaXMuaXNTZXR0aW5nVmFsdWUgPSB0cnVlO1xuICAgIGxldCBxdWVzdGlvbnMgPSB0aGlzLmdldFF1ZXN0aW9uc0J5TmFtZShuYW1lKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgcXVlc3Rpb25zW2ldLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgfVxuICAgIHRoaXMuaXNTZXR0aW5nVmFsdWUgPSBmYWxzZTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIE1hdHJpeERyb3Bkb3duVG90YWxSb3dNb2RlbCBleHRlbmRzIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlIHtcbiAgY29uc3RydWN0b3IoZGF0YTogSU1hdHJpeERyb3Bkb3duRGF0YSkge1xuICAgIHN1cGVyKGRhdGEsIG51bGwpO1xuICAgIHRoaXMuYnVpbGRDZWxscyhudWxsKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlQ2VsbChjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKTogTWF0cml4RHJvcGRvd25DZWxsIHtcbiAgICByZXR1cm4gbmV3IE1hdHJpeERyb3Bkb3duVG90YWxDZWxsKGNvbHVtbiwgdGhpcywgdGhpcy5kYXRhKTtcbiAgfVxuICBwdWJsaWMgc2V0VmFsdWUobmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogYW55KSB7XG4gICAgaWYgKCEhdGhpcy5kYXRhICYmICF0aGlzLmlzU2V0dGluZ1ZhbHVlKSB7XG4gICAgICB0aGlzLmRhdGEub25Ub3RhbFZhbHVlQ2hhbmdlZCgpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgcnVuQ29uZGl0aW9uKHZhbHVlczogSGFzaFRhYmxlPGFueT4sIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+KSB7XG4gICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgIHZhciBwcmV2VmFsdWU7XG4gICAgZG8ge1xuICAgICAgcHJldlZhbHVlID0gSGVscGVycy5nZXRVbmJpbmRWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICAgIHN1cGVyLnJ1bkNvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgICAgY291bnRlcisrO1xuICAgIH0gd2hpbGUgKCFIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMocHJldlZhbHVlLCB0aGlzLnZhbHVlKSAmJiBjb3VudGVyIDwgMyk7XG4gIH1cbiAgcHJvdGVjdGVkIHVwZGF0ZUNlbGxPbkNvbHVtbkNoYW5nZWQoXG4gICAgY2VsbDogTWF0cml4RHJvcGRvd25DZWxsLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBuZXdWYWx1ZTogYW55XG4gICkge1xuICAgICg8TWF0cml4RHJvcGRvd25Ub3RhbENlbGw+Y2VsbCkudXBkYXRlQ2VsbFF1ZXN0aW9uKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwge1xuICBwcml2YXRlIHN0YXRpYyBjb3VudGVyID0gMTtcbiAgcHJpdmF0ZSBpZFZhbHVlOiBudW1iZXI7XG4gIHByaXZhdGUgaXRlbVZhbHVlOiBJdGVtVmFsdWU7XG4gIHB1YmxpYyBtaW5XaWR0aDogc3RyaW5nID0gXCJcIjtcbiAgcHVibGljIHdpZHRoOiBzdHJpbmcgPSBcIlwiO1xuICBwdWJsaWMgbG9jVGl0bGU6IExvY2FsaXphYmxlU3RyaW5nO1xuICBwdWJsaWMgY2VsbDogTWF0cml4RHJvcGRvd25DZWxsO1xuICBwdWJsaWMgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbjtcbiAgcHVibGljIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2U7XG4gIHB1YmxpYyBxdWVzdGlvbjogUXVlc3Rpb247XG4gIHB1YmxpYyBpc1JlbW92ZVJvdzogYm9vbGVhbjtcbiAgcHVibGljIGNob2ljZUluZGV4OiBudW1iZXI7XG4gIHB1YmxpYyBtYXRyaXg6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2U7XG4gIHB1YmxpYyByZXF1aXJlZFRleHQ6IHN0cmluZztcbiAgcHVibGljIGlzRW1wdHk6IGJvb2xlYW47XG4gIHB1YmxpYyBjb2xTcGFuczogbnVtYmVyID0gMTtcbiAgcHVibGljIHBhbmVsOiBQYW5lbE1vZGVsO1xuICBwdWJsaWMgaXNTaG93SGlkZURldGFpbDogYm9vbGVhbjtcbiAgcHVibGljIGlzQWN0aW9uc0NlbGw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGNsYXNzTmFtZTogc3RyaW5nID0gXCJcIjtcbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaWRWYWx1ZSA9IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwuY291bnRlcisrO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzUXVlc3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5xdWVzdGlvbjtcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc1RpdGxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMubG9jVGl0bGU7XG4gIH1cbiAgcHVibGljIGdldCBoYXNQYW5lbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnBhbmVsO1xuICB9XG4gIHB1YmxpYyBnZXQgaWQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5pZFZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXQgc2hvd0Vycm9yT25Ub3AoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd0Vycm9yT25Db3JlKFwidG9wXCIpO1xuICB9XG4gIHB1YmxpYyBnZXQgc2hvd0Vycm9yT25Cb3R0b20oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd0Vycm9yT25Db3JlKFwiYm90dG9tXCIpO1xuICB9XG4gIHByaXZhdGUgc2hvd0Vycm9yT25Db3JlKGxvY2F0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5nZXRTaG93RXJyb3JMb2NhdGlvbigpID09IGxvY2F0aW9uICYmXG4gICAgICAoIXRoaXMuaXNDaG9pY2UgfHwgdGhpcy5pc0ZpcnN0Q2hvaWNlKVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRTaG93RXJyb3JMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmhhc1F1ZXN0aW9uID8gdGhpcy5xdWVzdGlvbi5zdXJ2ZXkucXVlc3Rpb25FcnJvckxvY2F0aW9uIDogXCJcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGl0ZW0oKTogSXRlbVZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtVmFsdWU7XG4gIH1cbiAgcHVibGljIHNldCBpdGVtKHZhbDogSXRlbVZhbHVlKSB7XG4gICAgdGhpcy5pdGVtVmFsdWUgPSB2YWw7XG4gICAgaWYgKCEhdmFsKSB7XG4gICAgICB2YWwuaGlkZUNhcHRpb24gPSB0cnVlO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0IGlzQ2hvaWNlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuaXRlbTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNob2ljZVZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuaXNDaG9pY2UgPyB0aGlzLml0ZW0udmFsdWUgOiBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNDaGVja2JveCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0Nob2ljZSAmJiB0aGlzLnF1ZXN0aW9uLmdldFR5cGUoKSA9PSBcImNoZWNrYm94XCI7XG4gIH1cbiAgcHVibGljIGdldCBpc0ZpcnN0Q2hvaWNlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNob2ljZUluZGV4ID09PSAwO1xuICB9XG4gIHB1YmxpYyBnZXQgY3NzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY2xhc3NOYW1lICtcbiAgICAgICh0aGlzLnF1ZXN0aW9uLmVycm9ycy5sZW5ndGggPiAwID8gXCIgXCIgKyB0aGlzLnF1ZXN0aW9uLmNzc0Vycm9yIDogXCJcIilcbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXQgaGVhZGVycygpOiBzdHJpbmcge1xuICAgIGlmIChcbiAgICAgIHRoaXMuY2VsbCAmJlxuICAgICAgdGhpcy5jZWxsLmNvbHVtbiAmJlxuICAgICAgdGhpcy5jZWxsLmNvbHVtbi5pc1Nob3dJbk11bHRpcGxlQ29sdW1uc1xuICAgICkge1xuICAgICAgcmV0dXJuIHRoaXMuaXRlbS5sb2NUZXh0LnJlbmRlcmVkSHRtbDtcbiAgICB9XG4gICAgaWYgKHRoaXMucXVlc3Rpb24gJiYgdGhpcy5xdWVzdGlvbi5pc1Zpc2libGUpIHtcbiAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmxvY1RpdGxlLnJlbmRlcmVkSHRtbDtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzVGl0bGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvY1RpdGxlLnJlbmRlcmVkSHRtbCB8fCBcIlwiO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIHB1YmxpYyBjYWxjdWxhdGVGaW5hbENsYXNzTmFtZShtYXRyaXhDc3NDbGFzc2VzOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IHF1ZXN0aW9uQ3NzID0gdGhpcy5jZWxsLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgbGV0IGNsYXNzTmFtZSA9IFwiXCI7XG4gICAgaWYgKCEhcXVlc3Rpb25Dc3MpIHtcbiAgICAgIGNsYXNzTmFtZSA9IFwiXCI7XG4gICAgICBpZiAoISFxdWVzdGlvbkNzcy5pdGVtVmFsdWUpIHtcbiAgICAgICAgY2xhc3NOYW1lICs9IFwiIFwiICsgcXVlc3Rpb25Dc3MuaXRlbVZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKCEhcXVlc3Rpb25Dc3MuYXNDZWxsKSB7XG4gICAgICAgIGlmICghIWNsYXNzTmFtZSkgY2xhc3NOYW1lICs9IFwiXCI7XG4gICAgICAgIGNsYXNzTmFtZSArPSBxdWVzdGlvbkNzcy5hc0NlbGw7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghY2xhc3NOYW1lICYmICEhbWF0cml4Q3NzQ2xhc3Nlcykge1xuICAgICAgY2xhc3NOYW1lID0gbWF0cml4Q3NzQ2xhc3Nlcy5jZWxsO1xuICAgIH1cbiAgICBjbGFzc05hbWUgKz1cbiAgICAgIHRoaXMucXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA+IDAgPyBcIiBcIiArIHF1ZXN0aW9uQ3NzLmhhc0Vycm9yIDogXCJcIjtcblxuICAgIGlmICh0aGlzLmlzQ2hvaWNlKSB7XG4gICAgICBjbGFzc05hbWUgKz0gXCIgXCIgKyBtYXRyaXhDc3NDbGFzc2VzLmNob2ljZUNlbGw7XG4gICAgfVxuICAgIC8vJ3RleHQtYWxpZ24nOiAkZGF0YS5pc0Nob2ljZSA/ICdjZW50ZXInOiAnJ1xuICAgIHJldHVybiBjbGFzc05hbWU7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdyB7XG4gIHB1YmxpYyBpc0RldGFpbFJvdzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZTtcbiAgcHJpdmF0ZSBzdGF0aWMgY291bnRlciA9IDE7XG4gIHByaXZhdGUgaWRWYWx1ZTogbnVtYmVyO1xuICBwdWJsaWMgY2VsbHM6IEFycmF5PFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGw+ID0gW107XG4gIHB1YmxpYyBjbGFzc05hbWU6IHN0cmluZyA9IFwiXCI7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmlkVmFsdWUgPSBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3cuY291bnRlcisrO1xuICB9XG4gIHB1YmxpYyBnZXQgaWQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5pZFZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZSBleHRlbmRzIEJhc2Uge1xuICBwcml2YXRlIGhlYWRlclJvd1ZhbHVlOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3c7XG4gIHByaXZhdGUgZm9vdGVyUm93VmFsdWU6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdztcbiAgcHJpdmF0ZSBoYXNSZW1vdmVSb3dzVmFsdWU6IGJvb2xlYW47XG4gIHByaXZhdGUgcm93c0FjdGlvbnM6IEFycmF5PEFycmF5PElBY3Rpb24+PjtcbiAgcHJpdmF0ZSBjc3NDbGFzc2VzOiBhbnk7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgbWF0cml4OiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmNyZWF0ZU5ld0FycmF5KFwicm93c1wiKTtcbiAgICB0aGlzLmJ1aWxkKCk7XG4gIH1cbiAgcHVibGljIGdldCBzaG93VGFibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dUYWJsZVwiLCB0cnVlKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHNob3dIZWFkZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dIZWFkZXJcIik7XG4gIH1cbiAgcHVibGljIGdldCBzaG93QWRkUm93T25Ub3AoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dBZGRSb3dPblRvcFwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIGdldCBzaG93QWRkUm93T25Cb3R0b20oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dBZGRSb3dPbkJvdHRvbVwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIGdldCBzaG93Rm9vdGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1hdHJpeC5oYXNGb290ZXIgJiYgdGhpcy5tYXRyaXguaXNDb2x1bW5MYXlvdXRIb3Jpem9udGFsO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzRm9vdGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuZm9vdGVyUm93O1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzUmVtb3ZlUm93cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNSZW1vdmVSb3dzVmFsdWU7XG4gIH1cbiAgcHVibGljIGlzUmVxdWlyZVJlc2V0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmhhc1JlbW92ZVJvd3MgIT0gdGhpcy5tYXRyaXguY2FuUmVtb3ZlUm93cyB8fFxuICAgICAgIXRoaXMubWF0cml4LmlzQ29sdW1uTGF5b3V0SG9yaXpvbnRhbFxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldCBoZWFkZXJSb3coKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93IHtcbiAgICByZXR1cm4gdGhpcy5oZWFkZXJSb3dWYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGZvb3RlclJvdygpOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3cge1xuICAgIHJldHVybiB0aGlzLmZvb3RlclJvd1ZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXQgcm93cygpOiBBcnJheTxRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3c+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicm93c1wiKTtcbiAgfVxuICBwcm90ZWN0ZWQgYnVpbGQoKSB7XG4gICAgdGhpcy5oYXNSZW1vdmVSb3dzVmFsdWUgPSB0aGlzLm1hdHJpeC5jYW5SZW1vdmVSb3dzO1xuICAgIC8vYnVpbGQgcm93cyBub3dcbiAgICB2YXIgcm93cyA9IHRoaXMubWF0cml4LnZpc2libGVSb3dzO1xuICAgIHRoaXMuY3NzQ2xhc3NlcyA9IHRoaXMubWF0cml4LmNzc0NsYXNzZXM7XG4gICAgdGhpcy5idWlsZFJvd3NBY3Rpb25zKCk7XG4gICAgdGhpcy5idWlsZEhlYWRlcigpO1xuICAgIHRoaXMuYnVpbGRSb3dzKCk7XG4gICAgdGhpcy5idWlsZEZvb3RlcigpO1xuICAgIHRoaXMudXBkYXRlU2hvd1RhYmxlQW5kQWRkUm93KCk7XG4gIH1cbiAgcHVibGljIHVwZGF0ZVNob3dUYWJsZUFuZEFkZFJvdygpIHtcbiAgICB2YXIgc2hvd1RhYmxlID1cbiAgICAgIHRoaXMucm93cy5sZW5ndGggPiAwIHx8XG4gICAgICB0aGlzLm1hdHJpeC5pc0Rlc2lnbk1vZGUgfHxcbiAgICAgICF0aGlzLm1hdHJpeC5nZXRTaG93Q29sdW1uc0lmRW1wdHkoKTtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93VGFibGVcIiwgc2hvd1RhYmxlKTtcbiAgICB2YXIgc2hvd0FkZFJvdyA9IHRoaXMubWF0cml4LmNhbkFkZFJvdyAmJiBzaG93VGFibGU7XG4gICAgdmFyIHNob3dBZGRSb3dPblRvcCA9IHNob3dBZGRSb3c7XG4gICAgdmFyIHNob3dBZGRSb3dPbkJvdHRvbSA9IHNob3dBZGRSb3c7XG4gICAgaWYgKHNob3dBZGRSb3dPblRvcCkge1xuICAgICAgaWYgKHRoaXMubWF0cml4LmdldEFkZFJvd0xvY2F0aW9uKCkgPT09IFwiZGVmYXVsdFwiKSB7XG4gICAgICAgIHNob3dBZGRSb3dPblRvcCA9IHRoaXMubWF0cml4LmNvbHVtbkxheW91dCA9PT0gXCJ2ZXJ0aWNhbFwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2hvd0FkZFJvd09uVG9wID0gdGhpcy5tYXRyaXguZ2V0QWRkUm93TG9jYXRpb24oKSAhPT0gXCJib3R0b21cIjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNob3dBZGRSb3dPbkJvdHRvbSAmJiB0aGlzLm1hdHJpeC5nZXRBZGRSb3dMb2NhdGlvbigpICE9PSBcInRvcEJvdHRvbVwiKSB7XG4gICAgICBzaG93QWRkUm93T25Cb3R0b20gPSAhc2hvd0FkZFJvd09uVG9wO1xuICAgIH1cbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93QWRkUm93T25Ub3BcIiwgc2hvd0FkZFJvd09uVG9wKTtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93QWRkUm93T25Cb3R0b21cIiwgc2hvd0FkZFJvd09uQm90dG9tKTtcbiAgfVxuICBwdWJsaWMgb25BZGRlZFJvdygpIHtcbiAgICBpZiAodGhpcy5nZXRSZW5kZXJlZERhdGFSb3dDb3VudCgpID49IHRoaXMubWF0cml4LnZpc2libGVSb3dzLmxlbmd0aClcbiAgICAgIHJldHVybjtcbiAgICB2YXIgcm93ID0gdGhpcy5tYXRyaXgudmlzaWJsZVJvd3NbdGhpcy5tYXRyaXgudmlzaWJsZVJvd3MubGVuZ3RoIC0gMV07XG4gICAgdGhpcy5yb3dzQWN0aW9ucy5wdXNoKHRoaXMuYnVpbGRSb3dBY3Rpb25zKHJvdykpO1xuICAgIHRoaXMuYWRkSG9yaXpvbnRhbFJvdyhcbiAgICAgIHRoaXMucm93cyxcbiAgICAgIHJvdyxcbiAgICAgIHRoaXMubWF0cml4LnZpc2libGVSb3dzLmxlbmd0aCA9PSAxICYmICF0aGlzLm1hdHJpeC5zaG93SGVhZGVyXG4gICAgKTtcbiAgICB0aGlzLnVwZGF0ZVNob3dUYWJsZUFuZEFkZFJvdygpO1xuICB9XG4gIHByaXZhdGUgZ2V0UmVuZGVyZWREYXRhUm93Q291bnQoKTogbnVtYmVyIHtcbiAgICB2YXIgcmVzID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCF0aGlzLnJvd3NbaV0uaXNEZXRhaWxSb3cpIHJlcysrO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBvblJlbW92ZWRSb3cocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSkge1xuICAgIHZhciByb3dJbmRleCA9IHRoaXMuZ2V0UmVuZGVyZWRSb3dJbmRleChyb3cpO1xuICAgIGlmIChyb3dJbmRleCA8IDApIHJldHVybjtcbiAgICB0aGlzLnJvd3NBY3Rpb25zLnNwbGljZShyb3dJbmRleCwgMSk7XG4gICAgdmFyIHJlbW92ZUNvdW50ID0gMTtcbiAgICBpZiAoXG4gICAgICByb3dJbmRleCA8IHRoaXMucm93cy5sZW5ndGggLSAxICYmXG4gICAgICB0aGlzLnJvd3Nbcm93SW5kZXggKyAxXS5pc0RldGFpbFJvd1xuICAgICkge1xuICAgICAgcmVtb3ZlQ291bnQrKztcbiAgICB9XG4gICAgdGhpcy5yb3dzLnNwbGljZShyb3dJbmRleCwgcmVtb3ZlQ291bnQpO1xuICAgIHRoaXMudXBkYXRlU2hvd1RhYmxlQW5kQWRkUm93KCk7XG4gIH1cbiAgcHVibGljIG9uRGV0YWlsUGFuZWxDaGFuZ2VWaXNpYmlsaXR5KFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gICAgaXNTaG93aW5nOiBib29sZWFuXG4gICkge1xuICAgIHZhciByb3dJbmRleCA9IHRoaXMuZ2V0UmVuZGVyZWRSb3dJbmRleChyb3cpO1xuICAgIGlmIChyb3dJbmRleCA8IDApIHJldHVybjtcbiAgICB2YXIgcGFuZWxSb3dJbmRleCA9XG4gICAgICByb3dJbmRleCA8IHRoaXMucm93cy5sZW5ndGggLSAxICYmIHRoaXMucm93c1tyb3dJbmRleCArIDFdLmlzRGV0YWlsUm93XG4gICAgICAgID8gcm93SW5kZXggKyAxXG4gICAgICAgIDogLTE7XG4gICAgaWYgKChpc1Nob3dpbmcgJiYgcGFuZWxSb3dJbmRleCA+IC0xKSB8fCAoIWlzU2hvd2luZyAmJiBwYW5lbFJvd0luZGV4IDwgMCkpXG4gICAgICByZXR1cm47XG4gICAgaWYgKGlzU2hvd2luZykge1xuICAgICAgdmFyIGRldGFpbFJvdyA9IHRoaXMuY3JlYXRlRGV0YWlsUGFuZWxSb3cocm93LCB0aGlzLnJvd3Nbcm93SW5kZXhdKTtcbiAgICAgIHRoaXMucm93cy5zcGxpY2Uocm93SW5kZXggKyAxLCAwLCBkZXRhaWxSb3cpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvd3Muc3BsaWNlKHBhbmVsUm93SW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGdldFJlbmRlcmVkUm93SW5kZXgocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSk6IG51bWJlciB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLnJvd3NbaV0ucm93ID09IHJvdykgcmV0dXJuIGk7XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfVxuICBwcm90ZWN0ZWQgYnVpbGRSb3dzQWN0aW9ucygpIHtcbiAgICB0aGlzLnJvd3NBY3Rpb25zID0gW107XG4gICAgdmFyIHJvd3MgPSB0aGlzLm1hdHJpeC52aXNpYmxlUm93cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMucm93c0FjdGlvbnMucHVzaCh0aGlzLmJ1aWxkUm93QWN0aW9ucyhyb3dzW2ldKSk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBidWlsZEhlYWRlcigpIHtcbiAgICB2YXIgY29sSGVhZGVycyA9XG4gICAgICB0aGlzLm1hdHJpeC5pc0NvbHVtbkxheW91dEhvcml6b250YWwgJiYgdGhpcy5tYXRyaXguc2hvd0hlYWRlcjtcbiAgICB2YXIgaXNTaG93biA9XG4gICAgICBjb2xIZWFkZXJzIHx8XG4gICAgICAodGhpcy5tYXRyaXguaGFzUm93VGV4dCAmJiAhdGhpcy5tYXRyaXguaXNDb2x1bW5MYXlvdXRIb3Jpem9udGFsKTtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93SGVhZGVyXCIsIGlzU2hvd24pO1xuICAgIGlmICghaXNTaG93bikgcmV0dXJuO1xuICAgIHRoaXMuaGVhZGVyUm93VmFsdWUgPSBuZXcgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93KCk7XG4gICAgaWYgKHRoaXMuaGFzQWN0aW9uQ2VsbEluUm93cyhcInN0YXJ0XCIpKSB7XG4gICAgICB0aGlzLmhlYWRlclJvdy5jZWxscy5wdXNoKHRoaXMuY3JlYXRlSGVhZGVyQ2VsbChudWxsKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLm1hdHJpeC5oYXNSb3dUZXh0ICYmIHRoaXMubWF0cml4LnNob3dIZWFkZXIpIHtcbiAgICAgIHRoaXMuaGVhZGVyUm93LmNlbGxzLnB1c2godGhpcy5jcmVhdGVIZWFkZXJDZWxsKG51bGwpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubWF0cml4LmlzQ29sdW1uTGF5b3V0SG9yaXpvbnRhbCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1hdHJpeC52aXNpYmxlQ29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY29sdW1uID0gdGhpcy5tYXRyaXgudmlzaWJsZUNvbHVtbnNbaV07XG4gICAgICAgIGlmICghY29sdW1uLmhhc1Zpc2libGVDZWxsKSBjb250aW51ZTtcbiAgICAgICAgaWYgKGNvbHVtbi5pc1Nob3dJbk11bHRpcGxlQ29sdW1ucykge1xuICAgICAgICAgIHRoaXMuY3JlYXRlTXV0bGlwbGVDb2x1bW5zSGVhZGVyKGNvbHVtbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5oZWFkZXJSb3cuY2VsbHMucHVzaCh0aGlzLmNyZWF0ZUhlYWRlckNlbGwoY29sdW1uKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHJvd3MgPSB0aGlzLm1hdHJpeC52aXNpYmxlUm93cztcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLmhlYWRlclJvdy5jZWxscy5wdXNoKHRoaXMuY3JlYXRlVGV4dENlbGwocm93c1tpXS5sb2NUZXh0KSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5tYXRyaXguaGFzRm9vdGVyKSB7XG4gICAgICAgIHRoaXMuaGVhZGVyUm93LmNlbGxzLnB1c2goXG4gICAgICAgICAgdGhpcy5jcmVhdGVUZXh0Q2VsbCh0aGlzLm1hdHJpeC5nZXRGb290ZXJUZXh0KCkpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc0FjdGlvbkNlbGxJblJvd3MoXCJlbmRcIikpIHtcbiAgICAgIHRoaXMuaGVhZGVyUm93LmNlbGxzLnB1c2godGhpcy5jcmVhdGVIZWFkZXJDZWxsKG51bGwpKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGJ1aWxkRm9vdGVyKCkge1xuICAgIGlmICghdGhpcy5zaG93Rm9vdGVyKSByZXR1cm47XG4gICAgdGhpcy5mb290ZXJSb3dWYWx1ZSA9IG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3coKTtcbiAgICBpZiAodGhpcy5oYXNBY3Rpb25DZWxsSW5Sb3dzKFwic3RhcnRcIikpIHtcbiAgICAgIHRoaXMuZm9vdGVyUm93LmNlbGxzLnB1c2godGhpcy5jcmVhdGVIZWFkZXJDZWxsKG51bGwpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubWF0cml4Lmhhc1Jvd1RleHQpIHtcbiAgICAgIHRoaXMuZm9vdGVyUm93LmNlbGxzLnB1c2goXG4gICAgICAgIHRoaXMuY3JlYXRlVGV4dENlbGwodGhpcy5tYXRyaXguZ2V0Rm9vdGVyVGV4dCgpKVxuICAgICAgKTtcbiAgICB9XG4gICAgdmFyIGNlbGxzID0gdGhpcy5tYXRyaXgudmlzaWJsZVRvdGFsUm93LmNlbGxzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjZWxsID0gY2VsbHNbaV07XG4gICAgICBpZiAoIWNlbGwuY29sdW1uLmhhc1Zpc2libGVDZWxsKSBjb250aW51ZTtcbiAgICAgIGlmIChjZWxsLmNvbHVtbi5pc1Nob3dJbk11bHRpcGxlQ29sdW1ucykge1xuICAgICAgICB0aGlzLmNyZWF0ZU11dGxpcGxlQ29sdW1uc0Zvb3Rlcih0aGlzLmZvb3RlclJvdywgY2VsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZvb3RlclJvdy5jZWxscy5wdXNoKHRoaXMuY3JlYXRlRWRpdENlbGwoY2VsbCkpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5oYXNBY3Rpb25DZWxsSW5Sb3dzKFwiZW5kXCIpKSB7XG4gICAgICB0aGlzLmZvb3RlclJvdy5jZWxscy5wdXNoKHRoaXMuY3JlYXRlSGVhZGVyQ2VsbChudWxsKSk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBidWlsZFJvd3MoKSB7XG4gICAgdmFyIHJvd3MgPSB0aGlzLm1hdHJpeC5pc0NvbHVtbkxheW91dEhvcml6b250YWxcbiAgICAgID8gdGhpcy5idWlsZEhvcml6b250YWxSb3dzKClcbiAgICAgIDogdGhpcy5idWlsZFZlcnRpY2FsUm93cygpO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJvd3NcIiwgcm93cyk7XG4gIH1cbiAgcHJpdmF0ZSBoYXNBY3Rpb25DZWxsSW5Sb3dzVmFsdWVzOiBhbnkgPSB7fTtcbiAgcHJpdmF0ZSBoYXNBY3Rpb25DZWxsSW5Sb3dzKGxvY2F0aW9uOiBcInN0YXJ0XCIgfCBcImVuZFwiKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaGFzQWN0aW9uQ2VsbEluUm93c1ZhbHVlc1tsb2NhdGlvbl0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIHJvd3MgPSB0aGlzLm1hdHJpeC52aXNpYmxlUm93cztcbiAgICAgIHRoaXMuaGFzQWN0aW9uQ2VsbEluUm93c1ZhbHVlc1tsb2NhdGlvbl0gPSBmYWxzZTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMuZ2V0Um93QWN0aW9ucyhpLCBsb2NhdGlvbikpKSB7XG4gICAgICAgICAgdGhpcy5oYXNBY3Rpb25DZWxsSW5Sb3dzVmFsdWVzW2xvY2F0aW9uXSA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaGFzQWN0aW9uQ2VsbEluUm93c1ZhbHVlc1tsb2NhdGlvbl07XG4gIH1cbiAgcHJpdmF0ZSBjYW5SZW1vdmVSb3cocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1hdHJpeC5jYW5SZW1vdmVSb3cocm93KTtcbiAgfVxuICBwcml2YXRlIGJ1aWxkSG9yaXpvbnRhbFJvd3MoKTogQXJyYXk8UXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93PiB7XG4gICAgdmFyIHJvd3MgPSB0aGlzLm1hdHJpeC52aXNpYmxlUm93cztcbiAgICB2YXIgcmVuZGVyZWRSb3dzOiBBcnJheTxRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3c+ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmFkZEhvcml6b250YWxSb3coXG4gICAgICAgIHJlbmRlcmVkUm93cyxcbiAgICAgICAgcm93c1tpXSxcbiAgICAgICAgaSA9PSAwICYmICF0aGlzLm1hdHJpeC5zaG93SGVhZGVyXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcmVuZGVyZWRSb3dzO1xuICB9XG4gIHByaXZhdGUgYWRkSG9yaXpvbnRhbFJvdyhcbiAgICByZW5kZXJlZFJvd3M6IEFycmF5PFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdz4sXG4gICAgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgICB1c2VBc0hlYWRlcjogYm9vbGVhblxuICApIHtcbiAgICB2YXIgcmVuZGVyZWRSb3cgPSB0aGlzLmNyZWF0ZUhvcml6b250YWxSb3cocm93LCB1c2VBc0hlYWRlcik7XG4gICAgcmVuZGVyZWRSb3cucm93ID0gcm93O1xuICAgIHJlbmRlcmVkUm93cy5wdXNoKHJlbmRlcmVkUm93KTtcbiAgICBpZiAocm93LmlzRGV0YWlsUGFuZWxTaG93aW5nKSB7XG4gICAgICByZW5kZXJlZFJvd3MucHVzaCh0aGlzLmNyZWF0ZURldGFpbFBhbmVsUm93KHJvdywgcmVuZGVyZWRSb3cpKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBnZXRSb3dBY3Rpb25zQ2VsbChyb3dJbmRleDogbnVtYmVyLCBsb2NhdGlvbjogXCJzdGFydFwiIHwgXCJlbmRcIikge1xuICAgIGNvbnN0IHJvd0FjdGlvbnMgPSB0aGlzLmdldFJvd0FjdGlvbnMocm93SW5kZXgsIGxvY2F0aW9uKTtcbiAgICBpZiAoIXRoaXMuaXNWYWx1ZUVtcHR5KHJvd0FjdGlvbnMpKSB7XG4gICAgICBjb25zdCBjZWxsID0gbmV3IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwoKTtcbiAgICAgIGNvbnN0IGFjdGlvbkNvbnRhaW5lciA9IG5ldyBBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lcigpO1xuICAgICAgYWN0aW9uQ29udGFpbmVyLnNldEl0ZW1zKHJvd0FjdGlvbnMpO1xuXG4gICAgICBjb25zdCBpdGVtVmFsdWUgPSBuZXcgSXRlbVZhbHVlKGFjdGlvbkNvbnRhaW5lcik7XG4gICAgICBjZWxsLml0ZW0gPSBpdGVtVmFsdWU7XG4gICAgICBjZWxsLmlzQWN0aW9uc0NlbGwgPSB0cnVlO1xuICAgICAgY2VsbC5jbGFzc05hbWUgPSB0aGlzLmNzc0NsYXNzZXMuYWN0aW9uc0NlbGw7XG4gICAgICBjZWxsLnJvdyA9IHRoaXMubWF0cml4LnZpc2libGVSb3dzW3Jvd0luZGV4XTtcbiAgICAgIHJldHVybiBjZWxsO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwcml2YXRlIGdldFJvd0FjdGlvbnMocm93SW5kZXg6IG51bWJlciwgbG9jYXRpb246IFwic3RhcnRcIiB8IFwiZW5kXCIpIHtcbiAgICB2YXIgYWN0aW9ucyA9IHRoaXMucm93c0FjdGlvbnNbcm93SW5kZXhdO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhY3Rpb25zKSkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBhY3Rpb25zLmZpbHRlcigoYWN0aW9uKSA9PiB7XG4gICAgICBpZiAoIWFjdGlvbi5sb2NhdGlvbikge1xuICAgICAgICBhY3Rpb24ubG9jYXRpb24gPSBcInN0YXJ0XCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWN0aW9uLmxvY2F0aW9uID09PSBsb2NhdGlvbjtcbiAgICB9KTtcbiAgfVxuICBwcml2YXRlIGJ1aWxkUm93QWN0aW9ucyhyb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlKTogQXJyYXk8SUFjdGlvbj4ge1xuICAgIHZhciBhY3Rpb25zOiBBcnJheTxJQWN0aW9uPiA9IFtdO1xuICAgIHRoaXMuc2V0RGVmYXVsdFJvd0FjdGlvbnMocm93LCBhY3Rpb25zKTtcbiAgICBpZiAoISF0aGlzLm1hdHJpeC5zdXJ2ZXkpIHtcbiAgICAgIGFjdGlvbnMgPSB0aGlzLm1hdHJpeC5zdXJ2ZXkuZ2V0VXBkYXRlZE1hdHJpeFJvd0FjdGlvbnMoXG4gICAgICAgIHRoaXMubWF0cml4LFxuICAgICAgICByb3csXG4gICAgICAgIGFjdGlvbnNcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBhY3Rpb25zO1xuICB9XG4gIHByb3RlY3RlZCBzZXREZWZhdWx0Um93QWN0aW9ucyhcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIGFjdGlvbnM6IEFycmF5PElBY3Rpb24+XG4gICkge1xuICAgIGlmICh0aGlzLmhhc1JlbW92ZVJvd3MgJiYgdGhpcy5jYW5SZW1vdmVSb3cocm93KSkge1xuICAgICAgYWN0aW9ucy5wdXNoKFxuICAgICAgICBuZXcgQWN0aW9uKHtcbiAgICAgICAgICBpZDogXCJyZW1vdmUtcm93XCIsXG4gICAgICAgICAgbG9jYXRpb246IFwiZW5kXCIsXG4gICAgICAgICAgZW5hYmxlZDogIXRoaXMubWF0cml4LmlzSW5wdXRSZWFkT25seSxcbiAgICAgICAgICBjb21wb25lbnQ6IFwic3YtbWF0cml4LXJlbW92ZS1idXR0b25cIixcbiAgICAgICAgICBkYXRhOiB7IHJvdzogcm93LCBxdWVzdGlvbjogdGhpcy5tYXRyaXggfSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHJvdy5oYXNQYW5lbCkge1xuICAgICAgYWN0aW9ucy5wdXNoKFxuICAgICAgICBuZXcgQWN0aW9uKHtcbiAgICAgICAgICBpZDogXCJzaG93LWRldGFpbFwiLFxuICAgICAgICAgIGxvY2F0aW9uOiBcInN0YXJ0XCIsXG4gICAgICAgICAgY29tcG9uZW50OiBcInN2LW1hdHJpeC1kZXRhaWwtYnV0dG9uXCIsXG4gICAgICAgICAgZGF0YTogeyByb3c6IHJvdywgcXVlc3Rpb246IHRoaXMubWF0cml4IH0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGNyZWF0ZUhvcml6b250YWxSb3coXG4gICAgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgICB1c2VBc0hlYWRlcjogYm9vbGVhblxuICApOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3cge1xuICAgIHZhciByZXMgPSBuZXcgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93KCk7XG4gICAgdGhpcy5hZGRSb3dBY3Rpb25zQ2VsbChyb3csIHJlcywgXCJzdGFydFwiKTtcbiAgICBpZiAodGhpcy5tYXRyaXguaGFzUm93VGV4dCkge1xuICAgICAgdmFyIHJlbmRlcmVkQ2VsbCA9IHRoaXMuY3JlYXRlVGV4dENlbGwocm93LmxvY1RleHQpO1xuICAgICAgcmVuZGVyZWRDZWxsLnJvdyA9IHJvdztcbiAgICAgIHJlcy5jZWxscy5wdXNoKHJlbmRlcmVkQ2VsbCk7XG4gICAgICBpZiAodXNlQXNIZWFkZXIpIHtcbiAgICAgICAgdGhpcy5zZXRIZWFkZXJDZWxsV2lkdGgobnVsbCwgcmVuZGVyZWRDZWxsKTtcbiAgICAgIH1cbiAgICAgIGlmIChyb3cuaGFzUGFuZWwgJiYgISF0aGlzLmNzc0NsYXNzZXMuZGV0YWlsUm93VGV4dCkge1xuICAgICAgICBpZiAoISFyZW5kZXJlZENlbGwuY2xhc3NOYW1lKSByZW5kZXJlZENlbGwuY2xhc3NOYW1lICs9IFwiIFwiO1xuICAgICAgICByZW5kZXJlZENlbGwuY2xhc3NOYW1lICs9IHRoaXMuY3NzQ2xhc3Nlcy5kZXRhaWxSb3dUZXh0O1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvdy5jZWxscy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IGNlbGwgPSByb3cuY2VsbHNbaV07XG4gICAgICBpZiAoIWNlbGwuY29sdW1uLmhhc1Zpc2libGVDZWxsKSBjb250aW51ZTtcbiAgICAgIGlmIChjZWxsLmNvbHVtbi5pc1Nob3dJbk11bHRpcGxlQ29sdW1ucykge1xuICAgICAgICB0aGlzLmNyZWF0ZU11dGxpcGxlRWRpdENlbGxzKHJlcywgY2VsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVuZGVyZWRDZWxsID0gdGhpcy5jcmVhdGVFZGl0Q2VsbChjZWxsKTtcbiAgICAgICAgcmVzLmNlbGxzLnB1c2gocmVuZGVyZWRDZWxsKTtcbiAgICAgICAgaWYgKHVzZUFzSGVhZGVyKSB7XG4gICAgICAgICAgdGhpcy5zZXRIZWFkZXJDZWxsV2lkdGgoY2VsbC5jb2x1bW4sIHJlbmRlcmVkQ2VsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5hZGRSb3dBY3Rpb25zQ2VsbChyb3csIHJlcywgXCJlbmRcIik7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIGFkZFJvd0FjdGlvbnNDZWxsKFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gICAgcmVuZGVyZWRSb3c6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdyxcbiAgICBsb2NhdGlvbjogXCJzdGFydFwiIHwgXCJlbmRcIlxuICApIHtcbiAgICB2YXIgcm93SW5kZXggPSB0aGlzLm1hdHJpeC52aXNpYmxlUm93cy5pbmRleE9mKHJvdyk7XG4gICAgaWYgKHRoaXMuaGFzQWN0aW9uQ2VsbEluUm93cyhsb2NhdGlvbikpIHtcbiAgICAgIGNvbnN0IGFjdGlvbnMgPSB0aGlzLmdldFJvd0FjdGlvbnNDZWxsKHJvd0luZGV4LCBsb2NhdGlvbik7XG4gICAgICBpZiAoISFhY3Rpb25zKSB7XG4gICAgICAgIHJlbmRlcmVkUm93LmNlbGxzLnB1c2goYWN0aW9ucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgY2VsbCA9IG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsKCk7XG4gICAgICAgIGNlbGwuaXNFbXB0eSA9IHRydWU7XG4gICAgICAgIHJlbmRlcmVkUm93LmNlbGxzLnB1c2goY2VsbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgY3JlYXRlRGV0YWlsUGFuZWxSb3coXG4gICAgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgICByZW5kZXJlZFJvdzogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93XG4gICk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdyB7XG4gICAgdmFyIHJlcyA9IG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3coKTtcbiAgICByZXMucm93ID0gcm93O1xuICAgIHJlcy5jbGFzc05hbWUgKz0gdGhpcy5jc3NDbGFzc2VzLmRldGFpbFJvdztcbiAgICByZXMuaXNEZXRhaWxSb3cgPSB0cnVlO1xuICAgIHZhciBidXR0b25DZWxsID0gbmV3IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwoKTtcbiAgICBpZiAodGhpcy5tYXRyaXguaGFzUm93VGV4dCkge1xuICAgICAgYnV0dG9uQ2VsbC5jb2xTcGFucyA9IDI7XG4gICAgfVxuICAgIGJ1dHRvbkNlbGwuaXNFbXB0eSA9IHRydWU7XG4gICAgcmVzLmNlbGxzLnB1c2goYnV0dG9uQ2VsbCk7XG4gICAgdmFyIGFjdGlvbnNDZWxsID0gbnVsbDtcbiAgICBpZiAodGhpcy5oYXNBY3Rpb25DZWxsSW5Sb3dzKFwiZW5kXCIpKSB7XG4gICAgICBhY3Rpb25zQ2VsbCA9IG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsKCk7XG4gICAgICBhY3Rpb25zQ2VsbC5pc0VtcHR5ID0gdHJ1ZTtcbiAgICB9XG4gICAgdmFyIGNlbGwgPSBuZXcgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCgpO1xuICAgIGNlbGwucGFuZWwgPSByb3cuZGV0YWlsUGFuZWw7XG4gICAgY2VsbC5jb2xTcGFucyA9XG4gICAgICByZW5kZXJlZFJvdy5jZWxscy5sZW5ndGggLVxuICAgICAgYnV0dG9uQ2VsbC5jb2xTcGFucyAtXG4gICAgICAoISFhY3Rpb25zQ2VsbCA/IGFjdGlvbnNDZWxsLmNvbFNwYW5zIDogMCk7XG4gICAgY2VsbC5jbGFzc05hbWUgPSB0aGlzLmNzc0NsYXNzZXMuZGV0YWlsUGFuZWxDZWxsO1xuICAgIHJlcy5jZWxscy5wdXNoKGNlbGwpO1xuICAgIGlmICghIWFjdGlvbnNDZWxsKSB7XG4gICAgICByZXMuY2VsbHMucHVzaChhY3Rpb25zQ2VsbCk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHR5cGVvZiB0aGlzLm1hdHJpeC5vbkNyZWF0ZURldGFpbFBhbmVsUmVuZGVyZWRSb3dDYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiXG4gICAgKSB7XG4gICAgICB0aGlzLm1hdHJpeC5vbkNyZWF0ZURldGFpbFBhbmVsUmVuZGVyZWRSb3dDYWxsYmFjayhyZXMpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFZlcnRpY2FsUm93cygpOiBBcnJheTxRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3c+IHtcbiAgICB2YXIgY29sdW1ucyA9IHRoaXMubWF0cml4LmNvbHVtbnM7XG4gICAgdmFyIHJlbmRlcmVkUm93cyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNvbCA9IGNvbHVtbnNbaV07XG4gICAgICBpZiAoY29sLmlzVmlzaWJsZSAmJiBjb2wuaGFzVmlzaWJsZUNlbGwpIHtcbiAgICAgICAgaWYgKGNvbC5pc1Nob3dJbk11bHRpcGxlQ29sdW1ucykge1xuICAgICAgICAgIHRoaXMuY3JlYXRlTXV0bGlwbGVWZXJ0aWNhbFJvd3MocmVuZGVyZWRSb3dzLCBjb2wsIGkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlbmRlcmVkUm93cy5wdXNoKHRoaXMuY3JlYXRlVmVydGljYWxSb3coY29sLCBpKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzQWN0aW9uQ2VsbEluUm93cyhcImVuZFwiKSkge1xuICAgICAgcmVuZGVyZWRSb3dzLnB1c2godGhpcy5jcmVhdGVFbmRWZXJ0aWNhbEFjdGlvblJvdygpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlbmRlcmVkUm93cztcbiAgfVxuICBwcml2YXRlIGNyZWF0ZU11dGxpcGxlVmVydGljYWxSb3dzKFxuICAgIHJlbmRlcmVkUm93czogQXJyYXk8UXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93PixcbiAgICBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uLFxuICAgIGluZGV4OiBudW1iZXJcbiAgKSB7XG4gICAgdmFyIGNob2ljZXMgPSB0aGlzLmdldE11bHRpcGxlQ29sdW1uQ2hvaWNlcyhjb2x1bW4pO1xuICAgIGlmICghY2hvaWNlcykgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hvaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVuZGVyZWRSb3dzLnB1c2godGhpcy5jcmVhdGVWZXJ0aWNhbFJvdyhjb2x1bW4sIGluZGV4LCBjaG9pY2VzW2ldLCBpKSk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgY3JlYXRlVmVydGljYWxSb3coXG4gICAgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGNob2ljZTogSXRlbVZhbHVlID0gbnVsbCxcbiAgICBjaG9pY2VJbmRleDogbnVtYmVyID0gLTFcbiAgKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93IHtcbiAgICB2YXIgcmVzID0gbmV3IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdygpO1xuICAgIGlmICh0aGlzLm1hdHJpeC5zaG93SGVhZGVyKSB7XG4gICAgICB2YXIgbFRpdGxlID0gISFjaG9pY2UgPyBjaG9pY2UubG9jVGV4dCA6IGNvbHVtbi5sb2NUaXRsZTtcbiAgICAgIHZhciBoQ2VsbCA9IHRoaXMuY3JlYXRlVGV4dENlbGwobFRpdGxlKTtcbiAgICAgIGhDZWxsLmNvbHVtbiA9IGNvbHVtbjtcbiAgICAgIGlmICghY2hvaWNlKSB7XG4gICAgICAgIHRoaXMuc2V0UmVxdXJpZWRUb0hlYWRlckNlbGwoY29sdW1uLCBoQ2VsbCk7XG4gICAgICB9XG4gICAgICByZXMuY2VsbHMucHVzaChoQ2VsbCk7XG4gICAgfVxuICAgIHZhciByb3dzID0gdGhpcy5tYXRyaXgudmlzaWJsZVJvd3M7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgckNob2ljZSA9IGNob2ljZTtcbiAgICAgIHZhciByQ2hvaWNlSW5kZXggPSBjaG9pY2VJbmRleCA+PSAwID8gY2hvaWNlSW5kZXggOiBpO1xuICAgICAgdmFyIGNlbGwgPSByb3dzW2ldLmNlbGxzW2luZGV4XTtcbiAgICAgIHZhciB2aXNDaG9pY2VzID0gISFjaG9pY2UgPyBjZWxsLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKCEhdmlzQ2hvaWNlcyAmJiByQ2hvaWNlSW5kZXggPCB2aXNDaG9pY2VzLmxlbmd0aCkge1xuICAgICAgICByQ2hvaWNlID0gdmlzQ2hvaWNlc1tyQ2hvaWNlSW5kZXhdO1xuICAgICAgfVxuICAgICAgdmFyIHJDZWxsID0gdGhpcy5jcmVhdGVFZGl0Q2VsbChjZWxsLCByQ2hvaWNlKTtcbiAgICAgIHJDZWxsLml0ZW0gPSByQ2hvaWNlO1xuICAgICAgckNlbGwuY2hvaWNlSW5kZXggPSByQ2hvaWNlSW5kZXg7XG4gICAgICByZXMuY2VsbHMucHVzaChyQ2VsbCk7XG4gICAgfVxuICAgIGlmICh0aGlzLm1hdHJpeC5oYXNUb3RhbCkge1xuICAgICAgcmVzLmNlbGxzLnB1c2goXG4gICAgICAgIHRoaXMuY3JlYXRlRWRpdENlbGwodGhpcy5tYXRyaXgudmlzaWJsZVRvdGFsUm93LmNlbGxzW2luZGV4XSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIGNyZWF0ZUVuZFZlcnRpY2FsQWN0aW9uUm93KCk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdyB7XG4gICAgdmFyIHJlcyA9IG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3coKTtcbiAgICBpZiAodGhpcy5tYXRyaXguc2hvd0hlYWRlcikge1xuICAgICAgcmVzLmNlbGxzLnB1c2godGhpcy5jcmVhdGVUZXh0Q2VsbChudWxsKSk7XG4gICAgfVxuICAgIHZhciByb3dzID0gdGhpcy5tYXRyaXgudmlzaWJsZVJvd3M7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXMuY2VsbHMucHVzaCh0aGlzLmdldFJvd0FjdGlvbnNDZWxsKGksIFwiZW5kXCIpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubWF0cml4Lmhhc1RvdGFsKSB7XG4gICAgICByZXMuY2VsbHMucHVzaCh0aGlzLmNyZWF0ZVRleHRDZWxsKG51bGwpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIGNyZWF0ZU11dGxpcGxlRWRpdENlbGxzKFxuICAgIHJSb3c6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdyxcbiAgICBjZWxsOiBNYXRyaXhEcm9wZG93bkNlbGwsXG4gICAgaXNGb290ZXI6IGJvb2xlYW4gPSBmYWxzZVxuICApIHtcbiAgICB2YXIgY2hvaWNlcyA9IGlzRm9vdGVyXG4gICAgICA/IHRoaXMuZ2V0TXVsdGlwbGVDb2x1bW5DaG9pY2VzKGNlbGwuY29sdW1uKVxuICAgICAgOiBjZWxsLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzO1xuICAgIGlmICghY2hvaWNlcykgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hvaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJDZWxsID0gdGhpcy5jcmVhdGVFZGl0Q2VsbChjZWxsLCAhaXNGb290ZXIgPyBjaG9pY2VzW2ldIDogdW5kZWZpbmVkKTtcbiAgICAgIGlmICghaXNGb290ZXIpIHtcbiAgICAgICAgLy9yQ2VsbC5pdGVtID0gY2hvaWNlc1tpXTtcbiAgICAgICAgckNlbGwuY2hvaWNlSW5kZXggPSBpO1xuICAgICAgfVxuICAgICAgclJvdy5jZWxscy5wdXNoKHJDZWxsKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVFZGl0Q2VsbChcbiAgICBjZWxsOiBNYXRyaXhEcm9wZG93bkNlbGwsXG4gICAgY2hvaWNlSXRlbTogYW55ID0gdW5kZWZpbmVkXG4gICk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwge1xuICAgIHZhciByZXMgPSBuZXcgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCgpO1xuICAgIHJlcy5jZWxsID0gY2VsbDtcbiAgICByZXMucm93ID0gY2VsbC5yb3c7XG4gICAgcmVzLnF1ZXN0aW9uID0gY2VsbC5xdWVzdGlvbjtcbiAgICByZXMubWF0cml4ID0gdGhpcy5tYXRyaXg7XG4gICAgcmVzLml0ZW0gPSBjaG9pY2VJdGVtO1xuXG4gICAgcmVzLmNsYXNzTmFtZSA9IHJlcy5jYWxjdWxhdGVGaW5hbENsYXNzTmFtZSh0aGlzLmNzc0NsYXNzZXMpO1xuICAgIC8vcmVzLmNzcyA9IHJlcy5jYWxjQ3NzKHRoaXMuY3NzQ2xhc3Nlcy5jZWxsKTtcblxuICAgIC8vIHZhciBxdWVzdGlvbkNzcyA9IGNlbGwucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICAvLyB2YXIgY2xhc3NOYW1lID0gXCJcIjtcbiAgICAvLyBpZiAoISFxdWVzdGlvbkNzcykge1xuICAgIC8vICAgY2xhc3NOYW1lID0gXCJcIjtcbiAgICAvLyAgIGlmICghIXF1ZXN0aW9uQ3NzLml0ZW1WYWx1ZSkge1xuICAgIC8vICAgICBjbGFzc05hbWUgKz0gXCIgXCIgKyBxdWVzdGlvbkNzcy5pdGVtVmFsdWU7XG4gICAgLy8gICB9XG4gICAgLy8gICBpZiAoISFxdWVzdGlvbkNzcy5hc0NlbGwpIHtcbiAgICAvLyAgICAgaWYgKCEhY2xhc3NOYW1lKSBjbGFzc05hbWUgKz0gXCJcIjtcbiAgICAvLyAgICAgY2xhc3NOYW1lICs9IHF1ZXN0aW9uQ3NzLmFzQ2VsbDtcbiAgICAvLyAgIH1cbiAgICAvLyB9XG4gICAgLy8gaWYgKCFjbGFzc05hbWUgJiYgISF0aGlzLmNzc0NsYXNzZXMuY2VsbCkge1xuICAgIC8vICAgY2xhc3NOYW1lID0gdGhpcy5jc3NDbGFzc2VzLmNlbGw7XG4gICAgLy8gfVxuICAgIC8vcmVzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByaXZhdGUgY3JlYXRlTXV0bGlwbGVDb2x1bW5zRm9vdGVyKFxuICAgIHJSb3c6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdyxcbiAgICBjZWxsOiBNYXRyaXhEcm9wZG93bkNlbGxcbiAgKSB7XG4gICAgdGhpcy5jcmVhdGVNdXRsaXBsZUVkaXRDZWxscyhyUm93LCBjZWxsLCB0cnVlKTtcbiAgfVxuICBwcml2YXRlIGNyZWF0ZU11dGxpcGxlQ29sdW1uc0hlYWRlcihjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKSB7XG4gICAgdmFyIGNob2ljZXMgPSB0aGlzLmdldE11bHRpcGxlQ29sdW1uQ2hvaWNlcyhjb2x1bW4pO1xuICAgIGlmICghY2hvaWNlcykgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hvaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNlbGwgPSB0aGlzLmNyZWF0ZVRleHRDZWxsKGNob2ljZXNbaV0ubG9jVGV4dCk7XG4gICAgICB0aGlzLnNldEhlYWRlckNlbGwoY29sdW1uLCBjZWxsKTtcbiAgICAgIHRoaXMuaGVhZGVyUm93LmNlbGxzLnB1c2goY2VsbCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0TXVsdGlwbGVDb2x1bW5DaG9pY2VzKGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pOiBhbnkge1xuICAgIHZhciBjaG9pY2VzID0gY29sdW1uLnRlbXBsYXRlUXVlc3Rpb24uY2hvaWNlcztcbiAgICBpZiAoISFjaG9pY2VzICYmIEFycmF5LmlzQXJyYXkoY2hvaWNlcykgJiYgY2hvaWNlcy5sZW5ndGggPT0gMClcbiAgICAgIHJldHVybiB0aGlzLm1hdHJpeC5jaG9pY2VzO1xuICAgIGNob2ljZXMgPSBjb2x1bW4udGVtcGxhdGVRdWVzdGlvbi52aXNpYmxlQ2hvaWNlcztcbiAgICBpZiAoIWNob2ljZXMgfHwgIUFycmF5LmlzQXJyYXkoY2hvaWNlcykpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBjaG9pY2VzO1xuICB9XG4gIHByaXZhdGUgY3JlYXRlSGVhZGVyQ2VsbChcbiAgICBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uXG4gICk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwge1xuICAgIHZhciBjZWxsID0gdGhpcy5jcmVhdGVUZXh0Q2VsbCghIWNvbHVtbiA/IGNvbHVtbi5sb2NUaXRsZSA6IG51bGwpO1xuICAgIGNlbGwuY29sdW1uID0gY29sdW1uO1xuICAgIHRoaXMuc2V0SGVhZGVyQ2VsbChjb2x1bW4sIGNlbGwpO1xuICAgIGlmICh0aGlzLmNzc0NsYXNzZXMuaGVhZGVyQ2VsbCkge1xuICAgICAgY2VsbC5jbGFzc05hbWUgPSB0aGlzLmNzc0NsYXNzZXMuaGVhZGVyQ2VsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNlbGw7XG4gIH1cbiAgcHJpdmF0ZSBzZXRIZWFkZXJDZWxsKFxuICAgIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4sXG4gICAgY2VsbDogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbFxuICApIHtcbiAgICB0aGlzLnNldEhlYWRlckNlbGxXaWR0aChjb2x1bW4sIGNlbGwpO1xuICAgIHRoaXMuc2V0UmVxdXJpZWRUb0hlYWRlckNlbGwoY29sdW1uLCBjZWxsKTtcbiAgfVxuICBwcml2YXRlIHNldEhlYWRlckNlbGxXaWR0aChcbiAgICBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uLFxuICAgIGNlbGw6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGxcbiAgKSB7XG4gICAgY2VsbC5taW5XaWR0aCA9IGNvbHVtbiAhPSBudWxsID8gdGhpcy5tYXRyaXguZ2V0Q29sdW1uV2lkdGgoY29sdW1uKSA6IFwiXCI7XG4gICAgY2VsbC53aWR0aCA9IGNvbHVtbiAhPSBudWxsID8gY29sdW1uLndpZHRoIDogdGhpcy5tYXRyaXguZ2V0Um93VGl0bGVXaWR0aCgpO1xuICB9XG4gIHByaXZhdGUgc2V0UmVxdXJpZWRUb0hlYWRlckNlbGwoXG4gICAgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbixcbiAgICBjZWxsOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsXG4gICkge1xuICAgIGlmICghIWNvbHVtbiAmJiBjb2x1bW4uaXNSZXF1aXJlZCAmJiB0aGlzLm1hdHJpeC5zdXJ2ZXkpIHtcbiAgICAgIGNlbGwucmVxdWlyZWRUZXh0ID0gdGhpcy5tYXRyaXguc3VydmV5LnJlcXVpcmVkVGV4dDtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVSZW1vdmVSb3dDZWxsKFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2VcbiAgKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCB7XG4gICAgdmFyIHJlcyA9IG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsKCk7XG4gICAgcmVzLnJvdyA9IHJvdztcbiAgICByZXMuaXNSZW1vdmVSb3cgPSB0aGlzLmNhblJlbW92ZVJvdyhyb3cpO1xuICAgIGlmICghIXRoaXMuY3NzQ2xhc3Nlcy5jZWxsKSB7XG4gICAgICByZXMuY2xhc3NOYW1lID0gdGhpcy5jc3NDbGFzc2VzLmNlbGw7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVUZXh0Q2VsbChcbiAgICBsb2NUaXRsZTogTG9jYWxpemFibGVTdHJpbmdcbiAgKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCB7XG4gICAgdmFyIGNlbGwgPSBuZXcgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCgpO1xuICAgIGNlbGwubG9jVGl0bGUgPSBsb2NUaXRsZTtcbiAgICBpZiAoISF0aGlzLmNzc0NsYXNzZXMuY2VsbCkge1xuICAgICAgY2VsbC5jbGFzc05hbWUgPSB0aGlzLmNzc0NsYXNzZXMuY2VsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNlbGw7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGJhc2UgY2xhc3MgZm9yIG1hdHJpeCBkcm9wZG93biBhbmQgbWF0cml4IGR5bmFtaWMgcXVlc3Rpb25zLlxuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZVxuICBleHRlbmRzIFF1ZXN0aW9uTWF0cml4QmFzZU1vZGVsPFxuICAgIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIE1hdHJpeERyb3Bkb3duQ29sdW1uXG4gID5cbiAgaW1wbGVtZW50cyBJTWF0cml4RHJvcGRvd25EYXRhIHtcbiAgcHVibGljIHN0YXRpYyBnZXQgZGVmYXVsdENlbGxUeXBlKCkge1xuICAgIHJldHVybiBzZXR0aW5ncy5tYXRyaXhEZWZhdWx0Q2VsbFR5cGU7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBzZXQgZGVmYXVsdENlbGxUeXBlKHZhbDogc3RyaW5nKSB7XG4gICAgc2V0dGluZ3MubWF0cml4RGVmYXVsdENlbGxUeXBlID0gdmFsO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgYWRkRGVmYXVsdENvbHVtbnMobWF0cml4OiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlKSB7XG4gICAgdmFyIGNvbE5hbWVzID0gUXVlc3Rpb25GYWN0b3J5LkRlZmF1bHRDb2x1bXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2xOYW1lcy5sZW5ndGg7IGkrKykgbWF0cml4LmFkZENvbHVtbihjb2xOYW1lc1tpXSk7XG4gIH1cbiAgcHJpdmF0ZSBkZXRhaWxQYW5lbFZhbHVlOiBQYW5lbE1vZGVsO1xuICBwcm90ZWN0ZWQgaXNSb3dDaGFuZ2luZyA9IGZhbHNlO1xuICBjb2x1bW5zQ2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xuICBvblJlbmRlcmVkVGFibGVSZXNldENhbGxiYWNrOiAoKSA9PiB2b2lkO1xuICBvblJlbmRlcmVkVGFibGVDcmVhdGVkQ2FsbGJhY2s6IChcbiAgICB0YWJsZTogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGVcbiAgKSA9PiB2b2lkO1xuICBvbkNlbGxDcmVhdGVkQ2FsbGJhY2s6IChvcHRpb25zOiBhbnkpID0+IHZvaWQ7XG4gIG9uQ2VsbFZhbHVlQ2hhbmdlZENhbGxiYWNrOiAob3B0aW9uczogYW55KSA9PiB2b2lkO1xuICBvbkhhc0RldGFpbFBhbmVsQ2FsbGJhY2s6IChyb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlKSA9PiBib29sZWFuO1xuICBvbkNyZWF0ZURldGFpbFBhbmVsQ2FsbGJhY2s6IChcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIHBhbmVsOiBQYW5lbE1vZGVsXG4gICkgPT4gdm9pZDtcbiAgb25DcmVhdGVEZXRhaWxQYW5lbFJlbmRlcmVkUm93Q2FsbGJhY2s6IChcbiAgICByZW5kZXJlZFJvdzogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93XG4gICkgPT4gdm9pZDtcblxuICBwcm90ZWN0ZWQgY3JlYXRlQ29sdW1uVmFsdWVzKCkge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZU5ld0FycmF5KFxuICAgICAgXCJjb2x1bW5zXCIsXG4gICAgICAoaXRlbTogYW55KSA9PiB7XG4gICAgICAgIGl0ZW0uY29sT3duZXIgPSB0aGlzO1xuICAgICAgfSxcbiAgICAgIChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgaXRlbS5jb2xPd25lciA9IG51bGw7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIHRoaXMuY3JlYXRlSXRlbVZhbHVlcyhcImNob2ljZXNcIik7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcIm9wdGlvbnNDYXB0aW9uXCIsIHRoaXMpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJrZXlEdXBsaWNhdGlvbkVycm9yXCIsIHRoaXMpO1xuICAgIHRoaXMuZGV0YWlsUGFuZWxWYWx1ZSA9IHRoaXMuY3JlYXRlTmV3RGV0YWlsUGFuZWwoKTtcbiAgICB0aGlzLmRldGFpbFBhbmVsLnNlbGVjdGVkRWxlbWVudEluRGVzaWduID0gdGhpcztcbiAgICB0aGlzLmRldGFpbFBhbmVsLnJlbmRlcldpZHRoID0gXCIxMDAlXCI7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcbiAgICAgIFwiY29sdW1uc1wiLFxuICAgICAgKG5ld0NvbHVtbnM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtbnNJbmRleGVzKG5ld0NvbHVtbnMpO1xuICAgICAgICB0aGlzLmdlbmVyYXRlZFRvdGFsUm93ID0gbnVsbDtcbiAgICAgICAgdGhpcy5jbGVhclJvd3NBbmRSZXNldFJlbmRlcmVkVGFibGUoKTtcbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJjZWxsVHlwZVwiLCAoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZUNvbHVtbnNDZWxsVHlwZSgpO1xuICAgICAgdGhpcy5jbGVhclJvd3NBbmRSZXNldFJlbmRlcmVkVGFibGUoKTtcbiAgICB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnRpZXNWYWx1ZUNoYW5nZWQoXG4gICAgICBbXCJvcHRpb25zQ2FwdGlvblwiLCBcImNvbHVtbkNvbENvdW50XCIsIFwicm93VGl0bGVXaWR0aFwiLCBcImNob2ljZXNcIl0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuY2xlYXJSb3dzQW5kUmVzZXRSZW5kZXJlZFRhYmxlKCk7XG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnRpZXNWYWx1ZUNoYW5nZWQoXG4gICAgICBbXG4gICAgICAgIFwiY29sdW1uTGF5b3V0XCIsXG4gICAgICAgIFwiYWRkUm93TG9jYXRpb25cIixcbiAgICAgICAgXCJoaWRlQ29sdW1uc0lmRW1wdHlcIixcbiAgICAgICAgXCJzaG93SGVhZGVyXCIsXG4gICAgICAgIFwibWluUm93Q291bnRcIixcbiAgICAgICAgXCJpc1JlYWRPbmx5XCIsXG4gICAgICAgIFwicm93Q291bnRcIixcbiAgICAgICAgXCJoYXNGb290ZXJcIixcbiAgICAgICAgXCJkZXRhaWxQYW5lbE1vZGVcIixcbiAgICAgIF0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMucmVzZXRSZW5kZXJlZFRhYmxlKCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIm1hdHJpeGRyb3Bkb3duYmFzZVwiO1xuICB9XG4gIHB1YmxpYyBkaXNwb3NlKCkge1xuICAgIHN1cGVyLmRpc3Bvc2UoKTtcbiAgICB0aGlzLmNsZWFyR2VuZXJhdGVkUm93cygpO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzU2luZ2xlSW5wdXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNSb3dzRHluYW1pYygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGl0ZW1WYWx1ZVByb3BlcnR5Q2hhbmdlZChcbiAgICBpdGVtOiBJdGVtVmFsdWUsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG9sZFZhbHVlOiBhbnksXG4gICAgbmV3VmFsdWU6IGFueVxuICApIHtcbiAgICBzdXBlci5pdGVtVmFsdWVQcm9wZXJ0eUNoYW5nZWQoaXRlbSwgbmFtZSwgb2xkVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICBpZiAoaXRlbS5vd25lclByb3BlcnR5TmFtZSA9PT0gXCJjaG9pY2VzXCIpIHtcbiAgICAgIHRoaXMuY2xlYXJSb3dzQW5kUmVzZXRSZW5kZXJlZFRhYmxlKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBTZXQgY29sdW1uTGF5b3V0IHRvICd2ZXJ0aWNhbCcgdG8gcGxhY2UgY29sdW1ucyB2ZXJ0aWNhbGx5IGFuZCByb3dzIGhvcml6b250YWxseS4gSXQgbWFrZXMgc2Vuc2Ugd2hlbiB3ZSBoYXZlIG1hbnkgY29sdW1ucyBhbmQgZmV3IHJvd3MuXG4gICAqIEBzZWUgY29sdW1uc1xuICAgKiBAc2VlIHJvd0NvdW50XG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbHVtbkxheW91dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjb2x1bW5MYXlvdXRcIik7XG4gIH1cbiAgcHVibGljIHNldCBjb2x1bW5MYXlvdXQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjb2x1bW5MYXlvdXRcIiwgdmFsKTtcbiAgfVxuICBnZXQgY29sdW1uc0xvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uTGF5b3V0O1xuICB9XG4gIHNldCBjb2x1bW5zTG9jYXRpb24odmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLmNvbHVtbkxheW91dCA9IHZhbDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIGNvbHVtbnMgYXJlIGxvY2F0ZWQgaG9yaXpvbnRhbGx5XG4gICAqIEBzZWUgY29sdW1uTGF5b3V0XG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzQ29sdW1uTGF5b3V0SG9yaXpvbnRhbCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5MYXlvdXQgIT0gXCJ2ZXJ0aWNhbFwiO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhlIHZhbHVlIHRvIFwidW5kZXJSb3dcIiB0byBzaG93IHRoZSBkZXRhaWxQYW5lbCB1bmRlciB0aGUgcm93LlxuICAgKi9cbiAgcHVibGljIGdldCBkZXRhaWxQYW5lbE1vZGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZGV0YWlsUGFuZWxNb2RlXCIsIFwibm9uZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGRldGFpbFBhbmVsTW9kZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImRldGFpbFBhbmVsTW9kZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgZGV0YWlsIHRlbXBsYXRlIFBhbmVsLiBUaGlzIHBhbmVsIGlzIHVzZWQgYXMgYSB0ZW1wbGF0ZSBvbiBjcmVhdGluZyBkZXRhaWwgcGFuZWwgZm9yIGEgcm93LlxuICAgKiBAc2VlICBkZXRhaWxFbGVtZW50c1xuICAgKiBAc2VlIGRldGFpbFBhbmVsTW9kZVxuICAgKi9cbiAgcHVibGljIGdldCBkZXRhaWxQYW5lbCgpOiBQYW5lbE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5kZXRhaWxQYW5lbFZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXRQYW5lbCgpOiBJUGFuZWwge1xuICAgIHJldHVybiB0aGlzLmRldGFpbFBhbmVsO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgUGFuZWwgZWxlbWVudHMsIHF1ZXN0aW9ucyBhbmQgcGFuZWxzLlxuICAgKiBAc2VlICBkZXRhaWxQYW5lbFxuICAgKiBAc2VlIGRldGFpbFBhbmVsTW9kZVxuICAgKi9cbiAgcHVibGljIGdldCBkZXRhaWxFbGVtZW50cygpOiBBcnJheTxJRWxlbWVudD4ge1xuICAgIHJldHVybiB0aGlzLmRldGFpbFBhbmVsLmVsZW1lbnRzO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVOZXdEZXRhaWxQYW5lbCgpOiBQYW5lbE1vZGVsIHtcbiAgICByZXR1cm4gU2VyaWFsaXplci5jcmVhdGVDbGFzcyhcInBhbmVsXCIpO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzUm93VGV4dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0Rm9vdGVyVGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHVibGljIGdldCBjYW5BZGRSb3coKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBnZXQgY2FuUmVtb3ZlUm93cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGNhblJlbW92ZVJvdyhyb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJvdGVjdGVkIG9uUm93c0NoYW5nZWQoKSB7XG4gICAgdGhpcy5yZXNldFJlbmRlcmVkVGFibGUoKTtcbiAgICBzdXBlci5vblJvd3NDaGFuZ2VkKCk7XG4gIH1cbiAgcHJpdmF0ZSBsb2NrUmVzZXRSZW5kZXJlZFRhYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIHByb3RlY3RlZCBvblN0YXJ0Um93QWRkaW5nUmVtb3ZpbmcoKSB7XG4gICAgdGhpcy5sb2NrUmVzZXRSZW5kZXJlZFRhYmxlID0gdHJ1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgb25FbmRSb3dBZGRpbmcoKSB7XG4gICAgdGhpcy5sb2NrUmVzZXRSZW5kZXJlZFRhYmxlID0gZmFsc2U7XG4gICAgaWYgKCF0aGlzLnJlbmRlcmVkVGFibGUpIHJldHVybjtcbiAgICBpZiAodGhpcy5yZW5kZXJlZFRhYmxlLmlzUmVxdWlyZVJlc2V0KCkpIHtcbiAgICAgIHRoaXMucmVzZXRSZW5kZXJlZFRhYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVuZGVyZWRUYWJsZS5vbkFkZGVkUm93KCk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBvbkVuZFJvd1JlbW92aW5nKHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UpIHtcbiAgICB0aGlzLmxvY2tSZXNldFJlbmRlcmVkVGFibGUgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5yZW5kZXJlZFRhYmxlLmlzUmVxdWlyZVJlc2V0KCkpIHtcbiAgICAgIHRoaXMucmVzZXRSZW5kZXJlZFRhYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghIXJvdykge1xuICAgICAgICB0aGlzLnJlbmRlcmVkVGFibGUub25SZW1vdmVkUm93KHJvdyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0IHJlbmRlcmVkVGFibGVWYWx1ZSgpOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJlbmRlcmVkVGFibGVcIiwgbnVsbCk7XG4gIH1cbiAgcHJpdmF0ZSBzZXQgcmVuZGVyZWRUYWJsZVZhbHVlKHZhbDogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyZW5kZXJlZFRhYmxlXCIsIHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNsZWFyUm93c0FuZFJlc2V0UmVuZGVyZWRUYWJsZSgpIHtcbiAgICB0aGlzLmNsZWFyR2VuZXJhdGVkUm93cygpO1xuICAgIHRoaXMucmVzZXRSZW5kZXJlZFRhYmxlKCk7XG4gICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5jb2x1bW5zQ2hhbmdlZENhbGxiYWNrKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVzZXRSZW5kZXJlZFRhYmxlKCkge1xuICAgIGlmICh0aGlzLmxvY2tSZXNldFJlbmRlcmVkVGFibGUgfHwgdGhpcy5pc0xvYWRpbmdGcm9tSnNvbikgcmV0dXJuO1xuICAgIHRoaXMucmVuZGVyZWRUYWJsZVZhbHVlID0gbnVsbDtcbiAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLm9uUmVuZGVyZWRUYWJsZVJlc2V0Q2FsbGJhY2spO1xuICB9XG4gIHByb3RlY3RlZCBjbGVhckdlbmVyYXRlZFJvd3MoKSB7XG4gICAgaWYgKCF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKSByZXR1cm47XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2ldLmRpc3Bvc2UoKTtcbiAgICB9XG4gICAgc3VwZXIuY2xlYXJHZW5lcmF0ZWRSb3dzKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHJlbmRlcmVkVGFibGUoKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUge1xuICAgIGlmICghdGhpcy5yZW5kZXJlZFRhYmxlVmFsdWUpIHtcbiAgICAgIHRoaXMucmVuZGVyZWRUYWJsZVZhbHVlID0gdGhpcy5jcmVhdGVSZW5kZXJlZFRhYmxlKCk7XG4gICAgICBpZiAoISF0aGlzLm9uUmVuZGVyZWRUYWJsZUNyZWF0ZWRDYWxsYmFjaykge1xuICAgICAgICB0aGlzLm9uUmVuZGVyZWRUYWJsZUNyZWF0ZWRDYWxsYmFjayh0aGlzLnJlbmRlcmVkVGFibGVWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlbmRlcmVkVGFibGVWYWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlUmVuZGVyZWRUYWJsZSgpOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZSh0aGlzKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25NYXRyaXhSb3dDcmVhdGVkKHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UpIHtcbiAgICBpZiAoIXRoaXMuc3VydmV5KSByZXR1cm47XG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICByb3dWYWx1ZTogcm93LnZhbHVlLFxuICAgICAgcm93OiByb3csXG4gICAgICBjb2x1bW46IDxhbnk+bnVsbCxcbiAgICAgIGNvbHVtbk5hbWU6IDxhbnk+bnVsbCxcbiAgICAgIGNlbGw6IDxhbnk+bnVsbCxcbiAgICAgIGNlbGxRdWVzdGlvbjogPGFueT5udWxsLFxuICAgICAgdmFsdWU6IDxhbnk+bnVsbCxcbiAgICB9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy52aXNpYmxlQ29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgb3B0aW9ucy5jb2x1bW4gPSB0aGlzLnZpc2libGVDb2x1bW5zW2ldO1xuICAgICAgb3B0aW9ucy5jb2x1bW5OYW1lID0gb3B0aW9ucy5jb2x1bW4ubmFtZTtcbiAgICAgIHZhciBjZWxsID0gcm93LmNlbGxzW2ldO1xuICAgICAgb3B0aW9ucy5jZWxsID0gY2VsbDtcbiAgICAgIG9wdGlvbnMuY2VsbFF1ZXN0aW9uID0gY2VsbC5xdWVzdGlvbjtcbiAgICAgIG9wdGlvbnMudmFsdWUgPSBjZWxsLnZhbHVlO1xuICAgICAgaWYgKCEhdGhpcy5vbkNlbGxDcmVhdGVkQ2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5vbkNlbGxDcmVhdGVkQ2FsbGJhY2sob3B0aW9ucyk7XG4gICAgICB9XG4gICAgICB0aGlzLnN1cnZleS5tYXRyaXhDZWxsQ3JlYXRlZCh0aGlzLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCBjZWxsIHR5cGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNlbGxUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNlbGxUeXBlXCIsIHNldHRpbmdzLm1hdHJpeERlZmF1bHRDZWxsVHlwZSk7XG4gIH1cbiAgcHVibGljIHNldCBjZWxsVHlwZSh2YWw6IHN0cmluZykge1xuICAgIHZhbCA9IHZhbC50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNlbGxUeXBlXCIsIHZhbCk7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVDb2x1bW5zQ2VsbFR5cGUoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuY29sdW1uc1tpXS5kZWZhdWx0Q2VsbFR5cGVDaGFuZ2VkKCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgdXBkYXRlQ29sdW1uc0luZGV4ZXMoY29sczogQXJyYXk8TWF0cml4RHJvcGRvd25Db2x1bW4+KSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2xzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb2xzW2ldLnNldEluZGV4KGkpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgY29sdW1uIGNvdW50IGZvciByYWRpb2dyb3VwIGFuZCBjaGVja2JveCAgY2VsbCB0eXBlcy5cbiAgICovXG4gIHB1YmxpYyBnZXQgY29sdW1uQ29sQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY29sdW1uQ29sQ291bnRcIiwgMCk7XG4gIH1cbiAgcHVibGljIHNldCBjb2x1bW5Db2xDb3VudCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHZhbHVlIDwgMCB8fCB2YWx1ZSA+IDQpIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjb2x1bW5Db2xDb3VudFwiLCB2YWx1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIHNldCB0aGUgbWluaW11bSBjb2x1bW4gd2lkdGguXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbHVtbk1pbldpZHRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNvbHVtbk1pbldpZHRoXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY29sdW1uTWluV2lkdGgodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjb2x1bW5NaW5XaWR0aFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byB0cnVlIHRvIHNob3cgdGhlIGhvcml6b250YWwgc2Nyb2xsLlxuICAgKi9cbiAgcHVibGljIGdldCBob3Jpem9udGFsU2Nyb2xsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJob3Jpem9udGFsU2Nyb2xsXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGhvcml6b250YWxTY3JvbGwodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaG9yaXpvbnRhbFNjcm9sbFwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXRSZXF1aXJlZFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkgPyB0aGlzLnN1cnZleS5yZXF1aXJlZFRleHQgOiBcIlwiO1xuICB9XG4gIG9uQ29sdW1uUHJvcGVydHlDaGFuZ2VkKFxuICAgIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4sXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG5ld1ZhbHVlOiBhbnlcbiAgKSB7XG4gICAgdGhpcy51cGRhdGVIYXNGb290ZXIoKTtcbiAgICBpZiAoIXRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3NbaV0udXBkYXRlQ2VsbFF1ZXN0aW9uT25Db2x1bW5DaGFuZ2VkKFxuICAgICAgICBjb2x1bW4sXG4gICAgICAgIG5hbWUsXG4gICAgICAgIG5ld1ZhbHVlXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoISF0aGlzLmdlbmVyYXRlZFRvdGFsUm93KSB7XG4gICAgICB0aGlzLmdlbmVyYXRlZFRvdGFsUm93LnVwZGF0ZUNlbGxRdWVzdGlvbk9uQ29sdW1uQ2hhbmdlZChcbiAgICAgICAgY29sdW1uLFxuICAgICAgICBuYW1lLFxuICAgICAgICBuZXdWYWx1ZVxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5vbkNvbHVtbnNDaGFuZ2VkKCk7XG4gICAgaWYgKG5hbWUgPT0gXCJpc1JlcXVpcmVkXCIpIHtcbiAgICAgIHRoaXMucmVzZXRSZW5kZXJlZFRhYmxlKCk7XG4gICAgfVxuICAgIGlmIChjb2x1bW4uaXNTaG93SW5NdWx0aXBsZUNvbHVtbnMpIHtcbiAgICAgIHRoaXMub25TaG93SW5NdWx0aXBsZUNvbHVtbnNDaGFuZ2VkKGNvbHVtbik7XG4gICAgfVxuICB9XG4gIG9uQ29sdW1uSXRlbVZhbHVlUHJvcGVydHlDaGFuZ2VkKFxuICAgIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4sXG4gICAgcHJvcGVydHlOYW1lOiBzdHJpbmcsXG4gICAgb2JqOiBJdGVtVmFsdWUsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG5ld1ZhbHVlOiBhbnksXG4gICAgb2xkVmFsdWU6IGFueVxuICApIHtcbiAgICBpZiAoIXRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3NbaV0udXBkYXRlQ2VsbFF1ZXN0aW9uT25Db2x1bW5JdGVtVmFsdWVDaGFuZ2VkKFxuICAgICAgICBjb2x1bW4sXG4gICAgICAgIHByb3BlcnR5TmFtZSxcbiAgICAgICAgb2JqLFxuICAgICAgICBuYW1lLFxuICAgICAgICBuZXdWYWx1ZSxcbiAgICAgICAgb2xkVmFsdWVcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgb25TaG93SW5NdWx0aXBsZUNvbHVtbnNDaGFuZ2VkKGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pIHtcbiAgICB0aGlzLmNsZWFyR2VuZXJhdGVkUm93cygpO1xuICAgIHRoaXMucmVzZXRSZW5kZXJlZFRhYmxlKCk7XG4gIH1cbiAgb25Db2x1bW5DZWxsVHlwZUNoYW5nZWQoY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbikge1xuICAgIHRoaXMuY2xlYXJHZW5lcmF0ZWRSb3dzKCk7XG4gICAgdGhpcy5yZXNldFJlbmRlcmVkVGFibGUoKTtcbiAgfVxuICBwdWJsaWMgZ2V0Um93VGl0bGVXaWR0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzRm9vdGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJoYXNGb290ZXJcIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBnZXRBZGRSb3dMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImRlZmF1bHRcIjtcbiAgfVxuICBwdWJsaWMgZ2V0U2hvd0NvbHVtbnNJZkVtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwcm90ZWN0ZWQgdXBkYXRlU2hvd1RhYmxlQW5kQWRkUm93KCkge1xuICAgIGlmICghIXRoaXMucmVuZGVyZWRUYWJsZSkge1xuICAgICAgdGhpcy5yZW5kZXJlZFRhYmxlLnVwZGF0ZVNob3dUYWJsZUFuZEFkZFJvdygpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgdXBkYXRlSGFzRm9vdGVyKCkge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImhhc0Zvb3RlclwiLCB0aGlzLmhhc1RvdGFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc1RvdGFsKCk6IGJvb2xlYW4ge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5jb2x1bW5zW2ldLmhhc1RvdGFsKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGdldENlbGxUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY2VsbFR5cGU7XG4gIH1cbiAgcHVibGljIGdldENvbmRpdGlvbkpzb24ob3BlcmF0b3I6IHN0cmluZyA9IG51bGwsIHBhdGg6IHN0cmluZyA9IG51bGwpOiBhbnkge1xuICAgIGlmICghcGF0aCkgcmV0dXJuIHN1cGVyLmdldENvbmRpdGlvbkpzb24oKTtcbiAgICB2YXIgY29sdW1uTmFtZSA9IFwiXCI7XG4gICAgZm9yICh2YXIgaSA9IHBhdGgubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGlmIChwYXRoW2ldID09IFwiLlwiKSBicmVhaztcbiAgICAgIGNvbHVtbk5hbWUgPSBwYXRoW2ldICsgY29sdW1uTmFtZTtcbiAgICB9XG4gICAgdmFyIGNvbHVtbiA9IHRoaXMuZ2V0Q29sdW1uQnlOYW1lKGNvbHVtbk5hbWUpO1xuICAgIGlmICghY29sdW1uKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgcXVlc3Rpb24gPSBjb2x1bW4uY3JlYXRlQ2VsbFF1ZXN0aW9uKG51bGwpO1xuICAgIGlmICghcXVlc3Rpb24pIHJldHVybiBudWxsO1xuICAgIHJldHVybiBxdWVzdGlvbi5nZXRDb25kaXRpb25Kc29uKG9wZXJhdG9yKTtcbiAgfVxuICBwdWJsaWMgY2xlYXJJbmNvcnJlY3RWYWx1ZXMoKSB7XG4gICAgdmFyIHJvd3MgPSB0aGlzLnZpc2libGVSb3dzO1xuICAgIGlmICghcm93cykgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgcm93c1tpXS5jbGVhckluY29ycmVjdFZhbHVlcyh0aGlzLmdldFJvd1ZhbHVlKGkpKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGNsZWFyRXJyb3JzKCkge1xuICAgIHN1cGVyLmNsZWFyRXJyb3JzKCk7XG4gICAgaWYgKCEhdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciByb3cgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2ldO1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHJvdy5jZWxscy5sZW5ndGg7IGorKykge1xuICAgICAgICAgIHJvdy5jZWxsc1tqXS5xdWVzdGlvbi5jbGVhckVycm9ycygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJ1bkNvbmRpdGlvbih2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIHN1cGVyLnJ1bkNvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIHZhciBjb3VudGVyID0gMDtcbiAgICB2YXIgcHJldlRvdGFsVmFsdWU7XG4gICAgZG8ge1xuICAgICAgcHJldlRvdGFsVmFsdWUgPSBIZWxwZXJzLmdldFVuYmluZFZhbHVlKHRoaXMudG90YWxWYWx1ZSk7XG4gICAgICB0aGlzLnJ1bkNlbGxzQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgICB0aGlzLnJ1blRvdGFsc0NvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgICAgY291bnRlcisrO1xuICAgIH0gd2hpbGUgKFxuICAgICAgIUhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyhwcmV2VG90YWxWYWx1ZSwgdGhpcy50b3RhbFZhbHVlKSAmJlxuICAgICAgY291bnRlciA8IDNcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBzaG91bGRSdW5Db2x1bW5FeHByZXNzaW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwcm90ZWN0ZWQgcnVuQ2VsbHNDb25kaXRpb24oXG4gICAgdmFsdWVzOiBIYXNoVGFibGU8YW55PixcbiAgICBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PlxuICApIHtcbiAgICBpZiAoIXRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpIHJldHVybjtcbiAgICB2YXIgbmV3VmFsdWVzID0gdGhpcy5nZXRSb3dDb25kaXRpb25WYWx1ZXModmFsdWVzKTtcbiAgICB2YXIgcm93cyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3M7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByb3dzW2ldLnJ1bkNvbmRpdGlvbihuZXdWYWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIH1cbiAgICB0aGlzLmNoZWNrQ29sdW1uc1Zpc2liaWxpdHkoKTtcbiAgfVxuICBwcml2YXRlIGNoZWNrQ29sdW1uc1Zpc2liaWxpdHkoKSB7XG4gICAgdmFyIGhhc0NoYW5nZWQgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudmlzaWJsZUNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghdGhpcy52aXNpYmxlQ29sdW1uc1tpXS52aXNpYmxlSWYpIGNvbnRpbnVlO1xuICAgICAgaGFzQ2hhbmdlZCA9XG4gICAgICAgIHRoaXMuaXNDb2x1bW5WaXNpYmlsaXR5Q2hhbmdlZCh0aGlzLnZpc2libGVDb2x1bW5zW2ldKSB8fCBoYXNDaGFuZ2VkO1xuICAgIH1cbiAgICBpZiAoaGFzQ2hhbmdlZCkge1xuICAgICAgdGhpcy5yZXNldFJlbmRlcmVkVGFibGUoKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBpc0NvbHVtblZpc2liaWxpdHlDaGFuZ2VkKGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pOiBib29sZWFuIHtcbiAgICB2YXIgY3VyVmlzID0gY29sdW1uLmhhc1Zpc2libGVDZWxsO1xuICAgIHZhciBoYXNWaXNDZWxsID0gZmFsc2U7XG4gICAgdmFyIHJvd3MgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNlbGwgPSByb3dzW2ldLmNlbGxzW2NvbHVtbi5pbmRleF07XG4gICAgICBpZiAoISFjZWxsICYmICEhY2VsbC5xdWVzdGlvbiAmJiBjZWxsLnF1ZXN0aW9uLmlzVmlzaWJsZSkge1xuICAgICAgICBoYXNWaXNDZWxsID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjdXJWaXMgIT0gaGFzVmlzQ2VsbCkge1xuICAgICAgY29sdW1uLmhhc1Zpc2libGVDZWxsID0gaGFzVmlzQ2VsbDtcbiAgICB9XG4gICAgcmV0dXJuIGN1clZpcyAhPSBoYXNWaXNDZWxsO1xuICB9XG4gIHByb3RlY3RlZCBydW5Ub3RhbHNDb25kaXRpb24oXG4gICAgdmFsdWVzOiBIYXNoVGFibGU8YW55PixcbiAgICBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PlxuICApIHtcbiAgICBpZiAoIXRoaXMuZ2VuZXJhdGVkVG90YWxSb3cpIHJldHVybjtcbiAgICB0aGlzLmdlbmVyYXRlZFRvdGFsUm93LnJ1bkNvbmRpdGlvbihcbiAgICAgIHRoaXMuZ2V0Um93Q29uZGl0aW9uVmFsdWVzKHZhbHVlcyksXG4gICAgICBwcm9wZXJ0aWVzXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGdldFJvd0NvbmRpdGlvblZhbHVlcyh2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+KTogSGFzaFRhYmxlPGFueT4ge1xuICAgIHZhciBuZXdWYWx1ZXMgPSB2YWx1ZXM7XG4gICAgaWYgKCFuZXdWYWx1ZXMpIG5ld1ZhbHVlcyA9IHt9O1xuICAgIC8qXG4gICAgdmFyIG5ld1ZhbHVlczogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgaWYgKHZhbHVlcyAmJiB2YWx1ZXMgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgIG5ld1ZhbHVlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodmFsdWVzKSk7XG4gICAgfVxuICAgICovXG4gICAgdmFyIHRvdGFsUm93ID0ge307XG4gICAgaWYgKCF0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLnRvdGFsVmFsdWUpKSB7XG4gICAgICB0b3RhbFJvdyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy50b3RhbFZhbHVlKSk7XG4gICAgfVxuICAgIG5ld1ZhbHVlc1tcInJvd1wiXSA9IHt9O1xuICAgIG5ld1ZhbHVlc1tcInRvdGFsUm93XCJdID0gdG90YWxSb3c7XG4gICAgcmV0dXJuIG5ld1ZhbHVlcztcbiAgfVxuICBwdWJsaWMgbG9jU3Ryc0NoYW5nZWQoKSB7XG4gICAgc3VwZXIubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICB2YXIgY29sdW1ucyA9IHRoaXMuY29sdW1ucztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbHVtbnNbaV0ubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICB9XG4gICAgdmFyIHJvd3MgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzO1xuICAgIGlmICghcm93cykgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgcm93c1tpXS5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIH1cbiAgICBpZiAoISF0aGlzLmdlbmVyYXRlZFRvdGFsUm93KSB7XG4gICAgICB0aGlzLmdlbmVyYXRlZFRvdGFsUm93LmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjb2x1bW4gYnkgaXQncyBuYW1lLiBSZXR1cm5zIG51bGwgaWYgYSBjb2x1bW4gd2l0aCB0aGlzIG5hbWUgZG9lc24ndCBleGlzdC5cbiAgICogQHBhcmFtIGNvbHVtblxuICAgKi9cbiAgcHVibGljIGdldENvbHVtbkJ5TmFtZShjb2x1bW5OYW1lOiBzdHJpbmcpOiBNYXRyaXhEcm9wZG93bkNvbHVtbiB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmNvbHVtbnNbaV0ubmFtZSA9PSBjb2x1bW5OYW1lKSByZXR1cm4gdGhpcy5jb2x1bW5zW2ldO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBnZXRDb2x1bW5OYW1lKGNvbHVtbk5hbWU6IHN0cmluZyk6IE1hdHJpeERyb3Bkb3duQ29sdW1uIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDb2x1bW5CeU5hbWUoY29sdW1uTmFtZSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGNvbHVtbiB3aWR0aC5cbiAgICogQHBhcmFtIGNvbHVtblxuICAgKi9cbiAgcHVibGljIGdldENvbHVtbldpZHRoKGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pOiBzdHJpbmcge1xuICAgIHJldHVybiBjb2x1bW4ubWluV2lkdGggPyBjb2x1bW4ubWluV2lkdGggOiB0aGlzLmNvbHVtbk1pbldpZHRoO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBjaG9pY2VzIGZvciBkcm9wZG93biwgY2hlY2tib3ggYW5kIHJhZGlvZ3JvdXAgY2VsbCB0eXBlcy5cbiAgICovXG4gIHB1YmxpYyBnZXQgY2hvaWNlcygpOiBBcnJheTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlc1wiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNob2ljZXModmFsOiBBcnJheTxhbnk+KSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlc1wiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBvcHRpb25zIGNhcHRpb24gZm9yIGRyb3Bkb3duIGNlbGwgdHlwZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgb3B0aW9uc0NhcHRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgICAgXCJvcHRpb25zQ2FwdGlvblwiLFxuICAgICAgc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm9wdGlvbnNDYXB0aW9uXCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc2V0IG9wdGlvbnNDYXB0aW9uKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJvcHRpb25zQ2FwdGlvblwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgbG9jT3B0aW9uc0NhcHRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJvcHRpb25zQ2FwdGlvblwiKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGR1cGxpY2F0aW9uIHZhbHVlIGVycm9yIHRleHQuIFNldCBpdCB0byBzaG93IHRoZSB0ZXh0IGRpZmZlcmVudCBmcm9tIHRoZSBkZWZhdWx0LlxuICAgKiBAc2VlIE1hdHJpeERyb3Bkb3duQ29sdW1uLmlzVW5pcXVlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGtleUR1cGxpY2F0aW9uRXJyb3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgICAgXCJrZXlEdXBsaWNhdGlvbkVycm9yXCIsXG4gICAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwia2V5RHVwbGljYXRpb25FcnJvclwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBrZXlEdXBsaWNhdGlvbkVycm9yKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJrZXlEdXBsaWNhdGlvbkVycm9yXCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY0tleUR1cGxpY2F0aW9uRXJyb3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJrZXlEdXBsaWNhdGlvbkVycm9yXCIpO1xuICB9XG4gIHB1YmxpYyBnZXQgc3RvcmVPdGhlcnNBc0NvbW1lbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5zdXJ2ZXkgPyB0aGlzLnN1cnZleS5zdG9yZU90aGVyc0FzQ29tbWVudCA6IGZhbHNlO1xuICB9XG4gIHB1YmxpYyBhZGRDb2x1bW4obmFtZTogc3RyaW5nLCB0aXRsZTogc3RyaW5nID0gbnVsbCk6IE1hdHJpeERyb3Bkb3duQ29sdW1uIHtcbiAgICB2YXIgY29sdW1uID0gbmV3IE1hdHJpeERyb3Bkb3duQ29sdW1uKG5hbWUsIHRpdGxlKTtcbiAgICB0aGlzLmNvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgIHJldHVybiBjb2x1bW47XG4gIH1cbiAgcHJvdGVjdGVkIGdldFZpc2libGVSb3dzKCk6IEFycmF5PE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlPiB7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHJldHVybiBudWxsO1xuICAgIGlmICghdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cykge1xuICAgICAgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cyA9IHRoaXMuZ2VuZXJhdGVSb3dzKCk7XG4gICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmZvckVhY2goKHJvdykgPT4gdGhpcy5vbk1hdHJpeFJvd0NyZWF0ZWQocm93KSk7XG4gICAgICBpZiAodGhpcy5kYXRhKSB7XG4gICAgICAgIHRoaXMucnVuQ2VsbHNDb25kaXRpb24oXG4gICAgICAgICAgdGhpcy5kYXRhLmdldEZpbHRlcmVkVmFsdWVzKCksXG4gICAgICAgICAgdGhpcy5kYXRhLmdldEZpbHRlcmVkUHJvcGVydGllcygpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlT25Sb3dzR2VuZXJhdGlvbih0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKTtcbiAgICAgIHRoaXMudXBkYXRlSXNBbnN3ZXJlZCgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cztcbiAgfVxuICBwcml2YXRlIHVwZGF0ZVZhbHVlT25Sb3dzR2VuZXJhdGlvbihyb3dzOiBBcnJheTxNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZT4pIHtcbiAgICB2YXIgb2xkVmFsdWUgPSB0aGlzLmNyZWF0ZU5ld1ZhbHVlKHRydWUpO1xuICAgIHZhciBuZXdWYWx1ZSA9IHRoaXMuY3JlYXRlTmV3VmFsdWUoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByb3cgPSByb3dzW2ldO1xuICAgICAgaWYgKCEhcm93LmVkaXRpbmdPYmopIGNvbnRpbnVlO1xuICAgICAgdmFyIHJvd1ZhbHVlID0gdGhpcy5nZXRSb3dWYWx1ZShpKTtcbiAgICAgIHZhciByVmFsdWUgPSByb3cudmFsdWU7XG4gICAgICBpZiAodGhpcy5pc1R3b1ZhbHVlRXF1YWxzKHJvd1ZhbHVlLCByVmFsdWUpKSBjb250aW51ZTtcbiAgICAgIG5ld1ZhbHVlID0gdGhpcy5nZXROZXdWYWx1ZU9uUm93Q2hhbmdlZChyb3csIFwiXCIsIHJWYWx1ZSwgZmFsc2UsIG5ld1ZhbHVlKVxuICAgICAgICAudmFsdWU7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzVHdvVmFsdWVFcXVhbHMob2xkVmFsdWUsIG5ld1ZhbHVlKSkgcmV0dXJuO1xuICAgIHRoaXMuaXNSb3dDaGFuZ2luZyA9IHRydWU7XG4gICAgdGhpcy5zZXROZXdWYWx1ZShuZXdWYWx1ZSk7XG4gICAgdGhpcy5pc1Jvd0NoYW5naW5nID0gZmFsc2U7XG4gIH1cbiAgcHVibGljIGdldCB0b3RhbFZhbHVlKCk6IGFueSB7XG4gICAgaWYgKCF0aGlzLmhhc1RvdGFsIHx8ICF0aGlzLnZpc2libGVUb3RhbFJvdykgcmV0dXJuIHt9O1xuICAgIHJldHVybiB0aGlzLnZpc2libGVUb3RhbFJvdy52YWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VmlzaWJsZVRvdGFsUm93KCk6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlIHtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbikgcmV0dXJuIG51bGw7XG4gICAgaWYgKHRoaXMuaGFzVG90YWwpIHtcbiAgICAgIGlmICghdGhpcy5nZW5lcmF0ZWRUb3RhbFJvdykge1xuICAgICAgICB0aGlzLmdlbmVyYXRlZFRvdGFsUm93ID0gdGhpcy5nZW5lcmF0ZVRvdGFsUm93KCk7XG4gICAgICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgICAgICB2YXIgcHJvcGVydGllcyA9IHsgc3VydmV5OiB0aGlzLnN1cnZleSB9O1xuICAgICAgICAgIHRoaXMucnVuVG90YWxzQ29uZGl0aW9uKHRoaXMuZGF0YS5nZXRBbGxWYWx1ZXMoKSwgcHJvcGVydGllcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5nZW5lcmF0ZWRUb3RhbFJvdyA9IG51bGw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdlbmVyYXRlZFRvdGFsUm93O1xuICB9XG4gIHB1YmxpYyBnZXQgdmlzaWJsZVRvdGFsUm93KCk6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5nZXRWaXNpYmxlVG90YWxSb3coKTtcbiAgfVxuICBwdWJsaWMgb25TdXJ2ZXlMb2FkKCkge1xuICAgIHN1cGVyLm9uU3VydmV5TG9hZCgpO1xuICAgIHRoaXMudXBkYXRlQ29sdW1uc0luZGV4ZXModGhpcy5jb2x1bW5zKTtcbiAgICB0aGlzLmNsZWFyR2VuZXJhdGVkUm93cygpO1xuICAgIHRoaXMuZ2VuZXJhdGVkVG90YWxSb3cgPSBudWxsO1xuICAgIHRoaXMudXBkYXRlSGFzRm9vdGVyKCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHJvdyB2YWx1ZS4gSWYgdGhlIHJvdyB2YWx1ZSBpcyBlbXB0eSwgdGhlIG9iamVjdCBpcyBlbXB0eToge30uXG4gICAqIEBwYXJhbSByb3dJbmRleCByb3cgaW5kZXggZnJvbSAwIHRvIHZpc2libGUgcm93IGNvdW50IC0gMS5cbiAgICovXG4gIHB1YmxpYyBnZXRSb3dWYWx1ZShyb3dJbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKHJvd0luZGV4IDwgMCkgcmV0dXJuIG51bGw7XG4gICAgdmFyIHZpc1Jvd3MgPSB0aGlzLnZpc2libGVSb3dzO1xuICAgIGlmIChyb3dJbmRleCA+PSB2aXNSb3dzLmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gICAgdmFyIG5ld1ZhbHVlID0gdGhpcy5jcmVhdGVOZXdWYWx1ZSgpO1xuICAgIHJldHVybiB0aGlzLmdldFJvd1ZhbHVlQ29yZSh2aXNSb3dzW3Jvd0luZGV4XSwgbmV3VmFsdWUpO1xuICB9XG4gIHB1YmxpYyBjaGVja0lmVmFsdWVJblJvd0R1cGxpY2F0ZWQoXG4gICAgY2hlY2tlZFJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gICAgY2VsbFF1ZXN0aW9uOiBRdWVzdGlvblxuICApOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpIHJldHVybiBmYWxzZTtcbiAgICB2YXIgcmVzID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcm93ID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1tpXTtcbiAgICAgIGlmIChjaGVja2VkUm93ID09PSByb3cpIGNvbnRpbnVlO1xuICAgICAgaWYgKHJvdy5nZXRWYWx1ZShjZWxsUXVlc3Rpb24ubmFtZSkgPT0gY2VsbFF1ZXN0aW9uLnZhbHVlKSB7XG4gICAgICAgIHJlcyA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocmVzKSB7XG4gICAgICB0aGlzLmFkZER1cGxpY2F0aW9uRXJyb3IoY2VsbFF1ZXN0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2VsbFF1ZXN0aW9uLmNsZWFyRXJyb3JzKCk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGUgcm93IHZhbHVlLlxuICAgKiBAcGFyYW0gcm93SW5kZXggcm93IGluZGV4IGZyb20gMCB0byB2aXNpYmxlIHJvdyBjb3VudCAtIDEuXG4gICAqIEBwYXJhbSByb3dWYWx1ZSBhbiBvYmplY3Qge1wiY29sdW1uIG5hbWVcIjogY29sdW1uVmFsdWUsLi4uIH1cbiAgICovXG4gIHB1YmxpYyBzZXRSb3dWYWx1ZShyb3dJbmRleDogbnVtYmVyLCByb3dWYWx1ZTogYW55KTogYW55IHtcbiAgICBpZiAocm93SW5kZXggPCAwKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgdmlzUm93cyA9IHRoaXMudmlzaWJsZVJvd3M7XG4gICAgaWYgKHJvd0luZGV4ID49IHZpc1Jvd3MubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICB2aXNSb3dzW3Jvd0luZGV4XS52YWx1ZSA9IHJvd1ZhbHVlO1xuICAgIHRoaXMub25Sb3dDaGFuZ2VkKHZpc1Jvd3Nbcm93SW5kZXhdLCBcIlwiLCByb3dWYWx1ZSwgZmFsc2UpO1xuICB9XG4gIHByb3RlY3RlZCBnZW5lcmF0ZVJvd3MoKTogQXJyYXk8TWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2U+IHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2VuZXJhdGVUb3RhbFJvdygpOiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSB7XG4gICAgcmV0dXJuIG5ldyBNYXRyaXhEcm9wZG93blRvdGFsUm93TW9kZWwodGhpcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZU5ld1ZhbHVlKG51bGxPbkVtcHR5OiBib29sZWFuID0gZmFsc2UpOiBhbnkge1xuICAgIHZhciByZXMgPSAhdGhpcy52YWx1ZSA/IHt9IDogdGhpcy5jcmVhdGVWYWx1ZUNvcHkoKTtcbiAgICBpZiAobnVsbE9uRW1wdHkgJiYgdGhpcy5pc01hdHJpeFZhbHVlRW1wdHkocmVzKSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Um93VmFsdWVDb3JlKFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gICAgcXVlc3Rpb25WYWx1ZTogYW55LFxuICAgIGNyZWF0ZTogYm9vbGVhbiA9IGZhbHNlXG4gICk6IGFueSB7XG4gICAgdmFyIHJlc3VsdCA9XG4gICAgICAhIXF1ZXN0aW9uVmFsdWUgJiYgISFxdWVzdGlvblZhbHVlW3Jvdy5yb3dOYW1lXVxuICAgICAgICA/IHF1ZXN0aW9uVmFsdWVbcm93LnJvd05hbWVdXG4gICAgICAgIDogbnVsbDtcbiAgICBpZiAoIXJlc3VsdCAmJiBjcmVhdGUpIHtcbiAgICAgIHJlc3VsdCA9IHt9O1xuICAgICAgaWYgKCEhcXVlc3Rpb25WYWx1ZSkge1xuICAgICAgICBxdWVzdGlvblZhbHVlW3Jvdy5yb3dOYW1lXSA9IHJlc3VsdDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Um93T2JqKHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UpOiBhbnkge1xuICAgIHZhciBvYmogPSB0aGlzLmdldFJvd1ZhbHVlQ29yZShyb3csIHRoaXMudmFsdWUpO1xuICAgIHJldHVybiAhIW9iaiAmJiAhIW9iai5nZXRUeXBlID8gb2JqIDogbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Um93RGlzcGxheVZhbHVlKFxuICAgIGtleXNBc1RleHQ6IGJvb2xlYW4sXG4gICAgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgICByb3dWYWx1ZTogYW55XG4gICk6IGFueSB7XG4gICAgaWYgKCFyb3dWYWx1ZSkgcmV0dXJuIHJvd1ZhbHVlO1xuICAgIGlmICghIXJvdy5lZGl0aW5nT2JqKSByZXR1cm4gcm93VmFsdWU7XG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhyb3dWYWx1ZSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgIHZhciBxdWVzdGlvbiA9IHJvdy5nZXRRdWVzdGlvbkJ5TmFtZShrZXkpO1xuICAgICAgaWYgKCFxdWVzdGlvbikge1xuICAgICAgICBxdWVzdGlvbiA9IHRoaXMuZ2V0U2hhcmVkUXVlc3Rpb25CeU5hbWUoa2V5LCByb3cpO1xuICAgICAgfVxuICAgICAgaWYgKCEhcXVlc3Rpb24pIHtcbiAgICAgICAgdmFyIGRpc3BsYXl2YWx1ZSA9IHF1ZXN0aW9uLmdldERpc3BsYXlWYWx1ZShrZXlzQXNUZXh0LCByb3dWYWx1ZVtrZXldKTtcbiAgICAgICAgaWYgKGtleXNBc1RleHQgJiYgISFxdWVzdGlvbi50aXRsZSAmJiBxdWVzdGlvbi50aXRsZSAhPT0ga2V5KSB7XG4gICAgICAgICAgcm93VmFsdWVbcXVlc3Rpb24udGl0bGVdID0gZGlzcGxheXZhbHVlO1xuICAgICAgICAgIGRlbGV0ZSByb3dWYWx1ZVtrZXldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJvd1ZhbHVlW2tleV0gPSBkaXNwbGF5dmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJvd1ZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXRQbGFpbkRhdGEoXG4gICAgb3B0aW9uczoge1xuICAgICAgaW5jbHVkZUVtcHR5PzogYm9vbGVhbjtcbiAgICAgIGNhbGN1bGF0aW9ucz86IEFycmF5PHtcbiAgICAgICAgcHJvcGVydHlOYW1lOiBzdHJpbmc7XG4gICAgICB9PjtcbiAgICB9ID0ge1xuICAgICAgaW5jbHVkZUVtcHR5OiB0cnVlLFxuICAgIH1cbiAgKSB7XG4gICAgdmFyIHF1ZXN0aW9uUGxhaW5EYXRhID0gc3VwZXIuZ2V0UGxhaW5EYXRhKG9wdGlvbnMpO1xuICAgIGlmICghIXF1ZXN0aW9uUGxhaW5EYXRhKSB7XG4gICAgICBxdWVzdGlvblBsYWluRGF0YS5pc05vZGUgPSB0cnVlO1xuICAgICAgcXVlc3Rpb25QbGFpbkRhdGEuZGF0YSA9IHRoaXMudmlzaWJsZVJvd3MubWFwKFxuICAgICAgICAocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSkgPT4ge1xuICAgICAgICAgIHZhciByb3dEYXRhSXRlbSA9IDxhbnk+e1xuICAgICAgICAgICAgbmFtZTogcm93LnJvd05hbWUsXG4gICAgICAgICAgICB0aXRsZTogcm93LnRleHQsXG4gICAgICAgICAgICB2YWx1ZTogcm93LnZhbHVlLFxuICAgICAgICAgICAgZGlzcGxheVZhbHVlOiB0aGlzLmdldFJvd0Rpc3BsYXlWYWx1ZShmYWxzZSwgcm93LCByb3cudmFsdWUpLFxuICAgICAgICAgICAgZ2V0U3RyaW5nOiAodmFsOiBhbnkpID0+XG4gICAgICAgICAgICAgIHR5cGVvZiB2YWwgPT09IFwib2JqZWN0XCIgPyBKU09OLnN0cmluZ2lmeSh2YWwpIDogdmFsLFxuICAgICAgICAgICAgaXNOb2RlOiB0cnVlLFxuICAgICAgICAgICAgZGF0YTogcm93LmNlbGxzXG4gICAgICAgICAgICAgIC5tYXAoKGNlbGw6IE1hdHJpeERyb3Bkb3duQ2VsbCkgPT5cbiAgICAgICAgICAgICAgICBjZWxsLnF1ZXN0aW9uLmdldFBsYWluRGF0YShvcHRpb25zKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5maWx0ZXIoKGQ6IGFueSkgPT4gISFkKSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIChvcHRpb25zLmNhbGN1bGF0aW9ucyB8fCBbXSkuZm9yRWFjaCgoY2FsY3VsYXRpb24pID0+IHtcbiAgICAgICAgICAgIHJvd0RhdGFJdGVtW2NhbGN1bGF0aW9uLnByb3BlcnR5TmFtZV0gPSAoPGFueT5yb3cpW1xuICAgICAgICAgICAgICBjYWxjdWxhdGlvbi5wcm9wZXJ0eU5hbWVcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHJvd0RhdGFJdGVtO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcXVlc3Rpb25QbGFpbkRhdGE7XG4gIH1cbiAgcHVibGljIGdldFByb2dyZXNzSW5mbygpOiBJUHJvZ3Jlc3NJbmZvIHtcbiAgICByZXR1cm4gU3VydmV5RWxlbWVudC5nZXRQcm9ncmVzc0luZm9CeUVsZW1lbnRzKFxuICAgICAgdGhpcy5nZXRDZWxsUXVlc3Rpb25zKCksXG4gICAgICB0aGlzLmlzUmVxdWlyZWRcbiAgICApO1xuICB9XG4gIHByaXZhdGUgZ2V0Q2VsbFF1ZXN0aW9ucygpOiBBcnJheTxRdWVzdGlvbj4ge1xuICAgIGNvbnN0IHJvd3MgPSB0aGlzLnZpc2libGVSb3dzO1xuICAgIGlmICghcm93cykgcmV0dXJuIFtdO1xuICAgIGNvbnN0IHF1ZXN0aW9ucyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgcm93ID0gcm93c1tpXTtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcm93LmNlbGxzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHF1ZXN0aW9ucy5wdXNoKHJvdy5jZWxsc1tqXS5xdWVzdGlvbik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBxdWVzdGlvbnM7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25CZWZvcmVWYWx1ZUNoYW5nZWQodmFsOiBhbnkpIHt9XG4gIHByaXZhdGUgb25TZXRRdWVzdGlvblZhbHVlKCkge1xuICAgIGlmICh0aGlzLmlzUm93Q2hhbmdpbmcpIHJldHVybjtcbiAgICB0aGlzLm9uQmVmb3JlVmFsdWVDaGFuZ2VkKHRoaXMudmFsdWUpO1xuICAgIGlmICghdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cyB8fCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aCA9PSAwKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuaXNSb3dDaGFuZ2luZyA9IHRydWU7XG4gICAgdmFyIHZhbCA9IHRoaXMuY3JlYXRlTmV3VmFsdWUoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByb3cgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2ldO1xuICAgICAgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1tpXS52YWx1ZSA9IHRoaXMuZ2V0Um93VmFsdWVDb3JlKHJvdywgdmFsKTtcbiAgICB9XG4gICAgdGhpcy5pc1Jvd0NoYW5naW5nID0gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIHNldFF1ZXN0aW9uVmFsdWUobmV3VmFsdWU6IGFueSkge1xuICAgIHN1cGVyLnNldFF1ZXN0aW9uVmFsdWUobmV3VmFsdWUsIGZhbHNlKTtcbiAgICB0aGlzLm9uU2V0UXVlc3Rpb25WYWx1ZSgpO1xuICAgIHRoaXMudXBkYXRlSXNBbnN3ZXJlZCgpO1xuICB9XG4gIHN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkge1xuICAgIHZhciByb3dzID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cztcbiAgICBpZiAoIXJvd3MpIHJvd3MgPSB0aGlzLnZpc2libGVSb3dzO1xuICAgIGlmICghcm93cykgcmV0dXJuIHRydWU7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2VsbHMgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2ldLmNlbGxzO1xuICAgICAgaWYgKCFjZWxscykgY29udGludWU7XG4gICAgICBmb3IgKHZhciBjb2xJbmRleCA9IDA7IGNvbEluZGV4IDwgY2VsbHMubGVuZ3RoOyBjb2xJbmRleCsrKSB7XG4gICAgICAgIHZhciBxdWVzdGlvbiA9IGNlbGxzW2NvbEluZGV4XS5xdWVzdGlvbjtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHF1ZXN0aW9uICYmXG4gICAgICAgICAgKCFxdWVzdGlvbi5zdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpIHx8ICFxdWVzdGlvbi52YWx1ZSlcbiAgICAgICAgKVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENvbnRhaW5zRXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBzdXBlci5nZXRDb250YWluc0Vycm9ycygpIHx8XG4gICAgICB0aGlzLmNoZWNrRm9yQW5zd2Vyc09yRXJyb3JzKFxuICAgICAgICAocXVlc3Rpb246IFF1ZXN0aW9uKSA9PiBxdWVzdGlvbi5jb250YWluc0Vycm9ycyxcbiAgICAgICAgZmFsc2VcbiAgICAgIClcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRJc0Fuc3dlcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBzdXBlci5nZXRJc0Fuc3dlcmVkKCkgJiZcbiAgICAgIHRoaXMuY2hlY2tGb3JBbnN3ZXJzT3JFcnJvcnMoXG4gICAgICAgIChxdWVzdGlvbjogUXVlc3Rpb24pID0+IHF1ZXN0aW9uLmlzQW5zd2VyZWQsXG4gICAgICAgIHRydWVcbiAgICAgIClcbiAgICApO1xuICB9XG4gIHByaXZhdGUgY2hlY2tGb3JBbnN3ZXJzT3JFcnJvcnMoXG4gICAgcHJlZGljYXRlOiAocXVlc3Rpb246IFF1ZXN0aW9uKSA9PiBib29sZWFuLFxuICAgIGV2ZXJ5OiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgdmFyIHJvd3MgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzO1xuICAgIGlmICghcm93cykgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNlbGxzID0gcm93c1tpXS5jZWxscztcbiAgICAgIGlmICghY2VsbHMpIGNvbnRpbnVlO1xuICAgICAgZm9yICh2YXIgY29sSW5kZXggPSAwOyBjb2xJbmRleCA8IGNlbGxzLmxlbmd0aDsgY29sSW5kZXgrKykge1xuICAgICAgICBpZiAoIWNlbGxzW2NvbEluZGV4XSkgY29udGludWU7XG4gICAgICAgIHZhciBxdWVzdGlvbiA9IGNlbGxzW2NvbEluZGV4XS5xdWVzdGlvbjtcbiAgICAgICAgaWYgKHF1ZXN0aW9uICYmIHF1ZXN0aW9uLmlzVmlzaWJsZSlcbiAgICAgICAgICBpZiAocHJlZGljYXRlKHF1ZXN0aW9uKSkge1xuICAgICAgICAgICAgaWYgKCFldmVyeSkgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChldmVyeSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGV2ZXJ5ID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG4gIHB1YmxpYyBoYXNFcnJvcnMoZmlyZUNhbGxiYWNrOiBib29sZWFuID0gdHJ1ZSwgcmVjOiBhbnkgPSBudWxsKTogYm9vbGVhbiB7XG4gICAgdmFyIGVycm9zSW5Sb3dzID0gdGhpcy5oYXNFcnJvckluUm93cyhmaXJlQ2FsbGJhY2ssIHJlYyk7XG4gICAgdmFyIGlzRHVwbGljYXRlZCA9IHRoaXMuaXNWYWx1ZUR1cGxpY2F0ZWQoKTtcbiAgICByZXR1cm4gc3VwZXIuaGFzRXJyb3JzKGZpcmVDYWxsYmFjaywgcmVjKSB8fCBlcnJvc0luUm93cyB8fCBpc0R1cGxpY2F0ZWQ7XG4gIH1cbiAgcHJvdGVjdGVkIGdldElzUnVubmluZ1ZhbGlkYXRvcnMoKTogYm9vbGVhbiB7XG4gICAgaWYgKHN1cGVyLmdldElzUnVubmluZ1ZhbGlkYXRvcnMoKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKCF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2VsbHMgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2ldLmNlbGxzO1xuICAgICAgaWYgKCFjZWxscykgY29udGludWU7XG4gICAgICBmb3IgKHZhciBjb2xJbmRleCA9IDA7IGNvbEluZGV4IDwgY2VsbHMubGVuZ3RoOyBjb2xJbmRleCsrKSB7XG4gICAgICAgIGlmICghY2VsbHNbY29sSW5kZXhdKSBjb250aW51ZTtcbiAgICAgICAgdmFyIHF1ZXN0aW9uID0gY2VsbHNbY29sSW5kZXhdLnF1ZXN0aW9uO1xuICAgICAgICBpZiAoISFxdWVzdGlvbiAmJiBxdWVzdGlvbi5pc1J1bm5pbmdWYWxpZGF0b3JzKSByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBnZXRBbGxFcnJvcnMoKTogQXJyYXk8U3VydmV5RXJyb3I+IHtcbiAgICB2YXIgcmVzdWx0ID0gc3VwZXIuZ2V0QWxsRXJyb3JzKCk7XG4gICAgdmFyIHJvd3MgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzO1xuXG4gICAgaWYgKHJvd3MgPT09IG51bGwpIHJldHVybiByZXN1bHQ7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByb3cgPSByb3dzW2ldO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCByb3cuY2VsbHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIGVycm9ycyA9IHJvdy5jZWxsc1tqXS5xdWVzdGlvbi5nZXRBbGxFcnJvcnMoKTtcbiAgICAgICAgaWYgKGVycm9ycyAmJiBlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoZXJyb3JzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHByaXZhdGUgaGFzRXJyb3JJblJvd3MoZmlyZUNhbGxiYWNrOiBib29sZWFuLCByZWM6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cykgcmV0dXJuIGZhbHNlO1xuICAgIHZhciByZXMgPSBmYWxzZTtcbiAgICBpZiAoIXJlYykgcmVjID0ge307XG4gICAgcmVjLmlzU2luZ2xlRGV0YWlsUGFuZWwgPSB0aGlzLmRldGFpbFBhbmVsTW9kZSA9PT0gXCJ1bmRlclJvd1NpbmdsZVwiO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzID1cbiAgICAgICAgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1tpXS5oYXNFcnJvcnMoZmlyZUNhbGxiYWNrLCByZWMsICgpID0+IHtcbiAgICAgICAgICB0aGlzLnJhaXNlT25Db21wbGV0ZWRBc3luY1ZhbGlkYXRvcnMoKTtcbiAgICAgICAgfSkgfHwgcmVzO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByaXZhdGUgaXNWYWx1ZUR1cGxpY2F0ZWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIGNvbHVtbnMgPSB0aGlzLmdldFVuaXF1ZUNvbHVtbnMoKTtcbiAgICB2YXIgcmVzID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXMgPSB0aGlzLmlzVmFsdWVJbkNvbHVtbkR1cGxpY2F0ZWQoY29sdW1uc1tpXSkgfHwgcmVzO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByaXZhdGUgaXNWYWx1ZUluQ29sdW1uRHVwbGljYXRlZChjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgdmFyIGtleVZhbHVlcyA9IDxBcnJheTxhbnk+PltdO1xuICAgIHZhciByZXMgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlcyA9XG4gICAgICAgIHRoaXMuaXNWYWx1ZUR1cGxpY2F0ZWRJblJvdyhcbiAgICAgICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2ldLFxuICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICBrZXlWYWx1ZXNcbiAgICAgICAgKSB8fCByZXM7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFVuaXF1ZUNvbHVtbnMoKTogQXJyYXk8TWF0cml4RHJvcGRvd25Db2x1bW4+IHtcbiAgICB2YXIgcmVzID0gbmV3IEFycmF5PE1hdHJpeERyb3Bkb3duQ29sdW1uPigpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5jb2x1bW5zW2ldLmlzVW5pcXVlKSB7XG4gICAgICAgIHJlcy5wdXNoKHRoaXMuY29sdW1uc1tpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSBpc1ZhbHVlRHVwbGljYXRlZEluUm93KFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gICAgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbixcbiAgICBrZXlWYWx1ZXM6IEFycmF5PGFueT5cbiAgKTogYm9vbGVhbiB7XG4gICAgdmFyIHF1ZXN0aW9uID0gcm93LmdldFF1ZXN0aW9uQnlDb2x1bW4oY29sdW1uKTtcbiAgICBpZiAoIXF1ZXN0aW9uIHx8IHF1ZXN0aW9uLmlzRW1wdHkoKSkgcmV0dXJuIGZhbHNlO1xuICAgIHZhciB2YWx1ZSA9IHF1ZXN0aW9uLnZhbHVlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5VmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodmFsdWUgPT0ga2V5VmFsdWVzW2ldKSB7XG4gICAgICAgIHRoaXMuYWRkRHVwbGljYXRpb25FcnJvcihxdWVzdGlvbik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBrZXlWYWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHByaXZhdGUgYWRkRHVwbGljYXRpb25FcnJvcihxdWVzdGlvbjogUXVlc3Rpb24pIHtcbiAgICBxdWVzdGlvbi5hZGRFcnJvcihuZXcgS2V5RHVwbGljYXRpb25FcnJvcih0aGlzLmtleUR1cGxpY2F0aW9uRXJyb3IsIHRoaXMpKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Rmlyc3RJbnB1dEVsZW1lbnRJZCgpOiBzdHJpbmcge1xuICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuZ2V0Rmlyc3RDZWxsUXVlc3Rpb24oZmFsc2UpO1xuICAgIHJldHVybiBxdWVzdGlvbiA/IHF1ZXN0aW9uLmlucHV0SWQgOiBzdXBlci5nZXRGaXJzdElucHV0RWxlbWVudElkKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEZpcnN0RXJyb3JJbnB1dEVsZW1lbnRJZCgpOiBzdHJpbmcge1xuICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuZ2V0Rmlyc3RDZWxsUXVlc3Rpb24odHJ1ZSk7XG4gICAgcmV0dXJuIHF1ZXN0aW9uID8gcXVlc3Rpb24uaW5wdXRJZCA6IHN1cGVyLmdldEZpcnN0RXJyb3JJbnB1dEVsZW1lbnRJZCgpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRGaXJzdENlbGxRdWVzdGlvbihvbkVycm9yOiBib29sZWFuKTogUXVlc3Rpb24ge1xuICAgIGlmICghdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cykgcmV0dXJuIG51bGw7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2VsbHMgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2ldLmNlbGxzO1xuICAgICAgZm9yICh2YXIgY29sSW5kZXggPSAwOyBjb2xJbmRleCA8IGNlbGxzLmxlbmd0aDsgY29sSW5kZXgrKykge1xuICAgICAgICBpZiAoIW9uRXJyb3IpIHJldHVybiBjZWxsc1tjb2xJbmRleF0ucXVlc3Rpb247XG4gICAgICAgIGlmIChjZWxsc1tjb2xJbmRleF0ucXVlc3Rpb24uY3VycmVudEVycm9yQ291bnQgPiAwKVxuICAgICAgICAgIHJldHVybiBjZWxsc1tjb2xJbmRleF0ucXVlc3Rpb247XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBvblJlYWRPbmx5Q2hhbmdlZCgpIHtcbiAgICBzdXBlci5vblJlYWRPbmx5Q2hhbmdlZCgpO1xuICAgIGlmICghdGhpcy5nZW5lcmF0ZVJvd3MpIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudmlzaWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMudmlzaWJsZVJvd3NbaV0ub25RdWVzdGlvblJlYWRPbmx5Q2hhbmdlZCh0aGlzLmlzUmVhZE9ubHkpO1xuICAgIH1cbiAgfVxuXG4gIC8vSU1hdHJpeERyb3Bkb3duRGF0YVxuICBwdWJsaWMgY3JlYXRlUXVlc3Rpb24oXG4gICAgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgICBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uXG4gICk6IFF1ZXN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVRdWVzdGlvbkNvcmUocm93LCBjb2x1bW4pO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVRdWVzdGlvbkNvcmUoXG4gICAgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgICBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uXG4gICk6IFF1ZXN0aW9uIHtcbiAgICB2YXIgcXVlc3Rpb24gPSBjb2x1bW4uY3JlYXRlQ2VsbFF1ZXN0aW9uKHJvdyk7XG4gICAgaWYgKHRoaXMuaXNSZWFkT25seSkge1xuICAgICAgcXVlc3Rpb24ucmVhZE9ubHkgPSB0cnVlO1xuICAgIH1cbiAgICBxdWVzdGlvbi5zZXRTdXJ2ZXlJbXBsKHJvdyk7XG4gICAgcXVlc3Rpb24uc2V0UGFyZW50UXVlc3Rpb24odGhpcyk7XG4gICAgcmV0dXJuIHF1ZXN0aW9uO1xuICB9XG4gIHByb3RlY3RlZCBkZWxldGVSb3dWYWx1ZShcbiAgICBuZXdWYWx1ZTogYW55LFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2VcbiAgKTogYW55IHtcbiAgICBpZiAoIW5ld1ZhbHVlKSByZXR1cm4gbmV3VmFsdWU7XG4gICAgZGVsZXRlIG5ld1ZhbHVlW3Jvdy5yb3dOYW1lXTtcbiAgICByZXR1cm4gdGhpcy5pc09iamVjdChuZXdWYWx1ZSkgJiYgT2JqZWN0LmtleXMobmV3VmFsdWUpLmxlbmd0aCA9PSAwXG4gICAgICA/IG51bGxcbiAgICAgIDogbmV3VmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBpc0RvaW5nb25BbnlWYWx1ZUNoYW5nZWQgPSBmYWxzZTtcbiAgb25BbnlWYWx1ZUNoYW5nZWQobmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5pc0xvYWRpbmdGcm9tSnNvbiB8fFxuICAgICAgdGhpcy5pc0RvaW5nb25BbnlWYWx1ZUNoYW5nZWQgfHxcbiAgICAgICF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzXG4gICAgKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuaXNEb2luZ29uQW55VmFsdWVDaGFuZ2VkID0gdHJ1ZTtcbiAgICB2YXIgcm93cyA9IHRoaXMudmlzaWJsZVJvd3M7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByb3dzW2ldLm9uQW55VmFsdWVDaGFuZ2VkKG5hbWUpO1xuICAgIH1cbiAgICB2YXIgdG90YWxSb3cgPSB0aGlzLnZpc2libGVUb3RhbFJvdztcbiAgICBpZiAoISF0b3RhbFJvdykge1xuICAgICAgdG90YWxSb3cub25BbnlWYWx1ZUNoYW5nZWQobmFtZSk7XG4gICAgfVxuICAgIHRoaXMuaXNEb2luZ29uQW55VmFsdWVDaGFuZ2VkID0gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIGlzT2JqZWN0KHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiO1xuICB9XG4gIHByaXZhdGUgZ2V0T25DZWxsVmFsdWVDaGFuZ2VkT3B0aW9ucyhcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIGNvbHVtbk5hbWU6IHN0cmluZyxcbiAgICByb3dWYWx1ZTogYW55XG4gICk6IGFueSB7XG4gICAgdmFyIGdldFF1ZXN0aW9uID0gKGNvbE5hbWU6IGFueSkgPT4ge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3cuY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNvbCA9IHJvdy5jZWxsc1tpXS5jb2x1bW47XG4gICAgICAgIGlmICghIWNvbCAmJiBjb2wubmFtZSA9PT0gY29sTmFtZSkge1xuICAgICAgICAgIHJldHVybiByb3cuY2VsbHNbaV0ucXVlc3Rpb247XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHJvdzogcm93LFxuICAgICAgY29sdW1uTmFtZTogY29sdW1uTmFtZSxcbiAgICAgIHJvd1ZhbHVlOiByb3dWYWx1ZSxcbiAgICAgIHZhbHVlOiAhIXJvd1ZhbHVlID8gcm93VmFsdWVbY29sdW1uTmFtZV0gOiBudWxsLFxuICAgICAgZ2V0Q2VsbFF1ZXN0aW9uOiBnZXRRdWVzdGlvbixcbiAgICB9O1xuICB9XG4gIHByb3RlY3RlZCBvbkNlbGxWYWx1ZUNoYW5nZWQoXG4gICAgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgICBjb2x1bW5OYW1lOiBzdHJpbmcsXG4gICAgcm93VmFsdWU6IGFueVxuICApIHtcbiAgICBpZiAoIXRoaXMuc3VydmV5KSByZXR1cm47XG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLmdldE9uQ2VsbFZhbHVlQ2hhbmdlZE9wdGlvbnMocm93LCBjb2x1bW5OYW1lLCByb3dWYWx1ZSk7XG4gICAgaWYgKCEhdGhpcy5vbkNlbGxWYWx1ZUNoYW5nZWRDYWxsYmFjaykge1xuICAgICAgdGhpcy5vbkNlbGxWYWx1ZUNoYW5nZWRDYWxsYmFjayhvcHRpb25zKTtcbiAgICB9XG4gICAgdGhpcy5zdXJ2ZXkubWF0cml4Q2VsbFZhbHVlQ2hhbmdlZCh0aGlzLCBvcHRpb25zKTtcbiAgfVxuICB2YWxpZGF0ZUNlbGwoXG4gICAgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgICBjb2x1bW5OYW1lOiBzdHJpbmcsXG4gICAgcm93VmFsdWU6IGFueVxuICApOiBTdXJ2ZXlFcnJvciB7XG4gICAgaWYgKCF0aGlzLnN1cnZleSkgcmV0dXJuO1xuICAgIHZhciBvcHRpb25zID0gdGhpcy5nZXRPbkNlbGxWYWx1ZUNoYW5nZWRPcHRpb25zKHJvdywgY29sdW1uTmFtZSwgcm93VmFsdWUpO1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5tYXRyaXhDZWxsVmFsaWRhdGUodGhpcywgb3B0aW9ucyk7XG4gIH1cbiAgZ2V0IGlzVmFsaWRhdGVPblZhbHVlQ2hhbmdpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5zdXJ2ZXkgPyB0aGlzLnN1cnZleS5pc1ZhbGlkYXRlT25WYWx1ZUNoYW5naW5nIDogZmFsc2U7XG4gIH1cbiAgb25Sb3dDaGFuZ2luZyhcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIGNvbHVtbk5hbWU6IHN0cmluZyxcbiAgICByb3dWYWx1ZTogYW55XG4gICk6IGFueSB7XG4gICAgaWYgKCF0aGlzLnN1cnZleSkgcmV0dXJuICEhcm93VmFsdWUgPyByb3dWYWx1ZVtjb2x1bW5OYW1lXSA6IG51bGw7XG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLmdldE9uQ2VsbFZhbHVlQ2hhbmdlZE9wdGlvbnMocm93LCBjb2x1bW5OYW1lLCByb3dWYWx1ZSk7XG4gICAgdmFyIG9sZFJvd1ZhbHVlID0gdGhpcy5nZXRSb3dWYWx1ZUNvcmUocm93LCB0aGlzLmNyZWF0ZU5ld1ZhbHVlKCksIHRydWUpO1xuICAgIG9wdGlvbnMub2xkVmFsdWUgPSAhIW9sZFJvd1ZhbHVlID8gb2xkUm93VmFsdWVbY29sdW1uTmFtZV0gOiBudWxsO1xuICAgIHRoaXMuc3VydmV5Lm1hdHJpeENlbGxWYWx1ZUNoYW5naW5nKHRoaXMsIG9wdGlvbnMpO1xuICAgIHJldHVybiBvcHRpb25zLnZhbHVlO1xuICB9XG4gIG9uUm93Q2hhbmdlZChcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIGNvbHVtbk5hbWU6IHN0cmluZyxcbiAgICBuZXdSb3dWYWx1ZTogYW55LFxuICAgIGlzRGVsZXRpbmdWYWx1ZTogYm9vbGVhblxuICApIHtcbiAgICB2YXIgcm93T2JqID0gISFjb2x1bW5OYW1lID8gdGhpcy5nZXRSb3dPYmoocm93KSA6IG51bGw7XG4gICAgaWYgKCEhcm93T2JqKSB7XG4gICAgICB2YXIgY29sdW1uVmFsdWUgPSBudWxsO1xuICAgICAgaWYgKCEhbmV3Um93VmFsdWUgJiYgIWlzRGVsZXRpbmdWYWx1ZSkge1xuICAgICAgICBjb2x1bW5WYWx1ZSA9IG5ld1Jvd1ZhbHVlW2NvbHVtbk5hbWVdO1xuICAgICAgfVxuICAgICAgdGhpcy5pc1Jvd0NoYW5naW5nID0gdHJ1ZTtcbiAgICAgIHJvd09ialtjb2x1bW5OYW1lXSA9IGNvbHVtblZhbHVlO1xuICAgICAgdGhpcy5pc1Jvd0NoYW5naW5nID0gZmFsc2U7XG4gICAgICB0aGlzLm9uQ2VsbFZhbHVlQ2hhbmdlZChyb3csIGNvbHVtbk5hbWUsIHJvd09iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMuY3JlYXRlTmV3VmFsdWUodHJ1ZSk7XG4gICAgICB2YXIgY29tYmluZSA9IHRoaXMuZ2V0TmV3VmFsdWVPblJvd0NoYW5nZWQoXG4gICAgICAgIHJvdyxcbiAgICAgICAgY29sdW1uTmFtZSxcbiAgICAgICAgbmV3Um93VmFsdWUsXG4gICAgICAgIGlzRGVsZXRpbmdWYWx1ZSxcbiAgICAgICAgdGhpcy5jcmVhdGVOZXdWYWx1ZSgpXG4gICAgICApO1xuICAgICAgaWYgKHRoaXMuaXNUd29WYWx1ZUVxdWFscyhvbGRWYWx1ZSwgY29tYmluZS52YWx1ZSkpIHJldHVybjtcbiAgICAgIHRoaXMuaXNSb3dDaGFuZ2luZyA9IHRydWU7XG4gICAgICB0aGlzLnNldE5ld1ZhbHVlKGNvbWJpbmUudmFsdWUpO1xuICAgICAgdGhpcy5pc1Jvd0NoYW5naW5nID0gZmFsc2U7XG4gICAgICBpZiAoY29sdW1uTmFtZSkge1xuICAgICAgICB0aGlzLm9uQ2VsbFZhbHVlQ2hhbmdlZChyb3csIGNvbHVtbk5hbWUsIGNvbWJpbmUucm93VmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIGdldE5ld1ZhbHVlT25Sb3dDaGFuZ2VkKFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gICAgY29sdW1uTmFtZTogc3RyaW5nLFxuICAgIG5ld1Jvd1ZhbHVlOiBhbnksXG4gICAgaXNEZWxldGluZ1ZhbHVlOiBib29sZWFuLFxuICAgIG5ld1ZhbHVlOiBhbnlcbiAgKTogYW55IHtcbiAgICB2YXIgcm93VmFsdWUgPSB0aGlzLmdldFJvd1ZhbHVlQ29yZShyb3csIG5ld1ZhbHVlLCB0cnVlKTtcbiAgICBpZiAoaXNEZWxldGluZ1ZhbHVlKSB7XG4gICAgICBkZWxldGUgcm93VmFsdWVbY29sdW1uTmFtZV07XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93LmNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0gcm93LmNlbGxzW2ldLnF1ZXN0aW9uLmdldFZhbHVlTmFtZSgpO1xuICAgICAgZGVsZXRlIHJvd1ZhbHVlW2tleV07XG4gICAgfVxuICAgIGlmIChuZXdSb3dWYWx1ZSkge1xuICAgICAgbmV3Um93VmFsdWUgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG5ld1Jvd1ZhbHVlKSk7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gbmV3Um93VmFsdWUpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsdWVFbXB0eShuZXdSb3dWYWx1ZVtrZXldKSkge1xuICAgICAgICAgIHJvd1ZhbHVlW2tleV0gPSBuZXdSb3dWYWx1ZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmlzT2JqZWN0KHJvd1ZhbHVlKSAmJiBPYmplY3Qua2V5cyhyb3dWYWx1ZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICBuZXdWYWx1ZSA9IHRoaXMuZGVsZXRlUm93VmFsdWUobmV3VmFsdWUsIHJvdyk7XG4gICAgfVxuICAgIHJldHVybiB7IHZhbHVlOiBuZXdWYWx1ZSwgcm93VmFsdWU6IHJvd1ZhbHVlIH07XG4gIH1cbiAgZ2V0Um93SW5kZXgocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSk6IG51bWJlciB7XG4gICAgaWYgKCF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKSByZXR1cm4gLTE7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZVJvd3MuaW5kZXhPZihyb3cpO1xuICB9XG4gIHB1YmxpYyBnZXRFbGVtZW50c0luRGVzaWduKGluY2x1ZGVIaWRkZW46IGJvb2xlYW4gPSBmYWxzZSk6IEFycmF5PElFbGVtZW50PiB7XG4gICAgaWYgKHRoaXMuZGV0YWlsUGFuZWxNb2RlID09IFwibm9uZVwiKVxuICAgICAgcmV0dXJuIHN1cGVyLmdldEVsZW1lbnRzSW5EZXNpZ24oaW5jbHVkZUhpZGRlbik7XG4gICAgcmV0dXJuIGluY2x1ZGVIaWRkZW4gPyBbdGhpcy5kZXRhaWxQYW5lbF0gOiB0aGlzLmRldGFpbEVsZW1lbnRzO1xuICB9XG4gIGhhc0RldGFpbFBhbmVsKHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5kZXRhaWxQYW5lbE1vZGUgPT0gXCJub25lXCIpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHJldHVybiB0cnVlO1xuICAgIGlmICghIXRoaXMub25IYXNEZXRhaWxQYW5lbENhbGxiYWNrKVxuICAgICAgcmV0dXJuIHRoaXMub25IYXNEZXRhaWxQYW5lbENhbGxiYWNrKHJvdyk7XG4gICAgcmV0dXJuIHRoaXMuZGV0YWlsRWxlbWVudHMubGVuZ3RoID4gMDtcbiAgfVxuICBnZXRJc0RldGFpbFBhbmVsU2hvd2luZyhyb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuZGV0YWlsUGFuZWxNb2RlID09IFwibm9uZVwiKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlKSB7XG4gICAgICB2YXIgcmVzID0gdGhpcy52aXNpYmxlUm93cy5pbmRleE9mKHJvdykgPT0gMDtcbiAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgaWYgKCFyb3cuZGV0YWlsUGFuZWwpIHtcbiAgICAgICAgICByb3cuc2hvd0RldGFpbFBhbmVsKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc1Jvd1Nob3dpbmdcIiArIHJvdy5pZCwgZmFsc2UpO1xuICB9XG4gIHNldElzRGV0YWlsUGFuZWxTaG93aW5nKHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsIHZhbDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh2YWwgPT0gdGhpcy5nZXRJc0RldGFpbFBhbmVsU2hvd2luZyhyb3cpKSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNSb3dTaG93aW5nXCIgKyByb3cuaWQsIHZhbCk7XG4gICAgdGhpcy51cGRhdGVEZXRhaWxQYW5lbEJ1dHRvbkNzcyhyb3cpO1xuICAgIGlmICghIXRoaXMucmVuZGVyZWRUYWJsZSkge1xuICAgICAgdGhpcy5yZW5kZXJlZFRhYmxlLm9uRGV0YWlsUGFuZWxDaGFuZ2VWaXNpYmlsaXR5KHJvdywgdmFsKTtcbiAgICB9XG4gICAgaWYgKHZhbCAmJiB0aGlzLmRldGFpbFBhbmVsTW9kZSA9PT0gXCJ1bmRlclJvd1NpbmdsZVwiKSB7XG4gICAgICB2YXIgcm93cyA9IHRoaXMudmlzaWJsZVJvd3M7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHJvd3NbaV0uaWQgIT09IHJvdy5pZCAmJiByb3dzW2ldLmlzRGV0YWlsUGFuZWxTaG93aW5nKSB7XG4gICAgICAgICAgcm93c1tpXS5oaWRlRGV0YWlsUGFuZWwoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0RGV0YWlsUGFuZWxCdXR0b25Dc3Mocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSk6IHN0cmluZyB7XG4gICAgdmFyIHJlcyA9IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImRldGFpbEJ1dHRvbkNzc1wiICsgcm93LmlkKTtcbiAgICBpZiAoISFyZXMpIHJldHVybiByZXM7XG4gICAgdmFyIHJlcyA9IHRoaXMuY3NzQ2xhc3Nlcy5kZXRhaWxCdXR0b247XG4gICAgcmV0dXJuICEhcmVzID8gcmVzIDogXCJcIjtcbiAgfVxuICBwdWJsaWMgZ2V0RGV0YWlsUGFuZWxJY29uQ3NzKHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UpOiBzdHJpbmcge1xuICAgIHZhciByZXMgPSB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJkZXRhaWxJY29uQ3NzXCIgKyByb3cuaWQpO1xuICAgIGlmICghIXJlcykgcmV0dXJuIHJlcztcbiAgICB2YXIgcmVzID0gdGhpcy5jc3NDbGFzc2VzLmRldGFpbEljb247XG4gICAgcmV0dXJuICEhcmVzID8gcmVzIDogXCJcIjtcbiAgfVxuICBwcml2YXRlIHVwZGF0ZURldGFpbFBhbmVsQnV0dG9uQ3NzKHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UpIHtcbiAgICB2YXIgY2xhc3NlcyA9IHRoaXMuY3NzQ2xhc3NlcztcbiAgICB2YXIgaWNvbiA9IGNsYXNzZXMuZGV0YWlsSWNvbjtcbiAgICBpZiAoIWljb24pIGljb24gPSBcIlwiO1xuICAgIHZhciBidXR0b24gPSBjbGFzc2VzLmRldGFpbEJ1dHRvbjtcbiAgICBpZiAoIWJ1dHRvbikgYnV0dG9uID0gXCJcIjtcbiAgICBpZiAodGhpcy5nZXRJc0RldGFpbFBhbmVsU2hvd2luZyhyb3cpKSB7XG4gICAgICBpZiAoISFjbGFzc2VzLmRldGFpbEljb25FeHBhbmRlZClcbiAgICAgICAgaWNvbiArPSBcIiBcIiArIGNsYXNzZXMuZGV0YWlsSWNvbkV4cGFuZGVkO1xuICAgICAgaWYgKCEhY2xhc3Nlcy5kZXRhaWxCdXR0b25FeHBhbmRlZClcbiAgICAgICAgYnV0dG9uICs9IFwiIFwiICsgY2xhc3Nlcy5kZXRhaWxCdXR0b25FeHBhbmRlZDtcbiAgICB9XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZGV0YWlsSWNvbkNzc1wiICsgcm93LmlkLCBpY29uKTtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJkZXRhaWxCdXR0b25Dc3NcIiArIHJvdy5pZCwgYnV0dG9uKTtcbiAgfVxuICBjcmVhdGVSb3dEZXRhaWxQYW5lbChyb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlKTogUGFuZWxNb2RlbCB7XG4gICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlKSByZXR1cm4gdGhpcy5kZXRhaWxQYW5lbDtcbiAgICB2YXIgcGFuZWwgPSB0aGlzLmNyZWF0ZU5ld0RldGFpbFBhbmVsKCk7XG4gICAgdmFyIGpzb24gPSB0aGlzLmRldGFpbFBhbmVsLnRvSlNPTigpO1xuICAgIG5ldyBKc29uT2JqZWN0KCkudG9PYmplY3QoanNvbiwgcGFuZWwpO1xuICAgIHBhbmVsLnJlbmRlcldpZHRoID0gXCIxMDAlXCI7XG4gICAgcGFuZWwudXBkYXRlQ3VzdG9tV2lkZ2V0cygpO1xuICAgIGlmICghIXRoaXMub25DcmVhdGVEZXRhaWxQYW5lbENhbGxiYWNrKSB7XG4gICAgICB0aGlzLm9uQ3JlYXRlRGV0YWlsUGFuZWxDYWxsYmFjayhyb3csIHBhbmVsKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhbmVsO1xuICB9XG4gIGdldFNoYXJlZFF1ZXN0aW9uQnlOYW1lKFxuICAgIGNvbHVtbk5hbWU6IHN0cmluZyxcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlXG4gICk6IFF1ZXN0aW9uIHtcbiAgICBpZiAoIXRoaXMuc3VydmV5IHx8ICF0aGlzLnZhbHVlTmFtZSkgcmV0dXJuIG51bGw7XG4gICAgdmFyIGluZGV4ID0gdGhpcy5nZXRSb3dJbmRleChyb3cpO1xuICAgIGlmIChpbmRleCA8IDApIHJldHVybiBudWxsO1xuICAgIHJldHVybiA8UXVlc3Rpb24+KFxuICAgICAgdGhpcy5zdXJ2ZXkuZ2V0UXVlc3Rpb25CeVZhbHVlTmFtZUZyb21BcnJheShcbiAgICAgICAgdGhpcy52YWx1ZU5hbWUsXG4gICAgICAgIGNvbHVtbk5hbWUsXG4gICAgICAgIGluZGV4XG4gICAgICApXG4gICAgKTtcbiAgfVxuICBvblRvdGFsVmFsdWVDaGFuZ2VkKCk6IGFueSB7XG4gICAgaWYgKFxuICAgICAgISF0aGlzLmRhdGEgJiZcbiAgICAgICEhdGhpcy52aXNpYmxlVG90YWxSb3cgJiZcbiAgICAgICF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uICYmXG4gICAgICAhdGhpcy5pc1NldHQgJiZcbiAgICAgICF0aGlzLmlzUmVhZE9ubHlcbiAgICApIHtcbiAgICAgIHRoaXMuZGF0YS5zZXRWYWx1ZShcbiAgICAgICAgdGhpcy5nZXRWYWx1ZU5hbWUoKSArIHNldHRpbmdzLm1hdHJpeFRvdGFsVmFsdWVQb3N0Rml4LFxuICAgICAgICB0aGlzLnRvdGFsVmFsdWUsXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0UXVlc3Rpb25Gcm9tQXJyYXkobmFtZTogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogSVF1ZXN0aW9uIHtcbiAgICBpZiAoaW5kZXggPj0gdGhpcy52aXNpYmxlUm93cy5sZW5ndGgpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLnZpc2libGVSb3dzW2luZGV4XS5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lKTtcbiAgfVxuICBwcml2YXRlIGlzTWF0cml4VmFsdWVFbXB0eSh2YWw6IGFueSkge1xuICAgIGlmICghdmFsKSByZXR1cm47XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHRoaXMuaXNPYmplY3QodmFsW2ldKSAmJiBPYmplY3Qua2V5cyh2YWxbaV0pLmxlbmd0aCA+IDApXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3Qua2V5cyh2YWwpLmxlbmd0aCA9PSAwO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgU3VydmV5TW9kZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5IGFzIFN1cnZleU1vZGVsO1xuICB9XG4gIHB1YmxpYyBnZXRDZWxsVGVtcGxhdGVEYXRhKGNlbGw6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwpIHtcbiAgICAvLyByZXR1cm4gY2VsbC5jZWxsLmNvbHVtbi50ZW1wbGF0ZVF1ZXN0aW9uO1xuICAgIHJldHVybiB0aGlzLlN1cnZleU1vZGVsLmdldE1hdHJpeENlbGxUZW1wbGF0ZURhdGEoY2VsbCk7XG4gIH1cbiAgcHVibGljIGdldENlbGxXcmFwcGVyQ29tcG9uZW50TmFtZShjZWxsOiBNYXRyaXhEcm9wZG93bkNlbGwpIHtcbiAgICByZXR1cm4gdGhpcy5TdXJ2ZXlNb2RlbC5nZXRFbGVtZW50V3JhcHBlckNvbXBvbmVudE5hbWUoY2VsbCwgXCJjZWxsXCIpO1xuICB9XG4gIHB1YmxpYyBnZXRDZWxsV3JhcHBlckNvbXBvbmVudERhdGEoY2VsbDogTWF0cml4RHJvcGRvd25DZWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuU3VydmV5TW9kZWwuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnREYXRhKGNlbGwsIFwiY2VsbFwiKTtcbiAgfVxuICBwdWJsaWMgZ2V0Q29sdW1uSGVhZGVyV3JhcHBlckNvbXBvbmVudE5hbWUoY2VsbDogTWF0cml4RHJvcGRvd25DZWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuU3VydmV5TW9kZWwuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnROYW1lKFxuICAgICAgY2VsbCxcbiAgICAgIFwiY29sdW1uLWhlYWRlclwiXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0Q29sdW1uSGVhZGVyV3JhcHBlckNvbXBvbmVudERhdGEoY2VsbDogTWF0cml4RHJvcGRvd25DZWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuU3VydmV5TW9kZWwuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnREYXRhKFxuICAgICAgY2VsbCxcbiAgICAgIFwiY29sdW1uLWhlYWRlclwiXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0Um93SGVhZGVyV3JhcHBlckNvbXBvbmVudE5hbWUoY2VsbDogTWF0cml4RHJvcGRvd25DZWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuU3VydmV5TW9kZWwuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnROYW1lKGNlbGwsIFwicm93LWhlYWRlclwiKTtcbiAgfVxuICBwdWJsaWMgZ2V0Um93SGVhZGVyV3JhcHBlckNvbXBvbmVudERhdGEoY2VsbDogTWF0cml4RHJvcGRvd25DZWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuU3VydmV5TW9kZWwuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnREYXRhKGNlbGwsIFwicm93LWhlYWRlclwiKTtcbiAgfVxufVxuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcIm1hdHJpeGRyb3Bkb3duY29sdW1uXCIsXG4gIFtcbiAgICB7IG5hbWU6IFwiIW5hbWVcIiwgaXNVbmlxdWU6IHRydWUgfSxcbiAgICB7IG5hbWU6IFwidGl0bGVcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1RpdGxlXCIgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImNlbGxUeXBlXCIsXG4gICAgICBkZWZhdWx0OiBcImRlZmF1bHRcIixcbiAgICAgIGNob2ljZXM6ICgpID0+IHtcbiAgICAgICAgdmFyIHJlcyA9IE1hdHJpeERyb3Bkb3duQ29sdW1uLmdldENvbHVtblR5cGVzKCk7XG4gICAgICAgIHJlcy5zcGxpY2UoMCwgMCwgXCJkZWZhdWx0XCIpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHsgbmFtZTogXCJjb2xDb3VudFwiLCBkZWZhdWx0OiAtMSwgY2hvaWNlczogWy0xLCAwLCAxLCAyLCAzLCA0XSB9LFxuICAgIFwiaXNSZXF1aXJlZDpib29sZWFuXCIsXG4gICAgXCJpc1VuaXF1ZTpib29sZWFuXCIsXG4gICAge1xuICAgICAgbmFtZTogXCJyZXF1aXJlZEVycm9yVGV4dDp0ZXh0XCIsXG4gICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jUmVxdWlyZWRFcnJvclRleHRcIixcbiAgICB9LFxuICAgIFwicmVhZE9ubHk6Ym9vbGVhblwiLFxuICAgIFwibWluV2lkdGhcIixcbiAgICBcIndpZHRoXCIsXG4gICAgXCJ2aXNpYmxlSWY6Y29uZGl0aW9uXCIsXG4gICAgXCJlbmFibGVJZjpjb25kaXRpb25cIixcbiAgICBcInJlcXVpcmVkSWY6Y29uZGl0aW9uXCIsXG4gICAge1xuICAgICAgbmFtZTogXCJzaG93SW5NdWx0aXBsZUNvbHVtbnM6Ym9vbGVhblwiLFxuICAgICAgZGVwZW5kc09uOiBcImNlbGxUeXBlXCIsXG4gICAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uKG9iajogYW55KSB7XG4gICAgICAgIGlmICghb2JqKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBvYmouaXNTdXBwb3J0TXVsdGlwbGVDb2x1bW5zO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwidmFsaWRhdG9yczp2YWxpZGF0b3JzXCIsXG4gICAgICBiYXNlQ2xhc3NOYW1lOiBcInN1cnZleXZhbGlkYXRvclwiLFxuICAgICAgY2xhc3NOYW1lUGFydDogXCJ2YWxpZGF0b3JcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwidG90YWxUeXBlXCIsXG4gICAgICBkZWZhdWx0OiBcIm5vbmVcIixcbiAgICAgIGNob2ljZXM6IFtcIm5vbmVcIiwgXCJzdW1cIiwgXCJjb3VudFwiLCBcIm1pblwiLCBcIm1heFwiLCBcImF2Z1wiXSxcbiAgICB9LFxuICAgIFwidG90YWxFeHByZXNzaW9uOmV4cHJlc3Npb25cIixcbiAgICB7IG5hbWU6IFwidG90YWxGb3JtYXRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1RvdGFsRm9ybWF0XCIgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInRvdGFsRGlzcGxheVN0eWxlXCIsXG4gICAgICBkZWZhdWx0OiBcIm5vbmVcIixcbiAgICAgIGNob2ljZXM6IFtcIm5vbmVcIiwgXCJkZWNpbWFsXCIsIFwiY3VycmVuY3lcIiwgXCJwZXJjZW50XCJdLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJ0b3RhbEN1cnJlbmN5XCIsXG4gICAgICBjaG9pY2VzOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiBnZXRDdXJyZWN5Q29kZXMoKTtcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiBcIlVTRFwiLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcInRvdGFsTWF4aW11bUZyYWN0aW9uRGlnaXRzOm51bWJlclwiLCBkZWZhdWx0OiAtMSB9LFxuICAgIHsgbmFtZTogXCJ0b3RhbE1pbmltdW1GcmFjdGlvbkRpZ2l0czpudW1iZXJcIiwgZGVmYXVsdDogLTEgfSxcbiAgICB7IG5hbWU6IFwicmVuZGVyQXNcIiwgZGVmYXVsdDogXCJkZWZhdWx0XCIsIHZpc2libGU6IGZhbHNlIH0sXG4gIF0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgTWF0cml4RHJvcGRvd25Db2x1bW4oXCJcIik7XG4gIH1cbik7XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwibWF0cml4ZHJvcGRvd25iYXNlXCIsXG4gIFtcbiAgICB7XG4gICAgICBuYW1lOiBcImNvbHVtbnM6bWF0cml4ZHJvcGRvd25jb2x1bW5zXCIsXG4gICAgICBjbGFzc05hbWU6IFwibWF0cml4ZHJvcGRvd25jb2x1bW5cIixcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiY29sdW1uTGF5b3V0XCIsXG4gICAgICBhbHRlcm5hdGl2ZU5hbWU6IFwiY29sdW1uc0xvY2F0aW9uXCIsXG4gICAgICBkZWZhdWx0OiBcImhvcml6b250YWxcIixcbiAgICAgIGNob2ljZXM6IFtcImhvcml6b250YWxcIiwgXCJ2ZXJ0aWNhbFwiXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiZGV0YWlsRWxlbWVudHNcIixcbiAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgaXNMaWdodFNlcmlhbGl6YWJsZTogZmFsc2UsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImRldGFpbFBhbmVsTW9kZVwiLFxuICAgICAgY2hvaWNlczogW1wibm9uZVwiLCBcInVuZGVyUm93XCIsIFwidW5kZXJSb3dTaW5nbGVcIl0sXG4gICAgICBkZWZhdWx0OiBcIm5vbmVcIixcbiAgICB9LFxuICAgIFwiaG9yaXpvbnRhbFNjcm9sbDpib29sZWFuXCIsXG4gICAge1xuICAgICAgbmFtZTogXCJjaG9pY2VzOml0ZW12YWx1ZVtdXCIsXG4gICAgfSxcbiAgICB7IG5hbWU6IFwib3B0aW9uc0NhcHRpb25cIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY09wdGlvbnNDYXB0aW9uXCIgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImtleUR1cGxpY2F0aW9uRXJyb3JcIixcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NLZXlEdXBsaWNhdGlvbkVycm9yXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImNlbGxUeXBlXCIsXG4gICAgICBkZWZhdWx0OiBcImRyb3Bkb3duXCIsXG4gICAgICBjaG9pY2VzOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiBNYXRyaXhEcm9wZG93bkNvbHVtbi5nZXRDb2x1bW5UeXBlcygpO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHsgbmFtZTogXCJjb2x1bW5Db2xDb3VudFwiLCBkZWZhdWx0OiAwLCBjaG9pY2VzOiBbMCwgMSwgMiwgMywgNF0gfSxcbiAgICBcImNvbHVtbk1pbldpZHRoXCIsXG4gIF0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZShcIlwiKTtcbiAgfSxcbiAgXCJtYXRyaXhiYXNlXCJcbik7XG4iLCJpbXBvcnQge1xuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLFxuICBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgSU1hdHJpeERyb3Bkb3duRGF0YSxcbiAgTWF0cml4RHJvcGRvd25Db2x1bW4sXG4gIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFRhYmxlLFxufSBmcm9tIFwiLi9xdWVzdGlvbl9tYXRyaXhkcm9wZG93bmJhc2VcIjtcbmltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcbmltcG9ydCB7IFN1cnZleUVycm9yIH0gZnJvbSBcIi4vc3VydmV5LWVycm9yXCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBNaW5Sb3dDb3VudEVycm9yIH0gZnJvbSBcIi4vZXJyb3JcIjtcbmltcG9ydCB7IElDb25kaXRpb25PYmplY3QgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgSGVscGVycyB9IGZyb20gXCIuL2hlbHBlcnNcIjtcbmltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcbmltcG9ydCB7IGNvbmZpcm1BY3Rpb24gfSBmcm9tIFwiLi91dGlscy91dGlsc1wiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuaW1wb3J0IFNvcnRhYmxlTGliIGZyb20gXCJzb3J0YWJsZWpzXCI7XG5pbXBvcnQgeyBBY3Rpb24sIElBY3Rpb24gfSBmcm9tIFwiLi9hY3Rpb25zL2FjdGlvblwiO1xuXG5jb25zdCBTb3J0YWJsZSA9IDxhbnk+U29ydGFibGVMaWI7XG5cbmV4cG9ydCBjbGFzcyBNYXRyaXhEeW5hbWljUm93TW9kZWwgZXh0ZW5kcyBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBpbmRleDogbnVtYmVyLCBkYXRhOiBJTWF0cml4RHJvcGRvd25EYXRhLCB2YWx1ZTogYW55KSB7XG4gICAgc3VwZXIoZGF0YSwgdmFsdWUpO1xuICAgIHRoaXMuYnVpbGRDZWxscyh2YWx1ZSk7XG4gIH1cbiAgcHVibGljIGdldCByb3dOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmlkO1xuICB9XG59XG5cbi8qKlxuICogQSBNb2RlbCBmb3IgYSBtYXRyaXggZHltYW5pYyBxdWVzdGlvbi4gWW91IG1heSB1c2UgYSBkcm9wZG93biwgY2hlY2tib3gsIHJhZGlvZ3JvdXAsIHRleHQgYW5kIGNvbW1lbnQgcXVlc3Rpb25zIGFzIGEgY2VsbCBlZGl0b3JzLlxuICogQW4gZW5kLXVzZXIgbWF5IGR5bmFtaWNhbGx5IGFkZC9yZW1vdmUgcm93cywgdW5saWtlIGluIG1hdHJpeCBkcm9wZG93biBxdWVzdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsIGV4dGVuZHMgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZVxuICBpbXBsZW1lbnRzIElNYXRyaXhEcm9wZG93bkRhdGEge1xuICBwdWJsaWMgb25HZXRWYWx1ZUZvck5ld1Jvd0NhbGxCYWNrOiAoXG4gICAgc2VuZGVyOiBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbFxuICApID0+IGFueTtcbiAgcHJpdmF0ZSByb3dDb3VudGVyID0gMDtcbiAgcHJpdmF0ZSBpbml0aWFsUm93Q291bnQ6IG51bWJlciA9IDI7XG4gIHByaXZhdGUgc2V0Um93Q291bnRWYWx1ZUZyb21EYXRhOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gICAgdm9pZCAoPExvY2FsaXphYmxlU3RyaW5nPihcbiAgICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJjb25maXJtRGVsZXRlVGV4dFwiLCB0aGlzKVxuICAgICkpO1xuICAgIHZhciBsb2NBZGRSb3dUZXh0ID0gdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcImFkZFJvd1RleHRcIiwgdGhpcyk7XG4gICAgbG9jQWRkUm93VGV4dC5vbkdldFRleHRDYWxsYmFjayA9ICh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgICAgcmV0dXJuICEhdGV4dCA/IHRleHQgOiB0aGlzLmRlZmF1bHRBZGRSb3dUZXh0O1xuICAgIH07XG4gICAgdmFyIGxvY1JlbW92ZVJvd1RleHQgPSB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwicmVtb3ZlUm93VGV4dFwiLCB0aGlzKTtcbiAgICBsb2NSZW1vdmVSb3dUZXh0Lm9uR2V0VGV4dENhbGxiYWNrID0gKHRleHQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gISF0ZXh0ID8gdGV4dCA6IHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJyZW1vdmVSb3dcIik7XG4gICAgfTtcbiAgICB2YXIgbG9jRW1wdHlSb3dzVGV4dCA9IDxMb2NhbGl6YWJsZVN0cmluZz4oXG4gICAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwiZW1wdHlSb3dzVGV4dFwiLCB0aGlzKVxuICAgICk7XG4gICAgbG9jRW1wdHlSb3dzVGV4dC5vbkdldFRleHRDYWxsYmFjayA9ICh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgICAgcmV0dXJuICEhdGV4dCA/IHRleHQgOiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiZW1wdHlSb3dzVGV4dFwiKTtcbiAgICB9O1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydGllc1ZhbHVlQ2hhbmdlZChcbiAgICAgIFtcImhpZGVDb2x1bW5zSWZFbXB0eVwiLCBcImFsbG93QWRkUm93c1wiXSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVTaG93VGFibGVBbmRBZGRSb3coKTtcbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJhbGxvd1Jvd3NEcmFnQW5kRHJvcFwiLCAoKSA9PiB7XG4gICAgICB0aGlzLmNsZWFyUm93c0FuZFJlc2V0UmVuZGVyZWRUYWJsZSgpO1xuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwibWF0cml4ZHluYW1pY1wiO1xuICB9XG5cbiAgLy9jcm9zcyBmcmFtZXdvcmsgaW5pdGlhbGl6YXRpb25cbiAgcHVibGljIGFmdGVyUmVuZGVyUXVlc3Rpb25FbGVtZW50KGVsOiBIVE1MRWxlbWVudCkge1xuICAgIGlmICghIWVsICYmIHRoaXMuYWxsb3dSb3dzRHJhZ0FuZERyb3ApIHtcbiAgICAgIHRoaXMuaW5pdFNvcnRhYmxlKGVsLnF1ZXJ5U2VsZWN0b3IoXCJ0Ym9keVwiKSk7XG4gICAgfVxuICAgIHN1cGVyLmFmdGVyUmVuZGVyUXVlc3Rpb25FbGVtZW50KGVsKTtcbiAgfVxuICAvL2Nyb3NzIGZyYW1ld29yayBkZXN0cm95XG4gIHB1YmxpYyBiZWZvcmVEZXN0cm95UXVlc3Rpb25FbGVtZW50KGVsOiBIVE1MRWxlbWVudCkge1xuICAgIGlmICh0aGlzLnNvcnRhYmxlSW5zdCkgdGhpcy5zb3J0YWJsZUluc3QuZGVzdHJveSgpO1xuICAgIHN1cGVyLmJlZm9yZURlc3Ryb3lRdWVzdGlvbkVsZW1lbnQoZWwpO1xuICB9XG5cbiAgcHVibGljIGdldCBpc1Jvd3NEeW5hbWljKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgaXQgdG8gdHJ1ZSwgdG8gc2hvdyBhIGNvbmZpcm1hdGlvbiBkaWFsb2cgb24gcmVtb3ZpbmcgYSByb3dcbiAgICogQHNlZSBDb25maXJtRGVsZXRlVGV4dFxuICAgKi9cbiAgcHVibGljIGdldCBjb25maXJtRGVsZXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjb25maXJtRGVsZXRlXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNvbmZpcm1EZWxldGUodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY29uZmlybURlbGV0ZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgaXQgdG8gYSBjb2x1bW4gbmFtZSBhbmQgdGhlIGxpYnJhcnkgc2hvd3MgZHVwbGljYXRpb24gZXJyb3IsIGlmIHRoZXJlIGFyZSBzYW1lIHZhbHVlcyBpbiBkaWZmZXJlbnQgcm93cyBpbiB0aGUgY29sdW1uLlxuICAgKiBAc2VlIGtleUR1cGxpY2F0aW9uRXJyb3JcbiAgICovXG4gIHB1YmxpYyBnZXQga2V5TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJrZXlOYW1lXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQga2V5TmFtZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImtleU5hbWVcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogSWYgaXQgaXMgbm90IGVtcHR5LCB0aGVuIHRoaXMgdmFsdWUgaXMgc2V0IHRvIGV2ZXJ5IG5ldyByb3csIGluY2x1ZGluZyByb3dzIGNyZWF0ZWQgaW5pdGlhbGx5LCB1bmxlc3MgdGhlIGRlZmF1bHRWYWx1ZSBpcyBub3QgZW1wdHlcbiAgICogQHNlZSBkZWZhdWx0VmFsdWVcbiAgICogQHNlZSBkZWZhdWx0VmFsdWVGcm9tTGFzdFJvd1xuICAgKi9cbiAgcHVibGljIGdldCBkZWZhdWx0Um93VmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZGVmYXVsdFJvd1ZhbHVlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgZGVmYXVsdFJvd1ZhbHVlKHZhbDogYW55KSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZGVmYXVsdFJvd1ZhbHVlXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCBpdCB0byB0cnVlIHRvIGNvcHkgdGhlIHZhbHVlIGludG8gbmV3IGFkZGVkIHJvdyBmcm9tIHRoZSBsYXN0IHJvdy4gSWYgZGVmYXVsdFJvd1ZhbHVlIGlzIHNldCBhbmQgdGhpcyBwcm9wZXJ0eSBlcXVhbHMgdG8gdHJ1ZSxcbiAgICogdGhlbiB0aGUgdmFsdWUgZm9yIG5ldyBhZGRlZCByb3cgaXMgbWVyZ2luZy5cbiAgICogQHNlZSBkZWZhdWx0VmFsdWVcbiAgICogQHNlZSBkZWZhdWx0Um93VmFsdWVcbiAgICovXG4gIHB1YmxpYyBnZXQgZGVmYXVsdFZhbHVlRnJvbUxhc3RSb3coKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImRlZmF1bHRWYWx1ZUZyb21MYXN0Um93XCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGRlZmF1bHRWYWx1ZUZyb21MYXN0Um93KHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImRlZmF1bHRWYWx1ZUZyb21MYXN0Um93XCIsIHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIGlzRGVmYXVsdFZhbHVlRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHN1cGVyLmlzRGVmYXVsdFZhbHVlRW1wdHkoKSAmJiB0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLmRlZmF1bHRSb3dWYWx1ZSlcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCB2YWx1ZUZyb21EYXRhKHZhbDogYW55KTogYW55IHtcbiAgICBpZiAodGhpcy5taW5Sb3dDb3VudCA8IDEpIHJldHVybiBzdXBlci52YWx1ZUZyb21EYXRhKHZhbCk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbCkpIHZhbCA9IFtdO1xuICAgIGZvciAodmFyIGkgPSB2YWwubGVuZ3RoOyBpIDwgdGhpcy5taW5Sb3dDb3VudDsgaSsrKSB2YWwucHVzaCh7fSk7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0RGVmYXVsdFZhbHVlKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMuZGVmYXVsdFJvd1ZhbHVlKSB8fFxuICAgICAgIXRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMuZGVmYXVsdFZhbHVlKVxuICAgICkge1xuICAgICAgc3VwZXIuc2V0RGVmYXVsdFZhbHVlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5pc0VtcHR5KCkgfHwgdGhpcy5yb3dDb3VudCA9PSAwKSByZXR1cm47XG4gICAgdmFyIG5ld1ZhbHVlID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJvd0NvdW50OyBpKyspIHtcbiAgICAgIG5ld1ZhbHVlLnB1c2godGhpcy5kZWZhdWx0Um93VmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIG1vdmVSb3dCeUluZGV4ID0gKGZyb21JbmRleDogbnVtYmVyLCB0b0luZGV4OiBudW1iZXIpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuY3JlYXRlTmV3VmFsdWUoKTtcblxuICAgIGlmICghdmFsdWUpIHJldHVybjtcblxuICAgIGNvbnN0IG1vdmFibGVSb3cgPSB2YWx1ZVtmcm9tSW5kZXhdO1xuXG4gICAgaWYgKCFtb3ZhYmxlUm93KSByZXR1cm47XG5cbiAgICB2YWx1ZS5zcGxpY2UoZnJvbUluZGV4LCAxKTtcbiAgICB2YWx1ZS5zcGxpY2UodG9JbmRleCwgMCwgbW92YWJsZVJvdyk7XG5cbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH07XG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIHJvd3MgaW4gdGhlIG1hdHJpeC5cbiAgICogQHNlZSBtaW5Sb3dDb3VudFxuICAgKiBAc2VlIG1heFJvd0NvdW50XG4gICAqL1xuICBwdWJsaWMgZ2V0IHJvd0NvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucm93Q291bnRWYWx1ZTtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gdHJ1ZSwgdG8gYWxsb3cgcm93cyBkcmFnIGFuZCBkcm9wLlxuICAgKi9cbiAgcHVibGljIGdldCBhbGxvd1Jvd3NEcmFnQW5kRHJvcCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dSb3dzRHJhZ0FuZERyb3BcIik7XG4gIH1cbiAgcHVibGljIHNldCBhbGxvd1Jvd3NEcmFnQW5kRHJvcCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJhbGxvd1Jvd3NEcmFnQW5kRHJvcFwiLCB2YWwpO1xuICB9XG4gIHByaXZhdGUgaW5pdFNvcnRhYmxlKGRvbU5vZGU6IEhUTUxFbGVtZW50KSB7XG4gICAgaWYgKCFkb21Ob2RlKSByZXR1cm47XG4gICAgaWYgKHRoaXMuaXNSZWFkT25seSkgcmV0dXJuO1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIHNlbGYuZG9tTm9kZSA9IGRvbU5vZGU7XG5cbiAgICBzZWxmLnNvcnRhYmxlSW5zdCA9IG5ldyBTb3J0YWJsZShkb21Ob2RlLCB7XG4gICAgICBhbmltYXRpb246IDEwMCxcbiAgICAgIGZvcmNlRmFsbGJhY2s6IHRydWUsXG4gICAgICBkZWxheTogMjAwLFxuICAgICAgZGVsYXlPblRvdWNoT25seTogdHJ1ZSxcbiAgICAgIGhhbmRsZTogXCJ0clwiLFxuICAgICAgb25FbmQoZXZ0OiBhbnkpIHtcbiAgICAgICAgc2VsZi5tb3ZlUm93QnlJbmRleChldnQub2xkRHJhZ2dhYmxlSW5kZXgsIGV2dC5uZXdEcmFnZ2FibGVJbmRleCk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZVJlbmRlcmVkVGFibGUoKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25NYXRyaXhEeW5hbWljUmVuZGVyZWRUYWJsZSh0aGlzKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHJvd0NvdW50VmFsdWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicm93Q291bnRcIiwgMik7XG4gIH1cbiAgcHJpdmF0ZSBzZXQgcm93Q291bnRWYWx1ZSh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJvd0NvdW50XCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIHNldCByb3dDb3VudCh2YWw6IG51bWJlcikge1xuICAgIGlmICh2YWwgPCAwIHx8IHZhbCA+IHNldHRpbmdzLm1hdHJpeE1heGltdW1Sb3dDb3VudCkgcmV0dXJuO1xuICAgIHRoaXMuc2V0Um93Q291bnRWYWx1ZUZyb21EYXRhID0gZmFsc2U7XG4gICAgdmFyIHByZXZWYWx1ZSA9IHRoaXMucm93Q291bnRWYWx1ZTtcbiAgICB0aGlzLnJvd0NvdW50VmFsdWUgPSB2YWw7XG4gICAgaWYgKHRoaXMudmFsdWUgJiYgdGhpcy52YWx1ZS5sZW5ndGggPiB2YWwpIHtcbiAgICAgIHZhciBxVmFsID0gdGhpcy52YWx1ZTtcbiAgICAgIHFWYWwuc3BsaWNlKHZhbCk7XG4gICAgICB0aGlzLnZhbHVlID0gcVZhbDtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHtcbiAgICAgIHRoaXMuaW5pdGlhbFJvd0NvdW50ID0gdmFsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cyB8fCBwcmV2VmFsdWUgPT0gMCkge1xuICAgICAgaWYgKCF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKSB7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MgPSBbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3Muc3BsaWNlKHZhbCk7XG4gICAgICBmb3IgKHZhciBpID0gcHJldlZhbHVlOyBpIDwgdmFsOyBpKyspIHtcbiAgICAgICAgdmFyIG5ld1JvdyA9IHRoaXMuY3JlYXRlTWF0cml4Um93KHRoaXMuZ2V0VmFsdWVGb3JOZXdSb3coKSk7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MucHVzaChuZXdSb3cpO1xuICAgICAgICB0aGlzLm9uTWF0cml4Um93Q3JlYXRlZChuZXdSb3cpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm9uUm93c0NoYW5nZWQoKTtcbiAgfVxuICBwcml2YXRlIGdldFZhbHVlRm9yTmV3Um93KCk6IGFueSB7XG4gICAgdmFyIHJlcyA9IG51bGw7XG4gICAgaWYgKCEhdGhpcy5vbkdldFZhbHVlRm9yTmV3Um93Q2FsbEJhY2spIHtcbiAgICAgIHJlcyA9IHRoaXMub25HZXRWYWx1ZUZvck5ld1Jvd0NhbGxCYWNrKHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbWluaW11bSByb3cgY291bnQuIEEgdXNlciBjb3VsZCBub3QgZGVsZXRlIGEgcm93IGlmIHRoZSByb3dDb3VudCBlcXVhbHMgdG8gbWluUm93Q291bnRcbiAgICogQHNlZSByb3dDb3VudFxuICAgKiBAc2VlIG1heFJvd0NvdW50XG4gICAqIEBzZWUgYWxsb3dBZGRSb3dzXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1pblJvd0NvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1pblJvd0NvdW50XCIsIDApO1xuICB9XG4gIHB1YmxpYyBzZXQgbWluUm93Q291bnQodmFsOiBudW1iZXIpIHtcbiAgICBpZiAodmFsIDwgMCkgdmFsID0gMDtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtaW5Sb3dDb3VudFwiLCB2YWwpO1xuICAgIGlmICh2YWwgPiB0aGlzLm1heFJvd0NvdW50KSB0aGlzLm1heFJvd0NvdW50ID0gdmFsO1xuICAgIGlmICh0aGlzLnJvd0NvdW50IDwgdmFsKSB0aGlzLnJvd0NvdW50ID0gdmFsO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSByb3cgY291bnQuIEEgdXNlciBjb3VsZCBub3QgYWRkIGEgcm93IGlmIHRoZSByb3dDb3VudCBlcXVhbHMgdG8gbWF4Um93Q291bnRcbiAgICogQHNlZSByb3dDb3VudFxuICAgKiBAc2VlIG1pblJvd0NvdW50XG4gICAqIEBzZWUgYWxsb3dBZGRSb3dzXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1heFJvd0NvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1heFJvd0NvdW50XCIsIHNldHRpbmdzLm1hdHJpeE1heGltdW1Sb3dDb3VudCk7XG4gIH1cbiAgcHVibGljIHNldCBtYXhSb3dDb3VudCh2YWw6IG51bWJlcikge1xuICAgIGlmICh2YWwgPD0gMCkgcmV0dXJuO1xuICAgIGlmICh2YWwgPiBzZXR0aW5ncy5tYXRyaXhNYXhpbXVtUm93Q291bnQpXG4gICAgICB2YWwgPSBzZXR0aW5ncy5tYXRyaXhNYXhpbXVtUm93Q291bnQ7XG4gICAgaWYgKHZhbCA9PSB0aGlzLm1heFJvd0NvdW50KSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWF4Um93Q291bnRcIiwgdmFsKTtcbiAgICBpZiAodmFsIDwgdGhpcy5taW5Sb3dDb3VudCkgdGhpcy5taW5Sb3dDb3VudCA9IHZhbDtcbiAgICBpZiAodGhpcy5yb3dDb3VudCA+IHZhbCkgdGhpcy5yb3dDb3VudCA9IHZhbDtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gZmFsc2UgdG8gZGlzYWJsZSBhYmlsaXR5IHRvIGFkZCBuZXcgcm93cy4gXCJBZGQgbmV3IFJvd1wiIGJ1dHRvbiBiZWNvbWVzIGludnNpYmxlIGluIFVJXG4gICAqIEBzZWUgY2FuQWRkUm93XG4gICAqIEBzZWUgYWxsb3dSZW1vdmVSb3dzXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFsbG93QWRkUm93cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dBZGRSb3dzXCIsIHRydWUpO1xuICB9XG4gIHB1YmxpYyBzZXQgYWxsb3dBZGRSb3dzKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImFsbG93QWRkUm93c1wiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBmYWxzZSB0byBkaXNhYmxlIGFiaWxpdHkgdG8gcmVtb3ZlIHJvd3MuIFwiUmVtb3ZlXCIgcm93IGJ1dHRvbnMgYmVjb21lIGludnNpYmxlIGluIFVJXG4gICAqIEBzZWUgY2FuUmVtb3ZlUm93c1xuICAgKiBAc2VlIGFsbG93QWRkUm93c1xuICAgKi9cbiAgcHVibGljIGdldCBhbGxvd1JlbW92ZVJvd3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImFsbG93UmVtb3ZlUm93c1wiLCB0cnVlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGFsbG93UmVtb3ZlUm93cyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJhbGxvd1JlbW92ZVJvd3NcIiwgdmFsKTtcbiAgICBpZiAoIXRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHtcbiAgICAgIHRoaXMucmVzZXRSZW5kZXJlZFRhYmxlKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUsIGlmIGEgbmV3IHJvdyBjYW4gYmUgYWRkZWQuXG4gICAqIEBzZWUgYWxsb3dBZGRSb3dzXG4gICAqIEBzZWUgbWF4Um93Q291bnRcbiAgICogQHNlZSBjYW5SZW1vdmVSb3dzXG4gICAqIEBzZWUgcm93Q291bnRcbiAgICovXG4gIHB1YmxpYyBnZXQgY2FuQWRkUm93KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmFsbG93QWRkUm93cyAmJiAhdGhpcy5pc1JlYWRPbmx5ICYmIHRoaXMucm93Q291bnQgPCB0aGlzLm1heFJvd0NvdW50XG4gICAgKTtcbiAgfVxuICBwdWJsaWMgY2FuUmVtb3ZlUm93c0NhbGxiYWNrOiAoYWxsb3c6IGJvb2xlYW4pID0+IGJvb2xlYW47XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUsIGlmIHJvdyBjYW4gYmUgcmVtb3ZlZC5cbiAgICogQHNlZSBtaW5Sb3dDb3VudFxuICAgKiBAc2VlIGNhbkFkZFJvd1xuICAgKiBAc2VlIHJvd0NvdW50XG4gICAqL1xuICBwdWJsaWMgZ2V0IGNhblJlbW92ZVJvd3MoKTogYm9vbGVhbiB7XG4gICAgdmFyIHJlcyA9XG4gICAgICB0aGlzLmFsbG93UmVtb3ZlUm93cyAmJlxuICAgICAgIXRoaXMuaXNSZWFkT25seSAmJlxuICAgICAgdGhpcy5yb3dDb3VudCA+IHRoaXMubWluUm93Q291bnQ7XG4gICAgcmV0dXJuICEhdGhpcy5jYW5SZW1vdmVSb3dzQ2FsbGJhY2sgPyB0aGlzLmNhblJlbW92ZVJvd3NDYWxsYmFjayhyZXMpIDogcmVzO1xuICB9XG4gIHB1YmxpYyBjYW5SZW1vdmVSb3cocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5tYXRyaXhBbGxvd1JlbW92ZVJvdyhcbiAgICAgIHRoaXMsXG4gICAgICAoPE1hdHJpeER5bmFtaWNSb3dNb2RlbD5yb3cpLmluZGV4LFxuICAgICAgcm93XG4gICAgKTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlcyBhbmQgYWRkIGEgbmV3IHJvdyBhbmQgZm9jdXMgdGhlIGNlbGwgaW4gdGhlIGZpcnN0IGNvbHVtbi5cbiAgICovXG4gIHB1YmxpYyBhZGRSb3dVSSgpIHtcbiAgICB2YXIgb2xkUm93Q291bnQgPSB0aGlzLnJvd0NvdW50O1xuICAgIHRoaXMuYWRkUm93KCk7XG4gICAgaWYgKG9sZFJvd0NvdW50ID09PSB0aGlzLnJvd0NvdW50KSByZXR1cm47XG4gICAgdmFyIHEgPSB0aGlzLmdldFF1ZXN0aW9uVG9Gb2N1c09uQWRkaW5nUm93KCk7XG4gICAgaWYgKCEhcSkge1xuICAgICAgcS5mb2N1cygpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGdldFF1ZXN0aW9uVG9Gb2N1c09uQWRkaW5nUm93KCk6IFF1ZXN0aW9uIHtcbiAgICB2YXIgcm93ID0gdGhpcy52aXNpYmxlUm93c1t0aGlzLnZpc2libGVSb3dzLmxlbmd0aCAtIDFdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93LmNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcSA9IHJvdy5jZWxsc1tpXS5xdWVzdGlvbjtcbiAgICAgIGlmICghIXEgJiYgcS5pc1Zpc2libGUgJiYgIXEuaXNSZWFkT25seSkge1xuICAgICAgICByZXR1cm4gcTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW5kIGFkZCBhIG5ldyByb3cuXG4gICAqL1xuICBwdWJsaWMgYWRkUm93KCkge1xuICAgIHZhciBvcHRpb25zID0geyBxdWVzdGlvbjogdGhpcywgY2FuQWRkUm93OiB0aGlzLmNhbkFkZFJvdyB9O1xuICAgIGlmICghIXRoaXMuc3VydmV5KSB7XG4gICAgICB0aGlzLnN1cnZleS5tYXRyaXhCZWZvcmVSb3dBZGRlZChvcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKCFvcHRpb25zLmNhbkFkZFJvdykgcmV0dXJuO1xuICAgIHRoaXMub25TdGFydFJvd0FkZGluZ1JlbW92aW5nKCk7XG4gICAgdGhpcy5hZGRSb3dDb3JlKCk7XG4gICAgdGhpcy5vbkVuZFJvd0FkZGluZygpO1xuICAgIGlmICh0aGlzLmRldGFpbFBhbmVsU2hvd09uQWRkaW5nICYmIHRoaXMudmlzaWJsZVJvd3MubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy52aXNpYmxlUm93c1t0aGlzLnZpc2libGVSb3dzLmxlbmd0aCAtIDFdLnNob3dEZXRhaWxQYW5lbCgpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gdHJ1ZSB0byBzaG93IGRldGFpbCBwYW5lbCBpbW1lZGlhdGVseSBvbiBhZGRpbmcgYSBuZXcgcm93LlxuICAgKiBAc2VlIGRldGFpbFBhbmVsTW9kZVxuICAgKi9cbiAgcHVibGljIGdldCBkZXRhaWxQYW5lbFNob3dPbkFkZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZGV0YWlsUGFuZWxTaG93T25BZGRpbmdcIik7XG4gIH1cbiAgcHVibGljIHNldCBkZXRhaWxQYW5lbFNob3dPbkFkZGluZyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJkZXRhaWxQYW5lbFNob3dPbkFkZGluZ1wiLCB2YWwpO1xuICB9XG4gIHByb3RlY3RlZCBoYXNSb3dzQXNJdGVtcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIHVuYmluZFZhbHVlKCkge1xuICAgIHRoaXMuY2xlYXJHZW5lcmF0ZWRSb3dzKCk7XG4gICAgdGhpcy5jbGVhclByb3BlcnR5VmFsdWUoXCJ2YWx1ZVwiKTtcbiAgICB0aGlzLnJvd0NvdW50VmFsdWUgPSAwO1xuICAgIHN1cGVyLnVuYmluZFZhbHVlKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGlzVmFsdWVTdXJ2ZXlFbGVtZW50KHZhbDogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNFZGl0aW5nU3VydmV5RWxlbWVudCB8fCBzdXBlci5pc1ZhbHVlU3VydmV5RWxlbWVudCh2YWwpO1xuICB9XG4gIHByaXZhdGUgYWRkUm93Q29yZSgpIHtcbiAgICB2YXIgcHJldlJvd0NvdW50ID0gdGhpcy5yb3dDb3VudDtcbiAgICB0aGlzLnJvd0NvdW50ID0gdGhpcy5yb3dDb3VudCArIDE7XG4gICAgdmFyIGRlZmF1bHRWYWx1ZSA9IHRoaXMuZ2V0RGVmYXVsdFJvd1ZhbHVlKHRydWUpO1xuICAgIHZhciBuZXdWYWx1ZSA9IG51bGw7XG4gICAgaWYgKCF0aGlzLmlzVmFsdWVFbXB0eShkZWZhdWx0VmFsdWUpKSB7XG4gICAgICBuZXdWYWx1ZSA9IHRoaXMuY3JlYXRlTmV3VmFsdWUoKTtcbiAgICAgIGlmIChuZXdWYWx1ZS5sZW5ndGggPT0gdGhpcy5yb3dDb3VudCkge1xuICAgICAgICBuZXdWYWx1ZVtuZXdWYWx1ZS5sZW5ndGggLSAxXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhKSB7XG4gICAgICB0aGlzLnJ1bkNlbGxzQ29uZGl0aW9uKFxuICAgICAgICB0aGlzLmdldERhdGFGaWx0ZXJlZFZhbHVlcygpLFxuICAgICAgICB0aGlzLmdldERhdGFGaWx0ZXJlZFByb3BlcnRpZXMoKVxuICAgICAgKTtcbiAgICAgIHZhciByb3cgPSB0aGlzLnZpc2libGVSb3dzW3RoaXMucm93Q291bnQgLSAxXTtcbiAgICAgIGlmICghdGhpcy5pc1ZhbHVlRW1wdHkocm93LnZhbHVlKSkge1xuICAgICAgICBpZiAoIW5ld1ZhbHVlKSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSB0aGlzLmNyZWF0ZU5ld1ZhbHVlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICF0aGlzLmlzVmFsdWVTdXJ2ZXlFbGVtZW50KG5ld1ZhbHVlKSAmJlxuICAgICAgICAgICFIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMobmV3VmFsdWVbbmV3VmFsdWUubGVuZ3RoIC0gMV0sIHJvdy52YWx1ZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgbmV3VmFsdWVbbmV3VmFsdWUubGVuZ3RoIC0gMV0gPSByb3cudmFsdWU7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgaWYgKHByZXZSb3dDb3VudCArIDEgPT0gdGhpcy5yb3dDb3VudCkge1xuICAgICAgICB0aGlzLnN1cnZleS5tYXRyaXhSb3dBZGRlZChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHRoaXMudmlzaWJsZVJvd3NbdGhpcy52aXNpYmxlUm93cy5sZW5ndGggLSAxXVxuICAgICAgICApO1xuICAgICAgICB0aGlzLm9uUm93c0NoYW5nZWQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBnZXREZWZhdWx0Um93VmFsdWUoaXNSb3dBZGRlZDogYm9vbGVhbik6IGFueSB7XG4gICAgdmFyIHJlcyA9IG51bGw7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxID0gdGhpcy5jb2x1bW5zW2ldLnRlbXBsYXRlUXVlc3Rpb247XG4gICAgICBpZiAoISFxICYmICF0aGlzLmlzVmFsdWVFbXB0eShxLmdldERlZmF1bHRWYWx1ZSgpKSkge1xuICAgICAgICByZXMgPSByZXMgfHwge307XG4gICAgICAgICg8YW55PnJlcylbdGhpcy5jb2x1bW5zW2ldLm5hbWVdID0gcS5nZXREZWZhdWx0VmFsdWUoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLmRlZmF1bHRSb3dWYWx1ZSkpIHtcbiAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmRlZmF1bHRSb3dWYWx1ZSkge1xuICAgICAgICByZXMgPSByZXMgfHwge307XG4gICAgICAgICg8YW55PnJlcylba2V5XSA9IHRoaXMuZGVmYXVsdFJvd1ZhbHVlW2tleV07XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpc1Jvd0FkZGVkICYmIHRoaXMuZGVmYXVsdFZhbHVlRnJvbUxhc3RSb3cpIHtcbiAgICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xuICAgICAgaWYgKCEhdmFsICYmIEFycmF5LmlzQXJyYXkodmFsKSAmJiB2YWwubGVuZ3RoID49IHRoaXMucm93Q291bnQgLSAxKSB7XG4gICAgICAgIHZhciByb3dWYWx1ZSA9IHZhbFt0aGlzLnJvd0NvdW50IC0gMl07XG4gICAgICAgIGZvciAodmFyIGtleSBpbiByb3dWYWx1ZSkge1xuICAgICAgICAgIHJlcyA9IHJlcyB8fCB7fTtcbiAgICAgICAgICAoPGFueT5yZXMpW2tleV0gPSByb3dWYWx1ZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSByb3cgYnkgaXQncyBpbmRleC4gSWYgY29uZmlybURlbGV0ZSBpcyB0cnVlLCBzaG93IGEgY29uZmlybWF0aW9uIGRpYWxvZ1xuICAgKiBAcGFyYW0gaW5kZXggYSByb3cgaW5kZXgsIGZyb20gMCB0byByb3dDb3VudCAtIDFcbiAgICogQHNlZSByZW1vdmVSb3dcbiAgICogQHNlZSBjb25maXJtRGVsZXRlXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlUm93VUkodmFsdWU6IGFueSkge1xuICAgIGlmICghIXZhbHVlICYmICEhdmFsdWUucm93TmFtZSkge1xuICAgICAgdmFyIGluZGV4ID0gdGhpcy52aXNpYmxlUm93cy5pbmRleE9mKHZhbHVlKTtcbiAgICAgIGlmIChpbmRleCA8IDApIHJldHVybjtcbiAgICAgIHZhbHVlID0gaW5kZXg7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICF0aGlzLmlzUmVxdWlyZUNvbmZpcm1PblJvd0RlbGV0ZSh2YWx1ZSkgfHxcbiAgICAgIGNvbmZpcm1BY3Rpb24odGhpcy5jb25maXJtRGVsZXRlVGV4dClcbiAgICApIHtcbiAgICAgIHRoaXMucmVtb3ZlUm93KHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGlzUmVxdWlyZUNvbmZpcm1PblJvd0RlbGV0ZShpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmNvbmZpcm1EZWxldGUpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMucm93Q291bnQpIHJldHVybiBmYWxzZTtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLmNyZWF0ZU5ld1ZhbHVlKCk7XG4gICAgaWYgKHRoaXMuaXNWYWx1ZUVtcHR5KHZhbHVlKSB8fCAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoaW5kZXggPj0gdmFsdWUubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICF0aGlzLmlzVmFsdWVFbXB0eSh2YWx1ZVtpbmRleF0pO1xuICB9XG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgcm93IGJ5IGl0J3MgaW5kZXguXG4gICAqIEBwYXJhbSBpbmRleCBhIHJvdyBpbmRleCwgZnJvbSAwIHRvIHJvd0NvdW50IC0gMVxuICAgKi9cbiAgcHVibGljIHJlbW92ZVJvdyhpbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKCF0aGlzLmNhblJlbW92ZVJvd3MpIHJldHVybjtcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMucm93Q291bnQpIHJldHVybjtcbiAgICB2YXIgcm93ID1cbiAgICAgICEhdGhpcy52aXNpYmxlUm93cyAmJiBpbmRleCA8IHRoaXMudmlzaWJsZVJvd3MubGVuZ3RoXG4gICAgICAgID8gdGhpcy52aXNpYmxlUm93c1tpbmRleF1cbiAgICAgICAgOiBudWxsO1xuICAgIGlmIChcbiAgICAgICEhcm93ICYmXG4gICAgICAhIXRoaXMuc3VydmV5ICYmXG4gICAgICAhdGhpcy5zdXJ2ZXkubWF0cml4Um93UmVtb3ZpbmcodGhpcywgaW5kZXgsIHJvdylcbiAgICApXG4gICAgICByZXR1cm47XG4gICAgdGhpcy5vblN0YXJ0Um93QWRkaW5nUmVtb3ZpbmcoKTtcbiAgICB0aGlzLnJlbW92ZVJvd0NvcmUoaW5kZXgpO1xuICAgIHRoaXMub25FbmRSb3dSZW1vdmluZyhyb3cpO1xuICB9XG4gIHByaXZhdGUgcmVtb3ZlUm93Q29yZShpbmRleDogbnVtYmVyKSB7XG4gICAgdmFyIHJvdyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3NcbiAgICAgID8gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1tpbmRleF1cbiAgICAgIDogbnVsbDtcbiAgICBpZiAodGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cyAmJiBpbmRleCA8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoKSB7XG4gICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICAgIHRoaXMucm93Q291bnRWYWx1ZS0tO1xuICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICB2YXIgdmFsID0gW107XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSAmJiBpbmRleCA8IHRoaXMudmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIHZhbCA9IHRoaXMuY3JlYXRlVmFsdWVDb3B5KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWwgPSB0aGlzLmNyZWF0ZU5ld1ZhbHVlKCk7XG4gICAgICB9XG4gICAgICB2YWwuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIHZhbCA9IHRoaXMuZGVsZXRlUm93VmFsdWUodmFsLCBudWxsKTtcbiAgICAgIHRoaXMuaXNSb3dDaGFuZ2luZyA9IHRydWU7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsO1xuICAgICAgdGhpcy5pc1Jvd0NoYW5naW5nID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMub25Sb3dzQ2hhbmdlZCgpO1xuICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgdGhpcy5zdXJ2ZXkubWF0cml4Um93UmVtb3ZlZCh0aGlzLCBpbmRleCwgcm93KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCB0ZXh0IHNob3dpbmcgaW4gdGhlIGNvbmZpcm1hdGlvbiBkZWxldGUgZGlhbG9nIG9uIHJlbW92aW5nIGEgcm93LlxuICAgKi9cbiAgcHVibGljIGdldCBjb25maXJtRGVsZXRlVGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXG4gICAgICBcImNvbmZpcm1EZWxldGVUZXh0XCIsXG4gICAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiY29uZmlybURlbGV0ZVwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBjb25maXJtRGVsZXRlVGV4dCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiY29uZmlybURlbGV0ZVRleHRcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jQ29uZmlybURlbGV0ZVRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJjb25maXJtRGVsZXRlVGV4dFwiKTtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGFkZCByb3cgYnV0dG9uIHRleHQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFkZFJvd1RleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiYWRkUm93VGV4dFwiLCB0aGlzLmRlZmF1bHRBZGRSb3dUZXh0KTtcbiAgfVxuICBwdWJsaWMgc2V0IGFkZFJvd1RleHQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImFkZFJvd1RleHRcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jQWRkUm93VGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImFkZFJvd1RleHRcIik7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgZGVmYXVsdEFkZFJvd1RleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcbiAgICAgIHRoaXMuaXNDb2x1bW5MYXlvdXRIb3Jpem9udGFsID8gXCJhZGRSb3dcIiA6IFwiYWRkQ29sdW1uXCJcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHRoZSAnQWRkIFJvdycgYnV0dG9uIGlzIHNob3duIG9uIGJvdHRvbSBpZiBjb2x1bW5MYXlvdXQgaXMgaG9yaXpvbnRhbCBhbmQgb24gdG9wIGlmIGNvbHVtbkxheW91dCBpcyB2ZXJ0aWNhbC4gPGJyLz5cbiAgICogWW91IG1heSBzZXQgaXQgdG8gXCJ0b3BcIiwgXCJib3R0b21cIiBvciBcInRvcEJvdHRvbVwiICh0byBzaG93IG9uIHRvcCBhbmQgYm90dG9tKS5cbiAgICogQHNlZSBjb2x1bW5MYXlvdXRcbiAgICovXG4gIHB1YmxpYyBnZXQgYWRkUm93TG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiYWRkUm93TG9jYXRpb25cIik7XG4gIH1cbiAgcHVibGljIHNldCBhZGRSb3dMb2NhdGlvbih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImFkZFJvd0xvY2F0aW9uXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldEFkZFJvd0xvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkUm93TG9jYXRpb247XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIHRydWUgdG8gaGlkZSBtYXRyaXggY29sdW1ucyB3aGVuIHRoZXJlIGlzIG5vIGFueSByb3cuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGhpZGVDb2x1bW5zSWZFbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaGlkZUNvbHVtbnNJZkVtcHR5XCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgaGlkZUNvbHVtbnNJZkVtcHR5KHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImhpZGVDb2x1bW5zSWZFbXB0eVwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXRTaG93Q29sdW1uc0lmRW1wdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGlkZUNvbHVtbnNJZkVtcHR5O1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgdmFsdWUgb2YgcmVtb3ZlIHJvdyBidXR0b24gdGV4dC5cbiAgICovXG4gIHB1YmxpYyBnZXQgcmVtb3ZlUm93VGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXG4gICAgICBcInJlbW92ZVJvd1RleHRcIixcbiAgICAgIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJyZW1vdmVSb3dcIilcbiAgICApO1xuICB9XG4gIHB1YmxpYyBzZXQgcmVtb3ZlUm93VGV4dCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwicmVtb3ZlUm93VGV4dFwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NSZW1vdmVSb3dUZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwicmVtb3ZlUm93VGV4dFwiKTtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHJlbW92ZSByb3cgYnV0dG9uIHRleHQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGVtcHR5Um93c1RleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgICAgXCJlbXB0eVJvd3NUZXh0XCIsXG4gICAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiZW1wdHlSb3dzVGV4dFwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBlbXB0eVJvd3NUZXh0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJlbXB0eVJvd3NUZXh0XCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY0VtcHR5Um93c1RleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJlbXB0eVJvd3NUZXh0XCIpO1xuICB9XG4gIHByb3RlY3RlZCBnZXREaXNwbGF5VmFsdWVDb3JlKGtleXNBc1RleHQ6IGJvb2xlYW4sIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGlmICghdmFsdWUgfHwgIUFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgdmFyIHZhbHVlcyA9IHRoaXMuZ2V0VW5iaW5kVmFsdWUodmFsdWUpO1xuICAgIHZhciByb3dzID0gdGhpcy52aXNpYmxlUm93cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoICYmIGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2YWwgPSB2YWx1ZXNbaV07XG4gICAgICBpZiAoIXZhbCkgY29udGludWU7XG4gICAgICB2YWx1ZXNbaV0gPSB0aGlzLmdldFJvd0Rpc3BsYXlWYWx1ZShrZXlzQXNUZXh0LCByb3dzW2ldLCB2YWwpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9XG4gIHB1YmxpYyBhZGRDb25kaXRpb25PYmplY3RzQnlDb250ZXh0KFxuICAgIG9iamVjdHM6IEFycmF5PElDb25kaXRpb25PYmplY3Q+LFxuICAgIGNvbnRleHQ6IGFueVxuICApIHtcbiAgICB2YXIgaGFzQ29udGV4dCA9ICEhY29udGV4dCA/IHRoaXMuY29sdW1ucy5pbmRleE9mKGNvbnRleHQpID4gLTEgOiBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNvbHVtbiA9IHRoaXMuY29sdW1uc1tpXTtcbiAgICAgIHRoaXMuYWRkQ29sdW1uSW50b2FkZENvbmRpdGlvbk9iamVjdHNCeUNvbnRleHQob2JqZWN0cywgMCwgY29sdW1uKTtcbiAgICAgIGlmIChoYXNDb250ZXh0ICYmIGNvbHVtbiAhPSBjb250ZXh0KSB7XG4gICAgICAgIHRoaXMuYWRkQ29sdW1uSW50b2FkZENvbmRpdGlvbk9iamVjdHNCeUNvbnRleHQob2JqZWN0cywgLTEsIGNvbHVtbik7XG4gICAgICB9XG4gICAgICBmb3IgKFxuICAgICAgICB2YXIgaiA9IDE7XG4gICAgICAgIGogPCBNYXRoLm1pbihzZXR0aW5ncy5tYXRyaXhNYXhSb3dDb3VudEluQ29uZGl0aW9uLCB0aGlzLnJvd0NvdW50KTtcbiAgICAgICAgaisrXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5hZGRDb2x1bW5JbnRvYWRkQ29uZGl0aW9uT2JqZWN0c0J5Q29udGV4dChvYmplY3RzLCBqLCBjb2x1bW4pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIGFkZENvbHVtbkludG9hZGRDb25kaXRpb25PYmplY3RzQnlDb250ZXh0KFxuICAgIG9iamVjdHM6IEFycmF5PElDb25kaXRpb25PYmplY3Q+LFxuICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtblxuICApIHtcbiAgICB2YXIgcm93TmFtZSA9IHJvd0luZGV4ID4gLTEgPyBcIltcIiArIHJvd0luZGV4LnRvU3RyaW5nKCkgKyBcIl0uXCIgOiBcInJvdy5cIjtcbiAgICBvYmplY3RzLnB1c2goe1xuICAgICAgbmFtZTpcbiAgICAgICAgKHJvd0luZGV4ID4gLTEgPyB0aGlzLmdldFZhbHVlTmFtZSgpICsgcm93TmFtZSA6IHJvd05hbWUpICsgY29sdW1uLm5hbWUsXG4gICAgICB0ZXh0OlxuICAgICAgICAocm93SW5kZXggPiAtMSA/IHRoaXMucHJvY2Vzc2VkVGl0bGUgKyByb3dOYW1lIDogcm93TmFtZSkgK1xuICAgICAgICBjb2x1bW4uZnVsbFRpdGxlLFxuICAgICAgcXVlc3Rpb246IHRoaXMsXG4gICAgfSk7XG4gIH1cbiAgcHVibGljIHN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc1Jvd1RleHQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHByb3RlY3RlZCBvbkNoZWNrRm9yRXJyb3JzKFxuICAgIGVycm9yczogQXJyYXk8U3VydmV5RXJyb3I+LFxuICAgIGlzT25WYWx1ZUNoYW5nZWQ6IGJvb2xlYW5cbiAgKSB7XG4gICAgc3VwZXIub25DaGVja0ZvckVycm9ycyhlcnJvcnMsIGlzT25WYWx1ZUNoYW5nZWQpO1xuICAgIGlmICghaXNPblZhbHVlQ2hhbmdlZCAmJiB0aGlzLmhhc0Vycm9ySW5NaW5Sb3dzKCkpIHtcbiAgICAgIGVycm9ycy5wdXNoKG5ldyBNaW5Sb3dDb3VudEVycm9yKHRoaXMubWluUm93Q291bnQsIHRoaXMpKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBoYXNFcnJvckluTWluUm93cygpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5taW5Sb3dDb3VudCA8PSAwIHx8ICF0aGlzLmlzUmVxdWlyZWQgfHwgIXRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHNldFJvd0NvdW50ID0gMDtcbiAgICBmb3IgKFxuICAgICAgdmFyIHJvd0luZGV4ID0gMDtcbiAgICAgIHJvd0luZGV4IDwgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5sZW5ndGg7XG4gICAgICByb3dJbmRleCsrXG4gICAgKSB7XG4gICAgICB2YXIgcm93ID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1tyb3dJbmRleF07XG4gICAgICBpZiAoIXJvdy5pc0VtcHR5KSBzZXRSb3dDb3VudCsrO1xuICAgIH1cbiAgICByZXR1cm4gc2V0Um93Q291bnQgPCB0aGlzLm1pblJvd0NvdW50O1xuICB9XG4gIHByb3RlY3RlZCBnZXRVbmlxdWVDb2x1bW5zKCk6IEFycmF5PE1hdHJpeERyb3Bkb3duQ29sdW1uPiB7XG4gICAgdmFyIHJlcyA9IHN1cGVyLmdldFVuaXF1ZUNvbHVtbnMoKTtcbiAgICBpZiAoISF0aGlzLmtleU5hbWUpIHtcbiAgICAgIGxldCBjb2x1bW4gPSB0aGlzLmdldENvbHVtbkJ5TmFtZSh0aGlzLmtleU5hbWUpO1xuICAgICAgaWYgKCEhY29sdW1uICYmIHJlcy5pbmRleE9mKGNvbHVtbikgPCAwKSB7XG4gICAgICAgIHJlcy5wdXNoKGNvbHVtbik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJvdGVjdGVkIGdlbmVyYXRlUm93cygpOiBBcnJheTxNYXRyaXhEeW5hbWljUm93TW9kZWw+IHtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5PE1hdHJpeER5bmFtaWNSb3dNb2RlbD4oKTtcbiAgICBpZiAodGhpcy5yb3dDb3VudCA9PT0gMCkgcmV0dXJuIHJlc3VsdDtcbiAgICB2YXIgdmFsID0gdGhpcy5jcmVhdGVOZXdWYWx1ZSgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3dDb3VudDsgaSsrKSB7XG4gICAgICByZXN1bHQucHVzaCh0aGlzLmNyZWF0ZU1hdHJpeFJvdyh0aGlzLmdldFJvd1ZhbHVlQnlJbmRleCh2YWwsIGkpKSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc1ZhbHVlRW1wdHkodGhpcy5nZXREZWZhdWx0Um93VmFsdWUoZmFsc2UpKSkge1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTWF0cml4Um93KHZhbHVlOiBhbnkpOiBNYXRyaXhEeW5hbWljUm93TW9kZWwge1xuICAgIHJldHVybiBuZXcgTWF0cml4RHluYW1pY1Jvd01vZGVsKHRoaXMucm93Q291bnRlcisrLCB0aGlzLCB2YWx1ZSk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uQmVmb3JlVmFsdWVDaGFuZ2VkKHZhbDogYW55KSB7XG4gICAgaWYgKCF2YWwgfHwgIUFycmF5LmlzQXJyYXkodmFsKSkgcmV0dXJuO1xuICAgIHZhciBuZXdSb3dDb3VudCA9IHZhbC5sZW5ndGg7XG4gICAgaWYgKG5ld1Jvd0NvdW50ID09IHRoaXMucm93Q291bnQpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuc2V0Um93Q291bnRWYWx1ZUZyb21EYXRhICYmIG5ld1Jvd0NvdW50IDwgdGhpcy5pbml0aWFsUm93Q291bnQpXG4gICAgICByZXR1cm47XG4gICAgdGhpcy5zZXRSb3dDb3VudFZhbHVlRnJvbURhdGEgPSB0cnVlO1xuICAgIHRoaXMucm93Q291bnRWYWx1ZSA9IG5ld1Jvd0NvdW50O1xuICAgIGlmICh0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKSB7XG4gICAgICB0aGlzLmNsZWFyR2VuZXJhdGVkUm93cygpO1xuICAgICAgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cyA9IHRoaXMudmlzaWJsZVJvd3M7XG4gICAgICB0aGlzLm9uUm93c0NoYW5nZWQoKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZU5ld1ZhbHVlKCk6IGFueSB7XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMuY3JlYXRlVmFsdWVDb3B5KCk7XG4gICAgaWYgKCFyZXN1bHQgfHwgIUFycmF5LmlzQXJyYXkocmVzdWx0KSkgcmVzdWx0ID0gW107XG4gICAgaWYgKHJlc3VsdC5sZW5ndGggPiB0aGlzLnJvd0NvdW50KSByZXN1bHQuc3BsaWNlKHRoaXMucm93Q291bnQpO1xuICAgIHZhciByb3dWYWx1ZSA9IHRoaXMuZ2V0RGVmYXVsdFJvd1ZhbHVlKGZhbHNlKTtcbiAgICByb3dWYWx1ZSA9IHJvd1ZhbHVlIHx8IHt9O1xuICAgIGZvciAodmFyIGkgPSByZXN1bHQubGVuZ3RoOyBpIDwgdGhpcy5yb3dDb3VudDsgaSsrKSB7XG4gICAgICByZXN1bHQucHVzaCh0aGlzLmdldFVuYmluZFZhbHVlKHJvd1ZhbHVlKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHJvdGVjdGVkIGRlbGV0ZVJvd1ZhbHVlKFxuICAgIG5ld1ZhbHVlOiBhbnksXG4gICAgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZVxuICApOiBhbnkge1xuICAgIHZhciBpc0VtcHR5ID0gdHJ1ZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld1ZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5pc09iamVjdChuZXdWYWx1ZVtpXSkgJiYgT2JqZWN0LmtleXMobmV3VmFsdWVbaV0pLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaXNFbXB0eSA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGlzRW1wdHkgPyBudWxsIDogbmV3VmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGdldFJvd1ZhbHVlQnlJbmRleChxdWVzdGlvblZhbHVlOiBhbnksIGluZGV4OiBudW1iZXIpOiBhbnkge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHF1ZXN0aW9uVmFsdWUpICYmXG4gICAgICBpbmRleCA+PSAwICYmXG4gICAgICBpbmRleCA8IHF1ZXN0aW9uVmFsdWUubGVuZ3RoXG4gICAgICA/IHF1ZXN0aW9uVmFsdWVbaW5kZXhdXG4gICAgICA6IG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFJvd1ZhbHVlQ29yZShcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIHF1ZXN0aW9uVmFsdWU6IGFueSxcbiAgICBjcmVhdGU6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBhbnkge1xuICAgIGlmICghdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cykgcmV0dXJuIHt9O1xuICAgIHZhciByZXMgPSB0aGlzLmdldFJvd1ZhbHVlQnlJbmRleChcbiAgICAgIHF1ZXN0aW9uVmFsdWUsXG4gICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmluZGV4T2Yocm93KVxuICAgICk7XG4gICAgaWYgKCFyZXMgJiYgY3JlYXRlKSByZXMgPSB7fTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG59XG5cbmNsYXNzIFF1ZXN0aW9uTWF0cml4RHluYW1pY1JlbmRlcmVkVGFibGUgZXh0ZW5kcyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZSB7XG4gIHByb3RlY3RlZCBzZXREZWZhdWx0Um93QWN0aW9ucyhcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIGFjdGlvbnM6IEFycmF5PElBY3Rpb24+XG4gICkge1xuICAgIHN1cGVyLnNldERlZmF1bHRSb3dBY3Rpb25zKHJvdywgYWN0aW9ucyk7XG4gICAgaWYgKHRoaXMubWF0cml4LmFsbG93Um93c0RyYWdBbmREcm9wKSB7XG4gICAgICBhY3Rpb25zLnB1c2goXG4gICAgICAgIG5ldyBBY3Rpb24oe1xuICAgICAgICAgIGlkOiBcImRyYWctcm93XCIsXG4gICAgICAgICAgbG9jYXRpb246IFwic3RhcnRcIixcbiAgICAgICAgICBjb21wb25lbnQ6IFwic3YtbWF0cml4LWRyYWctZHJvcC1pY29uXCIsXG4gICAgICAgICAgZGF0YTogeyByb3c6IHJvdywgcXVlc3Rpb246IHRoaXMubWF0cml4IH0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcIm1hdHJpeGR5bmFtaWNcIixcbiAgW1xuICAgIHsgbmFtZTogXCJyb3dzVmlzaWJsZUlmOmNvbmRpdGlvblwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJhbGxvd0FkZFJvd3M6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgeyBuYW1lOiBcImFsbG93UmVtb3ZlUm93czpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSxcbiAgICB7IG5hbWU6IFwicm93Q291bnQ6bnVtYmVyXCIsIGRlZmF1bHQ6IDIsIG1pblZhbHVlOiAwLCBpc0JpbmRhYmxlOiB0cnVlIH0sXG4gICAgeyBuYW1lOiBcIm1pblJvd0NvdW50Om51bWJlclwiLCBkZWZhdWx0OiAwLCBtaW5WYWx1ZTogMCB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwibWF4Um93Q291bnQ6bnVtYmVyXCIsXG4gICAgICBkZWZhdWx0OiBzZXR0aW5ncy5tYXRyaXhNYXhpbXVtUm93Q291bnQsXG4gICAgfSxcbiAgICB7IG5hbWU6IFwia2V5TmFtZVwiIH0sXG4gICAgXCJkZWZhdWx0Um93VmFsdWU6cm93dmFsdWVcIixcbiAgICBcImRlZmF1bHRWYWx1ZUZyb21MYXN0Um93OmJvb2xlYW5cIixcbiAgICB7IG5hbWU6IFwiY29uZmlybURlbGV0ZTpib29sZWFuXCIgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImNvbmZpcm1EZWxldGVUZXh0XCIsXG4gICAgICBkZXBlbmRzT246IFwiY29uZmlybURlbGV0ZVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIW9iaiB8fCBvYmouY29uZmlybURlbGV0ZTtcbiAgICAgIH0sXG4gICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jQ29uZmlybURlbGV0ZVRleHRcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiYWRkUm93TG9jYXRpb25cIixcbiAgICAgIGRlZmF1bHQ6IFwiZGVmYXVsdFwiLFxuICAgICAgY2hvaWNlczogW1wiZGVmYXVsdFwiLCBcInRvcFwiLCBcImJvdHRvbVwiLCBcInRvcEJvdHRvbVwiXSxcbiAgICB9LFxuICAgIHsgbmFtZTogXCJhZGRSb3dUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NBZGRSb3dUZXh0XCIgfSxcbiAgICB7IG5hbWU6IFwicmVtb3ZlUm93VGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jUmVtb3ZlUm93VGV4dFwiIH0sXG4gICAgXCJoaWRlQ29sdW1uc0lmRW1wdHk6Ym9vbGVhblwiLFxuICAgIHtcbiAgICAgIG5hbWU6IFwiZW1wdHlSb3dzVGV4dDp0ZXh0XCIsXG4gICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jRW1wdHlSb3dzVGV4dFwiLFxuICAgICAgZGVwZW5kc09uOiBcImhpZGVDb2x1bW5zSWZFbXB0eVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIW9iaiB8fCBvYmouaGlkZUNvbHVtbnNJZkVtcHR5O1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiZGV0YWlsUGFuZWxTaG93T25BZGRpbmc6Ym9vbGVhblwiLFxuICAgICAgZGVwZW5kc09uOiBcImRldGFpbFBhbmVsTW9kZVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gb2JqLmRldGFpbFBhbmVsTW9kZSAhPT0gXCJub25lXCI7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJhbGxvd1Jvd3NEcmFnQW5kRHJvcFwiLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgaXNTZXJpYWxpemFibGU6IGZhbHNlLFxuICAgIH0sXG4gIF0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwoXCJcIik7XG4gIH0sXG4gIFwibWF0cml4ZHJvcGRvd25iYXNlXCJcbik7XG5cblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwibWF0cml4ZHluYW1pY1wiLCAobmFtZSkgPT4ge1xuICB2YXIgcSA9IG5ldyBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbChuYW1lKTtcbiAgcS5jaG9pY2VzID0gWzEsIDIsIDMsIDQsIDVdO1xuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLmFkZERlZmF1bHRDb2x1bW5zKHEpO1xuICByZXR1cm4gcTtcbn0pO1xuIiwiaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB7XG4gIElTdXJ2ZXlEYXRhLFxuICBJU3VydmV5SW1wbCxcbiAgSVN1cnZleSxcbiAgSVBhbmVsLFxuICBJRWxlbWVudCxcbiAgSVRleHRQcm9jZXNzb3IsXG4gIElQcm9ncmVzc0luZm8sXG59IGZyb20gXCIuL2Jhc2UtaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudCB9IGZyb20gXCIuL3N1cnZleS1lbGVtZW50XCI7XG5pbXBvcnQgeyBTdXJ2ZXlWYWxpZGF0b3IsIElWYWxpZGF0b3JPd25lciB9IGZyb20gXCIuL3ZhbGlkYXRvclwiO1xuaW1wb3J0IHsgUXVlc3Rpb24sIElDb25kaXRpb25PYmplY3QgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUXVlc3Rpb25UZXh0TW9kZWwgfSBmcm9tIFwiLi9xdWVzdGlvbl90ZXh0XCI7XG5pbXBvcnQgeyBKc29uT2JqZWN0LCBTZXJpYWxpemVyIH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlFcnJvciB9IGZyb20gXCIuL3N1cnZleS1lcnJvclwiO1xuaW1wb3J0IHsgSUxvY2FsaXphYmxlT3duZXIsIExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcbmltcG9ydCB7IEhlbHBlcnMgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU11bHRpcGxlVGV4dERhdGEgZXh0ZW5kcyBJTG9jYWxpemFibGVPd25lciwgSVBhbmVsIHtcbiAgZ2V0U3VydmV5KCk6IElTdXJ2ZXk7XG4gIGdldFRleHRQcm9jZXNzb3IoKTogSVRleHRQcm9jZXNzb3I7XG4gIGdldEFsbFZhbHVlcygpOiBhbnk7XG4gIGdldE11bHRpcGxlVGV4dFZhbHVlKG5hbWU6IHN0cmluZyk6IGFueTtcbiAgc2V0TXVsdGlwbGVUZXh0VmFsdWUobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55O1xuICBnZXRJdGVtRGVmYXVsdFZhbHVlKG5hbWU6IHN0cmluZyk6IGFueTtcbiAgZ2V0SXNSZXF1aXJlZFRleHQoKTogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgTXVsdGlwbGVUZXh0SXRlbU1vZGVsIGV4dGVuZHMgQmFzZVxuICBpbXBsZW1lbnRzIElWYWxpZGF0b3JPd25lciwgSVN1cnZleURhdGEsIElTdXJ2ZXlJbXBsIHtcbiAgcHJpdmF0ZSBlZGl0b3JWYWx1ZTogUXVlc3Rpb25UZXh0TW9kZWw7XG4gIHByaXZhdGUgZGF0YTogSU11bHRpcGxlVGV4dERhdGE7XG5cbiAgdmFsdWVDaGFuZ2VkQ2FsbGJhY2s6IChuZXdWYWx1ZTogYW55KSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IGFueSA9IG51bGwsIHRpdGxlOiBzdHJpbmcgPSBudWxsKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmVkaXRvclZhbHVlID0gdGhpcy5jcmVhdGVFZGl0b3IobmFtZSk7XG4gICAgdGhpcy5lZGl0b3IucXVlc3Rpb25UaXRsZVRlbXBsYXRlQ2FsbGJhY2sgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH07XG4gICAgdGhpcy5lZGl0b3IudGl0bGVMb2NhdGlvbiA9IFwibGVmdFwiO1xuICAgIGlmICh0aXRsZSkge1xuICAgICAgdGhpcy50aXRsZSA9IHRpdGxlO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIm11bHRpcGxldGV4dGl0ZW1cIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yLmlkO1xuICB9XG4gIHB1YmxpYyBnZXRPcmlnaW5hbE9iaigpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3I7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBpdGVtIG5hbWUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IubmFtZTtcbiAgfVxuICBwdWJsaWMgc2V0IG5hbWUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLmVkaXRvci5uYW1lID0gdmFsO1xuICB9XG4gIHB1YmxpYyBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb24ge1xuICAgIHJldHVybiA8UXVlc3Rpb24+KDxhbnk+dGhpcy5kYXRhKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGVkaXRvcigpOiBRdWVzdGlvblRleHRNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yVmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZUVkaXRvcihuYW1lOiBzdHJpbmcpOiBRdWVzdGlvblRleHRNb2RlbCB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvblRleHRNb2RlbChuYW1lKTtcbiAgfVxuICBwdWJsaWMgYWRkVXNlZExvY2FsZXMobG9jYWxlczogQXJyYXk8c3RyaW5nPikge1xuICAgIHN1cGVyLmFkZFVzZWRMb2NhbGVzKGxvY2FsZXMpO1xuICAgIHRoaXMuZWRpdG9yLmFkZFVzZWRMb2NhbGVzKGxvY2FsZXMpO1xuICB9XG4gIHB1YmxpYyBsb2NTdHJzQ2hhbmdlZCgpIHtcbiAgICBzdXBlci5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIHRoaXMuZWRpdG9yLmxvY1N0cnNDaGFuZ2VkKCk7XG4gIH1cbiAgc2V0RGF0YShkYXRhOiBJTXVsdGlwbGVUZXh0RGF0YSkge1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgaWYgKCEhZGF0YSkge1xuICAgICAgdGhpcy5lZGl0b3IuZGVmYXVsdFZhbHVlID0gZGF0YS5nZXRJdGVtRGVmYXVsdFZhbHVlKHRoaXMubmFtZSk7XG4gICAgICB0aGlzLmVkaXRvci5zZXRTdXJ2ZXlJbXBsKHRoaXMpO1xuICAgICAgdGhpcy5lZGl0b3IucGFyZW50ID0gZGF0YTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIHRydWUsIHRvIG1ha2UgdGhlIGl0ZW0gYSByZXF1aXJlZC4gSWYgYSB1c2VyIGRvZXNuJ3QgZmlsbCB0aGUgaXRlbSB0aGVuIGEgdmFsaWRhdGlvbiBlcnJvciB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXNSZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IuaXNSZXF1aXJlZDtcbiAgfVxuICBwdWJsaWMgc2V0IGlzUmVxdWlyZWQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5lZGl0b3IuaXNSZXF1aXJlZCA9IHZhbDtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IGlucHV0IHR5cGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlucHV0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmVkaXRvci5pbnB1dFR5cGU7XG4gIH1cbiAgcHVibGljIHNldCBpbnB1dFR5cGUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLmVkaXRvci5pbnB1dFR5cGUgPSB2YWw7XG4gIH1cbiAgLyoqXG4gICAqIEl0ZW0gdGl0bGUuIElmIGl0IGlzIGVtcHR5LCB0aGUgaXRlbSBuYW1lIGlzIHJlbmRlcmVkIGFzIHRpdGxlLiBUaGlzIHByb3BlcnR5IHN1cHBvcnRzIG1hcmtkb3duLlxuICAgKiBAc2VlIG5hbWVcbiAgICovXG4gIHB1YmxpYyBnZXQgdGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IudGl0bGU7XG4gIH1cbiAgcHVibGljIHNldCB0aXRsZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuZWRpdG9yLnRpdGxlID0gdmFsO1xuICB9XG4gIGdldCBsb2NUaXRsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IubG9jVGl0bGU7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHRleHQgb3IgaHRtbCBmb3IgcmVuZGVyaW5nIHRoZSB0aXRsZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgZnVsbFRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yLmZ1bGxUaXRsZTtcbiAgfVxuICAvKipcbiAgICogVGhlIG1heGltdW0gdGV4dCBsZW5ndGguIElmIGl0IGlzIC0xLCBkZWZhdWwgdmFsdWUsIHRoZW4gdGhlIHN1cnZleSBtYXhUZXh0TGVuZ3RoIHByb3BlcnR5IHdpbGwgYmUgdXNlZC5cbiAgICogSWYgaXQgaXMgMCwgdGhlbiB0aGUgdmFsdWUgaXMgdW5saW1pdGVkXG4gICAqIEBzZWUgU3VydmV5TW9kZWwubWF4VGV4dExlbmd0aFxuICAgKi9cbiAgcHVibGljIGdldCBtYXhMZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IubWF4TGVuZ3RoO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4TGVuZ3RoKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5lZGl0b3IubWF4TGVuZ3RoID0gdmFsO1xuICB9XG4gIHB1YmxpYyBnZXRNYXhMZW5ndGgoKTogYW55IHtcbiAgICB2YXIgc3VydmV5ID0gdGhpcy5nZXRTdXJ2ZXkoKTtcbiAgICByZXR1cm4gSGVscGVycy5nZXRNYXhMZW5ndGgoXG4gICAgICB0aGlzLm1heExlbmd0aCxcbiAgICAgIHN1cnZleSA/IHN1cnZleS5tYXhUZXh0TGVuZ3RoIDogLTFcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgaW5wdXQgcGxhY2UgaG9sZGVyLlxuICAgKi9cbiAgcHVibGljIGdldCBwbGFjZUhvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmVkaXRvci5wbGFjZUhvbGRlcjtcbiAgfVxuICBwdWJsaWMgc2V0IHBsYWNlSG9sZGVyKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5lZGl0b3IucGxhY2VIb2xkZXIgPSB2YWw7XG4gIH1cbiAgZ2V0IGxvY1BsYWNlSG9sZGVyKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IubG9jUGxhY2VIb2xkZXI7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBjdXN0b20gdGV4dCB0aGF0IHdpbGwgYmUgc2hvd24gb24gcmVxdWlyZWQgZXJyb3IuIFVzZSB0aGlzIHByb3BlcnR5LCBpZiB5b3UgZG8gbm90IHdhbnQgdG8gc2hvdyB0aGUgZGVmYXVsdCB0ZXh0LlxuICAgKi9cbiAgcHVibGljIGdldCByZXF1aXJlZEVycm9yVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmVkaXRvci5yZXF1aXJlZEVycm9yVGV4dDtcbiAgfVxuICBwdWJsaWMgc2V0IHJlcXVpcmVkRXJyb3JUZXh0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5lZGl0b3IucmVxdWlyZWRFcnJvclRleHQgPSB2YWw7XG4gIH1cbiAgZ2V0IGxvY1JlcXVpcmVkRXJyb3JUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IubG9jUmVxdWlyZWRFcnJvclRleHQ7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBpbnB1dCBzaXplLlxuICAgKi9cbiAgcHVibGljIGdldCBzaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yLnNpemU7XG4gIH1cbiAgcHVibGljIHNldCBzaXplKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5lZGl0b3Iuc2l6ZSA9IHZhbDtcbiAgfVxuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgcXVlc3Rpb24gdmFsaWRhdG9ycy5cbiAgICovXG4gIHB1YmxpYyBnZXQgdmFsaWRhdG9ycygpOiBBcnJheTxTdXJ2ZXlWYWxpZGF0b3I+IHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IudmFsaWRhdG9ycztcbiAgfVxuICBwdWJsaWMgc2V0IHZhbGlkYXRvcnModmFsOiBBcnJheTxTdXJ2ZXlWYWxpZGF0b3I+KSB7XG4gICAgdGhpcy5lZGl0b3IudmFsaWRhdG9ycyA9IHZhbDtcbiAgfVxuICBwdWJsaWMgZ2V0VmFsaWRhdG9ycygpOiBBcnJheTxTdXJ2ZXlWYWxpZGF0b3I+IHtcbiAgICByZXR1cm4gdGhpcy52YWxpZGF0b3JzO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgaXRlbSB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRNdWx0aXBsZVRleHRWYWx1ZSh0aGlzLm5hbWUpIDogbnVsbDtcbiAgfVxuICBwdWJsaWMgc2V0IHZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICBpZiAodGhpcy5kYXRhICE9IG51bGwpIHtcbiAgICAgIHRoaXMuZGF0YS5zZXRNdWx0aXBsZVRleHRWYWx1ZSh0aGlzLm5hbWUsIHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGlzRW1wdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yLmlzRW1wdHkoKTtcbiAgfVxuICBwdWJsaWMgb25WYWx1ZUNoYW5nZWQobmV3VmFsdWU6IGFueSkge1xuICAgIGlmICh0aGlzLnZhbHVlQ2hhbmdlZENhbGxiYWNrKSB0aGlzLnZhbHVlQ2hhbmdlZENhbGxiYWNrKG5ld1ZhbHVlKTtcbiAgfVxuICAvL0lTdXJ2ZXlJbXBsXG4gIGdldFN1cnZleURhdGEoKTogSVN1cnZleURhdGEge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGdldFN1cnZleSgpOiBJU3VydmV5IHtcbiAgICByZXR1cm4gdGhpcy5kYXRhID8gdGhpcy5kYXRhLmdldFN1cnZleSgpIDogbnVsbDtcbiAgfVxuICBnZXRUZXh0UHJvY2Vzc29yKCk6IElUZXh0UHJvY2Vzc29yIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhID8gdGhpcy5kYXRhLmdldFRleHRQcm9jZXNzb3IoKSA6IG51bGw7XG4gIH1cbiAgLy9JU3VydmV5RGF0YVxuICBnZXRWYWx1ZShuYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIGlmICghdGhpcy5kYXRhKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmdldE11bHRpcGxlVGV4dFZhbHVlKG5hbWUpO1xuICB9XG4gIHNldFZhbHVlKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgIHRoaXMuZGF0YS5zZXRNdWx0aXBsZVRleHRWYWx1ZShuYW1lLCB2YWx1ZSk7XG4gICAgfVxuICB9XG4gIGdldFZhcmlhYmxlKG5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBzZXRWYXJpYWJsZShuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpIHt9XG4gIGdldENvbW1lbnQobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBzZXRDb21tZW50KG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IHN0cmluZykge31cbiAgZ2V0QWxsVmFsdWVzKCk6IGFueSB7XG4gICAgaWYgKHRoaXMuZGF0YSkgcmV0dXJuIHRoaXMuZGF0YS5nZXRBbGxWYWx1ZXMoKTtcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgfVxuICBnZXRGaWx0ZXJlZFZhbHVlcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldEFsbFZhbHVlcygpO1xuICB9XG4gIGdldEZpbHRlcmVkUHJvcGVydGllcygpOiBhbnkge1xuICAgIHJldHVybiB7IHN1cnZleTogdGhpcy5nZXRTdXJ2ZXkoKSB9O1xuICB9XG4gIC8vSVZhbGlkYXRvck93bmVyXG4gIGdldFZhbGlkYXRvclRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGl0bGU7XG4gIH1cbiAgZ2V0IHZhbGlkYXRlZFZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gIH1cbiAgc2V0IHZhbGlkYXRlZFZhbHVlKHZhbDogYW55KSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbDtcbiAgfVxuICBnZXREYXRhRmlsdGVyZWRWYWx1ZXMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRGaWx0ZXJlZFZhbHVlcygpO1xuICB9XG4gIGdldERhdGFGaWx0ZXJlZFByb3BlcnRpZXMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRGaWx0ZXJlZFByb3BlcnRpZXMoKTtcbiAgfVxufVxuXG4vKipcbiAqIEEgTW9kZWwgZm9yIGEgbXVsdGlwbGUgdGV4dCBxdWVzdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwgZXh0ZW5kcyBRdWVzdGlvblxuICBpbXBsZW1lbnRzIElNdWx0aXBsZVRleHREYXRhLCBJUGFuZWwge1xuICBwdWJsaWMgc3RhdGljIGFkZERlZmF1bHRJdGVtcyhxdWVzdGlvbjogUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbCkge1xuICAgIHZhciBuYW1lcyA9IFF1ZXN0aW9uRmFjdG9yeS5EZWZhdWx0TXV0bGlwbGVUZXh0SXRlbXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykgcXVlc3Rpb24uYWRkSXRlbShuYW1lc1tpXSk7XG4gIH1cblxuICBjb2xDb3VudENoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gICAgdGhpcy5jcmVhdGVOZXdBcnJheShcIml0ZW1zXCIsIChpdGVtOiBhbnkpID0+IHtcbiAgICAgIGl0ZW0uc2V0RGF0YSh0aGlzKTtcbiAgICB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFwiaXRlbXNcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5jb2xDb3VudENoYW5nZWRDYWxsYmFjayk7XG4gICAgfSk7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcImNvbENvdW50XCIsICgpID0+IHtcbiAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMuY29sQ291bnRDaGFuZ2VkQ2FsbGJhY2spO1xuICAgIH0pO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJpdGVtU2l6ZVwiLCAoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZUl0ZW1zU2l6ZSgpO1xuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwibXVsdGlwbGV0ZXh0XCI7XG4gIH1cbiAgcHVibGljIHNldFN1cnZleUltcGwodmFsdWU6IElTdXJ2ZXlJbXBsKSB7XG4gICAgc3VwZXIuc2V0U3VydmV5SW1wbCh2YWx1ZSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLml0ZW1zW2ldLnNldERhdGEodGhpcyk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgaXNBbGxvd1RpdGxlTGVmdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGdldCBoYXNTaW5nbGVJbnB1dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgb25TdXJ2ZXlMb2FkKCkge1xuICAgIHRoaXMuZWRpdG9yc09uU3VydmV5TG9hZCgpO1xuICAgIHN1cGVyLm9uU3VydmV5TG9hZCgpO1xuICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMuY29sQ291bnRDaGFuZ2VkQ2FsbGJhY2spO1xuICB9XG4gIHNldFF1ZXN0aW9uVmFsdWUobmV3VmFsdWU6IGFueSwgdXBkYXRlSXNBbnN3ZXJlZDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBzdXBlci5zZXRRdWVzdGlvblZhbHVlKG5ld1ZhbHVlLCB1cGRhdGVJc0Fuc3dlcmVkKTtcbiAgICB0aGlzLnBlcmZvcm1Gb3JFdmVyeUVkaXRvcigoaXRlbTogTXVsdGlwbGVUZXh0SXRlbU1vZGVsKTogdm9pZCA9PiB7XG4gICAgICBpdGVtLmVkaXRvci51cGRhdGVWYWx1ZUZyb21TdXJ2ZXkoaXRlbS52YWx1ZSk7XG4gICAgfSk7XG4gICAgdGhpcy51cGRhdGVJc0Fuc3dlcmVkKCk7XG4gIH1cbiAgb25TdXJ2ZXlWYWx1ZUNoYW5nZWQobmV3VmFsdWU6IGFueSkge1xuICAgIHN1cGVyLm9uU3VydmV5VmFsdWVDaGFuZ2VkKG5ld1ZhbHVlKTtcbiAgICB0aGlzLnBlcmZvcm1Gb3JFdmVyeUVkaXRvcigoaXRlbTogTXVsdGlwbGVUZXh0SXRlbU1vZGVsKTogdm9pZCA9PiB7XG4gICAgICBpdGVtLmVkaXRvci5vblN1cnZleVZhbHVlQ2hhbmdlZChpdGVtLnZhbHVlKTtcbiAgICB9KTtcbiAgfVxuICBwcml2YXRlIHVwZGF0ZUl0ZW1zU2l6ZSgpIHtcbiAgICB0aGlzLnBlcmZvcm1Gb3JFdmVyeUVkaXRvcigoaXRlbTogTXVsdGlwbGVUZXh0SXRlbU1vZGVsKTogdm9pZCA9PiB7XG4gICAgICBpdGVtLmVkaXRvci51cGRhdGVJbnB1dFNpemUoKTtcbiAgICB9KTtcbiAgfVxuICBwcml2YXRlIGVkaXRvcnNPblN1cnZleUxvYWQoKSB7XG4gICAgdGhpcy5wZXJmb3JtRm9yRXZlcnlFZGl0b3IoKGl0ZW06IE11bHRpcGxlVGV4dEl0ZW1Nb2RlbCk6IHZvaWQgPT4ge1xuICAgICAgaXRlbS5lZGl0b3Iub25TdXJ2ZXlMb2FkKCk7XG4gICAgfSk7XG4gIH1cbiAgcHJpdmF0ZSBwZXJmb3JtRm9yRXZlcnlFZGl0b3IoZnVuYzogKGl0ZW06IE11bHRpcGxlVGV4dEl0ZW1Nb2RlbCkgPT4gdm9pZCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSB0aGlzLml0ZW1zW2ldO1xuICAgICAgaWYgKGl0ZW0uZWRpdG9yKSB7XG4gICAgICAgIGZ1bmMoaXRlbSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBpbnB1dCBpdGVtcy5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXRlbXMoKTogQXJyYXk8TXVsdGlwbGVUZXh0SXRlbU1vZGVsPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIml0ZW1zXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgaXRlbXModmFsOiBBcnJheTxNdWx0aXBsZVRleHRJdGVtTW9kZWw+KSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXRlbXNcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogQWRkIGEgbmV3IHRleHQgaXRlbS5cbiAgICogQHBhcmFtIG5hbWUgYSBpdGVtIG5hbWVcbiAgICogQHBhcmFtIHRpdGxlIGEgaXRlbSB0aXRsZSAob3B0aW9uYWwpXG4gICAqL1xuICBwdWJsaWMgYWRkSXRlbShuYW1lOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcgPSBudWxsKTogTXVsdGlwbGVUZXh0SXRlbU1vZGVsIHtcbiAgICB2YXIgaXRlbSA9IHRoaXMuY3JlYXRlVGV4dEl0ZW0obmFtZSwgdGl0bGUpO1xuICAgIHRoaXMuaXRlbXMucHVzaChpdGVtKTtcbiAgICByZXR1cm4gaXRlbTtcbiAgfVxuICBwdWJsaWMgZ2V0SXRlbUJ5TmFtZShuYW1lOiBzdHJpbmcpOiBNdWx0aXBsZVRleHRJdGVtTW9kZWwge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuaXRlbXNbaV0ubmFtZSA9PSBuYW1lKSByZXR1cm4gdGhpcy5pdGVtc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHVibGljIGFkZENvbmRpdGlvbk9iamVjdHNCeUNvbnRleHQoXG4gICAgb2JqZWN0czogQXJyYXk8SUNvbmRpdGlvbk9iamVjdD4sXG4gICAgY29udGV4dDogYW55XG4gICkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSB0aGlzLml0ZW1zW2ldO1xuICAgICAgb2JqZWN0cy5wdXNoKHtcbiAgICAgICAgbmFtZTogdGhpcy5nZXRWYWx1ZU5hbWUoKSArIFwiLlwiICsgaXRlbS5uYW1lLFxuICAgICAgICB0ZXh0OiB0aGlzLnByb2Nlc3NlZFRpdGxlICsgXCIuXCIgKyBpdGVtLmZ1bGxUaXRsZSxcbiAgICAgICAgcXVlc3Rpb246IHRoaXMsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldENvbmRpdGlvbkpzb24ob3BlcmF0b3I6IHN0cmluZyA9IG51bGwsIHBhdGg6IHN0cmluZyA9IG51bGwpOiBhbnkge1xuICAgIGlmICghcGF0aCkgcmV0dXJuIHN1cGVyLmdldENvbmRpdGlvbkpzb24oKTtcbiAgICB2YXIgaXRlbSA9IHRoaXMuZ2V0SXRlbUJ5TmFtZShwYXRoKTtcbiAgICBpZiAoIWl0ZW0pIHJldHVybiBudWxsO1xuICAgIHZhciBqc29uID0gbmV3IEpzb25PYmplY3QoKS50b0pzb25PYmplY3QoaXRlbSk7XG4gICAganNvbltcInR5cGVcIl0gPSBcInRleHRcIjtcbiAgICByZXR1cm4ganNvbjtcbiAgfVxuICBwdWJsaWMgbG9jU3Ryc0NoYW5nZWQoKSB7XG4gICAgc3VwZXIubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuaXRlbXNbaV0ubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICB9XG4gIH1cbiAgc3VwcG9ydEdvTmV4dFBhZ2VBdXRvbWF0aWMoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5pdGVtc1tpXS5pc0VtcHR5KCkpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgY29sdW1ucy4gSXRlbXMgYXJlIHJlbmRyZWQgaW4gb25lIGxpbmUgaWYgdGhlIHZhbHVlIGlzIDAuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbENvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNvbENvdW50XCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY29sQ291bnQodmFsOiBudW1iZXIpIHtcbiAgICBpZiAodmFsIDwgMSB8fCB2YWwgPiA1KSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY29sQ291bnRcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdGV4dCBpbnB1dCBzaXplLlxuICAgKi9cbiAgcHVibGljIGdldCBpdGVtU2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpdGVtU2l6ZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGl0ZW1TaXplKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXRlbVNpemVcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbGlzdCBvZiByZW5kZXJlZCByb3dzLlxuICAgKi9cbiAgcHVibGljIGdldFJvd3MoKTogQXJyYXk8YW55PiB7XG4gICAgdmFyIGNvbENvdW50ID0gdGhpcy5jb2xDb3VudDtcbiAgICB2YXIgaXRlbXMgPSB0aGlzLml0ZW1zO1xuICAgIHZhciByb3dzID0gW107XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoaW5kZXggPT0gMCkge1xuICAgICAgICByb3dzLnB1c2goW10pO1xuICAgICAgfVxuICAgICAgcm93c1tyb3dzLmxlbmd0aCAtIDFdLnB1c2goaXRlbXNbaV0pO1xuICAgICAgaW5kZXgrKztcbiAgICAgIGlmIChpbmRleCA+PSBjb2xDb3VudCkge1xuICAgICAgICBpbmRleCA9IDA7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByb3dzO1xuICB9XG4gIHByaXZhdGUgaXNNdWx0aXBsZUl0ZW1WYWx1ZUNoYW5naW5nID0gZmFsc2U7XG4gIHByb3RlY3RlZCBvblZhbHVlQ2hhbmdlZCgpIHtcbiAgICBzdXBlci5vblZhbHVlQ2hhbmdlZCgpO1xuICAgIHRoaXMub25JdGVtVmFsdWVDaGFuZ2VkKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVRleHRJdGVtKG5hbWU6IHN0cmluZywgdGl0bGU6IHN0cmluZyk6IE11bHRpcGxlVGV4dEl0ZW1Nb2RlbCB7XG4gICAgcmV0dXJuIG5ldyBNdWx0aXBsZVRleHRJdGVtTW9kZWwobmFtZSwgdGl0bGUpO1xuICB9XG4gIHByb3RlY3RlZCBvbkl0ZW1WYWx1ZUNoYW5nZWQoKSB7XG4gICAgaWYgKHRoaXMuaXNNdWx0aXBsZUl0ZW1WYWx1ZUNoYW5naW5nKSByZXR1cm47XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbVZhbHVlID0gbnVsbDtcbiAgICAgIGlmICh0aGlzLnZhbHVlICYmIHRoaXMuaXRlbXNbaV0ubmFtZSBpbiB0aGlzLnZhbHVlKSB7XG4gICAgICAgIGl0ZW1WYWx1ZSA9IHRoaXMudmFsdWVbdGhpcy5pdGVtc1tpXS5uYW1lXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaXRlbXNbaV0ub25WYWx1ZUNoYW5nZWQoaXRlbVZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGdldElzUnVubmluZ1ZhbGlkYXRvcnMoKTogYm9vbGVhbiB7XG4gICAgaWYgKHN1cGVyLmdldElzUnVubmluZ1ZhbGlkYXRvcnMoKSkgcmV0dXJuIHRydWU7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5pdGVtc1tpXS5lZGl0b3IuaXNSdW5uaW5nVmFsaWRhdG9ycykgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgaGFzRXJyb3JzKGZpcmVDYWxsYmFjazogYm9vbGVhbiA9IHRydWUsIHJlYzogYW55ID0gbnVsbCk6IGJvb2xlYW4ge1xuICAgIHZhciByZXMgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuaXRlbXNbaV0uZWRpdG9yLm9uQ29tcGxldGVkQXN5bmNWYWxpZGF0b3JzID0gKFxuICAgICAgICBoYXNFcnJvcnM6IGJvb2xlYW5cbiAgICAgICkgPT4ge1xuICAgICAgICB0aGlzLnJhaXNlT25Db21wbGV0ZWRBc3luY1ZhbGlkYXRvcnMoKTtcbiAgICAgIH07XG4gICAgICBpZiAoXG4gICAgICAgICEhcmVjICYmXG4gICAgICAgIHJlYy5pc09uVmFsdWVDaGFuZ2VkID09PSB0cnVlICYmXG4gICAgICAgIHRoaXMuaXRlbXNbaV0uZWRpdG9yLmlzRW1wdHkoKVxuICAgICAgKVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIHJlcyA9IHRoaXMuaXRlbXNbaV0uZWRpdG9yLmhhc0Vycm9ycyhmaXJlQ2FsbGJhY2ssIHJlYykgfHwgcmVzO1xuICAgIH1cbiAgICByZXR1cm4gc3VwZXIuaGFzRXJyb3JzKGZpcmVDYWxsYmFjaykgfHwgcmVzO1xuICB9XG4gIHB1YmxpYyBnZXRBbGxFcnJvcnMoKTogQXJyYXk8U3VydmV5RXJyb3I+IHtcbiAgICB2YXIgcmVzdWx0ID0gc3VwZXIuZ2V0QWxsRXJyb3JzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZXJyb3JzID0gdGhpcy5pdGVtc1tpXS5lZGl0b3IuZ2V0QWxsRXJyb3JzKCk7XG4gICAgICBpZiAoZXJyb3JzICYmIGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoZXJyb3JzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBwdWJsaWMgY2xlYXJFcnJvcnMoKSB7XG4gICAgc3VwZXIuY2xlYXJFcnJvcnMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuaXRlbXNbaV0uZWRpdG9yLmNsZWFyRXJyb3JzKCk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBnZXRDb250YWluc0Vycm9ycygpOiBib29sZWFuIHtcbiAgICB2YXIgcmVzID0gc3VwZXIuZ2V0Q29udGFpbnNFcnJvcnMoKTtcbiAgICBpZiAocmVzKSByZXR1cm4gcmVzO1xuICAgIHZhciBpdGVtcyA9IHRoaXMuaXRlbXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGl0ZW1zW2ldLmVkaXRvci5jb250YWluc0Vycm9ycykgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0SXNBbnN3ZXJlZCgpOiBib29sZWFuIHtcbiAgICBpZiAoIXN1cGVyLmdldElzQW5zd2VyZWQoKSkgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVkaXRvciA9IHRoaXMuaXRlbXNbaV0uZWRpdG9yO1xuICAgICAgaWYgKGVkaXRvci5pc1Zpc2libGUgJiYgIWVkaXRvci5pc0Fuc3dlcmVkKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHB1YmxpYyBnZXRQcm9ncmVzc0luZm8oKTogSVByb2dyZXNzSW5mbyB7XG4gICAgdmFyIGVsZW1lbnRzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBlbGVtZW50cy5wdXNoKHRoaXMuaXRlbXNbaV0uZWRpdG9yKTtcbiAgICB9XG4gICAgcmV0dXJuIFN1cnZleUVsZW1lbnQuZ2V0UHJvZ3Jlc3NJbmZvQnlFbGVtZW50cyhlbGVtZW50cywgdGhpcy5pc1JlcXVpcmVkKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RGlzcGxheVZhbHVlQ29yZShrZXlzQXNUZXh0OiBib29sZWFuLCB2YWx1ZTogYW55KTogYW55IHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gdmFsdWU7XG4gICAgdmFyIHJlcyA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSB0aGlzLml0ZW1zW2ldO1xuICAgICAgdmFyIHZhbCA9IHZhbHVlW2l0ZW0ubmFtZV07XG4gICAgICBpZiAoSGVscGVycy5pc1ZhbHVlRW1wdHkodmFsKSkgY29udGludWU7XG4gICAgICB2YXIgaXRlbU5hbWUgPSBpdGVtLm5hbWU7XG4gICAgICBpZiAoa2V5c0FzVGV4dCAmJiAhIWl0ZW0udGl0bGUpIHtcbiAgICAgICAgaXRlbU5hbWUgPSBpdGVtLnRpdGxlO1xuICAgICAgfVxuICAgICAgKDxhbnk+cmVzKVtpdGVtTmFtZV0gPSBpdGVtLmVkaXRvci5nZXREaXNwbGF5VmFsdWUoa2V5c0FzVGV4dCwgdmFsKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICAvL0lNdWx0aXBsZVRleHREYXRhXG4gIGdldE11bHRpcGxlVGV4dFZhbHVlKG5hbWU6IHN0cmluZykge1xuICAgIGlmICghdGhpcy52YWx1ZSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVbbmFtZV07XG4gIH1cbiAgc2V0TXVsdGlwbGVUZXh0VmFsdWUobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5pc011bHRpcGxlSXRlbVZhbHVlQ2hhbmdpbmcgPSB0cnVlO1xuICAgIGlmICh0aGlzLmlzVmFsdWVFbXB0eSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB2YXIgbmV3VmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgIGlmICghbmV3VmFsdWUpIHtcbiAgICAgIG5ld1ZhbHVlID0ge307XG4gICAgfVxuICAgIG5ld1ZhbHVlW25hbWVdID0gdmFsdWU7XG4gICAgdGhpcy5zZXROZXdWYWx1ZShuZXdWYWx1ZSk7XG4gICAgdGhpcy5pc011bHRpcGxlSXRlbVZhbHVlQ2hhbmdpbmcgPSBmYWxzZTtcbiAgfVxuICBnZXRJdGVtRGVmYXVsdFZhbHVlKG5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuICEhdGhpcy5kZWZhdWx0VmFsdWUgPyB0aGlzLmRlZmF1bHRWYWx1ZVtuYW1lXSA6IG51bGw7XG4gIH1cbiAgZ2V0VGV4dFByb2Nlc3NvcigpOiBJVGV4dFByb2Nlc3NvciB7XG4gICAgcmV0dXJuIHRoaXMudGV4dFByb2Nlc3NvcjtcbiAgfVxuICBnZXRBbGxWYWx1ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRBbGxWYWx1ZXMoKSA6IG51bGw7XG4gIH1cbiAgZ2V0SXNSZXF1aXJlZFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkgPyB0aGlzLnN1cnZleS5yZXF1aXJlZFRleHQgOiBcIlwiO1xuICB9XG4gIC8vSVBhbmVsXG4gIGFkZEVsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQsIGluZGV4OiBudW1iZXIpIHt9XG4gIHJlbW92ZUVsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgZ2V0UXVlc3Rpb25UaXRsZUxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwibGVmdFwiO1xuICB9XG4gIGdldFF1ZXN0aW9uU3RhcnRJbmRleCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFN0YXJ0SW5kZXgoKTtcbiAgfVxuICBnZXRDaGlsZHJlbkxheW91dFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJyb3dcIjtcbiAgfVxuICBlbGVtZW50V2lkdGhDaGFuZ2VkKGVsOiBJRWxlbWVudCkge31cbiAgZ2V0IGVsZW1lbnRzKCk6IEFycmF5PElFbGVtZW50PiB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGluZGV4T2YoZWw6IElFbGVtZW50KTogbnVtYmVyIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgZW5zdXJlUm93c1Zpc2liaWxpdHkoKTogdm9pZCB7XG4gICAgLy8gZG8gbm90aGluZ1xuICB9XG59XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwibXVsdGlwbGV0ZXh0aXRlbVwiLFxuICBbXG4gICAgXCJuYW1lXCIsXG4gICAgXCJpc1JlcXVpcmVkOmJvb2xlYW5cIixcbiAgICB7IG5hbWU6IFwicGxhY2VIb2xkZXJcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1BsYWNlSG9sZGVyXCIgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImlucHV0VHlwZVwiLFxuICAgICAgZGVmYXVsdDogXCJ0ZXh0XCIsXG4gICAgICBjaG9pY2VzOiBbXG4gICAgICAgIFwiY29sb3JcIixcbiAgICAgICAgXCJkYXRlXCIsXG4gICAgICAgIFwiZGF0ZXRpbWVcIixcbiAgICAgICAgXCJkYXRldGltZS1sb2NhbFwiLFxuICAgICAgICBcImVtYWlsXCIsXG4gICAgICAgIFwibW9udGhcIixcbiAgICAgICAgXCJudW1iZXJcIixcbiAgICAgICAgXCJwYXNzd29yZFwiLFxuICAgICAgICBcInJhbmdlXCIsXG4gICAgICAgIFwidGVsXCIsXG4gICAgICAgIFwidGV4dFwiLFxuICAgICAgICBcInRpbWVcIixcbiAgICAgICAgXCJ1cmxcIixcbiAgICAgICAgXCJ3ZWVrXCIsXG4gICAgICBdLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcInRpdGxlXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NUaXRsZVwiIH0sXG4gICAgeyBuYW1lOiBcIm1heExlbmd0aDpudW1iZXJcIiwgZGVmYXVsdDogLTEgfSxcbiAgICB7IG5hbWU6IFwic2l6ZTpudW1iZXJcIiwgbWluVmFsdWU6IDAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInJlcXVpcmVkRXJyb3JUZXh0OnRleHRcIixcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NSZXF1aXJlZEVycm9yVGV4dFwiLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJ2YWxpZGF0b3JzOnZhbGlkYXRvcnNcIixcbiAgICAgIGJhc2VDbGFzc05hbWU6IFwic3VydmV5dmFsaWRhdG9yXCIsXG4gICAgICBjbGFzc05hbWVQYXJ0OiBcInZhbGlkYXRvclwiLFxuICAgIH0sXG4gIF0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgTXVsdGlwbGVUZXh0SXRlbU1vZGVsKFwiXCIpO1xuICB9XG4pO1xuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcIm11bHRpcGxldGV4dFwiLFxuICBbXG4gICAgeyBuYW1lOiBcIiFpdGVtczp0ZXh0aXRlbXNcIiwgY2xhc3NOYW1lOiBcIm11bHRpcGxldGV4dGl0ZW1cIiB9LFxuICAgIHsgbmFtZTogXCJpdGVtU2l6ZTpudW1iZXJcIiwgbWluVmFsdWU6IDAgfSxcbiAgICB7IG5hbWU6IFwiY29sQ291bnQ6bnVtYmVyXCIsIGRlZmF1bHQ6IDEsIGNob2ljZXM6IFsxLCAyLCAzLCA0LCA1XSB9LFxuICBdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwoXCJcIik7XG4gIH0sXG4gIFwicXVlc3Rpb25cIlxuKTtcblxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJtdWx0aXBsZXRleHRcIiwgKG5hbWUpID0+IHtcbiAgdmFyIHEgPSBuZXcgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbChuYW1lKTtcbiAgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbC5hZGREZWZhdWx0SXRlbXMocSk7XG4gIHJldHVybiBxO1xufSk7XG4iLCJpbXBvcnQgeyBIYXNoVGFibGUsIEhlbHBlcnMgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZVwiO1xuXG5pbXBvcnQge1xuICBJRWxlbWVudCxcbiAgSVF1ZXN0aW9uLFxuICBJUGFuZWwsXG4gIElTdXJ2ZXlEYXRhLFxuICBJU3VydmV5LFxuICBJU3VydmV5SW1wbCxcbiAgSVRleHRQcm9jZXNzb3IsXG4gIElQcm9ncmVzc0luZm8sXG59IGZyb20gXCIuL2Jhc2UtaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudCB9IGZyb20gXCIuL3N1cnZleS1lbGVtZW50XCI7XG5pbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XG5pbXBvcnQgeyBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5pbXBvcnQge1xuICBUZXh0UHJlUHJvY2Vzc29yVmFsdWUsXG4gIFF1ZXN0aW9uVGV4dFByb2Nlc3Nvcixcbn0gZnJvbSBcIi4vdGV4dFByZVByb2Nlc3NvclwiO1xuaW1wb3J0IHsgUXVlc3Rpb24sIElDb25kaXRpb25PYmplY3QgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUGFuZWxNb2RlbCB9IGZyb20gXCIuL3BhbmVsXCI7XG5pbXBvcnQgeyBKc29uT2JqZWN0LCBwcm9wZXJ0eSwgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xuaW1wb3J0IHsgS2V5RHVwbGljYXRpb25FcnJvciB9IGZyb20gXCIuL2Vycm9yXCI7XG5pbXBvcnQgeyBzZXR0aW5ncyB9IGZyb20gXCIuL3NldHRpbmdzXCI7XG5pbXBvcnQgeyBQYW5lbCB9IGZyb20gXCIuL2tub2Nrb3V0L2tvcGFnZVwiO1xuaW1wb3J0IHsgY29uZmlybUFjdGlvbiB9IGZyb20gXCIuL3V0aWxzL3V0aWxzXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFcnJvciB9IGZyb20gXCIuL3N1cnZleS1lcnJvclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElRdWVzdGlvblBhbmVsRHluYW1pY0RhdGEge1xuICBnZXRJdGVtSW5kZXgoaXRlbTogSVN1cnZleURhdGEpOiBudW1iZXI7XG4gIGdldFBhbmVsSXRlbURhdGEoaXRlbTogSVN1cnZleURhdGEpOiBhbnk7XG4gIHNldFBhbmVsSXRlbURhdGEoaXRlbTogSVN1cnZleURhdGEsIG5hbWU6IHN0cmluZywgdmFsOiBhbnkpOiBhbnk7XG4gIGdldFNoYXJlZFF1ZXN0aW9uRnJvbUFycmF5KG5hbWU6IHN0cmluZywgcGFuZWxJbmRleDogbnVtYmVyKTogUXVlc3Rpb247XG4gIGdldFN1cnZleSgpOiBJU3VydmV5O1xuICBnZXRSb290RGF0YSgpOiBJU3VydmV5RGF0YTtcbn1cblxuY2xhc3MgUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtVGV4dFByb2Nlc3NvciBleHRlbmRzIFF1ZXN0aW9uVGV4dFByb2Nlc3NvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZGF0YTogSVF1ZXN0aW9uUGFuZWxEeW5hbWljRGF0YSxcbiAgICBwcm90ZWN0ZWQgcGFuZWxJdGVtOiBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0sXG4gICAgcHJvdGVjdGVkIHZhcmlhYmxlTmFtZTogc3RyaW5nXG4gICkge1xuICAgIHN1cGVyKHZhcmlhYmxlTmFtZSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBzdXJ2ZXkoKTogSVN1cnZleSB7XG4gICAgcmV0dXJuIHRoaXMucGFuZWxJdGVtLmdldFN1cnZleSgpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcGFuZWwoKTogUGFuZWxNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucGFuZWxJdGVtLnBhbmVsO1xuICB9XG4gIHByaXZhdGUgZ2V0IHBhbmVsSW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gISF0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0SXRlbUluZGV4KHRoaXMucGFuZWxJdGVtKSA6IC0xO1xuICB9XG4gIHByb3RlY3RlZCBnZXRWYWx1ZXMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wYW5lbEl0ZW0uZ2V0QWxsVmFsdWVzKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFF1ZXN0aW9uQnlOYW1lKG5hbWU6IHN0cmluZyk6IFF1ZXN0aW9uIHtcbiAgICB2YXIgcmVzID0gc3VwZXIuZ2V0UXVlc3Rpb25CeU5hbWUobmFtZSk7XG4gICAgaWYgKCEhcmVzKSByZXR1cm4gcmVzO1xuICAgIHZhciBpbmRleCA9IHRoaXMucGFuZWxJbmRleDtcbiAgICByZXR1cm4gaW5kZXggPiAtMVxuICAgICAgPyB0aGlzLmRhdGEuZ2V0U2hhcmVkUXVlc3Rpb25Gcm9tQXJyYXkobmFtZSwgaW5kZXgpXG4gICAgICA6IG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIG9uQ3VzdG9tUHJvY2Vzc1RleHQodGV4dFZhbHVlOiBUZXh0UHJlUHJvY2Vzc29yVmFsdWUpOiBib29sZWFuIHtcbiAgICBpZiAodGV4dFZhbHVlLm5hbWUgPT0gUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtLkluZGV4VmFyaWFibGVOYW1lKSB7XG4gICAgICB2YXIgaW5kZXggPSB0aGlzLnBhbmVsSW5kZXg7XG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICB0ZXh0VmFsdWUuaXNFeGlzdHMgPSB0cnVlO1xuICAgICAgICB0ZXh0VmFsdWUudmFsdWUgPSBpbmRleCArIDE7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoXG4gICAgICB0ZXh0VmFsdWUubmFtZS5pbmRleE9mKFxuICAgICAgICBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0uUGFyZW50SXRlbVZhcmlhYmxlTmFtZSArIFwiLlwiXG4gICAgICApID09IDBcbiAgICApIHtcbiAgICAgIHZhciBxID0gPFF1ZXN0aW9uPig8YW55PnRoaXMuZGF0YSk7XG4gICAgICBpZiAoISFxICYmICEhcS5wYXJlbnRRdWVzdGlvbiAmJiAhIXEucGFyZW50KSB7XG4gICAgICAgIHZhciBkYXRhID0gKDxhbnk+cS5wYXJlbnQpLmRhdGE7XG4gICAgICAgIHZhciBwcm9jZXNzb3IgPSBuZXcgUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtVGV4dFByb2Nlc3NvcihcbiAgICAgICAgICA8SVF1ZXN0aW9uUGFuZWxEeW5hbWljRGF0YT4oPGFueT5xLnBhcmVudFF1ZXN0aW9uKSxcbiAgICAgICAgICA8UXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtPmRhdGEsXG4gICAgICAgICAgUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtLkl0ZW1WYXJpYWJsZU5hbWVcbiAgICAgICAgKTtcbiAgICAgICAgdmFyIHRleHQgPSB0ZXh0VmFsdWUubmFtZS5yZXBsYWNlKFxuICAgICAgICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbS5QYXJlbnRJdGVtVmFyaWFibGVOYW1lLFxuICAgICAgICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbS5JdGVtVmFyaWFibGVOYW1lXG4gICAgICAgICk7XG4gICAgICAgIHZhciByZXMgPSBwcm9jZXNzb3IucHJvY2Vzc1ZhbHVlKHRleHQsIHRleHRWYWx1ZS5yZXR1cm5EaXNwbGF5VmFsdWUpO1xuICAgICAgICB0ZXh0VmFsdWUuaXNFeGlzdHMgPSByZXMuaXNFeGlzdHM7XG4gICAgICAgIHRleHRWYWx1ZS52YWx1ZSA9IHJlcy52YWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbSBpbXBsZW1lbnRzIElTdXJ2ZXlEYXRhLCBJU3VydmV5SW1wbCB7XG4gIHB1YmxpYyBzdGF0aWMgSXRlbVZhcmlhYmxlTmFtZSA9IFwicGFuZWxcIjtcbiAgcHVibGljIHN0YXRpYyBQYXJlbnRJdGVtVmFyaWFibGVOYW1lID0gXCJwYXJlbnRQYW5lbFwiO1xuICBwdWJsaWMgc3RhdGljIEluZGV4VmFyaWFibGVOYW1lID0gXCJwYW5lbEluZGV4XCI7XG4gIHByaXZhdGUgcGFuZWxWYWx1ZTogUGFuZWxNb2RlbDtcbiAgcHJpdmF0ZSBkYXRhOiBJUXVlc3Rpb25QYW5lbER5bmFtaWNEYXRhO1xuICBwcml2YXRlIHRleHRQcmVQcm9jZXNzb3I6IFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbVRleHRQcm9jZXNzb3I7XG4gIGNvbnN0cnVjdG9yKGRhdGE6IElRdWVzdGlvblBhbmVsRHluYW1pY0RhdGEsIHBhbmVsOiBQYW5lbE1vZGVsKSB7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB0aGlzLnBhbmVsVmFsdWUgPSBwYW5lbDtcbiAgICB0aGlzLnRleHRQcmVQcm9jZXNzb3IgPSBuZXcgUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtVGV4dFByb2Nlc3NvcihcbiAgICAgIGRhdGEsXG4gICAgICB0aGlzLFxuICAgICAgUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtLkl0ZW1WYXJpYWJsZU5hbWVcbiAgICApO1xuICAgIHRoaXMuc2V0U3VydmV5SW1wbCgpO1xuICB9XG4gIHB1YmxpYyBnZXQgcGFuZWwoKTogUGFuZWxNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucGFuZWxWYWx1ZTtcbiAgfVxuICBwdWJsaWMgc2V0U3VydmV5SW1wbCgpIHtcbiAgICB0aGlzLnBhbmVsLnNldFN1cnZleUltcGwodGhpcyk7XG4gIH1cbiAgcHVibGljIGdldFZhbHVlKG5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgdmFyIHZhbHVlcyA9IHRoaXMuZ2V0QWxsVmFsdWVzKCk7XG4gICAgcmV0dXJuIHZhbHVlc1tuYW1lXTtcbiAgfVxuICBwdWJsaWMgc2V0VmFsdWUobmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogYW55KSB7XG4gICAgdGhpcy5kYXRhLnNldFBhbmVsSXRlbURhdGEodGhpcywgbmFtZSwgbmV3VmFsdWUpO1xuICB9XG4gIGdldFZhcmlhYmxlKG5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBzZXRWYXJpYWJsZShuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpIHt9XG4gIHB1YmxpYyBnZXRDb21tZW50KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMuZ2V0VmFsdWUobmFtZSArIHNldHRpbmdzLmNvbW1lbnRQcmVmaXgpO1xuICAgIHJldHVybiByZXN1bHQgPyByZXN1bHQgOiBcIlwiO1xuICB9XG4gIHB1YmxpYyBzZXRDb21tZW50KG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IHN0cmluZywgbG9jTm90aWZpY2F0aW9uOiBhbnkpIHtcbiAgICB0aGlzLnNldFZhbHVlKG5hbWUgKyBzZXR0aW5ncy5jb21tZW50UHJlZml4LCBuZXdWYWx1ZSk7XG4gIH1cbiAgZ2V0QWxsVmFsdWVzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5nZXRQYW5lbEl0ZW1EYXRhKHRoaXMpO1xuICB9XG4gIGdldEZpbHRlcmVkVmFsdWVzKCk6IGFueSB7XG4gICAgdmFyIHZhbHVlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIHZhciBzdXJ2ZXlWYWx1ZXMgPVxuICAgICAgISF0aGlzLmRhdGEgJiYgISF0aGlzLmRhdGEuZ2V0Um9vdERhdGEoKVxuICAgICAgICA/IHRoaXMuZGF0YS5nZXRSb290RGF0YSgpLmdldEZpbHRlcmVkVmFsdWVzKClcbiAgICAgICAgOiB7fTtcbiAgICBmb3IgKHZhciBrZXkgaW4gc3VydmV5VmFsdWVzKSB7XG4gICAgICB2YWx1ZXNba2V5XSA9IHN1cnZleVZhbHVlc1trZXldO1xuICAgIH1cbiAgICB2YWx1ZXNbUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtLkl0ZW1WYXJpYWJsZU5hbWVdID0gdGhpcy5nZXRBbGxWYWx1ZXMoKTtcbiAgICBpZiAoISF0aGlzLmRhdGEpIHtcbiAgICAgIHZhbHVlc1tcbiAgICAgICAgUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtLkluZGV4VmFyaWFibGVOYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgIF0gPSB0aGlzLmRhdGEuZ2V0SXRlbUluZGV4KHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9XG4gIGdldEZpbHRlcmVkUHJvcGVydGllcygpOiBhbnkge1xuICAgIGlmICghIXRoaXMuZGF0YSAmJiAhIXRoaXMuZGF0YS5nZXRSb290RGF0YSgpKVxuICAgICAgcmV0dXJuIHRoaXMuZGF0YS5nZXRSb290RGF0YSgpLmdldEZpbHRlcmVkUHJvcGVydGllcygpO1xuICAgIHJldHVybiB7IHN1cnZleTogdGhpcy5nZXRTdXJ2ZXkoKSB9O1xuICB9XG4gIGdldFN1cnZleURhdGEoKTogSVN1cnZleURhdGEge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGdldFN1cnZleSgpOiBJU3VydmV5IHtcbiAgICByZXR1cm4gdGhpcy5kYXRhID8gdGhpcy5kYXRhLmdldFN1cnZleSgpIDogbnVsbDtcbiAgfVxuICBnZXRUZXh0UHJvY2Vzc29yKCk6IElUZXh0UHJvY2Vzc29yIHtcbiAgICByZXR1cm4gdGhpcy50ZXh0UHJlUHJvY2Vzc29yO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvblBhbmVsRHluYW1pY1RlbXBsYXRlU3VydmV5SW1wbCBpbXBsZW1lbnRzIElTdXJ2ZXlJbXBsIHtcbiAgY29uc3RydWN0b3IocHVibGljIGRhdGE6IElRdWVzdGlvblBhbmVsRHluYW1pY0RhdGEpIHt9XG4gIGdldFN1cnZleURhdGEoKTogSVN1cnZleURhdGEge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGdldFN1cnZleSgpOiBJU3VydmV5IHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmdldFN1cnZleSgpO1xuICB9XG4gIGdldFRleHRQcm9jZXNzb3IoKTogSVRleHRQcm9jZXNzb3Ige1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qKlxuICogQSBNb2RlbCBmb3IgYSBwYW5lbCBkeW1hbmljIHF1ZXN0aW9uLiBZb3Ugc2V0dXAgdGhlIHRlbXBsYXRlIHBhbmVsLCBidXQgYWRkaW5nIGVsZW1lbnRzIChhbnkgcXVlc3Rpb24gb3IgYSBwYW5lbCkgYW5kIGFzc2lnbiBhIHRleHQgdG8gaXQncyB0aXRsZSwgYW5kIHRoaXMgcGFuZWwgd2lsbCBiZSB1c2VkIGFzIGEgdGVtcGxhdGUgb24gY3JlYXRpbmcgZHluYW1pYyBwYW5lbHMuIFRoZSBudW1iZXIgb2YgcGFuZWxzIGlzIGRlZmluZWQgYnkgcGFuZWxDb3VudCBwcm9wZXJ0eS5cbiAqIEFuIGVuZC11c2VyIG1heSBkeW5hbWljYWxseSBhZGQvcmVtb3ZlIHBhbmVscywgdW5sZXNzIHlvdSBmb3JiaWRkZW4gdGhpcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwgZXh0ZW5kcyBRdWVzdGlvblxuICBpbXBsZW1lbnRzIElRdWVzdGlvblBhbmVsRHluYW1pY0RhdGEge1xuICBwcml2YXRlIHRlbXBsYXRlVmFsdWU6IFBhbmVsTW9kZWw7XG4gIHByaXZhdGUgbG9hZGluZ1BhbmVsQ291bnQ6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgaXNWYWx1ZUNoYW5naW5nSW50ZXJuYWxseTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBjaGFuZ2luZ1ZhbHVlUXVlc3Rpb246IFF1ZXN0aW9uO1xuICBwcml2YXRlIGN1cnJlbnRJbmRleFZhbHVlOiBudW1iZXIgPSAtMTtcblxuICByZW5kZXJNb2RlQ2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xuICBwYW5lbENvdW50Q2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xuICBjdXJyZW50SW5kZXhDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gICAgdGhpcy5jcmVhdGVOZXdBcnJheShcInBhbmVsc1wiKTtcbiAgICB0aGlzLnRlbXBsYXRlVmFsdWUgPSB0aGlzLmNyZWF0ZUFuZFNldHVwTmV3UGFuZWxPYmplY3QoKTtcbiAgICB0aGlzLnRlbXBsYXRlLnJlbmRlcldpZHRoID0gXCIxMDAlXCI7XG4gICAgdGhpcy50ZW1wbGF0ZS5zZWxlY3RlZEVsZW1lbnRJbkRlc2lnbiA9IHRoaXM7XG5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy50ZW1wbGF0ZS5hZGRFbGVtZW50Q2FsbGJhY2sgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICBzZWxmLmFkZE9uUHJvcGVydHlDaGFuZ2VkQ2FsbGJhY2soZWxlbWVudCk7XG4gICAgICBzZWxmLnJlYnVpbGRQYW5lbHMoKTtcbiAgICB9O1xuICAgIHRoaXMudGVtcGxhdGUucmVtb3ZlRWxlbWVudENhbGxiYWNrID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgc2VsZi5yZWJ1aWxkUGFuZWxzKCk7XG4gICAgfTtcblxuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJjb25maXJtRGVsZXRlVGV4dFwiLCB0aGlzKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwia2V5RHVwbGljYXRpb25FcnJvclwiLCB0aGlzKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwicGFuZWxBZGRUZXh0XCIsIHRoaXMpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJwYW5lbFJlbW92ZVRleHRcIiwgdGhpcyk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInBhbmVsUHJldlRleHRcIiwgdGhpcyk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInBhbmVsTmV4dFRleHRcIiwgdGhpcyk7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcInBhbmVsc1N0YXRlXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgc2VsZi5zZXRQYW5lbHNTdGF0ZSgpO1xuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzU2luZ2xlSW5wdXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBzZXRTdXJ2ZXlJbXBsKHZhbHVlOiBJU3VydmV5SW1wbCkge1xuICAgIHN1cGVyLnNldFN1cnZleUltcGwodmFsdWUpO1xuICAgIHRoaXMuc2V0VGVtcGxhdGVQYW5lbFN1cnZleUltcGwoKTtcbiAgICB0aGlzLnNldFBhbmVsc1N1cnZleUltcGwoKTtcbiAgfVxuICBwcml2YXRlIGFzc2lnbk9uUHJvcGVydHlDaGFuZ2VkVG9UZW1wbGF0ZSgpIHtcbiAgICB2YXIgZWxlbWVudHMgPSB0aGlzLnRlbXBsYXRlLmVsZW1lbnRzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuYWRkT25Qcm9wZXJ0eUNoYW5nZWRDYWxsYmFjayhlbGVtZW50c1tpXSk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgYWRkT25Qcm9wZXJ0eUNoYW5nZWRDYWxsYmFjayhlbGVtZW50OiBJRWxlbWVudCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAoPEJhc2U+KDxhbnk+ZWxlbWVudCkpLm9uUHJvcGVydHlDaGFuZ2VkLmFkZChmdW5jdGlvbihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgICBzZWxmLm9uVGVtcGxhdGVFbGVtZW50UHJvcGVydHlDaGFuZ2VkKGVsZW1lbnQsIG9wdGlvbnMpO1xuICAgIH0pO1xuICAgIGlmIChlbGVtZW50LmlzUGFuZWwpIHtcbiAgICAgICg8UGFuZWxNb2RlbD4oPGFueT5lbGVtZW50KSkuYWRkRWxlbWVudENhbGxiYWNrID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICBzZWxmLmFkZE9uUHJvcGVydHlDaGFuZ2VkQ2FsbGJhY2soZWxlbWVudCk7XG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBwcml2YXRlIG9uVGVtcGxhdGVFbGVtZW50UHJvcGVydHlDaGFuZ2VkKGVsZW1lbnQ6IGFueSwgb3B0aW9uczogYW55KSB7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24gfHwgdGhpcy5pc0Rlc2lnbk1vZGUgfHwgdGhpcy5wYW5lbHMubGVuZ3RoID09IDApXG4gICAgICByZXR1cm47XG4gICAgdmFyIHByb3BlcnR5ID0gU2VyaWFsaXplci5maW5kUHJvcGVydHkoZWxlbWVudC5nZXRUeXBlKCksIG9wdGlvbnMubmFtZSk7XG4gICAgaWYgKCFwcm9wZXJ0eSkgcmV0dXJuO1xuICAgIHZhciBwYW5lbHMgPSB0aGlzLnBhbmVscztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHF1ZXN0aW9uID0gcGFuZWxzW2ldLmdldFF1ZXN0aW9uQnlOYW1lKGVsZW1lbnQubmFtZSk7XG4gICAgICBpZiAoISFxdWVzdGlvbiAmJiAoPGFueT5xdWVzdGlvbilbb3B0aW9ucy5uYW1lXSAhPT0gb3B0aW9ucy5uZXdWYWx1ZSkge1xuICAgICAgICAoPGFueT5xdWVzdGlvbilbb3B0aW9ucy5uYW1lXSA9IG9wdGlvbnMubmV3VmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwicGFuZWxkeW5hbWljXCI7XG4gIH1cbiAgcHVibGljIGdldCBpc0NvbXBvc2l0ZVF1ZXN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHB1YmxpYyBjbGVhck9uRGVsZXRpbmdDb250YWluZXIoKSB7XG4gICAgdGhpcy5wYW5lbHMuZm9yRWFjaCgocGFuZWwpID0+IHtcbiAgICAgIHBhbmVsLmNsZWFyT25EZWxldGluZ0NvbnRhaW5lcigpO1xuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNBbGxvd1RpdGxlTGVmdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIHJlbW92ZUVsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZS5yZW1vdmVFbGVtZW50KGVsZW1lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSBQYW5lbC4gVGhpcyBwYW5lbCBpcyB1c2VkIGFzIGEgdGVtcGxhdGUgb24gY3JlYXRpZ24gZHluYW1pYyBwYW5lbHNcbiAgICogQHNlZSAgdGVtcGxhdGVFbGVtZW50c1xuICAgKiBAc2VlIHRlbXBsYXRlVGl0bGVcbiAgICogQHNlZSBwYW5lbENvdW50XG4gICAqL1xuICBwdWJsaWMgZ2V0IHRlbXBsYXRlKCk6IFBhbmVsTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlVmFsdWU7XG4gIH1cbiAgcHVibGljIGdldFBhbmVsKCk6IElQYW5lbCB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGU7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSBQYW5lbCBlbGVtZW50cywgcXVlc3Rpb25zIGFuZCBwYW5lbHMuXG4gICAqIEBzZWUgIHRlbXBsYXRlRWxlbWVudHNcbiAgICogQHNlZSB0ZW1wbGF0ZVxuICAgKiBAc2VlIHBhbmVsQ291bnRcbiAgICovXG4gIHB1YmxpYyBnZXQgdGVtcGxhdGVFbGVtZW50cygpOiBBcnJheTxJRWxlbWVudD4ge1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlLmVsZW1lbnRzO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgUGFuZWwgdGl0bGUgcHJvcGVydHkuXG4gICAqIEBzZWUgIHRlbXBsYXRlRWxlbWVudHNcbiAgICogQHNlZSB0ZW1wbGF0ZVxuICAgKiBAc2VlIHBhbmVsQ291bnRcbiAgICovXG4gIHB1YmxpYyBnZXQgdGVtcGxhdGVUaXRsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlLnRpdGxlO1xuICB9XG4gIHB1YmxpYyBzZXQgdGVtcGxhdGVUaXRsZShuZXdWYWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy50ZW1wbGF0ZS50aXRsZSA9IG5ld1ZhbHVlO1xuICB9XG4gIGdldCBsb2NUZW1wbGF0ZVRpdGxlKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZS5sb2NUaXRsZTtcbiAgfVxuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIFBhbmVsIGRlc2NyaXB0aW9uIHByb3BlcnR5LlxuICAgKiBAc2VlICB0ZW1wbGF0ZUVsZW1lbnRzXG4gICAqIEBzZWUgdGVtcGxhdGVcbiAgICogQHNlZSBwYW5lbENvdW50XG4gICAqIEBzZWUgdGVtcGxhdGVUaXRsZVxuICAgKi9cbiAgcHVibGljIGdldCB0ZW1wbGF0ZURlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGUuZGVzY3JpcHRpb247XG4gIH1cbiAgcHVibGljIHNldCB0ZW1wbGF0ZURlc2NyaXB0aW9uKG5ld1ZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRlbXBsYXRlLmRlc2NyaXB0aW9uID0gbmV3VmFsdWU7XG4gIH1cbiAgZ2V0IGxvY1RlbXBsYXRlRGVzY3JpcHRpb24oKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlLmxvY0Rlc2NyaXB0aW9uO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBpdGVtcygpOiBBcnJheTxJU3VydmV5RGF0YT4ge1xuICAgIHZhciByZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXMucHVzaCh0aGlzLnBhbmVsc1tpXS5kYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICAvKipcbiAgICogVGhlIGFycmF5IG9mIGR5bmFtaWMgcGFuZWxzIGNyZWF0ZWQgYmFzZWQgb24gcGFuZWwgdGVtcGxhdGVcbiAgICogQHNlZSB0ZW1wbGF0ZVxuICAgKiBAc2VlIHBhbmVsQ291bnRcbiAgICovXG4gIHB1YmxpYyBnZXQgcGFuZWxzKCk6IEFycmF5PFBhbmVsTW9kZWw+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicGFuZWxzXCIpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgaW5kZXggb2YgY3VycmVudCBhY3RpdmUgZHluYW1pY2FsIHBhbmVsIHdoZW4gdGhlIHJlbmRlck1vZGUgaXMgbm90IFwibGlzdFwiLiBJZiB0aGVyZSBpcyBubyBkeW1hbWljIHBhbmVsIChwYW5lbENvdW50ID0gMCkgb3IgcmVuZGVyTW9kZSBlcXVhbHMgXCJsaXN0XCIgaXQgcmV0dXJucyAtMSwgb3RoZXJ3aXNlIGl0IHJldHVybnMgYSB2YWx1ZSBmcm9tIDAgdG8gcGFuZWxDb3VudCAtIDEuXG4gICAqIEBzZWUgY3VycmVudFBhbmVsXG4gICAqIEBzZWUgcGFuZWxzXG4gICAqIEBzZWUgcGFuZWxDb3VudFxuICAgKiBAc2VlIHJlbmRlck1vZGVcbiAgICovXG4gIHB1YmxpYyBnZXQgY3VycmVudEluZGV4KCk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMuaXNSZW5kZXJNb2RlTGlzdCkgcmV0dXJuIC0xO1xuICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSkgcmV0dXJuIDA7XG4gICAgaWYgKHRoaXMuY3VycmVudEluZGV4VmFsdWUgPCAwICYmIHRoaXMucGFuZWxDb3VudCA+IDApIHtcbiAgICAgIHRoaXMuY3VycmVudEluZGV4VmFsdWUgPSAwO1xuICAgIH1cbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXhWYWx1ZSA+PSB0aGlzLnBhbmVsQ291bnQpIHtcbiAgICAgIHRoaXMuY3VycmVudEluZGV4VmFsdWUgPSB0aGlzLnBhbmVsQ291bnQgLSAxO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jdXJyZW50SW5kZXhWYWx1ZTtcbiAgfVxuICBwdWJsaWMgc2V0IGN1cnJlbnRJbmRleCh2YWw6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleFZhbHVlICE9PSB2YWwpIHtcbiAgICAgIGlmICh2YWwgPj0gdGhpcy5wYW5lbENvdW50KSB2YWwgPSB0aGlzLnBhbmVsQ291bnQgLSAxO1xuICAgICAgdGhpcy5jdXJyZW50SW5kZXhWYWx1ZSA9IHZhbDtcbiAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMuY3VycmVudEluZGV4Q2hhbmdlZENhbGxiYWNrKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IGFjdGl2ZSBkeW5hbWljYWwgcGFuZWwgd2hlbiB0aGUgcmVuZGVyTW9kZSBpcyBub3QgXCJsaXN0XCIuIElmIHRoZXJlIGlzIG5vIGR5bWFtaWMgcGFuZWwgKHBhbmVsQ291bnQgPSAwKSBvciByZW5kZXJNb2RlIGVxdWFscyBcImxpc3RcIiBpdCByZXR1cm5zIG51bGwuXG4gICAqIEBzZWUgY3VycmVuSW5kZXhcbiAgICogQHNlZSBwYW5lbHNcbiAgICogQHNlZSBwYW5lbENvdW50XG4gICAqIEBzZWUgcmVuZGVyTW9kZVxuICAgKi9cbiAgcHVibGljIGdldCBjdXJyZW50UGFuZWwoKTogUGFuZWxNb2RlbCB7XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jdXJyZW50SW5kZXg7XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLnBhbmVscy5sZW5ndGgpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLnBhbmVsc1tpbmRleF07XG4gIH1cbiAgLyoqXG4gICAqIFNldCBpdCB0byB0cnVlLCB0byBzaG93IGEgY29uZmlybWF0aW9uIGRpYWxvZyBvbiByZW1vdmluZyBhIHBhbmVsXG4gICAqIEBzZWUgQ29uZmlybURlbGV0ZVRleHRcbiAgICovXG4gIHB1YmxpYyBnZXQgY29uZmlybURlbGV0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY29uZmlybURlbGV0ZVwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBjb25maXJtRGVsZXRlKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNvbmZpcm1EZWxldGVcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogU2V0IGl0IHRvIGEgcXVlc3Rpb24gbmFtZSB1c2VkIGluIHRoZSB0ZW1wbGF0ZSBwYW5lbCBhbmQgdGhlIGxpYnJhcnkgc2hvd3MgZHVwbGljYXRpb24gZXJyb3IsIGlmIHRoZXJlIGFyZSBzYW1lIHZhbHVlcyBpbiBkaWZmZXJlbnQgcGFuZWxzIG9mIHRoaXMgcXVlc3Rpb24uXG4gICAqIEBzZWUga2V5RHVwbGljYXRpb25FcnJvclxuICAgKi9cbiAgcHVibGljIGdldCBrZXlOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImtleU5hbWVcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBrZXlOYW1lKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwia2V5TmFtZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgdGV4dCBzaG93aW5nIGluIHRoZSBjb25maXJtYXRpb24gZGVsZXRlIGRpYWxvZyBvbiByZW1vdmluZyBhIHBhbmVsLlxuICAgKi9cbiAgcHVibGljIGdldCBjb25maXJtRGVsZXRlVGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXG4gICAgICBcImNvbmZpcm1EZWxldGVUZXh0XCIsXG4gICAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiY29uZmlybURlbGV0ZVwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBjb25maXJtRGVsZXRlVGV4dCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiY29uZmlybURlbGV0ZVRleHRcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jQ29uZmlybURlbGV0ZVRleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwiY29uZmlybURlbGV0ZVRleHRcIik7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBkdXBsaWNhdGlvbiB2YWx1ZSBlcnJvciB0ZXh0LiBTZXQgaXQgdG8gc2hvdyB0aGUgdGV4dCBkaWZmZXJlbnQgZnJvbSB0aGUgZGVmYXVsdC5cbiAgICogQHNlZSBrZXlOYW1lXG4gICAqL1xuICBwdWJsaWMgZ2V0IGtleUR1cGxpY2F0aW9uRXJyb3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgICAgXCJrZXlEdXBsaWNhdGlvbkVycm9yXCIsXG4gICAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwia2V5RHVwbGljYXRpb25FcnJvclwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBrZXlEdXBsaWNhdGlvbkVycm9yKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJrZXlEdXBsaWNhdGlvbkVycm9yXCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY0tleUR1cGxpY2F0aW9uRXJyb3IoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwia2V5RHVwbGljYXRpb25FcnJvclwiKTtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IHByZXZpb3VzIGJ1dHRvbiB0ZXh0LiBQcmV2aW91cyBidXR0b24gc2hvd3MgdGhlIHByZXZpb3VzIHBhbmVsLCBjaGFuZ2UgdGhlIGN1cnJlbnRQYW5lbCwgd2hlbiB0aGUgcmVuZGVyTW9kZSBkb2Vzbid0IGVxdWFsIHRvIFwibGlzdFwiLlxuICAgKiBAc2VlIGN1cnJlbnRQYW5lbFxuICAgKiBAc2VlIGN1cnJlbnRJbmRleFxuICAgKiBAc2VlIHJlbmRlck1vZGVcbiAgICovXG4gIHB1YmxpYyBnZXQgcGFuZWxQcmV2VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcbiAgICAgIFwicGFuZWxQcmV2VGV4dFwiLFxuICAgICAgc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcInBhZ2VQcmV2VGV4dFwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBwYW5lbFByZXZUZXh0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJwYW5lbFByZXZUZXh0XCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY1BhbmVsUHJldlRleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwicGFuZWxQcmV2VGV4dFwiKTtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IG5leHQgYnV0dG9uIHRleHQuIE5leHQgYnV0dG9uIHNob3dzIHRoZSBuZXh0IHBhbmVsLCBjaGFuZ2UgdGhlIGN1cnJlbnRQYW5lbCwgd2hlbiB0aGUgcmVuZGVyTW9kZSBkb2Vzbid0IGVxdWFsIHRvIFwibGlzdFwiLlxuICAgKiBAc2VlIGN1cnJlbnRQYW5lbFxuICAgKiBAc2VlIGN1cnJlbnRJbmRleFxuICAgKiBAc2VlIHJlbmRlck1vZGVcbiAgICovXG4gIHB1YmxpYyBnZXQgcGFuZWxOZXh0VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcbiAgICAgIFwicGFuZWxOZXh0VGV4dFwiLFxuICAgICAgc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcInBhZ2VOZXh0VGV4dFwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBwYW5lbE5leHRUZXh0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJwYW5lbE5leHRUZXh0XCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY1BhbmVsTmV4dFRleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwicGFuZWxOZXh0VGV4dFwiKTtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGFkZCBwYW5lbCBidXR0b24gdGV4dC5cbiAgICovXG4gIHB1YmxpYyBnZXQgcGFuZWxBZGRUZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcbiAgICAgIFwicGFuZWxBZGRUZXh0XCIsXG4gICAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiYWRkUGFuZWxcIilcbiAgICApO1xuICB9XG4gIHB1YmxpYyBzZXQgcGFuZWxBZGRUZXh0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInBhbmVsQWRkVGV4dFwiLCB2YWx1ZSk7XG4gIH1cbiAgZ2V0IGxvY1BhbmVsQWRkVGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJwYW5lbEFkZFRleHRcIik7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCB2YWx1ZSBvZiByZW1vdmUgcGFuZWwgYnV0dG9uIHRleHQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBhbmVsUmVtb3ZlVGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXG4gICAgICBcInBhbmVsUmVtb3ZlVGV4dFwiLFxuICAgICAgc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcInJlbW92ZVBhbmVsXCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc2V0IHBhbmVsUmVtb3ZlVGV4dCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwicGFuZWxSZW1vdmVUZXh0XCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY1BhbmVsUmVtb3ZlVGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJwYW5lbFJlbW92ZVRleHRcIik7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSB3aGVuIHRoZSByZW5kZXJNb2RlIGVxdWFscyB0byBcInByb2dyZXNzVG9wXCIgb3IgXCJwcm9ncmVzc1RvcEJvdHRvbVwiXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzUHJvZ3Jlc3NUb3BTaG93aW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnJlbmRlck1vZGUgPT0gXCJwcm9ncmVzc1RvcFwiIHx8IHRoaXMucmVuZGVyTW9kZSA9PSBcInByb2dyZXNzVG9wQm90dG9tXCJcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgd2hlbiB0aGUgcmVuZGVyTW9kZSBlcXVhbHMgdG8gXCJwcm9ncmVzc0JvdHRvbVwiIG9yIFwicHJvZ3Jlc3NUb3BCb3R0b21cIlxuICAgKi9cbiAgcHVibGljIGdldCBpc1Byb2dyZXNzQm90dG9tU2hvd2luZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5yZW5kZXJNb2RlID09IFwicHJvZ3Jlc3NCb3R0b21cIiB8fFxuICAgICAgdGhpcy5yZW5kZXJNb2RlID09IFwicHJvZ3Jlc3NUb3BCb3R0b21cIlxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSB3aGVuIGN1cnJlbnRJbmRleCBpcyBtb3JlIHRoYW4gMC5cbiAgICogQHNlZSBjdXJyZW5JbmRleFxuICAgKiBAc2VlIGN1cnJlblBhbmVsXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzUHJldkJ1dHRvblNob3dpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudEluZGV4ID4gMDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIHdoZW4gY3VycmVudEluZGV4IGlzIG1vcmUgdGhhbiBvciBlcXVhbCAwIGFuZCBsZXNzIHRoYW4gcGFuZWxDb3VudCAtIDEuXG4gICAqIEBzZWUgY3VycmVuSW5kZXhcbiAgICogQHNlZSBjdXJyZW5QYW5lbFxuICAgKiBAc2VlIHBhbmVsQ291bnRcbiAgICovXG4gIHB1YmxpYyBnZXQgaXNOZXh0QnV0dG9uU2hvd2luZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50SW5kZXggPj0gMCAmJiB0aGlzLmN1cnJlbnRJbmRleCA8IHRoaXMucGFuZWxDb3VudCAtIDE7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSB3aGVuIHNob3dSYW5nZUluUHJvZ3Jlc3MgZXF1YWxzIHRvIHRydWUsIHJlbmRlck1vZGUgZG9lc24ndCBlcXVhbCB0byBcImxpc3RcIiBhbmQgcGFuZWxDb3VudCBpcyA+PSAyLlxuICAgKi9cbiAgcHVibGljIGdldCBpc1JhbmdlU2hvd2luZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5zaG93UmFuZ2VJblByb2dyZXNzICYmIHRoaXMuY3VycmVudEluZGV4ID49IDAgJiYgdGhpcy5wYW5lbENvdW50ID4gMVxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldEVsZW1lbnRzSW5EZXNpZ24oaW5jbHVkZUhpZGRlbjogYm9vbGVhbiA9IGZhbHNlKTogQXJyYXk8SUVsZW1lbnQ+IHtcbiAgICByZXR1cm4gaW5jbHVkZUhpZGRlbiA/IFt0aGlzLnRlbXBsYXRlXSA6IHRoaXMudGVtcGxhdGVFbGVtZW50cztcbiAgfVxuICBwcml2YXRlIGlzQWRkaW5nTmV3UGFuZWxzOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgYWRkaW5nTmV3UGFuZWxzVmFsdWU6IGFueTtcbiAgcHJpdmF0ZSBpc05ld1BhbmVsc1ZhbHVlQ2hhbmdlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBwcmVwYXJlVmFsdWVGb3JQYW5lbENyZWF0aW5nKCkge1xuICAgIHRoaXMuYWRkaW5nTmV3UGFuZWxzVmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgIHRoaXMuaXNBZGRpbmdOZXdQYW5lbHMgPSB0cnVlO1xuICAgIHRoaXMuaXNOZXdQYW5lbHNWYWx1ZUNoYW5nZWQgPSBmYWxzZTtcbiAgfVxuICBwcml2YXRlIHNldFZhbHVlQWZ0ZXJQYW5lbHNDcmVhdGluZygpIHtcbiAgICB0aGlzLmlzQWRkaW5nTmV3UGFuZWxzID0gZmFsc2U7XG4gICAgaWYgKHRoaXMuaXNOZXdQYW5lbHNWYWx1ZUNoYW5nZWQpIHtcbiAgICAgIHRoaXMuaXNWYWx1ZUNoYW5naW5nSW50ZXJuYWxseSA9IHRydWU7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5hZGRpbmdOZXdQYW5lbHNWYWx1ZTtcbiAgICAgIHRoaXMuaXNWYWx1ZUNoYW5naW5nSW50ZXJuYWxseSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VmFsdWVDb3JlKCkge1xuICAgIHJldHVybiB0aGlzLmlzQWRkaW5nTmV3UGFuZWxzXG4gICAgICA/IHRoaXMuYWRkaW5nTmV3UGFuZWxzVmFsdWVcbiAgICAgIDogc3VwZXIuZ2V0VmFsdWVDb3JlKCk7XG4gIH1cbiAgcHJvdGVjdGVkIHNldFZhbHVlQ29yZShuZXdWYWx1ZTogYW55KSB7XG4gICAgaWYgKHRoaXMuaXNBZGRpbmdOZXdQYW5lbHMpIHtcbiAgICAgIHRoaXMuaXNOZXdQYW5lbHNWYWx1ZUNoYW5nZWQgPSB0cnVlO1xuICAgICAgdGhpcy5hZGRpbmdOZXdQYW5lbHNWYWx1ZSA9IG5ld1ZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdXBlci5zZXRWYWx1ZUNvcmUobmV3VmFsdWUpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gZ2V0L3NldCB0aGUgbnVtYmVyIG9mIGR5bmFtaWMgcGFuZWxzLlxuICAgKiBAc2VlIHRlbXBsYXRlXG4gICAqIEBzZWUgbWluUGFuZWxDb3VudFxuICAgKiBAc2VlIG1heFBhbmVsQ291bnRcbiAgICogQHNlZSBhZGRQYW5lbFxuICAgKiBAc2VlIHJlbW92ZVBhbmVsXG4gICAqIEBzZWUgcmVtb3ZlUGFuZWxVSVxuICAgKi9cbiAgcHVibGljIGdldCBwYW5lbENvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaXNMb2FkaW5nRnJvbUpzb24gfHwgdGhpcy5pc0Rlc2lnbk1vZGVcbiAgICAgID8gdGhpcy5sb2FkaW5nUGFuZWxDb3VudFxuICAgICAgOiB0aGlzLnBhbmVscy5sZW5ndGg7XG4gIH1cbiAgcHVibGljIHNldCBwYW5lbENvdW50KHZhbDogbnVtYmVyKSB7XG4gICAgaWYgKHZhbCA8IDApIHJldHVybjtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbiB8fCB0aGlzLmlzRGVzaWduTW9kZSkge1xuICAgICAgdGhpcy5sb2FkaW5nUGFuZWxDb3VudCA9IHZhbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHZhbCA9PSB0aGlzLnBhbmVscy5sZW5ndGggfHwgdGhpcy5pc0Rlc2lnbk1vZGUpIHJldHVybjtcbiAgICB0aGlzLnVwZGF0ZUJpbmRpbmdzKFwicGFuZWxDb3VudFwiLCB2YWwpO1xuICAgIHRoaXMucHJlcGFyZVZhbHVlRm9yUGFuZWxDcmVhdGluZygpO1xuICAgIGZvciAobGV0IGkgPSB0aGlzLnBhbmVsQ291bnQ7IGkgPCB2YWw7IGkrKykge1xuICAgICAgdmFyIHBhbmVsID0gdGhpcy5jcmVhdGVOZXdQYW5lbCgpO1xuICAgICAgdGhpcy5wYW5lbHMucHVzaChwYW5lbCk7XG4gICAgICBpZiAodGhpcy5yZW5kZXJNb2RlID09IFwibGlzdFwiICYmIHRoaXMucGFuZWxzU3RhdGUgIT0gXCJkZWZhdWx0XCIpIHtcbiAgICAgICAgaWYgKHRoaXMucGFuZWxzU3RhdGUgPT09IFwiZXhwYW5kXCIpIHtcbiAgICAgICAgICBwYW5lbC5leHBhbmQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoISFwYW5lbC50aXRsZSkge1xuICAgICAgICAgICAgcGFuZWwuY29sbGFwc2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHZhbCA8IHRoaXMucGFuZWxDb3VudCkgdGhpcy5wYW5lbHMuc3BsaWNlKHZhbCwgdGhpcy5wYW5lbENvdW50IC0gdmFsKTtcbiAgICB0aGlzLnNldFZhbHVlQWZ0ZXJQYW5lbHNDcmVhdGluZygpO1xuICAgIHRoaXMuc2V0VmFsdWVCYXNlZE9uUGFuZWxDb3VudCgpO1xuICAgIHRoaXMucmVSdW5Db25kaXRpb24oKTtcbiAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnBhbmVsQ291bnRDaGFuZ2VkQ2FsbGJhY2spO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBhbGxvdyB0aGUgZW5kLXVzZXIgdG8gY29sbGFwc2UvZXhwYW5kIHRoZSBwYW5lbHMuIEl0IHdvcmtzIG9ubHkgaWYgdGhlIHJlbmRlck1vZGUgcHJvcGVydHkgZXF1YWxzIHRvIFwibGlzdFwiIGFuZCB0ZW1wbGF0ZVRpdGxlIHByb3BlcnR5IGlzIG5vdCBlbXB0eS4gVGhlIGZvbGxvd2luZyB2YWx1ZXMgYXJlIGF2YWlsYWJsZTpcbiAgICogPGJyLz4gZGVmYXVsdCAtIHRoZSBkZWZhdWx0IHZhbHVlLiBVc2VyIGNhbid0IGNvbGxhcHNlL2V4cGFuZCBwYW5lbHNcbiAgICogPGJyLz4gZXhwYW5kZWQgLSBVc2VyIGNhbiBjb2xsYXBzZS9leHBhbmQgcGFuZWxzIGFuZCBhbGwgcGFuZWxzIGFyZSBleHBhbmRlZCBieSBkZWZhdWx0XG4gICAqIDxici8+IGNvbGxhcHNlZCAtIFVzZXIgY2FuIGNvbGxhcHNlL2V4cGFuZCBwYW5lbHMgYW5kIGFsbCBwYW5lbHMgYXJlIGNvbGxhcHNlZCBieSBkZWZhdWx0XG4gICAqIDxici8+IGZpcnN0RXhwYW5kZWQgLSBVc2VyIGNhbiBjb2xsYXBzZS9leHBhbmQgcGFuZWxzLiBUaGUgZmlyc3QgcGFuZWwgaXMgZXhwYW5kZWQgYW5kIG90aGVycyBhcmUgY29sbGFwc2VkXG4gICAqIEBzZWUgcmVuZGVyTW9kZVxuICAgKiBAc2VlIHRlbXBsYXRlVGl0bGVcbiAgICovXG4gIHB1YmxpYyBnZXQgcGFuZWxzU3RhdGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicGFuZWxzU3RhdGVcIik7XG4gIH1cbiAgcHVibGljIHNldCBwYW5lbHNTdGF0ZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInBhbmVsc1N0YXRlXCIsIHZhbCk7XG4gIH1cbiAgcHJpdmF0ZSBzZXRUZW1wbGF0ZVBhbmVsU3VydmV5SW1wbCgpIHtcbiAgICB0aGlzLnRlbXBsYXRlLnNldFN1cnZleUltcGwoXG4gICAgICB0aGlzLmlzRGVzaWduTW9kZVxuICAgICAgICA/IHRoaXMuc3VydmV5SW1wbFxuICAgICAgICA6IG5ldyBRdWVzdGlvblBhbmVsRHluYW1pY1RlbXBsYXRlU3VydmV5SW1wbCh0aGlzKVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBzZXRQYW5lbHNTdXJ2ZXlJbXBsKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwYW5lbCA9IHRoaXMucGFuZWxzW2ldO1xuICAgICAgaWYgKHBhbmVsID09IHRoaXMudGVtcGxhdGUpIGNvbnRpbnVlO1xuICAgICAgcGFuZWwuc2V0U3VydmV5SW1wbCg8UXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtPnBhbmVsLmRhdGEpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIHNldFBhbmVsc1N0YXRlKCkge1xuICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSB8fCB0aGlzLnJlbmRlck1vZGUgIT0gXCJsaXN0XCIgfHwgIXRoaXMudGVtcGxhdGVUaXRsZSlcbiAgICAgIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc3RhdGUgPSB0aGlzLnBhbmVsc1N0YXRlO1xuICAgICAgaWYgKHN0YXRlID09PSBcImZpcnN0RXhwYW5kZWRcIikge1xuICAgICAgICBzdGF0ZSA9IGkgPT09IDAgPyBcImV4cGFuZGVkXCIgOiBcImNvbGxhcHNlZFwiO1xuICAgICAgfVxuICAgICAgdGhpcy5wYW5lbHNbaV0uc3RhdGUgPSBzdGF0ZTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBzZXRWYWx1ZUJhc2VkT25QYW5lbENvdW50KCkge1xuICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgaWYgKCF2YWx1ZSB8fCAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHZhbHVlID0gW107XG4gICAgaWYgKHZhbHVlLmxlbmd0aCA9PSB0aGlzLnBhbmVsQ291bnQpIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gdmFsdWUubGVuZ3RoOyBpIDwgdGhpcy5wYW5lbENvdW50OyBpKyspIHZhbHVlLnB1c2goe30pO1xuICAgIGlmICh2YWx1ZS5sZW5ndGggPiB0aGlzLnBhbmVsQ291bnQpIHtcbiAgICAgIHZhbHVlLnNwbGljZSh0aGlzLnBhbmVsQ291bnQsIHZhbHVlLmxlbmd0aCAtIHRoaXMucGFuZWxDb3VudCk7XG4gICAgfVxuICAgIHRoaXMuaXNWYWx1ZUNoYW5naW5nSW50ZXJuYWxseSA9IHRydWU7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuaXNWYWx1ZUNoYW5naW5nSW50ZXJuYWxseSA9IGZhbHNlO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbWluaW11bSBwYW5lbCBjb3VudC4gQSB1c2VyIGNvdWxkIG5vdCBkZWxldGUgYSBwYW5lbCBpZiB0aGUgcGFuZWxDb3VudCBlcXVhbHMgdG8gbWluUGFuZWxDb3VudFxuICAgKiBAc2VlIHBhbmVsQ291bnRcbiAgICogQHNlZSBtYXhQYW5lbENvdW50XG4gICAqL1xuICBwdWJsaWMgZ2V0IG1pblBhbmVsQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWluUGFuZWxDb3VudFwiLCAwKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1pblBhbmVsQ291bnQodmFsOiBudW1iZXIpIHtcbiAgICBpZiAodmFsIDwgMCkgdmFsID0gMDtcbiAgICBpZiAodmFsID09IHRoaXMubWluUGFuZWxDb3VudCkgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1pblBhbmVsQ291bnRcIiwgdmFsKTtcbiAgICBpZiAodmFsID4gdGhpcy5tYXhQYW5lbENvdW50KSB0aGlzLm1heFBhbmVsQ291bnQgPSB2YWw7XG4gICAgaWYgKHRoaXMucGFuZWxDb3VudCA8IHZhbCkgdGhpcy5wYW5lbENvdW50ID0gdmFsO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBwYW5lbCBjb3VudC4gQSB1c2VyIGNvdWxkIG5vdCBhZGQgYSBwYW5lbCBpZiB0aGUgcGFuZWxDb3VudCBlcXVhbHMgdG8gbWF4UGFuZWxDb3VudFxuICAgKiBAc2VlIHBhbmVsQ291bnRcbiAgICogQHNlZSBtaW5QYW5lbENvdW50XG4gICAqL1xuICBwdWJsaWMgZ2V0IG1heFBhbmVsQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFxuICAgICAgXCJtYXhQYW5lbENvdW50XCIsXG4gICAgICBzZXR0aW5ncy5wYW5lbE1heGltdW1QYW5lbENvdW50XG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1heFBhbmVsQ291bnQodmFsOiBudW1iZXIpIHtcbiAgICBpZiAodmFsIDw9IDApIHJldHVybjtcbiAgICBpZiAodmFsID4gc2V0dGluZ3MucGFuZWxNYXhpbXVtUGFuZWxDb3VudClcbiAgICAgIHZhbCA9IHNldHRpbmdzLnBhbmVsTWF4aW11bVBhbmVsQ291bnQ7XG4gICAgaWYgKHZhbCA9PSB0aGlzLm1heFBhbmVsQ291bnQpIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtYXhQYW5lbENvdW50XCIsIHZhbCk7XG4gICAgaWYgKHZhbCA8IHRoaXMubWluUGFuZWxDb3VudCkgdGhpcy5taW5QYW5lbENvdW50ID0gdmFsO1xuICAgIGlmICh0aGlzLnBhbmVsQ291bnQgPiB2YWwpIHRoaXMucGFuZWxDb3VudCA9IHZhbDtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gZmFsc2UgdG8gaGlkZSB0aGUgJ0FkZCBOZXcnIGJ1dHRvblxuICAgKiBAc2VlIGFsbG93UmVtb3ZlUGFuZWxcbiAgICovXG4gIHB1YmxpYyBnZXQgYWxsb3dBZGRQYW5lbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dBZGRQYW5lbFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGFsbG93QWRkUGFuZWwodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dBZGRQYW5lbFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBmYWxzZSB0byBoaWRlIHRoZSAnUmVtb3ZlJyBidXR0b25cbiAgICogQHNlZSBhbGxvd0FkZFBhbmVsXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFsbG93UmVtb3ZlUGFuZWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImFsbG93UmVtb3ZlUGFuZWxcIik7XG4gIH1cbiAgcHVibGljIHNldCBhbGxvd1JlbW92ZVBhbmVsKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImFsbG93UmVtb3ZlUGFuZWxcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgZGlmZmVyZW50IGZyb20gXCJkZWZhdWx0XCIgdG8gc2V0IHRoZSBzcGVjaWZpYyBxdWVzdGlvbiB0aXRsZSBsb2NhdGlvbiBmb3IgdGhlIHRlbXBsYXRlIHF1ZXN0aW9ucy5cbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5xdWVzdGlvblRpdGxlTG9jYXRpb25cbiAgICogQHNlZSBQYW5lbE1vZGVsQmFzZS5xdWVzdGlvblRpdGxlTG9jYXRpb25cbiAgICovXG4gIHB1YmxpYyBnZXQgdGVtcGxhdGVUaXRsZUxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInRlbXBsYXRlVGl0bGVMb2NhdGlvblwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHRlbXBsYXRlVGl0bGVMb2NhdGlvbih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidGVtcGxhdGVUaXRsZUxvY2F0aW9uXCIsIHZhbHVlLnRvTG93ZXJDYXNlKCkpO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBzaG93L2hpZGUgdGhlIG51bWJlcnMgaW4gdGl0bGVzIGluIHF1ZXN0aW9ucyBpbnNpZGUgYSBkeW5hbWljIHBhbmVsLlxuICAgKiBCeSBkZWZhdWx0IHRoZSB2YWx1ZSBpcyBcIm9mZlwiLiBZb3UgbWF5IHNldCBpdCB0byBcIm9uUGFuZWxcIiBhbmQgdGhlIGZpcnN0IHF1ZXN0aW9uIGluc2lkZSBhIGR5bmFtaWMgcGFuZWwgd2lsbCBzdGFydCB3aXRoIDEgb3IgXCJvblN1cnZleVwiIHRvIGluY2x1ZGUgbmVzdGVkIHF1ZXN0aW9ucyBpbiBkeW1hbWljIHBhbmVscyBpbnRvIGdsb2JhbCBzdXJ2ZXkgcXVlc3Rpb24gbnVtYmVyaW5nLlxuICAgKi9cbiAgcHVibGljIGdldCBzaG93UXVlc3Rpb25OdW1iZXJzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dRdWVzdGlvbk51bWJlcnNcIik7XG4gIH1cbiAgcHVibGljIHNldCBzaG93UXVlc3Rpb25OdW1iZXJzKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1F1ZXN0aW9uTnVtYmVyc1wiLCB2YWwpO1xuICAgIGlmICghdGhpcy5pc0xvYWRpbmdGcm9tSnNvbiAmJiB0aGlzLnN1cnZleSkge1xuICAgICAgdGhpcy5zdXJ2ZXkucXVlc3Rpb25WaXNpYmlsaXR5Q2hhbmdlZCh0aGlzLCB0aGlzLnZpc2libGUpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gY2hhbmdlIHRoZSBsb2NhdGlvbiBvZiB0aGUgcmVtb3ZlIGJ1dHRvbiByZWxhdGl2ZSB0byB0aGUgcGFuZWwuXG4gICAqIEJ5IGRlZmF1bHQgdGhlIHZhbHVlIGlzIFwiYm90dG9tXCIuIFlvdSBtYXkgc2V0IGl0IHRvIFwicmlnaHRcIiBhbmQgcmVtb3ZlIGJ1dHRvbiB3aWxsIGFwcGVhciB0byB0aGUgcmlnaHQgb2YgdGhlIHBhbmVsLlxuICAgKi9cbiAgcHVibGljIGdldCBwYW5lbFJlbW92ZUJ1dHRvbkxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInBhbmVsUmVtb3ZlQnV0dG9uTG9jYXRpb25cIik7XG4gIH1cbiAgcHVibGljIHNldCBwYW5lbFJlbW92ZUJ1dHRvbkxvY2F0aW9uKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicGFuZWxSZW1vdmVCdXR0b25Mb2NhdGlvblwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTaG93cyB0aGUgcmFuZ2UgZnJvbSAxIHRvIHBhbmVsQ291bnQgd2hlbiByZW5kZXJNb2RlIGRvZXNuJ3QgZXF1YWwgdG8gXCJsaXN0XCIuIFNldCB0byBmYWxzZSB0byBoaWRlIHRoaXMgZWxlbWVudC5cbiAgICogQHNlZSBwYW5lbENvdW50XG4gICAqIEBzZWUgcmVuZGVyTW9kZVxuICAgKi9cbiAgcHVibGljIGdldCBzaG93UmFuZ2VJblByb2dyZXNzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93UmFuZ2VJblByb2dyZXNzXCIsIHRydWUpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2hvd1JhbmdlSW5Qcm9ncmVzcyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93UmFuZ2VJblByb2dyZXNzXCIsIHZhbCk7XG4gICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5jdXJyZW50SW5kZXhDaGFuZ2VkQ2FsbGJhY2spO1xuICB9XG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHRoZSBwcm9wZXJ0eSBlcXVhbHMgdG8gXCJsaXN0XCIgYW5kIGFsbCBkeW5hbWljIHBhbmVscyBhcmUgcmVuZGVyZWQgb25lIGJ5IG9uZSBvbiB0aGUgcGFnZS4gWW91IG1heSBjaGFuZ2UgaXQgdG86IFwicHJvZ3Jlc3NUb3BcIiwgXCJwcm9ncmVzc0JvdHRvbVwiIG9yIFwicHJvZ3Jlc3NUb3BCb3R0b21cIiB0byByZW5kZXIgb25seSBvbmUgZHluYW1pYyBwYW5lbCBhdCBvbmNlLiBUaGUgcHJvZ3Jlc3MgYW5kIG5hdmlnYXRpb24gZWxlbWVudHMgY2FuIGJlIHJlbmRyZWQgb24gdG9wLCBib3R0b20gb3IgYm90aC5cbiAgICovXG4gIHB1YmxpYyBnZXQgcmVuZGVyTW9kZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyZW5kZXJNb2RlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcmVuZGVyTW9kZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJlbmRlck1vZGVcIiwgdmFsKTtcbiAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnJlbmRlck1vZGVDaGFuZ2VkQ2FsbGJhY2spO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgd2hlbiByZW5kZXJNb2RlIGVxdWFscyB0byBcImxpc3RcIi5cbiAgICogQHNlZSByZW5kZXJNb2RlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzUmVuZGVyTW9kZUxpc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyTW9kZSA9PSBcImxpc3RcIjtcbiAgfVxuICBwdWJsaWMgc2V0VmlzaWJsZUluZGV4KHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmICghdGhpcy5pc1Zpc2libGUpIHJldHVybiAwO1xuICAgIHZhciBzdGFydEluZGV4ID0gdGhpcy5zaG93UXVlc3Rpb25OdW1iZXJzID09IFwib25TdXJ2ZXlcIiA/IHZhbHVlIDogMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY291bnRlciA9IHRoaXMuc2V0UGFuZWxWaXNpYmxlSW5kZXgoXG4gICAgICAgIHRoaXMucGFuZWxzW2ldLFxuICAgICAgICBzdGFydEluZGV4LFxuICAgICAgICB0aGlzLnNob3dRdWVzdGlvbk51bWJlcnMgIT0gXCJvZmZcIlxuICAgICAgKTtcbiAgICAgIGlmICh0aGlzLnNob3dRdWVzdGlvbk51bWJlcnMgPT0gXCJvblN1cnZleVwiKSB7XG4gICAgICAgIHN0YXJ0SW5kZXggKz0gY291bnRlcjtcbiAgICAgIH1cbiAgICB9XG4gICAgc3VwZXIuc2V0VmlzaWJsZUluZGV4KHRoaXMuc2hvd1F1ZXN0aW9uTnVtYmVycyAhPSBcIm9uU3VydmV5XCIgPyB2YWx1ZSA6IC0xKTtcbiAgICByZXR1cm4gdGhpcy5zaG93UXVlc3Rpb25OdW1iZXJzICE9IFwib25TdXJ2ZXlcIiA/IDEgOiBzdGFydEluZGV4IC0gdmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBzZXRQYW5lbFZpc2libGVJbmRleChcbiAgICBwYW5lbDogUGFuZWxNb2RlbCxcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIHNob3dJbmRleDogYm9vbGVhblxuICApOiBudW1iZXIge1xuICAgIGlmICghc2hvd0luZGV4KSB7XG4gICAgICBwYW5lbC5zZXRWaXNpYmxlSW5kZXgoLTEpO1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIHJldHVybiBwYW5lbC5zZXRWaXNpYmxlSW5kZXgoaW5kZXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSB3aGVuIGFuIGVuZCB1c2VyIG1heSBhZGQgYSBuZXcgcGFuZWwuIFRoZSBxdWVzdGlvbiBpcyBub3QgcmVhZCBvbmx5IGFuZCBwYW5lbENvdW50IGxlc3MgdGhhbiBtYXhQYW5lbENvdW50XG4gICAqIEBzZWUgaXNSZWFkT25seVxuICAgKiBAc2VlIHBhbmVsQ291bnRcbiAgICogQHNlZSBtYXhQYW5lbENvdW50XG4gICAqL1xuICBwdWJsaWMgZ2V0IGNhbkFkZFBhbmVsKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLnN1cnZleSAmJiB0aGlzLnN1cnZleS5pc0Rlc2lnbk1vZGUpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5hbGxvd0FkZFBhbmVsICYmXG4gICAgICAhdGhpcy5pc1JlYWRPbmx5ICYmXG4gICAgICB0aGlzLnBhbmVsQ291bnQgPCB0aGlzLm1heFBhbmVsQ291bnRcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgd2hlbiBhbiBlbmQgdXNlciBtYXkgcmVtb3ZlIGEgcGFuZWwuIFRoZSBxdWVzdGlvbiBpcyBub3QgcmVhZCBvbmx5IGFuZCBwYW5lbENvdW50IGlzIG1vcmUgdGhhbiBtaW5QYW5lbENvdW50XG4gICAqIEBzZWUgaXNSZWFkT25seVxuICAgKiBAc2VlIHBhbmVsQ291bnRcbiAgICogQHNlZSBtaW5QYW5lbENvdW50XG4gICAqL1xuICBwdWJsaWMgZ2V0IGNhblJlbW92ZVBhbmVsKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLnN1cnZleSAmJiB0aGlzLnN1cnZleS5pc0Rlc2lnbk1vZGUpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5hbGxvd1JlbW92ZVBhbmVsICYmXG4gICAgICAhdGhpcy5pc1JlYWRPbmx5ICYmXG4gICAgICB0aGlzLnBhbmVsQ291bnQgPiB0aGlzLm1pblBhbmVsQ291bnRcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZWJ1aWxkUGFuZWxzKCkge1xuICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSByZXR1cm47XG4gICAgdGhpcy5wcmVwYXJlVmFsdWVGb3JQYW5lbENyZWF0aW5nKCk7XG4gICAgdmFyIHBhbmVscyA9IFtdO1xuICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSkge1xuICAgICAgbmV3IFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbSh0aGlzLCB0aGlzLnRlbXBsYXRlKTtcbiAgICAgIHBhbmVscy5wdXNoKHRoaXMudGVtcGxhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFuZWxDb3VudDsgaSsrKSB7XG4gICAgICAgIHBhbmVscy5wdXNoKHRoaXMuY3JlYXRlTmV3UGFuZWwoKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucGFuZWxzLnNwbGljZSgwLCB0aGlzLnBhbmVscy5sZW5ndGgsIC4uLnBhbmVscyk7XG4gICAgdGhpcy5zZXRWYWx1ZUFmdGVyUGFuZWxzQ3JlYXRpbmcoKTtcbiAgICB0aGlzLnNldFBhbmVsc1N0YXRlKCk7XG4gICAgdGhpcy5yZVJ1bkNvbmRpdGlvbigpO1xuICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMucGFuZWxDb3VudENoYW5nZWRDYWxsYmFjayk7XG4gIH1cbiAgLyoqXG4gICAqIElmIGl0IGlzIG5vdCBlbXB0eSwgdGhlbiB0aGlzIHZhbHVlIGlzIHNldCB0byBldmVyeSBuZXcgcGFuZWwsIGluY2x1ZGluZyBwYW5lbHMgY3JlYXRlZCBpbml0aWFsbHksIHVubGVzcyB0aGUgZGVmYXVsdFZhbHVlIGlzIG5vdCBlbXB0eVxuICAgKiBAc2VlIGRlZmF1bHRWYWx1ZVxuICAgKiBAc2VlIGRlZmF1bHRWYWx1ZUZyb21MYXN0Um93XG4gICAqL1xuICBwdWJsaWMgZ2V0IGRlZmF1bHRQYW5lbFZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImRlZmF1bHRQYW5lbFZhbHVlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgZGVmYXVsdFBhbmVsVmFsdWUodmFsOiBhbnkpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJkZWZhdWx0UGFuZWxWYWx1ZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgaXQgdG8gdHJ1ZSB0byBjb3B5IHRoZSB2YWx1ZSBpbnRvIG5ldyBhZGRlZCBwYW5lbCBmcm9tIHRoZSBsYXN0IHBhbmVsLiBJZiBkZWZhdWx0UGFuZWxWYWx1ZSBpcyBzZXQgYW5kIHRoaXMgcHJvcGVydHkgZXF1YWxzIHRvIHRydWUsXG4gICAqIHRoZW4gdGhlIHZhbHVlIGZvciBuZXcgYWRkZWQgcGFuZWwgaXMgbWVyZ2luZy5cbiAgICogQHNlZSBkZWZhdWx0VmFsdWVcbiAgICogQHNlZSBkZWZhdWx0UGFuZWxWYWx1ZVxuICAgKi9cbiAgcHVibGljIGdldCBkZWZhdWx0VmFsdWVGcm9tTGFzdFBhbmVsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJkZWZhdWx0VmFsdWVGcm9tTGFzdFBhbmVsXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGRlZmF1bHRWYWx1ZUZyb21MYXN0UGFuZWwodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZGVmYXVsdFZhbHVlRnJvbUxhc3RQYW5lbFwiLCB2YWwpO1xuICB9XG4gIHByb3RlY3RlZCBpc0RlZmF1bHRWYWx1ZUVtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBzdXBlci5pc0RlZmF1bHRWYWx1ZUVtcHR5KCkgJiYgdGhpcy5pc1ZhbHVlRW1wdHkodGhpcy5kZWZhdWx0UGFuZWxWYWx1ZSlcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBzZXREZWZhdWx0VmFsdWUoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5pc1ZhbHVlRW1wdHkodGhpcy5kZWZhdWx0UGFuZWxWYWx1ZSkgfHxcbiAgICAgICF0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLmRlZmF1bHRWYWx1ZSlcbiAgICApIHtcbiAgICAgIHN1cGVyLnNldERlZmF1bHRWYWx1ZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaXNFbXB0eSgpIHx8IHRoaXMucGFuZWxDb3VudCA9PSAwKSByZXR1cm47XG4gICAgdmFyIG5ld1ZhbHVlID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhbmVsQ291bnQ7IGkrKykge1xuICAgICAgbmV3VmFsdWUucHVzaCh0aGlzLmRlZmF1bHRQYW5lbFZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICB9XG4gIHB1YmxpYyBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xuICAgIGlmICghdmFsIHx8ICFBcnJheS5pc0FycmF5KHZhbCkpIHJldHVybiB0cnVlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIXRoaXMuaXNSb3dFbXB0eSh2YWxbaV0pKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHB1YmxpYyBnZXRQcm9ncmVzc0luZm8oKTogSVByb2dyZXNzSW5mbyB7XG4gICAgcmV0dXJuIFN1cnZleUVsZW1lbnQuZ2V0UHJvZ3Jlc3NJbmZvQnlFbGVtZW50cyhcbiAgICAgIHRoaXMucGFuZWxzLFxuICAgICAgdGhpcy5pc1JlcXVpcmVkXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGlzUm93RW1wdHkodmFsOiBhbnkpIHtcbiAgICBmb3IgKHZhciBwcm9wIGluIHZhbCkge1xuICAgICAgaWYgKHZhbC5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBuZXcgZHluYW1pYyBwYW5lbCBiYXNlZCBvbiB0aGUgdGVtcGxhdGUgUGFuZWwuIEl0IGNoZWNrcyBpZiBjYW5BZGRQYW5lbCByZXR1cm5zIHRydWUgYW5kIHRoZW4gY2FsbHMgYWRkUGFuZWwgbWV0aG9kLlxuICAgKiBAc2VlIHRlbXBsYXRlXG4gICAqIEBzZWUgcGFuZWxDb3VudFxuICAgKiBAc2VlIHBhbmVsc1xuICAgKiBAc2VlIGNhbkFkZFBhbmVsXG4gICAqL1xuICBwdWJsaWMgYWRkUGFuZWxVSSgpOiBQYW5lbE1vZGVsIHtcbiAgICBpZiAoIXRoaXMuY2FuQWRkUGFuZWwpIHJldHVybiBudWxsO1xuICAgIHZhciBuZXdQYW5lbCA9IHRoaXMuYWRkUGFuZWwoKTtcbiAgICBpZiAodGhpcy5yZW5kZXJNb2RlID09PSBcImxpc3RcIiAmJiB0aGlzLnBhbmVsc1N0YXRlICE9PSBcImRlZmF1bHRcIikge1xuICAgICAgbmV3UGFuZWwuZXhwYW5kKCk7XG4gICAgfVxuICAgIHJldHVybiBuZXdQYW5lbDtcbiAgfVxuICAvKipcbiAgICogQWRkIGEgbmV3IGR5bmFtaWMgcGFuZWwgYmFzZWQgb24gdGhlIHRlbXBsYXRlIFBhbmVsLlxuICAgKiBAc2VlIHRlbXBsYXRlXG4gICAqIEBzZWUgcGFuZWxDb3VudFxuICAgKiBAc2VlIHBhbmVsc1xuICAgKi9cbiAgcHVibGljIGFkZFBhbmVsKCk6IFBhbmVsTW9kZWwge1xuICAgIHRoaXMucGFuZWxDb3VudCsrO1xuICAgIGlmICghdGhpcy5pc1JlbmRlck1vZGVMaXN0KSB7XG4gICAgICB0aGlzLmN1cnJlbnRJbmRleCA9IHRoaXMucGFuZWxDb3VudCAtIDE7XG4gICAgfVxuICAgIHZhciBuZXdWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgdmFyIGhhc01vZGlmaWVkID0gZmFsc2U7XG4gICAgaWYgKCF0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLmRlZmF1bHRQYW5lbFZhbHVlKSkge1xuICAgICAgaWYgKFxuICAgICAgICAhIW5ld1ZhbHVlICYmXG4gICAgICAgIEFycmF5LmlzQXJyYXkobmV3VmFsdWUpICYmXG4gICAgICAgIG5ld1ZhbHVlLmxlbmd0aCA9PSB0aGlzLnBhbmVsQ291bnRcbiAgICAgICkge1xuICAgICAgICBoYXNNb2RpZmllZCA9IHRydWU7XG4gICAgICAgIHRoaXMuY29weVZhbHVlKG5ld1ZhbHVlW25ld1ZhbHVlLmxlbmd0aCAtIDFdLCB0aGlzLmRlZmF1bHRQYW5lbFZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgdGhpcy5kZWZhdWx0VmFsdWVGcm9tTGFzdFBhbmVsICYmXG4gICAgICAhIW5ld1ZhbHVlICYmXG4gICAgICBBcnJheS5pc0FycmF5KG5ld1ZhbHVlKSAmJlxuICAgICAgbmV3VmFsdWUubGVuZ3RoID4gMSAmJlxuICAgICAgbmV3VmFsdWUubGVuZ3RoID09IHRoaXMucGFuZWxDb3VudFxuICAgICkge1xuICAgICAgaGFzTW9kaWZpZWQgPSB0cnVlO1xuICAgICAgdGhpcy5jb3B5VmFsdWUoXG4gICAgICAgIG5ld1ZhbHVlW25ld1ZhbHVlLmxlbmd0aCAtIDFdLFxuICAgICAgICBuZXdWYWx1ZVtuZXdWYWx1ZS5sZW5ndGggLSAyXVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGhhc01vZGlmaWVkKSB7XG4gICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgfVxuICAgIGlmICh0aGlzLnN1cnZleSkgdGhpcy5zdXJ2ZXkuZHluYW1pY1BhbmVsQWRkZWQodGhpcyk7XG4gICAgcmV0dXJuIHRoaXMucGFuZWxzW3RoaXMucGFuZWxDb3VudCAtIDFdO1xuICB9XG4gIHByaXZhdGUgY29weVZhbHVlKHNyYzogYW55LCBkZXN0OiBhbnkpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gZGVzdCkge1xuICAgICAgc3JjW2tleV0gPSBkZXN0W2tleV07XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDYWxsIHJlbW92ZVBhbmVsIGZ1bmN0aW9uLiBEbyBub3RoaW5nIGlzIGNhblJlbW92ZVBhbmVsIHJldHVybnMgZmFsc2UuIElmIGNvbmZpcm1EZWxldGUgc2V0IHRvIHRydWUsIGl0IHNob3dzIHRoZSBjb25maXJtYXRpb24gZGlhbG9nIGZpcnN0LlxuICAgKiBAcGFyYW0gdmFsdWUgYSBwYW5lbCBvciBwYW5lbCBpbmRleFxuICAgKiBAc2VlIHJlbW92ZVBhbmVsXG4gICAqIEBzZWUgY29uZmlybURlbGV0ZVxuICAgKiBAc2VlIGNvbmZpcm1EZWxldGVUZXh0XG4gICAqIEBzZWUgY2FuUmVtb3ZlUGFuZWxcbiAgICpcbiAgICovXG4gIHB1YmxpYyByZW1vdmVQYW5lbFVJKHZhbHVlOiBhbnkpIHtcbiAgICBpZiAoIXRoaXMuY2FuUmVtb3ZlUGFuZWwpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuY29uZmlybURlbGV0ZSB8fCBjb25maXJtQWN0aW9uKHRoaXMuY29uZmlybURlbGV0ZVRleHQpKSB7XG4gICAgICB0aGlzLnJlbW92ZVBhbmVsKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEdvZXMgdG8gdGhlIG5leHQgcGFuZWwgaW4gdGhlIFBhbmVsRHluYW1pY1xuICAgKlxuICAgKi9cbiAgcHVibGljIGdvVG9OZXh0UGFuZWwoKSB7XG4gICAgaWYgKHRoaXMucmVuZGVyTW9kZSAhPT0gXCJsaXN0XCIgJiYgdGhpcy5jdXJyZW50UGFuZWwuaGFzRXJyb3JzKCkpIHJldHVybjtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCsrO1xuICB9XG4gIC8qKlxuICAgKiBHb2VzIHRvIHRoZSBwcmV2aW91cyBwYW5lbCBpbiB0aGUgUGFuZWxEeW5hbWljXG4gICAqXG4gICAqL1xuICBwdWJsaWMgZ29Ub1ByZXZQYW5lbCgpIHtcbiAgICB0aGlzLmN1cnJlbnRJbmRleC0tO1xuICB9XG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgZHluYW1pYyBwYW5lbCBmcm9tIHRoZSBwYW5lbHMgYXJyYXkuXG4gICAqIEBwYXJhbSB2YWx1ZSBhIHBhbmVsIG9yIHBhbmVsIGluZGV4XG4gICAqIEBzZWUgcGFuZWxzXG4gICAqIEBzZWUgdGVtcGxhdGVcbiAgICovXG4gIHB1YmxpYyByZW1vdmVQYW5lbCh2YWx1ZTogYW55KSB7XG4gICAgdmFyIGluZGV4ID0gdGhpcy5nZXRQYW5lbEluZGV4KHZhbHVlKTtcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMucGFuZWxDb3VudCkgcmV0dXJuO1xuICAgIHZhciBwYW5lbCA9IHRoaXMucGFuZWxzW2luZGV4XTtcbiAgICB0aGlzLnBhbmVscy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHRoaXMudXBkYXRlQmluZGluZ3MoXCJwYW5lbENvdW50XCIsIHRoaXMucGFuZWxDb3VudCk7XG4gICAgdmFyIHZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICBpZiAoIXZhbHVlIHx8ICFBcnJheS5pc0FycmF5KHZhbHVlKSB8fCBpbmRleCA+PSB2YWx1ZS5sZW5ndGgpIHJldHVybjtcbiAgICB0aGlzLmlzVmFsdWVDaGFuZ2luZ0ludGVybmFsbHkgPSB0cnVlO1xuICAgIHZhbHVlLnNwbGljZShpbmRleCwgMSk7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMucGFuZWxDb3VudENoYW5nZWRDYWxsYmFjayk7XG4gICAgaWYgKHRoaXMuc3VydmV5KSB0aGlzLnN1cnZleS5keW5hbWljUGFuZWxSZW1vdmVkKHRoaXMsIGluZGV4LCBwYW5lbCk7XG4gICAgdGhpcy5pc1ZhbHVlQ2hhbmdpbmdJbnRlcm5hbGx5ID0gZmFsc2U7XG4gIH1cbiAgcHJpdmF0ZSBnZXRQYW5lbEluZGV4KHZhbDogYW55KTogbnVtYmVyIHtcbiAgICBpZiAoSGVscGVycy5pc051bWJlcih2YWwpKSByZXR1cm4gdmFsO1xuICAgIHZhciBpdGVtcyA9IHRoaXMuaXRlbXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMucGFuZWxzW2ldID09PSB2YWwgfHwgaXRlbXNbaV0gPT09IHZhbCkgcmV0dXJuIGk7XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfVxuICBwdWJsaWMgbG9jU3Ryc0NoYW5nZWQoKSB7XG4gICAgc3VwZXIubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICB2YXIgcGFuZWxzID0gdGhpcy5wYW5lbHM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHBhbmVsc1tpXS5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgY2xlYXJJbmNvcnJlY3RWYWx1ZXMoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5jbGVhckluY29ycmVjdFZhbHVlc0luUGFuZWwoaSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBjbGVhckVycm9ycygpIHtcbiAgICBzdXBlci5jbGVhckVycm9ycygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMucGFuZWxzW2ldLmNsZWFyRXJyb3JzKCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXRRdWVzdGlvbkZyb21BcnJheShuYW1lOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBJUXVlc3Rpb24ge1xuICAgIGlmIChpbmRleCA+PSB0aGlzLnBhbmVsQ291bnQpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLnBhbmVsc1tpbmRleF0uZ2V0UXVlc3Rpb25CeU5hbWUobmFtZSk7XG4gIH1cbiAgcHJpdmF0ZSBjbGVhckluY29ycmVjdFZhbHVlc0luUGFuZWwoaW5kZXg6IG51bWJlcikge1xuICAgIHZhciBwYW5lbCA9IHRoaXMucGFuZWxzW2luZGV4XTtcbiAgICBwYW5lbC5jbGVhckluY29ycmVjdFZhbHVlcygpO1xuICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xuICAgIHZhciB2YWx1ZXMgPSAhIXZhbCAmJiBpbmRleCA8IHZhbC5sZW5ndGggPyB2YWxbaW5kZXhdIDogbnVsbDtcbiAgICBpZiAoIXZhbHVlcykgcmV0dXJuO1xuICAgIHZhciBpc0NoYW5nZWQgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWVzKSB7XG4gICAgICBpZiAodGhpcy5nZXRTaGFyZWRRdWVzdGlvbkZyb21BcnJheShrZXksIGluZGV4KSkgY29udGludWU7XG4gICAgICB2YXIgcSA9IHBhbmVsLmdldFF1ZXN0aW9uQnlOYW1lKGtleSk7XG4gICAgICBpZiAoISFxKSBjb250aW51ZTtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pc2NvcnJlY3RWYWx1ZVdpdGhQb3N0UHJlZml4KHBhbmVsLCBrZXksIHNldHRpbmdzLmNvbW1lbnRQcmVmaXgpIHx8XG4gICAgICAgIHRoaXMuaXNjb3JyZWN0VmFsdWVXaXRoUG9zdFByZWZpeChcbiAgICAgICAgICBwYW5lbCxcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgc2V0dGluZ3MubWF0cml4VG90YWxWYWx1ZVBvc3RGaXhcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIGRlbGV0ZSB2YWx1ZXNba2V5XTtcbiAgICAgIGlzQ2hhbmdlZCA9IHRydWU7XG4gICAgfVxuICAgIGlmIChpc0NoYW5nZWQpIHtcbiAgICAgIHZhbFtpbmRleF0gPSB2YWx1ZXM7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGlzY29ycmVjdFZhbHVlV2l0aFBvc3RQcmVmaXgoXG4gICAgcGFuZWw6IFBhbmVsTW9kZWwsXG4gICAga2V5OiBzdHJpbmcsXG4gICAgcG9zdFByZWZpeDogc3RyaW5nXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmIChrZXkuaW5kZXhPZihwb3N0UHJlZml4KSAhPT0ga2V5Lmxlbmd0aCAtIHBvc3RQcmVmaXgubGVuZ3RoKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAhIXBhbmVsLmdldFF1ZXN0aW9uQnlOYW1lKGtleS5zdWJzdHIoMCwga2V5LmluZGV4T2YocG9zdFByZWZpeCkpKTtcbiAgfVxuICBwdWJsaWMgZ2V0U2hhcmVkUXVlc3Rpb25Gcm9tQXJyYXkoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHBhbmVsSW5kZXg6IG51bWJlclxuICApOiBRdWVzdGlvbiB7XG4gICAgcmV0dXJuICEhdGhpcy5zdXJ2ZXkgJiYgISF0aGlzLnZhbHVlTmFtZVxuICAgICAgPyA8UXVlc3Rpb24+KFxuICAgICAgICAgIHRoaXMuc3VydmV5LmdldFF1ZXN0aW9uQnlWYWx1ZU5hbWVGcm9tQXJyYXkoXG4gICAgICAgICAgICB0aGlzLnZhbHVlTmFtZSxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBwYW5lbEluZGV4XG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICA6IG51bGw7XG4gIH1cbiAgcHVibGljIGFkZENvbmRpdGlvbk9iamVjdHNCeUNvbnRleHQoXG4gICAgb2JqZWN0czogQXJyYXk8SUNvbmRpdGlvbk9iamVjdD4sXG4gICAgY29udGV4dDogYW55XG4gICkge1xuICAgIHZhciBoYXNDb250ZXh0ID0gISFjb250ZXh0XG4gICAgICA/IHRoaXMudGVtcGxhdGUucXVlc3Rpb25zLmluZGV4T2YoY29udGV4dCkgPiAtMVxuICAgICAgOiBmYWxzZTtcbiAgICB2YXIgcHJlZml4TmFtZSA9IHRoaXMuZ2V0VmFsdWVOYW1lKCkgKyBcIlswXS5cIjtcbiAgICB2YXIgcHJlZml4VGV4dCA9IHRoaXMucHJvY2Vzc2VkVGl0bGUgKyBcIlswXS5cIjtcbiAgICB2YXIgcGFuZWxPYmpzID0gbmV3IEFycmF5PElDb25kaXRpb25PYmplY3Q+KCk7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMudGVtcGxhdGUucXVlc3Rpb25zO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBxdWVzdGlvbnNbaV0uYWRkQ29uZGl0aW9uT2JqZWN0c0J5Q29udGV4dChwYW5lbE9ianMsIGNvbnRleHQpO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhbmVsT2Jqcy5sZW5ndGg7IGkrKykge1xuICAgICAgb2JqZWN0cy5wdXNoKHtcbiAgICAgICAgbmFtZTogcHJlZml4TmFtZSArIHBhbmVsT2Jqc1tpXS5uYW1lLFxuICAgICAgICB0ZXh0OiBwcmVmaXhUZXh0ICsgcGFuZWxPYmpzW2ldLnRleHQsXG4gICAgICAgIHF1ZXN0aW9uOiBwYW5lbE9ianNbaV0ucXVlc3Rpb24sXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGhhc0NvbnRleHQpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFuZWxPYmpzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChwYW5lbE9ianNbaV0ucXVlc3Rpb24gPT0gY29udGV4dCkgY29udGludWU7XG4gICAgICAgIG9iamVjdHMucHVzaCh7XG4gICAgICAgICAgbmFtZTogXCJwYW5lbC5cIiArIHBhbmVsT2Jqc1tpXS5uYW1lLFxuICAgICAgICAgIHRleHQ6IFwicGFuZWwuXCIgKyBwYW5lbE9ianNbaV0udGV4dCxcbiAgICAgICAgICBxdWVzdGlvbjogcGFuZWxPYmpzW2ldLnF1ZXN0aW9uLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHVibGljIGdldENvbmRpdGlvbkpzb24ob3BlcmF0b3I6IHN0cmluZyA9IG51bGwsIHBhdGg6IHN0cmluZyA9IG51bGwpOiBhbnkge1xuICAgIGlmICghcGF0aCkgcmV0dXJuIHN1cGVyLmdldENvbmRpdGlvbkpzb24ob3BlcmF0b3IsIHBhdGgpO1xuICAgIHZhciBxdWVzdGlvbk5hbWUgPSBwYXRoO1xuICAgIHZhciBwb3MgPSBwYXRoLmluZGV4T2YoXCIuXCIpO1xuICAgIGlmIChwb3MgPiAtMSkge1xuICAgICAgcXVlc3Rpb25OYW1lID0gcGF0aC5zdWJzdHIoMCwgcG9zKTtcbiAgICAgIHBhdGggPSBwYXRoLnN1YnN0cihwb3MgKyAxKTtcbiAgICB9XG4gICAgdmFyIHF1ZXN0aW9uID0gdGhpcy50ZW1wbGF0ZS5nZXRRdWVzdGlvbkJ5TmFtZShxdWVzdGlvbk5hbWUpO1xuICAgIGlmICghcXVlc3Rpb24pIHJldHVybiBudWxsO1xuICAgIHJldHVybiBxdWVzdGlvbi5nZXRDb25kaXRpb25Kc29uKG9wZXJhdG9yLCBwYXRoKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25SZWFkT25seUNoYW5nZWQoKSB7XG4gICAgdmFyIHJlYWRPbmx5ID0gdGhpcy5pc1JlYWRPbmx5O1xuICAgIHRoaXMudGVtcGxhdGUucmVhZE9ubHkgPSByZWFkT25seTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnBhbmVsc1tpXS5yZWFkT25seSA9IHJlYWRPbmx5O1xuICAgIH1cbiAgICBzdXBlci5vblJlYWRPbmx5Q2hhbmdlZCgpO1xuICB9XG4gIHB1YmxpYyBvblN1cnZleUxvYWQoKSB7XG4gICAgdGhpcy50ZW1wbGF0ZS5yZWFkT25seSA9IHRoaXMuaXNSZWFkT25seTtcbiAgICB0aGlzLnRlbXBsYXRlLm9uU3VydmV5TG9hZCgpO1xuICAgIGlmICh0aGlzLmxvYWRpbmdQYW5lbENvdW50ID4gMCkge1xuICAgICAgdGhpcy5wYW5lbENvdW50ID0gdGhpcy5sb2FkaW5nUGFuZWxDb3VudDtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlKSB7XG4gICAgICB0aGlzLnJlYnVpbGRQYW5lbHMoKTtcbiAgICB9XG4gICAgdGhpcy5zZXRQYW5lbHNTdXJ2ZXlJbXBsKCk7XG4gICAgdGhpcy5zZXRQYW5lbHNTdGF0ZSgpO1xuICAgIHRoaXMuYXNzaWduT25Qcm9wZXJ0eUNoYW5nZWRUb1RlbXBsYXRlKCk7XG4gICAgc3VwZXIub25TdXJ2ZXlMb2FkKCk7XG4gIH1cbiAgcHVibGljIG9uRmlyc3RSZW5kZXJpbmcoKSB7XG4gICAgdGhpcy50ZW1wbGF0ZS5vbkZpcnN0UmVuZGVyaW5nKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5wYW5lbHNbaV0ub25GaXJzdFJlbmRlcmluZygpO1xuICAgIH1cbiAgICBzdXBlci5vbkZpcnN0UmVuZGVyaW5nKCk7XG4gIH1cbiAgcHVibGljIHJ1bkNvbmRpdGlvbih2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIHN1cGVyLnJ1bkNvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIHRoaXMucnVuUGFuZWxzQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gIH1cbiAgcHJpdmF0ZSByZVJ1bkNvbmRpdGlvbigpIHtcbiAgICBpZiAoIXRoaXMuZGF0YSkgcmV0dXJuO1xuICAgIHRoaXMucnVuQ29uZGl0aW9uKFxuICAgICAgdGhpcy5nZXREYXRhRmlsdGVyZWRWYWx1ZXMoKSxcbiAgICAgIHRoaXMuZ2V0RGF0YUZpbHRlcmVkUHJvcGVydGllcygpXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcnVuUGFuZWxzQ29uZGl0aW9uKFxuICAgIHZhbHVlczogSGFzaFRhYmxlPGFueT4sXG4gICAgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT5cbiAgKSB7XG4gICAgdmFyIGNhY2hlZFZhbHVlczogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgaWYgKHZhbHVlcyAmJiB2YWx1ZXMgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgIGNhY2hlZFZhbHVlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodmFsdWVzKSk7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwYW5lbFZhbHVlcyA9IHRoaXMuZ2V0UGFuZWxJdGVtRGF0YSh0aGlzLnBhbmVsc1tpXS5kYXRhKTtcbiAgICAgIC8vU2hvdWxkIGJlIHVuaXF1ZSBmb3IgZXZlcnkgcGFuZWwgZHVlIGFzeW5jIGV4cHJlc3Npb24gc3VwcG9ydFxuICAgICAgdmFyIG5ld1ZhbHVlcyA9IEhlbHBlcnMuY3JlYXRlQ29weShjYWNoZWRWYWx1ZXMpO1xuICAgICAgbmV3VmFsdWVzW1xuICAgICAgICBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0uSXRlbVZhcmlhYmxlTmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICBdID0gcGFuZWxWYWx1ZXM7XG4gICAgICBuZXdWYWx1ZXNbUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtLkluZGV4VmFyaWFibGVOYW1lLnRvTG93ZXJDYXNlKCldID0gaTtcbiAgICAgIHRoaXMucGFuZWxzW2ldLnJ1bkNvbmRpdGlvbihuZXdWYWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIH1cbiAgfVxuICBvbkFueVZhbHVlQ2hhbmdlZChuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlci5vbkFueVZhbHVlQ2hhbmdlZChuYW1lKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnBhbmVsc1tpXS5vbkFueVZhbHVlQ2hhbmdlZChuYW1lKTtcbiAgICAgIHRoaXMucGFuZWxzW2ldLm9uQW55VmFsdWVDaGFuZ2VkKFxuICAgICAgICBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0uSXRlbVZhcmlhYmxlTmFtZVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBoYXNLZXlzRHVwbGljYXRlZChmaXJlQ2FsbGJhY2s6IGJvb2xlYW4sIHJlYzogYW55ID0gbnVsbCkge1xuICAgIHZhciBrZXlWYWx1ZXM6IEFycmF5PGFueT4gPSBbXTtcbiAgICB2YXIgcmVzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlcyA9XG4gICAgICAgIHRoaXMuaXNWYWx1ZUR1cGxpY2F0ZWQodGhpcy5wYW5lbHNbaV0sIGtleVZhbHVlcywgcmVjLCBmaXJlQ2FsbGJhY2spIHx8XG4gICAgICAgIHJlcztcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIHVwZGF0ZVBhbmVsc0NvbnRhaW5zRXJyb3JzKCkge1xuICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuY2hhbmdpbmdWYWx1ZVF1ZXN0aW9uO1xuICAgIHZhciBwYXJlbnQgPSA8UGFuZWw+cXVlc3Rpb24ucGFyZW50O1xuICAgIHdoaWxlICghIXBhcmVudCkge1xuICAgICAgcGFyZW50LnVwZGF0ZUNvbnRhaW5zRXJyb3JzKCk7XG4gICAgICBwYXJlbnQgPSA8UGFuZWw+cGFyZW50LnBhcmVudDtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVDb250YWluc0Vycm9ycygpO1xuICB9XG4gIHB1YmxpYyBoYXNFcnJvcnMoZmlyZUNhbGxiYWNrOiBib29sZWFuID0gdHJ1ZSwgcmVjOiBhbnkgPSBudWxsKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNWYWx1ZUNoYW5naW5nSW50ZXJuYWxseSkgcmV0dXJuIGZhbHNlO1xuICAgIHZhciByZXMgPSBmYWxzZTtcbiAgICBpZiAoISF0aGlzLmNoYW5naW5nVmFsdWVRdWVzdGlvbikge1xuICAgICAgdmFyIHJlcyA9IHRoaXMuY2hhbmdpbmdWYWx1ZVF1ZXN0aW9uLmhhc0Vycm9ycyhmaXJlQ2FsbGJhY2ssIHJlYyk7XG4gICAgICByZXMgPSB0aGlzLmhhc0tleXNEdXBsaWNhdGVkKGZpcmVDYWxsYmFjaywgcmVjKSB8fCByZXM7XG4gICAgICB0aGlzLnVwZGF0ZVBhbmVsc0NvbnRhaW5zRXJyb3JzKCk7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZXJyb3NJblBhbmVscyA9IHRoaXMuaGFzRXJyb3JJblBhbmVscyhmaXJlQ2FsbGJhY2ssIHJlYyk7XG4gICAgICByZXR1cm4gc3VwZXIuaGFzRXJyb3JzKGZpcmVDYWxsYmFjaykgfHwgZXJyb3NJblBhbmVscztcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGdldENvbnRhaW5zRXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgIHZhciByZXMgPSBzdXBlci5nZXRDb250YWluc0Vycm9ycygpO1xuICAgIGlmIChyZXMpIHJldHVybiByZXM7XG4gICAgdmFyIHBhbmVscyA9IHRoaXMucGFuZWxzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocGFuZWxzW2ldLmNvbnRhaW5zRXJyb3JzKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHByb3RlY3RlZCBnZXRJc0Fuc3dlcmVkKCk6IGJvb2xlYW4ge1xuICAgIGlmICghc3VwZXIuZ2V0SXNBbnN3ZXJlZCgpKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHBhbmVscyA9IHRoaXMucGFuZWxzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdmlzaWJsZVF1ZXN0aW9ucyA9IDxBcnJheTxhbnk+PltdO1xuICAgICAgcGFuZWxzW2ldLmFkZFF1ZXN0aW9uc1RvTGlzdCh2aXNpYmxlUXVlc3Rpb25zLCB0cnVlKTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdmlzaWJsZVF1ZXN0aW9ucy5sZW5ndGg7IGorKykge1xuICAgICAgICBpZiAoIXZpc2libGVRdWVzdGlvbnNbal0uaXNBbnN3ZXJlZCkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgY2xlYXJWYWx1ZUlmSW52aXNpYmxlKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLnBhbmVsc1tpXS5xdWVzdGlvbnM7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHF1ZXN0aW9ucy5sZW5ndGg7IGorKykge1xuICAgICAgICBxdWVzdGlvbnNbal0uY2xlYXJWYWx1ZUlmSW52aXNpYmxlKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHN1cGVyLmNsZWFyVmFsdWVJZkludmlzaWJsZSgpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRJc1J1bm5pbmdWYWxpZGF0b3JzKCk6IGJvb2xlYW4ge1xuICAgIGlmIChzdXBlci5nZXRJc1J1bm5pbmdWYWxpZGF0b3JzKCkpIHJldHVybiB0cnVlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLnBhbmVsc1tpXS5xdWVzdGlvbnM7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHF1ZXN0aW9ucy5sZW5ndGg7IGorKykge1xuICAgICAgICBpZiAocXVlc3Rpb25zW2pdLmlzUnVubmluZ1ZhbGlkYXRvcnMpIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGdldEFsbEVycm9ycygpOiBBcnJheTxTdXJ2ZXlFcnJvcj4ge1xuICAgIHZhciByZXN1bHQgPSBzdXBlci5nZXRBbGxFcnJvcnMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5wYW5lbHNbaV0ucXVlc3Rpb25zO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBxdWVzdGlvbnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIGVycm9ycyA9IHF1ZXN0aW9uc1tqXS5nZXRBbGxFcnJvcnMoKTtcbiAgICAgICAgaWYgKGVycm9ycyAmJiBlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoZXJyb3JzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHByb3RlY3RlZCBnZXREaXNwbGF5VmFsdWVDb3JlKGtleXNBc1RleHQ6IGJvb2xlYW4sIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIHZhciB2YWx1ZXMgPSB0aGlzLmdldFVuYmluZFZhbHVlKHZhbHVlKTtcbiAgICBpZiAoIXZhbHVlcyB8fCAhQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSByZXR1cm4gdmFsdWVzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoICYmIGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2YWwgPSB2YWx1ZXNbaV07XG4gICAgICBpZiAoIXZhbCkgY29udGludWU7XG4gICAgICB2YWx1ZXNbaV0gPSB0aGlzLmdldFBhbmVsRGlzcGxheVZhbHVlKGksIHZhbCwga2V5c0FzVGV4dCk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZXM7XG4gIH1cblxuICBwcml2YXRlIGdldFBhbmVsRGlzcGxheVZhbHVlKFxuICAgIHBhbmVsSW5kZXg6IG51bWJlcixcbiAgICB2YWw6IGFueSxcbiAgICBrZXlzQXNUZXh0OiBib29sZWFuXG4gICk6IGFueSB7XG4gICAgaWYgKCF2YWwpIHJldHVybiB2YWw7XG4gICAgdmFyIHBhbmVsID0gdGhpcy5wYW5lbHNbcGFuZWxJbmRleF07XG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh2YWwpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICB2YXIgcXVlc3Rpb24gPSBwYW5lbC5nZXRRdWVzdGlvbkJ5VmFsdWVOYW1lKGtleSk7XG4gICAgICBpZiAoIXF1ZXN0aW9uKSB7XG4gICAgICAgIHF1ZXN0aW9uID0gdGhpcy5nZXRTaGFyZWRRdWVzdGlvbkZyb21BcnJheShrZXksIHBhbmVsSW5kZXgpO1xuICAgICAgfVxuICAgICAgaWYgKCEhcXVlc3Rpb24pIHtcbiAgICAgICAgdmFyIHFWYWx1ZSA9IHF1ZXN0aW9uLmdldERpc3BsYXlWYWx1ZShrZXlzQXNUZXh0LCB2YWxba2V5XSk7XG4gICAgICAgIHZhbFtrZXldID0gcVZhbHVlO1xuICAgICAgICBpZiAoa2V5c0FzVGV4dCAmJiAhIXF1ZXN0aW9uLnRpdGxlICYmIHF1ZXN0aW9uLnRpdGxlICE9PSBrZXkpIHtcbiAgICAgICAgICB2YWxbcXVlc3Rpb24udGl0bGVdID0gcVZhbHVlO1xuICAgICAgICAgIGRlbGV0ZSB2YWxba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsO1xuICB9XG4gIHByaXZhdGUgaGFzRXJyb3JJblBhbmVscyhmaXJlQ2FsbGJhY2s6IGJvb2xlYW4sIHJlYzogYW55KTogYm9vbGVhbiB7XG4gICAgdmFyIHJlcyA9IGZhbHNlO1xuICAgIHZhciBwYW5lbHMgPSB0aGlzLnBhbmVscztcbiAgICB2YXIga2V5VmFsdWVzOiBBcnJheTxhbnk+ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuc2V0T25Db21wbGV0ZUFzeW5jSW5QYW5lbChwYW5lbHNbaV0pO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHBubEVycm9yID0gcGFuZWxzW2ldLmhhc0Vycm9ycyhcbiAgICAgICAgZmlyZUNhbGxiYWNrLFxuICAgICAgICAhIXJlYyAmJiByZWMuZm9jdXNlT25GaXJzdEVycm9yLFxuICAgICAgICByZWNcbiAgICAgICk7XG4gICAgICBwbmxFcnJvciA9IHRoaXMuaXNWYWx1ZUR1cGxpY2F0ZWQocGFuZWxzW2ldLCBrZXlWYWx1ZXMsIHJlYykgfHwgcG5sRXJyb3I7XG4gICAgICBpZiAoIXRoaXMuaXNSZW5kZXJNb2RlTGlzdCAmJiBwbmxFcnJvciAmJiAhcmVzKSB7XG4gICAgICAgIHRoaXMuY3VycmVudEluZGV4ID0gaTtcbiAgICAgIH1cbiAgICAgIHJlcyA9IHBubEVycm9yIHx8IHJlcztcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIHNldE9uQ29tcGxldGVBc3luY0luUGFuZWwocGFuZWw6IFBhbmVsTW9kZWwpIHtcbiAgICB2YXIgcXVlc3Rpb25zID0gcGFuZWwucXVlc3Rpb25zO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBxdWVzdGlvbnNbaV0ub25Db21wbGV0ZWRBc3luY1ZhbGlkYXRvcnMgPSAoaGFzRXJyb3JzOiBib29sZWFuKSA9PiB7XG4gICAgICAgIHRoaXMucmFpc2VPbkNvbXBsZXRlZEFzeW5jVmFsaWRhdG9ycygpO1xuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBpc1ZhbHVlRHVwbGljYXRlZChcbiAgICBwYW5lbDogUGFuZWxNb2RlbCxcbiAgICBrZXlWYWx1ZXM6IEFycmF5PGFueT4sXG4gICAgcmVjOiBhbnksXG4gICAgZmlyZUNhbGxiYWNrPzogYm9vbGVhblxuICApOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMua2V5TmFtZSkgcmV0dXJuIGZhbHNlO1xuICAgIHZhciBxdWVzdGlvbiA9IDxRdWVzdGlvbj5wYW5lbC5nZXRRdWVzdGlvbkJ5VmFsdWVOYW1lKHRoaXMua2V5TmFtZSk7XG4gICAgaWYgKCFxdWVzdGlvbiB8fCBxdWVzdGlvbi5pc0VtcHR5KCkpIHJldHVybiBmYWxzZTtcbiAgICB2YXIgdmFsdWUgPSBxdWVzdGlvbi52YWx1ZTtcbiAgICBpZiAoXG4gICAgICAhIXRoaXMuY2hhbmdpbmdWYWx1ZVF1ZXN0aW9uICYmXG4gICAgICBxdWVzdGlvbiAhPSB0aGlzLmNoYW5naW5nVmFsdWVRdWVzdGlvblxuICAgICkge1xuICAgICAgcXVlc3Rpb24uaGFzRXJyb3JzKGZpcmVDYWxsYmFjaywgcmVjKTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh2YWx1ZSA9PSBrZXlWYWx1ZXNbaV0pIHtcbiAgICAgICAgcXVlc3Rpb24uYWRkRXJyb3IoXG4gICAgICAgICAgbmV3IEtleUR1cGxpY2F0aW9uRXJyb3IodGhpcy5rZXlEdXBsaWNhdGlvbkVycm9yLCB0aGlzKVxuICAgICAgICApO1xuICAgICAgICBpZiAoISFyZWMgJiYgIXJlYy5maXJzdEVycm9yUXVlc3Rpb24pIHtcbiAgICAgICAgICByZWMuZmlyc3RFcnJvclF1ZXN0aW9uID0gcXVlc3Rpb247XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGtleVZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZU5ld1BhbmVsKCk6IFBhbmVsTW9kZWwge1xuICAgIHZhciBwYW5lbCA9IHRoaXMuY3JlYXRlQW5kU2V0dXBOZXdQYW5lbE9iamVjdCgpO1xuICAgIHZhciBqc29uID0gdGhpcy50ZW1wbGF0ZS50b0pTT04oKTtcbiAgICBuZXcgSnNvbk9iamVjdCgpLnRvT2JqZWN0KGpzb24sIHBhbmVsKTtcbiAgICBwYW5lbC5yZW5kZXJXaWR0aCA9IFwiMTAwJVwiO1xuICAgIHBhbmVsLnVwZGF0ZUN1c3RvbVdpZGdldHMoKTtcbiAgICBuZXcgUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtKHRoaXMsIHBhbmVsKTtcbiAgICBwYW5lbC5vbkZpcnN0UmVuZGVyaW5nKCk7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHBhbmVsLnF1ZXN0aW9ucztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgcXVlc3Rpb25zW2ldLnNldFBhcmVudFF1ZXN0aW9uKHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4gcGFuZWw7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZUFuZFNldHVwTmV3UGFuZWxPYmplY3QoKTogUGFuZWxNb2RlbCB7XG4gICAgdmFyIHBhbmVsID0gdGhpcy5jcmVhdGVOZXdQYW5lbE9iamVjdCgpO1xuICAgIHBhbmVsLmlzSW50ZXJhY3RpdmVEZXNpZ25FbGVtZW50ID0gZmFsc2U7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHBhbmVsLm9uR2V0UXVlc3Rpb25UaXRsZUxvY2F0aW9uID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gc2VsZi5nZXRUZW1wbGF0ZVF1ZXN0aW9uVGl0bGVMb2NhdGlvbigpO1xuICAgIH07XG4gICAgcmV0dXJuIHBhbmVsO1xuICB9XG4gIHByaXZhdGUgZ2V0VGVtcGxhdGVRdWVzdGlvblRpdGxlTG9jYXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVUaXRsZUxvY2F0aW9uICE9IFwiZGVmYXVsdFwiXG4gICAgICA/IHRoaXMudGVtcGxhdGVUaXRsZUxvY2F0aW9uXG4gICAgICA6IHRoaXMuZ2V0VGl0bGVMb2NhdGlvbkNvcmUoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTmV3UGFuZWxPYmplY3QoKTogUGFuZWxNb2RlbCB7XG4gICAgcmV0dXJuIFNlcmlhbGl6ZXIuY3JlYXRlQ2xhc3MoXCJwYW5lbFwiKTtcbiAgfVxuICBwcml2YXRlIHNldFBhbmVsQ291bnRCYXNlZE9uVmFsdWUoKSB7XG4gICAgaWYgKHRoaXMuaXNWYWx1ZUNoYW5naW5nSW50ZXJuYWxseSB8fCB0aGlzLmlzRGVzaWduTW9kZSkgcmV0dXJuO1xuICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xuICAgIHZhciBuZXdQYW5lbENvdW50ID0gdmFsICYmIEFycmF5LmlzQXJyYXkodmFsKSA/IHZhbC5sZW5ndGggOiAwO1xuICAgIGlmIChuZXdQYW5lbENvdW50ID09IDAgJiYgdGhpcy5sb2FkaW5nUGFuZWxDb3VudCA+IDApIHtcbiAgICAgIG5ld1BhbmVsQ291bnQgPSB0aGlzLmxvYWRpbmdQYW5lbENvdW50O1xuICAgIH1cbiAgICB0aGlzLnBhbmVsQ291bnQgPSBuZXdQYW5lbENvdW50O1xuICB9XG4gIHB1YmxpYyBzZXRRdWVzdGlvblZhbHVlKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBzdXBlci5zZXRRdWVzdGlvblZhbHVlKG5ld1ZhbHVlLCBmYWxzZSk7XG4gICAgdGhpcy5zZXRQYW5lbENvdW50QmFzZWRPblZhbHVlKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5wYW5lbFVwZGF0ZVZhbHVlRnJvbVN1cnZleSh0aGlzLnBhbmVsc1tpXSk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlSXNBbnN3ZXJlZCgpO1xuICB9XG4gIHB1YmxpYyBvblN1cnZleVZhbHVlQ2hhbmdlZChuZXdWYWx1ZTogYW55KSB7XG4gICAgc3VwZXIub25TdXJ2ZXlWYWx1ZUNoYW5nZWQobmV3VmFsdWUpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMucGFuZWxTdXJ2ZXlWYWx1ZUNoYW5nZWQodGhpcy5wYW5lbHNbaV0pO1xuICAgIH1cbiAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zZXRWYWx1ZUJhc2VkT25QYW5lbENvdW50KCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgcGFuZWxVcGRhdGVWYWx1ZUZyb21TdXJ2ZXkocGFuZWw6IFBhbmVsTW9kZWwpIHtcbiAgICB2YXIgcXVlc3Rpb25zID0gcGFuZWwucXVlc3Rpb25zO1xuICAgIHZhciB2YWx1ZXMgPSB0aGlzLmdldFBhbmVsSXRlbURhdGEocGFuZWwuZGF0YSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxID0gcXVlc3Rpb25zW2ldO1xuICAgICAgcS51cGRhdGVWYWx1ZUZyb21TdXJ2ZXkodmFsdWVzW3EuZ2V0VmFsdWVOYW1lKCldKTtcbiAgICAgIHEudXBkYXRlQ29tbWVudEZyb21TdXJ2ZXkoXG4gICAgICAgIHZhbHVlc1txLmdldFZhbHVlTmFtZSgpICsgc2V0dGluZ3MuY29tbWVudFByZWZpeF1cbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgcGFuZWxTdXJ2ZXlWYWx1ZUNoYW5nZWQocGFuZWw6IFBhbmVsTW9kZWwpIHtcbiAgICB2YXIgcXVlc3Rpb25zID0gcGFuZWwucXVlc3Rpb25zO1xuICAgIHZhciB2YWx1ZXMgPSB0aGlzLmdldFBhbmVsSXRlbURhdGEocGFuZWwuZGF0YSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxID0gcXVlc3Rpb25zW2ldO1xuICAgICAgcS5vblN1cnZleVZhbHVlQ2hhbmdlZCh2YWx1ZXNbcS5nZXRWYWx1ZU5hbWUoKV0pO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgb25TZXREYXRhKCkge1xuICAgIHN1cGVyLm9uU2V0RGF0YSgpO1xuICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSkge1xuICAgICAgdGhpcy5zZXRUZW1wbGF0ZVBhbmVsU3VydmV5SW1wbCgpO1xuICAgICAgdGhpcy5yZWJ1aWxkUGFuZWxzKCk7XG4gICAgfVxuICB9XG4gIC8vSVF1ZXN0aW9uUGFuZWxEeW5hbWljRGF0YVxuICBnZXRJdGVtSW5kZXgoaXRlbTogSVN1cnZleURhdGEpOiBudW1iZXIge1xuICAgIHZhciByZXMgPSB0aGlzLml0ZW1zLmluZGV4T2YoaXRlbSk7XG4gICAgcmV0dXJuIHJlcyA+IC0xID8gcmVzIDogdGhpcy5pdGVtcy5sZW5ndGg7XG4gIH1cbiAgZ2V0UGFuZWxJdGVtRGF0YShpdGVtOiBJU3VydmV5RGF0YSk6IGFueSB7XG4gICAgdmFyIGl0ZW1zID0gdGhpcy5pdGVtcztcbiAgICB2YXIgaW5kZXggPSBpdGVtcy5pbmRleE9mKGl0ZW0pO1xuICAgIHZhciBxVmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgIGlmIChpbmRleCA8IDAgJiYgQXJyYXkuaXNBcnJheShxVmFsdWUpICYmIHFWYWx1ZS5sZW5ndGggPiBpdGVtcy5sZW5ndGgpIHtcbiAgICAgIGluZGV4ID0gaXRlbXMubGVuZ3RoO1xuICAgIH1cbiAgICBpZiAoaW5kZXggPCAwKSByZXR1cm4ge307XG4gICAgaWYgKCFxVmFsdWUgfHwgIUFycmF5LmlzQXJyYXkocVZhbHVlKSB8fCBxVmFsdWUubGVuZ3RoIDw9IGluZGV4KSByZXR1cm4ge307XG4gICAgcmV0dXJuIHFWYWx1ZVtpbmRleF07XG4gIH1cbiAgcHJpdmF0ZSBpc1NldFBhbmVsSXRlbURhdGE6IEFycmF5PHN0cmluZz47XG4gIHNldFBhbmVsSXRlbURhdGEoaXRlbTogSVN1cnZleURhdGEsIG5hbWU6IHN0cmluZywgdmFsOiBhbnkpIHtcbiAgICBpZiAodGhpcy5pc1NldFBhbmVsSXRlbURhdGEgJiYgdGhpcy5pc1NldFBhbmVsSXRlbURhdGEuaW5kZXhPZihuYW1lKSA+IC0xKVxuICAgICAgcmV0dXJuO1xuICAgIGlmICghdGhpcy5pc1NldFBhbmVsSXRlbURhdGEpIHRoaXMuaXNTZXRQYW5lbEl0ZW1EYXRhID0gW107XG4gICAgdGhpcy5pc1NldFBhbmVsSXRlbURhdGEucHVzaChuYW1lKTtcbiAgICB2YXIgaXRlbXMgPSB0aGlzLml0ZW1zO1xuICAgIHZhciBpbmRleCA9IGl0ZW1zLmluZGV4T2YoaXRlbSk7XG4gICAgaWYgKGluZGV4IDwgMCkgaW5kZXggPSBpdGVtcy5sZW5ndGg7XG4gICAgdmFyIHFWYWx1ZSA9IHRoaXMuZ2V0VW5iaW5kVmFsdWUodGhpcy52YWx1ZSk7XG4gICAgaWYgKCFxVmFsdWUgfHwgIUFycmF5LmlzQXJyYXkocVZhbHVlKSkge1xuICAgICAgcVZhbHVlID0gW107XG4gICAgfVxuICAgIGlmIChxVmFsdWUubGVuZ3RoIDw9IGluZGV4KSB7XG4gICAgICBmb3IgKHZhciBpID0gcVZhbHVlLmxlbmd0aDsgaSA8PSBpbmRleDsgaSsrKSB7XG4gICAgICAgIHFWYWx1ZS5wdXNoKHt9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFxVmFsdWVbaW5kZXhdKSBxVmFsdWVbaW5kZXhdID0ge307XG4gICAgaWYgKCF0aGlzLmlzVmFsdWVFbXB0eSh2YWwpKSB7XG4gICAgICBxVmFsdWVbaW5kZXhdW25hbWVdID0gdmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgcVZhbHVlW2luZGV4XVtuYW1lXTtcbiAgICB9XG4gICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPCB0aGlzLnBhbmVscy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuY2hhbmdpbmdWYWx1ZVF1ZXN0aW9uID0gdGhpcy5wYW5lbHNbaW5kZXhdLmdldFF1ZXN0aW9uQnlWYWx1ZU5hbWUoXG4gICAgICAgIG5hbWVcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMudmFsdWUgPSBxVmFsdWU7XG4gICAgdGhpcy5jaGFuZ2luZ1ZhbHVlUXVlc3Rpb24gPSBudWxsO1xuICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgIHF1ZXN0aW9uOiB0aGlzLFxuICAgICAgICBwYW5lbDogKDxRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0+aXRlbSkucGFuZWwsXG4gICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgIGl0ZW1JbmRleDogaW5kZXgsXG4gICAgICAgIGl0ZW1WYWx1ZTogcVZhbHVlW2luZGV4XSxcbiAgICAgICAgdmFsdWU6IHZhbCxcbiAgICAgIH07XG4gICAgICB0aGlzLnN1cnZleS5keW5hbWljUGFuZWxJdGVtVmFsdWVDaGFuZ2VkKHRoaXMsIG9wdGlvbnMpO1xuICAgIH1cbiAgICB2YXIgaW5kZXggPSB0aGlzLmlzU2V0UGFuZWxJdGVtRGF0YS5pbmRleE9mKG5hbWUpO1xuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICB0aGlzLmlzU2V0UGFuZWxJdGVtRGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuICBnZXRSb290RGF0YSgpOiBJU3VydmV5RGF0YSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YTtcbiAgfVxuICBwdWJsaWMgZ2V0UGxhaW5EYXRhKFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGluY2x1ZGVFbXB0eT86IGJvb2xlYW47XG4gICAgICBjYWxjdWxhdGlvbnM/OiBBcnJheTx7XG4gICAgICAgIHByb3BlcnR5TmFtZTogc3RyaW5nO1xuICAgICAgfT47XG4gICAgfSA9IHtcbiAgICAgIGluY2x1ZGVFbXB0eTogdHJ1ZSxcbiAgICB9XG4gICkge1xuICAgIHZhciBxdWVzdGlvblBsYWluRGF0YSA9IHN1cGVyLmdldFBsYWluRGF0YShvcHRpb25zKTtcbiAgICBpZiAoISFxdWVzdGlvblBsYWluRGF0YSkge1xuICAgICAgcXVlc3Rpb25QbGFpbkRhdGEuaXNOb2RlID0gdHJ1ZTtcbiAgICAgIHF1ZXN0aW9uUGxhaW5EYXRhLmRhdGEgPSB0aGlzLnBhbmVscy5tYXAoXG4gICAgICAgIChwYW5lbDogUGFuZWxNb2RlbCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgIHZhciBwYW5lbERhdGFJdGVtID0gPGFueT57XG4gICAgICAgICAgICBuYW1lOiBwYW5lbC5uYW1lIHx8IGluZGV4LFxuICAgICAgICAgICAgdGl0bGU6IHBhbmVsLnRpdGxlIHx8IFwiUGFuZWxcIixcbiAgICAgICAgICAgIHZhbHVlOiBwYW5lbC5nZXRWYWx1ZSgpLFxuICAgICAgICAgICAgZGlzcGxheVZhbHVlOiBwYW5lbC5nZXRWYWx1ZSgpLFxuICAgICAgICAgICAgZ2V0U3RyaW5nOiAodmFsOiBhbnkpID0+XG4gICAgICAgICAgICAgIHR5cGVvZiB2YWwgPT09IFwib2JqZWN0XCIgPyBKU09OLnN0cmluZ2lmeSh2YWwpIDogdmFsLFxuICAgICAgICAgICAgaXNOb2RlOiB0cnVlLFxuICAgICAgICAgICAgZGF0YTogcGFuZWwucXVlc3Rpb25zXG4gICAgICAgICAgICAgIC5tYXAoKHF1ZXN0aW9uOiBRdWVzdGlvbikgPT4gcXVlc3Rpb24uZ2V0UGxhaW5EYXRhKG9wdGlvbnMpKVxuICAgICAgICAgICAgICAuZmlsdGVyKChkOiBhbnkpID0+ICEhZCksXG4gICAgICAgICAgfTtcbiAgICAgICAgICAob3B0aW9ucy5jYWxjdWxhdGlvbnMgfHwgW10pLmZvckVhY2goKGNhbGN1bGF0aW9uKSA9PiB7XG4gICAgICAgICAgICBwYW5lbERhdGFJdGVtW2NhbGN1bGF0aW9uLnByb3BlcnR5TmFtZV0gPSAoPGFueT5wYW5lbClbXG4gICAgICAgICAgICAgIGNhbGN1bGF0aW9uLnByb3BlcnR5TmFtZVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gcGFuZWxEYXRhSXRlbTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHF1ZXN0aW9uUGxhaW5EYXRhO1xuICB9XG4gIHB1YmxpYyB1cGRhdGVFbGVtZW50Q3NzKHJlTmV3PzogYm9vbGVhbikge1xuICAgIHN1cGVyLnVwZGF0ZUVsZW1lbnRDc3MocmVOZXcpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlbCA9IHRoaXMucGFuZWxzW2ldO1xuICAgICAgZWwudXBkYXRlRWxlbWVudENzcyhyZU5ldyk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgcHJvZ3Jlc3NUZXh0KCk6IHN0cmluZyB7XG4gICAgdmFyIHJhbmdlTWF4ID0gdGhpcy5wYW5lbENvdW50O1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb25cbiAgICAgIC5nZXRTdHJpbmcoXCJwYW5lbER5bmFtaWNQcm9ncmVzc1RleHRcIilcbiAgICAgIFtcImZvcm1hdFwiXSh0aGlzLmN1cnJlbnRJbmRleCArIDEsIHJhbmdlTWF4KTtcbiAgfVxuICBwdWJsaWMgZ2V0UGFuZWxXcmFwcGVyQ3NzKCk6IHN0cmluZyB7XG4gICAgbGV0IGNzc0NsYXNzZXMgPSB0aGlzLmNzc0NsYXNzZXMucGFuZWxXcmFwcGVyO1xuICAgIGlmICh0aGlzLnBhbmVsUmVtb3ZlQnV0dG9uTG9jYXRpb24gPT09IFwicmlnaHRcIikge1xuICAgICAgY3NzQ2xhc3NlcyArPSBcIiBcIiArIHRoaXMuY3NzQ2xhc3Nlcy5wYW5lbFdyYXBwZXJJblJvdztcbiAgICB9XG4gICAgcmV0dXJuIGNzc0NsYXNzZXM7XG4gIH1cbiAgcHVibGljIGdldFBhbmVsUmVtb3ZlQnV0dG9uQ3NzKCk6IHN0cmluZyB7XG4gICAgbGV0IGNzc0NsYXNzZXMgPVxuICAgICAgdGhpcy5jc3NDbGFzc2VzLmJ1dHRvbiArIFwiIFwiICsgdGhpcy5jc3NDbGFzc2VzLmJ1dHRvblJlbW92ZTtcbiAgICBpZiAodGhpcy5wYW5lbFJlbW92ZUJ1dHRvbkxvY2F0aW9uID09PSBcInJpZ2h0XCIpIHtcbiAgICAgIGNzc0NsYXNzZXMgKz0gXCIgXCIgKyB0aGlzLmNzc0NsYXNzZXMuYnV0dG9uUmVtb3ZlUmlnaHQ7XG4gICAgfVxuICAgIHJldHVybiBjc3NDbGFzc2VzO1xuICB9XG59XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwicGFuZWxkeW5hbWljXCIsXG4gIFtcbiAgICB7XG4gICAgICBuYW1lOiBcInRlbXBsYXRlRWxlbWVudHNcIixcbiAgICAgIGFsdGVybmF0aXZlTmFtZTogXCJxdWVzdGlvbnNcIixcbiAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgaXNMaWdodFNlcmlhbGl6YWJsZTogZmFsc2UsXG4gICAgfSxcbiAgICB7IG5hbWU6IFwidGVtcGxhdGVUaXRsZTp0ZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NUZW1wbGF0ZVRpdGxlXCIgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInRlbXBsYXRlRGVzY3JpcHRpb246dGV4dFwiLFxuICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1RlbXBsYXRlRGVzY3JpcHRpb25cIixcbiAgICB9LFxuICAgIHsgbmFtZTogXCJhbGxvd0FkZFBhbmVsOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIHsgbmFtZTogXCJhbGxvd1JlbW92ZVBhbmVsOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwicGFuZWxDb3VudDpudW1iZXJcIixcbiAgICAgIGlzQmluZGFibGU6IHRydWUsXG4gICAgICBkZWZhdWx0OiAwLFxuICAgICAgY2hvaWNlczogWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwXSxcbiAgICB9LFxuICAgIHsgbmFtZTogXCJtaW5QYW5lbENvdW50Om51bWJlclwiLCBkZWZhdWx0OiAwLCBtaW5WYWx1ZTogMCB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwibWF4UGFuZWxDb3VudDpudW1iZXJcIixcbiAgICAgIGRlZmF1bHQ6IHNldHRpbmdzLnBhbmVsTWF4aW11bVBhbmVsQ291bnQsXG4gICAgfSxcbiAgICBcImRlZmF1bHRQYW5lbFZhbHVlOnBhbmVsdmFsdWVcIixcbiAgICBcImRlZmF1bHRWYWx1ZUZyb21MYXN0UGFuZWw6Ym9vbGVhblwiLFxuICAgIHtcbiAgICAgIG5hbWU6IFwicGFuZWxzU3RhdGVcIixcbiAgICAgIGRlZmF1bHQ6IFwiZGVmYXVsdFwiLFxuICAgICAgY2hvaWNlczogW1wiZGVmYXVsdFwiLCBcImNvbGxhcHNlZFwiLCBcImV4cGFuZGVkXCIsIFwiZmlyc3RFeHBhbmRlZFwiXSxcbiAgICB9LFxuICAgIHsgbmFtZTogXCJrZXlOYW1lXCIgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImtleUR1cGxpY2F0aW9uRXJyb3JcIixcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NLZXlEdXBsaWNhdGlvbkVycm9yXCIsXG4gICAgfSxcbiAgICB7IG5hbWU6IFwiY29uZmlybURlbGV0ZTpib29sZWFuXCIgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImNvbmZpcm1EZWxldGVUZXh0XCIsXG4gICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jQ29uZmlybURlbGV0ZVRleHRcIixcbiAgICB9LFxuICAgIHsgbmFtZTogXCJwYW5lbEFkZFRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1BhbmVsQWRkVGV4dFwiIH0sXG4gICAgeyBuYW1lOiBcInBhbmVsUmVtb3ZlVGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jUGFuZWxSZW1vdmVUZXh0XCIgfSxcbiAgICB7IG5hbWU6IFwicGFuZWxQcmV2VGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jUGFuZWxQcmV2VGV4dFwiIH0sXG4gICAgeyBuYW1lOiBcInBhbmVsTmV4dFRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1BhbmVsTmV4dFRleHRcIiB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwic2hvd1F1ZXN0aW9uTnVtYmVyc1wiLFxuICAgICAgZGVmYXVsdDogXCJvZmZcIixcbiAgICAgIGNob2ljZXM6IFtcIm9mZlwiLCBcIm9uUGFuZWxcIiwgXCJvblN1cnZleVwiXSxcbiAgICB9LFxuICAgIHsgbmFtZTogXCJzaG93UmFuZ2VJblByb2dyZXNzOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwicmVuZGVyTW9kZVwiLFxuICAgICAgZGVmYXVsdDogXCJsaXN0XCIsXG4gICAgICBjaG9pY2VzOiBbXCJsaXN0XCIsIFwicHJvZ3Jlc3NUb3BcIiwgXCJwcm9ncmVzc0JvdHRvbVwiLCBcInByb2dyZXNzVG9wQm90dG9tXCJdLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJ0ZW1wbGF0ZVRpdGxlTG9jYXRpb25cIixcbiAgICAgIGRlZmF1bHQ6IFwiZGVmYXVsdFwiLFxuICAgICAgY2hvaWNlczogW1wiZGVmYXVsdFwiLCBcInRvcFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIl0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInBhbmVsUmVtb3ZlQnV0dG9uTG9jYXRpb25cIixcbiAgICAgIGRlZmF1bHQ6IFwiYm90dG9tXCIsXG4gICAgICBjaG9pY2VzOiBbXCJib3R0b21cIiwgXCJyaWdodFwiXSxcbiAgICB9LFxuICBdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwoXCJcIik7XG4gIH0sXG4gIFwicXVlc3Rpb25cIlxuKTtcblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwicGFuZWxkeW5hbWljXCIsIChuYW1lKSA9PiB7XG4gIHJldHVybiBuZXcgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbChuYW1lKTtcbn0pO1xuIiwiaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25DaGVja2JveEJhc2UgfSBmcm9tIFwiLi9xdWVzdGlvbl9iYXNlc2VsZWN0XCI7XG5pbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XG5pbXBvcnQgeyBJdGVtVmFsdWUgfSBmcm9tIFwiLi9pdGVtdmFsdWVcIjtcblxuLyoqXG4gKiBBIE1vZGVsIGZvciBhIHJhZGlvZ3JvdXAgcXVlc3Rpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbCBleHRlbmRzIFF1ZXN0aW9uQ2hlY2tib3hCYXNlIHtcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJyYWRpb2dyb3VwXCI7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEZpcnN0SW5wdXRFbGVtZW50SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pbnB1dElkICsgXCJfMFwiO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHNlbGVjdGVkIGl0ZW0gaW4gdGhlIHJhZGlvIGdyb3VwLiBSZXR1cm5zIG51bGwgaWYgdGhlIHZhbHVlIGlzIGVtcHR5XG4gICAqL1xuICBwdWJsaWMgZ2V0IHNlbGVjdGVkSXRlbSgpOiBJdGVtVmFsdWUge1xuICAgIGlmICh0aGlzLmlzRW1wdHkoKSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIEl0ZW1WYWx1ZS5nZXRJdGVtQnlWYWx1ZSh0aGlzLnZpc2libGVDaG9pY2VzLCB0aGlzLnZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogU2hvdyBcImNsZWFyIGJ1dHRvblwiIGZsYWcuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNob3dDbGVhckJ1dHRvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd0NsZWFyQnV0dG9uXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNob3dDbGVhckJ1dHRvbih2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93Q2xlYXJCdXR0b25cIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNhblNob3dDbGVhckJ1dHRvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zaG93Q2xlYXJCdXR0b24gJiYgIXRoaXMuaXNSZWFkT25seTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNsZWFyQnV0dG9uQ2FwdGlvbigpIHtcbiAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcImNsZWFyQ2FwdGlvblwiKTtcbiAgfVxuICBzdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcInJhZGlvZ3JvdXBcIixcbiAgW3sgbmFtZTogXCJzaG93Q2xlYXJCdXR0b246Ym9vbGVhblwiLCBkZWZhdWx0OiBmYWxzZSB9XSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbChcIlwiKTtcbiAgfSxcbiAgXCJjaGVja2JveGJhc2VcIlxuKTtcblxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJyYWRpb2dyb3VwXCIsIChuYW1lKSA9PiB7XG4gIHZhciBxID0gbmV3IFF1ZXN0aW9uUmFkaW9ncm91cE1vZGVsKG5hbWUpO1xuICBxLmNob2ljZXMgPSBRdWVzdGlvbkZhY3RvcnkuRGVmYXVsdENob2ljZXM7XG4gIHJldHVybiBxO1xufSk7XG4iLCJpbXBvcnQgU29ydGFibGVMaWIgZnJvbSBcInNvcnRhYmxlanNcIjtcbmltcG9ydCB7IEl0ZW1WYWx1ZSB9IGZyb20gXCIuL2l0ZW12YWx1ZVwiO1xuaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25DaGVja2JveE1vZGVsIH0gZnJvbSBcIi4vcXVlc3Rpb25fY2hlY2tib3hcIjtcbmltcG9ydCB7IElzTW9iaWxlIH0gZnJvbSBcIi4vdXRpbHMvaXMtbW9iaWxlXCI7XG5cbmNvbnN0IFNvcnRhYmxlID0gPGFueT5Tb3J0YWJsZUxpYjtcblxuLyoqXG4gKiBBIE1vZGVsIGZvciBhIHJhbmtpbmcgcXVlc3Rpb25cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uUmFua2luZ01vZGVsIGV4dGVuZHMgUXVlc3Rpb25DaGVja2JveE1vZGVsIHtcbiAgcHJpdmF0ZSBkb21Ob2RlOiBIVE1MRWxlbWVudCA9IG51bGw7XG4gIHByaXZhdGUgc29ydGFibGVJbnN0OiBhbnkgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKG5hbWUpO1xuICB9XG5cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJyYW5raW5nXCI7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzSW5kZXRlcm1pbmF0ZSgpIHtcbiAgICByZXR1cm4gIXRoaXMudmFsdWUgfHwgdGhpcy52YWx1ZS5sZW5ndGggPT09IDA7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHJvb3RDbGFzcygpIHtcbiAgICBjb25zdCBjc3M6IGFueSA9IHRoaXMuY3NzQ2xhc3NlcztcbiAgICBpZiAoSXNNb2JpbGUpIHJldHVybiBjc3Mucm9vdCArIFwiIFwiICsgY3NzLnJvb3RNb2JpbGVNb2Q7XG4gICAgcmV0dXJuIGNzcy5yb290O1xuICB9XG5cbiAgcHVibGljIGdldE51bWJlckJ5SW5kZXgoaW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiB0aGlzLmlzSW5kZXRlcm1pbmF0ZSA/IFwiXFx1MjAxM1wiIDogaW5kZXggKyAxICsgXCJcIjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcmFua2luZ0Nob2ljZXMoKSB7XG4gICAgbGV0IHJlc3VsdDogSXRlbVZhbHVlW10gPSBbXTtcbiAgICBjb25zdCB2YWx1ZTogYW55ID0gdGhpcy52YWx1ZTtcbiAgICBjb25zdCB2aXNpYmxlQ2hvaWNlczogSXRlbVZhbHVlW10gPSB0aGlzLnJlbW92ZU90aGVyQ2hvaWNlRnJvbUNob2ljZXMoXG4gICAgICB0aGlzLnZpc2libGVDaG9pY2VzXG4gICAgKTtcblxuICAgIGlmICh0aGlzLmlzSW5kZXRlcm1pbmF0ZSkge1xuICAgICAgcmVzdWx0ID0gIHZpc2libGVDaG9pY2VzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSB0aGlzLm1lcmdlVmFsdWVBbmRWaXNpYmxlQ2hvaWNlcyh2YWx1ZSwgdmlzaWJsZUNob2ljZXMpO1xuICAgIH1cbiAgICBcbiAgICAvLyByYW5raW5nIHF1ZXN0aW9uIHdpdGggb25seSBvbmUgY2hvaWNlIGRvZXNuJ3QgbWFrZSBzZW5zZVxuICAgIGlmIChyZXN1bHQubGVuZ3RoID09PSAxKSByZXN1bHQgPSBbXTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZU90aGVyQ2hvaWNlRnJvbUNob2ljZXMoY2hvaWNlczogSXRlbVZhbHVlW10pIHtcbiAgICBjb25zdCByZXN1bHQgPSBjaG9pY2VzO1xuICAgIGNob2ljZXMuZm9yRWFjaCgoY2hvaWNlOiBJdGVtVmFsdWUsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGlmIChjaG9pY2UudmFsdWUgPT09IFwib3RoZXJcIikge1xuICAgICAgICByZXN1bHQuc3BsaWNlKGluZGV4LCAxKTsgLy8gcmVtb3ZlIG90aGVyIGNob2ljZVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvL2Nyb3NzIGZyYW1ld29yayBpbml0aWFsaXphdGlvblxuICBwdWJsaWMgYWZ0ZXJSZW5kZXJRdWVzdGlvbkVsZW1lbnQoZWw6IEhUTUxFbGVtZW50KSB7XG4gICAgaWYgKCEhZWwpIHtcbiAgICAgIHRoaXMuaW5pdFNvcnRhYmxlKGVsKTtcbiAgICB9XG4gICAgc3VwZXIuYWZ0ZXJSZW5kZXJRdWVzdGlvbkVsZW1lbnQoZWwpO1xuICB9XG4gIC8vY3Jvc3MgZnJhbWV3b3JrIGRlc3Ryb3lcbiAgcHVibGljIGJlZm9yZURlc3Ryb3lRdWVzdGlvbkVsZW1lbnQoZWw6IEhUTUxFbGVtZW50KSB7XG4gICAgaWYgKHRoaXMuc29ydGFibGVJbnN0KSB0aGlzLnNvcnRhYmxlSW5zdC5kZXN0cm95KCk7XG4gICAgc3VwZXIuYmVmb3JlRGVzdHJveVF1ZXN0aW9uRWxlbWVudChlbCk7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlS2V5ZG93biA9IChldmVudDogYW55KSA9PiB7XG4gICAgY29uc3Qga2V5OiBhbnkgPSBldmVudC5rZXk7XG4gICAgY29uc3QgYXJyYXk6IE5vZGVMaXN0T2Y8RWxlbWVudD4gPSB0aGlzLmRvbU5vZGUucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIFwiLlwiICsgdGhpcy5jc3NDbGFzc2VzLml0ZW1cbiAgICApO1xuICAgIGNvbnN0IGluZGV4OiBudW1iZXIgPSBbXS5pbmRleE9mLmNhbGwoYXJyYXksIGV2ZW50LnRhcmdldCk7XG5cbiAgICBpZiAoa2V5ID09PSBcIkFycm93VXBcIiAmJiBpbmRleCkge1xuICAgICAgdGhpcy5oYW5kbGVBcnJvd1VwKGluZGV4KTtcbiAgICB9XG4gICAgaWYgKGtleSA9PT0gXCJBcnJvd0Rvd25cIiAmJiBpbmRleCAhPT0gYXJyYXkubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5oYW5kbGVBcnJvd0Rvd24oaW5kZXgpO1xuICAgIH1cbiAgfTtcblxuICBwcm90ZWN0ZWQgc3VwcG9ydFNlbGVjdEFsbCgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIHN1cHBvcnRPdGhlcigpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIHN1cHBvcnROb25lKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIHRvIG1ha2UgXCJjYXJyeSBmb3J3YXJkXCIgZmVhdHVyZSB3b3JrIHByb3Blcmx5IHdpdGggcmFua2luZ1xuICBwcm90ZWN0ZWQgb25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKSB7XG4gICAgc3VwZXIub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKTtcblxuICAgIGlmICh0aGlzLmlzSW5kZXRlcm1pbmF0ZSkgcmV0dXJuO1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLnJhbmtpbmdDaG9pY2VzLm1hcChjaG9pY2UgPT4gY2hvaWNlLnZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgbWVyZ2VWYWx1ZUFuZFZpc2libGVDaG9pY2VzKFxuICAgIHZhbHVlOiBhbnksXG4gICAgdmlzaWJsZUNob2ljZXM6IEFycmF5PEl0ZW1WYWx1ZT5cbiAgKSB7XG4gICAgY29uc3QgbGVuZ3RoOiBudW1iZXIgPSB2aXNpYmxlQ2hvaWNlcy5sZW5ndGg7XG4gICAgbGV0IHJlc3VsdDogQXJyYXk8SXRlbVZhbHVlPiA9IFtdO1xuICAgIHJlc3VsdC5sZW5ndGggPSBsZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY2hvaWNlID0gdmlzaWJsZUNob2ljZXNbaV07XG4gICAgICBjb25zdCBpbmRleCA9IHZhbHVlLmluZGV4T2YoY2hvaWNlLnZhbHVlKTtcblxuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICByZXN1bHQuc3BsaWNlKGluZGV4LCAxLCBjaG9pY2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0LnNwbGljZShyZXN1bHQubGVuZ3RoIC0gMSwgMCwgY2hvaWNlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcihjaG9pY2UgPT4gISFjaG9pY2UpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIGluaXRTb3J0YWJsZShkb21Ob2RlOiBIVE1MRWxlbWVudCkge1xuICAgIGlmICghZG9tTm9kZSkgcmV0dXJuO1xuICAgIGNvbnN0IHNlbGY6IFF1ZXN0aW9uUmFua2luZ01vZGVsID0gdGhpcztcbiAgICBzZWxmLmRvbU5vZGUgPSBkb21Ob2RlO1xuICAgIGlmICh0aGlzLmlzUmVhZE9ubHkpIHJldHVybjtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHJldHVybjtcblxuICAgIHNlbGYuc29ydGFibGVJbnN0ID0gbmV3IFNvcnRhYmxlKGRvbU5vZGUsIHtcbiAgICAgIGFuaW1hdGlvbjogMTAwLFxuICAgICAgZm9yY2VGYWxsYmFjazogdHJ1ZSxcbiAgICAgIGRlbGF5OiAyMDAsXG4gICAgICBkZWxheU9uVG91Y2hPbmx5OiB0cnVlLFxuICAgICAgaGFuZGxlOiBJc01vYmlsZVxuICAgICAgICA/IFwiLlwiICsgc2VsZi5jc3NDbGFzc2VzLml0ZW1JY29uQ29udGFpbmVyXG4gICAgICAgIDogXCIuXCIgKyBzZWxmLmNzc0NsYXNzZXMuaXRlbUNvbnRlbnQsXG4gICAgICBnaG9zdENsYXNzOiBzZWxmLmNzc0NsYXNzZXMuaXRlbUdob3N0TW9kLFxuICAgICAgZHJhZ0NsYXNzOiBzZWxmLmNzc0NsYXNzZXMuaXRlbURyYWdNb2QsXG4gICAgICBvblN0YXJ0KGV2dDogYW55KSB7XG4gICAgICAgICg8YW55PlNvcnRhYmxlLmdob3N0LnN0eWxlLm9wYWNpdHkpID0gMTtcbiAgICAgICAgZG9tTm9kZS5jbGFzc05hbWUgKz0gXCIgXCIgKyBzZWxmLmNzc0NsYXNzZXMucm9vdERyYWdNb2Q7XG4gICAgICAgIGlmIChzZWxmLmlzSW5kZXRlcm1pbmF0ZSkge1xuICAgICAgICAgIHNlbGYuc2V0R2hvc3RUZXh0KGV2dC5vbGRJbmRleCArIDEpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb25FbmQoKSB7XG4gICAgICAgIGRvbU5vZGUuY2xhc3NOYW1lID0gZG9tTm9kZS5jbGFzc05hbWUucmVwbGFjZShcbiAgICAgICAgICBcIiBcIiArIHNlbGYuY3NzQ2xhc3Nlcy5yb290RHJhZ01vZCxcbiAgICAgICAgICBcIlwiXG4gICAgICAgICk7XG4gICAgICAgIHNlbGYuc2V0VmFsdWVGcm9tVUkoKTtcbiAgICAgIH0sXG4gICAgICBvbkNoYW5nZShldnQ6IGFueSkge1xuICAgICAgICBpZiAoIXNlbGYuaXNJbmRldGVybWluYXRlKSBzZWxmLnN5bmNOdW1iZXJzKCk7XG4gICAgICAgIHNlbGYuc2V0R2hvc3RUZXh0KGV2dC5uZXdJbmRleCArIDEpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlQXJyb3dVcCA9IChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgYXJyYXk6IHN0cmluZ1tdID0gdGhpcy5zb3J0YWJsZUluc3QudG9BcnJheSgpO1xuICAgIHRoaXMubW92ZUFycmF5SXRlbUJhY2soYXJyYXksIGluZGV4KTtcbiAgICB0aGlzLnNvcnRhYmxlSW5zdC5zb3J0KGFycmF5KTtcbiAgICB0aGlzLnN5bmNOdW1iZXJzKCk7XG4gICAgdGhpcy5zZXRWYWx1ZUZyb21VSSgpO1xuICAgIHRoaXMuZm9jdXNJdGVtKGluZGV4IC0gMSk7XG4gIH07XG5cbiAgcHJpdmF0ZSBoYW5kbGVBcnJvd0Rvd24gPSAoaW5kZXg6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGFycmF5OiBzdHJpbmdbXSA9IHRoaXMuc29ydGFibGVJbnN0LnRvQXJyYXkoKTtcbiAgICB0aGlzLm1vdmVBcnJheUl0ZW1Gb3J3YXJkKGFycmF5LCBpbmRleCk7XG4gICAgdGhpcy5zb3J0YWJsZUluc3Quc29ydChhcnJheSk7XG4gICAgdGhpcy5zeW5jTnVtYmVycygpO1xuICAgIHRoaXMuc2V0VmFsdWVGcm9tVUkoKTtcbiAgICB0aGlzLmZvY3VzSXRlbShpbmRleCArIDEpO1xuICB9O1xuXG4gIHByaXZhdGUgbW92ZUFycmF5SXRlbUJhY2sgPSAoYXJyYXk6IHN0cmluZ1tdLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgW2FycmF5W2luZGV4XSwgYXJyYXlbaW5kZXggLSAxXV0gPSBbYXJyYXlbaW5kZXggLSAxXSwgYXJyYXlbaW5kZXhdXTtcbiAgfTtcblxuICBwcml2YXRlIG1vdmVBcnJheUl0ZW1Gb3J3YXJkID0gKGFycmF5OiBzdHJpbmdbXSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgIFthcnJheVtpbmRleF0sIGFycmF5W2luZGV4ICsgMV1dID0gW2FycmF5W2luZGV4ICsgMV0sIGFycmF5W2luZGV4XV07XG4gIH07XG5cbiAgcHJpdmF0ZSBmb2N1c0l0ZW0gPSAoaW5kZXg6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGl0ZW1zTm9kZXM6IGFueSA9IHRoaXMuZG9tTm9kZS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgXCIuXCIgKyB0aGlzLmNzc0NsYXNzZXMuaXRlbVxuICAgICk7XG4gICAgaXRlbXNOb2Rlc1tpbmRleF0uZm9jdXMoKTtcbiAgfTtcblxuICBwcml2YXRlIHNldFZhbHVlRnJvbVVJID0gKCkgPT4ge1xuICAgIGNvbnN0IHZhbHVlOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IHRleHROb2RlcyA9IHRoaXMuZG9tTm9kZS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgXCIuXCIgKyB0aGlzLmNzc0NsYXNzZXMuY29udHJvbExhYmVsXG4gICAgKTtcbiAgICB0ZXh0Tm9kZXMuZm9yRWFjaCgodGV4dE5vZGU6IGFueSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGlubmVyVGV4dDogc3RyaW5nID0gdGV4dE5vZGUuaW5uZXJUZXh0O1xuICAgICAgdGhpcy52aXNpYmxlQ2hvaWNlcy5mb3JFYWNoKCh2aXNpYmxlQ2hvaWNlOiBJdGVtVmFsdWUpID0+IHtcbiAgICAgICAgaWYgKGlubmVyVGV4dCA9PT0gdmlzaWJsZUNob2ljZS50ZXh0KSB7XG4gICAgICAgICAgdmFsdWUucHVzaCh2aXNpYmxlQ2hvaWNlLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9O1xuXG4gIHByaXZhdGUgc3luY051bWJlcnMgPSAoKSA9PiB7XG4gICAgaWYgKCF0aGlzLmRvbU5vZGUpIHJldHVybjtcbiAgICBjb25zdCBzZWxlY3Rvcjogc3RyaW5nID1cbiAgICAgIFwiLlwiICtcbiAgICAgIHRoaXMuY3NzQ2xhc3Nlcy5pdGVtICtcbiAgICAgIFwiOm5vdCguXCIgK1xuICAgICAgdGhpcy5jc3NDbGFzc2VzLml0ZW1EcmFnTW9kICtcbiAgICAgIFwiKVwiICtcbiAgICAgIFwiIC5cIiArXG4gICAgICB0aGlzLmNzc0NsYXNzZXMuaXRlbUluZGV4O1xuXG4gICAgY29uc3QgaW5kZXhOb2RlczogTm9kZUxpc3RPZjxFbGVtZW50PiA9IHRoaXMuZG9tTm9kZS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgc2VsZWN0b3JcbiAgICApO1xuICAgIGluZGV4Tm9kZXMuZm9yRWFjaCgoaW5kZXhOb2RlOiBhbnksIGluZGV4KSA9PiB7XG4gICAgICBpbmRleE5vZGUuaW5uZXJUZXh0ID0gdGhpcy5nZXROdW1iZXJCeUluZGV4KGluZGV4KTtcbiAgICB9KTtcbiAgfTtcblxuICBwcml2YXRlIHNldEdob3N0VGV4dCA9ICh0ZXh0OiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBpbmRleE5vZGVzOiBOb2RlTGlzdE9mPEVsZW1lbnQ+ID0gdGhpcy5kb21Ob2RlLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBcIi5cIiArIHRoaXMuY3NzQ2xhc3Nlcy5pdGVtSW5kZXhcbiAgICApO1xuICAgIGNvbnN0IGdob3N0Tm9kZTogRWxlbWVudCA9IGluZGV4Tm9kZXNbaW5kZXhOb2Rlcy5sZW5ndGggLSAxXTtcbiAgICAoPGFueT5naG9zdE5vZGUpLmlubmVyVGV4dCA9IHRleHQ7XG4gIH07XG59XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwicmFua2luZ1wiLFxuICBbXG4gICAgeyBuYW1lOiBcImhhc090aGVyXCIsIHZpc2libGU6IGZhbHNlLCBpc1NlcmlhbGl6YWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwib3RoZXJUZXh0XCIsIHZpc2libGU6IGZhbHNlLCBpc1NlcmlhbGl6YWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwib3RoZXJFcnJvclRleHRcIiwgdmlzaWJsZTogZmFsc2UsIGlzU2VyaWFsaXphYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJzdG9yZU90aGVyc0FzQ29tbWVudFwiLCB2aXNpYmxlOiBmYWxzZSwgaXNTZXJpYWxpemFibGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcImhhc05vbmVcIiwgdmlzaWJsZTogZmFsc2UsIGlzU2VyaWFsaXphYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJub25lVGV4dFwiLCB2aXNpYmxlOiBmYWxzZSwgaXNTZXJpYWxpemFibGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcImhhc1NlbGVjdEFsbFwiLCB2aXNpYmxlOiBmYWxzZSwgaXNTZXJpYWxpemFibGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcInNlbGVjdEFsbFRleHRcIiwgdmlzaWJsZTogZmFsc2UsIGlzU2VyaWFsaXphYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJjb2xDb3VudDpudW1iZXJcIiwgdmlzaWJsZTogZmFsc2UsIGlzU2VyaWFsaXphYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJtYXhTZWxlY3RlZENob2ljZXNcIiwgdmlzaWJsZTogZmFsc2UsIGlzU2VyaWFsaXphYmxlOiBmYWxzZSB9LFxuICBdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uUmFua2luZ01vZGVsKFwiXCIpO1xuICB9LFxuICBcImNoZWNrYm94XCJcbik7XG5cblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwicmFua2luZ1wiLCBuYW1lID0+IHtcbiAgY29uc3QgcTogUXVlc3Rpb25SYW5raW5nTW9kZWwgPSBuZXcgUXVlc3Rpb25SYW5raW5nTW9kZWwobmFtZSk7XG4gIHEuY2hvaWNlcyA9IFF1ZXN0aW9uRmFjdG9yeS5EZWZhdWx0Q2hvaWNlcztcbiAgcmV0dXJuIHE7XG59KTtcbiIsImltcG9ydCB7IEl0ZW1WYWx1ZSB9IGZyb20gXCIuL2l0ZW12YWx1ZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuaW1wb3J0IHsgc2V0dGluZ3MgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xuaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xuXG4vKipcbiAqIEEgTW9kZWwgZm9yIGEgcmF0aW5nIHF1ZXN0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25SYXRpbmdNb2RlbCBleHRlbmRzIFF1ZXN0aW9uIHtcbiAgcmF0ZVZhbHVlc0NoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgICB0aGlzLmNyZWF0ZUl0ZW1WYWx1ZXMoXCJyYXRlVmFsdWVzXCIpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFwicmF0ZVZhbHVlc1wiLCBmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYuZmlyZUNhbGxiYWNrKHNlbGYucmF0ZVZhbHVlc0NoYW5nZWRDYWxsYmFjayk7XG4gICAgfSk7XG4gICAgdGhpcy5vblByb3BlcnR5Q2hhbmdlZC5hZGQoZnVuY3Rpb24oc2VuZGVyOiBhbnksIG9wdGlvbnM6IGFueSkge1xuICAgICAgaWYgKFxuICAgICAgICBvcHRpb25zLm5hbWUgPT0gXCJyYXRlTWluXCIgfHxcbiAgICAgICAgb3B0aW9ucy5uYW1lID09IFwicmF0ZU1heFwiIHx8XG4gICAgICAgIG9wdGlvbnMubmFtZSA9PSBcInJhdGVTdGVwXCJcbiAgICAgICkge1xuICAgICAgICBzZWxmLmZpcmVDYWxsYmFjayhzZWxmLnJhdGVWYWx1ZXNDaGFuZ2VkQ2FsbGJhY2spO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIGxvY01pblJhdGVEZXNjcmlwdGlvblZhbHVlID0gdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcbiAgICAgIFwibWluUmF0ZURlc2NyaXB0aW9uXCIsXG4gICAgICB0aGlzLFxuICAgICAgdHJ1ZVxuICAgICk7XG4gICAgdmFyIGxvY01heFJhdGVEZXNjcmlwdGlvblZhbHVlID0gdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcbiAgICAgIFwibWF4UmF0ZURlc2NyaXB0aW9uXCIsXG4gICAgICB0aGlzLFxuICAgICAgdHJ1ZVxuICAgICk7XG4gICAgbG9jTWluUmF0ZURlc2NyaXB0aW9uVmFsdWUub25HZXRUZXh0Q2FsbGJhY2sgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgICByZXR1cm4gdGV4dCA/IHRleHQgKyBcIiBcIiA6IHRleHQ7XG4gICAgfTtcbiAgICBsb2NNYXhSYXRlRGVzY3JpcHRpb25WYWx1ZS5vbkdldFRleHRDYWxsYmFjayA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgICAgIHJldHVybiB0ZXh0ID8gXCIgXCIgKyB0ZXh0IDogdGV4dDtcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBvblN1cnZleUxvYWQoKSB7XG4gICAgc3VwZXIub25TdXJ2ZXlMb2FkKCk7XG4gICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5yYXRlVmFsdWVzQ2hhbmdlZENhbGxiYWNrKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgcmF0ZSBpdGVtcy4gRXZlcnkgaXRlbSBoYXMgdmFsdWUgYW5kIHRleHQuIElmIHRleHQgaXMgZW1wdHksIHRoZSB2YWx1ZSBpcyByZW5kZXJlZC4gVGhlIGl0ZW0gdGV4dCBzdXBwb3J0cyBtYXJrZG93bi4gSWYgaXQgaXMgZW1wdHkgdGhlIGFycmF5IGlzIGdlbmVyYXRlZCBieSB1c2luZyByYXRlTWluLCByYXRlTWF4IGFuZCByYXRlU3RlcCBwcm9wZXJ0aWVzLlxuICAgKiBAc2VlIHJhdGVNaW5cbiAgICogQHNlZSByYXRlTWF4XG4gICAqIEBzZWUgcmF0ZVN0ZXBcbiAgICovXG4gIHB1YmxpYyBnZXQgcmF0ZVZhbHVlcygpOiBBcnJheTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicmF0ZVZhbHVlc1wiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJhdGVWYWx1ZXModmFsOiBBcnJheTxhbnk+KSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicmF0ZVZhbHVlc1wiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGlzIHByb3BlcnR5IGlzIHVzZWQgdG8gZ2VuZXJhdGUgcmF0ZSB2YWx1ZXMgaWYgcmF0ZVZhbHVlcyBhcnJheSBpcyBlbXB0eS4gSXQgaXMgdGhlIGZpcnN0IHZhbHVlIGluIHRoZSByYXRpbmcuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEuXG4gICAqIEBzZWUgcmF0ZVZhbHVlc1xuICAgKiBAc2VlIHJhdGVNYXhcbiAgICogQHNlZSByYXRlU3RlcFxuICAgKi9cbiAgcHVibGljIGdldCByYXRlTWluKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJhdGVNaW5cIik7XG4gIH1cbiAgcHVibGljIHNldCByYXRlTWluKHZhbDogbnVtYmVyKSB7XG4gICAgaWYgKCF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uICYmIHZhbCA+IHRoaXMucmF0ZU1heCAtIHRoaXMucmF0ZVN0ZXApXG4gICAgICB2YWwgPSB0aGlzLnJhdGVNYXggLSB0aGlzLnJhdGVTdGVwO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJhdGVNaW5cIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhpcyBwcm9wZXJ0eSBpcyB1c2VkIHRvIGdlbmVyYXRlIHJhdGUgdmFsdWVzIGlmIHJhdGVWYWx1ZXMgYXJyYXkgaXMgZW1wdHkuIEl0IGlzIHRoZSBsYXN0IHZhbHVlIGluIHRoZSByYXRpbmcuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDUuXG4gICAqIEBzZWUgcmF0ZVZhbHVlc1xuICAgKiBAc2VlIHJhdGVNaW5cbiAgICogQHNlZSByYXRlU3RlcFxuICAgKi9cbiAgcHVibGljIGdldCByYXRlTWF4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJhdGVNYXhcIik7XG4gIH1cbiAgcHVibGljIHNldCByYXRlTWF4KHZhbDogbnVtYmVyKSB7XG4gICAgaWYgKCF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uICYmIHZhbCA8IHRoaXMucmF0ZU1pbiArIHRoaXMucmF0ZVN0ZXApXG4gICAgICB2YWwgPSB0aGlzLnJhdGVNaW4gKyB0aGlzLnJhdGVTdGVwO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJhdGVNYXhcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhpcyBwcm9wZXJ0eSBpcyB1c2VkIHRvIGdlbmVyYXRlIHJhdGUgdmFsdWVzIGlmIHJhdGVWYWx1ZXMgYXJyYXkgaXMgZW1wdHkuIEl0IGlzIHRoZSBzdGVwIHZhbHVlLiBUaGUgbnVtYmVyIG9mIHJhdGUgdmFsdWVzIGFyZSAocmF0ZU1heCAtIHJhdGVNaW4pIC8gcmF0ZVN0ZXAuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEuXG4gICAqIEBzZWUgcmF0ZVZhbHVlc1xuICAgKiBAc2VlIHJhdGVNaW5cbiAgICogQHNlZSByYXRlTWF4XG4gICAqL1xuICBwdWJsaWMgZ2V0IHJhdGVTdGVwKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJhdGVTdGVwXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcmF0ZVN0ZXAodmFsOiBudW1iZXIpIHtcbiAgICBpZiAodmFsIDw9IDApIHZhbCA9IDE7XG4gICAgaWYgKCF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uICYmIHZhbCA+IHRoaXMucmF0ZU1heCAtIHRoaXMucmF0ZU1pbilcbiAgICAgIHZhbCA9IHRoaXMucmF0ZU1heCAtIHRoaXMucmF0ZU1pbjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyYXRlU3RlcFwiLCB2YWwpO1xuICB9XG4gIHByb3RlY3RlZCBnZXREaXNwbGF5VmFsdWVDb3JlKGtleXNBc1RleHQ6IGJvb2xlYW4sIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIHZhciByZXMgPSBJdGVtVmFsdWUuZ2V0VGV4dE9ySHRtbEJ5VmFsdWUodGhpcy52aXNpYmxlUmF0ZVZhbHVlcywgdmFsdWUpO1xuICAgIHJldHVybiAhIXJlcyA/IHJlcyA6IHZhbHVlO1xuICB9XG4gIGdldCB2aXNpYmxlUmF0ZVZhbHVlcygpOiBJdGVtVmFsdWVbXSB7XG4gICAgaWYgKHRoaXMucmF0ZVZhbHVlcy5sZW5ndGggPiAwKSByZXR1cm4gdGhpcy5yYXRlVmFsdWVzO1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLnJhdGVNaW47XG4gICAgdmFyIHN0ZXAgPSB0aGlzLnJhdGVTdGVwO1xuICAgIHdoaWxlIChcbiAgICAgIHZhbHVlIDw9IHRoaXMucmF0ZU1heCAmJlxuICAgICAgcmVzLmxlbmd0aCA8IHNldHRpbmdzLnJhdGluZ01heGltdW1SYXRlVmFsdWVDb3VudFxuICAgICkge1xuICAgICAgcmVzLnB1c2gobmV3IEl0ZW1WYWx1ZSh2YWx1ZSkpO1xuICAgICAgdmFsdWUgPSB0aGlzLmNvcnJlY3RWYWx1ZSh2YWx1ZSArIHN0ZXAsIHN0ZXApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByaXZhdGUgY29ycmVjdFZhbHVlKHZhbHVlOiBudW1iZXIsIHN0ZXA6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIHZhbHVlO1xuICAgIGlmIChNYXRoLnJvdW5kKHZhbHVlKSA9PSB2YWx1ZSkgcmV0dXJuIHZhbHVlO1xuICAgIHZhciBmciA9IDA7XG4gICAgd2hpbGUgKE1hdGgucm91bmQoc3RlcCkgIT0gc3RlcCkge1xuICAgICAgc3RlcCAqPSAxMDtcbiAgICAgIGZyKys7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlLnRvRml4ZWQoZnIpKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInJhdGluZ1wiO1xuICB9XG4gIHByb3RlY3RlZCBnZXRGaXJzdElucHV0RWxlbWVudElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXRJZCArIFwiXzBcIjtcbiAgfVxuICBzdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgc3VwcG9ydENvbW1lbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHVibGljIHN1cHBvcnRPdGhlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogVGhlIGRlc2NyaXB0aW9uIG9mIG1pbmltdW0gKGZpcnN0KSBpdGVtLlxuICAgKi9cbiAgcHVibGljIGdldCBtaW5SYXRlRGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJtaW5SYXRlRGVzY3JpcHRpb25cIik7XG4gIH1cbiAgcHVibGljIHNldCBtaW5SYXRlRGVzY3JpcHRpb24odmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcIm1pblJhdGVEZXNjcmlwdGlvblwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NNaW5SYXRlRGVzY3JpcHRpb24oKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwibWluUmF0ZURlc2NyaXB0aW9uXCIpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgZGVzY3JpcHRpb24gb2YgbWF4aW11bSAobGFzdCkgaXRlbS5cbiAgICovXG4gIHB1YmxpYyBnZXQgbWF4UmF0ZURlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwibWF4UmF0ZURlc2NyaXB0aW9uXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4UmF0ZURlc2NyaXB0aW9uKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJtYXhSYXRlRGVzY3JpcHRpb25cIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jTWF4UmF0ZURlc2NyaXB0aW9uKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcIm1heFJhdGVEZXNjcmlwdGlvblwiKTtcbiAgfVxuICBwcm90ZWN0ZWQgdmFsdWVUb0RhdGEodmFsOiBhbnkpOiBhbnkge1xuICAgIGlmICh0aGlzLnJhdGVWYWx1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgdmFyIGl0ZW0gPSBJdGVtVmFsdWUuZ2V0SXRlbUJ5VmFsdWUodGhpcy5yYXRlVmFsdWVzLCB2YWwpO1xuICAgICAgcmV0dXJuICEhaXRlbSA/IGl0ZW0udmFsdWUgOiB2YWw7XG4gICAgfVxuICAgIHJldHVybiAhaXNOYU4odmFsKSA/IHBhcnNlRmxvYXQodmFsKSA6IHZhbDtcbiAgfVxuICAvKipcbiAgICogQ2xpY2sgdmFsdWUgYWdhaW4gdG8gY2xlYXIuXG4gICAqL1xuICBwdWJsaWMgc2V0VmFsdWVGcm9tQ2xpY2sodmFsdWU6IGFueSkge1xuICAgIGlmICh0aGlzLnZhbHVlID09PSBwYXJzZUZsb2F0KHZhbHVlKSkge1xuICAgICAgdGhpcy5jbGVhclZhbHVlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldEl0ZW1DbGFzcyhpdGVtOiBJdGVtVmFsdWUpIHtcbiAgICBjb25zdCBpdGVtQ3NzID0gdGhpcy5jc3NDbGFzc2VzLml0ZW07XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLmNzc0NsYXNzZXMuc2VsZWN0ZWQ7XG4gICAgY29uc3QgZGlzYWJsZWQgPSB0aGlzLmNzc0NsYXNzZXMuaXRlbURpc2FibGVkO1xuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSB0aGlzLnZhbHVlID09IGl0ZW0udmFsdWU7XG4gICAgY29uc3QgaXNEaXNhYmxlZCA9IHRoaXMuaXNSZWFkT25seSAmJiAhaXRlbS5pc0VuYWJsZWQ7XG4gICAgY29uc3QgYWxsb3dIb3ZlciA9XG4gICAgICAhaXNEaXNhYmxlZCAmJlxuICAgICAgIWlzU2VsZWN0ZWQgJiZcbiAgICAgICEoISF0aGlzLnN1cnZleSAmJiB0aGlzLnN1cnZleS5pc0Rlc2lnbk1vZGUpO1xuICAgIGxldCByZXN1bHQgPSBpdGVtQ3NzO1xuICAgIGlmICh0aGlzLnZhbHVlID09IGl0ZW0udmFsdWUpIHtcbiAgICAgIHJlc3VsdCArPSBcIiBcIiArIHNlbGVjdGVkO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1JlYWRPbmx5KSB7XG4gICAgICByZXN1bHQgKz0gXCIgXCIgKyBkaXNhYmxlZDtcbiAgICB9XG4gICAgaWYgKGFsbG93SG92ZXIpIHtcbiAgICAgIHJlc3VsdCArPSBcIiBcIiArIHRoaXMuY3NzQ2xhc3Nlcy5pdGVtSG92ZXI7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwicmF0aW5nXCIsXG4gIFtcbiAgICB7IG5hbWU6IFwiaGFzQ29tbWVudDpzd2l0Y2hcIiwgbGF5b3V0OiBcInJvd1wiIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJjb21tZW50VGV4dFwiLFxuICAgICAgZGVwZW5kc09uOiBcImhhc0NvbW1lbnRcIixcbiAgICAgIHZpc2libGVJZjogZnVuY3Rpb24ob2JqOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIG9iai5oYXNDb21tZW50O1xuICAgICAgfSxcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NDb21tZW50VGV4dFwiLFxuICAgICAgbGF5b3V0OiBcInJvd1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJyYXRlVmFsdWVzOml0ZW12YWx1ZVtdXCIsXG4gICAgICBiYXNlVmFsdWU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcImNob2ljZXNfSXRlbVwiKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7IG5hbWU6IFwicmF0ZU1pbjpudW1iZXJcIiwgZGVmYXVsdDogMSB9LFxuICAgIHsgbmFtZTogXCJyYXRlTWF4Om51bWJlclwiLCBkZWZhdWx0OiA1IH0sXG4gICAgeyBuYW1lOiBcInJhdGVTdGVwOm51bWJlclwiLCBkZWZhdWx0OiAxLCBtaW5WYWx1ZTogMC4xIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJtaW5SYXRlRGVzY3JpcHRpb25cIixcbiAgICAgIGFsdGVybmF0aXZlTmFtZTogXCJtaW5pbnVtUmF0ZURlc2NyaXB0aW9uXCIsXG4gICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jTWluUmF0ZURlc2NyaXB0aW9uXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIm1heFJhdGVEZXNjcmlwdGlvblwiLFxuICAgICAgYWx0ZXJuYXRpdmVOYW1lOiBcIm1heGltdW1SYXRlRGVzY3JpcHRpb25cIixcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NNYXhSYXRlRGVzY3JpcHRpb25cIixcbiAgICB9LFxuICBdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uUmF0aW5nTW9kZWwoXCJcIik7XG4gIH0sXG4gIFwicXVlc3Rpb25cIlxuKTtcblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwicmF0aW5nXCIsIChuYW1lKSA9PiB7XG4gIHJldHVybiBuZXcgUXVlc3Rpb25SYXRpbmdNb2RlbChuYW1lKTtcbn0pO1xuIiwiaW1wb3J0IHsgcHJvcGVydHksIFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XG5pbXBvcnQgU2lnbmF0dXJlUGFkIGZyb20gXCJzaWduYXR1cmVfcGFkXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcblxudmFyIGRlZmF1bHRXaWR0aCA9IDMwMDtcbnZhciBkZWZhdWx0SGVpZ2h0ID0gMjAwO1xuXG5mdW5jdGlvbiByZXNpemVDYW52YXMoY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCkge1xuICB2YXIgY29udGV4dDogYW55ID0gY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgdmFyIGRldmljZVBpeGVsUmF0aW8gPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxO1xuICB2YXIgYmFja2luZ1N0b3JlUmF0aW8gPVxuICAgIGNvbnRleHQud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgIGNvbnRleHQubW96QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgIGNvbnRleHQubXNCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgY29udGV4dC5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgIGNvbnRleHQuYmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgIDE7XG5cbiAgdmFyIHJhdGlvID0gZGV2aWNlUGl4ZWxSYXRpbyAvIGJhY2tpbmdTdG9yZVJhdGlvO1xuXG4gIHZhciBvbGRXaWR0aCA9IGNhbnZhcy53aWR0aDtcbiAgdmFyIG9sZEhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG5cbiAgY2FudmFzLndpZHRoID0gb2xkV2lkdGggKiByYXRpbztcbiAgY2FudmFzLmhlaWdodCA9IG9sZEhlaWdodCAqIHJhdGlvO1xuXG4gIGNhbnZhcy5zdHlsZS53aWR0aCA9IG9sZFdpZHRoICsgXCJweFwiO1xuICBjYW52YXMuc3R5bGUuaGVpZ2h0ID0gb2xkSGVpZ2h0ICsgXCJweFwiO1xuXG4gIGNvbnRleHQuc2NhbGUocmF0aW8sIHJhdGlvKTtcbn1cblxuLyoqXG4gKiBBIE1vZGVsIGZvciBzaWduYXR1cmUgcGFkIHF1ZXN0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25TaWduYXR1cmVQYWRNb2RlbCBleHRlbmRzIFF1ZXN0aW9uIHtcbiAgQHByb3BlcnR5KHsgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KSBpc0RyYXdpbmdWYWx1ZTogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIGdldENzc1Jvb3QoY3NzQ2xhc3NlczogYW55KTogc3RyaW5nIHtcbiAgICB2YXIgY2xhc3NlcyA9IHN1cGVyLmdldENzc1Jvb3QoY3NzQ2xhc3Nlcyk7XG4gICAgaWYgKFwiXCIgKyB0aGlzLndpZHRoID09PSBcIjMwMFwiKSB7XG4gICAgICBjbGFzc2VzICs9IFwiIFwiICsgY3NzQ2xhc3Nlcy5zbWFsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNsYXNzZXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlVmFsdWUoKSB7XG4gICAgaWYgKHRoaXMuc2lnbmF0dXJlUGFkKSB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMuc2lnbmF0dXJlUGFkLnRvRGF0YVVSTCh0aGlzLmRhdGFGb3JtYXQpO1xuICAgICAgdGhpcy52YWx1ZSA9IGRhdGE7XG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJzaWduYXR1cmVwYWRcIjtcbiAgfVxuICBwdWJsaWMgYWZ0ZXJSZW5kZXJRdWVzdGlvbkVsZW1lbnQoZWw6IEhUTUxFbGVtZW50KSB7XG4gICAgaWYgKCEhZWwpIHtcbiAgICAgIHRoaXMuaW5pdFNpZ25hdHVyZVBhZChlbCk7XG4gICAgfVxuICAgIHN1cGVyLmFmdGVyUmVuZGVyUXVlc3Rpb25FbGVtZW50KGVsKTtcbiAgfVxuICBwdWJsaWMgYmVmb3JlRGVzdHJveVF1ZXN0aW9uRWxlbWVudChlbDogSFRNTEVsZW1lbnQpIHtcbiAgICBpZiAoISFlbCkge1xuICAgICAgdGhpcy5kZXN0cm95U2lnbmF0dXJlUGFkKGVsKTtcbiAgICB9XG4gIH1cblxuICBpbml0U2lnbmF0dXJlUGFkKGVsOiBIVE1MRWxlbWVudCkge1xuICAgIHZhciBjYW52YXM6IGFueSA9IGVsLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiY2FudmFzXCIpWzBdO1xuICAgIHZhciBidXR0b25FbCA9IGVsLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiYnV0dG9uXCIpWzBdO1xuICAgIHZhciBzaWduYXR1cmVQYWQgPSBuZXcgU2lnbmF0dXJlUGFkKGNhbnZhcywgeyBiYWNrZ3JvdW5kQ29sb3I6IFwiI2ZmZmZmZlwiIH0pO1xuICAgIGlmICh0aGlzLmlzSW5wdXRSZWFkT25seSkge1xuICAgICAgc2lnbmF0dXJlUGFkLm9mZigpO1xuICAgIH1cblxuICAgIGJ1dHRvbkVsLm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICB0aGlzLnZhbHVlID0gdW5kZWZpbmVkO1xuICAgIH07XG5cbiAgICB0aGlzLnJlYWRPbmx5Q2hhbmdlZENhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmFsbG93Q2xlYXIgfHwgdGhpcy5pc0lucHV0UmVhZE9ubHkpIHtcbiAgICAgICAgc2lnbmF0dXJlUGFkLm9mZigpO1xuICAgICAgICBidXR0b25FbC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzaWduYXR1cmVQYWQub24oKTtcbiAgICAgICAgYnV0dG9uRWwuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgc2lnbmF0dXJlUGFkLnBlbkNvbG9yID0gdGhpcy5wZW5Db2xvcjtcbiAgICBzaWduYXR1cmVQYWQuYmFja2dyb3VuZENvbG9yID0gdGhpcy5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgc2lnbmF0dXJlUGFkLm9uQmVnaW4gPSAoKSA9PiB7XG4gICAgICB0aGlzLmlzRHJhd2luZ1ZhbHVlID0gdHJ1ZTtcbiAgICAgIGNhbnZhcy5mb2N1cygpO1xuICAgIH07XG4gICAgc2lnbmF0dXJlUGFkLm9uRW5kID0gKCkgPT4ge1xuICAgICAgdGhpcy5pc0RyYXdpbmdWYWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy51cGRhdGVWYWx1ZSgpO1xuICAgIH07XG4gICAgdmFyIHVwZGF0ZVZhbHVlSGFuZGxlciA9ICgpID0+IHtcbiAgICAgIHZhciBkYXRhID0gdGhpcy52YWx1ZTtcbiAgICAgIGNhbnZhcy53aWR0aCA9IHRoaXMud2lkdGggfHwgZGVmYXVsdFdpZHRoO1xuICAgICAgY2FudmFzLmhlaWdodCA9IHRoaXMuaGVpZ2h0IHx8IGRlZmF1bHRIZWlnaHQ7XG4gICAgICByZXNpemVDYW52YXMoY2FudmFzKTtcbiAgICAgIGlmICghZGF0YSkge1xuICAgICAgICBzaWduYXR1cmVQYWQuY2xlYXIoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNpZ25hdHVyZVBhZC5mcm9tRGF0YVVSTChkYXRhKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMudmFsdWVDaGFuZ2VkQ2FsbGJhY2sgPSB1cGRhdGVWYWx1ZUhhbmRsZXI7XG4gICAgdXBkYXRlVmFsdWVIYW5kbGVyKCk7XG4gICAgdGhpcy5yZWFkT25seUNoYW5nZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuc2lnbmF0dXJlUGFkID0gc2lnbmF0dXJlUGFkO1xuICAgIHZhciBwcm9wZXJ0eUNoYW5nZWRIYW5kbGVyID0gKHNlbmRlcjogYW55LCBvcHRpb25zOiBhbnkpID0+IHtcbiAgICAgIGlmIChvcHRpb25zLm5hbWUgPT09IFwid2lkdGhcIiB8fCBvcHRpb25zLm5hbWUgPT09IFwiaGVpZ2h0XCIpIHtcbiAgICAgICAgdXBkYXRlVmFsdWVIYW5kbGVyKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLm9uUHJvcGVydHlDaGFuZ2VkLmFkZChwcm9wZXJ0eUNoYW5nZWRIYW5kbGVyKTtcbiAgICB0aGlzLnNpZ25hdHVyZVBhZC5wcm9wZXJ0eUNoYW5nZWRIYW5kbGVyID0gcHJvcGVydHlDaGFuZ2VkSGFuZGxlcjtcbiAgfVxuICBkZXN0cm95U2lnbmF0dXJlUGFkKGVsOiBIVE1MRWxlbWVudCkge1xuICAgIGlmICh0aGlzLnNpZ25hdHVyZVBhZCkge1xuICAgICAgdGhpcy5vblByb3BlcnR5Q2hhbmdlZC5yZW1vdmUodGhpcy5zaWduYXR1cmVQYWQucHJvcGVydHlDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLnNpZ25hdHVyZVBhZC5vZmYoKTtcbiAgICB9XG4gICAgdGhpcy5yZWFkT25seUNoYW5nZWRDYWxsYmFjayA9IG51bGw7XG4gICAgdGhpcy5zaWduYXR1cmVQYWQgPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZSBpdCB0byBzZXQgdGhlIHNwZWNpZmljIGRhdGFGb3JtYXQgZm9yIHRoZSBzaWduYXR1cmUgcGFkIGltYWdlIGRhdGEuXG4gICAqIGZvcm1hdHM6IFwiXCIgKGRlZmF1bHQpIC0gcG5nLCBcImltYWdlL2pwZWdcIiAtIGpwZWcsIFwiaW1hZ2Uvc3ZnK3htbFwiIC0gc3ZnXG4gICAqL1xuICBAcHJvcGVydHkoeyBkZWZhdWx0VmFsdWU6IFwiXCIgfSkgZGF0YUZvcm1hdDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVc2UgaXQgdG8gc2V0IHRoZSBzcGVjaWZpYyB3aWR0aCBmb3IgdGhlIHNpZ25hdHVyZSBwYWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHdpZHRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIndpZHRoXCIsIDMwMCk7XG4gIH1cbiAgcHVibGljIHNldCB3aWR0aCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIndpZHRoXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSBpdCB0byBzZXQgdGhlIHNwZWNpZmljIGhlaWdodCBmb3IgdGhlIHNpZ25hdHVyZSBwYWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGhlaWdodCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJoZWlnaHRcIiwgMjAwKTtcbiAgfVxuICBwdWJsaWMgc2V0IGhlaWdodCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImhlaWdodFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgaXQgdG8gY2xlYXIgY29udGVudCBvZiB0aGUgc2lnbmF0dXJlIHBhZC5cbiAgICovXG4gIHB1YmxpYyBnZXQgYWxsb3dDbGVhcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dDbGVhclwiLCB0cnVlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGFsbG93Q2xlYXIodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dDbGVhclwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgaXQgdG8gc2V0IHBlbiBjb2xvciBmb3IgdGhlIHNpZ25hdHVyZSBwYWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBlbkNvbG9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInBlbkNvbG9yXCIsIFwiIzFhYjM5NFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHBlbkNvbG9yKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicGVuQ29sb3JcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVXNlIGl0IHRvIHNldCBiYWNrZ3JvdW5kIGNvbG9yIGZvciB0aGUgc2lnbmF0dXJlIHBhZC5cbiAgICovXG4gIHB1YmxpYyBnZXQgYmFja2dyb3VuZENvbG9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImJhY2tncm91bmRDb2xvclwiLCBcIiNmZmZmZmZcIik7XG4gIH1cbiAgcHVibGljIHNldCBiYWNrZ3JvdW5kQ29sb3IodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJiYWNrZ3JvdW5kQ29sb3JcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGNsZWFyIHNpZ25hdHVyZSBidXR0b24gY2FwdGlvbi5cbiAgICovXG4gIGdldCBjbGVhckJ1dHRvbkNhcHRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcImNsZWFyQ2FwdGlvblwiKTtcbiAgfVxuXG4gIHB1YmxpYyBuZWVkU2hvd1BsYWNlaG9sZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5pc0RyYXdpbmdWYWx1ZSAmJiB0aGlzLmlzRW1wdHkoKTtcbiAgfVxuXG4gIGdldCBwbGFjZUhvbGRlclRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcInNpZ25hdHVyZVBsYWNlSG9sZGVyXCIpO1xuICB9XG59XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwic2lnbmF0dXJlcGFkXCIsXG4gIFtcbiAgICB7XG4gICAgICBuYW1lOiBcIndpZHRoOm51bWJlclwiLFxuICAgICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICAgICAgZGVmYXVsdDogMzAwLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJoZWlnaHQ6bnVtYmVyXCIsXG4gICAgICBjYXRlZ29yeTogXCJnZW5lcmFsXCIsXG4gICAgICBkZWZhdWx0OiAyMDAsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImFsbG93Q2xlYXI6Ym9vbGVhblwiLFxuICAgICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwicGVuQ29sb3I6Y29sb3JcIixcbiAgICAgIGNhdGVnb3J5OiBcImdlbmVyYWxcIixcbiAgICAgIGRlZmF1bHQ6IFwiIzFhYjM5NFwiLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJiYWNrZ3JvdW5kQ29sb3I6Y29sb3JcIixcbiAgICAgIGNhdGVnb3J5OiBcImdlbmVyYWxcIixcbiAgICAgIGRlZmF1bHQ6IFwiI2ZmZmZmZlwiLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJkYXRhRm9ybWF0XCIsXG4gICAgICBjYXRlZ29yeTogXCJnZW5lcmFsXCIsXG4gICAgICBkZWZhdWx0OiBcIlwiLFxuICAgICAgY2hvaWNlczogW1xuICAgICAgICB7IHZhbHVlOiBcIlwiLCB0ZXh0OiBcIlBOR1wiIH0sXG4gICAgICAgIHsgdmFsdWU6IFwiaW1hZ2UvanBlZ1wiLCB0ZXh0OiBcIkpQRUdcIiB9LFxuICAgICAgICB7IHZhbHVlOiBcImltYWdlL3N2Zyt4bWxcIiwgdGV4dDogXCJTVkdcIiB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIHsgbmFtZTogXCJkZWZhdWx0VmFsdWVcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwiY29ycmVjdEFuc3dlclwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICBdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uU2lnbmF0dXJlUGFkTW9kZWwoXCJcIik7XG4gIH0sXG4gIFwicXVlc3Rpb25cIlxuKTtcblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwic2lnbmF0dXJlcGFkXCIsIChuYW1lKSA9PiB7XG4gIHJldHVybiBuZXcgUXVlc3Rpb25TaWduYXR1cmVQYWRNb2RlbChuYW1lKTtcbn0pO1xuIiwiaW1wb3J0IHsgUXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XG5pbXBvcnQgeyBTZXJpYWxpemVyIH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcsIExvY2FsaXphYmxlU3RyaW5ncyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5pbXBvcnQgeyBIZWxwZXJzLCBIYXNoVGFibGUgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBFbWFpbFZhbGlkYXRvciwgU3VydmV5VmFsaWRhdG9yIH0gZnJvbSBcIi4vdmFsaWRhdG9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFcnJvciB9IGZyb20gXCIuL3N1cnZleS1lcnJvclwiO1xuaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xuaW1wb3J0IHsgQ3VzdG9tRXJyb3IgfSBmcm9tIFwiLi9lcnJvclwiO1xuaW1wb3J0IHsgc2V0dGluZ3MgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xuaW1wb3J0IHsgUXVlc3Rpb25UZXh0QmFzZSB9IGZyb20gXCIuL3F1ZXN0aW9uX3RleHRiYXNlXCI7XG5cbi8qKlxuICogQSBNb2RlbCBmb3IgYW4gaW5wdXQgdGV4dCBxdWVzdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uVGV4dE1vZGVsIGV4dGVuZHMgUXVlc3Rpb25UZXh0QmFzZSB7XG4gIHByaXZhdGUgbG9jRGF0YUxpc3RWYWx1ZTogTG9jYWxpemFibGVTdHJpbmdzO1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwibWluRXJyb3JUZXh0XCIsIHRoaXMsIHRydWUpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJtYXhFcnJvclRleHRcIiwgdGhpcywgdHJ1ZSk7XG4gICAgdGhpcy5sb2NEYXRhTGlzdFZhbHVlID0gbmV3IExvY2FsaXphYmxlU3RyaW5ncyh0aGlzKTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnRpZXNWYWx1ZUNoYW5nZWQoXG4gICAgICBbXCJtaW5cIiwgXCJtYXhcIiwgXCJpbnB1dFR5cGVcIiwgXCJtaW5WYWx1ZUV4cHJlc3Npb25cIiwgXCJtYXhWYWx1ZUV4cHJlc3Npb25cIl0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuc2V0UmVuZGVyZWRNaW5NYXgoKTtcbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydGllc1ZhbHVlQ2hhbmdlZChbXCJpbnB1dFR5cGVcIiwgXCJzaXplXCJdLCAoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZUlucHV0U2l6ZSgpO1xuICAgICAgdGhpcy5jYWxjUmVuZGVyZWRQbGFjZUhvbGRlcigpO1xuICAgIH0pO1xuICB9XG4gIHByb3RlY3RlZCBpc1RleHRWYWx1ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gW1widGV4dFwiLCBcIm51bWJlclwiLCBcInBhc3N3b3JkXCJdLmluZGV4T2YodGhpcy5pbnB1dFR5cGUpID4gLTE7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJ0ZXh0XCI7XG4gIH1cbiAgcHVibGljIG9uU3VydmV5TG9hZCgpIHtcbiAgICBzdXBlci5vblN1cnZleUxvYWQoKTtcbiAgICB0aGlzLnNldFJlbmRlcmVkTWluTWF4KCk7XG4gICAgdGhpcy51cGRhdGVJbnB1dFNpemUoKTtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IGlucHV0IHR5cGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlucHV0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpbnB1dFR5cGVcIik7XG4gIH1cbiAgcHVibGljIHNldCBpbnB1dFR5cGUodmFsOiBzdHJpbmcpIHtcbiAgICB2YWwgPSB2YWwudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAodmFsID09IFwiZGF0ZXRpbWVfbG9jYWxcIikgdmFsID0gXCJkYXRldGltZS1sb2NhbFwiO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlucHV0VHlwZVwiLCB2YWwudG9Mb3dlckNhc2UoKSk7XG4gICAgaWYgKCF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSB7XG4gICAgICB0aGlzLm1pbiA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMubWF4ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5zdGVwID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgcnVuQ29uZGl0aW9uKHZhbHVlczogSGFzaFRhYmxlPGFueT4sIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+KSB7XG4gICAgc3VwZXIucnVuQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgaWYgKCEhdGhpcy5taW5WYWx1ZUV4cHJlc3Npb24gfHwgISF0aGlzLm1heFZhbHVlRXhwcmVzc2lvbikge1xuICAgICAgdGhpcy5zZXRSZW5kZXJlZE1pbk1heCh2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0VmFsaWRhdG9ycygpOiBBcnJheTxTdXJ2ZXlWYWxpZGF0b3I+IHtcbiAgICB2YXIgdmFsaWRhdG9ycyA9IHN1cGVyLmdldFZhbGlkYXRvcnMoKTtcbiAgICBpZiAoXG4gICAgICB0aGlzLmlucHV0VHlwZSA9PT0gXCJlbWFpbFwiICYmXG4gICAgICAhdGhpcy52YWxpZGF0b3JzLnNvbWUoKHYpID0+IHYuZ2V0VHlwZSgpID09PSBcImVtYWlsdmFsaWRhdG9yXCIpXG4gICAgKSB7XG4gICAgICB2YWxpZGF0b3JzLnB1c2gobmV3IEVtYWlsVmFsaWRhdG9yKCkpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsaWRhdG9ycztcbiAgfVxuICBpc0xheW91dFR5cGVTdXBwb3J0ZWQobGF5b3V0VHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IGlucHV0IHNpemVcbiAgICovXG4gIHB1YmxpYyBnZXQgc2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaXplXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2l6ZSh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNpemVcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzVGV4dElucHV0KCkge1xuICAgIHJldHVybiAoXG4gICAgICBbXCJ0ZXh0XCIsIFwic2VhcmNoXCIsIFwidGVsXCIsIFwidXJsXCIsIFwiZW1haWxcIiwgXCJwYXNzd29yZFwiXS5pbmRleE9mKFxuICAgICAgICB0aGlzLmlucHV0VHlwZVxuICAgICAgKSA+IC0xXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlucHV0U2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpbnB1dFNpemVcIiwgMCk7XG4gIH1cbiAgcHVibGljIGdldCBpbnB1dFdpZHRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlucHV0V2lkdGhcIik7XG4gIH1cbiAgcHVibGljIHVwZGF0ZUlucHV0U2l6ZSgpIHtcbiAgICB2YXIgc2l6ZSA9IHRoaXMuaXNUZXh0SW5wdXQgJiYgdGhpcy5zaXplID4gMCA/IHRoaXMuc2l6ZSA6IDA7XG4gICAgaWYgKFxuICAgICAgdGhpcy5pc1RleHRJbnB1dCAmJlxuICAgICAgc2l6ZSA8IDEgJiZcbiAgICAgIHRoaXMucGFyZW50ICYmXG4gICAgICAhISg8YW55PnRoaXMucGFyZW50KVtcIml0ZW1TaXplXCJdXG4gICAgKSB7XG4gICAgICBzaXplID0gKDxhbnk+dGhpcy5wYXJlbnQpW1wiaXRlbVNpemVcIl07XG4gICAgfVxuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlucHV0U2l6ZVwiLCBzaXplKTtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpbnB1dFdpZHRoXCIsIHNpemUgPiAwID8gXCJhdXRvXCIgOiBcIlwiKTtcbiAgfVxuICAvKipcbiAgICogVGV4dCBhdXRvIGNvbXBsZXRlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGF1dG9Db21wbGV0ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJhdXRvQ29tcGxldGVcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBhdXRvQ29tcGxldGUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJhdXRvQ29tcGxldGVcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIG1pbmltdW0gdmFsdWVcbiAgICovXG4gIHB1YmxpYyBnZXQgbWluKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1pblwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1pbih2YWw6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmlzVmFsdWVFeHByZXNzaW9uKHZhbCkpIHtcbiAgICAgIHRoaXMubWluVmFsdWVFeHByZXNzaW9uID0gdmFsLnN1YnN0cigxKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWluXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIHZhbHVlXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1heCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtYXhcIik7XG4gIH1cbiAgcHVibGljIHNldCBtYXgodmFsOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5pc1ZhbHVlRXhwcmVzc2lvbih2YWwpKSB7XG4gICAgICB0aGlzLm1heFZhbHVlRXhwcmVzc2lvbiA9IHZhbC5zdWJzdHIoMSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1heFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbWluaW11bSB2YWx1ZSB0aGF0IHlvdSBjYW4gc2V0dXAgYXMgZXhwcmVzc2lvbiwgZm9yIGV4YW1wbGUgdG9kYXkoLTEpID0geWVzdGVyZGF5O1xuICAgKi9cbiAgcHVibGljIGdldCBtaW5WYWx1ZUV4cHJlc3Npb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWluVmFsdWVFeHByZXNzaW9uXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbWluVmFsdWVFeHByZXNzaW9uKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWluVmFsdWVFeHByZXNzaW9uXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIHZhbHVlIHRoYXQgeW91IGNhbiBzZXR1cCBhcyBleHByZXNzaW9uLCBmb3IgZXhhbXBsZSB0b2RheSgxKSA9IHRvbW9ycm93O1xuICAgKi9cbiAgcHVibGljIGdldCBtYXhWYWx1ZUV4cHJlc3Npb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWF4VmFsdWVFeHByZXNzaW9uXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4VmFsdWVFeHByZXNzaW9uKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWF4VmFsdWVFeHByZXNzaW9uXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCByZW5kZXJlZE1pbigpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyZW5kZXJlZE1pblwiKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHJlbmRlcmVkTWF4KCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJlbmRlcmVkTWF4XCIpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgdGV4dCB0aGF0IHNob3dzIHdoZW4gdmFsdWUgaXMgbGVzcyB0aGFuIG1pbiBwcm9wZXJ0eS5cbiAgICogQHNlZSBtaW5cbiAgICogQHNlZSBtYXhFcnJvclRleHRcbiAgICovXG4gIHB1YmxpYyBnZXQgbWluRXJyb3JUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgICAgXCJtaW5FcnJvclRleHRcIixcbiAgICAgIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJtaW5FcnJvclwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBtaW5FcnJvclRleHQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcIm1pbkVycm9yVGV4dFwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NNaW5FcnJvclRleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwibWluRXJyb3JUZXh0XCIpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgdGV4dCB0aGF0IHNob3dzIHdoZW4gdmFsdWUgaXMgZ3JlYXRlciB0aGFuIG1hbiBwcm9wZXJ0eS5cbiAgICogQHNlZSBtYXhcbiAgICogQHNlZSBtaW5FcnJvclRleHRcbiAgICovXG4gIHB1YmxpYyBnZXQgbWF4RXJyb3JUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgICAgXCJtYXhFcnJvclRleHRcIixcbiAgICAgIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJtYXhFcnJvclwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBtYXhFcnJvclRleHQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcIm1heEVycm9yVGV4dFwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NNYXhFcnJvclRleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwibWF4RXJyb3JUZXh0XCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWRvbmx5IHByb3BlcnR5IHRoYXQgcmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IGlucHV0VHlwZSBhbGxvd3MgdG8gc2V0IG1pbiBhbmQgbWF4IHByb3BlcnRpZXNcbiAgICogQHNlZSBpbnB1dFR5cGVcbiAgICogQHNlZSBtaW5cbiAgICogQHNlZSBtYXhcbiAgICovXG4gIHB1YmxpYyBnZXQgaXNNaW5NYXhUeXBlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBtaW5NYXhUeXBlcy5pbmRleE9mKHRoaXMuaW5wdXRUeXBlKSA+IC0xO1xuICB9XG4gIHByb3RlY3RlZCBvbkNoZWNrRm9yRXJyb3JzKFxuICAgIGVycm9yczogQXJyYXk8U3VydmV5RXJyb3I+LFxuICAgIGlzT25WYWx1ZUNoYW5nZWQ6IGJvb2xlYW5cbiAgKSB7XG4gICAgc3VwZXIub25DaGVja0ZvckVycm9ycyhlcnJvcnMsIGlzT25WYWx1ZUNoYW5nZWQpO1xuICAgIGlmIChpc09uVmFsdWVDaGFuZ2VkIHx8IHRoaXMuY2FuU2V0VmFsdWVUb1N1cnZleSgpKSByZXR1cm47XG4gICAgaWYgKHRoaXMuaXNWYWx1ZUxlc3NNaW4pIHtcbiAgICAgIGVycm9ycy5wdXNoKFxuICAgICAgICBuZXcgQ3VzdG9tRXJyb3IoXG4gICAgICAgICAgdGhpcy5nZXRNaW5NYXhFcnJvclRleHQoXG4gICAgICAgICAgICB0aGlzLm1pbkVycm9yVGV4dCxcbiAgICAgICAgICAgIHRoaXMuZ2V0Q2FsY3VsYXRlZE1pbk1heCh0aGlzLnJlbmRlcmVkTWluKVxuICAgICAgICAgICksXG4gICAgICAgICAgdGhpc1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1ZhbHVlR3JlYXRlck1heCkge1xuICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgIG5ldyBDdXN0b21FcnJvcihcbiAgICAgICAgICB0aGlzLmdldE1pbk1heEVycm9yVGV4dChcbiAgICAgICAgICAgIHRoaXMubWF4RXJyb3JUZXh0LFxuICAgICAgICAgICAgdGhpcy5nZXRDYWxjdWxhdGVkTWluTWF4KHRoaXMucmVuZGVyZWRNYXgpXG4gICAgICAgICAgKSxcbiAgICAgICAgICB0aGlzXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBjYW5TZXRWYWx1ZVRvU3VydmV5KCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5pc01pbk1heFR5cGUpIHJldHVybiB0cnVlO1xuICAgIGlmICh0aGlzLmlzVmFsdWVMZXNzTWluKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRoaXMuaXNWYWx1ZUdyZWF0ZXJNYXgpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwcml2YXRlIGdldE1pbk1heEVycm9yVGV4dChlcnJvclRleHQ6IHN0cmluZywgdmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIGVycm9yVGV4dDtcbiAgICByZXR1cm4gZXJyb3JUZXh0LnJlcGxhY2UoXCJ7MH1cIiwgdmFsdWUudG9TdHJpbmcoKSk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgaXNWYWx1ZUxlc3NNaW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICF0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLnJlbmRlcmVkTWluKSAmJlxuICAgICAgdGhpcy5nZXRDYWxjdWxhdGVkTWluTWF4KHRoaXMudmFsdWUpIDxcbiAgICAgICAgdGhpcy5nZXRDYWxjdWxhdGVkTWluTWF4KHRoaXMucmVuZGVyZWRNaW4pXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGdldCBpc1ZhbHVlR3JlYXRlck1heCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgIXRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMucmVuZGVyZWRNYXgpICYmXG4gICAgICB0aGlzLmdldENhbGN1bGF0ZWRNaW5NYXgodGhpcy52YWx1ZSkgPlxuICAgICAgICB0aGlzLmdldENhbGN1bGF0ZWRNaW5NYXgodGhpcy5yZW5kZXJlZE1heClcbiAgICApO1xuICB9XG4gIHByaXZhdGUgZ2V0IGlzRGF0ZUlucHV0VHlwZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pbnB1dFR5cGUgPT09IFwiZGF0ZVwiIHx8IHRoaXMuaW5wdXRUeXBlID09PSBcImRhdGV0aW1lLWxvY2FsXCI7XG4gIH1cbiAgcHJpdmF0ZSBnZXRDYWxjdWxhdGVkTWluTWF4KG1pbk1heDogYW55KTogYW55IHtcbiAgICBpZiAodGhpcy5pc1ZhbHVlRW1wdHkobWluTWF4KSkgcmV0dXJuIG1pbk1heDtcbiAgICByZXR1cm4gdGhpcy5pc0RhdGVJbnB1dFR5cGUgPyBuZXcgRGF0ZShtaW5NYXgpIDogbWluTWF4O1xuICB9XG4gIHByaXZhdGUgc2V0UmVuZGVyZWRNaW5NYXgoXG4gICAgdmFsdWVzOiBIYXNoVGFibGU8YW55PiA9IG51bGwsXG4gICAgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4gPSBudWxsXG4gICkge1xuICAgIHRoaXMuc2V0VmFsdWVBbmRSdW5FeHByZXNzaW9uKFxuICAgICAgdGhpcy5taW5WYWx1ZUV4cHJlc3Npb24sXG4gICAgICB0aGlzLm1pbixcbiAgICAgICh2YWwpID0+IHtcbiAgICAgICAgaWYgKCF2YWwgJiYgdGhpcy5pc0RhdGVJbnB1dFR5cGUgJiYgISFzZXR0aW5ncy5taW5EYXRlKSB7XG4gICAgICAgICAgdmFsID0gc2V0dGluZ3MubWluRGF0ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyZW5kZXJlZE1pblwiLCB2YWwpO1xuICAgICAgfSxcbiAgICAgIHZhbHVlcyxcbiAgICAgIHByb3BlcnRpZXNcbiAgICApO1xuICAgIHRoaXMuc2V0VmFsdWVBbmRSdW5FeHByZXNzaW9uKFxuICAgICAgdGhpcy5tYXhWYWx1ZUV4cHJlc3Npb24sXG4gICAgICB0aGlzLm1heCxcbiAgICAgICh2YWwpID0+IHtcbiAgICAgICAgaWYgKCF2YWwgJiYgdGhpcy5pc0RhdGVJbnB1dFR5cGUpIHtcbiAgICAgICAgICB2YWwgPSAhIXNldHRpbmdzLm1heERhdGUgPyBzZXR0aW5ncy5tYXhEYXRlIDogXCIyOTk5LTEyLTMxXCI7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicmVuZGVyZWRNYXhcIiwgdmFsKTtcbiAgICAgIH0sXG4gICAgICB2YWx1ZXMsXG4gICAgICBwcm9wZXJ0aWVzXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgc3RlcCB2YWx1ZVxuICAgKi9cbiAgcHVibGljIGdldCBzdGVwKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInN0ZXBcIik7XG4gIH1cbiAgcHVibGljIHNldCBzdGVwKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic3RlcFwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgcmVuZGVyZWRTdGVwKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMuc3RlcCkgPyBcImFueVwiIDogdGhpcy5zdGVwO1xuICB9XG4gIHN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkge1xuICAgIHJldHVybiBbXCJkYXRlXCIsIFwiZGF0ZXRpbWVcIiwgXCJkYXRldGltZS1sb2NhbFwiXS5pbmRleE9mKHRoaXMuaW5wdXRUeXBlKSA8IDA7XG4gIH1cbiAgcHVibGljIHN1cHBvcnRHb05leHRQYWdlRXJyb3IoKSB7XG4gICAgcmV0dXJuIFtcImRhdGVcIiwgXCJkYXRldGltZVwiLCBcImRhdGV0aW1lLWxvY2FsXCJdLmluZGV4T2YodGhpcy5pbnB1dFR5cGUpIDwgMDtcbiAgfVxuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgcmVjb21tZW5kZWQgb3B0aW9ucyBhdmFpbGFibGUgdG8gY2hvb3NlLlxuICAgKi9cbiAgcHVibGljIGdldCBkYXRhTGlzdCgpOiBBcnJheTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5sb2NEYXRhTGlzdC52YWx1ZTtcbiAgfVxuICBwdWJsaWMgc2V0IGRhdGFMaXN0KHZhbDogQXJyYXk8c3RyaW5nPikge1xuICAgIHRoaXMubG9jRGF0YUxpc3QudmFsdWUgPSB2YWw7XG4gIH1cbiAgZ2V0IGxvY0RhdGFMaXN0KCk6IExvY2FsaXphYmxlU3RyaW5ncyB7XG4gICAgcmV0dXJuIHRoaXMubG9jRGF0YUxpc3RWYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGRhdGFMaXN0SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gIXRoaXMubG9jRGF0YUxpc3QuaXNFbXB0eSA/IHRoaXMuaWQgKyBcIl9kYXRhbGlzdFwiIDogXCJcIjtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUnVuVmFsaWRhdG9ycyhpc09uVmFsdWVDaGFuZ2VkOiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuZXJyb3JzLmxlbmd0aCA+IDAgfHxcbiAgICAgICFpc09uVmFsdWVDaGFuZ2VkIHx8XG4gICAgICB0aGlzLnN1cHBvcnRHb05leHRQYWdlRXJyb3IoKVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHNldE5ld1ZhbHVlKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBuZXdWYWx1ZSA9IHRoaXMuY29ycmVjdFZhbHVlVHlwZShuZXdWYWx1ZSk7XG4gICAgc3VwZXIuc2V0TmV3VmFsdWUobmV3VmFsdWUpO1xuICB9XG4gIHByb3RlY3RlZCBjb3JyZWN0VmFsdWVUeXBlKG5ld1ZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGlmICghbmV3VmFsdWUpIHJldHVybiBuZXdWYWx1ZTtcbiAgICBpZiAodGhpcy5pbnB1dFR5cGUgPT0gXCJudW1iZXJcIiB8fCB0aGlzLmlucHV0VHlwZSA9PSBcInJhbmdlXCIpIHtcbiAgICAgIHJldHVybiBIZWxwZXJzLmlzTnVtYmVyKG5ld1ZhbHVlKSA/IHBhcnNlRmxvYXQobmV3VmFsdWUpIDogXCJcIjtcbiAgICB9XG4gICAgcmV0dXJuIG5ld1ZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXRDb250cm9sQ2xhc3MoKTogc3RyaW5nIHtcbiAgICBjb25zdCBjc3NDbGFzc2VzID0gdGhpcy5jc3NDbGFzc2VzO1xuICAgIGxldCByZXN1bHQgPVxuICAgICAgY3NzQ2xhc3Nlcy5yb290ICtcbiAgICAgICh0aGlzLmVycm9ycy5sZW5ndGggPiAwID8gXCIgXCIgKyBjc3NDbGFzc2VzLm9uRXJyb3IgOiBcIlwiKTtcbiAgICBpZiAodGhpcy5pc1JlYWRPbmx5KSB7XG4gICAgICByZXN1bHQgKz0gXCIgXCIgKyBjc3NDbGFzc2VzLmNvbnRyb2xEaXNhYmxlZDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBwcm90ZWN0ZWQgaGFzUGxhY2VIb2xkZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmlzUmVhZE9ubHkgJiYgdGhpcy5pbnB1dFR5cGUgIT09IFwicmFuZ2VcIjtcbiAgfVxufVxuXG5jb25zdCBtaW5NYXhUeXBlcyA9IFtcbiAgXCJudW1iZXJcIixcbiAgXCJyYW5nZVwiLFxuICBcImRhdGVcIixcbiAgXCJkYXRldGltZS1sb2NhbFwiLFxuICBcIm1vbnRoXCIsXG4gIFwidGltZVwiLFxuICBcIndlZWtcIixcbl07XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwidGV4dFwiLFxuICBbXG4gICAge1xuICAgICAgbmFtZTogXCJpbnB1dFR5cGVcIixcbiAgICAgIGRlZmF1bHQ6IFwidGV4dFwiLFxuICAgICAgY2hvaWNlczogW1xuICAgICAgICBcImNvbG9yXCIsXG4gICAgICAgIFwiZGF0ZVwiLFxuICAgICAgICBcImRhdGV0aW1lXCIsXG4gICAgICAgIFwiZGF0ZXRpbWUtbG9jYWxcIixcbiAgICAgICAgXCJlbWFpbFwiLFxuICAgICAgICBcIm1vbnRoXCIsXG4gICAgICAgIFwibnVtYmVyXCIsXG4gICAgICAgIFwicGFzc3dvcmRcIixcbiAgICAgICAgXCJyYW5nZVwiLFxuICAgICAgICBcInRlbFwiLFxuICAgICAgICBcInRleHRcIixcbiAgICAgICAgXCJ0aW1lXCIsXG4gICAgICAgIFwidXJsXCIsXG4gICAgICAgIFwid2Vla1wiLFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwic2l6ZTpudW1iZXJcIixcbiAgICAgIG1pblZhbHVlOiAwLFxuICAgICAgZGVwZW5kc09uOiBcImlucHV0VHlwZVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICBpZiAoIW9iaikgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gb2JqLmlzVGV4dElucHV0O1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwidGV4dFVwZGF0ZU1vZGVcIixcbiAgICAgIGRlZmF1bHQ6IFwiZGVmYXVsdFwiLFxuICAgICAgY2hvaWNlczogW1wiZGVmYXVsdFwiLCBcIm9uQmx1clwiLCBcIm9uVHlwaW5nXCJdLFxuICAgICAgZGVwZW5kc09uOiBcImlucHV0VHlwZVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICBpZiAoIW9iaikgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gb2JqLmlzVGV4dElucHV0O1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiYXV0b0NvbXBsZXRlXCIsXG4gICAgICBkYXRhTGlzdDogW1xuICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgXCJob25vcmlmaWMtcHJlZml4XCIsXG4gICAgICAgIFwiZ2l2ZW4tbmFtZVwiLFxuICAgICAgICBcImFkZGl0aW9uYWwtbmFtZVwiLFxuICAgICAgICBcImZhbWlseS1uYW1lXCIsXG4gICAgICAgIFwiaG9ub3JpZmljLXN1ZmZpeFwiLFxuICAgICAgICBcIm5pY2tuYW1lXCIsXG4gICAgICAgIFwib3JnYW5pemF0aW9uLXRpdGxlXCIsXG4gICAgICAgIFwidXNlcm5hbWVcIixcbiAgICAgICAgXCJuZXctcGFzc3dvcmRcIixcbiAgICAgICAgXCJjdXJyZW50LXBhc3N3b3JkXCIsXG4gICAgICAgIFwib3JnYW5pemF0aW9uXCIsXG4gICAgICAgIFwic3RyZWV0LWFkZHJlc3NcIixcbiAgICAgICAgXCJhZGRyZXNzLWxpbmUxXCIsXG4gICAgICAgIFwiYWRkcmVzcy1saW5lMlwiLFxuICAgICAgICBcImFkZHJlc3MtbGluZTNcIixcbiAgICAgICAgXCJhZGRyZXNzLWxldmVsNFwiLFxuICAgICAgICBcImFkZHJlc3MtbGV2ZWwzXCIsXG4gICAgICAgIFwiYWRkcmVzcy1sZXZlbDJcIixcbiAgICAgICAgXCJhZGRyZXNzLWxldmVsMVwiLFxuICAgICAgICBcImNvdW50cnlcIixcbiAgICAgICAgXCJjb3VudHJ5LW5hbWVcIixcbiAgICAgICAgXCJwb3N0YWwtY29kZVwiLFxuICAgICAgICBcImNjLW5hbWVcIixcbiAgICAgICAgXCJjYy1naXZlbi1uYW1lXCIsXG4gICAgICAgIFwiY2MtYWRkaXRpb25hbC1uYW1lXCIsXG4gICAgICAgIFwiY2MtZmFtaWx5LW5hbWVcIixcbiAgICAgICAgXCJjYy1udW1iZXJcIixcbiAgICAgICAgXCJjYy1leHBcIixcbiAgICAgICAgXCJjYy1leHAtbW9udGhcIixcbiAgICAgICAgXCJjYy1leHAteWVhclwiLFxuICAgICAgICBcImNjLWNzY1wiLFxuICAgICAgICBcImNjLXR5cGVcIixcbiAgICAgICAgXCJ0cmFuc2FjdGlvbi1jdXJyZW5jeVwiLFxuICAgICAgICBcInRyYW5zYWN0aW9uLWFtb3VudFwiLFxuICAgICAgICBcImxhbmd1YWdlXCIsXG4gICAgICAgIFwiYmRheVwiLFxuICAgICAgICBcImJkYXktZGF5XCIsXG4gICAgICAgIFwiYmRheS1tb250aFwiLFxuICAgICAgICBcImJkYXkteWVhclwiLFxuICAgICAgICBcInNleFwiLFxuICAgICAgICBcInVybFwiLFxuICAgICAgICBcInBob3RvXCIsXG4gICAgICAgIFwidGVsXCIsXG4gICAgICAgIFwidGVsLWNvdW50cnktY29kZVwiLFxuICAgICAgICBcInRlbC1uYXRpb25hbFwiLFxuICAgICAgICBcInRlbC1hcmVhLWNvZGVcIixcbiAgICAgICAgXCJ0ZWwtbG9jYWxcIixcbiAgICAgICAgXCJ0ZWwtbG9jYWwtcHJlZml4XCIsXG4gICAgICAgIFwidGVsLWxvY2FsLXN1ZmZpeFwiLFxuICAgICAgICBcInRlbC1leHRlbnNpb25cIixcbiAgICAgICAgXCJlbWFpbFwiLFxuICAgICAgICBcImltcHBcIixcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIm1pblwiLFxuICAgICAgZGVwZW5kc09uOiBcImlucHV0VHlwZVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICByZXR1cm4gISFvYmogJiYgb2JqLmlzTWluTWF4VHlwZTtcbiAgICAgIH0sXG4gICAgICBvblByb3BlcnR5RWRpdG9yVXBkYXRlOiBmdW5jdGlvbihvYmo6IGFueSwgcHJvcGVydHlFZGl0b3I6IGFueSkge1xuICAgICAgICBwcm9wZXJ0eUVkaXRvci5pbnB1dFR5cGUgPSBvYmouaW5wdXRUeXBlO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwibWF4XCIsXG4gICAgICBkZXBlbmRzT246IFwiaW5wdXRUeXBlXCIsXG4gICAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uKG9iajogYW55KSB7XG4gICAgICAgIHJldHVybiAhIW9iaiAmJiBvYmouaXNNaW5NYXhUeXBlO1xuICAgICAgfSxcbiAgICAgIG9uUHJvcGVydHlFZGl0b3JVcGRhdGU6IGZ1bmN0aW9uKG9iajogYW55LCBwcm9wZXJ0eUVkaXRvcjogYW55KSB7XG4gICAgICAgIHByb3BlcnR5RWRpdG9yLmlucHV0VHlwZSA9IG9iai5pbnB1dFR5cGU7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJtaW5WYWx1ZUV4cHJlc3Npb246ZXhwcmVzc2lvblwiLFxuICAgICAgY2F0ZWdvcnk6IFwibG9naWNcIixcbiAgICAgIGRlcGVuZHNPbjogXCJpbnB1dFR5cGVcIixcbiAgICAgIHZpc2libGVJZjogZnVuY3Rpb24ob2JqOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuICEhb2JqICYmIG9iai5pc01pbk1heFR5cGU7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJtYXhWYWx1ZUV4cHJlc3Npb246ZXhwcmVzc2lvblwiLFxuICAgICAgY2F0ZWdvcnk6IFwibG9naWNcIixcbiAgICAgIGRlcGVuZHNPbjogXCJpbnB1dFR5cGVcIixcbiAgICAgIHZpc2libGVJZjogZnVuY3Rpb24ob2JqOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuICEhb2JqICYmIG9iai5pc01pbk1heFR5cGU7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJtaW5FcnJvclRleHRcIixcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NNaW5FcnJvclRleHRcIixcbiAgICAgIGRlcGVuZHNPbjogXCJpbnB1dFR5cGVcIixcbiAgICAgIHZpc2libGVJZjogZnVuY3Rpb24ob2JqOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuICEhb2JqICYmIG9iai5pc01pbk1heFR5cGU7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJtYXhFcnJvclRleHRcIixcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NNYXhFcnJvclRleHRcIixcbiAgICAgIGRlcGVuZHNPbjogXCJpbnB1dFR5cGVcIixcbiAgICAgIHZpc2libGVJZjogZnVuY3Rpb24ob2JqOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuICEhb2JqICYmIG9iai5pc01pbk1heFR5cGU7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJzdGVwOm51bWJlclwiLFxuICAgICAgZGVwZW5kc09uOiBcImlucHV0VHlwZVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICBpZiAoIW9iaikgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gb2JqLmlucHV0VHlwZSA9PT0gXCJudW1iZXJcIjtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIm1heExlbmd0aDpudW1iZXJcIixcbiAgICAgIGRlZmF1bHQ6IC0xLFxuICAgICAgZGVwZW5kc09uOiBcImlucHV0VHlwZVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICBpZiAoIW9iaikgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gb2JqLmlzVGV4dElucHV0O1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwicGxhY2VIb2xkZXJcIixcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NQbGFjZUhvbGRlclwiLFxuICAgICAgZGVwZW5kc09uOiBcImlucHV0VHlwZVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICBpZiAoIW9iaikgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gb2JqLmlzVGV4dElucHV0O1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiZGF0YUxpc3Q6c3RyaW5nW11cIixcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NEYXRhTGlzdFwiLFxuICAgICAgZGVwZW5kc09uOiBcImlucHV0VHlwZVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICBpZiAoIW9iaikgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gb2JqLmlucHV0VHlwZSA9PT0gXCJ0ZXh0XCI7XG4gICAgICB9LFxuICAgIH0sXG4gIF0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25UZXh0TW9kZWwoXCJcIik7XG4gIH0sXG4gIFwidGV4dGJhc2VcIlxuKTtcblxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJ0ZXh0XCIsIChuYW1lKSA9PiB7XG4gIHJldHVybiBuZXcgUXVlc3Rpb25UZXh0TW9kZWwobmFtZSk7XG59KTtcbiIsImltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcbmltcG9ydCB7IEhlbHBlcnMgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5cbi8qKlxuICogQSBCYXNlIE1vZGVsIGZvciBhIGNvbW1lbnQgYW5kIHRleHQgcXVlc3Rpb25zXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvblRleHRCYXNlIGV4dGVuZHMgUXVlc3Rpb24ge1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwicGxhY2VIb2xkZXJcIiwgdGhpcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGlzVGV4dFZhbHVlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSB0ZXh0IGxlbmd0aC4gSWYgaXQgaXMgLTEsIGRlZmF1bCB2YWx1ZSwgdGhlbiB0aGUgc3VydmV5IG1heFRleHRMZW5ndGggcHJvcGVydHkgd2lsbCBiZSB1c2VkLlxuICAgKiBJZiBpdCBpcyAwLCB0aGVuIHRoZSB2YWx1ZSBpcyB1bmxpbWl0ZWRcbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5tYXhUZXh0TGVuZ3RoXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1heExlbmd0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtYXhMZW5ndGhcIik7XG4gIH1cbiAgcHVibGljIHNldCBtYXhMZW5ndGgodmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtYXhMZW5ndGhcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0TWF4TGVuZ3RoKCk6IGFueSB7XG4gICAgcmV0dXJuIEhlbHBlcnMuZ2V0TWF4TGVuZ3RoKFxuICAgICAgdGhpcy5tYXhMZW5ndGgsXG4gICAgICB0aGlzLnN1cnZleSA/IHRoaXMuc3VydmV5Lm1heFRleHRMZW5ndGggOiAtMVxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIHNldCB0aGUgaW5wdXQgcGxhY2UgaG9sZGVyLlxuICAgKi9cbiAgcHVibGljIGdldCBwbGFjZUhvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInBsYWNlSG9sZGVyXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcGxhY2VIb2xkZXIodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInBsYWNlSG9sZGVyXCIsIHZhbCk7XG4gICAgdGhpcy5jYWxjUmVuZGVyZWRQbGFjZUhvbGRlcigpO1xuICB9XG4gIGdldCBsb2NQbGFjZUhvbGRlcigpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJwbGFjZUhvbGRlclwiKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInRleHRiYXNlXCI7XG4gIH1cbiAgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3VwZXIuaXNFbXB0eSgpIHx8IHRoaXMudmFsdWUgPT09IFwiXCI7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIHZhbHVlIHRoYXQgc3BlY2lmaWVzIGhvdyB0aGUgcXVlc3Rpb24gdXBkYXRlcyBpdCdzIHZhbHVlLlxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZTpcbiAgICogLSBgZGVmYXVsdGAgLSBnZXQgdGhlIHZhbHVlIGZyb20gc3VydmV5LnRleHRVcGRhdGVNb2RlXG4gICAqIC0gYG9uQmx1cmAgLSB0aGUgdmFsdWUgaXMgdXBkYXRlZCBhZnRlciBhbiBpbnB1dCBsb3NlcyB0aGUgZm9jdXMuXG4gICAqIC0gYG9uVHlwaW5nYCAtIHVwZGF0ZSB0aGUgdmFsdWUgb2YgdGV4dCBxdWVzdGlvbnMsIFwidGV4dFwiIGFuZCBcImNvbW1lbnRcIiwgb24gZXZlcnkga2V5IHByZXNzLlxuICAgKlxuICAgKiBOb3RlLCB0aGF0IHNldHRpbmcgdG8gXCJvblR5cGluZ1wiIG1heSBsZWFkIHRvIGEgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24sIGluIGNhc2UgeW91IGhhdmUgbWFueSBleHByZXNzaW9ucyBpbiB0aGUgc3VydmV5LlxuICAgKiBAc2VlIHN1cnZleS50ZXh0VXBkYXRlTW9kZVxuICAgKi9cbiAgcHVibGljIGdldCB0ZXh0VXBkYXRlTW9kZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ0ZXh0VXBkYXRlTW9kZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHRleHRVcGRhdGVNb2RlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidGV4dFVwZGF0ZU1vZGVcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzU3VydmV5SW5wdXRUZXh0VXBkYXRlKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLnRleHRVcGRhdGVNb2RlID09IFwiZGVmYXVsdFwiKVxuICAgICAgcmV0dXJuICEhdGhpcy5zdXJ2ZXkgPyB0aGlzLnN1cnZleS5pc1VwZGF0ZVZhbHVlVGV4dE9uVHlwaW5nIDogZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMudGV4dFVwZGF0ZU1vZGUgPT0gXCJvblR5cGluZ1wiO1xuICB9XG4gIHB1YmxpYyBnZXQgcmVuZGVyZWRQbGFjZUhvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyZW5kZXJlZFBsYWNlSG9sZGVyXCIpO1xuICB9XG4gIHByb3RlY3RlZCBzZXRSZW5kZXJlZFBsYWNlSG9sZGVyKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicmVuZGVyZWRQbGFjZUhvbGRlclwiLCB2YWwpO1xuICB9XG4gIHByb3RlY3RlZCBvblJlYWRPbmx5Q2hhbmdlZCgpIHtcbiAgICBzdXBlci5vblJlYWRPbmx5Q2hhbmdlZCgpO1xuICAgIHRoaXMuY2FsY1JlbmRlcmVkUGxhY2VIb2xkZXIoKTtcbiAgfVxuICBlbmRMb2FkaW5nRnJvbUpzb24oKSB7XG4gICAgc3VwZXIuZW5kTG9hZGluZ0Zyb21Kc29uKCk7XG4gICAgdGhpcy5jYWxjUmVuZGVyZWRQbGFjZUhvbGRlcigpO1xuICB9XG4gIHByb3RlY3RlZCBjYWxjUmVuZGVyZWRQbGFjZUhvbGRlcigpIHtcbiAgICB0aGlzLnNldFJlbmRlcmVkUGxhY2VIb2xkZXIoXG4gICAgICB0aGlzLmhhc1BsYWNlSG9sZGVyKCkgPyB0aGlzLnBsYWNlSG9sZGVyIDogdW5kZWZpbmVkXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgaGFzUGxhY2VIb2xkZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmlzUmVhZE9ubHk7XG4gIH1cbn1cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwidGV4dGJhc2VcIixcbiAgW10sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25UZXh0QmFzZShcIlwiKTtcbiAgfSxcbiAgXCJxdWVzdGlvblwiXG4pO1xuIiwiaW1wb3J0IHsgSGFzaFRhYmxlIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgSUVsZW1lbnQgfSBmcm9tIFwiLi9iYXNlLWludGVyZmFjZXNcIjtcbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcbmltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5cbi8vVE9ETyByZXBsYWNlIGNvbXBsZXRlbHkgd2l0aCBFbGVtZW50RmFjdG9yeVxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uRmFjdG9yeSB7XG4gIHB1YmxpYyBzdGF0aWMgSW5zdGFuY2U6IFF1ZXN0aW9uRmFjdG9yeSA9IG5ldyBRdWVzdGlvbkZhY3RvcnkoKTtcbiAgcHVibGljIHN0YXRpYyBnZXQgRGVmYXVsdENob2ljZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXG4gICAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiY2hvaWNlc19JdGVtXCIpICsgXCIxXCIsXG4gICAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiY2hvaWNlc19JdGVtXCIpICsgXCIyXCIsXG4gICAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiY2hvaWNlc19JdGVtXCIpICsgXCIzXCIsXG4gICAgXTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGdldCBEZWZhdWx0Q29sdW1zKCk6IHN0cmluZ1tdIHtcbiAgICB2YXIgY29sTmFtZSA9IHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJtYXRyaXhfY29sdW1uXCIpICsgXCIgXCI7XG4gICAgcmV0dXJuIFtjb2xOYW1lICsgXCIxXCIsIGNvbE5hbWUgKyBcIjJcIiwgY29sTmFtZSArIFwiM1wiXTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGdldCBEZWZhdWx0Um93cygpOiBzdHJpbmdbXSB7XG4gICAgdmFyIHJvd05hbWUgPSBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwibWF0cml4X3Jvd1wiKSArIFwiIFwiO1xuICAgIHJldHVybiBbcm93TmFtZSArIFwiMVwiLCByb3dOYW1lICsgXCIyXCJdO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgZ2V0IERlZmF1bHRNdXRsaXBsZVRleHRJdGVtcygpOiBzdHJpbmdbXSB7XG4gICAgdmFyIGl0ZW1OYW1lID0gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm11bHRpcGxldGV4dF9pdGVtbmFtZVwiKTtcbiAgICByZXR1cm4gW2l0ZW1OYW1lICsgXCIxXCIsIGl0ZW1OYW1lICsgXCIyXCJdO1xuICB9XG4gIHByaXZhdGUgY3JlYXRvckhhc2g6IEhhc2hUYWJsZTwobmFtZTogc3RyaW5nKSA9PiBRdWVzdGlvbj4gPSB7fTtcblxuICBwdWJsaWMgcmVnaXN0ZXJRdWVzdGlvbihcbiAgICBxdWVzdGlvblR5cGU6IHN0cmluZyxcbiAgICBxdWVzdGlvbkNyZWF0b3I6IChuYW1lOiBzdHJpbmcpID0+IFF1ZXN0aW9uXG4gICkge1xuICAgIHRoaXMuY3JlYXRvckhhc2hbcXVlc3Rpb25UeXBlXSA9IHF1ZXN0aW9uQ3JlYXRvcjtcbiAgfVxuICBwdWJsaWMgdW5yZWdpc3RlckVsZW1lbnQoZWxlbWVudFR5cGU6IHN0cmluZykge1xuICAgIGRlbGV0ZSB0aGlzLmNyZWF0b3JIYXNoW2VsZW1lbnRUeXBlXTtcbiAgfVxuICBwdWJsaWMgY2xlYXIoKSB7XG4gICAgdGhpcy5jcmVhdG9ySGFzaCA9IHt9O1xuICB9XG4gIHB1YmxpYyBnZXRBbGxUeXBlcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5jcmVhdG9ySGFzaCkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdC5zb3J0KCk7XG4gIH1cbiAgcHVibGljIGNyZWF0ZVF1ZXN0aW9uKHF1ZXN0aW9uVHlwZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBRdWVzdGlvbiB7XG4gICAgdmFyIGNyZWF0b3IgPSB0aGlzLmNyZWF0b3JIYXNoW3F1ZXN0aW9uVHlwZV07XG4gICAgaWYgKGNyZWF0b3IgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGNyZWF0b3IobmFtZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVsZW1lbnRGYWN0b3J5IHtcbiAgcHVibGljIHN0YXRpYyBJbnN0YW5jZTogRWxlbWVudEZhY3RvcnkgPSBuZXcgRWxlbWVudEZhY3RvcnkoKTtcbiAgcHJpdmF0ZSBjcmVhdG9ySGFzaDogSGFzaFRhYmxlPChuYW1lOiBzdHJpbmcpID0+IElFbGVtZW50PiA9IHt9O1xuXG4gIHB1YmxpYyByZWdpc3RlckVsZW1lbnQoXG4gICAgZWxlbWVudFR5cGU6IHN0cmluZyxcbiAgICBlbGVtZW50Q3JlYXRvcjogKG5hbWU6IHN0cmluZykgPT4gSUVsZW1lbnRcbiAgKSB7XG4gICAgdGhpcy5jcmVhdG9ySGFzaFtlbGVtZW50VHlwZV0gPSBlbGVtZW50Q3JlYXRvcjtcbiAgfVxuICBwdWJsaWMgY2xlYXIoKSB7XG4gICAgdGhpcy5jcmVhdG9ySGFzaCA9IHt9O1xuICB9XG4gIHB1YmxpYyB1bnJlZ2lzdGVyRWxlbWVudChcbiAgICBlbGVtZW50VHlwZTogc3RyaW5nLFxuICAgIHJlbW92ZUZyb21TZXJpYWxpemVyOiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgZGVsZXRlIHRoaXMuY3JlYXRvckhhc2hbZWxlbWVudFR5cGVdO1xuICAgIFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS51bnJlZ2lzdGVyRWxlbWVudChlbGVtZW50VHlwZSk7XG4gICAgaWYgKHJlbW92ZUZyb21TZXJpYWxpemVyKSB7XG4gICAgICBTZXJpYWxpemVyLnJlbW92ZUNsYXNzKGVsZW1lbnRUeXBlKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldEFsbFR5cGVzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHZhciByZXN1bHQgPSBRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UuZ2V0QWxsVHlwZXMoKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5jcmVhdG9ySGFzaCkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdC5zb3J0KCk7XG4gIH1cbiAgcHVibGljIGNyZWF0ZUVsZW1lbnQoZWxlbWVudFR5cGU6IHN0cmluZywgbmFtZTogc3RyaW5nKTogSUVsZW1lbnQge1xuICAgIHZhciBjcmVhdG9yID0gdGhpcy5jcmVhdG9ySGFzaFtlbGVtZW50VHlwZV07XG4gICAgaWYgKGNyZWF0b3IgPT0gbnVsbClcbiAgICAgIHJldHVybiBRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlUXVlc3Rpb24oZWxlbWVudFR5cGUsIG5hbWUpO1xuICAgIHJldHVybiBjcmVhdG9yKG5hbWUpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBRdWVzdGlvbiwgSUNvbmRpdGlvbk9iamVjdCB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBTZXJpYWxpemVyIH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuaW1wb3J0IHsgU3VydmV5RXJyb3IgfSBmcm9tIFwiLi9zdXJ2ZXktZXJyb3JcIjtcblxuLyoqXG4gKiBBIE1vZGVsIGZvciBub24gdmFsdWUgcXVlc3Rpb24uIFRoaXMgcXVlc3Rpb24gZG9lc24ndCBhZGQgYW55IG5ldyBmdW5jdGlvbmFsaXR5LiBJdCBoaWRlcyBzb21lIHByb3BlcnRpZXMsIGluY2x1ZGluZyB0aGUgdmFsdWUuXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbk5vblZhbHVlIGV4dGVuZHMgUXVlc3Rpb24ge1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIm5vbnZhbHVlXCI7XG4gIH1cbiAgcHVibGljIGdldCBoYXNJbnB1dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGdldCBoYXNUaXRsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGdldFRpdGxlTG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc0NvbW1lbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBoYXNFcnJvcnMoZmlyZUNhbGxiYWNrOiBib29sZWFuID0gdHJ1ZSwgcmVjOiBhbnkgPSBudWxsKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBnZXRBbGxFcnJvcnMoKTogQXJyYXk8U3VydmV5RXJyb3I+IHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcHVibGljIHN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgYWRkQ29uZGl0aW9uT2JqZWN0c0J5Q29udGV4dChcbiAgICBvYmplY3RzOiBBcnJheTxJQ29uZGl0aW9uT2JqZWN0PixcbiAgICBjb250ZXh0OiBhbnlcbiAgKSB7fVxuICBwdWJsaWMgZ2V0Q29uZGl0aW9uSnNvbihvcGVyYXRvcjogc3RyaW5nID0gbnVsbCwgcGF0aDogc3RyaW5nID0gbnVsbCk6IGFueSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwibm9udmFsdWVcIixcbiAgW1xuICAgIHsgbmFtZTogXCJ0aXRsZVwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJkZXNjcmlwdGlvblwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJ2YWx1ZU5hbWVcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwiZW5hYmxlSWZcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwiZGVmYXVsdFZhbHVlXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcImNvcnJlY3RBbnN3ZXJcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwiaXNSZXF1aXJlZFwiLCB2aXNpYmxlOiBmYWxzZSwgaXNTZXJpYWxpemFibGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcInJlcXVpcmVkRXJyb3JUZXh0XCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcInJlYWRPbmx5XCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcInJlcXVpcmVkSWZcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwidmFsaWRhdG9yc1wiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJ0aXRsZUxvY2F0aW9uXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcInVzZURpc3BsYXlWYWx1ZXNJblRpdGxlXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gIF0sXG4gIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uTm9uVmFsdWUoXCJcIik7XG4gIH0sXG4gIFwicXVlc3Rpb25cIlxuKTtcbiIsImltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcblxuZXhwb3J0IGNsYXNzIFJlbmRlcmVyRmFjdG9yeSB7XG4gIHB1YmxpYyBzdGF0aWMgSW5zdGFuY2U6IFJlbmRlcmVyRmFjdG9yeSA9IG5ldyBSZW5kZXJlckZhY3RvcnkoKTtcblxuICBwcml2YXRlIHJlbmRlcmVyc0hhc2g6IHtcbiAgICBbcXVlc3Rpb25UeXBlOiBzdHJpbmddOiB7IFtyZW5kZXJBczogc3RyaW5nXTogYW55IH07XG4gIH0gPSB7fTtcblxuICBwdWJsaWMgdW5yZWdpc3RlclJlbmRlcmVyKHF1ZXN0aW9uVHlwZTogc3RyaW5nLCByZW5kZXJlckFzOiBzdHJpbmcpIHtcbiAgICBkZWxldGUgdGhpcy5yZW5kZXJlcnNIYXNoW3F1ZXN0aW9uVHlwZV1bcmVuZGVyZXJBc107XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJSZW5kZXJlcihcbiAgICBxdWVzdGlvblR5cGU6IHN0cmluZyxcbiAgICByZW5kZXJBczogc3RyaW5nLFxuICAgIHJlbmRlcmVyOiBhbnlcbiAgKSB7XG4gICAgaWYgKCF0aGlzLnJlbmRlcmVyc0hhc2hbcXVlc3Rpb25UeXBlXSkge1xuICAgICAgdGhpcy5yZW5kZXJlcnNIYXNoW3F1ZXN0aW9uVHlwZV0gPSB7fTtcbiAgICB9XG4gICAgdGhpcy5yZW5kZXJlcnNIYXNoW3F1ZXN0aW9uVHlwZV1bcmVuZGVyQXNdID0gcmVuZGVyZXI7XG4gIH1cblxuICBwdWJsaWMgZ2V0UmVuZGVyZXIocXVlc3Rpb25UeXBlOiBzdHJpbmcsIHJlbmRlckFzOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gKFxuICAgICAgKHRoaXMucmVuZGVyZXJzSGFzaFtxdWVzdGlvblR5cGVdICYmXG4gICAgICAgIHRoaXMucmVuZGVyZXJzSGFzaFtxdWVzdGlvblR5cGVdW3JlbmRlckFzXSkgfHxcbiAgICAgIFwiZGVmYXVsdFwiXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSZW5kZXJlckJ5UXVlc3Rpb24ocXVlc3Rpb246IFF1ZXN0aW9uKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRSZW5kZXJlcihxdWVzdGlvbi5nZXRUeXBlKCksIHF1ZXN0aW9uLnJlbmRlckFzKTtcbiAgfVxuICBwdWJsaWMgY2xlYXIoKSB7XG4gICAgdGhpcy5yZW5kZXJlcnNIYXNoID0ge307XG4gIH1cbn1cbiIsIi8qKlxuICogR2xvYmFsIHN1cnZleSBzZXR0aW5nc1xuICovXG5leHBvcnQgdmFyIHNldHRpbmdzID0ge1xuICAvKipcbiAgICogVGhlIHByZWZpeCB0aGF0IHVzZXMgdG8gc3RvcmUgdGhlIHF1ZXN0aW9uIGNvbW1lbnQsIGFzIHtxdWVzdGlvbk5hbWV9ICsge2NvbW1lbnRQcmVmaXh9LlxuICAgKiBUaGUgZGVmYXVsdFxuICAgKi9cbiAgY29tbWVudFByZWZpeDogXCItQ29tbWVudFwiLFxuICAvKipcbiAgICogRW5jb2RlIHBhcmFtZXRlciBvbiBjYWxsaW5nIHJlc3RmdWwgd2ViIEFQSVxuICAgKi9cbiAgd2Vic2VydmljZUVuY29kZVBhcmFtZXRlcnM6IHRydWUsXG4gIC8qKlxuICAgKiBDYWNoZSB0aGUgcmVzdWx0IGZvciBjaG9pY2VzIGdldHRpbmcgZnJvbSB3ZWIgc2VydmljZXMuIFNldCB0aGlzIHByb3BlcnR5IHRvIGZhbHNlLCB0byBkaXNhYmxlIHRoZSBjYWNoaW5nLlxuICAgKi9cbiAgdXNlQ2FjaGluZ0ZvckNob2ljZXNSZXN0ZnVsOiB0cnVlLFxuICBnZXQgdXNlQ2FjaGluZ0ZvckNob2ljZXNSZXN0ZnVsbCgpIHtcbiAgICByZXR1cm4gc2V0dGluZ3MudXNlQ2FjaGluZ0ZvckNob2ljZXNSZXN0ZnVsO1xuICB9LFxuICBzZXQgdXNlQ2FjaGluZ0ZvckNob2ljZXNSZXN0ZnVsbCh2YWw6IGJvb2xlYW4pIHtcbiAgICBzZXR0aW5ncy51c2VDYWNoaW5nRm9yQ2hvaWNlc1Jlc3RmdWwgPSB2YWw7XG4gIH0sXG4gIC8qKlxuICAgKiBTdXJ2ZXlKUyB3ZWIgc2VydmljZSBBUEkgdXJsXG4gICAqL1xuICBzdXJ2ZXlTZXJ2aWNlVXJsOiBcImh0dHBzOi8vYXBpLnN1cnZleWpzLmlvL3B1YmxpYy92MS9TdXJ2ZXlcIixcbiAgLyoqXG4gICAqIHNlcGFyYXRvciB0aGF0IGNhbiBhbGxvdyB0byBzZXQgdmFsdWUgYW5kIHRleHQgb2YgSXRlbVZhbHVlIG9iamVjdCBpbiBvbmUgc3RyaW5nIGFzOiBcInZhbHVlfHRleHRcIlxuICAgKi9cbiAgaXRlbVZhbHVlU2VwYXJhdG9yOiBcInxcIixcbiAgLyoqXG4gICAqIGRlZmF1bHQgbG9jYWxlIG5hbWUgZm9yIGxvY2FsaXphYmxlIHN0cmluZ3MgdGhhdCB1c2VzIGR1cmluZyBzZXJpYWxpemF0aW9uLCB7XCJkZWZhdWx0XCI6IFwiTXkgdGV4dFwiLCBcImRlXCI6IFwiTWVpbiBUZXh0XCJ9XG4gICAqL1xuICBkZWZhdWx0TG9jYWxlTmFtZTogXCJkZWZhdWx0XCIsXG4gIC8qKlxuICAgKiBEZWZhdWx0IHJvdyBuYW1lIGZvciBtYXRyaXggKHNpbmdsZSBjaG9pY2UpXG4gICAqL1xuICBtYXRyaXhEZWZhdWx0Um93TmFtZTogXCJkZWZhdWx0XCIsXG4gIC8qKlxuICAgKiBEZWZhdWx0IGNlbGwgdHlwZSBmb3IgZHJvcGRvd24gYW5kIGR5bmFtaWMgbWF0cmljZXNcbiAgICovXG4gIG1hdHJpeERlZmF1bHRDZWxsVHlwZTogXCJkcm9wZG93blwiLFxuICAvKipcbiAgICogVG90YWwgdmFsdWUgcG9zdGZpeCBmb3IgZHJvcGRvd24gYW5kIGR5bmFtaWMgbWF0cmljZXMuIFRoZSB0b3RhbCB2YWx1ZSBzdG9yZXMgYXM6IHttYXRyaXhOYW1lfSArIHtwb3N0Zml4fVxuICAgKi9cbiAgbWF0cml4VG90YWxWYWx1ZVBvc3RGaXg6IFwiLXRvdGFsXCIsXG4gIC8qKlxuICAgKiBNYXhpbXVtIHJvdyBjb3VudCBpbiBkeW5hbWljIG1hdHJpeFxuICAgKi9cbiAgbWF0cml4TWF4aW11bVJvd0NvdW50OiAxMDAwLFxuICAvKipcbiAgICogTWF4aW11bSByb3dDb3VudCB0aGF0IHJldHVybnMgaW4gYWRkQ29uZGl0aW9uT2JqZWN0c0J5Q29udGV4dCBmdW5jdGlvblxuICAgKi9cbiAgbWF0cml4TWF4Um93Q291bnRJbkNvbmRpdGlvbjogMSxcbiAgLyoqXG4gICAqIE1heGltdW0gcGFuZWwgY291bnQgaW4gZHluYW1pYyBwYW5lbFxuICAgKi9cbiAgcGFuZWxNYXhpbXVtUGFuZWxDb3VudDogMTAwLFxuICAvKipcbiAgICogTWF4aW11bSByYXRlIHZhbHVlIGNvdW50IGluIHJhdGluZyBxdWVzdGlvblxuICAgKi9cbiAgcmF0aW5nTWF4aW11bVJhdGVWYWx1ZUNvdW50OiAyMCxcbiAgLyoqXG4gICAqIERpc2FibGUgdGhlIHF1ZXN0aW9uIHdoaWxlIGNob2ljZXMgYXJlIGdldHRpbmcgZnJvbSB0aGUgd2ViIHNlcnZpY2VcbiAgICovXG4gIGRpc2FibGVPbkdldHRpbmdDaG9pY2VzRnJvbVdlYjogZmFsc2UsXG4gIC8qKlxuICAgKiBTZXQgdG8gdHJ1ZSB0byBhbHdheXMgc2VyaWFsaXplIHRoZSBsb2NhbGl6YXRpb24gc3RyaW5nIGFzIG9iamVjdCBldmVuIGlmIHRoZXJlIGlzIG9ubHkgb25lIHZhbHVlIGZvciBkZWZhdWx0IGxvY2FsZS4gSW5zdGVhZCBvZiBzdHJpbmcgXCJNeVN0clwiIHNlcmlhbGl6ZSBhcyB7ZGVmYXVsdDogXCJNeVN0clwifVxuICAgKi9cbiAgc2VyaWFsaXplTG9jYWxpemFibGVTdHJpbmdBc09iamVjdDogZmFsc2UsXG4gIC8qKlxuICAgKiBTZXQgdG8gZmFsc2UgdG8gaGlkZSBlbXB0eSBwYWdlIHRpdGxlIGFuZCBkZXNjcmlwdGlvbiBpbiBkZXNpZ24gbW9kZVxuICAgKi9cbiAgYWxsb3dTaG93RW1wdHlUaXRsZUluRGVzaWduTW9kZTogdHJ1ZSxcbiAgLyoqXG4gICAqIFNldCB0byBmYWxzZSB0byBoaWRlIGVtcHR5IHBhZ2UgZGVzY3JpcHRpb24gaW4gZGVzaWduIG1vZGVcbiAgICovXG4gIGFsbG93U2hvd0VtcHR5RGVzY3JpcHRpb25JbkRlc2lnbk1vZGU6IHRydWUsXG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byB0cnVlIHRvIGV4ZWN1dGUgdGhlIGNvbXBsZXRlIHRyaWdnZXIgb24gdmFsdWUgY2hhbmdlIGluc3RlYWQgb2Ygb24gbmV4dCBwYWdlLlxuICAgKi9cbiAgZXhlY3V0ZUNvbXBsZXRlVHJpZ2dlck9uVmFsdWVDaGFuZ2VkOiBmYWxzZSxcbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGZhbHNlIHRvIGV4ZWN1dGUgdGhlIHNraXAgdHJpZ2dlciBvbiBuZXh0IHBhZ2UgaW5zdGVhZCBvZiBvbiB2YWx1ZSBjaGFuZ2UuXG4gICAqL1xuICBleGVjdXRlU2tpcFRyaWdnZXJPblZhbHVlQ2hhbmdlZDogdHJ1ZSxcbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGNoYW5nZSByZWFkT25seUNvbW1lbnRSZW5kZXJNb2RlOiBcInRleHRhcmVhXCIgKGRlZmF1bHQpIG9yIChkaXYpXG4gICAqL1xuICByZWFkT25seUNvbW1lbnRSZW5kZXJNb2RlOiBcInRleHRhcmVhXCIsXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGlzIGZ1bmN0aW9uLCBzZXQgeW91ciBmdW5jdGlvbiwgaWYgeW91IHdhbnQgdG8gc2hvdyB5b3VyIG93biBkaWFsb2cgY29uZmlybSB3aW5kb3cgaW5zdGVhZCBvZiBzdGFuZGFyZCBicm93c2VyIHdpbmRvdy5cbiAgICogQHBhcmFtIG1lc3NhZ2VcbiAgICovXG4gIGNvbmZpcm1BY3Rpb25GdW5jOiBmdW5jdGlvbihtZXNzYWdlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gY29uZmlybShtZXNzYWdlKTtcbiAgfSxcbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgbWluV2lkdGggY29uc3RyYWludFxuICAgKi9cbiAgbWluV2lkdGg6IFwiMzAwcHhcIixcbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgbWluV2lkdGggY29uc3RyYWludFxuICAgKi9cbiAgbWF4V2lkdGg6IFwiaW5pdGlhbFwiLFxuICAvKipcbiAgICogVGhpcyBwcm9wZXJ0eSB0ZWxscyBob3cgbWFueSB0aW1lcyBzdXJ2ZXkgcmUtcnVuIGV4cHJlc3Npb25zIG9uIHZhbHVlIGNoYW5nZXMgZHVyaW5nIGNvbmRpdGlvbiBydW5uaW5nLiBXZSBuZWVkIGl0IHRvIGF2b2lkIHJlY3Vyc2lvbnMgaW4gdGhlIGV4cHJlc3Npb25zXG4gICAqL1xuICBtYXhpbXVtQ29uZGl0aW9uUnVuQ291bnRPblZhbHVlQ2hhbmdlZDogMTAsXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHZpc2libGVJbmRleCBmb3IgcXVlc3Rpb24gd2l0aCB0aXRsZUxvY2F0aW9uID0gXCJoaWRkZW5cIiBpcyAtMSwgYW5kIHN1cnZleSBkb2Vzbid0IGNvdW50IHRoZXNlIHF1ZXN0aW9ucyB3aGVuIHNldCBxdWVzdGlvbnMgbnVtYmVycy5cbiAgICogU2V0IGl0IHRydWUsIGFuZCBhIHF1ZXN0aW9uIG5leHQgdG8gYSBxdWVzdGlvbiB3aXRoIGhpZGRlbiB0aXRsZSB3aWxsIGluY3JlYXNlIGl0J3MgbnVtYmVyLlxuICAgKi9cbiAgc2V0UXVlc3Rpb25WaXNpYmxlSW5kZXhGb3JIaWRkZW5UaXRsZTogZmFsc2UsXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHZpc2libGVJbmRleCBmb3IgcXVlc3Rpb24gd2l0aCBoaWRlTnVtYmVyID0gdHJ1ZSBpcyAtMSwgYW5kIHN1cnZleSBkb2Vzbid0IGNvdW50IHRoZXNlIHF1ZXN0aW9ucyB3aGVuIHNldCBxdWVzdGlvbnMgbnVtYmVycy5cbiAgICogU2V0IGl0IHRydWUsIGFuZCBhIHF1ZXN0aW9uIG5leHQgdG8gYSBxdWVzdGlvbiB3aXRoIGhpZGRlbiB0aXRsZSBudW1iZXIgd2lsbCBpbmNyZWFzZSBpdCdzIG51bWJlci5cbiAgICovXG4gIHNldFF1ZXN0aW9uVmlzaWJsZUluZGV4Rm9ySGlkZGVuTnVtYmVyOiBmYWxzZSxcbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQgYWxsIHJvd3MgYXJlIHJlbmRlcmVkIG5vIG1hdHRlcnMgd2h3dGhlciB0aGV5IGFyZSB2aXNpYmxlLlxuICAgKiBTZXQgaXQgdHJ1ZSwgYW5kIHN1cnZleSBtYXJrdXAgcm93cyB3aWxsIGJlIHJlbmRlcmVkIG9ubHkgaWYgdGhleSBhcmUgdmlzaWJsZSBpbiB2aWV3cG9ydC5cbiAgICogVGhpcyBmZWF0dXJlIGlzIGV4cGVyaW1hbnRhbCBhbmQgbWlnaHQgZG8gbm90IHN1cHBvcnQgYWxsIHRoZSB1c2UgY2FzZXMuXG4gICAqL1xuICBsYXp5Um93c1JlbmRlcmluZzogZmFsc2UsXG4gIGxhenlSb3dzUmVuZGVyaW5nU3RhcnRSb3c6IDMsXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IGNoZWNrYm94IGFuZCByYWRpb2dyb3VwIGl0ZW1zIGFyZSBvcmRlcmVkIGluIHJvd3MuXG4gICAqIFNldCBpdCBcImNvbHVtblwiLCBhbmQgaXRlbXMgd2lsbCBiZSBvcmRlcmVkIGluIGNvbHVtbnMuXG4gICAqL1xuICBzaG93SXRlbXNJbk9yZGVyOiBcImRlZmF1bHRcIixcbiAgLyoqXG4gICAqIFN1cHBvcnRlZCB2YWxpZGF0b3JzIGJ5IHF1ZXN0aW9uIHR5cGVzLiBZb3UgY2FuIG1vZGlmeSB0aGlzIHZhcmlhYmxlIHRvIGFkZCB2YWxpZGF0b3JzIGZvciBuZXcgcXVlc3Rpb24gdHlwZXMgb3IgYWRkL3JlbW92ZSBmb3IgZXhpc3RpbmcgcXVlc3Rpb24gdHlwZXMuXG4gICAqL1xuICBzdXBwb3J0ZWRWYWxpZGF0b3JzOiB7XG4gICAgcXVlc3Rpb246IFtcImV4cHJlc3Npb25cIl0sXG4gICAgY29tbWVudDogW1widGV4dFwiLCBcInJlZ2V4XCJdLFxuICAgIHRleHQ6IFtcIm51bWVyaWNcIiwgXCJ0ZXh0XCIsIFwicmVnZXhcIiwgXCJlbWFpbFwiXSxcbiAgICBjaGVja2JveDogW1wiYW5zd2VyY291bnRcIl0sXG4gIH0sXG4gIC8qKlxuICAgKiBTZXQgdGhlIHZhbHVlIGFzIHN0cmluZyBcInl5eXktbW0tZGRcIi4gdGV4dCBxdWVzdGlvbnMgd2l0aCBpbnB1dFR5cGUgXCJkYXRlXCIgd2lsbCBub3QgYWxsb3cgdG8gc2V0IHRvIHN1cnZleSBkYXRlIHRoYXQgbGVzcyB0aGFuIHRoaXMgdmFsdWVcbiAgICovXG4gIG1pbkRhdGU6IFwiXCIsXG4gIC8qKlxuICAgKiBTZXQgdGhlIHZhbHVlIGFzIHN0cmluZyBcInl5eXktbW0tZGRcIi4gdGV4dCBxdWVzdGlvbnMgd2l0aCBpbnB1dFR5cGUgXCJkYXRlXCIgd2lsbCBub3QgYWxsb3cgdG8gc2V0IHRvIHN1cnZleSBkYXRlIHRoYXQgZ3JlYXRlciB0aGFuIHRoaXMgdmFsdWVcbiAgICovXG4gIG1heERhdGU6IFwiXCIsXG4gIHNob3dNb2RhbDogPFxuICAgIChcbiAgICAgIGNvbXBvbmVudE5hbWU6IHN0cmluZyxcbiAgICAgIGRhdGE6IGFueSxcbiAgICAgIG9uQXBwbHk6ICgpID0+IGJvb2xlYW4sXG4gICAgICBvbkNhbmNlbD86ICgpID0+IHZvaWRcbiAgICApID0+IHZvaWRcbiAgPnVuZGVmaW5lZCxcbiAgc3VwcG9ydENyZWF0b3JWMjogZmFsc2UsXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgYSBsaXN0IG9mIGN1c3RvbSBpY29ucy5cbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gcmVwbGFjZSBTdXJ2ZXlKUyBkZWZhdWx0IGljb25zIChkaXNwbGF5ZWQgaW4gVUkgZWxlbWVudHMgb2YgU3VydmV5SlMgTGlicmFyeSBvciBDcmVhdG9yKSB3aXRoIHlvdXIgY3VzdG9tIGljb25zLlxuICAgKiBGb3IgZXZlcnkgZGVmYXVsdCBpY29uIHRvIHJlcGxhY2UsIGFkZCBhIGtleS92YWx1ZSBvYmplY3Qgd2l0aCB0aGUgZGVmYXVsdCBpY29uJ3MgbmFtZSBhcyBhIGtleSBhbmQgdGhlIG5hbWUgb2YgeW91ciBjdXN0b20gaWNvbiBhcyBhIHZhbHVlLlxuICAgKiBGb3IgZXhhbXBsZTogU3VydmV5LnNldHRpbmdzLmN1c3RvbUljb25zW1wiaWNvbi1yZWRvXCJdID0gXCJteS1vd24tcmVkby1pY29uXCJcbiAgICovXG4gIGN1c3RvbUljb25zOiB7fSxcbn07XG4iLCJpbXBvcnQgeyBzdXJ2ZXlDc3MgfSBmcm9tIFwiLi9kZWZhdWx0Q3NzL2Nzc3N0YW5kYXJkXCI7XG5leHBvcnQgY2xhc3MgU3R5bGVzTWFuYWdlciB7XG4gIHByaXZhdGUgc3RhdGljIFN1cnZleUpTU3R5bGVzU2hlZXRJZCA9IFwic3VydmV5anMtc3R5bGVzXCI7XG5cbiAgcHVibGljIHN0YXRpYyBTdHlsZXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgLy8gXCIuc3ZfYm9vdHN0cmFwX2Nzc1wiOlxuICAgIC8vICAgXCJwb3NpdGlvbjogcmVsYXRpdmU7IHdpZHRoOiAxMDAlOyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjRmNGY0XCIsXG4gICAgLy8gXCIuc3ZfYm9vdHN0cmFwX2NzcyAuc3ZfY3VzdG9tX2hlYWRlclwiOlxuICAgIC8vICAgXCJwb3NpdGlvbjogYWJzb2x1dGU7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDI3NXB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjZTdlN2U3O1wiLFxuICAgIC8vIFwiLnN2X2Jvb3RzdHJhcF9jc3MgLnN2X2NvbnRhaW5lclwiOlxuICAgIC8vICAgXCJtYXgtd2lkdGg6IDgwJTsgbWFyZ2luOiBhdXRvOyBwb3NpdGlvbjogcmVsYXRpdmU7IGNvbG9yOiAjNmQ3MDcyOyBwYWRkaW5nOiAwIDFlbTtcIixcbiAgICAvLyBcIi5zdl9ib290c3RyYXBfY3NzIC5wYW5lbC1ib2R5XCI6XG4gICAgLy8gICBcImJhY2tncm91bmQtY29sb3I6IHdoaXRlOyBwYWRkaW5nOiAxZW0gMWVtIDVlbSAxZW07IGJvcmRlci10b3A6IDJweCBzb2xpZCBsaWdodGdyYXk7XCIsXG4gICAgXCIuc3ZfbWFpbiBzcGFuXCI6IFwid29yZC1icmVhazogYnJlYWstd29yZDtcIixcblxuICAgIFwiLnN2X21haW4gbGVnZW5kXCI6IFwiYm9yZGVyOiBub25lOyBtYXJnaW46IDA7XCIsXG5cbiAgICBcIi5zdl9ib290c3RyYXBfY3NzIC5zdl9xc3RuXCI6IFwicGFkZGluZzogMC41ZW0gMWVtIDEuNWVtIDFlbTtcIixcbiAgICBcIi5zdl9ib290c3RyYXBfY3NzIC5zdl9xY2JjIGlucHV0W3R5cGU9Y2hlY2tib3hdLCAuc3ZfYm9vdHN0cmFwX2NzcyAuc3ZfcWNiYyBpbnB1dFt0eXBlPXJhZGlvXVwiOlxuICAgICAgXCJ2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyBtYXJnaW4tdG9wOiAtMXB4XCIsXG4gICAgXCIuc3ZfYm9vdHN0cmFwX2NzcyAuc3ZfcXN0biBmaWVsZHNldFwiOiBcImRpc3BsYXk6IGJsb2NrO1wiLFxuICAgIFwiLnN2X2Jvb3RzdHJhcF9jc3MgLnN2X3FzdG4gIC5zdl9xX2NoZWNrYm94X2lubGluZSwgLnN2X2Jvb3RzdHJhcF9jc3MgLnN2X3FzdG4gLnN2X3FfcmFkaW9ncm91cF9pbmxpbmVcIjpcbiAgICAgIFwiZGlzcGxheTogaW5saW5lLWJsb2NrO1wiLFxuXG4gICAgXCIuc3ZfYm9vdHN0cmFwX2NzcyAuc3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy1jb250YWluZXIgXCI6XG4gICAgICBcInBvc2l0aW9uOiByZWxhdGl2ZTsgbWFyZ2luLXJpZ2h0OiAyNTBweDsgbWFyZ2luLWxlZnQ6IDQwcHg7IG1hcmdpbi10b3A6IDEwcHg7XCIsXG5cbiAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAuc3ZfcV9yYWRpb2dyb3VwX2NvbnRyb2xfbGFiZWxcIjpcbiAgICAgIFwiZGlzcGxheTogaW5saW5lOyBwb3NpdGlvbjogc3RhdGljO1wiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5jaGVja2JveFwiOlxuICAgICAgXCJtYXJnaW4tdG9wOjEwcHg7bWFyZ2luLWJvdHRvbToxMHB4O1wiLFxuXG4gICAgXCIuc3Zfcm93XCI6IFwiY2xlYXI6IGJvdGg7IG1pbi13aWR0aDozMDBweDtcIixcbiAgICBcIi5zdl9yb3cgLnN2X3FzdG5cIjogXCJmbG9hdDogbGVmdFwiLFxuICAgIFwiLnN2X3JvdyAuc3ZfcXN0bjpsYXN0LWNoaWxkXCI6IFwiZmxvYXQ6IG5vbmVcIixcbiAgICBcIi5zdl9xc3RuXCI6XG4gICAgICBcImRpc3BsYXk6IHZlcnRpY2FsLWFsaWduOiB0b3A7IG92ZXJmbG93OiBhdXRvOyBtaW4td2lkdGg6MzAwcHg7XCIsXG4gICAgXCIuc3ZfcF9jb250YWluZXJcIjogXCJkaXNwbGF5OiB2ZXJ0aWNhbC1hbGlnbjogdG9wOyBtaW4td2lkdGg6MzAwcHg7XCIsXG5cbiAgICBcIi5zdl9xX3RpdGxlIC5zdl9xdWVzdGlvbl9pY29uXCI6IFwiZmxvYXQ6IHJpZ2h0OyBtYXJnaW4tcmlnaHQ6IDFlbTtcIixcbiAgICBcIi5zdl9xX3RpdGxlIC5zdl9xdWVzdGlvbl9pY29uOjpiZWZvcmVcIjpcbiAgICAgIFwiY29udGVudDogJyc7IGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7IGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjsgcGFkZGluZzogMC41ZW07IGRpc3BsYXk6IGlubGluZS1ibG9jazsgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEQ5NGJXd2dkbVZ5YzJsdmJqMGlNUzR3SWlCbGJtTnZaR2x1WnowaWRYUm1MVGdpUHo0TkNqd2hMUzBnUjJWdVpYSmhkRzl5T2lCQlpHOWlaU0JKYkd4MWMzUnlZWFJ2Y2lBeU1pNHdMakVzSUZOV1J5QkZlSEJ2Y25RZ1VHeDFaeTFKYmlBdUlGTldSeUJXWlhKemFXOXVPaUEyTGpBd0lFSjFhV3hrSURBcElDQXRMVDROQ2p4emRtY2dkbVZ5YzJsdmJqMGlNUzR4SWlCcFpEMGlUR0Y1WlhKZk1TSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklpQjRiV3h1Y3pwNGJHbHVhejBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TVRrNU9TOTRiR2x1YXlJZ2VEMGlNSEI0SWlCNVBTSXdjSGdpRFFvSklIWnBaWGRDYjNnOUlqQWdNQ0F4TUNBeE1DSWdjM1I1YkdVOUltVnVZV0pzWlMxaVlXTnJaM0p2ZFc1a09tNWxkeUF3SURBZ01UQWdNVEE3SWlCNGJXdzZjM0JoWTJVOUluQnlaWE5sY25abElqNE5Danh6ZEhsc1pTQjBlWEJsUFNKMFpYaDBMMk56Y3lJK0RRb0pMbk4wTUh0bWFXeHNPaU0yUkRjd056STdmUTBLUEM5emRIbHNaVDROQ2p4d2IyeDVaMjl1SUdOc1lYTnpQU0p6ZERBaUlIQnZhVzUwY3owaU1pd3lJREFzTkNBMUxEa2dNVEFzTkNBNExESWdOU3cxSUNJdlBnMEtQQzl6ZG1jK0RRbz0pO1wiLFxuICAgIFwiLnN2X3FfdGl0bGUgLnN2X3F1ZXN0aW9uX2ljb24uc3ZfZXhwYW5kZWQ6OmJlZm9yZVwiOlxuICAgICAgXCJ0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1wiLFxuICAgIFwiLnN2X3FibG4gLmNoZWNrYm94LW1hdGVyaWFsXCI6IFwibWFyZ2luLXJpZ2h0OiAzcHg7XCIsXG4gICAgXCIuc3ZfcWNieCAuY2hlY2tib3gtbWF0ZXJpYWxcIjogXCJtYXJnaW4tcmlnaHQ6IDVweDtcIixcbiAgICBcIi5zdl9xY2J4IC5jaGVja2JveCBsYWJlbFwiOiBcImp1c3RpZnktY29udGVudDogbGVmdDsgZGlzcGxheTogaW5saW5lLWJsb2NrO1wiLFxuICAgIFwiLnN2X3FzdG4gLnJhZGlvIGxhYmVsXCI6IFwianVzdGlmeS1jb250ZW50OiBsZWZ0OyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XCIsXG4gICAgXCIuc3ZfcXN0biAuc3ZfcV9pbWdzZWwgPiBsYWJlbCBpbWdcIjogXCJwb2ludGVyLWV2ZW50czogbm9uZTtcIixcbiAgICBcIi5zdl9xc3RuIC5zdl9xX2ltZ3NlbC5zdl9xX2ltYWdlcGlja2VyX2lubGluZVwiOiBcImRpc3BsYXk6IGlubGluZS1ibG9jaztcIixcbiAgICBcIi5zdl9xc3RuIGxhYmVsLnN2X3FfbV9sYWJlbFwiOlxuICAgICAgXCJwb3NpdGlvbjogYWJzb2x1dGU7IG1hcmdpbjogMDsgZGlzcGxheTogYmxvY2s7IHdpZHRoOiAxMDAlO1wiLFxuICAgIFwiLnN2X3FzdG4gdGRcIjogXCJwb3NpdGlvbjogcmVsYXRpdmU7XCIsXG4gICAgXCIuc3ZfcV9tdF9pdGVtX3ZhbHVlXCI6IFwiZmxvYXQ6IGxlZnQ7XCIsXG4gICAgJ1tkaXI9XCJydGxcIl0gLnN2X3FfbXRfaXRlbV92YWx1ZSc6IFwiZmxvYXQ6IHJpZ2h0O1wiLFxuICAgIFwiLnN2X3FzdG4uc3ZfcXN0bl9sZWZ0XCI6IFwibWFyZ2luLXRvcDogMC43NWVtO1wiLFxuICAgIFwiLnN2X3FzdG4gLnRpdGxlLWxlZnRcIjogXCJmbG9hdDogbGVmdDsgbWFyZ2luLXJpZ2h0OiAxZW07XCIsXG4gICAgJ1tkaXI9XCJydGxcIl0gLnN2X3FzdG4gLnRpdGxlLWxlZnQnOiBcImZsb2F0OiByaWdodDsgbWFyZ2luLWxlZnQ6IDFlbTtcIixcbiAgICBcIi5zdl9xc3RuIC5jb250ZW50LWxlZnRcIjogXCJvdmVyZmxvdzogaGlkZGVuXCIsXG4gICAgXCIuc3ZfcV9yYWRpb2dyb3VwX2lubGluZSAuc3ZfcV9yYWRpb2dyb3VwX290aGVyXCI6IFwiZGlzcGxheTogaW5saW5lLWJsb2NrO1wiLFxuICAgIFwiLnN2X3FfY2hlY2tib3hfaW5saW5lIC5zdl9xX2NoZWNrYm94X290aGVyXCI6IFwiZGlzcGxheTogaW5saW5lLWJsb2NrO1wiLFxuICAgIFwiLnN2X3FfY2hlY2tib3hfaW5saW5lLCAuc3ZfcV9yYWRpb2dyb3VwX2lubGluZSwgLnN2X3FfaW1hZ2VwaWNrZXJfaW5saW5lXCI6XG4gICAgICBcImxpbmUtaGVpZ2h0OiAyLjVlbTtcIixcbiAgICBcIi5mb3JtLWlubGluZSAuc3ZfcV9jaGVja2JveF9pbmxpbmU6bm90KDpsYXN0LWNoaWxkKVwiOiBcIm1hcmdpbi1yaWdodDogMWVtO1wiLFxuICAgIFwiLmZvcm0taW5saW5lIC5zdl9xX3JhZGlvZ3JvdXBfaW5saW5lOm5vdCg6bGFzdC1jaGlsZClcIjpcbiAgICAgIFwibWFyZ2luLXJpZ2h0OiAxZW07XCIsXG4gICAgXCIuc3ZfaW1nc2VsIC5zdl9xX2ltYWdlcGlja2VyX2lubGluZTpub3QoOmxhc3QtY2hpbGQpXCI6XG4gICAgICBcIm1hcmdpbi1yaWdodDogMWVtO1wiLFxuICAgIFwiLnN2X3FzdG4gZmllbGRzZXRcIjogXCJib3JkZXI6IG5vbmU7IG1hcmdpbjogMDsgcGFkZGluZzogMDtcIixcbiAgICBcIi5zdl9xc3RuIC5zdl9xX2ZpbGVfcGxhY2Vob2xkZXJcIjogXCJkaXNwbGF5Om5vbmVcIixcblxuICAgIFwiLnN2X3BfdGl0bGVcIjogXCJwYWRkaW5nLWxlZnQ6IDFlbTsgcGFkZGluZy1ib3R0b206IDAuM2VtO1wiLFxuICAgIFwiLnN2X3BfdGl0bGVfZXhwYW5kYWJsZVwiOiBcImN1cnNvcjogcG9pbnRlcjtcIixcbiAgICBcIi5zdl9xX3RpdGxlX2V4cGFuZGFibGVcIjogXCJjdXJzb3I6IHBvaW50ZXI7XCIsXG4gICAgXCIuc3ZfcF90aXRsZSAuc3ZfcGFuZWxfaWNvblwiOiBcImZsb2F0OiByaWdodDsgbWFyZ2luLXJpZ2h0OiAxZW07XCIsXG4gICAgXCIuc3ZfcF90aXRsZSAuc3ZfcGFuZWxfaWNvbjo6YmVmb3JlXCI6XG4gICAgICBcImNvbnRlbnQ6ICcnOyBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7IHBhZGRpbmc6IDAuNWVtOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBEOTRiV3dnZG1WeWMybHZiajBpTVM0d0lpQmxibU52WkdsdVp6MGlkWFJtTFRnaVB6NE5DandoTFMwZ1IyVnVaWEpoZEc5eU9pQkJaRzlpWlNCSmJHeDFjM1J5WVhSdmNpQXlNaTR3TGpFc0lGTldSeUJGZUhCdmNuUWdVR3gxWnkxSmJpQXVJRk5XUnlCV1pYSnphVzl1T2lBMkxqQXdJRUoxYVd4a0lEQXBJQ0F0TFQ0TkNqeHpkbWNnZG1WeWMybHZiajBpTVM0eElpQnBaRDBpVEdGNVpYSmZNU0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JaUI0Yld4dWN6cDRiR2x1YXowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzk0YkdsdWF5SWdlRDBpTUhCNElpQjVQU0l3Y0hnaURRb0pJSFpwWlhkQ2IzZzlJakFnTUNBeE1DQXhNQ0lnYzNSNWJHVTlJbVZ1WVdKc1pTMWlZV05yWjNKdmRXNWtPbTVsZHlBd0lEQWdNVEFnTVRBN0lpQjRiV3c2YzNCaFkyVTlJbkJ5WlhObGNuWmxJajROQ2p4emRIbHNaU0IwZVhCbFBTSjBaWGgwTDJOemN5SStEUW9KTG5OME1IdG1hV3hzT2lNMlJEY3dOekk3ZlEwS1BDOXpkSGxzWlQ0TkNqeHdiMng1WjI5dUlHTnNZWE56UFNKemREQWlJSEJ2YVc1MGN6MGlNaXd5SURBc05DQTFMRGtnTVRBc05DQTRMRElnTlN3MUlDSXZQZzBLUEM5emRtYytEUW89KTtcIixcbiAgICBcIi5zdl9wX3RpdGxlIC5zdl9wYW5lbF9pY29uLnN2X2V4cGFuZGVkOjpiZWZvcmVcIjpcbiAgICAgIFwidHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcIixcbiAgICBcIi5zdl9wX2Zvb3RlclwiOiBcInBhZGRpbmctbGVmdDogMWVtOyBwYWRkaW5nLWJvdHRvbTogMWVtO3BhZGRpbmctdG9wOiAxZW07XCIsXG5cbiAgICBcIi5zdl9tYXRyaXhfY2VsbF9kZXRhaWxfYnV0dG9uXCI6IFwicG9zaXRpb246IHJlbGF0aXZlXCIsXG4gICAgXCIuc3ZfZGV0YWlsX3BhbmVsX2ljb25cIjpcbiAgICAgIFwiZGlzcGxheTogYmxvY2s7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogNTAlOyB0b3A6IDUwJTsgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7IHdpZHRoOiAxNHB4OyBoZWlnaHQ6IDE0cHg7XCIsXG4gICAgXCIuc3ZfZGV0YWlsX3BhbmVsX2ljb246OmJlZm9yZVwiOlxuICAgICAgXCJjb250ZW50OiAnJzsgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyOyB3aWR0aDogMTRweDsgaGVpZ2h0OiAxNHB4OyBkaXNwbGF5OiBibG9jazsgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTsgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDJTNGeG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J3V0Zi04JyUzRiUzRSUzQyEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDIxLjEuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgLS0lM0UlM0NzdmcgdmVyc2lvbj0nMS4xJyBpZD0nTGF5ZXJfMScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB4bWxuczp4bGluaz0naHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycgeD0nMHB4JyB5PScwcHgnIHZpZXdCb3g9JzAgMCAxNSAxNScgc3R5bGU9J2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMTUgMTU7JyB4bWw6c3BhY2U9J3ByZXNlcnZlJyUzRSUzQ3N0eWxlIHR5cGU9J3RleHQvY3NzJyUzRSAuc3QwJTdCZmlsbDolMjNGRkZGRkY7JTdEJTBBJTNDL3N0eWxlJTNFJTNDcG9seWdvbiBjbGFzcz0nc3QwJyBwb2ludHM9JzE0LDUuNSAxMi42LDQuMSA3LjUsOS4xIDIuNCw0LjEgMSw1LjUgNy41LDEyICcvJTNFJTNDL3N2ZyUzRSUwQVxcXCIpO1wiLFxuICAgIFwiLnN2X2RldGFpbF9wYW5lbF9pY29uLnN2X2RldGFpbF9leHBhbmRlZDo6YmVmb3JlXCI6XG4gICAgICBcInRyYW5zZm9ybTogcm90YXRlKDBkZWcpXCIsXG4gICAgXCIuc3ZfbWF0cml4X2VtcHR5X3Jvd3Nfc2VjdGlvblwiOlxuICAgICAgXCJ0ZXh0LWFsaWduOiBjZW50ZXI7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XCIsXG4gICAgXCIuc3ZfbWF0cml4X2VtcHR5X3Jvd3NfdGV4dFwiOiBcInBhZGRpbmc6MjBweFwiLFxuXG4gICAgXCIuc3ZfcV9maWxlID4gaW5wdXRbdHlwZT1maWxlXSwgLnN2X3FfZmlsZSA+IGJ1dHRvblwiOlxuICAgICAgXCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XCIsXG4gICAgXCIuc3ZfcV9maWxlX3ByZXZpZXdcIjpcbiAgICAgIFwiZGlzcGxheTogaW5saW5lLWJsb2NrOyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyBib3JkZXI6IDFweCBzb2xpZCBsaWdodGdyYXk7IHBhZGRpbmc6IDVweDsgbWFyZ2luLXRvcDogMTBweDtcIixcbiAgICBcIi5zdl9xX2ZpbGVfcHJldmlldyA+IGFcIjpcbiAgICAgIFwiZGlzcGxheTogYmxvY2s7IG92ZXJmbG93OiBoaWRkZW47IHZlcnRpY2FsLWFsaWduOiB0b3A7IHdoaXRlLXNwYWNlOiBub3dyYXA7IHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1wiLFxuICAgIFwiLnN2X3FfZmlsZV9yZW1vdmVfYnV0dG9uXCI6IFwibGluZS1oZWlnaHQ6IG5vcm1hbDtcIixcbiAgICBcIi5zdl9xX2ZpbGVfcmVtb3ZlXCI6IFwiZGlzcGxheTogYmxvY2s7IGN1cnNvcjogcG9pbnRlcjtcIixcblxuICAgIFwiLnN2X3FfbV9jZWxsX3RleHRcIjogXCJjdXJzb3I6IHBvaW50ZXI7XCIsXG5cbiAgICBcIi5zdl9xX2RkX290aGVyXCI6IFwibWFyZ2luLXRvcDogMWVtO1wiLFxuICAgIFwiLnN2X3FfZGRfb3RoZXIgaW5wdXRcIjogXCJ3aWR0aDogMTAwJTtcIixcblxuICAgIFwiLnN2X3FzdG4gLnN2LXEtY29sLTEsIC5zdi1xdWVzdGlvbiAuc3YtcS1jb2wtMVwiOlxuICAgICAgXCJ3aWR0aDogMTAwJTsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBwYWRkaW5nLXJpZ2h0OiAxZW07IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XCIsXG4gICAgXCIuc3ZfcXN0biAuc3YtcS1jb2wtMiwgLnN2LXF1ZXN0aW9uIC5zdi1xLWNvbC0yXCI6XG4gICAgICBcIndpZHRoOiBjYWxjKDUwJSAtIDFlbSk7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgcGFkZGluZy1yaWdodDogMWVtOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB3b3JkLWJyZWFrOiBicmVhay13b3JkO1wiLFxuICAgIFwiLnN2X3FzdG4gLnN2LXEtY29sLTMsIC5zdi1xdWVzdGlvbiAuc3YtcS1jb2wtM1wiOlxuICAgICAgXCJ3aWR0aDogY2FsYygzMy4zMzMzMyUgLSAxZW0pOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBhZGRpbmctcmlnaHQ6IDFlbTsgYm94LXNpemluZzogYm9yZGVyLWJveDsgd29yZC1icmVhazogYnJlYWstd29yZDtcIixcbiAgICBcIi5zdl9xc3RuIC5zdi1xLWNvbC00LCAuc3YtcXVlc3Rpb24gLnN2LXEtY29sLTRcIjpcbiAgICAgIFwid2lkdGg6IGNhbGMoMjUlIC0gMWVtKTsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBwYWRkaW5nLXJpZ2h0OiAxZW07IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XCIsXG4gICAgXCIuc3ZfcXN0biAuc3YtcS1jb2wtNSwgLnN2LXF1ZXN0aW9uIC5zdi1xLWNvbC01XCI6XG4gICAgICBcIndpZHRoOiBjYWxjKDIwJSAtIDFlbSk7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgcGFkZGluZy1yaWdodDogMWVtOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB3b3JkLWJyZWFrOiBicmVhay13b3JkO1wiLFxuXG4gICAgXCIuc3ZfcXN0biAuc3YtcS1jb2x1bW4tMSwgLnN2LXF1ZXN0aW9uIC5zdi1xLWNvbHVtbi0xXCI6XG4gICAgICBcIndpZHRoOiAxMDAlOyBtYXgtd2lkdGg6IDEwMCU7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgcGFkZGluZy1yaWdodDogMWVtOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB3b3JkLWJyZWFrOiBicmVhay13b3JkO1wiLFxuICAgIFwiLnN2X3FzdG4gLnN2LXEtY29sdW1uLTIsIC5zdi1xdWVzdGlvbiAuc3YtcS1jb2x1bW4tMlwiOlxuICAgICAgXCJtYXgtd2lkdGg6IDUwJTsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBwYWRkaW5nLXJpZ2h0OiAxZW07IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XCIsXG4gICAgXCIuc3ZfcXN0biAuc3YtcS1jb2x1bW4tMywgLnN2LXF1ZXN0aW9uIC5zdi1xLWNvbHVtbi0zXCI6XG4gICAgICBcIm1heC13aWR0aDogMzMuMzMzMzMlOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBhZGRpbmctcmlnaHQ6IDFlbTsgYm94LXNpemluZzogYm9yZGVyLWJveDsgd29yZC1icmVhazogYnJlYWstd29yZDtcIixcbiAgICBcIi5zdl9xc3RuIC5zdi1xLWNvbHVtbi00LCAuc3YtcXVlc3Rpb24gLnN2LXEtY29sdW1uLTRcIjpcbiAgICAgIFwibWF4LXdpZHRoOiAyNSU7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgcGFkZGluZy1yaWdodDogMWVtOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB3b3JkLWJyZWFrOiBicmVhay13b3JkO1wiLFxuICAgIFwiLnN2X3FzdG4gLnN2LXEtY29sdW1uLTUsIC5zdi1xdWVzdGlvbiAuc3YtcS1jb2x1bW4tNVwiOlxuICAgICAgXCJtYXgtd2lkdGg6IDIwJTsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBwYWRkaW5nLXJpZ2h0OiAxZW07IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XCIsXG5cbiAgICBcIi5zdl9xc3RuIC5zdl9xX2ZpbGVfaW5wdXRcIjogXCJjb2xvcjogdHJhbnNwYXJlbnQ7XCIsXG5cbiAgICBcIi5zdl9xc3RuIC5zdl9xX2ltZ3NlbCBsYWJlbCA+IGRpdlwiOlxuICAgICAgXCJvdmVyZmxvdzogaGlkZGVuOyB3aGl0ZS1zcGFjZTogbm93cmFwOyB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsgcGFkZGluZzogNHB4OyBib3JkZXI6IDFweCBzb2xpZCBsaWdodGdyYXk7IGJvcmRlci1yYWRpdXM6IDRweDtcIixcbiAgICBcIi5zdl9xc3RuIC5zdl9xX2ltZ3NlbCBsYWJlbCA+IGRpdiA+IGltZywgLnN2X3FzdG4gLnN2X3FfaW1nc2VsIGxhYmVsID4gZGl2ID4gZW1iZWRcIjpcbiAgICAgIFwiZGlzcGxheTogYmxvY2s7XCIsXG5cbiAgICBcIi5zdl9xc3RuIHRhYmxlIHRyIHRkIC5zdl9xX21fY2VsbF9sYWJlbFwiOlxuICAgICAgXCJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IDA7IHJpZ2h0OiAwOyB0b3A6IDA7IGJvdHRvbTogMDtcIixcblxuICAgIFwiZi1wYW5lbFwiOiBcInBhZGRpbmc6IDAuNWVtIDFlbTsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBsaW5lLWhlaWdodDogMmVtO1wiLFxuXG4gICAgXCIuc3ZfcHJvZ3Jlc3NfYmFyID4gc3BhblwiOiBcIndoaXRlLXNwYWNlOiBub3dyYXA7XCIsXG5cbiAgICAvL3Byb2dyZXNzIGJ1dHRvbnNcbiAgICBcIi5zdl9wcm9ncmVzcy1idXR0b25zX19jb250YWluZXItY2VudGVyXCI6IFwidGV4dC1hbGlnbjogY2VudGVyO1wiLFxuICAgIFwiLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX2NvbnRhaW5lclwiOlxuICAgICAgXCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGZvbnQtc2l6ZTowOyB3aWR0aDogMTAwJTsgbWF4LXdpZHRoOiAxMTAwcHg7IHdoaXRlLXNwYWNlOiBub3dyYXA7IG92ZXJmbG93OiBoaWRkZW47XCIsXG4gICAgXCIuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19faW1hZ2UtYnV0dG9uLWxlZnRcIjpcbiAgICAgIFwiZGlzcGxheTogaW5saW5lLWJsb2NrOyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyBtYXJnaW4tdG9wOiAyMnB4OyBmb250LXNpemU6IDE0cHg7IHdpZHRoOiAxNnB4OyBoZWlnaHQ6IDE2cHg7IGN1cnNvcjogcG9pbnRlcjsgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEQ5NGJXd2dkbVZ5YzJsdmJqMGlNUzR3SWlCbGJtTnZaR2x1WnowaWRYUm1MVGdpUHo0TkNqd2hMUzBnUjJWdVpYSmhkRzl5T2lCQlpHOWlaU0JKYkd4MWMzUnlZWFJ2Y2lBeU1pNHdMakVzSUZOV1J5QkZlSEJ2Y25RZ1VHeDFaeTFKYmlBdUlGTldSeUJXWlhKemFXOXVPaUEyTGpBd0lFSjFhV3hrSURBcElDQXRMVDROQ2p4emRtY2dkbVZ5YzJsdmJqMGlNUzR4SWlCcFpEMGlUR0Y1WlhKZk1TSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklpQjRiV3h1Y3pwNGJHbHVhejBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TVRrNU9TOTRiR2x1YXlJZ2VEMGlNSEI0SWlCNVBTSXdjSGdpRFFvSklIWnBaWGRDYjNnOUlqQWdNQ0F4TmlBeE5pSWdjM1I1YkdVOUltVnVZV0pzWlMxaVlXTnJaM0p2ZFc1a09tNWxkeUF3SURBZ01UWWdNVFk3SWlCNGJXdzZjM0JoWTJVOUluQnlaWE5sY25abElqNE5Danh3YjJ4NVoyOXVJSEJ2YVc1MGN6MGlNVEVzTVRJZ09Td3hOQ0F6TERnZ09Td3lJREV4TERRZ055dzRJQ0l2UGcwS1BDOXpkbWMrRFFvPSk7XCIsXG4gICAgXCIuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19faW1hZ2UtYnV0dG9uLXJpZ2h0XCI6XG4gICAgICBcImRpc3BsYXk6IGlubGluZS1ibG9jazsgdmVydGljYWwtYWxpZ246IHRvcDsgbWFyZ2luLXRvcDogMjJweDsgZm9udC1zaXplOiAxNHB4OyB3aWR0aDogMTZweDsgaGVpZ2h0OiAxNnB4OyBjdXJzb3I6IHBvaW50ZXI7IGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBEOTRiV3dnZG1WeWMybHZiajBpTVM0d0lpQmxibU52WkdsdVp6MGlkWFJtTFRnaVB6NE5DandoTFMwZ1IyVnVaWEpoZEc5eU9pQkJaRzlpWlNCSmJHeDFjM1J5WVhSdmNpQXlNaTR3TGpFc0lGTldSeUJGZUhCdmNuUWdVR3gxWnkxSmJpQXVJRk5XUnlCV1pYSnphVzl1T2lBMkxqQXdJRUoxYVd4a0lEQXBJQ0F0TFQ0TkNqeHpkbWNnZG1WeWMybHZiajBpTVM0eElpQnBaRDBpVEdGNVpYSmZNU0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JaUI0Yld4dWN6cDRiR2x1YXowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzk0YkdsdWF5SWdlRDBpTUhCNElpQjVQU0l3Y0hnaURRb0pJSFpwWlhkQ2IzZzlJakFnTUNBeE5pQXhOaUlnYzNSNWJHVTlJbVZ1WVdKc1pTMWlZV05yWjNKdmRXNWtPbTVsZHlBd0lEQWdNVFlnTVRZN0lpQjRiV3c2YzNCaFkyVTlJbkJ5WlhObGNuWmxJajROQ2p4d2IyeDVaMjl1SUhCdmFXNTBjejBpTlN3MElEY3NNaUF4TXl3NElEY3NNVFFnTlN3eE1pQTVMRGdnSWk4K0RRbzhMM04yWno0TkNnPT0pO1wiLFxuICAgIFwiLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX2ltYWdlLWJ1dHRvbi0taGlkZGVuXCI6IFwidmlzaWJpbGl0eTogaGlkZGVuO1wiLFxuICAgIFwiLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QtY29udGFpbmVyXCI6XG4gICAgICBcIm1heC13aWR0aDogY2FsYygxMDAlIC0gMzZweCk7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgb3ZlcmZsb3c6IGhpZGRlbjtcIixcbiAgICBcIi5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0XCI6XG4gICAgICBcImRpc3BsYXk6IGlubGluZS1ibG9jazsgd2lkdGg6IG1heC1jb250ZW50OyBwYWRkaW5nLWxlZnQ6IDI4cHg7IHBhZGRpbmctcmlnaHQ6IDI4cHg7IG1hcmdpbi10b3A6IDE0cHg7IG1hcmdpbi1ib3R0b206IDE0cHg7XCIsXG4gICAgXCIuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCBsaVwiOlxuICAgICAgXCJ3aWR0aDogMTM4cHg7IGZvbnQtc2l6ZTogMTRweDsgZm9udC1mYW1pbHk6ICdTZWdvZSBVSScsICdIZWx2ZXRpY2EgTmV1ZScsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7IHBvc2l0aW9uOiByZWxhdGl2ZTsgdGV4dC1hbGlnbjogY2VudGVyOyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XCIsXG4gICAgXCIuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCBsaTpiZWZvcmVcIjpcbiAgICAgIFwid2lkdGg6IDI0cHg7IGhlaWdodDogMjRweDsgY29udGVudDogJyc7IGxpbmUtaGVpZ2h0OiAzMHB4OyBib3JkZXI6IDNweCBzb2xpZCAjOGRkOWNhOyBkaXNwbGF5OiBibG9jazsgbWFyZ2luOiAwIGF1dG8gMTBweCBhdXRvOyBib3JkZXItcmFkaXVzOiA1MCU7IGJveC1zaXppbmc6IGNvbnRlbnQtYm94OyBiYWNrZ3JvdW5kLWNvbG9yOiAjOGRkOWNhOyBjdXJzb3I6IHBvaW50ZXI7XCIsXG4gICAgXCIuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCBsaTphZnRlclwiOlxuICAgICAgXCJ3aWR0aDogNzMlOyBoZWlnaHQ6IDNweDsgY29udGVudDogJyc7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgYmFja2dyb3VuZC1jb2xvcjogI2Q0ZDRkNDsgdG9wOiAxNXB4OyBsZWZ0OiAtMzYuNSU7XCIsXG4gICAgXCIuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCBsaTpmaXJzdC1jaGlsZDphZnRlclwiOiBcImNvbnRlbnQ6IG5vbmU7XCIsXG4gICAgXCIuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCAuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fcGFnZS10aXRsZVwiOlxuICAgICAgXCJ3aWR0aDogMTAwJTsgb3ZlcmZsb3c6IGhpZGRlbjsgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7IHdoaXRlLXNwYWNlOiBub3dyYXA7IGNvbG9yOiAkdGV4dC1jb2xvcjsgZm9udC13ZWlnaHQ6IGJvbGQ7XCIsXG4gICAgXCIuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCAuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fcGFnZS1kZXNjcmlwdGlvblwiOlxuICAgICAgXCJ3aWR0aDogMTAwJTsgb3ZlcmZsb3c6IGhpZGRlbjsgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7IHdoaXRlLXNwYWNlOiBub3dyYXA7IGNvbG9yOiAkdGV4dC1jb2xvcjtcIixcbiAgICBcIi5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0IGxpLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QtZWxlbWVudC0tcGFzc2VkOmJlZm9yZVwiOlxuICAgICAgXCJib3JkZXItY29sb3I6ICMxYWIzOTQ7IGJhY2tncm91bmQtY29sb3I6ICMxYWIzOTQ7XCIsXG4gICAgXCIuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCBsaS5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLXBhc3NlZCArIGxpOmFmdGVyXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICM4ZGQ5Y2E7XCIsXG4gICAgXCIuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCBsaS5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLWN1cnJlbnQ6YmVmb3JlXCI6XG4gICAgICBcImJvcmRlci1jb2xvcjogIzFhYjM5NDsgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XCIsXG4gICAgXCIuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCBsaS5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLXBhc3NlZC5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLWN1cnJlbnQ6YmVmb3JlXCI6XG4gICAgICBcImJvcmRlci1jb2xvcjogIzFhYjM5NDsgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XCIsXG4gICAgXCIuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCBsaS5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLW5vbmNsaWNrYWJsZTpiZWZvcmVcIjpcbiAgICAgIFwiY3Vyc29yOiBub3QtYWxsb3dlZDtcIixcblxuICAgIC8vIHJhbmtpbmdcbiAgICBcIi5zdi1yYW5raW5nXCI6IFwib3V0bGluZTogbm9uZTtcIixcbiAgICBcIi5zdi1yYW5raW5nLWl0ZW1cIjpcbiAgICAgIFwiY3Vyc29yOiBwb2ludGVyOyBtYXJnaW4tYm90dG9tOiA1cHg7cG9zaXRpb246IHJlbGF0aXZlO1wiLFxuICAgIFwiLnN2LXJhbmtpbmctaXRlbTpmb2N1cyAuc3YtcmFua2luZy1pdGVtX19pY29uLS1ob3ZlclwiOlxuICAgICAgXCJ2aXNpYmlsaXR5OiBoaWRkZW47XCIsXG4gICAgXCIuc3YtcmFua2luZy1pdGVtOmhvdmVyIC5zdi1yYW5raW5nLWl0ZW1fX2ljb24tLWhvdmVyXCI6XG4gICAgICBcInZpc2liaWxpdHk6IHZpc2libGU7XCIsXG4gICAgXCIuc3YtcXVlc3Rpb24tLWRpc2FibGVkIC5zdi1yYW5raW5nLWl0ZW06aG92ZXIgLnN2LXJhbmtpbmctaXRlbV9faWNvbi0taG92ZXJcIjpcbiAgICAgIFwidmlzaWJpbGl0eTogaGlkZGVuO1wiLFxuICAgIFwiLnN2LXJhbmtpbmctaXRlbTpmb2N1c1wiOiBcIm91dGxpbmU6IG5vbmU7XCIsXG4gICAgXCIuc3YtcmFua2luZy1pdGVtOmZvY3VzIC5zdi1yYW5raW5nLWl0ZW1fX2ljb24tLWZvY3VzXCI6XG4gICAgICBcInZpc2liaWxpdHk6IHZpc2libGU7IHRvcDogMTVweDtcIixcbiAgICBcIi5zdi1yYW5raW5nLWl0ZW06Zm9jdXMgLnN2LXJhbmtpbmctaXRlbV9faW5kZXhcIjpcbiAgICAgIFwiYmFja2dyb3VuZDogd2hpdGU7IGJvcmRlcjogMnB4IHNvbGlkICMxOWIzOTQ7XCIsXG4gICAgXCIuc3YtcmFua2luZy1pdGVtX19jb250ZW50XCI6XG4gICAgICBcImRpc3BsYXk6IGlubGluZS1ibG9jaztiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtwYWRkaW5nLXRvcDogNXB4O3BhZGRpbmctYm90dG9tOiA1cHg7cGFkZGluZy1sZWZ0OiAzNXB4O3BhZGRpbmctcmlnaHQ6IDEwcHg7IGJvcmRlci1yYWRpdXM6IDEwMHB4O1wiLFxuICAgIFwiLnN2LXJhbmtpbmctaXRlbV9faWNvbi1jb250YWluZXJcIjpcbiAgICAgIFwicG9zaXRpb246IGFic29sdXRlO2xlZnQ6IDA7dG9wOiAwO2JvdHRvbTogMDt3aWR0aDogMzVweDtcIixcbiAgICBcIi5zdi1yYW5raW5nLWl0ZW1fX2ljb25cIjpcbiAgICAgIFwidmlzaWJpbGl0eTogaGlkZGVuO2xlZnQ6MTBweDt0b3A6MjBweDtmaWxsOiMxOWIzOTQ7cG9zaXRpb246IGFic29sdXRlO1wiLFxuICAgIFwiLnN2LXJhbmtpbmctaXRlbV9faW5kZXhcIjpcbiAgICAgIFwiZGlzcGxheTogaW5saW5lLWJsb2NrO3BhZGRpbmc6IDEwcHggMTZweDtiYWNrZ3JvdW5kOiByZ2JhKDI1LCAxNzksIDE0OCwgMC4xKTtib3JkZXItcmFkaXVzOiAxMDBweDtib3JkZXI6IDJweCBzb2xpZCB0cmFuc3BhcmVudDsgbWFyZ2luLXJpZ2h0OiAxMHB4O1wiLFxuICAgIFwiLnN2LXJhbmtpbmctaXRlbV9fdGV4dFwiOiBcImRpc3BsYXk6IGlubGluZS1ibG9jaztcIixcbiAgICBcIi5zdi1yYW5raW5nLWl0ZW1fX2dob3N0XCI6XG4gICAgICBcImRpc3BsYXk6IG5vbmU7YmFja2dyb3VuZDogI2YzZjNmMztib3JkZXItcmFkaXVzOiAxMDBweDt3aWR0aDogMjAwcHg7aGVpZ2h0OiA1NXB4O3otaW5kZXg6IDE7cG9zaXRpb246IGFic29sdXRlO2xlZnQ6IDM1cHg7XCIsXG4gICAgXCIuc3YtcmFua2luZy1pdGVtLS1naG9zdCAuc3YtcmFua2luZy1pdGVtX19naG9zdFwiOiBcImRpc3BsYXk6IGJsb2NrO1wiLFxuICAgIFwiLnN2LXJhbmtpbmctaXRlbS0tZ2hvc3QgLnN2LXJhbmtpbmctaXRlbV9fY29udGVudFwiOiBcInZpc2liaWxpdHk6IGhpZGRlbjtcIixcbiAgICBcIi5zdi1yYW5raW5nLWl0ZW0tLWRyYWcgLnN2LXJhbmtpbmctaXRlbV9fY29udGVudFwiOlxuICAgICAgXCJib3gtc2hhZG93OiAwcHggOHB4IDE2cHggcmdiYSgwLCAwLCAwLCAwLjEpO2JvcmRlci1yYWRpdXM6IDEwMHB4O1wiLFxuICAgIFwiLnN2LXJhbmtpbmctLWRyYWcgLnN2LXJhbmtpbmctaXRlbTpob3ZlciAuc3YtcmFua2luZy1pdGVtX19pY29uXCI6XG4gICAgICBcInZpc2liaWxpdHk6IGhpZGRlbjtcIixcbiAgICBcIi5zdi1yYW5raW5nLWl0ZW0tLWRyYWcgLnN2LXJhbmtpbmctaXRlbV9faWNvbi0taG92ZXJcIjpcbiAgICAgIFwidmlzaWJpbGl0eTogdmlzaWJsZTtcIixcbiAgICBcIi5zdi1yYW5raW5nLS1tb2JpbGUgLnN2LXJhbmtpbmctaXRlbV9faWNvbi0taG92ZXJcIjpcbiAgICAgIFwidmlzaWJpbGl0eTp2aXNpYmxlOyBmaWxsOiM5ZjlmOWY7XCIsXG4gICAgXCIuc3YtcmFua2luZy0tbW9iaWxlLnN2LXJhbmtpbmctLWRyYWcgLnN2LXJhbmtpbmctaXRlbS0tZ2hvc3QgLnN2LXJhbmtpbmctaXRlbV9faWNvbi5zdi1yYW5raW5nLWl0ZW1fX2ljb24tLWhvdmVyXCI6XG4gICAgICBcInZpc2liaWxpdHk6aGlkZGVuO1wiLFxuXG4gICAgXCIuc3ZfcXN0biAuc3ZfcV9zZWxlY3RfY29sdW1uXCI6XG4gICAgICBcImRpc3BsYXk6IGlubGluZS1ibG9jazsgdmVydGljYWwtYWxpZ246IHRvcDsgbWluLXdpZHRoOiAxMCU7XCIsXG5cbiAgICBcIi5zdl9xc3RuIC5zdl9xX3NlbGVjdF9jb2x1bW4gPiAqOm5vdCguc3ZfdGVjaG5pY2FsKVwiOiBcImRpc3BsYXk6IGJsb2NrO1wiLFxuXG4gICAgXCIuc3ZfbWFpbiAuc3ZfY29udGFpbmVyIC5zdl9ib2R5IC5zdl9wX3Jvb3QgLnN2X3FzdG4gLnN2X3Ffc2VsZWN0X2NvbHVtbiB0ZXh0YXJlYVwiOlxuICAgICAgXCJtYXJnaW4tbGVmdDogMDsgcGFkZGluZy1sZWZ0OiAwOyBsaW5lLWhlaWdodDogaW5pdGlhbDtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1oaWRkZW5cIjogXCJkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtdmlzdWFsbHloaWRkZW5cIjpcbiAgICAgIFwicG9zaXRpb246IGFic29sdXRlOyBoZWlnaHQ6IDFweCAhaW1wb3J0YW50OyB3aWR0aDogMXB4ICFpbXBvcnRhbnQ7IG92ZXJmbG93OiBoaWRkZW47IGNsaXA6IHJlY3QoMXB4IDFweCAxcHggMXB4KTsgY2xpcDogcmVjdCgxcHgsIDFweCwgMXB4LCAxcHgpO1wiLFxuXG4gICAgLy8gcGFuZWxkeW5hbWljIHByb2dyZXNzXG4gICAgXCIuc3ZfbWFpbiAuc3YtcHJvZ3Jlc3NcIjpcbiAgICAgIFwiaGVpZ2h0OiAwLjE5ZW07IGJhY2tncm91bmQtY29sb3I6ICRoZWFkZXItYmFja2dyb3VuZC1jb2xvcjsgcG9zaXRpb246IHJlbGF0aXZlO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LXByb2dyZXNzX19iYXJcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7IGhlaWdodDogMTAwJTsgcG9zaXRpb246IHJlbGF0aXZlO1wiLFxuICAgIC8vIEVPIHBhbmVsZHluYW1pYyBwcm9ncmVzc1xuXG4gICAgLy8gcGFuZWxkeW5hbWljXG4gICAgXCIuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy1jb250YWluZXJcIjpcbiAgICAgIFwicG9zaXRpb246IHJlbGF0aXZlOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHdpZHRoOiBjYWxjKDEwMCUgLSAyNTBweCk7IG1hcmdpbi10b3A6IDIwcHg7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19hZGQtYnRuXCI6IFwiZmxvYXQ6IHJpZ2h0O1wiLFxuICAgIFwiLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fYWRkLWJ0bi0tbGlzdC1tb2RlXCI6XG4gICAgICBcImZsb2F0OiBub25lOyBtYXJnaW4tdG9wOiAwO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fcmVtb3ZlLWJ0blwiOiBcIm1hcmdpbi10b3A6IDEuMjVlbTtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX3JlbW92ZS1idG4tLXJpZ2h0XCI6XG4gICAgICBcIm1hcmdpbi10b3A6IDA7IG1hcmdpbi1sZWZ0OiAxLjI1ZW07XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19wcmV2LWJ0biwgLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fbmV4dC1idG5cIjpcbiAgICAgIFwiYm94LXNpemluZzogYm9yZGVyLWJveDsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBjdXJzb3I6IHBvaW50ZXI7IHdpZHRoOiAwLjdlbTsgdG9wOiAtMC4yOGVtOyBwb3NpdGlvbjogYWJzb2x1dGU7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19wcmV2LWJ0blwiOlxuICAgICAgXCJsZWZ0OiAtMS4zZW07IHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX25leHQtYnRuIFwiOlxuICAgICAgXCJyaWdodDogLTEuM2VtOyB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fcHJldi1idG4uc3YtcGFuZWxkeW5hbWljX19wcmV2LWJ0bi0tZGlzYWJsZWQsIC5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX25leHQtYnRuLnN2LXBhbmVsZHluYW1pY19fbmV4dC1idG4tLWRpc2FibGVkXCI6XG4gICAgICBcImN1cnNvcjogYXV0bztcIixcbiAgICBcIi5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzLXRleHRcIjpcbiAgICAgIFwiZm9udC13ZWlnaHQ6IGJvbGQ7IGZvbnQtc2l6ZTogMC44N2VtOyBtYXJnaW4tdG9wOiAwLjY5ZW07IG1hcmdpbi1sZWZ0OiA0ZW1cIixcbiAgICAvLyBFTyBwYW5lbGR5bmFtaWNcbiAgICAvL2Jvb2xlYW5cbiAgICBcIi5zdl9tYWluIC5zdi1ib29sZWFuX19zd2l0Y2hcIjpcbiAgICAgIFwiZGlzcGxheTogaW5saW5lLWJsb2NrOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB3aWR0aDogNjNweDsgaGVpZ2h0OiAyNHB4OyBtYXJnaW4tcmlnaHQ6IDE3cHg7IG1hcmdpbi1sZWZ0OiAyMXB4OyBwYWRkaW5nOiAycHggM3B4OyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyBib3JkZXItcmFkaXVzOiAxMnB4OyBjdXJzb3I6IHBvaW50ZXI7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbl9fc2xpZGVyXCI6XG4gICAgICBcImRpc3BsYXk6IGlubGluZS1ibG9jazsgd2lkdGg6IDIwcHg7IGhlaWdodDogMjBweDsgdHJhbnNpdGlvbi1kdXJhdGlvbjogLjRzOyB0cmFuc2l0aW9uLXByb3BlcnR5OiBtYXJnaW4tbGVmdDsgYm9yZGVyOiBub25lOyBib3JkZXItcmFkaXVzOiAxMDAlO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWJvb2xlYW5fX2xhYmVsXCI6IFwidmVydGljYWwtYWxpZ246IG1pZGRsZTsgY3Vyc29yOiBwb2ludGVyO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWJvb2xlYW4tLWluZGV0ZXJtaW5hdGUgIC5zdi1ib29sZWFuX19zbGlkZXJcIjpcbiAgICAgIFwibWFyZ2luLWxlZnQ6IGNhbGMoNTAlIC0gMTBweCk7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbi0tY2hlY2tlZCAgLnN2LWJvb2xlYW5fX3NsaWRlclwiOlxuICAgICAgXCJtYXJnaW4tbGVmdDogY2FsYygxMDAlIC0gMjBweCk7XCIsXG4gICAgXCJbZGlyPSdydGwnXSAuc3YtYm9vbGVhbl9fbGFiZWwgXCI6IFwiZmxvYXQ6IHJpZ2h0O1wiLFxuICAgIFwiW2Rpcj0ncnRsJ10gLnN2LWJvb2xlYW4tLWluZGV0ZXJtaW5hdGUgLnN2LWJvb2xlYW5fX3NsaWRlclwiOlxuICAgICAgXCJtYXJnaW4tcmlnaHQ6IGNhbGMoNTAlIC0gMC42MjVlbSk7XCIsXG4gICAgXCJbZGlyPSdydGwnXSAuc3YtYm9vbGVhbi0tY2hlY2tlZCAuc3YtYm9vbGVhbl9fc2xpZGVyXCI6XG4gICAgICBcIm1hcmdpbi1yaWdodDogY2FsYygxMDAlIC0gMS4yNWVtKTtcIixcbiAgICBcIltkaXI9J3J0bCddIC5zdi1ib29sZWFuX19zd2l0Y2hcIjogXCJmbG9hdDogcmlnaHQ7XCIsXG4gICAgXCJbc3R5bGUqPSdkaXJlY3Rpb246cnRsJ10gLnN2LWJvb2xlYW5fX2xhYmVsIFwiOiBcImZsb2F0OiByaWdodDtcIixcbiAgICBcIltzdHlsZSo9J2RpcmVjdGlvbjpydGwnXSAuc3YtYm9vbGVhbi0taW5kZXRlcm1pbmF0ZSAuc3YtYm9vbGVhbl9fc2xpZGVyXCI6XG4gICAgICBcIm1hcmdpbi1yaWdodDogY2FsYyg1MCUgLSAwLjYyNWVtKTtcIixcbiAgICBcIltzdHlsZSo9J2RpcmVjdGlvbjpydGwnXSAuc3YtYm9vbGVhbi0tY2hlY2tlZCAuc3YtYm9vbGVhbl9fc2xpZGVyXCI6XG4gICAgICBcIm1hcmdpbi1yaWdodDogY2FsYygxMDAlIC0gMS4yNWVtKTtcIixcbiAgICBcIltzdHlsZSo9J2RpcmVjdGlvbjpydGwnXSAuc3YtYm9vbGVhbl9fc3dpdGNoXCI6IFwiZmxvYXQ6IHJpZ2h0O1wiLFxuXG4gICAgLy8gRU8gYm9vbGVhblxuICAgIFwiLnN2X21haW4gLnN2X3FfbnVtXCI6IFwiXCIsXG4gICAgXCIuc3ZfbWFpbiAuc3ZfcV9udW0gKyBzcGFuXCI6IFwiXCIsXG5cbiAgICAvLyBTaWduYXR1cmVQYWRcbiAgICBcIi5zdl9tYWluIC5zanNfc3BfY29udGFpbmVyXCI6XG4gICAgICBcInBvc2l0aW9uOiByZWxhdGl2ZTsgYm94LXNpemluZzogY29udGVudC1ib3g7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc2pzX3NwX2NvbnRyb2xzXCI6IFwicG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAwOyBib3R0b206IDA7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc2pzX3NwX2NvbnRyb2xzID4gYnV0dG9uXCI6IFwidXNlci1zZWxlY3Q6IG5vbmU7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc2pzX3NwX2NvbnRhaW5lcj5kaXY+Y2FudmFzOmZvY3VzXCI6IFwib3V0bGluZTogbm9uZTtcIixcbiAgICBcIi5zdl9tYWluIC5zanNfc3BfcGxhY2Vob2xkZXJcIjpcbiAgICAgIFwiZGlzcGxheTogZmxleDsgIGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyBwb3NpdGlvbjogYWJzb2x1dGU7IHotaW5kZXg6IDA7IHVzZXItc2VsZWN0OiBub25lOyBwb2ludGVyLWV2ZW50czogbm9uZTsgd2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTtcIixcblxuICAgIC8vIGxvZ29cbiAgICAvLyBcIi5zdl9tYWluIC5zdl9oZWFkZXJcIjogXCJ3aGl0ZS1zcGFjZTogbm93cmFwO1wiLFxuICAgIFwiLnN2X21haW4gLnN2X2xvZ29cIjogXCJcIixcbiAgICBcIi5zdl9tYWluIC5zdi1sb2dvLS1sZWZ0XCI6XG4gICAgICBcImRpc3BsYXk6IGlubGluZS1ibG9jazsgdmVydGljYWwtYWxpZ246IHRvcDsgbWFyZ2luLXJpZ2h0OiAyZW07XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtbG9nby0tcmlnaHRcIjpcbiAgICAgIFwiZGlzcGxheTogaW5saW5lLWJsb2NrOyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyBtYXJnaW4tbGVmdDogMmVtOyBmbG9hdDogcmlnaHQ7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtbG9nby0tcmlnaHQrLnN2LWxvZ28tLXJpZ2h0LXRhaWxcIjogXCJjbGVhcjogYm90aDtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1sb2dvLS10b3BcIjpcbiAgICAgIFwiZGlzcGxheTogYmxvY2s7IHdpZHRoOiAxMDAlOyB0ZXh0LWFsaWduOiBjZW50ZXI7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtbG9nby0tYm90dG9tXCI6XG4gICAgICBcImRpc3BsYXk6IGJsb2NrOyB3aWR0aDogMTAwJTsgdGV4dC1hbGlnbjogY2VudGVyO1wiLFxuICAgIFwiLnN2X21haW4gLnN2X2hlYWRlcl9fdGV4dFwiOlxuICAgICAgXCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHZlcnRpY2FsLWFsaWduOiB0b3A7IG1heC13aWR0aDogMTAwJVwiLFxuXG4gICAgXCIuc3ZfbWFpbiAuc3YtZXhwYW5kLWFjdGlvbjpiZWZvcmVcIjogYGNvbnRlbnQ6IFwiXCI7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQyUzRnhtbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSd1dGYtOCclM0YlM0UlM0MhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMS4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApIC0tJTNFJTNDc3ZnIHZlcnNpb249JzEuMScgaWQ9J0xheWVyXzEnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgeG1sbnM6eGxpbms9J2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnIHg9JzBweCcgeT0nMHB4JyB2aWV3Qm94PScwIDAgMTAgMTAnIHN0eWxlPSdlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDEwIDEwOycgeG1sOnNwYWNlPSdwcmVzZXJ2ZSclM0UlM0NzdHlsZSB0eXBlPSd0ZXh0L2NzcyclM0UgLnN0MCU3QmZpbGw6JTIzNDA0MDQwOyU3RCUwQSUzQy9zdHlsZSUzRSUzQ3BvbHlnb24gY2xhc3M9J3N0MCcgcG9pbnRzPScyLDIgMCw0IDUsOSAxMCw0IDgsMiA1LDUgJy8lM0UlM0Mvc3ZnJTNFJTBBXCIpOyBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyOyBoZWlnaHQ6IDEwcHg7IHdpZHRoOiAxMnB4OyBtYXJnaW46IGF1dG8gOHB4O2AsXG5cbiAgICBcIi5zdl9tYWluIC5zdi1leHBhbmQtYWN0aW9uLS1leHBhbmRlZDpiZWZvcmVcIjogYHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7YCxcblxuICAgIFwiLnN2X21haW4gLnN2LWFjdGlvbi1iYXJcIjogYGRpc3BsYXk6IGZsZXg7IHBvc2l0aW9uOiByZWxhdGl2ZTsgYWxpZ24taXRlbXM6IGNlbnRlcjsgbWFyZ2luLWxlZnQ6IGF1dG87IHBhZGRpbmc6IDAgMCAwIDE2cHg7IG92ZXJmbG93OiBoaWRkZW47IHdoaXRlLXNwYWNlOiBub3dyYXA7YCxcbiAgICBcIi5zdl9tYWluIC5zdi1hY3Rpb24tYmFyLXNlcGFyYXRvclwiOiBgZGlzcGxheTogaW5saW5lLWJsb2NrOyB3aWR0aDogMXB4OyBoZWlnaHQ6IDI0cHg7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IG1hcmdpbi1yaWdodDogMTZweDsgYmFja2dyb3VuZC1jb2xvcjogI2Q2ZDZkNjtgLFxuICAgIFwiLnN2X21haW4gLnN2LWFjdGlvbi1iYXItaXRlbVwiOiBgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOyAtbW96LWFwcGVhcmFuY2U6IG5vbmU7IGFwcGVhcmFuY2U6IG5vbmU7IGRpc3BsYXk6IGZsZXg7IGhlaWdodDogNDBweDsgcGFkZGluZzogOHB4OyBib3gtc2l6aW5nOiBib3JkZXItYm94OyBtYXJnaW4tcmlnaHQ6IDE2cHg7IGJvcmRlcjogbm9uZTsgYm9yZGVyLXJhZGl1czogMnB4OyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgY3Vyc29yOiBwb2ludGVyOyBsaW5lLWhlaWdodDogMjRweDsgZm9udC1zaXplOiAxNnB4OyBvdmVyZmxvdy14OiBoaWRkZW47IHdoaXRlLXNwYWNlOiBub3dyYXA7IG1pbi13aWR0aDogYXV0bzsgZm9udC13ZWlnaHQ6IG5vcm1hbGAsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYWN0aW9uLWJhci1pdGVtX190aXRsZVwiOiBgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgd2hpdGUtc3BhY2U6IG5vd3JhcDtgLFxuICAgIFwiLnN2X21haW4gLnN2LWFjdGlvbi1iYXItaXRlbV9fdGl0bGUtLXdpdGgtaWNvblwiOiBgbWFyZ2luLWxlZnQ6IDhweDtgLFxuICAgIFwiLnN2X21haW4gLnN2LWFjdGlvblwiOiBgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjtgLFxuICAgIFwiLnN2X21haW4gLnN2LWFjdGlvbi0taGlkZGVuXCI6IFwiZGlzcGxheTogbm9uZTtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1hY3Rpb24tYmFyLWl0ZW1fX2ljb24gc3ZnXCI6IFwiZGlzcGxheTogYmxvY2s7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYWN0aW9uLWJhci1pdGVtOmFjdGl2ZVwiOiBcIm9wYWNpdHk6IDAuNTtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1hY3Rpb24tYmFyLWl0ZW06Zm9jdXNcIjogXCJvdXRsaW5lOiBub25lO1wiLFxuXG4gICAgXCIuc3ZfbWFpbiAuc3YtdGl0bGUtYWN0aW9uc1wiOiBcImRpc3BsYXk6IGZsZXg7YWxpZ24taXRlbXM6IGNlbnRlcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi10aXRsZS1hY3Rpb25zX190aXRsZVwiOlxuICAgICAgXCJmbGV4LXdyYXA6IHdyYXA7IG1heC13aWR0aDogOTAlOyBtaW4td2lkdGg6IDUwJTtcIixcbiAgICBcIi5zdl9tYWluIC5zdi10aXRsZS1hY3Rpb25zX19iYXJcIjogXCJtaW4td2lkdGg6IDU2cHg7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3ZfbWF0cml4X2NlbGxfYWN0aW9ucyAuc3YtYWN0aW9uLWJhclwiOlxuICAgICAgXCJtYXJnaW4tbGVmdDogMDsgcGFkZGluZy1sZWZ0OiAwO1wiLFxuICAgIFwiLnN2X21haW4gLnN2X3Bfd3JhcHBlcl9pbl9yb3dcIjpcbiAgICAgIFwiZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IHJvdzsgYWxpZ24taXRlbXM6IGNlbnRlcjtcIixcbiAgICBcIi5zdl9tYWluICAuc3ZfcF9yZW1vdmVfYnRuX3JpZ2h0XCI6IFwibWFyZ2luLWxlZnQ6IDFlbTtcIixcbiAgICAvL2J1dHRvbi1ncm91cFxuICAgIFwiLnN2X21haW4gLnN2LWJ1dHRvbi1ncm91cFwiOlxuICAgICAgXCJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBmbGV4LWRpcmVjdGlvbjogcm93OyBmb250LXNpemU6IDE2cHg7IGhlaWdodDogNDhweDsgb3ZlcmZsb3c6IGF1dG87XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYnV0dG9uLWdyb3VwX19pdGVtXCI6XG4gICAgICBcImRpc3BsYXk6IGZsZXg7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IGZsZXgtZGlyZWN0aW9uOiByb3c7IGp1c3RpZnktY29udGVudDogY2VudGVyOyBhbGlnbi1pdGVtczogY2VudGVyOyB3aWR0aDogMTAwJTsgcGFkZGluZzogMTFweCAxNnB4OyBsaW5lLWhlaWdodDogMjRweDsgYm9yZGVyLXdpZHRoOiAxcHg7IGJvcmRlci1zdHlsZTogc29saWQ7IG91dGxpbmU6IG5vbmU7IGZvbnQtc2l6ZTogMTZweDsgZm9udC13ZWlnaHQ6IDQwMDsgY3Vyc29yOiBwb2ludGVyOyBvdmVyZmxvdzogaGlkZGVuOyB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsgd2hpdGUtc3BhY2U6IG5vd3JhcDtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1idXR0b24tZ3JvdXBfX2l0ZW06bm90KDpmaXJzdC1vZi10eXBlKVwiOiBcIm1hcmdpbi1sZWZ0OiAtMXB4O1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWJ1dHRvbi1ncm91cF9faXRlbS1pY29uXCI6IFwiZGlzcGxheTogYmxvY2s7IGhlaWdodDogMjRweDtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1idXR0b24tZ3JvdXBfX2l0ZW0tLXNlbGVjdGVkXCI6IFwiZm9udC13ZWlnaHQ6IDYwMDtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1idXR0b24tZ3JvdXBfX2l0ZW0tZGVjb3JhdG9yXCI6XG4gICAgICBcImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7XCIsXG4gICAgXCIuc3ZfbWFpbiAgLnN2LWJ1dHRvbi1ncm91cF9faXRlbS1pY29uICsgLnN2LWJ1dHRvbi1ncm91cF9faXRlbS1jYXB0aW9uXCI6XG4gICAgICBcIm1hcmdpbi1sZWZ0OiA4cHg7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYnV0dG9uLWdyb3VwX19pdGVtLS1kaXNhYmxlZFwiOiBcImNvbG9yOiBjdXJzb3I6IGRlZmF1bHQ7XCIsXG4gICAgLy9lbyBidXR0b24tZ3JvdXBcbiAgICAvL3BvcHVwXG4gICAgXCJzdi1wb3B1cFwiOiBcImRpc3BsYXk6IGJsb2NrOyBwb3NpdGlvbjogYWJzb2x1dGU7IHotaW5kZXg6IC0xO1wiLFxuICAgIFwiLnN2LXBvcHVwXCI6XG4gICAgICBcInBvc2l0aW9uOiBmaXhlZDsgbGVmdDogMDsgdG9wOiAwOyB6LWluZGV4OiAxMDAwOyB3aWR0aDogMTAwdnc7IGhlaWdodDogMTAwdmg7IG91dGxpbmU6IG5vbmU7XCIsXG4gICAgXCIuc3YtcG9wdXAtLW1vZGFsXCI6XG4gICAgICBcImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyO1wiLFxuICAgIFwiLnN2LXBvcHVwLS1tb2RhbCAuc3YtcG9wdXBfX2NvbnRhaW5lclwiOlxuICAgICAgXCJwb3NpdGlvbjogc3RhdGljOyBmaWx0ZXI6IG5vbmU7IHBhZGRpbmc6IGNhbGMoNCAqIDhweCk7XCIsXG4gICAgXCIuc3YtcG9wdXBfX2NvbnRhaW5lclwiOlxuICAgICAgXCJwb3NpdGlvbjogYWJzb2x1dGU7IGZpbHRlcjogZHJvcC1zaGFkb3coMHB4IGNhbGMoMSAqIDhweCkgY2FsYygyICogOHB4KSByZ2JhKDAsIDAsIDAsIDAuMSkpOyBwYWRkaW5nOiBjYWxjKDEgKiA4cHgpIDA7IGJhY2tncm91bmQ6IHdoaXRlOyBib3JkZXItcmFkaXVzOiA0cHg7XCIsXG4gICAgXCIuc3YtcG9wdXBfX3Njcm9sbGluZy1jb250ZW50XCI6XG4gICAgICBcIm1heC13aWR0aDogOTB2dzsgbWF4LWhlaWdodDogOTB2aDsgb3ZlcmZsb3c6IGF1dG87XCIsXG4gICAgXCIuc3YtcG9wdXBfX3Njcm9sbGluZy1jb250ZW50Ojotd2Via2l0LXNjcm9sbGJhclwiOlxuICAgICAgXCJoZWlnaHQ6IDZweDsgd2lkdGg6IDZweDsgYmFja2dyb3VuZC1jb2xvcjogI2YzZjNmMztcIixcbiAgICBcIi5zdi1wb3B1cF9fc2Nyb2xsaW5nLWNvbnRlbnQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iXCI6XG4gICAgICBcImJhY2tncm91bmQ6IHJnYmEoMjUsIDE3OSwgMTQ4LCAwLjEpO1wiLFxuICAgIFwiLnN2LXBvcHVwX19jb250ZW50XCI6IFwibWluLXdpZHRoOiAxMDAlO1wiLFxuICAgIFwiLnN2LXBvcHVwLS1zaG93LXBvaW50ZXIuc3YtcG9wdXAtLXRvcFwiOlxuICAgICAgXCJ0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoY2FsYygtMSAqIDhweCkpO1wiLFxuICAgIFwiLnN2LXBvcHVwLS1zaG93LXBvaW50ZXIuc3YtcG9wdXAtLXRvcCAuc3YtcG9wdXBfX3BvaW50ZXJcIjpcbiAgICAgIFwidHJhbnNmb3JtOiB0cmFuc2xhdGUoY2FsYygtMSAqIDhweCkpIHJvdGF0ZSgxODBkZWcpO1wiLFxuICAgIFwiLnN2LXBvcHVwLS1zaG93LXBvaW50ZXIuc3YtcG9wdXAtLWJvdHRvbVwiOlxuICAgICAgXCJ0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoY2FsYygxICogOHB4KSk7XCIsXG4gICAgXCIuc3YtcG9wdXAtLXNob3ctcG9pbnRlci5zdi1wb3B1cC0tYm90dG9tIC5zdi1wb3B1cF9fcG9pbnRlclwiOlxuICAgICAgXCJ0cmFuc2Zvcm06IHRyYW5zbGF0ZShjYWxjKC0xICogOHB4KSwgY2FsYygtMSAqIDhweCkpO1wiLFxuICAgIFwiLnN2LXBvcHVwLS1zaG93LXBvaW50ZXIuc3YtcG9wdXAtLXJpZ2h0XCI6XG4gICAgICBcInRyYW5zZm9ybTogdHJhbnNsYXRlKGNhbGMoMSAqIDhweCkpO1wiLFxuICAgIFwiLnN2LXBvcHVwLS1zaG93LXBvaW50ZXIuc3YtcG9wdXAtLXJpZ2h0IC5zdi1wb3B1cF9fcG9pbnRlclwiOlxuICAgICAgXCJ0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtMTJweCwgLTRweCkgcm90YXRlKC05MGRlZyk7XCIsXG4gICAgXCIuc3YtcG9wdXAtLXNob3ctcG9pbnRlci5zdi1wb3B1cC0tbGVmdFwiOlxuICAgICAgXCJ0cmFuc2Zvcm06IHRyYW5zbGF0ZShjYWxjKC0xICogOHB4KSk7XCIsXG4gICAgXCIuc3YtcG9wdXAtLXNob3ctcG9pbnRlci5zdi1wb3B1cC0tbGVmdCAuc3YtcG9wdXBfX3BvaW50ZXJcIjpcbiAgICAgIFwidHJhbnNmb3JtOiB0cmFuc2xhdGUoLTRweCwgLTRweCkgcm90YXRlKDkwZGVnKTtcIixcbiAgICBcIi5zdi1wb3B1cF9fcG9pbnRlclwiOiBcImRpc3BsYXk6IGJsb2NrOyBwb3NpdGlvbjogYWJzb2x1dGU7XCIsXG4gICAgXCIuc3YtcG9wdXBfX3BvaW50ZXI6YWZ0ZXJcIjpcbiAgICAgIFwiY29udGVudDogJyAnOyBkaXNwbGF5OiBibG9jazsgd2lkdGg6IDA7IGhlaWdodDogMDsgYm9yZGVyLWxlZnQ6IGNhbGMoMSAqIDhweCkgc29saWQgdHJhbnNwYXJlbnQ7IGJvcmRlci1yaWdodDogY2FsYygxICogOHB4KSBzb2xpZCB0cmFuc3BhcmVudDsgYm9yZGVyLWJvdHRvbTogY2FsYygxICogOHB4KSBzb2xpZCB3aGl0ZTsgYWxpZ24tc2VsZjogY2VudGVyO1wiLFxuICAgIFwiLnN2LXBvcHVwX19mb290ZXJcIjogXCJkaXNwbGF5OiBmbGV4OyBtYXJnaW4tdG9wOiBjYWxjKDQgKiA4cHgpO1wiLFxuICAgIFwiLnN2LXBvcHVwX19mb290ZXItaXRlbTpmaXJzdC1jaGlsZFwiOiBcIm1hcmdpbi1sZWZ0OiBhdXRvO1wiLFxuICAgIFwiLnN2LXBvcHVwX19mb290ZXItaXRlbSArIC5zdi1wb3B1cF9fZm9vdGVyLWl0ZW1cIjpcbiAgICAgIFwibWFyZ2luLWxlZnQ6IGNhbGMoMSAqIDhweCk7XCIsXG4gICAgXCIuc3YtcG9wdXBfX2J1dHRvblwiOlxuICAgICAgXCJwYWRkaW5nOiBjYWxjKDIgKiA4cHgpIGNhbGMoNiAqIDhweCk7IGJhY2tncm91bmQ6ICNmZmY7IGJveC1zaGFkb3c6IDBweCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7IGJvcmRlci1yYWRpdXM6IDRweDsgY3Vyc29yOiBwb2ludGVyOyBtYXJnaW46IDJweDsgZm9udC1mYW1pbHk6ICdTZWdvZSBVSScsICdIZWx2ZXRpY2EgTmV1ZScsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IDYwMDsgZm9udC1zaXplOiBjYWxjKDIgKiA4cHgpOyBsaW5lLWhlaWdodDogY2FsYygzICogOHB4KTsgdGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogIzE5YjM5NDsgYm9yZGVyOiBub25lOyBvdXRsaW5lOiBub25lO1wiLFxuICAgIFwiLnN2LXBvcHVwX19idXR0b246aG92ZXJcIjogXCJib3gtc2hhZG93OiAwIDAgMCAycHggIzE5YjM5NDtcIixcbiAgICBcIi5zdi1wb3B1cF9fYnV0dG9uOmRpc2FibGVkXCI6XG4gICAgICBcImNvbG9yOiByZ2JhKDIyLCAyMiwgMjIsIDAuMTYpOyBjdXJzb3I6IGRlZmF1bHQ7XCIsXG4gICAgXCIuc3YtcG9wdXBfX2J1dHRvbjpkaXNhYmxlZDpob3ZlclwiOlxuICAgICAgXCJib3gtc2hhZG93OiAwcHggMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTUpO1wiLFxuICAgIFwiLnN2LXBvcHVwX19idXR0b24tLWFwcGx5XCI6IFwiYmFja2dyb3VuZC1jb2xvcjogIzE5YjM5NDsgY29sb3I6ICNmZmY7XCIsXG4gICAgXCIuc3YtcG9wdXBfX2J1dHRvbi0tYXBwbHk6ZGlzYWJsZWRcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAjZjNmM2YzO1wiLFxuICAgIC8vZW8gcG9wdXBcbiAgICAvL2xpc3RcbiAgICBcIi5zdi1saXN0XCI6XG4gICAgICBcImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OyBwYWRkaW5nOiAwOyBtYXJnaW46IDA7IGJhY2tncm91bmQ6ICNmZmZmZmY7IGZvbnQtZmFtaWx5OiAnT3BlbiBTYW5zJzsgbGlzdC1zdHlsZS10eXBlOiBub25lO1wiLFxuICAgIFwiLnN2LWxpc3RfX2l0ZW1cIjpcbiAgICAgIFwid2lkdGg6IDEwMCU7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IHBhZGRpbmc6IGNhbGMoMSAqIDhweCkgY2FsYygyICogOHB4KTsgY3Vyc29yOiBwb2ludGVyO1wiLFxuICAgIFwiLnN2LWxpc3RfX2l0ZW0taWNvblwiOlxuICAgICAgXCJmbG9hdDogbGVmdDsgd2lkdGg6IGNhbGMoMyAqIDhweCk7IGhlaWdodDogY2FsYygzICogOHB4KTsgbWFyZ2luLXJpZ2h0OiBjYWxjKDIgKiA4cHgpO1wiLFxuICAgIFwiLnN2LWxpc3RfX2l0ZW0taWNvbiBzdmdcIjogXCJkaXNwbGF5OiBibG9jaztcIixcbiAgICBcIi5zdi1saXN0X19pdGVtLWljb24gdXNlXCI6IFwiZmlsbDogIzkwOTA5MDtcIixcbiAgICBcIi5zdi1saXN0X19pdGVtOm5vdCguc3YtbGlzdF9faXRlbS0tc2VsZWN0ZWQpOmhvdmVyXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogI2YzZjNmMztcIixcbiAgICBcIi5zdi1saXN0X19pdGVtLS1zZWxlY3RlZFwiOiBcImJhY2tncm91bmQtY29sb3I6ICMxOWIzOTQ7IGNvbG9yOiAjZmZmO1wiLFxuICAgIFwiLnN2LWxpc3RfX2l0ZW0tLXNlbGVjdGVkIC5zdi1saXN0X19pdGVtLWljb24gdXNlXCI6IFwiZmlsbDogI2ZmZjtcIixcbiAgICBcIi5zdi1saXN0X19pdGVtLS1kaXNhYmxlZFwiOlxuICAgICAgXCJjb2xvcjogcmdiYSgyMiwgMjIsIDIyLCAwLjE2KTsgY3Vyc29yOiBkZWZhdWx0OyBwb2ludGVyLWV2ZW50czogbm9uZTtcIixcbiAgICBcIi5zdi1saXN0X19pdGVtIHNwYW5cIjogXCJ3aGl0ZS1zcGFjZTogbm93cmFwO1wiLFxuICAgIC8vZW8gbGlzdFxuICB9O1xuXG4gIHB1YmxpYyBzdGF0aWMgTWVkaWE6IHsgW2tleTogc3RyaW5nXTogeyBtZWRpYTogc3RyaW5nOyBzdHlsZTogc3RyaW5nIH0gfSA9IHtcbiAgICBcIi5zdl9xc3RuIGZpZWxkc2V0IC5zdi1xLWNvbC0xXCI6IHtcbiAgICAgIHN0eWxlOiBcIndpZHRoOiAxMDAlO1wiLFxuICAgICAgbWVkaWE6IFwiQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0ODBweClcIixcbiAgICB9LFxuICAgIFwiLnN2X3FzdG4gZmllbGRzZXQgLnN2LXEtY29sLTJcIjoge1xuICAgICAgc3R5bGU6IFwid2lkdGg6IDEwMCU7XCIsXG4gICAgICBtZWRpYTogXCJAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ4MHB4KVwiLFxuICAgIH0sXG4gICAgXCIuc3ZfcXN0biBmaWVsZHNldCAuc3YtcS1jb2wtM1wiOiB7XG4gICAgICBzdHlsZTogXCJ3aWR0aDogMTAwJTtcIixcbiAgICAgIG1lZGlhOiBcIkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDgwcHgpXCIsXG4gICAgfSxcbiAgICBcIi5zdl9xc3RuIGZpZWxkc2V0IC5zdi1xLWNvbC00XCI6IHtcbiAgICAgIHN0eWxlOiBcIndpZHRoOiAxMDAlO1wiLFxuICAgICAgbWVkaWE6IFwiQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0ODBweClcIixcbiAgICB9LFxuICAgIFwiLnN2X3FzdG4gZmllbGRzZXQgLnN2LXEtY29sLTVcIjoge1xuICAgICAgc3R5bGU6IFwid2lkdGg6IDEwMCU7XCIsXG4gICAgICBtZWRpYTogXCJAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ4MHB4KVwiLFxuICAgIH0sXG5cbiAgICBcIi5zdl9tYWluIC5zdl9jb250YWluZXIgLnBhbmVsLWJvZHkuY2FyZC1ibG9jayAuc3Zfcm93IC5zdl9xc3RuXCI6IHtcbiAgICAgIHN0eWxlOiBcImRpc3BsYXk6IGJsb2NrOyB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1wiLFxuICAgICAgbWVkaWE6IFwiQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KVwiLFxuICAgIH0sXG4gICAgXCIuc3ZfbWFpbiAuc3ZfY29udGFpbmVyIC5wYW5lbC1ib2R5LmNhcmQtYmxvY2sgLnN2X3JvdyAuc3ZfcXN0biAudGl0bGUtbGVmdFwiOiB7XG4gICAgICBzdHlsZTogXCJmbG9hdDogbm9uZTtcIixcbiAgICAgIG1lZGlhOiBcIkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweClcIixcbiAgICB9LFxuICAgIFwiLnN2X21haW4gLnN2X2NvbnRhaW5lciAucGFuZWwtYm9keS5jYXJkLWJsb2NrIC5zdl9yb3cgLnN2X3FzdG4gLnN2X3FfcmFkaW9ncm91cF9pbmxpbmUsIC5zdl9tYWluIC5zdl9jb250YWluZXIgLnBhbmVsLWJvZHkuY2FyZC1ibG9jayAuc3Zfcm93IC5zdl9xc3RuIC5zdl9xX2NoZWNrYm94X2lubGluZSwgLnN2X21haW4gLnN2X2NvbnRhaW5lciAucGFuZWwtYm9keS5jYXJkLWJsb2NrIC5zdl9yb3cgLnN2X3FzdG4gLnN2X3FfaW1hZ2VwaWNrZXJfaW5saW5lXCI6IHtcbiAgICAgIHN0eWxlOiBcImRpc3BsYXk6IGJsb2NrO1wiLFxuICAgICAgbWVkaWE6IFwiQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KVwiLFxuICAgIH0sXG4gICAgXCIuc3ZfbWFpbiAuc3ZfY29udGFpbmVyIC5wYW5lbC1ib2R5LmNhcmQtYmxvY2sgLnN2X3JvdyAuc3ZfcXN0biB0YWJsZS50YWJsZVwiOiB7XG4gICAgICBzdHlsZTogXCJkaXNwbGF5OiBibG9jaztcIixcbiAgICAgIG1lZGlhOiBcIkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweClcIixcbiAgICB9LFxuICAgIFwiLnN2X21haW4gLnN2X2NvbnRhaW5lciAucGFuZWwtYm9keS5jYXJkLWJsb2NrIC5zdl9yb3cgLnN2X3FzdG4gdGFibGUudGFibGUgdGhlYWRcIjoge1xuICAgICAgc3R5bGU6IFwiZGlzcGxheTogbm9uZTtcIixcbiAgICAgIG1lZGlhOiBcIkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweClcIixcbiAgICB9LFxuICAgIFwiLnN2X21haW4gLnN2X2NvbnRhaW5lciAucGFuZWwtYm9keS5jYXJkLWJsb2NrIC5zdl9yb3cgLnN2X3FzdG4gdGFibGUudGFibGUgdGJvZHksIC5zdl9tYWluIC5zdl9jb250YWluZXIgLnBhbmVsLWJvZHkuY2FyZC1ibG9jayAuc3Zfcm93IC5zdl9xc3RuIHRhYmxlLnRhYmxlIHRyLCAuc3ZfbWFpbiAuc3ZfY29udGFpbmVyIC5wYW5lbC1ib2R5LmNhcmQtYmxvY2sgLnN2X3JvdyAuc3ZfcXN0biB0YWJsZS50YWJsZSB0ZFwiOiB7XG4gICAgICBzdHlsZTogXCJkaXNwbGF5OiBibG9jaztcIixcbiAgICAgIG1lZGlhOiBcIkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweClcIixcbiAgICB9LFxuICAgIFwiLnN2X21haW4gLnN2X2NvbnRhaW5lciAucGFuZWwtYm9keS5jYXJkLWJsb2NrIC5zdl9yb3cgLnN2X3FzdG4gdGFibGUudGFibGU6bm90KC5zdl9xX21hdHJpeCkgdGQ6YmVmb3JlXCI6IHtcbiAgICAgIHN0eWxlOiBcImNvbnRlbnQ6IGF0dHIodGl0bGUpO1wiLFxuICAgICAgbWVkaWE6IFwiQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KVwiLFxuICAgIH0sXG4gICAgXCIuc3ZfbWFpbiAuc3ZfY29udGFpbmVyIC5wYW5lbC1ib2R5LmNhcmQtYmxvY2sgLnN2X3JvdyAuc3ZfcXN0biB0YWJsZS5zdl9xX21hdHJpeCB0ZDphZnRlclwiOiB7XG4gICAgICBzdHlsZTogXCJjb250ZW50OiBhdHRyKHRpdGxlKTsgcGFkZGluZy1sZWZ0OiAxZW1cIixcbiAgICAgIG1lZGlhOiBcIkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweClcIixcbiAgICB9LFxuICAgIFwiLnN2X21haW4gLnN2X2NvbnRhaW5lciAucGFuZWwtYm9keS5jYXJkLWJsb2NrIC5zdl9yb3cgLnN2X3FzdG4gLnJhZGlvIGxhYmVsLCAuc3ZfbWFpbiAuc3ZfY29udGFpbmVyIC5wYW5lbC1ib2R5LmNhcmQtYmxvY2sgLnN2X3JvdyAuc3ZfcXN0biAuY2hlY2tib3ggbGFiZWxcIjoge1xuICAgICAgc3R5bGU6IFwibGluZS1oZWlnaHQ6IDEycHg7IHZlcnRpY2FsLWFsaWduOiB0b3A7XCIsXG4gICAgICBtZWRpYTogXCJAbWVkaWEgKG1heC13aWR0aDogNjAwcHgpXCIsXG4gICAgfSxcbiAgICBcIi5zdl9xc3RuIGxhYmVsLnN2X3FfbV9sYWJlbFwiOiB7XG4gICAgICBzdHlsZTogXCJkaXNwbGF5OiBpbmxpbmU7XCIsXG4gICAgICBtZWRpYTogXCJAbWVkaWEgKG1heC13aWR0aDogNjAwcHgpXCIsXG4gICAgfSxcbiAgICBcIi5zdl9tYWluIC5zdl9jdXN0b21faGVhZGVyXCI6IHtcbiAgICAgIHN0eWxlOiBcImRpc3BsYXk6IG5vbmU7XCIsXG4gICAgICBtZWRpYTogXCJAbWVkaWEgKG1heC13aWR0aDogMTMwMHB4KVwiLFxuICAgIH0sXG4gICAgXCIuc3ZfbWFpbiAuc3ZfY29udGFpbmVyIC5zdl9oZWFkZXIgaDNcIjoge1xuICAgICAgc3R5bGU6IFwiZm9udC1zaXplOiAxLjVlbTtcIixcbiAgICAgIG1lZGlhOiBcIkBtZWRpYSAobWF4LXdpZHRoOiAxMzAwcHgpXCIsXG4gICAgfSxcbiAgICBcIi5zdl9tYWluIC5zdl9jb250YWluZXIgLnN2X2hlYWRlciBoMyBzcGFuXCI6IHtcbiAgICAgIHN0eWxlOiBcImZvbnQtc2l6ZTogMC43NWVtO1wiLFxuICAgICAgbWVkaWE6IFwiQG1lZGlhIChtYXgtd2lkdGg6IDcwMHB4KVwiLFxuICAgIH0sXG5cbiAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcF9jc3MgLnN2LXByb2dyZXNzX190ZXh0XCI6IHtcbiAgICAgIHN0eWxlOiBcIm1hcmdpbi1sZWZ0OiA4ZW07XCIsXG4gICAgICBtZWRpYTogXCJAbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpXCIsXG4gICAgfSxcblxuICAgIFwiLnN2X3Jvd1wiOiB7XG4gICAgICBzdHlsZTogXCIgZGlzcGxheTogZmxleDsgZmxleC13cmFwOiB3cmFwO1wiLFxuICAgICAgbWVkaWE6IFwiQHN1cHBvcnRzIChkaXNwbGF5OiBmbGV4KVwiLFxuICAgIH0sXG5cbiAgICBcIi5zdi12dWUtcm93LWFkZGl0aW9uYWwtZGl2XCI6IHtcbiAgICAgIHN0eWxlOiBcIiBkaXNwbGF5OiBmbGV4OyBmbGV4LXdyYXA6IHdyYXA7IGZsZXgtYmFzaXM6IDEwMCU7IHdpZHRoOiAxMDAlO1wiLFxuICAgICAgbWVkaWE6IFwiQHN1cHBvcnRzIChkaXNwbGF5OiBmbGV4KVwiLFxuICAgIH0sXG5cbiAgICBcIi5zdi1yb3cgPiAuc3Ytcm93X19wYW5lbCwgLnN2LXJvd19fcXVlc3Rpb246bm90KDpsYXN0LWNoaWxkKVwiOiB7XG4gICAgICBzdHlsZTogXCJmbG9hdDogbGVmdDtcIixcbiAgICAgIG1lZGlhOlxuICAgICAgICBcIkBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKSwgKC1tcy1oaWdoLWNvbnRyYXN0OiBub25lKVwiLFxuICAgIH0sXG5cbiAgICBcIltkaXI9J3J0bCddLFtzdHlsZSo9J2RpcmVjdGlvbjpydGwnXSAuc3Ytcm93X19xdWVzdGlvbjpub3QoOmxhc3QtY2hpbGQpXCI6IHtcbiAgICAgIHN0eWxlOiBcImZsb2F0OiByaWdodDtcIixcbiAgICAgIG1lZGlhOlxuICAgICAgICBcIkBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKSwgKC1tcy1oaWdoLWNvbnRyYXN0OiBub25lKVwiLFxuICAgIH0sXG5cbiAgICBcIi5zdi1yb3cgPiAuc3Ytcm93X19wYW5lbCwgLnN2LXJvd19fcXVlc3Rpb25cIjoge1xuICAgICAgc3R5bGU6IFwid2lkdGg6IDEwMCUgIWltcG9ydGFudDsgcGFkZGluZy1yaWdodDogMCAhaW1wb3J0YW50O1wiLFxuICAgICAgbWVkaWE6IFwiQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA2MDBweClcIixcbiAgICB9LFxuICB9O1xuXG4gIHB1YmxpYyBzdGF0aWMgVGhlbWVDb2xvcnM6IHsgW2tleTogc3RyaW5nXTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB9ID0ge1xuICAgIGRlZmF1bHQ6IHtcbiAgICAgIFwiJGhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2U3ZTdlN1wiLFxuICAgICAgXCIkYm9keS1jb250YWluZXItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmNGY0ZjRcIixcblxuICAgICAgXCIkbWFpbi1jb2xvclwiOiBcIiMxYWIzOTRcIixcbiAgICAgIFwiJG1haW4taG92ZXItY29sb3JcIjogXCIjMGFhMzg0XCIsXG4gICAgICBcIiRib2R5LWJhY2tncm91bmQtY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkaW5wdXRzLWJhY2tncm91bmQtY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkdGV4dC1jb2xvclwiOiBcIiM2ZDcwNzJcIixcbiAgICAgIFwiJHRleHQtaW5wdXQtY29sb3JcIjogXCIjNmQ3MDcyXCIsXG4gICAgICBcIiRoZWFkZXItY29sb3JcIjogXCIjNmQ3MDcyXCIsXG4gICAgICBcIiRib3JkZXItY29sb3JcIjogXCIjZTdlN2U3XCIsXG5cbiAgICAgIFwiJGVycm9yLWNvbG9yXCI6IFwiI2VkNTU2NVwiLFxuICAgICAgXCIkZXJyb3ItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmZDY1NzVcIixcblxuICAgICAgXCIkcHJvZ3Jlc3MtdGV4dC1jb2xvclwiOiBcIiM5ZDlkOWRcIixcbiAgICAgIFwiJGRpc2FibGUtY29sb3JcIjogXCIjZGJkYmRiXCIsXG4gICAgICBcIiRkaXNhYmxlZC1sYWJlbC1jb2xvclwiOiBcInJnYmEoNjQsIDY0LCA2NCwgMC41KVwiLFxuICAgICAgXCIkc2xpZGVyLWNvbG9yXCI6IFwid2hpdGVcIixcbiAgICAgIFwiJGRpc2FibGVkLXN3aXRjaC1jb2xvclwiOiBcIiM5ZjlmOWZcIixcbiAgICAgIFwiJGRpc2FibGVkLXNsaWRlci1jb2xvclwiOiBcIiNjZmNmY2ZcIixcbiAgICAgIFwiJGZvcmVncm91bmQtbGlnaHRcIjogXCIjOTA5MDkwXCIsXG4gICAgICBcIiRmb3JlZ3JvdW5kLWRpc2FibGVkXCI6IFwiIzE2MTYxNlwiLFxuICAgICAgXCIkYmFja2dyb3VuZC1kaW1cIjogXCIjZjNmM2YzXCIsXG4gICAgfSxcbiAgICBvcmFuZ2U6IHtcbiAgICAgIFwiJGhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiIzRhNGE0YVwiLFxuICAgICAgXCIkYm9keS1jb250YWluZXItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmOGY4ZjhcIixcblxuICAgICAgXCIkbWFpbi1jb2xvclwiOiBcIiNmNzgxMTlcIixcbiAgICAgIFwiJG1haW4taG92ZXItY29sb3JcIjogXCIjZTc3MTA5XCIsXG4gICAgICBcIiRib2R5LWJhY2tncm91bmQtY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkaW5wdXRzLWJhY2tncm91bmQtY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkdGV4dC1jb2xvclwiOiBcIiM0YTRhNGFcIixcbiAgICAgIFwiJHRleHQtaW5wdXQtY29sb3JcIjogXCIjNGE0YTRhXCIsXG4gICAgICBcIiRoZWFkZXItY29sb3JcIjogXCIjZjc4MTE5XCIsXG4gICAgICBcIiRib3JkZXItY29sb3JcIjogXCIjZTdlN2U3XCIsXG5cbiAgICAgIFwiJGVycm9yLWNvbG9yXCI6IFwiI2VkNTU2NVwiLFxuICAgICAgXCIkZXJyb3ItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmZDY1NzVcIixcblxuICAgICAgXCIkcHJvZ3Jlc3MtdGV4dC1jb2xvclwiOiBcIiM5ZDlkOWRcIixcbiAgICAgIFwiJGRpc2FibGUtY29sb3JcIjogXCIjZGJkYmRiXCIsXG4gICAgICBcIiRkaXNhYmxlZC1sYWJlbC1jb2xvclwiOiBcInJnYmEoNjQsIDY0LCA2NCwgMC41KVwiLFxuICAgICAgXCIkc2xpZGVyLWNvbG9yXCI6IFwid2hpdGVcIixcbiAgICAgIFwiJGRpc2FibGVkLXN3aXRjaC1jb2xvclwiOiBcIiM5ZjlmOWZcIixcbiAgICAgIFwiJGRpc2FibGVkLXNsaWRlci1jb2xvclwiOiBcIiNjZmNmY2ZcIixcbiAgICAgIFwiJGZvcmVncm91bmQtbGlnaHRcIjogXCIjOTA5MDkwXCIsXG4gICAgICBcIiRmb3JlZ3JvdW5kLWRpc2FibGVkXCI6IFwiIzE2MTYxNlwiLFxuICAgICAgXCIkYmFja2dyb3VuZC1kaW1cIjogXCIjZjNmM2YzXCIsXG4gICAgfSxcbiAgICBkYXJrYmx1ZToge1xuICAgICAgXCIkaGVhZGVyLWJhY2tncm91bmQtY29sb3JcIjogXCIjZDlkOGRkXCIsXG4gICAgICBcIiRib2R5LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2Y2ZjdmMlwiLFxuXG4gICAgICBcIiRtYWluLWNvbG9yXCI6IFwiIzNjNGY2ZFwiLFxuICAgICAgXCIkbWFpbi1ob3Zlci1jb2xvclwiOiBcIiMyYzNmNWRcIixcbiAgICAgIFwiJGJvZHktYmFja2dyb3VuZC1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgICBcIiRpbnB1dHMtYmFja2dyb3VuZC1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgICBcIiR0ZXh0LWNvbG9yXCI6IFwiIzRhNGE0YVwiLFxuICAgICAgXCIkdGV4dC1pbnB1dC1jb2xvclwiOiBcIiM0YTRhNGFcIixcbiAgICAgIFwiJGhlYWRlci1jb2xvclwiOiBcIiM2ZDcwNzJcIixcbiAgICAgIFwiJGJvcmRlci1jb2xvclwiOiBcIiNlN2U3ZTdcIixcblxuICAgICAgXCIkZXJyb3ItY29sb3JcIjogXCIjZWQ1NTY1XCIsXG4gICAgICBcIiRlcnJvci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2ZkNjU3NVwiLFxuXG4gICAgICBcIiRwcm9ncmVzcy10ZXh0LWNvbG9yXCI6IFwiIzlkOWQ5ZFwiLFxuICAgICAgXCIkZGlzYWJsZS1jb2xvclwiOiBcIiNkYmRiZGJcIixcbiAgICAgIFwiJGRpc2FibGVkLWxhYmVsLWNvbG9yXCI6IFwicmdiYSg2NCwgNjQsIDY0LCAwLjUpXCIsXG4gICAgICBcIiRzbGlkZXItY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkZGlzYWJsZWQtc3dpdGNoLWNvbG9yXCI6IFwiIzlmOWY5ZlwiLFxuICAgICAgXCIkZGlzYWJsZWQtc2xpZGVyLWNvbG9yXCI6IFwiI2NmY2ZjZlwiLFxuICAgICAgXCIkZm9yZWdyb3VuZC1saWdodFwiOiBcIiM5MDkwOTBcIixcbiAgICAgIFwiJGZvcmVncm91bmQtZGlzYWJsZWRcIjogXCIjMTYxNjE2XCIsXG4gICAgICBcIiRiYWNrZ3JvdW5kLWRpbVwiOiBcIiNmM2YzZjNcIixcbiAgICB9LFxuICAgIGRhcmtyb3NlOiB7XG4gICAgICBcIiRoZWFkZXItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNkZGQyY2VcIixcbiAgICAgIFwiJGJvZHktY29udGFpbmVyLWJhY2tncm91bmQtY29sb3JcIjogXCIjZjdlZmVkXCIsXG5cbiAgICAgIFwiJG1haW4tY29sb3JcIjogXCIjNjg2NTZlXCIsXG4gICAgICBcIiRtYWluLWhvdmVyLWNvbG9yXCI6IFwiIzU4NTU1ZVwiLFxuICAgICAgXCIkYm9keS1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwid2hpdGVcIixcbiAgICAgIFwiJGlucHV0cy1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwid2hpdGVcIixcbiAgICAgIFwiJHRleHQtY29sb3JcIjogXCIjNGE0YTRhXCIsXG4gICAgICBcIiR0ZXh0LWlucHV0LWNvbG9yXCI6IFwiIzRhNGE0YVwiLFxuICAgICAgXCIkaGVhZGVyLWNvbG9yXCI6IFwiIzZkNzA3MlwiLFxuICAgICAgXCIkYm9yZGVyLWNvbG9yXCI6IFwiI2U3ZTdlN1wiLFxuXG4gICAgICBcIiRlcnJvci1jb2xvclwiOiBcIiNlZDU1NjVcIixcbiAgICAgIFwiJGVycm9yLWJhY2tncm91bmQtY29sb3JcIjogXCIjZmQ2NTc1XCIsXG5cbiAgICAgIFwiJHByb2dyZXNzLXRleHQtY29sb3JcIjogXCIjOWQ5ZDlkXCIsXG4gICAgICBcIiRkaXNhYmxlLWNvbG9yXCI6IFwiI2RiZGJkYlwiLFxuICAgICAgXCIkZGlzYWJsZWQtbGFiZWwtY29sb3JcIjogXCJyZ2JhKDY0LCA2NCwgNjQsIDAuNSlcIixcbiAgICAgIFwiJHNsaWRlci1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgICBcIiRkaXNhYmxlZC1zd2l0Y2gtY29sb3JcIjogXCIjOWY5ZjlmXCIsXG4gICAgICBcIiRkaXNhYmxlZC1zbGlkZXItY29sb3JcIjogXCIjY2ZjZmNmXCIsXG4gICAgICBcIiRmb3JlZ3JvdW5kLWxpZ2h0XCI6IFwiIzkwOTA5MFwiLFxuICAgICAgXCIkZm9yZWdyb3VuZC1kaXNhYmxlZFwiOiBcIiMxNjE2MTZcIixcbiAgICAgIFwiJGJhY2tncm91bmQtZGltXCI6IFwiI2YzZjNmM1wiLFxuICAgIH0sXG4gICAgc3RvbmU6IHtcbiAgICAgIFwiJGhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2NkY2NkMlwiLFxuICAgICAgXCIkYm9keS1jb250YWluZXItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNlZmVkZjRcIixcblxuICAgICAgXCIkbWFpbi1jb2xvclwiOiBcIiMwZjBmMzNcIixcbiAgICAgIFwiJG1haW4taG92ZXItY29sb3JcIjogXCIjMTkxOTU1XCIsXG4gICAgICBcIiRib2R5LWJhY2tncm91bmQtY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkaW5wdXRzLWJhY2tncm91bmQtY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkdGV4dC1jb2xvclwiOiBcIiMwZjBmMzNcIixcbiAgICAgIFwiJHRleHQtaW5wdXQtY29sb3JcIjogXCIjMGYwZjMzXCIsXG4gICAgICBcIiRoZWFkZXItY29sb3JcIjogXCIjMGYwZjMzXCIsXG4gICAgICBcIiRib3JkZXItY29sb3JcIjogXCIjZTdlN2U3XCIsXG5cbiAgICAgIFwiJGVycm9yLWNvbG9yXCI6IFwiI2VkNTU2NVwiLFxuICAgICAgXCIkZXJyb3ItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmZDY1NzVcIixcblxuICAgICAgXCIkcHJvZ3Jlc3MtdGV4dC1jb2xvclwiOiBcIiM5ZDlkOWRcIixcbiAgICAgIFwiJGRpc2FibGUtY29sb3JcIjogXCIjZGJkYmRiXCIsXG4gICAgICBcIiRkaXNhYmxlZC1sYWJlbC1jb2xvclwiOiBcInJnYmEoNjQsIDY0LCA2NCwgMC41KVwiLFxuICAgICAgXCIkc2xpZGVyLWNvbG9yXCI6IFwid2hpdGVcIixcbiAgICAgIFwiJGRpc2FibGVkLXN3aXRjaC1jb2xvclwiOiBcIiM5ZjlmOWZcIixcbiAgICAgIFwiJGRpc2FibGVkLXNsaWRlci1jb2xvclwiOiBcIiNjZmNmY2ZcIixcbiAgICAgIFwiJGZvcmVncm91bmQtbGlnaHRcIjogXCIjOTA5MDkwXCIsXG4gICAgICBcIiRmb3JlZ3JvdW5kLWRpc2FibGVkXCI6IFwiIzE2MTYxNlwiLFxuICAgICAgXCIkYmFja2dyb3VuZC1kaW1cIjogXCIjZjNmM2YzXCIsXG4gICAgfSxcbiAgICB3aW50ZXI6IHtcbiAgICAgIFwiJGhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiIzgyYjhkYVwiLFxuICAgICAgXCIkYm9keS1jb250YWluZXItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNkYWUxZTdcIixcblxuICAgICAgXCIkbWFpbi1jb2xvclwiOiBcIiMzYzNiNDBcIixcbiAgICAgIFwiJG1haW4taG92ZXItY29sb3JcIjogXCIjMWUxZDIwXCIsXG4gICAgICBcIiRib2R5LWJhY2tncm91bmQtY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkaW5wdXRzLWJhY2tncm91bmQtY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkdGV4dC1jb2xvclwiOiBcIiMwMDBcIixcbiAgICAgIFwiJHRleHQtaW5wdXQtY29sb3JcIjogXCIjMDAwXCIsXG4gICAgICBcIiRoZWFkZXItY29sb3JcIjogXCIjMDAwXCIsXG4gICAgICBcIiRib3JkZXItY29sb3JcIjogXCIjZTdlN2U3XCIsXG5cbiAgICAgIFwiJGVycm9yLWNvbG9yXCI6IFwiI2VkNTU2NVwiLFxuICAgICAgXCIkZXJyb3ItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmZDY1NzVcIixcblxuICAgICAgXCIkZGlzYWJsZS1jb2xvclwiOiBcIiNkYmRiZGJcIixcbiAgICAgIFwiJHByb2dyZXNzLXRleHQtY29sb3JcIjogXCIjOWQ5ZDlkXCIsXG4gICAgICBcIiRkaXNhYmxlZC1sYWJlbC1jb2xvclwiOiBcInJnYmEoNjQsIDY0LCA2NCwgMC41KVwiLFxuICAgICAgXCIkc2xpZGVyLWNvbG9yXCI6IFwid2hpdGVcIixcbiAgICAgIFwiJGRpc2FibGVkLXN3aXRjaC1jb2xvclwiOiBcIiM5ZjlmOWZcIixcbiAgICAgIFwiJGRpc2FibGVkLXNsaWRlci1jb2xvclwiOiBcIiNjZmNmY2ZcIixcbiAgICAgIFwiJGZvcmVncm91bmQtbGlnaHRcIjogXCIjOTA5MDkwXCIsXG4gICAgICBcIiRmb3JlZ3JvdW5kLWRpc2FibGVkXCI6IFwiIzE2MTYxNlwiLFxuICAgICAgXCIkYmFja2dyb3VuZC1kaW1cIjogXCIjZjNmM2YzXCIsXG4gICAgfSxcbiAgICB3aW50ZXJzdG9uZToge1xuICAgICAgXCIkaGVhZGVyLWJhY2tncm91bmQtY29sb3JcIjogXCIjMzIzMjMyXCIsXG4gICAgICBcIiRib2R5LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2Y4ZjhmOFwiLFxuXG4gICAgICBcIiRtYWluLWNvbG9yXCI6IFwiIzVhYzhmYVwiLFxuICAgICAgXCIkbWFpbi1ob3Zlci1jb2xvclwiOiBcIiMwNmExZTdcIixcbiAgICAgIFwiJGJvZHktYmFja2dyb3VuZC1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgICBcIiRpbnB1dHMtYmFja2dyb3VuZC1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgICBcIiR0ZXh0LWNvbG9yXCI6IFwiIzAwMFwiLFxuICAgICAgXCIkdGV4dC1pbnB1dC1jb2xvclwiOiBcIiMwMDBcIixcbiAgICAgIFwiJGhlYWRlci1jb2xvclwiOiBcIiNmZmZcIixcbiAgICAgIFwiJGJvcmRlci1jb2xvclwiOiBcIiNlN2U3ZTdcIixcblxuICAgICAgXCIkZXJyb3ItY29sb3JcIjogXCIjZWQ1NTY1XCIsXG4gICAgICBcIiRlcnJvci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2ZkNjU3NVwiLFxuXG4gICAgICBcIiRkaXNhYmxlLWNvbG9yXCI6IFwiI2RiZGJkYlwiLFxuICAgICAgXCIkcHJvZ3Jlc3MtdGV4dC1jb2xvclwiOiBcIiM5ZDlkOWRcIixcbiAgICAgIFwiJGRpc2FibGVkLWxhYmVsLWNvbG9yXCI6IFwicmdiYSg2NCwgNjQsIDY0LCAwLjUpXCIsXG4gICAgICBcIiRzbGlkZXItY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkZGlzYWJsZWQtc3dpdGNoLWNvbG9yXCI6IFwiIzlmOWY5ZlwiLFxuICAgICAgXCIkZGlzYWJsZWQtc2xpZGVyLWNvbG9yXCI6IFwiI2NmY2ZjZlwiLFxuICAgICAgXCIkZm9yZWdyb3VuZC1saWdodFwiOiBcIiM5MDkwOTBcIixcbiAgICAgIFwiJGZvcmVncm91bmQtZGlzYWJsZWRcIjogXCIjMTYxNjE2XCIsXG4gICAgICBcIiRiYWNrZ3JvdW5kLWRpbVwiOiBcIiNmM2YzZjNcIixcbiAgICB9LFxuICAgIG1vZGVybjoge1xuICAgICAgXCIkbWFpbi1jb2xvclwiOiBcIiMxYWIzOTRcIixcbiAgICAgIFwiJGFkZC1idXR0b24tY29sb3JcIjogXCIjMTk0OGIzXCIsXG4gICAgICBcIiRyZW1vdmUtYnV0dG9uLWNvbG9yXCI6IFwiI2ZmMTgwMFwiLFxuICAgICAgXCIkZGlzYWJsZS1jb2xvclwiOiBcIiNkYmRiZGJcIixcbiAgICAgIFwiJHByb2dyZXNzLXRleHQtY29sb3JcIjogXCIjOWQ5ZDlkXCIsXG4gICAgICBcIiRkaXNhYmxlZC1sYWJlbC1jb2xvclwiOiBcInJnYmEoNjQsIDY0LCA2NCwgMC41KVwiLFxuICAgICAgXCIkc2xpZGVyLWNvbG9yXCI6IFwid2hpdGVcIixcbiAgICAgIFwiJGRpc2FibGVkLXN3aXRjaC1jb2xvclwiOiBcIiM5ZjlmOWZcIixcbiAgICAgIFwiJGRpc2FibGVkLXNsaWRlci1jb2xvclwiOiBcIiNjZmNmY2ZcIixcbiAgICAgIFwiJGVycm9yLWNvbG9yXCI6IFwiI2Q1MjkwMVwiLFxuICAgICAgXCIkdGV4dC1jb2xvclwiOiBcIiM0MDQwNDBcIixcbiAgICAgIFwiJGxpZ2h0LXRleHQtY29sb3JcIjogXCIjZmZmXCIsXG4gICAgICBcIiRidXR0b24tdGV4dC1jb2xvclwiOiBcIiNmZmZcIixcbiAgICAgIFwiJGNoZWNrbWFyay1jb2xvclwiOiBcIiNmZmZcIixcbiAgICAgIFwiJG1hdHJpeC10ZXh0LWNoZWNrZWQtY29sb3JcIjogXCIjZmZmXCIsXG5cbiAgICAgIFwiJHRleHQtaW5wdXQtY29sb3JcIjogXCIjNDA0MDQwXCIsXG4gICAgICBcIiRpbnB1dHMtYmFja2dyb3VuZC1jb2xvclwiOiBcInRyYW5zcGFyZW50XCIsXG4gICAgICBcIiRtYWluLWhvdmVyLWNvbG9yXCI6IFwiIzlmOWY5ZlwiLFxuICAgICAgXCIkYm9keS1jb250YWluZXItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmNGY0ZjRcIixcbiAgICAgIFwiJHRleHQtYm9yZGVyLWNvbG9yXCI6IFwiI2Q0ZDRkNFwiLFxuICAgICAgXCIkZGlzYWJsZWQtdGV4dC1jb2xvclwiOiBcInJnYmEoNjQsIDY0LCA2NCwgMC41KVwiLFxuICAgICAgXCIkYm9yZGVyLWNvbG9yXCI6IFwicmdiKDY0LCA2NCwgNjQsIDAuNSlcIixcbiAgICAgIFwiJGRyb3Bkb3duLWJvcmRlci1jb2xvclwiOiBcIiNkNGQ0ZDRcIixcbiAgICAgIFwiJGhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2U3ZTdlN1wiLFxuICAgICAgXCIkYW5zd2VyLWJhY2tncm91bmQtY29sb3JcIjogXCJyZ2JhKDI2LCAxNzksIDE0OCwgMC4yKVwiLFxuICAgICAgXCIkZXJyb3ItYmFja2dyb3VuZC1jb2xvclwiOiBcInJnYmEoMjEzLCA0MSwgMSwgMC4yKVwiLFxuICAgICAgXCIkcmFkaW8tY2hlY2tlZC1jb2xvclwiOiBcIiM0MDQwNDBcIixcbiAgICAgIFwiJGNsZWFuLWJ1dHRvbi1jb2xvclwiOiBcIiMxOTQ4YjNcIixcbiAgICAgIFwiJGJvZHktYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmZmZmZmZcIixcbiAgICAgIFwiJGZvcmVncm91bmQtbGlnaHRcIjogXCIjOTA5MDkwXCIsXG4gICAgICBcIiRmb3JlZ3JvdW5kLWRpc2FibGVkXCI6IFwiIzE2MTYxNlwiLFxuICAgICAgXCIkYmFja2dyb3VuZC1kaW1cIjogXCIjZjNmM2YzXCIsXG4gICAgfSxcbiAgICBib290c3RyYXA6IHtcbiAgICAgIFwiJG1haW4tY29sb3JcIjogXCIjMThhNjg5XCIsXG4gICAgICBcIiR0ZXh0LWNvbG9yXCI6IFwiIzQwNDA0MDtcIixcbiAgICAgIFwiJHRleHQtaW5wdXQtY29sb3JcIjogXCIjNDA0MDQwO1wiLFxuICAgICAgXCIkcHJvZ3Jlc3MtdGV4dC1jb2xvclwiOiBcIiM5ZDlkOWRcIixcbiAgICAgIFwiJGRpc2FibGUtY29sb3JcIjogXCIjZGJkYmRiXCIsXG4gICAgICBcIiRoZWFkZXItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNlN2U3ZTdcIixcbiAgICAgIFwiJGRpc2FibGVkLWxhYmVsLWNvbG9yXCI6IFwicmdiYSg2NCwgNjQsIDY0LCAwLjUpXCIsXG4gICAgICBcIiRzbGlkZXItY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkZGlzYWJsZWQtc3dpdGNoLWNvbG9yXCI6IFwiIzlmOWY5ZlwiLFxuICAgICAgXCIkZGlzYWJsZWQtc2xpZGVyLWNvbG9yXCI6IFwiI2NmY2ZjZlwiLFxuICAgICAgXCIkZm9yZWdyb3VuZC1saWdodFwiOiBcIiM5MDkwOTBcIixcbiAgICAgIFwiJGZvcmVncm91bmQtZGlzYWJsZWRcIjogXCIjMTYxNjE2XCIsXG4gICAgICBcIiRiYWNrZ3JvdW5kLWRpbVwiOiBcIiNmM2YzZjNcIixcbiAgICB9LFxuICAgIGJvb3RzdHJhcG1hdGVyaWFsOiB7XG4gICAgICBcIiRtYWluLWNvbG9yXCI6IFwiIzE4YTY4OVwiLFxuICAgICAgXCIkdGV4dC1jb2xvclwiOiBcIiM0MDQwNDA7XCIsXG4gICAgICBcIiR0ZXh0LWlucHV0LWNvbG9yXCI6IFwiIzQwNDA0MDtcIixcbiAgICAgIFwiJHByb2dyZXNzLXRleHQtY29sb3JcIjogXCIjOWQ5ZDlkXCIsXG4gICAgICBcIiRkaXNhYmxlLWNvbG9yXCI6IFwiI2RiZGJkYlwiLFxuICAgICAgXCIkaGVhZGVyLWJhY2tncm91bmQtY29sb3JcIjogXCIjZTdlN2U3XCIsXG5cbiAgICAgIFwiJGRpc2FibGVkLWxhYmVsLWNvbG9yXCI6IFwicmdiYSg2NCwgNjQsIDY0LCAwLjUpXCIsXG4gICAgICBcIiRzbGlkZXItY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkZGlzYWJsZWQtc3dpdGNoLWNvbG9yXCI6IFwiIzlmOWY5ZlwiLFxuICAgICAgXCIkZGlzYWJsZWQtc2xpZGVyLWNvbG9yXCI6IFwiI2NmY2ZjZlwiLFxuICAgICAgXCIkYm9keS1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2ZmZmZmZlwiLFxuICAgICAgXCIkZm9yZWdyb3VuZC1saWdodFwiOiBcIiM5MDkwOTBcIixcbiAgICAgIFwiJGZvcmVncm91bmQtZGlzYWJsZWRcIjogXCIjMTYxNjE2XCIsXG4gICAgICBcIiRiYWNrZ3JvdW5kLWRpbVwiOiBcIiNmM2YzZjNcIixcbiAgICB9LFxuICB9O1xuXG4gIHB1YmxpYyBzdGF0aWMgVGhlbWVDc3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgXCIuc3ZfZGVmYXVsdF9jc3NcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkYm9keS1jb250YWluZXItYmFja2dyb3VuZC1jb2xvcjtcIixcblxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIGhyXCI6IFwiYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgaW5wdXRbdHlwZT0nYnV0dG9uJ10sIC5zdl9kZWZhdWx0X2NzcyBidXR0b25cIjpcbiAgICAgIFwiY29sb3I6ICRib2R5LWJhY2tncm91bmQtY29sb3I7IGJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIGlucHV0W3R5cGU9J2J1dHRvbiddOmhvdmVyLCAuc3ZfZGVmYXVsdF9jc3MgYnV0dG9uOmhvdmVyXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWhvdmVyLWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgLnN2X2hlYWRlclwiOiBcImNvbG9yOiAkaGVhZGVyLWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIC5zdl9jdXN0b21faGVhZGVyXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRoZWFkZXItYmFja2dyb3VuZC1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyAuc3ZfY29udGFpbmVyXCI6IFwiY29sb3I6ICR0ZXh0LWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIC5zdl9ib2R5XCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRib2R5LWJhY2tncm91bmQtY29sb3I7IGJvcmRlci1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgLnN2X3Byb2dyZXNzXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJGJvcmRlci1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyAuc3ZfcHJvZ3Jlc3NfYmFyXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG5cbiAgICBcIi5zdl9kZWZhdWx0X2NzcyAuc3ZfcF9yb290ID4gLnN2X3Jvd1wiOiBcImJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyAuc3ZfcF9yb290ID4gLnN2X3JvdzpudGgtY2hpbGQob2RkKVwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkYm9keS1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIC5zdl9wX3Jvb3QgPiAuc3Zfcm93Om50aC1jaGlsZChldmVuKVwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkYm9keS1jb250YWluZXItYmFja2dyb3VuZC1jb2xvcjtcIixcblxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIC5zdl9xX290aGVyIGlucHV0XCI6XG4gICAgICBcImNvbG9yOiAkdGV4dC1jb2xvcjsgLXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6ICR0ZXh0LWNvbG9yOyBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7IGJhY2tncm91bmQtY29sb3I6ICRpbnB1dHMtYmFja2dyb3VuZC1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyAuc3ZfcV90ZXh0X3Jvb3RcIjpcbiAgICAgIFwiY29sb3I6ICR0ZXh0LWNvbG9yOyAtd2Via2l0LXRleHQtZmlsbC1jb2xvcjogJHRleHQtY29sb3I7IGJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvcjsgYmFja2dyb3VuZC1jb2xvcjogJGlucHV0cy1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIC5zdl9xX2Ryb3Bkb3duX2NvbnRyb2xcIjpcbiAgICAgIFwiY29sb3I6ICR0ZXh0LWlucHV0LWNvbG9yOyBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7IGJhY2tncm91bmQtY29sb3I6ICRpbnB1dHMtYmFja2dyb3VuZC1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyBpbnB1dFt0eXBlPSd0ZXh0J11cIjpcbiAgICAgIFwiY29sb3I6ICR0ZXh0LWNvbG9yOyAtd2Via2l0LXRleHQtZmlsbC1jb2xvcjogJHRleHQtY29sb3I7IGJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvcjsgYmFja2dyb3VuZC1jb2xvcjogJGlucHV0cy1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIHNlbGVjdFwiOlxuICAgICAgXCJjb2xvcjogJHRleHQtY29sb3I7IGJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvcjsgYmFja2dyb3VuZC1jb2xvcjogJGlucHV0cy1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIHRleHRhcmVhXCI6XG4gICAgICBcImNvbG9yOiAkdGV4dC1pbnB1dC1jb2xvcjsgLXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6ICR0ZXh0LWlucHV0LWNvbG9yOyBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7IGJhY2tncm91bmQtY29sb3I6ICRpbnB1dHMtYmFja2dyb3VuZC1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyBpbnB1dDpub3QoW3R5cGU9J2J1dHRvbiddKTpub3QoW3R5cGU9J3Jlc2V0J10pOm5vdChbdHlwZT0nc3VibWl0J10pOm5vdChbdHlwZT0naW1hZ2UnXSk6bm90KFt0eXBlPSdjaGVja2JveCddKTpub3QoW3R5cGU9J3JhZGlvJ10pXCI6XG4gICAgICBcImJvcmRlcjogMXB4IHNvbGlkICRib3JkZXItY29sb3I7IGJhY2tncm91bmQtY29sb3I6ICRpbnB1dHMtYmFja2dyb3VuZC1jb2xvcjtjb2xvcjogJHRleHQtaW5wdXQtY29sb3I7IC13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiAkdGV4dC1pbnB1dC1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyBpbnB1dDpub3QoW3R5cGU9J2J1dHRvbiddKTpub3QoW3R5cGU9J3Jlc2V0J10pOm5vdChbdHlwZT0nc3VibWl0J10pOm5vdChbdHlwZT0naW1hZ2UnXSk6bm90KFt0eXBlPSdjaGVja2JveCddKTpub3QoW3R5cGU9J3JhZGlvJ10pOmZvY3VzXCI6XG4gICAgICBcImJvcmRlcjogMXB4IHNvbGlkICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIC5zdl9jb250YWluZXIgLnN2X2JvZHkgLnN2X3Bfcm9vdCAuc3ZfcSAuc3Zfc2VsZWN0X3dyYXBwZXIgLnN2X3FfZHJvcGRvd25fY29udHJvbCBcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJGlucHV0cy1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIC5zdl9xX290aGVyIGlucHV0OmZvY3VzXCI6IFwiYm9yZGVyLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyAuc3ZfcV90ZXh0X3Jvb3Q6Zm9jdXNcIjogXCJib3JkZXItY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIC5zdl9xX2Ryb3Bkb3duX2NvbnRyb2w6Zm9jdXNcIjpcbiAgICAgIFwiYm9yZGVyLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyBpbnB1dFt0eXBlPSd0ZXh0J106Zm9jdXNcIjogXCJib3JkZXItY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgICcuc3ZfZGVmYXVsdF9jc3MgLnN2X2NvbnRhaW5lciAuc3ZfYm9keSAuc3ZfcF9yb290IC5zdl9xIGlucHV0W3R5cGU9XCJyYWRpb1wiXTpmb2N1cywgLnN2X2RlZmF1bHRfY3NzIC5zdl9jb250YWluZXIgLnN2X2JvZHkgLnN2X3Bfcm9vdCAuc3ZfcSBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl06Zm9jdXMnOlxuICAgICAgXCJvdXRsaW5lOiAxcHggZG90dGVkICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIHNlbGVjdDpmb2N1c1wiOiBcImJvcmRlci1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgdGV4dGFyZWE6Zm9jdXNcIjogXCJib3JkZXItY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgLnN2X3NlbGVjdF93cmFwcGVyXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRib2R5LWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgLnN2X3NlbGVjdF93cmFwcGVyOjpiZWZvcmVcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG5cbiAgICBcIi5zdl9kZWZhdWx0X2NzcyAuc3ZfcV9yYXRpbmdfaXRlbS5hY3RpdmUgLnN2X3FfcmF0aW5nX2l0ZW1fdGV4dFwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1ob3Zlci1jb2xvcjsgYm9yZGVyLWNvbG9yOiAkbWFpbi1ob3Zlci1jb2xvcjsgY29sb3I6ICRib2R5LWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgLnN2X3FfcmF0aW5nX2l0ZW0gLnN2X3FfcmF0aW5nX2l0ZW1fdGV4dFwiOlxuICAgICAgXCJib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgLnN2X3FfcmF0aW5nX2l0ZW0gLnN2X3FfcmF0aW5nX2l0ZW1fdGV4dDpob3ZlclwiOlxuICAgICAgXCJib3JkZXItY29sb3I6ICRtYWluLWhvdmVyLWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgdGFibGUuc3ZfcV9tYXRyaXggdHJcIjogXCJib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgdGFibGUuc3ZfcV9tYXRyaXhfZHJvcGRvd24gdHJcIjpcbiAgICAgIFwiYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIHRhYmxlLnN2X3FfbWF0cml4X2R5bmFtaWMgdHJcIjpcbiAgICAgIFwiYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgLnN2X3FfbV9jZWxsX3NlbGVjdGVkXCI6XG4gICAgICBcImNvbG9yOiAkYm9keS1iYWNrZ3JvdW5kLWNvbG9yOyBiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1ob3Zlci1jb2xvcjtcIixcblxuICAgIFwiLnN2X21haW4gLnN2X3FfZmlsZV9yZW1vdmU6aG92ZXJcIjogXCJjb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3ZfcV9maWxlX2Nob29zZV9idXR0b25cIjpcbiAgICAgIFwiY29sb3I6ICRib2R5LWJhY2tncm91bmQtY29sb3I7IGJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2X3FfZmlsZV9jaG9vc2VfYnV0dG9uOmhvdmVyXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWhvdmVyLWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZfbWFpbiAuc3ZfcV9pbWdzZWwuY2hlY2tlZCBsYWJlbD5kaXZcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvclwiLFxuXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgLnN2X3BfZGVzY3JpcHRpb25cIjogXCJwYWRkaW5nLWxlZnQ6IDEuMjllbTtcIixcbiAgICAvL3Byb2dyZXNzIGJhclxuICAgIFwiLnN2X21haW4gLnN2LXByb2dyZXNzXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJGhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LXByb2dyZXNzX19iYXJcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcblxuICAgIC8vcGFuZWxkeW5hbWljXG4gICAgXCIuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19wcmV2LWJ0bi5zdi1wYW5lbGR5bmFtaWNfX3ByZXYtYnRuLS1kaXNhYmxlZCwgLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fbmV4dC1idG4uc3YtcGFuZWxkeW5hbWljX19uZXh0LWJ0bi0tZGlzYWJsZWRcIjpcbiAgICAgIFwiZmlsbDogJGRpc2FibGUtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy10ZXh0XCI6IFwiY29sb3I6ICRwcm9ncmVzcy10ZXh0LWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fcHJldi1idG4sIC5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX25leHQtYnRuXCI6XG4gICAgICBcImZpbGw6ICR0ZXh0LWNvbG9yXCIsXG5cbiAgICAvL2Jvb2xlYW5cbiAgICBcIi5zdl9tYWluIC5zdi1ib29sZWFuX19zd2l0Y2hcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1ib29sZWFuX19zbGlkZXJcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkc2xpZGVyLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWJvb2xlYW5fX2xhYmVsLS1kaXNhYmxlZFwiOiBcImNvbG9yOiAkZGlzYWJsZWQtbGFiZWwtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbi0tZGlzYWJsZWQgLnN2LWJvb2xlYW5fX3N3aXRjaFwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkZGlzYWJsZWQtc3dpdGNoLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWJvb2xlYW4tLWRpc2FibGVkIC5zdi1ib29sZWFuX19zbGlkZXJcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJGRpc2FibGVkLXNsaWRlci1jb2xvcjtcIixcbiAgICAvL2VvIGJvb2xlYW5cblxuICAgIC8vc2lnbmF0dXJlIHBhZFxuICAgIFwiLnN2X21haW4gLnNqc19zcF9jb250YWluZXJcIjogXCJib3JkZXI6IDFweCBkYXNoZWQgJGRpc2FibGUtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc2pzX3NwX3BsYWNlaG9sZGVyXCI6IFwiY29sb3I6ICRmb3JlZ3JvdW5kLWxpZ2h0O1wiLFxuXG4gICAgXCIuc3ZfbWFpbiAuc3ZfbWF0cml4X2RldGFpbF9yb3dcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogI2VkZWRlZDsgYm9yZGVyLXRvcDogMXB4IHNvbGlkICRoZWFkZXItYmFja2dyb3VuZC1jb2xvcjsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRoZWFkZXItYmFja2dyb3VuZC1jb2xvcjtcIixcblxuICAgIC8vYWN0aW9uLWJhclxuICAgIFwiLnN2X21haW4gLnN2LWFjdGlvbi1iYXItaXRlbVwiOiBcImNvbG9yOiAkdGV4dC1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1hY3Rpb24tYmFyLWl0ZW1fX2ljb24gdXNlXCI6IFwiZmlsbDogJGZvcmVncm91bmQtbGlnaHQ7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYWN0aW9uLWJhci1pdGVtOmhvdmVyXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtZGltO1wiLFxuICAgIC8vZW8gYWN0aW9uLWJhclxuXG4gICAgLy9idXR0b24tZ3JvdXBcbiAgICBcIi5zdl9tYWluIC5zdi1idXR0b24tZ3JvdXBfX2l0ZW0tLWhvdmVyOmhvdmVyXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kLWRpbTtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1idXR0b24tZ3JvdXBfX2l0ZW0taWNvbiB1c2VcIjogXCJmaWxsOiAkZm9yZWdyb3VuZC1saWdodDtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1idXR0b24tZ3JvdXBfX2l0ZW0tLXNlbGVjdGVkXCI6IFwiY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWJ1dHRvbi1ncm91cF9faXRlbS0tc2VsZWN0ZWQgLnN2LWJ1dHRvbi1ncm91cF9faXRlbS1pY29uIHVzZVwiOlxuICAgICAgXCJmaWxsOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1idXR0b24tZ3JvdXBfX2l0ZW0tLWRpc2FibGVkXCI6IFwiY29sb3I6ICRmb3JlZ3JvdW5kLWRpc2FibGVkO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWJ1dHRvbi1ncm91cF9faXRlbS0tZGlzYWJsZWQgLnN2LWJ1dHRvbi1ncm91cF9faXRlbS1pY29uIHVzZVwiOlxuICAgICAgXCJmaWxsOiAkZm9yZWdyb3VuZC1kaXNhYmxlZDtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1idXR0b24tZ3JvdXBfX2l0ZW1cIjpcbiAgICAgIFwiYmFja2dyb3VuZDogJGJvZHktYmFja2dyb3VuZC1jb2xvcjsgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1wiLFxuXG4gICAgLy9lbyBidXR0b24tZ3JvdXBcblxuICAgIFwiLnN2X21haW4gLnN2X3FzdG4gdGV4dGFyZWFcIjogXCJtYXgtd2lkdGg6IDEwMCVcIixcblxuICAgIFwiLnN2X21haW4gLnN2LW1hdHJpeGR5bmFtaWNfX2RyYWctaWNvblwiOiBcInBhZGRpbmctdG9wOjE0cHhcIixcbiAgICBcIi5zdl9tYWluIC5zdi1tYXRyaXhkeW5hbWljX19kcmFnLWljb246YWZ0ZXJcIjpcbiAgICAgIFwiY29udGVudDogJyAnOyBkaXNwbGF5OiBibG9jazsgaGVpZ2h0OiA0cHg7IHdpZHRoOiAxNnB4OyBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyLWNvbG9yOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyBib3JkZXItcmFkaXVzOiAxMHB4OyBjdXJzb3I6IG1vdmU7XCIsXG4gIH07XG5cbiAgcHVibGljIHN0YXRpYyBtb2Rlcm5UaGVtZUNzczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAvLyBcIi5zdi1wYW5lbGR5bmFtaWNfX2FkZC1idG5cIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkYWRkLWJ1dHRvbi1jb2xvcjtcIixcbiAgICAvLyBcIi5zdi1wYW5lbGR5bmFtaWNfX3JlbW92ZS1idG5cIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkcmVtb3ZlLWJ1dHRvbi1jb2xvcjtcIixcbiAgICBcIi5zdi1ib29sZWFuX19zd2l0Y2hcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdi1ib29sZWFuX19zbGlkZXJcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkc2xpZGVyLWNvbG9yO1wiLFxuICAgIFwiLnN2LWJvb2xlYW5fX2xhYmVsLS1kaXNhYmxlZFwiOiBcImNvbG9yOiAkZGlzYWJsZWQtbGFiZWwtY29sb3I7XCIsXG4gICAgXCIuc3YtYm9vbGVhbi0tZGlzYWJsZWQgLnN2LWJvb2xlYW5fX3N3aXRjaFwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkZGlzYWJsZWQtc3dpdGNoLWNvbG9yO1wiLFxuICAgIFwiLnN2LWJvb2xlYW4tLWRpc2FibGVkIC5zdi1ib29sZWFuX19zbGlkZXJcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJGRpc2FibGVkLXNsaWRlci1jb2xvcjtcIixcblxuICAgIFwiLnN2LWJ0blwiOiBcImNvbG9yOiAkYnV0dG9uLXRleHQtY29sb3I7XCIsXG4gICAgXCIuc3YtY2hlY2tib3hfX3N2Z1wiOiBcImJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvcjsgZmlsbDogdHJhbnNwYXJlbnQ7XCIsXG4gICAgXCIuc3YtY2hlY2tib3gtLWFsbG93aG92ZXI6aG92ZXIgLnN2LWNoZWNrYm94X19zdmdcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4taG92ZXItY29sb3I7IGZpbGw6ICRjaGVja21hcmstY29sb3I7XCIsXG4gICAgXCIuc3YtY2hlY2tib3gtLWNoZWNrZWQgLnN2LWNoZWNrYm94X19zdmdcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7IGZpbGw6ICRjaGVja21hcmstY29sb3I7XCIsXG4gICAgXCIuc3YtY2hlY2tib3gtLWNoZWNrZWQuc3YtY2hlY2tib3gtLWRpc2FibGVkIC5zdi1jaGVja2JveF9fc3ZnXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRkaXNhYmxlLWNvbG9yOyBmaWxsOiAkY2hlY2ttYXJrLWNvbG9yO1wiLFxuICAgIFwiLnN2LWNoZWNrYm94LS1kaXNhYmxlZCAuc3YtY2hlY2tib3hfX3N2Z1wiOiBcImJvcmRlci1jb2xvcjogJGRpc2FibGUtY29sb3I7XCIsXG4gICAgXCIuc3YtY29tbWVudFwiOiBcImJvcmRlci1jb2xvcjogJHRleHQtYm9yZGVyLWNvbG9yOyBtYXgtd2lkdGg6IDEwMCU7XCIsXG4gICAgXCIuc3YtY29tbWVudDpmb2N1c1wiOiBcImJvcmRlci1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3YtY29tcGxldGVkcGFnZVwiOlxuICAgICAgXCJjb2xvcjogJHRleHQtY29sb3I7IGJhY2tncm91bmQtY29sb3I6ICRib2R5LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2LWNvbnRhaW5lci1tb2Rlcm5cIjogXCJjb2xvcjogJHRleHQtY29sb3I7XCIsXG4gICAgXCIuc3YtY29udGFpbmVyLW1vZGVybl9fdGl0bGVcIjogXCJjb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3YtZGVzY3JpcHRpb25cIjogXCJjb2xvcjogJGRpc2FibGVkLXRleHQtY29sb3I7XCIsXG4gICAgXCIuc3YtZHJvcGRvd25cIjogXCJib3JkZXItYm90dG9tOiAwLjA2ZW0gc29saWQgJHRleHQtYm9yZGVyLWNvbG9yO1wiLFxuICAgIFwiLnN2LWRyb3Bkb3duOmZvY3VzXCI6IFwiYm9yZGVyLWNvbG9yOiAkZHJvcGRvd24tYm9yZGVyLWNvbG9yO1wiLFxuICAgIFwiLnN2LWRyb3Bkb3duLS1lcnJvclwiOiBcImJvcmRlci1jb2xvcjogJGVycm9yLWNvbG9yOyBjb2xvcjogJGVycm9yLWNvbG9yO1wiLFxuICAgIFwiLnN2LWRyb3Bkb3duLS1lcnJvcjo6cGxhY2Vob2xkZXJcIjogXCJjb2xvcjogJGVycm9yLWNvbG9yO1wiLFxuICAgIFwiLnN2LWRyb3Bkb3duLS1lcnJvcjo6LW1zLWlucHV0LXBsYWNlaG9sZGVyXCI6IFwiY29sb3I6ICRlcnJvci1jb2xvcjtcIixcbiAgICBcIi5zdi1maWxlX19kZWNvcmF0b3JcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJGJvZHktY29udGFpbmVyLWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3YtZmlsZV9fY2xlYW4tYnRuXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJHJlbW92ZS1idXR0b24tY29sb3I7XCIsXG4gICAgXCIuc3YtZmlsZV9fY2hvb3NlLWJ0bjpub3QoLnN2LWZpbGVfX2Nob29zZS1idG4tLWRpc2FibGVkKVwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkYWRkLWJ1dHRvbi1jb2xvcjtcIixcbiAgICBcIi5zdi1maWxlX19jaG9vc2UtYnRuLS1kaXNhYmxlZFwiOiBcImJhY2tncm91bmQtY29sb3I6ICRkaXNhYmxlLWNvbG9yO1wiLFxuICAgIFwiLnN2LWZpbGVfX3JlbW92ZS1zdmdcIjogXCJmaWxsOiAjZmYxODAwO1wiLFxuICAgIFwiLnN2LWZpbGVfX3NpZ24gYVwiOiBcImNvbG9yOiAkdGV4dC1jb2xvcjtcIixcbiAgICBcIi5zdi1mb290ZXJfX2NvbXBsZXRlLWJ0blwiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2LWZvb3Rlcl9fbmV4dC1idG5cIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdi1mb290ZXJfX3ByZXYtYnRuXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3YtZm9vdGVyX19zdGFydC1idG5cIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdi1mb290ZXJfX3ByZXZpZXctYnRuXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3YtZm9vdGVyX19lZGl0LWJ0blwiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2LWltYWdlcGlja2VyX19pdGVtLS1hbGxvd2hvdmVyOmhvdmVyIC5zdi1pbWFnZXBpY2tlcl9faW1hZ2VcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4taG92ZXItY29sb3I7IGJvcmRlci1jb2xvcjogJG1haW4taG92ZXItY29sb3I7XCIsXG4gICAgXCIuc3YtaW1hZ2VwaWNrZXJfX2l0ZW0tLWNoZWNrZWQgLnN2LWltYWdlcGlja2VyX19pbWFnZVwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjsgYm9yZGVyLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdi1pbWFnZXBpY2tlcl9faXRlbS0tZGlzYWJsZWQuc3YtaW1hZ2VwaWNrZXJfX2l0ZW0tLWNoZWNrZWQgLnN2LWltYWdlcGlja2VyX19pbWFnZVwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkZGlzYWJsZS1jb2xvcjsgYm9yZGVyLWNvbG9yOiAkZGlzYWJsZS1jb2xvcjtcIixcbiAgICBcIi5zdi1pdGVtX19jb250cm9sOmZvY3VzICsgLnN2LWl0ZW1fX2RlY29yYXRvclwiOlxuICAgICAgXCJib3JkZXItY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2LW1hdHJpeF9fdGV4dC0tY2hlY2tlZFwiOlxuICAgICAgXCJjb2xvcjogJG1hdHJpeC10ZXh0LWNoZWNrZWQtY29sb3I7IGJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2LW1hdHJpeF9fdGV4dC0tZGlzYWJsZWQuc3YtbWF0cml4X190ZXh0LS1jaGVja2VkXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRkaXNhYmxlLWNvbG9yO1wiLFxuICAgIFwiLnN2LW1hdHJpeGR5bmFtaWNfX2FkZC1idG5cIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkYWRkLWJ1dHRvbi1jb2xvcjtcIixcbiAgICBcIi5zdi1tYXRyaXhkeW5hbWljX19yZW1vdmUtYnRuXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJHJlbW92ZS1idXR0b24tY29sb3I7XCIsXG4gICAgXCIuc3YtbWF0cml4ZHluYW1pY19fZHJhZy1pY29uXCI6IFwicGFkZGluZy10b3A6MTZweFwiLFxuICAgIFwiLnN2LW1hdHJpeGR5bmFtaWNfX2RyYWctaWNvbjphZnRlclwiOlxuICAgICAgXCJjb250ZW50OiAnICc7IGRpc3BsYXk6IGJsb2NrOyBoZWlnaHQ6IDRweDsgd2lkdGg6IDE2cHg7IGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXItY29sb3I7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IGJvcmRlci1yYWRpdXM6IDEwcHg7IGN1cnNvcjogbW92ZTtcIixcbiAgICBcIi5zdi1wYW5lbGR5bmFtaWNfX2FkZC1idG5cIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkYWRkLWJ1dHRvbi1jb2xvcjtcIixcbiAgICBcIi5zdi1wYW5lbGR5bmFtaWNfX3JlbW92ZS1idG5cIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkcmVtb3ZlLWJ1dHRvbi1jb2xvcjtcIixcbiAgICBcIi5zdi1wYW5lbGR5bmFtaWNfX3ByZXYtYnRuLCAuc3YtcGFuZWxkeW5hbWljX19uZXh0LWJ0blwiOlxuICAgICAgXCJmaWxsOiAkdGV4dC1jb2xvcjtcIixcbiAgICBcIi5zdi1wYW5lbGR5bmFtaWNfX3ByZXYtYnRuLS1kaXNhYmxlZCwgLnN2LXBhbmVsZHluYW1pY19fbmV4dC1idG4tLWRpc2FibGVkXCI6XG4gICAgICBcImZpbGw6ICRkaXNhYmxlLWNvbG9yO1wiLFxuICAgIFwiLnN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3MtdGV4dFwiOiBcImNvbG9yOiAkcHJvZ3Jlc3MtdGV4dC1jb2xvcjtcIixcbiAgICBcIi5zdi1wcm9ncmVzc1wiOiBcImJhY2tncm91bmQtY29sb3I6ICRoZWFkZXItYmFja2dyb3VuZC1jb2xvcjtcIixcbiAgICBcIi5zdi1wcm9ncmVzc19fYmFyXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3YtcHJvZ3Jlc3NfX3RleHRcIjogXCJjb2xvcjogJHByb2dyZXNzLXRleHQtY29sb3I7XCIsXG4gICAgXCIuc3YtcXVlc3Rpb25fX2VyYm94XCI6IFwiY29sb3I6ICRlcnJvci1jb2xvcjtcIixcbiAgICBcIi5zdi1xdWVzdGlvbl9fdGl0bGUtLWFuc3dlclwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkYW5zd2VyLWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3YtcXVlc3Rpb25fX3RpdGxlLS1lcnJvclwiOiBcImJhY2tncm91bmQtY29sb3I6ICRlcnJvci1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2LXBhbmVsX190aXRsZS0tZXJyb3JcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkZXJyb3ItYmFja2dyb3VuZC1jb2xvcjtcIixcbiAgICBcIi5zdi1yYWRpb19fc3ZnXCI6IFwiYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yOyBmaWxsOiB0cmFuc3BhcmVudDtcIixcbiAgICBcIi5zdi1yYWRpby0tYWxsb3dob3Zlcjpob3ZlciAuc3YtcmFkaW9fX3N2Z1wiOiBcImZpbGw6ICRib3JkZXItY29sb3I7XCIsXG4gICAgXCIuc3YtcmFkaW8tLWNoZWNrZWQgLnN2LXJhZGlvX19zdmdcIjpcbiAgICAgIFwiYm9yZGVyLWNvbG9yOiAkcmFkaW8tY2hlY2tlZC1jb2xvcjsgZmlsbDogJHJhZGlvLWNoZWNrZWQtY29sb3I7XCIsXG4gICAgXCIuc3YtcmFkaW8tLWRpc2FibGVkIC5zdi1yYWRpb19fc3ZnXCI6IFwiYm9yZGVyLWNvbG9yOiAkZGlzYWJsZS1jb2xvcjtcIixcbiAgICBcIi5zdi1yYWRpby0tZGlzYWJsZWQuc3YtcmFkaW8tLWNoZWNrZWQgLnN2LXJhZGlvX19zdmdcIjpcbiAgICAgIFwiZmlsbDogJGRpc2FibGUtY29sb3I7XCIsXG4gICAgXCIuc3YtcmF0aW5nXCI6IFwiY29sb3I6ICR0ZXh0LWNvbG9yO1wiLFxuICAgIFwiLnN2LXJhdGluZyBpbnB1dDpmb2N1cyArIC5zdi1yYXRpbmdfX21pbi10ZXh0ICsgLnN2LXJhdGluZ19faXRlbS10ZXh0LCAuc3YtcmF0aW5nIGlucHV0OmZvY3VzICsgLnN2LXJhdGluZ19faXRlbS10ZXh0XCI6XG4gICAgICBcIm91dGxpbmUtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2LXJhdGluZ19faXRlbS10ZXh0XCI6XG4gICAgICBcImNvbG9yOiAkbWFpbi1ob3Zlci1jb2xvcjsgYm9yZGVyOiBzb2xpZCAwLjE4NzVlbSAkbWFpbi1ob3Zlci1jb2xvcjtcIixcbiAgICBcIi5zdi1yYXRpbmdfX2l0ZW0tdGV4dDpob3ZlclwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1ob3Zlci1jb2xvcjsgY29sb3I6ICRib2R5LWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3YtcmF0aW5nX19pdGVtLS1zZWxlY3RlZCAuc3YtcmF0aW5nX19pdGVtLXRleHRcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7IGNvbG9yOiAkYm9keS1iYWNrZ3JvdW5kLWNvbG9yOyBib3JkZXItY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2LXJhdGluZy0tZGlzYWJsZWQgLnN2LXJhdGluZ19faXRlbS10ZXh0XCI6XG4gICAgICBcImNvbG9yOiAkZGlzYWJsZS1jb2xvcjsgYm9yZGVyLWNvbG9yOiAkZGlzYWJsZS1jb2xvcjtcIixcbiAgICBcIi5zdi1yYXRpbmctLWRpc2FibGVkIC5zdi1yYXRpbmdfX2l0ZW0tdGV4dDpob3ZlclwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcIixcbiAgICBcIi5zdi1yYXRpbmctLWRpc2FibGVkIC5zdi1yYXRpbmdfX2l0ZW0tdGV4dDpob3ZlciAuc3YtcmF0aW5nX19pdGVtLS1zZWxlY3RlZCAuc3YtcmF0aW5nX19pdGVtLXRleHRcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJGRpc2FibGUtY29sb3I7IGNvbG9yOiAkYm9keS1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiOjotd2Via2l0LXNjcm9sbGJhclwiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWhvdmVyLWNvbG9yO1wiLFxuICAgIFwiOjotd2Via2l0LXNjcm9sbGJhci10aHVtYlwiOiBcImJhY2tncm91bmQ6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2LXNlbGVjdGJhc2VfX2NsZWFyLWJ0blwiOiBcImJhY2tncm91bmQtY29sb3I6ICRjbGVhbi1idXR0b24tY29sb3I7XCIsXG4gICAgXCIuc3YtdGFibGVcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCRtYWluLWhvdmVyLWNvbG9yLCAwLjEpO1wiLFxuICAgIFwiLnN2LXRleHQ6Zm9jdXNcIjogXCJib3JkZXItY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgICcuc3YtdGV4dFt0eXBlPVwiZGF0ZVwiXTo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9yJzpcbiAgICAgIFwiY29sb3I6IHRyYW5zcGFyZW50OyBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcIixcbiAgICBcIi5zdi10ZXh0LS1lcnJvclwiOiBcImNvbG9yOiAkZXJyb3ItY29sb3I7IGJvcmRlci1jb2xvcjogJGVycm9yLWNvbG9yO1wiLFxuICAgIFwiLnN2LXRleHQtLWVycm9yOjpwbGFjZWhvbGRlclwiOiBcImNvbG9yOiAkZXJyb3ItY29sb3I7XCIsXG4gICAgXCIuc3YtdGV4dC0tZXJyb3I6Oi1tcy1wbGFjZWhvbGRlclwiOiBcImNvbG9yOiAkZXJyb3ItY29sb3I7XCIsXG4gICAgXCIuc3YtdGV4dC0tZXJyb3I6LW1zLXBsYWNlaG9sZGVyXCI6IFwiY29sb3I6ICRlcnJvci1jb2xvcjtcIixcbiAgICBcImlucHV0LnN2LXRleHQsIHRleHRhcmVhLnN2LWNvbW1lbnQsIHNlbGVjdC5zdi1kcm9wZG93blwiOlxuICAgICAgXCJjb2xvcjogJHRleHQtaW5wdXQtY29sb3I7IGJhY2tncm91bmQtY29sb3I6ICRpbnB1dHMtYmFja2dyb3VuZC1jb2xvcjtcIixcbiAgICBcIi5zdi10ZXh0OjpwbGFjZWhvbGRlclwiOiBcImNvbG9yOiAkdGV4dC1pbnB1dC1jb2xvcjtcIixcbiAgICBcIi5zdi10ZXh0OjotbXMtcGxhY2Vob2xkZXJcIjogXCJjb2xvcjogJHRleHQtaW5wdXQtY29sb3I7XCIsXG4gICAgXCIuc3YtdGV4dDotbXMtcGxhY2Vob2xkZXJcIjogXCJjb2xvcjogJHRleHQtaW5wdXQtY29sb3I7XCIsXG4gICAgXCIuc3YtdGFibGVfX3Jvdy0tZGV0YWlsXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJGhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIC8vc2lnbmF0dXJlIHBhZFxuICAgIFwiLnNqc19zcF9jb250YWluZXJcIjogXCJib3JkZXI6IDFweCBkYXNoZWQgJGRpc2FibGUtY29sb3I7XCIsXG4gICAgXCIuc2pzX3NwX3BsYWNlaG9sZGVyXCI6IFwiY29sb3I6ICRmb3JlZ3JvdW5kLWxpZ2h0O1wiLFxuICB9O1xuXG4gIHB1YmxpYyBzdGF0aWMgYm9vdHN0cmFwVGhlbWVDc3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgXCIuc3ZfbWFpbiAuc3ZfcV9pbWdzZWwuY2hlY2tlZCBsYWJlbD5kaXZcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvclwiLFxuICAgIFwiLnN2X21haW4gLnN2X3BfZGVzY3JpcHRpb25cIjogXCJwYWRkaW5nLWxlZnQ6IDEuNjZlbTtcIixcbiAgICBcIi5zdl9tYWluIC5zdl9xc3RuX2Vycm9yX2JvdHRvbVwiOiBcIm1hcmdpbi10b3A6IDIwcHg7IG1hcmdpbi1ib3R0b206IDA7XCIsXG4gICAgXCIuc3ZfbWFpbiAucHJvZ3Jlc3NcIjogXCJ3aWR0aDogNjAlO1wiLFxuICAgIFwiLnN2X21haW4gLnByb2dyZXNzLWJhclwiOlxuICAgICAgXCJ3aWR0aDogYXV0bzsgbWFyZ2luLWxlZnQ6IDJweDsgbWFyZ2luLXJpZ2h0OiAycHg7XCIsXG4gICAgXCIuc3ZfbWFpbiAudGFibGU+dGJvZHk+dHI+dGRcIjogXCJtaW4td2lkdGg6IDkwcHg7XCIsXG4gICAgXCIuc3ZfbWFpbiBmLXBhbmVsIC5zdl9xc3RuXCI6IFwicGFkZGluZzogMDsgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcIixcblxuICAgIFwiLnN2X21haW4gLnN2X3FfaW1hZ2VcIjogXCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3Zfcm93IC5zdl9xc3RuOmZpcnN0LWNoaWxkOmxhc3QtY2hpbGRcIjpcbiAgICAgIFwiZmxleDogbm9uZSAhaW1wb3J0YW50O1wiLFxuICAgIFwiLnN2X21haW4gLnN2X3JvdyAuc3ZfcF9jb250YWluZXI6Zmlyc3QtY2hpbGQ6bGFzdC1jaGlsZFwiOlxuICAgICAgXCJmbGV4OiBub25lICFpbXBvcnRhbnQ7XCIsXG5cbiAgICAvL3Byb2dyZXNzIGJhclxuICAgIFwiLnN2X21haW4gLnN2LXByb2dyZXNzXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJGhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LXByb2dyZXNzX19iYXJcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcblxuICAgIC8vcGFuZWxkeW5hbWljXG4gICAgXCIuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19wcmV2LWJ0bi5zdi1wYW5lbGR5bmFtaWNfX3ByZXYtYnRuLS1kaXNhYmxlZCwgLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fbmV4dC1idG4uc3YtcGFuZWxkeW5hbWljX19uZXh0LWJ0bi0tZGlzYWJsZWRcIjpcbiAgICAgIFwiZmlsbDogJGRpc2FibGUtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy10ZXh0XCI6IFwiY29sb3I6ICRwcm9ncmVzcy10ZXh0LWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fcHJldi1idG4sIC5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX25leHQtYnRuXCI6XG4gICAgICBcImZpbGw6ICR0ZXh0LWNvbG9yXCIsXG5cbiAgICAvL2Jvb2xlYW5cbiAgICBcIi5zdl9tYWluIC5zdi1ib29sZWFuX19zd2l0Y2hcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1ib29sZWFuX19zbGlkZXJcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkc2xpZGVyLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWJvb2xlYW5fX2xhYmVsLS1kaXNhYmxlZFwiOiBcImNvbG9yOiAkZGlzYWJsZWQtbGFiZWwtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbi0tZGlzYWJsZWQgLnN2LWJvb2xlYW5fX3N3aXRjaFwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkZGlzYWJsZWQtc3dpdGNoLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWJvb2xlYW4tLWRpc2FibGVkICAuc3YtYm9vbGVhbl9fc2xpZGVyXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRkaXNhYmxlZC1zbGlkZXItY29sb3I7XCIsXG4gICAgLy9lbyBib29sZWFuXG5cbiAgICAvL3NpZ25hdHVyZSBwYWRcbiAgICBcIi5zdl9tYWluIC5zanNfc3BfY29udGFpbmVyXCI6IFwiYm9yZGVyOiAxcHggZGFzaGVkICRkaXNhYmxlLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnNqc19zcF9wbGFjZWhvbGRlclwiOiBcImNvbG9yOiAkZm9yZWdyb3VuZC1saWdodDtcIixcblxuICAgIFwiLnN2X21haW4gLnN2X21hdHJpeF9kZXRhaWxfcm93XCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICNlZGVkZWQ7IGJvcmRlci10b3A6IDFweCBzb2xpZCAkaGVhZGVyLWJhY2tncm91bmQtY29sb3I7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkaGVhZGVyLWJhY2tncm91bmQtY29sb3I7XCIsXG5cbiAgICBcIi5zdl9tYWluIC5zdi1hY3Rpb24tYmFyLWl0ZW1cIjogXCJjb2xvcjogJHRleHQtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYWN0aW9uLWJhci1pdGVtX19pY29uIHVzZVwiOiBcImZpbGw6ICRmb3JlZ3JvdW5kLWxpZ2h0O1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWFjdGlvbi1iYXItaXRlbTpob3ZlclwiOiBcImJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kLWRpbTtcIixcbiAgfTtcblxuICBwdWJsaWMgc3RhdGljIGJvb3RzdHJhcG1hdGVyaWFsVGhlbWVDc3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLmZvcm0tZ3JvdXAuaXMtZm9jdXNlZCAuZm9ybS1jb250cm9sXCI6XG4gICAgICBcImxpbmVhci1ncmFkaWVudCgwZGVnLCAkbWFpbi1jb2xvciAycHgsICRtYWluLWNvbG9yIDApLGxpbmVhci1ncmFkaWVudCgwZGVnLCAjRDJEMkQyIDFweCwgdHJhbnNwYXJlbnQgMCk7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLnN2X3FzdG5cIjogXCJtYXJnaW4tYm90dG9tOiAxcmVtO1wiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5zdl9xc3RuIGxhYmVsLnN2X3FfbV9sYWJlbFwiOlxuICAgICAgXCJoZWlnaHQ6IDEwMCU7XCIsXG5cbiAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAuc3ZfcV9pbWFnZVwiOiBcImRpc3BsYXk6IGlubGluZS1ibG9jaztcIixcbiAgICBcIi5zdl9tYWluIC5zdl9yb3cgLnN2X3FzdG46Zmlyc3QtY2hpbGQ6bGFzdC1jaGlsZFwiOlxuICAgICAgXCJmbGV4OiBub25lICFpbXBvcnRhbnQ7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3Zfcm93IC5zdl9wX2NvbnRhaW5lcjpmaXJzdC1jaGlsZDpsYXN0LWNoaWxkXCI6XG4gICAgICBcImZsZXg6IG5vbmUgIWltcG9ydGFudDtcIixcblxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkICsgLmNoZWNrYm94LW1hdGVyaWFsIC5jaGVja1wiOlxuICAgICAgXCJib3JkZXItY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIGxhYmVsLmNoZWNrYm94LWlubGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkICsgLmNoZWNrYm94LW1hdGVyaWFsIC5jaGVja1wiOlxuICAgICAgXCJib3JkZXItY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkICsgLmNoZWNrYm94LW1hdGVyaWFsIC5jaGVjazpiZWZvcmVcIjpcbiAgICAgIFwiY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIGxhYmVsLmNoZWNrYm94LWlubGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkICsgLmNoZWNrYm94LW1hdGVyaWFsIC5jaGVjazpiZWZvcmVcIjpcbiAgICAgIFwiY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLnJhZGlvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQgfiAuY2lyY2xlXCI6XG4gICAgICBcImJvcmRlci1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgbGFiZWwucmFkaW8taW5saW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQgfiAuY2lyY2xlXCI6XG4gICAgICBcImJvcmRlci1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLnJhZGlvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQgfiAuY2hlY2tcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgbGFiZWwucmFkaW8taW5saW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQgfiAuY2hlY2tcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLmJ0bi1kZWZhdWx0LmFjdGl2ZVwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjsgY29sb3I6ICRib2R5LWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLmJ0bi1kZWZhdWx0OmFjdGl2ZVwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjsgY29sb3I6ICRib2R5LWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLmJ0bi1zZWNvbmRhcnkuYWN0aXZlXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yOyBjb2xvcjogJGJvZHktYmFja2dyb3VuZC1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAuYnRuLXNlY29uZGFyeTphY3RpdmVcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7IGNvbG9yOiAkYm9keS1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5vcGVuPi5kcm9wZG93bi10b2dnbGUuYnRuLWRlZmF1bHRcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7IGNvbG9yOiAkYm9keS1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIGlucHV0W3R5cGU9J2J1dHRvbiddLmJ0bi1wcmltYXJ5LCAuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgYnV0dG9uLmJ0bi1wcmltYXJ5XCI6XG4gICAgICBcImNvbG9yOiAkYm9keS1iYWNrZ3JvdW5kLWNvbG9yOyBiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyBpbnB1dFt0eXBlPSdidXR0b24nXS5idG4tcHJpbWFyeTpob3ZlciwgLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIGJ1dHRvbi5idG4tcHJpbWFyeTpob3ZlclwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1ob3Zlci1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdl9xX2ltZ3NlbC5jaGVja2VkIGxhYmVsPmRpdlwiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLnN2X3FfZmlsZV9yZW1vdmU6aG92ZXJcIjpcbiAgICAgIFwiY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLmZvcm0tZ3JvdXAgaW5wdXRbdHlwZT1maWxlXVwiOlxuICAgICAgXCJwb3NpdGlvbjogcmVsYXRpdmU7IG9wYWNpdHk6IDE7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLnByb2dyZXNzXCI6IFwid2lkdGg6IDYwJTsgaGVpZ2h0OiAxLjVlbTtcIixcbiAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAucHJvZ3Jlc3MtYmFyXCI6XG4gICAgICBcIndpZHRoOiBhdXRvOyBtYXJnaW4tbGVmdDogMnB4OyBtYXJnaW4tcmlnaHQ6IDJweDtcIixcblxuICAgIC8vcHJvZ3Jlc3MgYmFyXG4gICAgXCIuc3ZfbWFpbiAuc3YtcHJvZ3Jlc3NcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkaGVhZGVyLWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtcHJvZ3Jlc3NfX2JhclwiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuXG4gICAgLy9wYW5lbGR5bmFtaWNcbiAgICBcIi5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX3ByZXYtYnRuLnN2LXBhbmVsZHluYW1pY19fcHJldi1idG4tLWRpc2FibGVkLCAuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19uZXh0LWJ0bi5zdi1wYW5lbGR5bmFtaWNfX25leHQtYnRuLS1kaXNhYmxlZFwiOlxuICAgICAgXCJmaWxsOiAkZGlzYWJsZS1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzLXRleHRcIjogXCJjb2xvcjogJHByb2dyZXNzLXRleHQtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19wcmV2LWJ0biwgLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fbmV4dC1idG5cIjpcbiAgICAgIFwiZmlsbDogJHRleHQtY29sb3JcIixcblxuICAgIC8vYm9vbGVhblxuICAgIFwiLnN2X21haW4gLnN2LWJvb2xlYW4gLmNoZWNrYm94LWRlY29yYXRvclwiOiBcImRpc3BsYXk6IG5vbmU7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbl9fc3dpdGNoXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbl9fc2xpZGVyXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJHNsaWRlci1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1ib29sZWFuX19sYWJlbC5zdi1ib29sZWFuX19sYWJlbC0tZGlzYWJsZWRcIjpcbiAgICAgIFwiY29sb3I6ICRkaXNhYmxlZC1sYWJlbC1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1ib29sZWFuX19sYWJlbFwiOiBcImNvbG9yOiAkdGV4dC1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1ib29sZWFuLS1kaXNhYmxlZCAuc3YtYm9vbGVhbl9fc3dpdGNoXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRkaXNhYmxlZC1zd2l0Y2gtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbi0tZGlzYWJsZWQgIC5zdi1ib29sZWFuX19zbGlkZXJcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJGRpc2FibGVkLXNsaWRlci1jb2xvcjtcIixcbiAgICAvL2VvIGJvb2xlYW5cbiAgICBcIi5zdl9tYWluIC5zdl9tYXRyaXhfZGV0YWlsX3Jvd1wiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAjZWRlZGVkOyBib3JkZXItdG9wOiAxcHggc29saWQgJGhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgJGhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuXG4gICAgLy9zaWduYXR1cmUgcGFkXG4gICAgXCIuc3ZfbWFpbiAuc2pzX3NwX2NvbnRhaW5lclwiOiBcImJvcmRlcjogMXB4IGRhc2hlZCAkZGlzYWJsZS1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zanNfc3BfcGxhY2Vob2xkZXJcIjogXCJjb2xvcjogJGZvcmVncm91bmQtbGlnaHQ7XCIsXG5cbiAgICBcIi5zdl9tYWluIC5zdi1hY3Rpb24tYmFyLWl0ZW1cIjogXCJjb2xvcjogJHRleHQtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYWN0aW9uLWJhci1pdGVtX19pY29uIHVzZVwiOiBcImZpbGw6ICRmb3JlZ3JvdW5kLWxpZ2h0O1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWFjdGlvbi1iYXItaXRlbTpob3ZlclwiOiBcImJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kLWRpbTtcIixcbiAgfTtcblxuICBwcml2YXRlIHNoZWV0OiBDU1NTdHlsZVNoZWV0ID0gbnVsbDtcblxuICBzdGF0aWMgZmluZFNoZWV0KHN0eWxlU2hlZXRJZDogc3RyaW5nKTogYW55IHtcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gbnVsbDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRvY3VtZW50LnN0eWxlU2hlZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoXG4gICAgICAgICEhZG9jdW1lbnQuc3R5bGVTaGVldHNbaV0ub3duZXJOb2RlICYmXG4gICAgICAgICg8YW55PmRvY3VtZW50KS5zdHlsZVNoZWV0c1tpXS5vd25lck5vZGVbXCJpZFwiXSA9PT0gc3R5bGVTaGVldElkXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIDxDU1NTdHlsZVNoZWV0PmRvY3VtZW50LnN0eWxlU2hlZXRzW2ldO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVTaGVldChzdHlsZVNoZWV0SWQ6IHN0cmluZykge1xuICAgIGxldCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgICBzdHlsZS5pZCA9IHN0eWxlU2hlZXRJZDtcbiAgICAvLyBBZGQgYSBtZWRpYSAoYW5kL29yIG1lZGlhIHF1ZXJ5KSBoZXJlIGlmIHlvdSdkIGxpa2UhXG4gICAgLy8gc3R5bGUuc2V0QXR0cmlidXRlKFwibWVkaWFcIiwgXCJzY3JlZW5cIilcbiAgICAvLyBzdHlsZS5zZXRBdHRyaWJ1dGUoXCJtZWRpYVwiLCBcIm9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoIDogMTAyNHB4KVwiKVxuICAgIHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiXCIpKTtcbiAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgICByZXR1cm4gPENTU1N0eWxlU2hlZXQ+c3R5bGUuc2hlZXQ7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGFwcGx5VGhlbWUoXG4gICAgdGhlbWVOYW1lOiBzdHJpbmcgPSBcImRlZmF1bHRcIixcbiAgICB0aGVtZVNlbGVjdG9yOiBzdHJpbmcgPSBcIi5zdl9tYWluXCJcbiAgKSB7XG4gICAgbGV0IFRoZW1lQ3NzOiBhbnk7XG5cbiAgICBpZiAodGhlbWVOYW1lID09PSBcIm1vZGVyblwiKSB0aGVtZVNlbGVjdG9yID0gXCIuc3Ytcm9vdC1tb2Rlcm4gXCI7XG5cbiAgICBpZiAoXG4gICAgICBbXCJib290c3RyYXBcIiwgXCJib290c3RyYXBtYXRlcmlhbFwiLCBcIm1vZGVyblwiXS5pbmRleE9mKHRoZW1lTmFtZSkgIT09IC0xXG4gICAgKSB7XG4gICAgICBUaGVtZUNzcyA9ICg8YW55PlN0eWxlc01hbmFnZXIpW3RoZW1lTmFtZSArIFwiVGhlbWVDc3NcIl07XG4gICAgICBzdXJ2ZXlDc3MuY3VycmVudFR5cGUgPSB0aGVtZU5hbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIFRoZW1lQ3NzID0gU3R5bGVzTWFuYWdlci5UaGVtZUNzcztcbiAgICAgIHN1cnZleUNzcy5jdXJyZW50VHlwZSA9IFwic3RhbmRhcmRcIjtcbiAgICB9XG5cbiAgICBpZiAoU3R5bGVzTWFuYWdlci5FbmFibGVkKSB7XG4gICAgICBsZXQgc2hlZXQgPSBTdHlsZXNNYW5hZ2VyLmZpbmRTaGVldCh0aGVtZU5hbWUgKyB0aGVtZVNlbGVjdG9yKTtcbiAgICAgIGlmICghc2hlZXQpIHtcbiAgICAgICAgc2hlZXQgPSBTdHlsZXNNYW5hZ2VyLmNyZWF0ZVNoZWV0KHRoZW1lTmFtZSArIHRoZW1lU2VsZWN0b3IpO1xuICAgICAgICBsZXQgdGhlbWUgPVxuICAgICAgICAgIFN0eWxlc01hbmFnZXIuVGhlbWVDb2xvcnNbdGhlbWVOYW1lXSB8fFxuICAgICAgICAgIFN0eWxlc01hbmFnZXIuVGhlbWVDb2xvcnNbXCJkZWZhdWx0XCJdO1xuXG4gICAgICAgIE9iamVjdC5rZXlzKFRoZW1lQ3NzKS5mb3JFYWNoKChzZWxlY3RvcikgPT4ge1xuICAgICAgICAgIGxldCBjc3NSdWxlVGV4dCA9IFRoZW1lQ3NzW3NlbGVjdG9yXTtcbiAgICAgICAgICBPYmplY3Qua2V5cyh0aGVtZSkuZm9yRWFjaChcbiAgICAgICAgICAgIChjb2xvclZhcmlhYmxlTmFtZSkgPT5cbiAgICAgICAgICAgICAgKGNzc1J1bGVUZXh0ID0gY3NzUnVsZVRleHQucmVwbGFjZShcbiAgICAgICAgICAgICAgICBuZXcgUmVnRXhwKFwiXFxcXFwiICsgY29sb3JWYXJpYWJsZU5hbWUsIFwiZ1wiKSxcbiAgICAgICAgICAgICAgICB0aGVtZVtjb2xvclZhcmlhYmxlTmFtZV1cbiAgICAgICAgICAgICAgKSlcbiAgICAgICAgICApO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzaGVldC5pbnNlcnRSdWxlKFxuICAgICAgICAgICAgICB0aGVtZVNlbGVjdG9yICsgc2VsZWN0b3IgKyBcIiB7IFwiICsgY3NzUnVsZVRleHQgKyBcIiB9XCIsXG4gICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHN0YXRpYyBFbmFibGVkID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAoU3R5bGVzTWFuYWdlci5FbmFibGVkKSB7XG4gICAgICB0aGlzLnNoZWV0ID0gU3R5bGVzTWFuYWdlci5maW5kU2hlZXQoU3R5bGVzTWFuYWdlci5TdXJ2ZXlKU1N0eWxlc1NoZWV0SWQpO1xuICAgICAgaWYgKCF0aGlzLnNoZWV0KSB7XG4gICAgICAgIHRoaXMuc2hlZXQgPSBTdHlsZXNNYW5hZ2VyLmNyZWF0ZVNoZWV0KFxuICAgICAgICAgIFN0eWxlc01hbmFnZXIuU3VydmV5SlNTdHlsZXNTaGVldElkXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZVN0eWxlcyh0aGlzLnNoZWV0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaW5pdGlhbGl6ZVN0eWxlcyhzaGVldDogQ1NTU3R5bGVTaGVldCkge1xuICAgIGlmIChTdHlsZXNNYW5hZ2VyLkVuYWJsZWQpIHtcbiAgICAgIE9iamVjdC5rZXlzKFN0eWxlc01hbmFnZXIuU3R5bGVzKS5mb3JFYWNoKChzZWxlY3RvcikgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHNoZWV0Lmluc2VydFJ1bGUoXG4gICAgICAgICAgICBzZWxlY3RvciArIFwiIHsgXCIgKyBTdHlsZXNNYW5hZ2VyLlN0eWxlc1tzZWxlY3Rvcl0gKyBcIiB9XCIsXG4gICAgICAgICAgICAwXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgIH0pO1xuICAgICAgT2JqZWN0LmtleXMoU3R5bGVzTWFuYWdlci5NZWRpYSkuZm9yRWFjaCgoc2VsZWN0b3IpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBzaGVldC5pbnNlcnRSdWxlKFxuICAgICAgICAgICAgU3R5bGVzTWFuYWdlci5NZWRpYVtzZWxlY3Rvcl0ubWVkaWEgK1xuICAgICAgICAgICAgICBcIiB7IFwiICtcbiAgICAgICAgICAgICAgc2VsZWN0b3IgK1xuICAgICAgICAgICAgICBcIiB7IFwiICtcbiAgICAgICAgICAgICAgU3R5bGVzTWFuYWdlci5NZWRpYVtzZWxlY3Rvcl0uc3R5bGUgK1xuICAgICAgICAgICAgICBcIiB9IH1cIixcbiAgICAgICAgICAgIDBcbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBIZWxwZXJzIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xyXG5pbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHsgUmVuZGVyZXJGYWN0b3J5IH0gZnJvbSBcIi4vcmVuZGVyZXJGYWN0b3J5XCI7XHJcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlXCI7XHJcbmltcG9ydCB7IEFjdGlvbiB9IGZyb20gXCIuL2FjdGlvbnMvYWN0aW9uXCI7XHJcbmltcG9ydCB7IEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyIH0gZnJvbSBcIi4vYWN0aW9ucy9hZGFwdGl2ZS1jb250YWluZXJcIjtcclxuaW1wb3J0IHtcclxuICBJU3VydmV5RWxlbWVudCxcclxuICBJRWxlbWVudCxcclxuICBJUGFnZSxcclxuICBJUGFuZWwsXHJcbiAgSVByb2dyZXNzSW5mbyxcclxuICBJU3VydmV5LFxyXG4gIElTdXJ2ZXlEYXRhLFxyXG4gIElTdXJ2ZXlJbXBsLFxyXG4gIElUZXh0UHJvY2Vzc29yLFxyXG59IGZyb20gXCIuL2Jhc2UtaW50ZXJmYWNlc1wiO1xyXG5pbXBvcnQgeyBTdXJ2ZXlFcnJvciB9IGZyb20gXCIuL3N1cnZleS1lcnJvclwiO1xyXG5cclxuLyoqXHJcbiAqIEJhc2UgY2xhc3Mgb2YgU3VydmV5SlMgRWxlbWVudHMuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgU3VydmV5RWxlbWVudCBleHRlbmRzIEJhc2UgaW1wbGVtZW50cyBJU3VydmV5RWxlbWVudCB7XHJcbiAgc3RhdGVDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0UHJvZ3Jlc3NJbmZvQnlFbGVtZW50cyhcclxuICAgIGNoaWxkcmVuOiBBcnJheTxTdXJ2ZXlFbGVtZW50PixcclxuICAgIGlzUmVxdWlyZWQ6IGJvb2xlYW5cclxuICApOiBJUHJvZ3Jlc3NJbmZvIHtcclxuICAgIHZhciBpbmZvID0gQmFzZS5jcmVhdGVQcm9ncmVzc0luZm8oKTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKCFjaGlsZHJlbltpXS5pc1Zpc2libGUpIGNvbnRpbnVlO1xyXG4gICAgICB2YXIgY2hpbGRJbmZvID0gY2hpbGRyZW5baV0uZ2V0UHJvZ3Jlc3NJbmZvKCk7XHJcbiAgICAgIGluZm8ucXVlc3Rpb25Db3VudCArPSBjaGlsZEluZm8ucXVlc3Rpb25Db3VudDtcclxuICAgICAgaW5mby5hbnN3ZXJlZFF1ZXN0aW9uQ291bnQgKz0gY2hpbGRJbmZvLmFuc3dlcmVkUXVlc3Rpb25Db3VudDtcclxuICAgICAgaW5mby5yZXF1aXJlZFF1ZXN0aW9uQ291bnQgKz0gY2hpbGRJbmZvLnJlcXVpcmVkUXVlc3Rpb25Db3VudDtcclxuICAgICAgaW5mby5yZXF1aXJlZEFuc3dlcmVkUXVlc3Rpb25Db3VudCArPVxyXG4gICAgICAgIGNoaWxkSW5mby5yZXF1aXJlZEFuc3dlcmVkUXVlc3Rpb25Db3VudDtcclxuICAgIH1cclxuICAgIGlmIChpc1JlcXVpcmVkICYmIGluZm8ucXVlc3Rpb25Db3VudCA+IDApIHtcclxuICAgICAgaWYgKGluZm8ucmVxdWlyZWRRdWVzdGlvbkNvdW50ID09IDApIGluZm8ucmVxdWlyZWRRdWVzdGlvbkNvdW50ID0gMTtcclxuICAgICAgaWYgKGluZm8uYW5zd2VyZWRRdWVzdGlvbkNvdW50ID4gMClcclxuICAgICAgICBpbmZvLnJlcXVpcmVkQW5zd2VyZWRRdWVzdGlvbkNvdW50ID0gMTtcclxuICAgIH1cclxuICAgIHJldHVybiBpbmZvO1xyXG4gIH1cclxuICBwcml2YXRlIHN1cnZleUltcGxWYWx1ZTogSVN1cnZleUltcGw7XHJcbiAgcHJpdmF0ZSBzdXJ2ZXlEYXRhVmFsdWU6IElTdXJ2ZXlEYXRhO1xyXG4gIHByaXZhdGUgc3VydmV5VmFsdWU6IElTdXJ2ZXk7XHJcbiAgcHJpdmF0ZSB0ZXh0UHJvY2Vzc29yVmFsdWU6IElUZXh0UHJvY2Vzc29yO1xyXG4gIHByaXZhdGUgc2VsZWN0ZWRFbGVtZW50SW5EZXNpZ25WYWx1ZTogU3VydmV5RWxlbWVudCA9IHRoaXM7XHJcbiAgcHJpdmF0ZSBleHBhbmRBY3Rpb246IEFjdGlvbjtcclxuICBwdWJsaWMgcmVhZE9ubHlDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgU2Nyb2xsRWxlbWVudFRvVG9wKGVsZW1lbnRJZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIWVsZW1lbnRJZCB8fCB0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBmYWxzZTtcclxuICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7XHJcbiAgICBpZiAoIWVsIHx8ICFlbC5zY3JvbGxJbnRvVmlldykgcmV0dXJuIGZhbHNlO1xyXG4gICAgdmFyIGVsZW1Ub3AgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XHJcbiAgICBpZiAoZWxlbVRvcCA8IDApIGVsLnNjcm9sbEludG9WaWV3KCk7XHJcbiAgICByZXR1cm4gZWxlbVRvcCA8IDA7XHJcbiAgfVxyXG4gIHB1YmxpYyBzdGF0aWMgR2V0Rmlyc3ROb25UZXh0RWxlbWVudChcclxuICAgIGVsZW1lbnRzOiBhbnksXHJcbiAgICByZW1vdmVTcGFjZXM6IGJvb2xlYW4gPSBmYWxzZVxyXG4gICkge1xyXG4gICAgaWYgKCFlbGVtZW50cyB8fCAhZWxlbWVudHMubGVuZ3RoIHx8IGVsZW1lbnRzLmxlbmd0aCA9PSAwKSByZXR1cm4gbnVsbDtcclxuICAgIGlmIChyZW1vdmVTcGFjZXMpIHtcclxuICAgICAgdmFyIHRFbCA9IGVsZW1lbnRzWzBdO1xyXG4gICAgICBpZiAodEVsLm5vZGVOYW1lID09PSBcIiN0ZXh0XCIpIHRFbC5kYXRhID0gXCJcIjtcclxuICAgICAgdEVsID0gZWxlbWVudHNbZWxlbWVudHMubGVuZ3RoIC0gMV07XHJcbiAgICAgIGlmICh0RWwubm9kZU5hbWUgPT09IFwiI3RleHRcIikgdEVsLmRhdGEgPSBcIlwiO1xyXG4gICAgfVxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoZWxlbWVudHNbaV0ubm9kZU5hbWUgIT0gXCIjdGV4dFwiICYmIGVsZW1lbnRzW2ldLm5vZGVOYW1lICE9IFwiI2NvbW1lbnRcIilcclxuICAgICAgICByZXR1cm4gZWxlbWVudHNbaV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcbiAgcHVibGljIHN0YXRpYyBGb2N1c0VsZW1lbnQoZWxlbWVudElkOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmICghZWxlbWVudElkIHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGZhbHNlO1xyXG4gICAgdmFyIHJlcyA9IFN1cnZleUVsZW1lbnQuZm9jdXNFbGVtZW50Q29yZShlbGVtZW50SWQpO1xyXG4gICAgaWYgKCFyZXMpIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgU3VydmV5RWxlbWVudC5mb2N1c0VsZW1lbnRDb3JlKGVsZW1lbnRJZCk7XHJcbiAgICAgIH0sIDEwKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXM7XHJcbiAgfVxyXG4gIHByaXZhdGUgc3RhdGljIGZvY3VzRWxlbWVudENvcmUoZWxlbWVudElkOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7XHJcbiAgICBpZiAoZWwpIHtcclxuICAgICAgZWwuZm9jdXMoKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIHB1YmxpYyBzdGF0aWMgQ3JlYXRlRGlzYWJsZWREZXNpZ25FbGVtZW50czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBkaXNhYmxlRGVzaWduQWN0aW9uczogYm9vbGVhbiA9XHJcbiAgICBTdXJ2ZXlFbGVtZW50LkNyZWF0ZURpc2FibGVkRGVzaWduRWxlbWVudHM7XHJcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5uYW1lID0gbmFtZTtcclxuICAgIHRoaXMuY3JlYXRlTmV3QXJyYXkoXCJlcnJvcnNcIik7XHJcbiAgICB0aGlzLmNyZWF0ZU5ld0FycmF5KFwidGl0bGVBY3Rpb25zXCIpO1xyXG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcImlzUmVhZE9ubHlcIiwgKCkgPT4ge1xyXG4gICAgICB0aGlzLm9uUmVhZE9ubHlDaGFuZ2VkKCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJlcnJvcnNcIiwgKCkgPT4ge1xyXG4gICAgICB0aGlzLnVwZGF0ZVZpc2libGVFcnJvcnMoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBwcm90ZWN0ZWQgb25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChuYW1lOiBzdHJpbmcsIG9sZFZhbHVlOiBhbnksIG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgIHN1cGVyLm9uUHJvcGVydHlWYWx1ZUNoYW5nZWQobmFtZSwgb2xkVmFsdWUsIG5ld1ZhbHVlKTtcclxuICAgIGlmIChuYW1lID09PSBcInN0YXRlXCIpIHtcclxuICAgICAgaWYgKG9sZFZhbHVlID09PSBcImRlZmF1bHRcIiB8fCBuZXdWYWx1ZSA9PT0gXCJkZWZhdWx0XCIpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVRpdGxlQWN0aW9ucygpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudXBkYXRlRXhwYW5kQWN0aW9uKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuc3RhdGVDaGFuZ2VkQ2FsbGJhY2spIHRoaXMuc3RhdGVDaGFuZ2VkQ2FsbGJhY2soKTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gXCJjb2xsYXBzZWRcIiB0byByZW5kZXIgb25seSBQYW5lbCB0aXRsZSBhbmQgZXhwYW5kZWQgYnV0dG9uIGFuZCB0byBcImV4cGFuZGVkXCIgdG8gcmVuZGVyIHRoZSBjb2xsYXBzZWQgYnV0dG9uIGluIHRoZSBQYW5lbCBjYXB0aW9uXHJcbiAgICovXHJcbiAgcHVibGljIGdldCBzdGF0ZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInN0YXRlXCIpO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IHN0YXRlKHZhbDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzdGF0ZVwiLCB2YWwpO1xyXG4gICAgdGhpcy5ub3RpZnlTdGF0ZUNoYW5nZWQoKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBub3RpZnlTdGF0ZUNoYW5nZWQoKSB7XHJcbiAgICBpZiAodGhpcy5zdXJ2ZXkpIHtcclxuICAgICAgdGhpcy5zdXJ2ZXkuZWxlbWVudENvbnRlbnRWaXNpYmlsaXR5Q2hhbmdlZCh0aGlzKTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBFbGVtZW50IGlzIGluIHRoZSBjb2xsYXBzZWQgc3RhdGVcclxuICAgKiBAc2VlIHN0YXRlXHJcbiAgICogQHNlZSBjb2xsYXBzZVxyXG4gICAqIEBzZWUgaXNFeHBhbmRlZFxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgaXNDb2xsYXBzZWQoKSB7XHJcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHJldHVybjtcclxuICAgIHJldHVybiB0aGlzLnN0YXRlID09IFwiY29sbGFwc2VkXCI7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgRWxlbWVudCBpcyBpbiB0aGUgZXhwYW5kZWQgc3RhdGVcclxuICAgKiBAc2VlIHN0YXRlXHJcbiAgICogQHNlZSBleHBhbmRcclxuICAgKiBAc2VlIGlzQ29sbGFwc2VkXHJcbiAgICovXHJcbiAgcHVibGljIGdldCBpc0V4cGFuZGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhdGUgPT0gXCJleHBhbmRlZFwiO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDb2xsYXBzZSB0aGUgRWxlbWVudFxyXG4gICAqIEBzZWUgc3RhdGVcclxuICAgKi9cclxuICBwdWJsaWMgY29sbGFwc2UoKSB7XHJcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHJldHVybjtcclxuICAgIHRoaXMuc3RhdGUgPSBcImNvbGxhcHNlZFwiO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBFeHBhbmQgdGhlIEVsZW1lbnRcclxuICAgKiBAc2VlIHN0YXRlXHJcbiAgICovXHJcbiAgcHVibGljIGV4cGFuZCgpIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcImV4cGFuZGVkXCI7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFRvZ2dsZSBlbGVtZW50J3Mgc3RhdGVcclxuICAgKiBAc2VlIHN0YXRlXHJcbiAgICovXHJcbiAgcHVibGljIHRvZ2dsZVN0YXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuaXNDb2xsYXBzZWQpIHtcclxuICAgICAgdGhpcy5leHBhbmQoKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pc0V4cGFuZGVkKSB7XHJcbiAgICAgIHRoaXMuY29sbGFwc2UoKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgaGFzU3RhdGVCdXR0b24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc0V4cGFuZGVkIHx8IHRoaXMuaXNDb2xsYXBzZWQ7XHJcbiAgfVxyXG4gIHByaXZhdGUgdGl0bGVUb29sYmFyVmFsdWU6IEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyO1xyXG4gIHB1YmxpYyBnZXRUaXRsZVRvb2xiYXIoKTogQWRhcHRpdmVBY3Rpb25Db250YWluZXIge1xyXG4gICAgaWYgKCF0aGlzLnRpdGxlVG9vbGJhclZhbHVlKSB7XHJcbiAgICAgIHRoaXMudGl0bGVUb29sYmFyVmFsdWUgPSBuZXcgQWRhcHRpdmVBY3Rpb25Db250YWluZXIoKTtcclxuICAgICAgdGhpcy50aXRsZVRvb2xiYXJWYWx1ZS5zZXRJdGVtcyh0aGlzLmdldFRpdGxlQWN0aW9ucygpKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLnRpdGxlVG9vbGJhclZhbHVlO1xyXG4gIH1cclxuICBwcml2YXRlIHVwZGF0ZUV4cGFuZEFjdGlvbigpIHtcclxuICAgIGlmICghIXRoaXMuZXhwYW5kQWN0aW9uKSB7XHJcbiAgICAgIHRoaXMuZXhwYW5kQWN0aW9uLnZpc2libGUgPSB0aGlzLmlzRXhwYW5kZWQgfHwgdGhpcy5pc0NvbGxhcHNlZDtcclxuICAgICAgdGhpcy5leHBhbmRBY3Rpb24uaW5uZXJDc3MgPVxyXG4gICAgICAgIFwic3YtZXhwYW5kLWFjdGlvblwiICtcclxuICAgICAgICAodGhpcy5pc0V4cGFuZGVkID8gXCIgc3YtZXhwYW5kLWFjdGlvbi0tZXhwYW5kZWRcIiA6IFwiXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwdWJsaWMgZ2V0IHRpdGxlQWN0aW9ucygpOiBBcnJheTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ0aXRsZUFjdGlvbnNcIik7XHJcbiAgfVxyXG4gIHByaXZhdGUgaXNUaXRsZUFjdGlvblJlcXVlc3RlZDogYm9vbGVhbjtcclxuICBwdWJsaWMgZ2V0VGl0bGVBY3Rpb25zKCk6IEFycmF5PGFueT4ge1xyXG4gICAgaWYgKCF0aGlzLmlzVGl0bGVBY3Rpb25SZXF1ZXN0ZWQpIHtcclxuICAgICAgdGhpcy51cGRhdGVUaXRsZUFjdGlvbnMoKTtcclxuICAgICAgdGhpcy5pc1RpdGxlQWN0aW9uUmVxdWVzdGVkID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLnRpdGxlQWN0aW9ucztcclxuICB9XHJcbiAgcHJpdmF0ZSB1cGRhdGVUaXRsZUFjdGlvbnMoKSB7XHJcbiAgICB2YXIgYWN0aW9ucyA9IFtdO1xyXG4gICAgaWYgKHRoaXMuaGFzU3RhdGVCdXR0b24gJiYgIXRoaXMuZXhwYW5kQWN0aW9uKSB7XHJcbiAgICAgIHRoaXMuZXhwYW5kQWN0aW9uID0gbmV3IEFjdGlvbih7XHJcbiAgICAgICAgaWQ6IFwiZXhwYW5kLWNvbGxhcHNlLWFjdGlvblwiLFxyXG4gICAgICAgIHRpdGxlOiBcIlwiLFxyXG4gICAgICAgIGRpc2FibGVUYWJTdG9wOiB0cnVlLFxyXG4gICAgICAgIGFjdGlvbjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy50b2dnbGVTdGF0ZSgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKCEhdGhpcy5leHBhbmRBY3Rpb24pIHtcclxuICAgICAgYWN0aW9ucy5wdXNoKHRoaXMuZXhwYW5kQWN0aW9uKTtcclxuICAgIH1cclxuICAgIGlmICghIXRoaXMuc3VydmV5KSB7XHJcbiAgICAgIGFjdGlvbnMgPSB0aGlzLnN1cnZleS5nZXRVcGRhdGVkRWxlbWVudFRpdGxlQWN0aW9ucyh0aGlzLCBhY3Rpb25zKTtcclxuICAgIH1cclxuICAgIHRoaXMudXBkYXRlRXhwYW5kQWN0aW9uKCk7XHJcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ0aXRsZUFjdGlvbnNcIiwgYWN0aW9ucyk7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgaGFzVGl0bGVBY3Rpb25zKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0VGl0bGVBY3Rpb25zKCkubGVuZ3RoID4gMDtcclxuICB9XHJcbiAgcHVibGljIGdldFRpdGxlQ29tcG9uZW50TmFtZSgpOiBzdHJpbmcge1xyXG4gICAgdmFyIGNvbXBvbmVudE5hbWUgPSBSZW5kZXJlckZhY3RvcnkuSW5zdGFuY2UuZ2V0UmVuZGVyZXIoXHJcbiAgICAgIFwiZWxlbWVudFwiLFxyXG4gICAgICBcInRpdGxlLWFjdGlvbnNcIlxyXG4gICAgKTtcclxuICAgIGlmIChjb21wb25lbnROYW1lID09IFwiZGVmYXVsdFwiKSB7XHJcbiAgICAgIHJldHVybiBcInN2LWRlZmF1bHQtdGl0bGVcIjtcclxuICAgIH1cclxuICAgIHJldHVybiBjb21wb25lbnROYW1lO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IHRpdGxlVGFiSW5kZXgoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnN0YXRlICE9PSBcImRlZmF1bHRcIiA/IDAgOiB1bmRlZmluZWQ7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgdGl0bGVBcmlhRXhwYW5kZWQoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gXCJkZWZhdWx0XCIpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZSA9PT0gXCJleHBhbmRlZFwiO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0U3VydmV5SW1wbCh2YWx1ZTogSVN1cnZleUltcGwpIHtcclxuICAgIHRoaXMuc3VydmV5SW1wbFZhbHVlID0gdmFsdWU7XHJcbiAgICBpZiAoIXRoaXMuc3VydmV5SW1wbFZhbHVlKSB7XHJcbiAgICAgIHRoaXMuc2V0U3VydmV5Q29yZShudWxsKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc3VydmV5RGF0YVZhbHVlID0gdGhpcy5zdXJ2ZXlJbXBsVmFsdWUuZ2V0U3VydmV5RGF0YSgpO1xyXG4gICAgICB0aGlzLnNldFN1cnZleUNvcmUodGhpcy5zdXJ2ZXlJbXBsVmFsdWUuZ2V0U3VydmV5KCkpO1xyXG4gICAgICB0aGlzLnRleHRQcm9jZXNzb3JWYWx1ZSA9IHRoaXMuc3VydmV5SW1wbFZhbHVlLmdldFRleHRQcm9jZXNzb3IoKTtcclxuICAgICAgdGhpcy5vblNldERhdGEoKTtcclxuICAgIH1cclxuICB9XHJcbiAgcHJvdGVjdGVkIGdldCBzdXJ2ZXlJbXBsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3VydmV5SW1wbFZhbHVlO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGRhdGEoKTogSVN1cnZleURhdGEge1xyXG4gICAgcmV0dXJuIHRoaXMuc3VydmV5RGF0YVZhbHVlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBzdXJ2ZXkgb2JqZWN0LlxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgc3VydmV5KCk6IElTdXJ2ZXkge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0U3VydmV5KCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXRTdXJ2ZXkobGl2ZTogYm9vbGVhbiA9IGZhbHNlKTogSVN1cnZleSB7XHJcbiAgICBpZiAoISF0aGlzLnN1cnZleVZhbHVlKSByZXR1cm4gdGhpcy5zdXJ2ZXlWYWx1ZTtcclxuICAgIGlmICghIXRoaXMuc3VydmV5SW1wbFZhbHVlKSB7XHJcbiAgICAgIHRoaXMuc2V0U3VydmV5Q29yZSh0aGlzLnN1cnZleUltcGxWYWx1ZS5nZXRTdXJ2ZXkoKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXlWYWx1ZTtcclxuICB9XHJcbiAgcHJvdGVjdGVkIHNldFN1cnZleUNvcmUodmFsdWU6IElTdXJ2ZXkpIHtcclxuICAgIHRoaXMuc3VydmV5VmFsdWUgPSB2YWx1ZTtcclxuICAgIGlmICghIXRoaXMuc3VydmV5Q2hhbmdlZENhbGxiYWNrKSB7XHJcbiAgICAgIHRoaXMuc3VydmV5Q2hhbmdlZENhbGxiYWNrKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcXVlc3Rpb24gaW4gZGVzaWduIG1vZGUgcmlnaHQgbm93LlxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgaXNEZXNpZ25Nb2RlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhdGhpcy5zdXJ2ZXkgJiYgdGhpcy5zdXJ2ZXkuaXNEZXNpZ25Nb2RlO1xyXG4gIH1cclxuICBwdWJsaWMgaXNDb250ZW50RWxlbWVudDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc0VkaXRhYmxlVGVtcGxhdGVFbGVtZW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGlzSW50ZXJhY3RpdmVEZXNpZ25FbGVtZW50OiBib29sZWFuID0gdHJ1ZTtcclxuICBwcm90ZWN0ZWQgZ2V0IGlzSW50ZXJuYWwoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc0NvbnRlbnRFbGVtZW50O1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGFyZUludmlzaWJsZUVsZW1lbnRzU2hvd2luZygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICEhdGhpcy5zdXJ2ZXkgJiZcclxuICAgICAgdGhpcy5zdXJ2ZXkuYXJlSW52aXNpYmxlRWxlbWVudHNTaG93aW5nICYmXHJcbiAgICAgICF0aGlzLmlzQ29udGVudEVsZW1lbnRcclxuICAgICk7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgaXNWaXNpYmxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgaXNSZWFkT25seSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0IGl0IHRvIHRydWUgdG8gbWFrZSBhbiBlbGVtZW50IHF1ZXN0aW9uL3BhbmVsL3BhZ2UgcmVhZG9ubHkuXHJcbiAgICogUGxlYXNlIG5vdGUsIHRoaXMgcHJvcGVydHkgaXMgaGlkZGVuIGZvciBxdWVzdGlvbiB3aXRob3V0IGlucHV0LCBmb3IgZXhhbXBsZSBodG1sIHF1ZXN0aW9uLlxyXG4gICAqIEBzZWUgZW5hYmxlSWZcclxuICAgKiBAc2VlIGlzUmVhZE9ubHlcclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IHJlYWRPbmx5KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJlYWRPbmx5XCIsIGZhbHNlKTtcclxuICB9XHJcbiAgcHVibGljIHNldCByZWFkT25seSh2YWw6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLnJlYWRPbmx5ID09IHZhbCkgcmV0dXJuO1xyXG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicmVhZE9ubHlcIiwgdmFsKTtcclxuICAgIGlmICghdGhpcy5pc0xvYWRpbmdGcm9tSnNvbikge1xyXG4gICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc1JlYWRPbmx5XCIsIHRoaXMuaXNSZWFkT25seSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByb3RlY3RlZCBvblJlYWRPbmx5Q2hhbmdlZCgpIHtcclxuICAgIGlmICghIXRoaXMucmVhZE9ubHlDaGFuZ2VkQ2FsbGJhY2spIHtcclxuICAgICAgdGhpcy5yZWFkT25seUNoYW5nZWRDYWxsYmFjaygpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwdWJsaWMgdXBkYXRlRWxlbWVudENzcyhyZU5ldz86IGJvb2xlYW4pIHt9XHJcbiAgcHJvdGVjdGVkIGdldElzTG9hZGluZ0Zyb21Kc29uKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHN1cGVyLmdldElzTG9hZGluZ0Zyb21Kc29uKCkpIHJldHVybiB0cnVlO1xyXG4gICAgcmV0dXJuIHRoaXMuc3VydmV5ID8gdGhpcy5zdXJ2ZXkuaXNMb2FkaW5nRnJvbUpzb24gOiBmYWxzZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogVGhpcyBpcyB0aGUgaWRlbnRpZmllciBvZiBhIHN1cnZleSBlbGVtZW50IC0gcXVlc3Rpb24gb3IgcGFuZWwuXHJcbiAgICogQHNlZSB2YWx1ZU5hbWVcclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJuYW1lXCIsIFwiXCIpO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IG5hbWUodmFsOiBzdHJpbmcpIHtcclxuICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMubmFtZTtcclxuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm5hbWVcIiwgdGhpcy5nZXRWYWxpZE5hbWUodmFsKSk7XHJcbiAgICBpZiAoIXRoaXMuaXNMb2FkaW5nRnJvbUpzb24gJiYgISFvbGRWYWx1ZSkge1xyXG4gICAgICB0aGlzLm9uTmFtZUNoYW5nZWQob2xkVmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcm90ZWN0ZWQgZ2V0VmFsaWROYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gbmFtZTtcclxuICB9XHJcbiAgcHJvdGVjdGVkIG9uTmFtZUNoYW5nZWQob2xkVmFsdWU6IHN0cmluZykge31cclxuICBwcm90ZWN0ZWQgdXBkYXRlQmluZGluZ1ZhbHVlKHZhbHVlTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XHJcbiAgICBpZiAoXHJcbiAgICAgICEhdGhpcy5kYXRhICYmXHJcbiAgICAgICFIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHModmFsdWUsIHRoaXMuZGF0YS5nZXRWYWx1ZSh2YWx1ZU5hbWUpKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZGF0YS5zZXRWYWx1ZSh2YWx1ZU5hbWUsIHZhbHVlLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFRoZSBsaXN0IG9mIGVycm9ycy4gSXQgaXMgY3JlYXRlZCBieSBjYWxsaWcgaGFzRXJyb3JzIGZ1bmN0aW9uc1xyXG4gICAqIEBzZWUgaGFzRXJyb3JzXHJcbiAgICovXHJcbiAgcHVibGljIGdldCBlcnJvcnMoKTogQXJyYXk8U3VydmV5RXJyb3I+IHtcclxuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJlcnJvcnNcIik7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgZXJyb3JzKHZhbDogQXJyYXk8U3VydmV5RXJyb3I+KSB7XHJcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJlcnJvcnNcIiwgdmFsKTtcclxuICB9XHJcbiAgQHByb3BlcnR5KHsgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KSBoYXNWaXNpYmxlRXJyb3JzOiBib29sZWFuO1xyXG4gIHByaXZhdGUgdXBkYXRlVmlzaWJsZUVycm9ycygpIHtcclxuICAgIHZhciBjb3VudGVyID0gMDtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lcnJvcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKHRoaXMuZXJyb3JzW2ldLnZpc2libGUpIGNvdW50ZXIrKztcclxuICAgIH1cclxuICAgIHRoaXMuaGFzVmlzaWJsZUVycm9ycyA9IGNvdW50ZXIgPiAwO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRydWUgaWYgYSBxdWVzdGlvbiBvciBhIGNvbnRhaW5lciAocGFuZWwvcGFnZSkgb3IgdGhlaXIgY2hpZHJlbiBoYXZlIGFuIGVycm9yLlxyXG4gICAqIFRoZSB2YWx1ZSBjYW4gYmUgb3V0IG9mIGRhdGUuIGhhc0Vycm9ycyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHRvIGdldCB0aGUgY29ycmVjdCB2YWx1ZS5cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IGNvbnRhaW5zRXJyb3JzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNvbnRhaW5zRXJyb3JzXCIsIGZhbHNlKTtcclxuICB9XHJcbiAgcHVibGljIHVwZGF0ZUNvbnRhaW5zRXJyb3JzKCkge1xyXG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY29udGFpbnNFcnJvcnNcIiwgdGhpcy5nZXRDb250YWluc0Vycm9ycygpKTtcclxuICB9XHJcbiAgcHJvdGVjdGVkIGdldENvbnRhaW5zRXJyb3JzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZXJyb3JzLmxlbmd0aCA+IDA7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXRFbGVtZW50c0luRGVzaWduKGluY2x1ZGVIaWRkZW46IGJvb2xlYW4gPSBmYWxzZSk6IEFycmF5PElFbGVtZW50PiB7XHJcbiAgICByZXR1cm4gW107XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRFbGVtZW50SW5EZXNpZ24oKTogU3VydmV5RWxlbWVudCB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEVsZW1lbnRJbkRlc2lnblZhbHVlO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IHNlbGVjdGVkRWxlbWVudEluRGVzaWduKHZhbDogU3VydmV5RWxlbWVudCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRJbkRlc2lnblZhbHVlID0gdmFsO1xyXG4gIH1cclxuICBwdWJsaWMgdXBkYXRlQ3VzdG9tV2lkZ2V0cygpIHt9XHJcblxyXG4gIHB1YmxpYyBvblN1cnZleUxvYWQoKSB7fVxyXG4gIHB1YmxpYyBvbkZpcnN0UmVuZGVyaW5nKCkge31cclxuICBlbmRMb2FkaW5nRnJvbUpzb24oKSB7XHJcbiAgICBzdXBlci5lbmRMb2FkaW5nRnJvbUpzb24oKTtcclxuICAgIGlmICghdGhpcy5zdXJ2ZXkpIHtcclxuICAgICAgdGhpcy5vblN1cnZleUxvYWQoKTtcclxuICAgIH1cclxuICB9XHJcbiAgcHVibGljIHNldFZpc2libGVJbmRleChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAwO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRydWUgaWYgaXQgaXMgYSBwYWdlLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgaXNQYWdlKCkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRydWUgaWYgaXQgaXMgYSBwYW5lbC5cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IGlzUGFuZWwoKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBpdCBpcyBhIHF1ZXN0aW9uLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgaXNRdWVzdGlvbigpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgcHVibGljIGRlbGV0ZSgpIHt9XHJcbiAgcHJvdGVjdGVkIHJlbW92ZVNlbGZGcm9tTGlzdChsaXN0OiBBcnJheTxhbnk+KSB7XHJcbiAgICBpZiAoIWxpc3QgfHwgIUFycmF5LmlzQXJyYXkobGlzdCkpIHJldHVybjtcclxuICAgIHZhciBpbmRleCA9IGxpc3QuaW5kZXhPZih0aGlzKTtcclxuICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgIGxpc3Quc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIH1cclxuICB9XHJcbiAgcHJvdGVjdGVkIGdldCB0ZXh0UHJvY2Vzc29yKCk6IElUZXh0UHJvY2Vzc29yIHtcclxuICAgIHJldHVybiB0aGlzLnRleHRQcm9jZXNzb3JWYWx1ZTtcclxuICB9XHJcbiAgcHJvdGVjdGVkIGdldFByb2Nlc3NlZEh0bWwoaHRtbDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICghaHRtbCB8fCAhdGhpcy50ZXh0UHJvY2Vzc29yKSByZXR1cm4gaHRtbDtcclxuICAgIHJldHVybiB0aGlzLnRleHRQcm9jZXNzb3IucHJvY2Vzc1RleHQoaHRtbCwgdHJ1ZSk7XHJcbiAgfVxyXG4gIHByb3RlY3RlZCBvblNldERhdGEoKSB7fVxyXG4gIHB1YmxpYyBnZXQgcGFyZW50KCk6IElQYW5lbCB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicGFyZW50XCIsIG51bGwpO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IHBhcmVudCh2YWw6IElQYW5lbCkge1xyXG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicGFyZW50XCIsIHZhbCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0UGFnZShwYXJlbnQ6IElQYW5lbCk6IElQYWdlIHtcclxuICAgIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50LnBhcmVudCkgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcclxuICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LmdldFR5cGUoKSA9PSBcInBhZ2VcIikgcmV0dXJuIDxJUGFnZT4oPGFueT5wYXJlbnQpO1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG4gIHByb3RlY3RlZCBtb3ZlVG9CYXNlKFxyXG4gICAgcGFyZW50OiBJUGFuZWwsXHJcbiAgICBjb250YWluZXI6IElQYW5lbCxcclxuICAgIGluc2VydEJlZm9yZTogYW55ID0gbnVsbFxyXG4gICk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFjb250YWluZXIpIHJldHVybiBmYWxzZTtcclxuICAgIHBhcmVudC5yZW1vdmVFbGVtZW50KDxJRWxlbWVudD4oPGFueT50aGlzKSk7XHJcbiAgICB2YXIgaW5kZXggPSAtMTtcclxuICAgIGlmIChIZWxwZXJzLmlzTnVtYmVyKGluc2VydEJlZm9yZSkpIHtcclxuICAgICAgaW5kZXggPSBwYXJzZUludChpbnNlcnRCZWZvcmUpO1xyXG4gICAgfVxyXG4gICAgaWYgKGluZGV4ID09IC0xICYmICEhaW5zZXJ0QmVmb3JlICYmICEhaW5zZXJ0QmVmb3JlLmdldFR5cGUpIHtcclxuICAgICAgaW5kZXggPSBjb250YWluZXIuaW5kZXhPZihpbnNlcnRCZWZvcmUpO1xyXG4gICAgfVxyXG4gICAgY29udGFpbmVyLmFkZEVsZW1lbnQoPElFbGVtZW50Pig8YW55PnRoaXMpLCBpbmRleCk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBzZXRQYWdlKHBhcmVudDogSVBhbmVsLCB2YWw6IElQYWdlKSB7XHJcbiAgICB2YXIgb2xkUGFnZSA9IHRoaXMuZ2V0UGFnZShwYXJlbnQpO1xyXG4gICAgaWYgKG9sZFBhZ2UgPT09IHZhbCkgcmV0dXJuO1xyXG4gICAgaWYgKHBhcmVudCkgcGFyZW50LnJlbW92ZUVsZW1lbnQoPElFbGVtZW50Pig8YW55PnRoaXMpKTtcclxuICAgIGlmICh2YWwpIHtcclxuICAgICAgdmFsLmFkZEVsZW1lbnQoPElFbGVtZW50Pig8YW55PnRoaXMpLCAtMSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByb3RlY3RlZCBnZXRTZWFyY2hhYmxlTG9jS2V5cyhrZXlzOiBBcnJheTxzdHJpbmc+KSB7XHJcbiAgICBrZXlzLnB1c2goXCJ0aXRsZVwiKTtcclxuICAgIGtleXMucHVzaChcImRlc2NyaXB0aW9uXCIpO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBJU3VydmV5RXJyb3JPd25lciB9IGZyb20gXCIuL2Jhc2UtaW50ZXJmYWNlc1wiO1xyXG5pbXBvcnQgeyBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5RXJyb3Ige1xyXG4gIHByaXZhdGUgbG9jVGV4dFZhbHVlOiBMb2NhbGl6YWJsZVN0cmluZztcclxuICBwdWJsaWMgdmlzaWJsZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgdGV4dDogc3RyaW5nID0gbnVsbCxcclxuICAgIHByb3RlY3RlZCBlcnJvck93bmVyOiBJU3VydmV5RXJyb3JPd25lciA9IG51bGxcclxuICApIHt9XHJcbiAgcHVibGljIGdldCBsb2NUZXh0KCkge1xyXG4gICAgaWYgKCF0aGlzLmxvY1RleHRWYWx1ZSkge1xyXG4gICAgICB0aGlzLmxvY1RleHRWYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzLmVycm9yT3duZXIsIHRydWUpO1xyXG4gICAgICB0aGlzLmxvY1RleHRWYWx1ZS50ZXh0ID0gdGhpcy5nZXRUZXh0KCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5sb2NUZXh0VmFsdWU7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXRUZXh0KCk6IHN0cmluZyB7XHJcbiAgICB2YXIgcmVzID0gdGhpcy50ZXh0O1xyXG4gICAgaWYgKCFyZXMpIHJlcyA9IHRoaXMuZ2V0RGVmYXVsdFRleHQoKTtcclxuICAgIGlmICghIXRoaXMuZXJyb3JPd25lcikge1xyXG4gICAgICByZXMgPSB0aGlzLmVycm9yT3duZXIuZ2V0RXJyb3JDdXN0b21UZXh0KHJlcywgdGhpcyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0RXJyb3JUeXBlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gXCJiYXNlXCI7XHJcbiAgfVxyXG4gIHByb3RlY3RlZCBnZXREZWZhdWx0VGV4dCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIFwiXCI7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IEhhc2hUYWJsZSwgSGVscGVycyB9IGZyb20gXCIuL2hlbHBlcnNcIjtcbmltcG9ydCB7IEpzb25PYmplY3QsIEpzb25FcnJvciwgU2VyaWFsaXplciwgcHJvcGVydHkgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBCYXNlLCBFdmVudEJhc2UgfSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQge1xuICBJU3VydmV5LFxuICBJU3VydmV5RGF0YSxcbiAgSVN1cnZleUltcGwsXG4gIElUZXh0UHJvY2Vzc29yLFxuICBJUXVlc3Rpb24sXG4gIElQYW5lbCxcbiAgSUVsZW1lbnQsXG4gIElQYWdlLFxuICBJU3VydmV5RXJyb3JPd25lcixcbiAgSVN1cnZleUVsZW1lbnQsXG4gIElQcm9ncmVzc0luZm8sXG4gIElGaW5kRWxlbWVudCxcbn0gZnJvbSBcIi4vYmFzZS1pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50IH0gZnJvbSBcIi4vc3VydmV5LWVsZW1lbnRcIjtcbmltcG9ydCB7IHN1cnZleUNzcyB9IGZyb20gXCIuL2RlZmF1bHRDc3MvY3Nzc3RhbmRhcmRcIjtcbmltcG9ydCB7IElTdXJ2ZXlUcmlnZ2VyT3duZXIsIFN1cnZleVRyaWdnZXIgfSBmcm9tIFwiLi90cmlnZ2VyXCI7XG5pbXBvcnQgeyBDYWxjdWxhdGVkVmFsdWUgfSBmcm9tIFwiLi9jYWxjdWxhdGVkVmFsdWVcIjtcbmltcG9ydCB7IFBhZ2VNb2RlbCB9IGZyb20gXCIuL3BhZ2VcIjtcbmltcG9ydCB7IFRleHRQcmVQcm9jZXNzb3IsIFRleHRQcmVQcm9jZXNzb3JWYWx1ZSB9IGZyb20gXCIuL3RleHRQcmVQcm9jZXNzb3JcIjtcbmltcG9ydCB7IFByb2Nlc3NWYWx1ZSB9IGZyb20gXCIuL2NvbmRpdGlvblByb2Nlc3NWYWx1ZVwiO1xuaW1wb3J0IHsgZHhTdXJ2ZXlTZXJ2aWNlIH0gZnJvbSBcIi4vZHhTdXJ2ZXlTZXJ2aWNlXCI7XG5pbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XG5pbXBvcnQgeyBDdXN0b21FcnJvciB9IGZyb20gXCIuL2Vycm9yXCI7XG5pbXBvcnQgeyBJTG9jYWxpemFibGVPd25lciwgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuaW1wb3J0IHsgU3R5bGVzTWFuYWdlciB9IGZyb20gXCIuL3N0eWxlc21hbmFnZXJcIjtcbmltcG9ydCB7IFN1cnZleVRpbWVyIH0gZnJvbSBcIi4vc3VydmV5dGltZXJcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IFF1ZXN0aW9uU2VsZWN0QmFzZSB9IGZyb20gXCIuL3F1ZXN0aW9uX2Jhc2VzZWxlY3RcIjtcbmltcG9ydCB7IEl0ZW1WYWx1ZSB9IGZyb20gXCIuL2l0ZW12YWx1ZVwiO1xuaW1wb3J0IHsgUGFuZWxNb2RlbEJhc2UsIFF1ZXN0aW9uUm93TW9kZWwgfSBmcm9tIFwiLi9wYW5lbFwiO1xuaW1wb3J0IHtcbiAgSHRtbENvbmRpdGlvbkl0ZW0sXG4gIFVybENvbmRpdGlvbkl0ZW0sXG4gIEV4cHJlc3Npb25JdGVtLFxufSBmcm9tIFwiLi9leHByZXNzaW9uSXRlbXNcIjtcbmltcG9ydCB7IEV4cHJlc3Npb25SdW5uZXIsIENvbmRpdGlvblJ1bm5lciB9IGZyb20gXCIuL2NvbmRpdGlvbnNcIjtcbmltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcbmltcG9ydCB7IGdldFNpemUsIGlzTW9iaWxlLCBzY3JvbGxFbGVtZW50QnlDaGlsZElkIH0gZnJvbSBcIi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IFN1cnZleUVycm9yIH0gZnJvbSBcIi4vc3VydmV5LWVycm9yXCI7XG5pbXBvcnQgeyBJQWN0aW9uIH0gZnJvbSBcIi4vYWN0aW9ucy9hY3Rpb25cIjtcblxuLyoqXG4gKiBUaGUgYFN1cnZleWAgb2JqZWN0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdXJ2ZXksIFBhZ2VzLCBRdWVzdGlvbnMsIGZsb3cgbG9naWMgYW5kIGV0Yy5cbiAqL1xuZXhwb3J0IGNsYXNzIFN1cnZleU1vZGVsIGV4dGVuZHMgQmFzZVxuICBpbXBsZW1lbnRzXG4gICAgSVN1cnZleSxcbiAgICBJU3VydmV5RGF0YSxcbiAgICBJU3VydmV5SW1wbCxcbiAgICBJU3VydmV5VHJpZ2dlck93bmVyLFxuICAgIElTdXJ2ZXlFcnJvck93bmVyLFxuICAgIElMb2NhbGl6YWJsZU93bmVyIHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBUZW1wbGF0ZVJlbmRlcmVyQ29tcG9uZW50TmFtZTogc3RyaW5nID1cbiAgICBcInN2LXRlbXBsYXRlLXJlbmRlcmVyXCI7XG4gIFtpbmRleDogc3RyaW5nXTogYW55O1xuICBwcml2YXRlIHN0YXRpYyBzdHlsZXNNYW5hZ2VyOiBTdHlsZXNNYW5hZ2VyID0gbnVsbDtcbiAgcHVibGljIHN0YXRpYyBwbGF0Zm9ybTogc3RyaW5nID0gXCJ1bmtub3duXCI7XG4gIHB1YmxpYyBnZXQgcGxhdGZvcm1OYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFN1cnZleU1vZGVsLnBsYXRmb3JtO1xuICB9XG4gIC8qKlxuICAgKiBZb3UgY2FuIGRpc3BsYXkgYW4gYWRkaXRpb25hbCBmaWVsZCAoY29tbWVudCBmaWVsZCkgZm9yIHRoZSBtb3N0IG9mIHF1ZXN0aW9uczsgdXNlcnMgY2FuIGVudGVyIGFkZGl0aW9uYWwgY29tbWVudHMgdG8gdGhlaXIgcmVzcG9uc2UuXG4gICAqIFRoZSBjb21tZW50IGZpZWxkIGlucHV0IGlzIHNhdmVkIGFzIGAncXVlc3Rpb24gbmFtZScgKyAnY29tbWVudFByZWZpeCdgLlxuICAgKiBAc2VlIGRhdGFcbiAgICogQHNlZSBRdWVzdGlvbi5oYXNDb21tZW50XG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbW1lbnRQcmVmaXgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc2V0dGluZ3MuY29tbWVudFByZWZpeDtcbiAgfVxuICBwdWJsaWMgc2V0IGNvbW1lbnRQcmVmaXgodmFsOiBzdHJpbmcpIHtcbiAgICBzZXR0aW5ncy5jb21tZW50UHJlZml4ID0gdmFsO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgY3VycmVudFBhZ2VWYWx1ZSgpOiBQYWdlTW9kZWwge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjdXJyZW50UGFnZVZhbHVlXCIsIG51bGwpO1xuICB9XG4gIHByaXZhdGUgc2V0IGN1cnJlbnRQYWdlVmFsdWUodmFsOiBQYWdlTW9kZWwpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjdXJyZW50UGFnZVZhbHVlXCIsIHZhbCk7XG4gIH1cblxuICBwcml2YXRlIHZhbHVlc0hhc2g6IEhhc2hUYWJsZTxhbnk+ID0ge307XG4gIHByaXZhdGUgdmFyaWFibGVzSGFzaDogSGFzaFRhYmxlPGFueT4gPSB7fTtcbiAgcHJpdmF0ZSBlZGl0aW5nT2JqVmFsdWU6IEJhc2U7XG5cbiAgcHJpdmF0ZSBsb2NhbGVWYWx1ZTogc3RyaW5nID0gXCJcIjtcblxuICBwcml2YXRlIHRleHRQcmVQcm9jZXNzb3I6IFRleHRQcmVQcm9jZXNzb3I7XG4gIHByaXZhdGUgY29tcGxldGVkU3RhdGVWYWx1ZTogc3RyaW5nID0gXCJcIjtcbiAgcHJpdmF0ZSBjb21wbGV0ZWRTdGF0ZVRleHRWYWx1ZTogc3RyaW5nID0gXCJcIjtcblxuICBwcml2YXRlIGlzVGltZXJTdGFydGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8jcmVnaW9uIEV2ZW50IGRlY2xhcmF0aW9uc1xuXG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgYmVmb3JlIHRoZSBzdXJ2ZXkgaXMgY29tcGxldGVkIGFuZCB0aGUgYG9uQ29tcGxldGVgIGV2ZW50IGlzIGZpcmVkLiBZb3UgY2FuIHByZXZlbnQgdGhlIHN1cnZleSBmcm9tIGNvbXBsZXRpbmcgYnkgc2V0dGluZyBgb3B0aW9ucy5hbGxvd0NvbXBsZXRlYCB0byBgZmFsc2VgXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLmFsbG93Q29tcGxldGVgIC0gU3BlY2lmaWVzIHdoZXRoZXIgYSB1c2VyIGNhbiBjb21wbGV0ZSBhIHN1cnZleS4gU2V0IHRoaXMgcHJvcGVydHkgdG8gYGZhbHNlYCB0byBwcmV2ZW50IHRoZSBzdXJ2ZXkgZnJvbSBjb21wbGV0aW5nLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgdHJ1ZWAuXG4gICAqIDxici8+IGBvcHRpb25zLmlzQ29tcGxldGVPblRyaWdnZXJgIC0gcmV0dXJucyB0cnVlIGlmIHRoZSBzdXJ2ZXkgaXMgY29tcGxldGluZyBvbiBcImNvbXBsZXRlXCIgdHJpZ2dlci5cbiAgICogQHNlZSBvbkNvbXBsZXRlXG4gICAqL1xuICBwdWJsaWMgb25Db21wbGV0aW5nOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxTdXJ2ZXlNb2RlbD4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBhZnRlciBhIHVzZXIgY2xpY2tzIHRoZSAnQ29tcGxldGUnIGJ1dHRvbiBhbmQgZmluaXNoZXMgYSBzdXJ2ZXkuIFVzZSB0aGlzIGV2ZW50IHRvIHNlbmQgdGhlIHN1cnZleSBkYXRhIHRvIHlvdXIgd2ViIHNlcnZlci5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMuc2hvd0RhdGFTYXZpbmcodGV4dClgIC0gY2FsbCB0aGlzIG1ldGhvZCB0byBzaG93IHRoYXQgdGhlIHN1cnZleSBpcyBzYXZpbmcgc3VydmV5IGRhdGEgb24geW91ciBzZXJ2ZXIuIFRoZSBgdGV4dGAgaXMgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRvIHNob3cgYSBjdXN0b20gbWVzc2FnZSBpbnN0ZWFkIG9mIGRlZmF1bHQuXG4gICAqIDxici8+IGBvcHRpb25zLnNob3dEYXRhU2F2aW5nRXJyb3IodGV4dClgIC0gY2FsbCB0aGlzIG1ldGhvZCB0byBzaG93IHRoYXQgYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgc2F2aW5nIHRoZSBkYXRhIG9uIHlvdXIgc2VydmVyLiBJZiB5b3Ugd2FudCB0byBzaG93IGEgY3VzdG9tIGVycm9yLCB1c2UgYW4gb3B0aW9uYWwgYHRleHRgIHBhcmFtZXRlci5cbiAgICogPGJyLz4gYG9wdGlvbnMuc2hvd0RhdGFTYXZpbmdTdWNjZXNzKHRleHQpYCAtIGNhbGwgdGhpcyBtZXRob2QgdG8gc2hvdyB0aGF0IHRoZSBkYXRhIHdhcyBzdWNjZXNzZnVsbHkgc2F2ZWQgb24gdGhlIHNlcnZlci5cbiAgICogPGJyLz4gYG9wdGlvbnMuc2hvd0RhdGFTYXZpbmdDbGVhcmAgLSBjYWxsIHRoaXMgbWV0aG9kIHRvIGhpZGUgdGhlIHRleHQgYWJvdXQgdGhlIHNhdmluZyBwcm9ncmVzcy5cbiAgICogPGJyLz4gYG9wdGlvbnMuaXNDb21wbGV0ZU9uVHJpZ2dlcmAgLSByZXR1cm5zIHRydWUgaWYgdGhlIHN1cnZleSBpcyBjb21wbGV0ZWQgb24gXCJjb21wbGV0ZVwiIHRyaWdnZXIuXG4gICAqICBAc2VlIGRhdGFcbiAgICogQHNlZSBjbGVhckludmlzaWJsZVZhbHVlc1xuICAgKiBAc2VlIGNvbXBsZXRlTGFzdFBhZ2VcbiAgICogQHNlZSBzdXJ2ZXlQb3N0SWRcbiAgICovXG4gIHB1YmxpYyBvbkNvbXBsZXRlOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxTdXJ2ZXlNb2RlbD4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBiZWZvcmUgdGhlIHN1cnZleSBpcyBnb2luZyB0byBwcmV2aWV3IG1vZGUsIHN0YXRlIGVxdWFscyB0byBgcHJldmlld2AuIEl0IGhhcHBlbnMgd2hlbiBhIHVzZXIgY2xpY2sgb24gXCJQcmV2aWV3XCIgYnV0dG9uLiBJdCBzaG93cyB3aGVuIFwic2hvd1ByZXZpZXdCZWZvcmVDb21wbGV0ZVwiIHByb2VwcnR5IGVxdWFscyB0byBcInNob3dBbGxRdWVzdGlvbnNcIiBvciBcInNob3dBbnN3ZXJlZFF1ZXN0aW9uc1wiLlxuICAgKiBZb3UgY2FuIHByZXZlbnQgc2hvd2luZyBpdCBieSBzZXR0aW5nIGFsbG93U2hvd1ByZXZpZXcgdG8gYGZhbHNlYC5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMuYWxsb3dTaG93UHJldmlld2AgLSBTcGVjaWZpZXMgd2hldGhlciBhIHVzZXIgY2FuIHNlZSBhIHByZXZpZXcuIFNldCB0aGlzIHByb3BlcnR5IHRvIGBmYWxzZWAgdG8gcHJldmVudCBmcm9tIHNob3dpbmcgdGhlIHByZXZpZXcuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cbiAgICogQHNlZSBzaG93UHJldmlld0JlZm9yZUNvbXBsZXRlXG4gICAqL1xuICBwdWJsaWMgb25TaG93aW5nUHJldmlldzogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIGFmdGVyIGEgdXNlciBjbGlja3MgdGhlICdDb21wbGV0ZScgYnV0dG9uLiBUaGUgZXZlbnQgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IHRoZSBVUkwgb3BlbmVkIGFmdGVyIGNvbXBsZXRpbmcgYSBzdXJ2ZXkuXG4gICAqIFNwZWNpZnkgdGhlIGBuYXZpZ2F0ZVRvVXJsYCBwcm9wZXJ0eSB0byBtYWtlIHN1cnZleSBuYXZpZ2F0ZSB0byBhbm90aGVyIHVybC5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMudXJsYCAtIFNwZWNpZmllcyBhIFVSTCBvcGVuZWQgYWZ0ZXIgY29tcGxldGluZyBhIHN1cnZleS4gU2V0IHRoaXMgcHJvcGVydHkgdG8gYW4gZW1wdHkgc3RyaW5nIHRvIGNhbmNlbCB0aGUgbmF2aWdhdGlvbiBhbmQgc2hvdyB0aGUgY29tcGxldGVkIHN1cnZleSBwYWdlLlxuICAgKiBAc2VlIG5hdmlnYXRlVG9VcmxcbiAgICogQHNlZSBuYXZpZ2F0ZVRvVXJsT25Db25kaXRpb25cbiAgICovXG4gIHB1YmxpYyBvbk5hdmlnYXRlVG9Vcmw6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFN1cnZleU1vZGVsPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIGFmdGVyIHRoZSBzdXJ2ZXkgY2hhbmdlZCBpdCdzIHN0YXRlIGZyb20gXCJzdGFydGluZ1wiIHRvIFwicnVubmluZ1wiLiBUaGUgXCJzdGFydGluZ1wiIHN0YXRlIG1lYW5zIHRoYXQgc3VydmV5IHNob3dzIHRoZSBzdGFydGVkIHBhZ2UuXG4gICAqIFRoZSBgZmlyc3RQYWdlSXNTdGFydGVkYCBwcm9wZXJ0eSBzaG91bGQgYmUgc2V0IHRvIGB0cnVlYCwgaWYgeW91IHdhbnQgdG8gZGlzcGxheSBhIHN0YXJ0IHBhZ2UgaW4geW91ciBzdXJ2ZXkuIEluIHRoaXMgY2FzZSwgYW4gZW5kIHVzZXIgc2hvdWxkIGNsaWNrIHRoZSBcIlN0YXJ0XCIgYnV0dG9uIHRvIHN0YXJ0IHRoZSBzdXJ2ZXkuXG4gICAqIEBzZWUgZmlyc3RQYWdlSXNTdGFydGVkXG4gICAqL1xuICBwdWJsaWMgb25TdGFydGVkOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxTdXJ2ZXlNb2RlbD4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBvbiBjbGlja2luZyB0aGUgJ05leHQnIGJ1dHRvbiBpZiB0aGUgYHNlbmRSZXN1bHRPblBhZ2VOZXh0YCBpcyBzZXQgdG8gYHRydWVgLiBZb3UgY2FuIHVzZSBpdCB0byBzYXZlIHRoZSBpbnRlcm1lZGlhdGUgcmVzdWx0cywgZm9yIGV4YW1wbGUsIGlmIHlvdXIgc3VydmV5IGlzIGxhcmdlIGVub3VnaC5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogQHNlZSBzZW5kUmVzdWx0T25QYWdlTmV4dFxuICAgKi9cbiAgcHVibGljIG9uUGFydGlhbFNlbmQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFN1cnZleU1vZGVsPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIGJlZm9yZSB0aGUgY3VycmVudCBwYWdlIGNoYW5nZXMgdG8gYW5vdGhlciBwYWdlLiBUeXBpY2FsbHkgaXQgaGFwcGVucyB3aGVuIGEgdXNlciBjbGljayB0aGUgJ05leHQnIG9yICdQcmV2JyBidXR0b25zLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9uLm9sZEN1cnJlbnRQYWdlYCAtIHRoZSBwcmV2aW91cyBjdXJyZW50L2FjdGl2ZSBwYWdlLlxuICAgKiA8YnIvPiBgb3B0aW9uLm5ld0N1cnJlbnRQYWdlYCAtIGEgbmV3IGN1cnJlbnQvYWN0aXZlIHBhZ2UuXG4gICAqIDxici8+IGBvcHRpb24uYWxsb3dDaGFuZ2luZ2AgLSBzZXQgaXQgdG8gYGZhbHNlYCB0byBkaXNhYmxlIHRoZSBjdXJyZW50IHBhZ2UgY2hhbmdpbmcuIEl0IGlzIGB0cnVlYCBieSBkZWZhdWx0LlxuICAgKiA8YnIvPiBgb3B0aW9uLmlzTmV4dFBhZ2VgIC0gY29tbW9ubHkgbWVhbnMsIHRoYXQgZW5kLXVzZXIgcHJlc3MgdGhlIG5leHQgcGFnZSBidXR0b24uIEluIGdlbmVyYWwsIGl0IG1lYW5zIHRoYXQgb3B0aW9ucy5uZXdDdXJyZW50UGFnZSBpcyB0aGUgbmV4dCBwYWdlIGFmdGVyIG9wdGlvbnMub2xkQ3VycmVudFBhZ2VcbiAgICogPGJyLz4gYG9wdGlvbi5pc1ByZXZQYWdlYCAtIGNvbW1vbmx5IG1lYW5zLCB0aGF0IGVuZC11c2VyIHByZXNzIHRoZSBwcmV2aW91cyBwYWdlIGJ1dHRvbi4gSW4gZ2VuZXJhbCwgaXQgbWVhbnMgdGhhdCBvcHRpb25zLm5ld0N1cnJlbnRQYWdlIGlzIHRoZSBwcmV2aW91cyBwYWdlIGJlZm9yZSBvcHRpb25zLm9sZEN1cnJlbnRQYWdlXG4gICAqIEBzZWUgY3VycmVudFBhZ2VcbiAgICogQHNlZSBjdXJyZW50UGFnZU5vXG4gICAqIEBzZWUgbmV4dFBhZ2VcbiAgICogQHNlZSBwcmV2UGFnZVxuICAgKiBAc2VlIGNvbXBsZXRlTGFzdFBhZ2VcbiAgICogQHNlZSBvbkN1cnJlbnRQYWdlQ2hhbmdlZFxuICAgKiovXG4gIHB1YmxpYyBvbkN1cnJlbnRQYWdlQ2hhbmdpbmc6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSBjdXJyZW50IHBhZ2UgaGFzIGJlZW4gY2hhbmdlZCB0byBhbm90aGVyIHBhZ2UuIFR5cGljYWxseSBpdCBoYXBwZW5zIHdoZW4gYSB1c2VyIGNsaWNrIG9uICdOZXh0JyBvciAnUHJldicgYnV0dG9ucy5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbi5vbGRDdXJyZW50UGFnZWAgLSBhIHByZXZpb3VzIGN1cnJlbnQvYWN0aXZlIHBhZ2UuXG4gICAqIDxici8+IGBvcHRpb24ubmV3Q3VycmVudFBhZ2VgIC0gYSBuZXcgY3VycmVudC9hY3RpdmUgcGFnZS5cbiAgICogPGJyLz4gYG9wdGlvbi5pc05leHRQYWdlYCAtIGNvbW1vbmx5IG1lYW5zLCB0aGF0IGVuZC11c2VyIHByZXNzIHRoZSBuZXh0IHBhZ2UgYnV0dG9uLiBJbiBnZW5lcmFsLCBpdCBtZWFucyB0aGF0IG9wdGlvbnMubmV3Q3VycmVudFBhZ2UgaXMgdGhlIG5leHQgcGFnZSBhZnRlciBvcHRpb25zLm9sZEN1cnJlbnRQYWdlXG4gICAqIDxici8+IGBvcHRpb24uaXNQcmV2UGFnZWAgLSBjb21tb25seSBtZWFucywgdGhhdCBlbmQtdXNlciBwcmVzcyB0aGUgcHJldmlvdXMgcGFnZSBidXR0b24uIEluIGdlbmVyYWwsIGl0IG1lYW5zIHRoYXQgb3B0aW9ucy5uZXdDdXJyZW50UGFnZSBpcyB0aGUgcHJldmlvdXMgcGFnZSBiZWZvcmUgb3B0aW9ucy5vbGRDdXJyZW50UGFnZVxuICAgKiBAc2VlIGN1cnJlbnRQYWdlXG4gICAqIEBzZWUgY3VycmVudFBhZ2VOb1xuICAgKiBAc2VlIG5leHRQYWdlXG4gICAqIEBzZWUgcHJldlBhZ2VcbiAgICogQHNlZSBjb21wbGV0ZUxhc3RQYWdlXG4gICAqIEBzZWUgb25DdXJyZW50UGFnZUNoYW5naW5nXG4gICAqL1xuICBwdWJsaWMgb25DdXJyZW50UGFnZUNoYW5nZWQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBiZWZvcmUgdGhlIHF1ZXN0aW9uIHZhbHVlIChhbnN3ZXIpIGlzIGNoYW5nZWQuIEl0IGNhbiBiZSBkb25lIHZpYSBVSSBieSBhIHVzZXIgb3IgcHJvZ3JhbW1hdGljYWxseSBvbiBjYWxsaW5nIHRoZSBgc2V0VmFsdWVgIG1ldGhvZC5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMubmFtZWAgLSB0aGUgdmFsdWUgbmFtZSB0aGF0IGhhcyBiZWluZyBjaGFuZ2VkLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSBhIHF1ZXN0aW9uIHdoaWNoIGBxdWVzdGlvbi5uYW1lYCBlcXVhbHMgdG8gdGhlIHZhbHVlIG5hbWUuIElmIHRoZXJlIGFyZSBzZXZlcmFsIHF1ZXN0aW9ucyB3aXRoIHRoZSBzYW1lIG5hbWUsIHRoZSBmaXJzdCBxdWVzdGlvbiBpcyB1c2VkLiBJZiB0aGVyZSBpcyBubyBzdWNoIHF1ZXN0aW9ucywgdGhlIGBvcHRpb25zLnF1ZXN0aW9uYCBpcyBudWxsLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5vbGRWYWx1ZWAgLSBhbiBvbGQsIHByZXZpb3VzIHZhbHVlLlxuICAgKiA8YnIvPiBgb3B0aW9ucy52YWx1ZWAgLSBhIG5ldyB2YWx1ZS4gWW91IGNhbiBjaGFuZ2UgaXQuXG4gICAqIEBzZWUgc2V0VmFsdWVcbiAgICogQHNlZSBvblZhbHVlQ2hhbmdlZFxuICAgKi9cbiAgcHVibGljIG9uVmFsdWVDaGFuZ2luZzogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8U3VydmV5TW9kZWw+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgcXVlc3Rpb24gdmFsdWUgKGkuZS4sIGFuc3dlcikgaGFzIGJlZW4gY2hhbmdlZC4gVGhlIHF1ZXN0aW9uIHZhbHVlIGNhbiBiZSBjaGFuZ2VkIGluIFVJIChieSBhIHVzZXIpIG9yIHByb2dyYW1tYXRpY2FsbHkgKG9uIGNhbGxpbmcgYHNldFZhbHVlYCBtZXRob2QpLlxuICAgKiBVc2UgdGhlIGBvbkR5bmFtaWNQYW5lbEl0ZW1WYWx1ZUNoYW5nZWRgIGFuZCBgb25NYXRyaXhDZWxsVmFsdWVDaGFuZ2VkYCBldmVudHMgdG8gaGFuZGxlIGNoYW5nZXMgaW4gYSBxdWVzdGlvbiBpbiB0aGUgUGFuZWwgRHluYW1pYyBhbmQgYSBjZWxsIHF1ZXN0aW9uIGluIG1hdHJpY2VzLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5uYW1lYCAtIHRoZSB2YWx1ZSBuYW1lIHRoYXQgaGFzIGJlZW4gY2hhbmdlZC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gYSBxdWVzdGlvbiB3aGljaCBgcXVlc3Rpb24ubmFtZWAgZXF1YWxzIHRvIHRoZSB2YWx1ZSBuYW1lLiBJZiB0aGVyZSBhcmUgc2V2ZXJhbCBxdWVzdGlvbnMgd2l0aCB0aGUgc2FtZSBuYW1lLCB0aGUgZmlyc3QgcXVlc3Rpb24gaXMgdXNlZC4gSWYgdGhlcmUgaXMgbm8gc3VjaCBxdWVzdGlvbnMsIHRoZSBgb3B0aW9ucy5xdWVzdGlvbmAgaXMgYG51bGxgLlxuICAgKiA8YnIvPiBgb3B0aW9ucy52YWx1ZWAgLSBhIG5ldyB2YWx1ZS5cbiAgICogQHNlZSBzZXRWYWx1ZVxuICAgKiBAc2VlIG9uVmFsdWVDaGFuZ2luZ1xuICAgKiBAc2VlIG9uRHluYW1pY1BhbmVsSXRlbVZhbHVlQ2hhbmdlZFxuICAgKiBAc2VlIG9uTWF0cml4Q2VsbFZhbHVlQ2hhbmdlZFxuICAgKi9cbiAgcHVibGljIG9uVmFsdWVDaGFuZ2VkOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxTdXJ2ZXlNb2RlbD4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCB3aGVuIGEgcXVlc3Rpb24gdmlzaWJpbGl0eSBoYXMgYmVlbiBjaGFuZ2VkLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSBhIHF1ZXN0aW9uIHdoaWNoIHZpc2liaWxpdHkgaGFzIGJlZW4gY2hhbmdlZC5cbiAgICogPGJyLz4gYG9wdGlvbnMubmFtZWAgLSBhIHF1ZXN0aW9uIG5hbWUuXG4gICAqIDxici8+IGBvcHRpb25zLnZpc2libGVgIC0gYSBxdWVzdGlvbiBgdmlzaWJsZWAgYm9vbGVhbiB2YWx1ZS5cbiAgICogQHNlZSBRdWVzdGlvbi52aXNpYmlsZVxuICAgKiBAc2VlIFF1ZXN0aW9uLnZpc2liaWxlSWZcbiAgICovXG4gIHB1YmxpYyBvblZpc2libGVDaGFuZ2VkOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgb24gY2hhbmdpbmcgYSBwYWdlIHZpc2liaWxpdHkuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnBhZ2VgIC0gYSBwYWdlIHdoaWNoIHZpc2liaWxpdHkgaGFzIGJlZW4gY2hhbmdlZC5cbiAgICogPGJyLz4gYG9wdGlvbnMudmlzaWJsZWAgLSBhIHBhZ2UgYHZpc2libGVgIGJvb2xlYW4gdmFsdWUuXG4gICAqIEBzZWUgUGFnZU1vZGVsLnZpc2liaWxlXG4gICAqIEBzZWUgUGFnZU1vZGVsLnZpc2liaWxlSWZcbiAgICovXG4gIHB1YmxpYyBvblBhZ2VWaXNpYmxlQ2hhbmdlZDogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIG9uIGNoYW5naW5nIGEgcGFuZWwgdmlzaWJpbGl0eS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucGFuZWxgIC0gYSBwYW5lbCB3aGljaCB2aXNpYmlsaXR5IGhhcyBiZWVuIGNoYW5nZWQuXG4gICAqIDxici8+IGBvcHRpb25zLnZpc2libGVgIC0gYSBwYW5lbCBgdmlzaWJsZWAgYm9vbGVhbiB2YWx1ZS5cbiAgICogQHNlZSBQYW5lbE1vZGVsLnZpc2liaWxlXG4gICAqIEBzZWUgUGFuZWxNb2RlbC52aXNpYmlsZUlmXG4gICAqL1xuICBwdWJsaWMgb25QYW5lbFZpc2libGVDaGFuZ2VkOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgb24gY3JlYXRpbmcgYSBuZXcgcXVlc3Rpb24uXG4gICAqIFVubGlrZSB0aGUgb25RdWVzdGlvbkFkZGVkIGV2ZW50LCB0aGlzIGV2ZW50IGNhbGxzIGZvciBhbGwgcXVlc3Rpb24gY3JlYXRlZCBpbiBzdXJ2ZXkgaW5jbHVkaW5nIGluc2lkZTogYSBwYWdlLCBwYW5lbCwgbWF0cml4IGNlbGwsIGR5bmFtaWMgcGFuZWwgYW5kIG11bHRpcGxlIHRleHQuXG4gICAqIG9yIGluc2lkZSBhIG1hdHJpeCBjZWxsIG9yIGl0IGNhbiBiZSBhIHRleHQgcXVlc3Rpb24gaW4gbXVsdGlwbGUgdGV4dCBpdGVtcyBvciBpbnNpZGUgYSBwYW5lbCBvZiBhIHBhbmVsIGR5bmFtaWMuXG4gICAqIFlvdSBjYW4gdXNlIHRoaXMgZXZlbnQgdG8gc2V0IHVwIHByb3BlcnRpZXMgdG8gYSBxdWVzdGlvbiBiYXNlZCBvbiBpdCdzIHR5cGUgZm9yIGFsbCBxdWVzdGlvbnMsIHJlZ2FyZGxlc3Mgd2hlcmUgdGhleSBhcmUgbG9jYXRlZCwgb24gdGhlIHBhZ2Ugb3IgaW5zaWRlIGEgbWF0cml4IGNlbGwuXG4gICAqIFBsZWFzZSBub3RlOiBJZiB5b3Ugd2FudCB0byB1c2UgdGhpcyBldmVudCBmb3IgcXVlc3Rpb25zIGxvYWRlZCBmcm9tIEpTT04gdGhlbiB5b3UgaGF2ZSB0byBjcmVhdGUgc3VydmV5IHdpdGggZW1wdHkvbnVsbCBKU09OIHBhcmFtZXRlciwgYXNzaWduIHRoZSBldmVudCBhbmQgY2FsbCBzdXJ2ZXkuZnJvbUpTT04oeW91ckpTT04pIGZ1bmN0aW9uLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSBhIG5ld2x5IGNyZWF0ZWQgcXVlc3Rpb24gb2JqZWN0LlxuICAgKiBAc2VlIFF1ZXN0aW9uXG4gICAqIEBzZWUgb25RdWVzdGlvbkFkZGVkXG4gICAqL1xuICBwdWJsaWMgb25RdWVzdGlvbkNyZWF0ZWQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBvbiBhZGRpbmcgYSBuZXcgcXVlc3Rpb24gaW50byBzdXJ2ZXkuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIGEgbmV3bHkgYWRkZWQgcXVlc3Rpb24gb2JqZWN0LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5uYW1lYCAtIGEgcXVlc3Rpb24gbmFtZS5cbiAgICogPGJyLz4gYG9wdGlvbnMuaW5kZXhgIC0gYW4gaW5kZXggb2YgdGhlIHF1ZXN0aW9uIGluIHRoZSBjb250YWluZXIgKHBhZ2Ugb3IgcGFuZWwpLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5wYXJlbnRQYW5lbGAgLSBhIGNvbnRhaW5lciB3aGVyZSBhIG5ldyBxdWVzdGlvbiBpcyBsb2NhdGVkLiBJdCBjYW4gYmUgYSBwYWdlIG9yIHBhbmVsLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5yb290UGFuZWxgIC0gdHlwaWNhbGx5LCBpdCBpcyBhIHBhZ2UuXG4gICAqIEBzZWUgUXVlc3Rpb25cbiAgICogQHNlZSBvblF1ZXN0aW9uQ3JlYXRlZFxuICAgKi9cbiAgcHVibGljIG9uUXVlc3Rpb25BZGRlZDogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8U3VydmV5TW9kZWw+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgb24gcmVtb3ZpbmcgYSBxdWVzdGlvbiBmcm9tIHN1cnZleS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gYSByZW1vdmVkIHF1ZXN0aW9uIG9iamVjdC5cbiAgICogPGJyLz4gYG9wdGlvbnMubmFtZWAgLSBhIHF1ZXN0aW9uIG5hbWUuXG4gICAqIEBzZWUgUXVlc3Rpb25cbiAgICovXG4gIHB1YmxpYyBvblF1ZXN0aW9uUmVtb3ZlZDogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIG9uIGFkZGluZyBhIHBhbmVsIGludG8gc3VydmV5LlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5wYW5lbGAgLSBhIG5ld2x5IGFkZGVkIHBhbmVsIG9iamVjdC5cbiAgICogPGJyLz4gYG9wdGlvbnMubmFtZWAgLSBhIHBhbmVsIG5hbWUuXG4gICAqIDxici8+IGBvcHRpb25zLmluZGV4YCAtIGFuIGluZGV4IG9mIHRoZSBwYW5lbCBpbiB0aGUgY29udGFpbmVyIChhIHBhZ2Ugb3IgcGFuZWwpLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5wYXJlbnRQYW5lbGAgLSBhIGNvbnRhaW5lciAoYSBwYWdlIG9yIHBhbmVsKSB3aGVyZSBhIG5ldyBwYW5lbCBpcyBsb2NhdGVkLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5yb290UGFuZWxgIC0gYSByb290IGNvbnRhaW5lciwgdHlwaWNhbGx5IGl0IGlzIGEgcGFnZS5cbiAgICogQHNlZSBQYW5lbE1vZGVsXG4gICAqL1xuICBwdWJsaWMgb25QYW5lbEFkZGVkOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxTdXJ2ZXlNb2RlbD4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBvbiByZW1vdmluZyBhIHBhbmVsIGZyb20gc3VydmV5LlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5wYW5lbGAgLSBhIHJlbW92ZWQgcGFuZWwgb2JqZWN0LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5uYW1lYCAtIGEgcGFuZWwgbmFtZS5cbiAgICogQHNlZSBQYW5lbE1vZGVsXG4gICAqL1xuICBwdWJsaWMgb25QYW5lbFJlbW92ZWQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFN1cnZleU1vZGVsPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIG9uIGFkZGluZyBhIHBhZ2UgaW50byBzdXJ2ZXkuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnBhZ2VgIC0gYSBuZXdseSBhZGRlZCBgcGFuZWxgIG9iamVjdC5cbiAgICogQHNlZSBQYW5lbE1vZGVsXG4gICAqL1xuICBwdWJsaWMgb25QYWdlQWRkZWQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFN1cnZleU1vZGVsPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIG9uIHZhbGlkYXRpbmcgdmFsdWUgaW4gYSBxdWVzdGlvbi4gWW91IGNhbiBzcGVjaWZ5IGEgY3VzdG9tIGVycm9yIG1lc3NhZ2UgdXNpbmcgYG9wdGlvbnMuZXJyb3JgLiBUaGUgc3VydmV5IGJsb2NrcyBjb21wbGV0aW5nIHRoZSBzdXJ2ZXkgb3IgZ29pbmcgdG8gdGhlIG5leHQgcGFnZSB3aGVuIHRoZSBlcnJvciBtZXNzYWdlcyBhcmUgZGlzcGxheWVkLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSBhIHZhbGlkYXRlZCBxdWVzdGlvbi5cbiAgICogPGJyLz4gYG9wdGlvbnMubmFtZWAgLSBhIHF1ZXN0aW9uIG5hbWUuXG4gICAqIDxici8+IGBvcHRpb25zLnZhbHVlYCAtIHRoZSBjdXJyZW50IHF1ZXN0aW9uIHZhbHVlIChhbnN3ZXIpLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5lcnJvcmAgLSBhbiBlcnJvciBzdHJpbmcuIEl0IGlzIGVtcHR5IGJ5IGRlZmF1bHQuXG4gICAqIEBzZWUgb25TZXJ2ZXJWYWxpZGF0ZVF1ZXN0aW9uc1xuICAgKiBAc2VlIG9uU2V0dGluZ1F1ZXN0aW9uRXJyb3JzXG4gICAqL1xuICBwdWJsaWMgb25WYWxpZGF0ZVF1ZXN0aW9uOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgYmVmb3JlIGVycm9ycyBhcmUgYXNzaWduZWQgdG8gYSBxdWVzdGlvbi4gWW91IG1heSBhZGQvcmVtb3ZlL21vZGlmeSBlcnJvcnMgZm9yIGEgcXVlc3Rpb24uXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIGEgdmFsaWRhdGVkIHF1ZXN0aW9uLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5lcnJvcnNgIC0gdGhlIGxpc3Qgb2YgZXJyb3JzLiBUaGUgbGlzdCBpcyBlbXB0eSBieSBkZWZhdWx0IGFuZCByZW1haW5zIGVtcHR5IGlmIGEgdmFsaWRhdGVkIHF1ZXN0aW9uIGhhcyBubyBlcnJvcnMuXG4gICAqIEBzZWUgb25WYWxpZGF0ZVF1ZXN0aW9uXG4gICAqL1xuICBwdWJsaWMgb25TZXR0aW5nUXVlc3Rpb25FcnJvcnM6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFVzZSB0aGlzIGV2ZW50IHRvIHZhbGlkYXRlIGRhdGEgb24geW91ciBzZXJ2ZXIuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLmRhdGFgIC0gdGhlIHZhbHVlcyBvZiBhbGwgbm9uLWVtcHR5IHF1ZXN0aW9ucyBvbiB0aGUgY3VycmVudCBwYWdlLiBZb3UgY2FuIGdldCBhIHF1ZXN0aW9uIHZhbHVlIGFzIGBvcHRpb25zLmRhdGFbXCJteVF1ZXN0aW9uTmFtZVwiXWAuXG4gICAqIDxici8+IGBvcHRpb25zLmVycm9yc2AgLSBzZXQgeW91ciBlcnJvcnMgdG8gdGhpcyBvYmplY3QgYXM6IGBvcHRpb25zLmVycm9yc1tcIm15UXVlc3Rpb25OYW1lXCJdID0gXCJFcnJvciB0ZXh0XCI7YC4gSXQgd2lsbCBiZSBzaG93biBhcyBhIHF1ZXN0aW9uIGVycm9yLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5jb21wbGV0ZSgpYCAtIGNhbGwgdGhpcyBmdW5jdGlvbiB0byB0ZWxsIHN1cnZleSB0aGF0IHlvdXIgc2VydmVyIGNhbGxiYWNrIGhhcyBiZWVuIHByb2Nlc3NlZC5cbiAgICogQHNlZSBvblZhbGlkYXRlUXVlc3Rpb25cbiAgICogQHNlZSBvblZhbGlkYXRlUGFuZWxcbiAgICovXG4gIHB1YmxpYyBvblNlcnZlclZhbGlkYXRlUXVlc3Rpb25zOiBhbnkgPSB0aGlzLmFkZEV2ZW50PFN1cnZleU1vZGVsPigpO1xuICAvKipcbiAgICogVXNlIHRoaXMgZXZlbnQgdG8gbW9kaWZ5IHRoZSBIVE1MIGJlZm9yZSByZW5kZXJpbmcsIGZvciBleGFtcGxlIEhUTUwgb24gYSBjb21wbGV0ZWQgcGFnZS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMuaHRtbGAgLSBhbiBIVE1MIHRoYXQgeW91IG1heSBjaGFuZ2UgYmVmb3JlIHRleHQgcHJvY2Vzc2luZyBhbmQgdGhlbiByZW5kZXJpbmcuXG4gICAqIEBzZWUgY29tcGxldGVkSHRtbFxuICAgKiBAc2VlIGxvYWRpbmdIdG1sXG4gICAqIEBzZWUgUXVlc3Rpb25IdG1sTW9kZWwuaHRtbFxuICAgKi9cbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBvbiB2YWxpZGF0aW5nIGEgcGFuZWwuIFNldCB5b3VyIGVycm9yIHRvIGBvcHRpb25zLmVycm9yYCBhbmQgc3VydmV5IHdpbGwgc2hvdyB0aGUgZXJyb3IgZm9yIHRoZSBwYW5lbCBhbmQgYmxvY2sgY29tcGxldGluZyB0aGUgc3VydmV5IG9yIGdvaW5nIHRvIHRoZSBuZXh0IHBhZ2UuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLm5hbWVgIC0gYSBwYW5lbCBuYW1lLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5lcnJvcmAgLSBhbiBlcnJvciBzdHJpbmcuIEl0IGlzIGVtcHR5IGJ5IGRlZmF1bHQuXG4gICAqIEBzZWUgb25WYWxpZGF0ZVF1ZXN0aW9uXG4gICAqL1xuICBwdWJsaWMgb25WYWxpZGF0ZVBhbmVsOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxTdXJ2ZXlNb2RlbD4oKTtcbiAgLyoqXG4gICAqIFVzZSB0aGUgZXZlbnQgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IGVycm9yIHRleHQuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnRleHRgIC0gYW4gZXJyb3IgdGV4dC5cbiAgICogPGJyLz4gYG9wdGlvbnMuZXJyb3JgIC0gYW4gaW5zdGFuY2Ugb2YgdGhlIGBTdXJ2ZXlFcnJvcmAgb2JqZWN0LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5uYW1lYCAtIHRoZSBlcnJvciBuYW1lLiBUaGUgZm9sbG93aW5nIGVycm9yIG5hbWVzIGFyZSBhdmFpbGFibGU6XG4gICAqIHJlcXVpcmVkLCByZXF1aXJlb25lYW5zd2VyLCByZXF1aXJlbnVtZXJpYywgZXhjZWVkc2l6ZSwgd2VicmVxdWVzdCwgd2VicmVxdWVzdGVtcHR5LCBvdGhlcmVtcHR5LFxuICAgKiB1cGxvYWRpbmdmaWxlLCByZXF1aXJlZGluYWxscm93c2Vycm9yLCBtaW5yb3djb3VudGVycm9yLCBrZXlkdXBsaWNhdGlvbmVycm9yLCBjdXN0b21cbiAgICovXG4gIHB1YmxpYyBvbkVycm9yQ3VzdG9tVGV4dDogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVXNlIHRoZSB0aGlzIGV2ZW50IHRvIGJlIG5vdGlmaWVkIHdoZW4gdGhlIHN1cnZleSBmaW5pc2hlZCB2YWxpZGF0ZSBxdWVzdGlvbnMgb24gdGhlIGN1cnJlbnQgcGFnZS4gSXQgY29tbW9ubHkgaGFwcGVucyB3aGVuIGEgdXNlciB0cnkgdG8gZ28gdG8gdGhlIG5leHQgcGFnZSBvciBjb21wbGV0ZSB0aGUgc3VydmV5XG4gICAqIG9wdGlvbnMucXVlc3Rpb25zIC0gdGhlIGxpc3Qgb2YgcXVlc3Rpb25zIHRoYXQgaGF2ZSBlcnJvcnNcbiAgICogb3B0aW9ucy5lcnJvcnMgLSB0aGUgbGlzdCBvZiBlcnJvcnNcbiAgICogb3B0aW9ucy5wYWdlIC0gdGhlIHBhZ2Ugd2hlcmUgcXVlc3Rpb24ocykgYXJlIGxvY2F0ZWRcbiAgICovXG4gIHB1YmxpYyBvblZhbGlkYXRlZEVycm9yc09uQ3VycmVudFBhZ2U6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFVzZSB0aGlzIGV2ZW50IHRvIG1vZGlmeSB0aGUgSFRNTCBjb250ZW50IGJlZm9yZSByZW5kZXJpbmcsIGZvciBleGFtcGxlIGBjb21wbGV0ZUh0bWxgIG9yIGBsb2FkaW5nSHRtbGAuXG4gICAqIGBvcHRpb25zLmh0bWxgIC0gc3BlY2lmaWVzIHRoZSBtb2RpZmllZCBIVE1MIGNvbnRlbnQuXG4gICAqIEBzZWUgY29tcGxldGVkSHRtbFxuICAgKiBAc2VlIGxvYWRpbmdIdG1sXG4gICAqL1xuICBwdWJsaWMgb25Qcm9jZXNzSHRtbDogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8U3VydmV5TW9kZWw+KCk7XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBldmVudCB0byBjaGFuZ2UgdGhlIHF1ZXN0aW9uIHRpdGxlIGluIGNvZGUuIElmIHlvdSB3YW50IHRvIHJlbW92ZSBxdWVzdGlvbiBudW1iZXJpbmcgdGhlbiBzZXQgc2hvd1F1ZXN0aW9uTnVtYmVycyB0byBcIm9mZlwiLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy50aXRsZWAgLSBhIGNhbGN1bGF0ZWQgcXVlc3Rpb24gdGl0bGUsIGJhc2VkIG9uIHF1ZXN0aW9uIGB0aXRsZWAsIGBuYW1lYC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gYSBxdWVzdGlvbiBvYmplY3QuXG4gICAqIEBzZWUgc2hvd1F1ZXN0aW9uTnVtYmVyc1xuICAgKiBAc2VlIHJlcXVpcmVkVGV4dFxuICAgKi9cbiAgcHVibGljIG9uR2V0UXVlc3Rpb25UaXRsZTogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVXNlIHRoaXMgZXZlbnQgdG8gY2hhbmdlIHRoZSBxdWVzdGlvbiBubyBpbiBjb2RlLiBJZiB5b3Ugd2FudCB0byByZW1vdmUgcXVlc3Rpb24gbnVtYmVyaW5nIHRoZW4gc2V0IHNob3dRdWVzdGlvbk51bWJlcnMgdG8gXCJvZmZcIi5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMubm9gIC0gYSBjYWxjdWxhdGVkIHF1ZXN0aW9uIG5vLCBiYXNlZCBvbiBxdWVzdGlvbiBgdmlzaWJsZUluZGV4YCwgc3VydmV5IGAucXVlc3Rpb25TdGFydEluZGV4YCBwcm9wZXJ0aWVzLiBZb3UgY2FuIGNoYW5nZSBpdC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gYSBxdWVzdGlvbiBvYmplY3QuXG4gICAqIEBzZWUgc2hvd1F1ZXN0aW9uTnVtYmVyc1xuICAgKiBAc2VlIHF1ZXN0aW9uU3RhcnRJbmRleFxuICAgKi9cbiAgcHVibGljIG9uR2V0UXVlc3Rpb25ObzogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8U3VydmV5TW9kZWw+KCk7XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBldmVudCB0byBjaGFuZ2UgdGhlIHByb2dyZXNzIHRleHQgaW4gY29kZS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMudGV4dGAgLSBhIHByb2dyZXNzIHRleHQsIHRoYXQgU3VydmV5SlMgd2lsbCByZW5kZXIgaW4gcHJvZ3Jlc3MgYmFyLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbkNvdW50YCAtIGEgbnVtYmVyIG9mIHF1ZXN0aW9ucyB0aGF0IGhhdmUgaW5wdXQocykuIFdlIGRvIG5vdCBjb3VudCBodG1sIG9yIGV4cHJlc3Npb24gcXVlc3Rpb25zXG4gICAqIDxici8+IGBvcHRpb25zLmFuc3dlcmVkUXVlc3Rpb25Db3VudGAgLSBhIG51bWJlciBvZiBxdWVzdGlvbnMgdGhhdCBoYXZlIGlucHV0KHMpIGFuZCBhbiB1c2VyIGhhcyBhbnN3ZXJlZC5cbiAgICogPGJyLz4gYG9wdGlvbnMucmVxdWlyZWRRdWVzdGlvbkNvdW50YCAtIGEgbnVtYmVyIG9mIHJlcXVpcmVkIHF1ZXN0aW9ucyB0aGF0IGhhdmUgaW5wdXQocykuIFdlIGRvIG5vdCBjb3VudCBodG1sIG9yIGV4cHJlc3Npb24gcXVlc3Rpb25zXG4gICAqIDxici8+IGBvcHRpb25zLnJlcXVpcmVkQW5zd2VyZWRRdWVzdGlvbkNvdW50YCAtIGEgbnVtYmVyIG9mIHJlcXVpcmVkIHF1ZXN0aW9ucyB0aGF0IGhhdmUgaW5wdXQocykgYW5kIGFuIHVzZXIgaGFzIGFuc3dlcmVkLlxuICAgKiAgQHNlZSBwcm9ncmVzc0JhclR5cGVcbiAgICovXG4gIHB1YmxpYyBvblByb2dyZXNzVGV4dDogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8U3VydmV5TW9kZWw+KCk7XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBldmVudCB0byBwcm9jZXNzIHRoZSBtYXJrZG93biB0ZXh0LlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5lbGVtZW50YCAtIFN1cnZleUpTIGVsZW1lbnQgKGEgcXVlc3Rpb24sIHBhbmVsLCBwYWdlLCBvciBzdXJ2ZXkpIHdoZXJlIHRoZSBzdHJpbmcgaXMgZ29pbmcgdG8gYmUgcmVuZGVyZWQuXG4gICAqIDxici8+IGBvcHRpb25zLm5hbWVgIC0gYSBwcm9wZXJ0eSBuYW1lIGlzIGdvaW5nIHRvIGJlIHJlbmRlcmVkLlxuICAgKiA8YnIvPiBgb3B0aW9ucy50ZXh0YCAtIGEgdGV4dCB0aGF0IGlzIGdvaW5nIHRvIGJlIHJlbmRlcmVkLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5odG1sYCAtIGFuIEhUTUwgY29udGVudC4gSXQgaXMgYG51bGxgIGJ5IGRlZmF1bHQuIFVzZSB0aGlzIHByb3BlcnR5IHRvIHNwZWNpZnkgdGhlIEhUTUwgY29udGVudCByZW5kZXJlZCBpbnN0ZWFkIG9mIGBvcHRpb25zLnRleHRgLlxuICAgKi9cbiAgcHVibGljIG9uVGV4dE1hcmtkb3duOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxTdXJ2ZXlNb2RlbD4oKTtcbiAgLyoqXG4gICAqIFVzZSB0aGlzIGV2ZW50IHRvIHNwZWNpdHkgcmVuZGVyIGNvbXBvbmVudCBuYW1lIHVzZWQgZm9yIHRleHQgcmVuZGVyaW5nLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5lbGVtZW50YCAtIFN1cnZleUpTIGVsZW1lbnQgKGEgcXVlc3Rpb24sIHBhbmVsLCBwYWdlLCBvciBzdXJ2ZXkpIHdoZXJlIHRoZSBzdHJpbmcgaXMgZ29pbmcgdG8gYmUgcmVuZGVyZWQuXG4gICAqIDxici8+IGBvcHRpb25zLm5hbWVgIC0gYSBwcm9wZXJ0eSBuYW1lIGlzIGdvaW5nIHRvIGJlIHJlbmRlcmVkLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5yZW5kZXJBc2AgLSBhIGNvbXBvbmVudCBuYW1lIHVzZWQgZm9yIHRleHQgcmVuZGVyaW5nLlxuICAgKi9cbiAgcHVibGljIG9uVGV4dFJlbmRlckFzOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxTdXJ2ZXlNb2RlbD4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBmaXJlcyB3aGVuIGl0IGdldHMgcmVzcG9uc2UgZnJvbSB0aGUgW2FwaS5zdXJ2ZXlqcy5pb10oaHR0cHM6Ly9hcGkuc3VydmV5anMuaW8pIHNlcnZpY2Ugb24gc2F2aW5nIHN1cnZleSByZXN1bHRzLiBVc2UgaXQgdG8gZmluZCBvdXQgaWYgdGhlIHJlc3VsdHMgaGF2ZSBiZWVuIHNhdmVkIHN1Y2Nlc3NmdWxseS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMuc3VjY2Vzc2AgLSBpdCBpcyBgdHJ1ZWAgaWYgdGhlIHJlc3VsdHMgaGFzIGJlZW4gc2VudCB0byB0aGUgc2VydmljZSBzdWNjZXNzZnVsbHkuXG4gICAqIDxici8+IGBvcHRpb25zLnJlc3BvbnNlYCAtIGEgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmljZS5cbiAgICovXG4gIHB1YmxpYyBvblNlbmRSZXN1bHQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFN1cnZleU1vZGVsPigpO1xuICAvKipcbiAgICogVXNlIGl0IHRvIGdldCByZXN1bHRzIGFmdGVyIGNhbGxpbmcgdGhlIGBnZXRSZXN1bHRgIG1ldGhvZC4gSXQgcmV0dXJucyBhIHNpbXBsZSBhbmFseXRpY3MgZnJvbSBbYXBpLnN1cnZleWpzLmlvXShodHRwczovL2FwaS5zdXJ2ZXlqcy5pbykgc2VydmljZS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMuc3VjY2Vzc2AgLSBpdCBpcyBgdHJ1ZWAgaWYgdGhlIHJlc3VsdHMgd2VyZSBnb3QgZnJvbSB0aGUgc2VydmljZSBzdWNjZXNzZnVsbHkuXG4gICAqIDxici8+IGBvcHRpb25zLmRhdGFgIC0gdGhlIG9iamVjdCBge0Fuc3dlcnNDb3VudCwgUXVlc3Rpb25SZXN1bHQgOiB7fSB9YC4gYEFuc3dlcnNDb3VudGAgaXMgdGhlIG51bWJlciBvZiBwb3N0ZWQgc3VydmV5IHJlc3VsdHMuIGBRdWVzdGlvblJlc3VsdGAgaXMgYW4gb2JqZWN0IHdpdGggYWxsIHBvc3NpYmxlIHVuaXF1ZSBhbnN3ZXJzIHRvIHRoZSBxdWVzdGlvbiBhbmQgbnVtYmVyIG9mIHRoZXNlIGFuc3dlcnMuXG4gICAqIDxici8+IGBvcHRpb25zLmRhdGFMaXN0YCAtIGFuIGFycmF5IG9mIG9iamVjdHMgYHtuYW1lLCB2YWx1ZX1gLCB3aGVyZSBgbmFtZWAgaXMgYSB1bmlxdWUgdmFsdWUvYW5zd2VyIHRvIHRoZSBxdWVzdGlvbiBhbmQgYHZhbHVlYCBpcyBhIG51bWJlci9jb3VudCBvZiBzdWNoIGFuc3dlcnMuXG4gICAqIDxici8+IGBvcHRpb25zLnJlc3BvbnNlYCAtIHRoZSBzZXJ2ZXIgcmVzcG9uc2UuXG4gICAqIEBzZWUgZ2V0UmVzdWx0XG4gICAqL1xuICBwdWJsaWMgb25HZXRSZXN1bHQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFN1cnZleU1vZGVsPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIG9uIHVwbG9hZGluZyB0aGUgZmlsZSBpbiBRdWVzdGlvbkZpbGUgd2hlbiBgc3RvcmVEYXRhQXNUZXh0YCBpcyBzZXQgdG8gYGZhbHNlYC4gVXNlIHRoaXMgZXZlbnQgdG8gY2hhbmdlIHRoZSB1cGxvYWRlZCBmaWxlIG5hbWUgb3IgdG8gcHJldmVudCBhIHBhcnRpY3VsYXIgZmlsZSBmcm9tIGJlaW5nIHVwbG9hZGVkLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSB0aGUgZmlsZSBxdWVzdGlvbiBpbnN0YW5jZS5cbiAgICogPGJyLz4gYG9wdGlvbnMubmFtZWAgLSB0aGUgcXVlc3Rpb24gbmFtZS5cbiAgICogPGJyLz4gYG9wdGlvbnMuZmlsZXNgIC0gdGhlIEphdmFzY3JpcHQgRmlsZSBvYmplY3RzIGFycmF5IHRvIHVwbG9hZC5cbiAgICogPGJyLz4gYG9wdGlvbnMuY2FsbGJhY2tgIC0gYSBjYWxsYmFjayBmdW5jdGlvbiB0byBnZXQgdGhlIGZpbGUgdXBsb2FkIHN0YXR1cyBhbmQgdGhlIHVwZGxvYWRlZCBmaWxlIGNvbnRlbnQuXG4gICAqIEBzZWUgdXBsb2FkRmlsZXNcbiAgICogQHNlZSBRdWVzdGlvbkZpbGVNb2RlbC5zdG9yZURhdGFBc1RleHRcbiAgICogQHNlZSBvbkRvd25sb2FkRmlsZVxuICAgKiBAc2VlIG9uQ2xlYXJGaWxlc1xuICAgKiBAc2VlIFtWaWV3IEV4YW1wbGVzXShodHRwczovL3d3dy5nb29nbGUuY29tL3NlYXJjaD9xPXNpdGUlM0FodHRwcyUzQSUyRiUyRnN1cnZleWpzLmlvJTJGRXhhbXBsZXMlMkYrJTIyb25VcGxvYWRGaWxlcyUyMilcbiAgICovXG4gIHB1YmxpYyBvblVwbG9hZEZpbGVzOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxTdXJ2ZXlNb2RlbD4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBvbiBkb3dubG9hZGluZyBhIGZpbGUgaW4gUXVlc3Rpb25GaWxlLiBVc2UgdGhpcyBldmVudCB0byBwYXNzIHRoZSBmaWxlIHRvIGEgcHJldmlldy5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMubmFtZWAgLSB0aGUgcXVlc3Rpb24gbmFtZS5cbiAgICogPGJyLz4gYG9wdGlvbnMuY29udGVudGAgLSB0aGUgZmlsZSBjb250ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5maWxlVmFsdWVgIC0gc2luZ2xlIGZpbGUgcXVlc3Rpb24gdmFsdWUuXG4gICAqIDxici8+IGBvcHRpb25zLmNhbGxiYWNrYCAtIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZ2V0IHRoZSBmaWxlIGRvd25sb2FkaW5nIHN0YXR1cyBhbmQgdGhlIGRvd25sb2FkZWQgZmlsZSBjb250ZW50LlxuICAgKiBAc2VlIGRvd25sb2FkRmlsZVxuICAgKiBAc2VlIG9uQ2xlYXJGaWxlc1xuICAgKiBAc2VlIG9uVXBsb2FkRmlsZXNcbiAgICogQHNlZSBbVmlldyBFeGFtcGxlc10oaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9zZWFyY2g/cT1zaXRlJTNBaHR0cHMlM0ElMkYlMkZzdXJ2ZXlqcy5pbyUyRkV4YW1wbGVzJTJGKyUyMm9uRG93bmxvYWRGaWxlJTIyKVxuICAgKi9cbiAgcHVibGljIG9uRG93bmxvYWRGaWxlOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxTdXJ2ZXlNb2RlbD4oKTtcbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgb24gY2xlYXJpbmcgdGhlIHZhbHVlIGluIGEgUXVlc3Rpb25GaWxlLiBVc2UgdGhpcyBldmVudCB0byByZW1vdmUgZmlsZXMgc3RvcmVkIG9uIHlvdXIgc2VydmVyLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgcXVlc3Rpb25gIC0gdGhlIHF1ZXN0aW9uIGluc3RhbmNlLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5uYW1lYCAtIHRoZSBxdWVzdGlvbiBuYW1lLlxuICAgKiA8YnIvPiBgb3B0aW9ucy52YWx1ZWAgLSB0aGUgcXVlc3Rpb24gdmFsdWUuXG4gICAqIDxici8+IGBvcHRpb25zLmZpbGVOYW1lYCAtIGEgcmVtb3ZlZCBmaWxlJ3MgbmFtZSwgc2V0IGl0IHRvIGBudWxsYCB0byBjbGVhciBhbGwgZmlsZXMuXG4gICAqIDxici8+IGBvcHRpb25zLmNhbGxiYWNrYCAtIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZ2V0IHRoZSBvcGVyYXRpb24gc3RhdHVzLlxuICAgKiBAc2VlIGNsZWFyRmlsZXNcbiAgICogQHNlZSBvbkRvd25sb2FkRmlsZVxuICAgKiBAc2VlIG9uVXBsb2FkRmlsZXNcbiAgICogQHNlZSBbVmlldyBFeGFtcGxlc10oaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9zZWFyY2g/cT1zaXRlJTNBaHR0cHMlM0ElMkYlMkZzdXJ2ZXlqcy5pbyUyRkV4YW1wbGVzJTJGKyUyMm9uQ2xlYXJGaWxlcyUyMilcbiAgICovXG4gIHB1YmxpYyBvbkNsZWFyRmlsZXM6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFN1cnZleU1vZGVsPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIGFmdGVyIGNob2ljZXMgZm9yIHJhZGlvZ3JvdXAsIGNoZWNrYm94LCBhbmQgZHJvcGRvd24gaGFzIGJlZW4gbG9hZGVkIGZyb20gYSBSRVNUZnVsIHNlcnZpY2UgYW5kIGJlZm9yZSB0aGV5IGFyZSBhc3NpZ25lZCB0byBhIHF1ZXN0aW9uLlxuICAgKiBZb3UgbWF5IGNoYW5nZSB0aGUgY2hvaWNlcywgYmVmb3JlIHRoZXkgYXJlIGFzc2lnbmVkIG9yIGRpc2FibGUvZW5hYmxlZCBtYWtlIHZpc2libGUvaW52aXNpYmxlIHF1ZXN0aW9uLCBiYXNlZCBvbiBsb2FkZWQgcmVzdWx0cy5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYHF1ZXN0aW9uYCAtIHRoZSBxdWVzdGlvbiB3aGVyZSBsb2FkZWQgY2hvaWNlcyBhcmUgZ29pbmcgdG8gYmUgYXNzaWduZWQuXG4gICAqIDxici8+IGBjaG9pY2VzYCAtIHRoZSBsb2FkZWQgY2hvaWNlcy4gWW91IGNhbiBjaGFuZ2UgdGhlIGxvYWRlZCBjaG9pY2VzIHRvIGJlZm9yZSB0aGV5IGFyZSBhc3NpZ25lZCB0byBxdWVzdGlvbi5cbiAgICogPGJyLz4gYHNlcnZlclJlc3VsdGAgLSBhIHJlc3VsdCB0aGF0IGNvbWVzIGZyb20gdGhlIHNlcnZlciBhcyBpdCBpcy5cbiAgICovXG4gIHB1YmxpYyBvbkxvYWRDaG9pY2VzRnJvbVNlcnZlcjogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIGFmdGVyIHN1cnZleSBpcyBsb2FkZWQgZnJvbSBhcGkuc3VydmV5anMuaW8gc2VydmljZS5cbiAgICogWW91IGNhbiB1c2UgdGhpcyBldmVudCB0byBwZXJmb3JtIG1hbmlwdWxhdGlvbiB3aXRoIHRoZSBzdXJ2ZXkgbW9kZWwgYWZ0ZXIgaXQgd2FzIGxvYWRlZCBmcm9tIHRoZSB3ZWIgc2VydmljZS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogQHNlZSBzdXJ2ZXlJZFxuICAgKiBAc2VlIGxvYWRTdXJ2ZXlGcm9tU2VydmljZVxuICAgKi9cbiAgcHVibGljIG9uTG9hZGVkU3VydmV5RnJvbVNlcnZpY2U6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBvbiBwcm9jZXNzaW5nIHRoZSB0ZXh0IHdoZW4gaXQgZmluZHMgYSB0ZXh0IGluIGJyYWNrZXRzOiBge3NvbWV2YWx1ZX1gLiBCeSBkZWZhdWx0LCBpdCB1c2VzIHRoZSB2YWx1ZSBvZiBzdXJ2ZXkgcXVlc3Rpb24gdmFsdWVzIGFuZCB2YXJpYWJsZXMuXG4gICAqIEZvciBleGFtcGxlLCB5b3UgbWF5IHVzZSB0aGUgdGV4dCBwcm9jZXNzaW5nIGluIGxvYWRpbmcgY2hvaWNlcyBmcm9tIHRoZSB3ZWIuIElmIHlvdXIgYGNob2ljZXNCeVVybC51cmxgIGVxdWFscyB0byBcIlVybFRvU2VydmljZVRvR2V0QWxsQ2l0aWVzL3tjb3VudHJ5fS97c3RhdGV9XCIsXG4gICAqIHlvdSBtYXkgc2V0IG9uIHRoaXMgZXZlbnQgYG9wdGlvbnMudmFsdWVgIHRvIFwiYWxsXCIgb3IgZW1wdHkgc3RyaW5nIHdoZW4gdGhlIFwic3RhdGVcIiB2YWx1ZS9xdWVzdGlvbiBpcyBub24gc2VsZWN0ZWQgYnkgYSB1c2VyLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5uYW1lYCAtIHRoZSBuYW1lIG9mIHRoZSBwcm9jZXNzaW5nIHZhbHVlLCBmb3IgZXhhbXBsZSwgXCJzdGF0ZVwiIGluIG91ciBleGFtcGxlLlxuICAgKiA8YnIvPiBgb3B0aW9ucy52YWx1ZWAgLSB0aGUgdmFsdWUgb2YgdGhlIHByb2Nlc3NpbmcgdGV4dC5cbiAgICogPGJyLz4gYG9wdGlvbnMuaXNFeGlzdHNgIC0gYSBib29sZWFuIHZhbHVlLiBTZXQgaXQgdG8gYHRydWVgIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgdmFsdWUgYW5kIHNldCBpdCB0byBgZmFsc2VgIGlmIHlvdSBkb24ndC5cbiAgICovXG4gIHB1YmxpYyBvblByb2Nlc3NUZXh0VmFsdWU6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBiZWZvcmUgcmVuZGVyaW5nIGEgcXVlc3Rpb24uIFVzZSBpdCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBxdWVzdGlvbiBDU1MgY2xhc3Nlcy5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gYSBxdWVzdGlvbiBmb3Igd2hpY2ggeW91IGNhbiBjaGFuZ2UgdGhlIENTUyBjbGFzc2VzLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5jc3NDbGFzc2VzYCAtIGFuIG9iamVjdCB3aXRoIENTUyBjbGFzc2VzLiBGb3IgZXhhbXBsZSBge3Jvb3Q6IFwidGFibGVcIiwgYnV0dG9uOiBcImJ1dHRvblwifWAuIFlvdSBjYW4gY2hhbmdlIHRoZW0gdG8geW91ciBvd24gQ1NTIGNsYXNzZXMuXG4gICAqL1xuICBwdWJsaWMgb25VcGRhdGVRdWVzdGlvbkNzc0NsYXNzZXM6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBiZWZvcmUgcmVuZGVyaW5nIGEgcGFuZWwuIFVzZSBpdCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBwYW5lbCBDU1MgY2xhc3Nlcy5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucGFuZWxgIC0gYSBwYW5lbCBmb3Igd2hpY2ggeW91IGNhbiBjaGFuZ2UgdGhlIENTUyBjbGFzc2VzLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5jc3NDbGFzc2VzYCAtIGFuIG9iamVjdCB3aXRoIENTUyBjbGFzc2VzLiBGb3IgZXhhbXBsZSBge3RpdGxlOiBcInN2X3BfdGl0bGVcIiwgZGVzY3JpcHRpb246IFwic21hbGxcIn1gLiBZb3UgY2FuIGNoYW5nZSB0aGVtIHRvIHlvdXIgb3duIENTUyBjbGFzc2VzLlxuICAgKi9cbiAgcHVibGljIG9uVXBkYXRlUGFuZWxDc3NDbGFzc2VzOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgYmVmb3JlIHJlbmRlcmluZyBhIHBhZ2UuIFVzZSBpdCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBwYWdlIENTUyBjbGFzc2VzLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5wYWdlYCAtIGEgcGFnZSBmb3Igd2hpY2ggeW91IGNhbiBjaGFuZ2UgdGhlIENTUyBjbGFzc2VzLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5jc3NDbGFzc2VzYCAtIGFuIG9iamVjdCB3aXRoIENTUyBjbGFzc2VzLiBGb3IgZXhhbXBsZSBge3RpdGxlOiBcInN2X3BfdGl0bGVcIiwgZGVzY3JpcHRpb246IFwic21hbGxcIn1gLiBZb3UgY2FuIGNoYW5nZSB0aGVtIHRvIHlvdXIgb3duIENTUyBjbGFzc2VzLlxuICAgKi9cbiAgcHVibGljIG9uVXBkYXRlUGFnZUNzc0NsYXNzZXM6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCByaWdodCBhZnRlciBzdXJ2ZXkgaXMgcmVuZGVyZWQgaW4gRE9NLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5odG1sRWxlbWVudGAgLSBhIHJvb3QgSFRNTCBlbGVtZW50IGJvdW5kIHRvIHRoZSBzdXJ2ZXkgb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIG9uQWZ0ZXJSZW5kZXJTdXJ2ZXk6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCByaWdodCBhZnRlciBhIHBhZ2UgaXMgcmVuZGVyZWQgaW4gRE9NLiBVc2UgaXQgdG8gbW9kaWZ5IEhUTUwgZWxlbWVudHMuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLmh0bWxFbGVtZW50YCAtIGFuIEhUTUwgZWxlbWVudCBib3VuZCB0byB0aGUgc3VydmV5IGhlYWRlciBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgb25BZnRlclJlbmRlckhlYWRlcjogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIHJpZ2h0IGFmdGVyIGEgcGFnZSBpcyByZW5kZXJlZCBpbiBET00uIFVzZSBpdCB0byBtb2RpZnkgSFRNTCBlbGVtZW50cy5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucGFnZWAgLSBhIHBhZ2Ugb2JqZWN0IGZvciB3aGljaCB0aGUgZXZlbnQgaXMgZmlyZWQuIFR5cGljYWxseSB0aGUgY3VycmVudC9hY3RpdmUgcGFnZS5cbiAgICogPGJyLz4gYG9wdGlvbnMuaHRtbEVsZW1lbnRgIC0gYW4gSFRNTCBlbGVtZW50IGJvdW5kIHRvIHRoZSBwYWdlIG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBvbkFmdGVyUmVuZGVyUGFnZTogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIHJpZ2h0IGFmdGVyIGEgcXVlc3Rpb24gaXMgcmVuZGVyZWQgaW4gRE9NLiBVc2UgaXQgdG8gbW9kaWZ5IEhUTUwgZWxlbWVudHMuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIGEgcXVlc3Rpb24gb2JqZWN0IGZvciB3aGljaCB0aGUgZXZlbnQgaXMgZmlyZWQuXG4gICAqIDxici8+IGBvcHRpb25zLmh0bWxFbGVtZW50YCAtIGFuIEhUTUwgZWxlbWVudCBib3VuZCB0byB0aGUgcXVlc3Rpb24gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIG9uQWZ0ZXJSZW5kZXJRdWVzdGlvbjogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIHJpZ2h0IGFmdGVyIGEgbm9uLWNvbXBvc2l0ZSBxdWVzdGlvbiAodGV4dCwgY29tbWVudCwgZHJvcGRvd24sIHJhZGlvZ3JvdXAsIGNoZWNrYm94KSBpcyByZW5kZXJlZCBpbiBET00uIFVzZSBpdCB0byBtb2RpZnkgSFRNTCBlbGVtZW50cy5cbiAgICogVGhpcyBldmVudCBpcyBub3QgZmlyZWQgZm9yIG1hdHJpY2VzLCBwYW5lbHMsIG11bHRpcGxlIHRleHQgYW5kIGltYWdlIHBpY2tlci5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gYSBxdWVzdGlvbiBvYmplY3QgZm9yIHdoaWNoIHRoZSBldmVudCBpcyBmaXJlZC5cbiAgICogPGJyLz4gYG9wdGlvbnMuaHRtbEVsZW1lbnRgIC0gYW4gSFRNTCBlbGVtZW50IGJvdW5kIHRvIHRoZSBxdWVzdGlvbiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgb25BZnRlclJlbmRlclF1ZXN0aW9uSW5wdXQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCByaWdodCBhZnRlciBhIHBhbmVsIGlzIHJlbmRlcmVkIGluIERPTS4gVXNlIGl0IHRvIG1vZGlmeSBIVE1MIGVsZW1lbnRzLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50XG4gICAqIDxici8+IGBvcHRpb25zLnBhbmVsYCAtIGEgcGFuZWwgb2JqZWN0IGZvciB3aGljaCB0aGUgZXZlbnQgaXMgZmlyZWRcbiAgICogPGJyLz4gYG9wdGlvbnMuaHRtbEVsZW1lbnRgIC0gYW4gSFRNTCBlbGVtZW50IGJvdW5kIHRvIHRoZSBwYW5lbCBvYmplY3RcbiAgICovXG4gIHB1YmxpYyBvbkFmdGVyUmVuZGVyUGFuZWw6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBvbiBhZGRpbmcgYSBuZXcgcm93IGluIE1hdHJpeCBEeW5hbWljIHF1ZXN0aW9uLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50XG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIGEgbWF0cml4IHF1ZXN0aW9uLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5yb3dgIC0gYSBuZXcgYWRkZWQgcm93LlxuICAgKiBAc2VlIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsXG4gICAqIEBzZWUgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwudmlzaWJsZVJvd3NcbiAgICovXG4gIHB1YmxpYyBvbk1hdHJpeFJvd0FkZGVkOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgYmVmb3JlIGFkZGluZyBhIG5ldyByb3cgaW4gTWF0cml4IER5bmFtaWMgcXVlc3Rpb24uXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnRcbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gYSBtYXRyaXggcXVlc3Rpb24uXG4gICAqIDxici8+IGBvcHRpb25zLmNhbkFkZFJvd2AgLSBzcGVjaWZpZXMgd2hldGhlciBhIG5ldyByb3cgY2FuIGJlIGFkZGVkXG4gICAqIEBzZWUgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWxcbiAgICogQHNlZSBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbC52aXNpYmxlUm93c1xuICAgKi9cbiAgcHVibGljIG9uTWF0cml4QmVmb3JlUm93QWRkZWQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBiZWZvcmUgcmVtb3ZpbmcgYSByb3cgZnJvbSBNYXRyaXggRHluYW1pYyBxdWVzdGlvbi4gWW91IGNhbiBkaXNhYmxlIHJlbW92aW5nIGFuZCBjbGVhciB0aGUgZGF0YSBpbnN0ZWFkLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50XG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIGEgbWF0cml4IHF1ZXN0aW9uLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5yb3dJbmRleGAgLSBhIHJvdyBpbmRleC5cbiAgICogPGJyLz4gYG9wdGlvbnMucm93YCAtIGEgcm93IG9iamVjdC5cbiAgICogPGJyLz4gYG9wdGlvbnMuYWxsb3dgIC0gYSBib29sZWFuIHByb3BlcnR5LiBTZXQgaXQgdG8gYGZhbHNlYCB0byBkaXNhYmxlIHRoZSByb3cgcmVtb3ZpbmcuXG4gICAqIEBzZWUgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWxcbiAgICogQHNlZSBvbk1hdHJpeFJvd1JlbW92ZWRcbiAgICogQHNlZSBvbk1hdHJpeEFsbG93UmVtb3ZlUm93XG4gICAqL1xuICBwdWJsaWMgb25NYXRyaXhSb3dSZW1vdmluZzogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIG9uIHJlbW92aW5nIGEgcm93IGZyb20gTWF0cml4IER5bmFtaWMgcXVlc3Rpb24uXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnRcbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gYSBtYXRyaXggcXVlc3Rpb25cbiAgICogPGJyLz4gYG9wdGlvbnMucm93SW5kZXhgIC0gYSByZW1vdmVkIHJvdyBpbmRleFxuICAgKiA8YnIvPiBgb3B0aW9ucy5yb3dgIC0gYSByZW1vdmVkIHJvdyBvYmplY3RcbiAgICogQHNlZSBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbFxuICAgKiBAc2VlIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsLnZpc2libGVSb3dzXG4gICAqIEBzZWUgb25NYXRyaXhSb3dSZW1vdmluZ1xuICAgKiBAc2VlIG9uTWF0cml4QWxsb3dSZW1vdmVSb3dcbiAgICovXG4gIHB1YmxpYyBvbk1hdHJpeFJvd1JlbW92ZWQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBiZWZvcmUgcmVuZGVyaW5nIFwiUmVtb3ZlXCIgYnV0dG9uIGZvciByZW1vdmluZyBhIHJvdyBmcm9tIE1hdHJpeCBEeW5hbWljIHF1ZXN0aW9uLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50XG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIGEgbWF0cml4IHF1ZXN0aW9uLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5yb3dJbmRleGAgLSBhIHJvdyBpbmRleC5cbiAgICogPGJyLz4gYG9wdGlvbnMucm93YCAtIGEgcm93IG9iamVjdC5cbiAgICogPGJyLz4gYG9wdGlvbnMuYWxsb3dgIC0gYSBib29sZWFuIHByb3BlcnR5LiBTZXQgaXQgdG8gYGZhbHNlYCB0byBkaXNhYmxlIHRoZSByb3cgcmVtb3ZpbmcuXG4gICAqIEBzZWUgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWxcbiAgICogQHNlZSBvbk1hdHJpeFJvd1JlbW92aW5nXG4gICAqIEBzZWUgb25NYXRyaXhSb3dSZW1vdmVkXG4gICAqL1xuICBwdWJsaWMgb25NYXRyaXhBbGxvd1JlbW92ZVJvdzogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIGZvciBldmVyeSBjZWxsIGNyZWF0ZWQgaW4gTWF0cml4IER5bmFtaWMgYW5kIE1hdHJpeCBEcm9wZG93biBxdWVzdGlvbnMuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIHRoZSBtYXRyaXggcXVlc3Rpb24uXG4gICAqIDxici8+IGBvcHRpb25zLmNlbGxgIC0gdGhlIG1hdHJpeCBjZWxsLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5jZWxsUXVlc3Rpb25gIC0gdGhlIHF1ZXN0aW9uL2VkaXRvciBpbiB0aGUgY2VsbC4gWW91IG1heSBjdXN0b21pemUgaXQsIGNoYW5nZSBpdCdzIHByb3BlcnRpZXMsIGxpa2UgY2hvaWNlcyBvciB2aXNpYmxlLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5yb3dWYWx1ZWAgLSB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgcm93LiBUbyBhY2Nlc3MgYSBwYXJ0aWN1bGFyIGNvbHVtbidzIHZhbHVlIHdpdGhpbiB0aGUgY3VycmVudCByb3csIHVzZTogYG9wdGlvbnMucm93VmFsdWVbXCJjb2x1bW5WYWx1ZVwiXWAuXG4gICAqIDxici8+IGBvcHRpb25zLmNvbHVtbmAgLSB0aGUgbWF0cml4IGNvbHVtbiBvYmplY3QuXG4gICAqIDxici8+IGBvcHRpb25zLmNvbHVtbk5hbWVgIC0gdGhlIG1hdHJpeCBjb2x1bW4gbmFtZS5cbiAgICogPGJyLz4gYG9wdGlvbnMucm93YCAtIHRoZSBtYXRyaXggcm93IG9iamVjdC5cbiAgICogQHNlZSBvbk1hdHJpeEJlZm9yZVJvd0FkZGVkXG4gICAqIEBzZWUgb25NYXRyaXhSb3dBZGRlZFxuICAgKiBAc2VlIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsXG4gICAqIEBzZWUgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsXG4gICAqL1xuICBwdWJsaWMgb25NYXRyaXhDZWxsQ3JlYXRlZDogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIGZvciBldmVyeSBjZWxsIGFmdGVyIGlzIGhhcyBiZWVuIHJlbmRlcmVkIGluIERPTS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gdGhlIG1hdHJpeCBxdWVzdGlvbi5cbiAgICogPGJyLz4gYG9wdGlvbnMuY2VsbGAgLSB0aGUgbWF0cml4IGNlbGwuXG4gICAqIDxici8+IGBvcHRpb25zLmNlbGxRdWVzdGlvbmAgLSB0aGUgcXVlc3Rpb24vZWRpdG9yIGluIHRoZSBjZWxsLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5odG1sRWxlbWVudGAgLSBhbiBIVE1MIGVsZW1lbnQgYm91bmQgdG8gdGhlIGBjZWxsUXVlc3Rpb25gIG9iamVjdC5cbiAgICogPGJyLz4gYG9wdGlvbnMuY29sdW1uYCAtIHRoZSBtYXRyaXggY29sdW1uIG9iamVjdC5cbiAgICogPGJyLz4gYG9wdGlvbnMucm93YCAtIHRoZSBtYXRyaXggcm93IG9iamVjdC5cbiAgICogQHNlZSBvbk1hdHJpeENlbGxDcmVhdGVkXG4gICAqIEBzZWUgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWxcbiAgICogQHNlZSBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxcbiAgICovXG4gIHB1YmxpYyBvbk1hdHJpeEFmdGVyQ2VsbFJlbmRlcjogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIHdoZW4gY2VsbCB2YWx1ZSBpcyBjaGFuZ2VkIGluIE1hdHJpeCBEeW5hbWljIGFuZCBNYXRyaXggRHJvcGRvd24gcXVlc3Rpb25zLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSB0aGUgbWF0cml4IHF1ZXN0aW9uLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5jb2x1bW5OYW1lYCAtIHRoZSBtYXRyaXggY29sdW1uIG5hbWUuXG4gICAqIDxici8+IGBvcHRpb25zLnZhbHVlYCAtIGEgbmV3IHZhbHVlLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5yb3dgIC0gdGhlIG1hdHJpeCByb3cgb2JqZWN0LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5nZXRDZWxsUXVlc3Rpb24oY29sdW1uTmFtZSlgIC0gdGhlIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgY2VsbCBxdWVzdGlvbiBieSBjb2x1bW4gbmFtZS5cbiAgICogQHNlZSBvbk1hdHJpeENlbGxWYWx1ZUNoYW5naW5nXG4gICAqIEBzZWUgb25NYXRyaXhCZWZvcmVSb3dBZGRlZFxuICAgKiBAc2VlIG9uTWF0cml4Um93QWRkZWRcbiAgICogQHNlZSBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbFxuICAgKiBAc2VlIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbFxuICAgKi9cbiAgcHVibGljIG9uTWF0cml4Q2VsbFZhbHVlQ2hhbmdlZDogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIG9uIGNoYW5naW5nIGNlbGwgdmFsdWUgaW4gTWF0cml4IER5bmFtaWMgYW5kIE1hdHJpeCBEcm9wZG93biBxdWVzdGlvbnMuIFlvdSBtYXkgY2hhbmdlIHRoZSBgb3B0aW9ucy52YWx1ZWAgcHJvcGVydHkgdG8gY2hhbmdlIGEgY2VsbCB2YWx1ZS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gdGhlIG1hdHJpeCBxdWVzdGlvbi5cbiAgICogPGJyLz4gYG9wdGlvbnMuY29sdW1uTmFtZWAgLSB0aGUgbWF0cml4IGNvbHVtbiBuYW1lLlxuICAgKiA8YnIvPiBgb3B0aW9ucy52YWx1ZWAgLSBhIG5ldyB2YWx1ZS5cbiAgICogPGJyLz4gYG9wdGlvbnMub2xkVmFsdWVgIC0gdGhlIG9sZCB2YWx1ZS5cbiAgICogPGJyLz4gYG9wdGlvbnMucm93YCAtIHRoZSBtYXRyaXggcm93IG9iamVjdC5cbiAgICogPGJyLz4gYG9wdGlvbnMuZ2V0Q2VsbFF1ZXN0aW9uKGNvbHVtbk5hbWUpYCAtIHRoZSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjZWxsIHF1ZXN0aW9uIGJ5IGNvbHVtbiBuYW1lLlxuICAgKiBAc2VlIG9uTWF0cml4Q2VsbFZhbHVlQ2hhbmdlZFxuICAgKiBAc2VlIG9uTWF0cml4QmVmb3JlUm93QWRkZWRcbiAgICogQHNlZSBvbk1hdHJpeFJvd0FkZGVkXG4gICAqIEBzZWUgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWxcbiAgICogQHNlZSBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxcbiAgICovXG4gIHB1YmxpYyBvbk1hdHJpeENlbGxWYWx1ZUNoYW5naW5nOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgd2hlbiBNYXRyaXggRHluYW1pYyBhbmQgTWF0cml4IERyb3Bkb3duIHF1ZXN0aW9ucyB2YWxpZGF0ZSB0aGUgY2VsbCB2YWx1ZS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMuZXJyb3JgIC0gYW4gZXJyb3Igc3RyaW5nLiBJdCBpcyBlbXB0eSBieSBkZWZhdWx0LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSB0aGUgbWF0cml4IHF1ZXN0aW9uLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5jb2x1bW5OYW1lYCAtIHRoZSBtYXRyaXggY29sdW1uIG5hbWUuXG4gICAqIDxici8+IGBvcHRpb25zLnZhbHVlYCAtIGEgY2VsbCB2YWx1ZS5cbiAgICogPGJyLz4gYG9wdGlvbnMucm93YCAtIHRoZSBtYXRyaXggcm93IG9iamVjdC5cbiAgICogPGJyLz4gYG9wdGlvbnMuZ2V0Q2VsbFF1ZXN0aW9uKGNvbHVtbk5hbWUpYCAtIHRoZSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGNlbGwgcXVlc3Rpb24gYnkgY29sdW1uIG5hbWUuXG4gICAqIEBzZWUgb25NYXRyaXhCZWZvcmVSb3dBZGRlZFxuICAgKiBAc2VlIG9uTWF0cml4Um93QWRkZWRcbiAgICogQHNlZSBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbFxuICAgKiBAc2VlIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbFxuICAgKi9cbiAgcHVibGljIG9uTWF0cml4Q2VsbFZhbGlkYXRlOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgb24gYWRkaW5nIGEgbmV3IHBhbmVsIGluIFBhbmVsIER5bmFtaWMgcXVlc3Rpb24uXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIGEgcGFuZWwgcXVlc3Rpb24uXG4gICAqIDxici8+IGBvcHRpb25zLnBhbmVsYCAtIGFuIGFkZGVkIHBhbmVsLlxuICAgKiBAc2VlIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWxcbiAgICogQHNlZSBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnBhbmVsc1xuICAgKi9cbiAgcHVibGljIG9uRHluYW1pY1BhbmVsQWRkZWQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBvbiByZW1vdmluZyBhIHBhbmVsIGZyb20gUGFuZWwgRHluYW1pYyBxdWVzdGlvbi5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gYSBwYW5lbCBxdWVzdGlvbi5cbiAgICogPGJyLz4gYG9wdGlvbnMucGFuZWxJbmRleGAgLSBhIHJlbW92ZWQgcGFuZWwgaW5kZXguXG4gICAqIDxici8+IGBvcHRpb25zLnBhbmVsYCAtIGEgcmVtb3ZlZCBwYW5lbC5cbiAgICogQHNlZSBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsXG4gICAqIEBzZWUgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wYW5lbHNcbiAgICovXG4gIHB1YmxpYyBvbkR5bmFtaWNQYW5lbFJlbW92ZWQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBldmVyeSBzZWNvbmQgaWYgdGhlIG1ldGhvZCBgc3RhcnRUaW1lcmAgaGFzIGJlZW4gY2FsbGVkLlxuICAgKiBAc2VlIHN0YXJ0VGltZXJcbiAgICogQHNlZSB0aW1lU3BlbnRcbiAgICogQHNlZSBQYWdlLnRpbWVTcGVudFxuICAgKi9cbiAgcHVibGljIG9uVGltZXI6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFN1cnZleU1vZGVsPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIGJlZm9yZSBkaXNwbGF5aW5nIGEgbmV3IGluZm9ybWF0aW9uIGluIHRoZSBUaW1lciBQYW5lbC4gVXNlIGl0IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCB0ZXh0LlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy50ZXh0YCAtIHRoZSB0aW1lciBwYW5lbCBpbmZvIHRleHQuXG4gICAqL1xuICBwdWJsaWMgb25UaW1lclBhbmVsSW5mb1RleHQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCB3aGVuIGl0ZW0gdmFsdWUgaXMgY2hhbmdlZCBpbiBQYW5lbCBEeW5hbWljIHF1ZXN0aW9uLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSB0aGUgcGFuZWwgcXVlc3Rpb24uXG4gICAqIDxici8+IGBvcHRpb25zLnBhbmVsYCAtIHRoZSBkeW5hbWljIHBhbmVsIGl0ZW0uXG4gICAqIDxici8+IGBvcHRpb25zLm5hbWVgIC0gdGhlIGl0ZW0gbmFtZS5cbiAgICogPGJyLz4gYG9wdGlvbnMudmFsdWVgIC0gYSBuZXcgdmFsdWUuXG4gICAqIDxici8+IGBvcHRpb25zLml0ZW1JbmRleGAgLSB0aGUgcGFuZWwgaXRlbSBpbmRleC5cbiAgICogPGJyLz4gYG9wdGlvbnMuaXRlbVZhbHVlYCAtIHRoZSBwYW5lbCBpdGVtIG9iamVjdC5cbiAgICogQHNlZSBvbkR5bmFtaWNQYW5lbEFkZGVkXG4gICAqIEBzZWUgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbFxuICAgKi9cbiAgcHVibGljIG9uRHluYW1pY1BhbmVsSXRlbVZhbHVlQ2hhbmdlZDogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVXNlIHRoaXMgZXZlbnQgdG8gZGVmaW5lLCB3aGV0aGVyIGFuIGFuc3dlciB0byBhIHF1ZXN0aW9uIGlzIGNvcnJlY3Qgb3Igbm90LlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSBhIHF1ZXN0aW9uIG9uIHdoaWNoIHlvdSBoYXZlIHRvIGRlY2lkZSBpZiB0aGUgYW5zd2VyIGlzIGNvcnJlY3Qgb3Igbm90LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5yZXN1bHRgIC0gcmV0dXJucyBgdHJ1ZWAsIGlmIGFuIGFuc3dlciBpcyBjb3JyZWN0LCBvciBgZmFsc2VgLCBpZiB0aGUgYW5zd2VyIGlzIG5vdCBjb3JyZWN0LiBVc2UgcXVlc3Rpb25zJyBgdmFsdWVgIGFuZCBgY29ycmVjdEFuc3dlcmAgcHJvcGVydGllcyB0byByZXR1cm4gdGhlIGNvcnJlY3QgdmFsdWUuXG4gICAqIDxici8+IGBvcHRpb25zLmNvcnJlY3RBbnN3ZXJzYCAtIHlvdSBtYXkgY2hhbmdlIHRoZSBkZWZhdWx0IG51bWJlciBvZiBjb3JyZWN0IG9yIGluY29ycmVjdCBhbnN3ZXJzIGluIHRoZSBxdWVzdGlvbiwgZm9yIGV4YW1wbGUgZm9yIG1hdHJpeCwgd2hlcmUgZWFjaCByb3cgaXMgYSBxdWl6IHF1ZXN0aW9uLlxuICAgKiBAc2VlIFF1ZXN0aW9uLnZhbHVlXG4gICAqIEBzZWUgUXVlc3Rpb24uY29ycmVjdEFuc3dlclxuICAgKi9cbiAgcHVibGljIG9uSXNBbnN3ZXJDb3JyZWN0OiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBldmVudCB0byBjb250cm9sIGRyYWcmZHJvcCBvcGVyYXRpb25zIGR1cmluZyBkZXNpZ24gbW9kZS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMuYWxsb3dgIC0gc2V0IGl0IHRvIGBmYWxzZWAgdG8gZGlzYWJsZSBkcmFnZ2luZy5cbiAgICogPGJyLz4gYG9wdGlvbnMudGFyZ2V0YCAtIGEgdGFyZ2V0IGVsZW1lbnQgdGhhdCBpcyBkcmFnZ2VkLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5zb3VyY2VgIC0gYSBzb3VyY2UgZWxlbWVudC4gSXQgY2FuIGJlIGBudWxsYCwgaWYgaXQgaXMgYSBuZXcgZWxlbWVudCwgZHJhZ2dpbmcgZnJvbSB0b29sYm94LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5wYXJlbnRgIC0gYSBwYWdlIG9yIHBhbmVsIHdoZXJlIHRhcmdldCBlbGVtZW50IGlzIGRyYWdnaW5nLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5pbnNlcnRCZWZvcmVgIC0gYW4gZWxlbWVudCBiZWZvcmUgdGhlIHRhcmdldCBlbGVtZW50IGlzIGRyYWdnaW5nLiBJdCBjYW4gYmUgYG51bGxgIGlmIHBhcmVudCBjb250YWluZXIgKHBhZ2Ugb3IgcGFuZWwpIGlzIGVtcHR5IG9yIGRyYWdnaW5nIGFuIGVsZW1lbnQgYWZ0ZXIgdGhlIGxhc3QgZWxlbWVudCBpbiBhIGNvbnRhaW5lci5cbiAgICogPGJyLz4gYG9wdGlvbnMuaW5zZXJ0QWZ0ZXJgIC0gYW4gZWxlbWVudCBhZnRlciB0aGUgdGFyZ2V0IGVsZW1lbnQgaXMgZHJhZ2dpbmcuIEl0IGNhbiBiZSBgbnVsbGAgaWYgcGFyZW50IGNvbnRhaW5lciAocGFnZSBvciBwYW5lbCkgaXMgZW1wdHkgb3IgZHJhZ2dpbmcgZWxlbWVudCB0byB0aGUgZmlyc3QgcG9zaXRpb24gd2l0aGluIHRoZSBwYXJlbnQgY29udGFpbmVyLlxuICAgKiBAc2VlIHNldERlc2lnbk1vZGVcbiAgICogQHNlZSBpc0Rlc2lnbk1vZGVcbiAgICovXG4gIHB1YmxpYyBvbkRyYWdEcm9wQWxsb3c6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFN1cnZleU1vZGVsPigpO1xuICAvKipcbiAgICogVXNlIHRoaXMgZXZlbnQgdG8gY29udHJvbCBzY3JvbGxpbmcgZWxlbWVudCB0byB0b3AuIFlvdSBjYW4gY2FuY2VsIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGJ5IHNldHRpbmcgb3B0aW9ucy5jYW5jZWwgcHJvcGVydHkgdG8gdHJ1ZS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMuZWxlbWVudGAgLSBhbiBlbGVtZW50IHRoYXQgaXMgZ29pbmcgdG8gYmUgc2Nyb2xsZWQgb24gdG9wLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSBhIHF1ZXN0aW9uIHRoYXQgaXMgZ29pbmcgdG8gYmUgc2Nyb2xsZWQgb24gdG9wLiBJdCBjYW4gYmUgbnVsbCBpZiBvcHRpb25zLnBhZ2UgaXMgbm90IG51bGwuXG4gICAqIDxici8+IGBvcHRpb25zLnBhZ2VgIC0gYSBwYWdlIHRoYXQgaXMgZ29pbmcgdG8gYmUgc2Nyb2xsZWQgb24gdG9wLiBJdCBjYW4gYmUgbnVsbCBpZiBvcHRpb25zLnF1ZXN0aW9uIGlzIG5vdCBudWxsLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5lbGVtZW50SWRgIC0gdGhlIHVuaXF1ZSBlbGVtZW50IERPTSBJZC5cbiAgICogPGJyLz4gYG9wdGlvbnMuY2FuY2VsYCAtIHNldCB0aGlzIHByb3BlcnR5IHRvIHRydWUgdG8gY2FuY2VsIHRoZSBkZWZhdWx0IHNjcm9sbGluZy5cbiAgICovXG4gIHB1YmxpYyBvblNjcm9sbGluZ0VsZW1lbnRUb1RvcDogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuXG4gIHB1YmxpYyBvbkxvY2FsZUNoYW5nZWRFdmVudDogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuXG4gIC8qKlxuICAgKiBVc2UgdGhpcyBldmVudCB0byBjcmVhdGUvY3VzdG9taXplIGFjdGlvbnMgdG8gYmUgZGlzcGxheWVkIGluIGEgcXVlc3Rpb24ncyB0aXRsZS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSBBIFtTdXJ2ZXldKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5P2lkPVN1cnZleU1vZGVsKSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIEEgW1F1ZXN0aW9uXShodHRwczovL3N1cnZleWpzLmlvL0RvY3VtZW50YXRpb24vTGlicmFyeT9pZD1RdWVzdGlvbikgb2JqZWN0IGZvciB3aGljaCB0aGUgZXZlbnQgaXMgZmlyZWQuXG4gICAqIDxici8+IGBvcHRpb25zLnRpdGxlQWN0aW9uc2AgLSBBIGxpc3Qgb2YgYWN0aW9ucyAoW0lBY3Rpb25dKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5P2lkPUlBY3Rpb24pIG9iamVjdHMpIGFzc29jaWF0ZWQgd2l0aCB0aGUgcHJvY2Vzc2VkIHF1ZXN0aW9uLlxuICAgKiBAc2VlIElBY3Rpb25cbiAgICogQHNlZSBRdWVzdGlvblxuICAgKi9cbiAgcHVibGljIG9uR2V0UXVlc3Rpb25UaXRsZUFjdGlvbnM6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFVzZSB0aGlzIGV2ZW50IHRvIGNyZWF0ZS9jdXN0b21pemUgYWN0aW9ucyB0byBiZSBkaXNwbGF5ZWQgaW4gYSBwYW5lbCdzIHRpdGxlLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIEEgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucGFuZWxgIC0gQSBwYW5lbCAoW1BhbmVsTW9kZWxdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5P2lkPXBhbmVsbW9kZWwpIG9iamVjdCkgZm9yIHdoaWNoIHRoZSBldmVudCBpcyBmaXJlZC5cbiAgICogPGJyLz4gYG9wdGlvbnMudGl0bGVBY3Rpb25zYCAtIEEgbGlzdCBvZiBhY3Rpb25zIChbSUFjdGlvbl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9Eb2N1bWVudGF0aW9uL0xpYnJhcnk/aWQ9SUFjdGlvbikgb2JqZWN0cykgYXNzb2NpYXRlZCB3aXRoIHRoZSBwcm9jZXNzZWQgcGFuZWwuXG4gICAqIEBzZWUgSUFjdGlvblxuICAgKiBAc2VlIFBhbmVsTW9kZWxcbiAgICovXG4gIHB1YmxpYyBvbkdldFBhbmVsVGl0bGVBY3Rpb25zOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBldmVudCB0byBjcmVhdGUvY3VzdG9taXplIGFjdGlvbnMgdG8gYmUgZGlzcGxheWVkIGluIGEgcGFnZSdzIHRpdGxlLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIEEgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucGFnZWAgLSBBIHBhZ2UgKFtQYWdlTW9kZWxdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5P2lkPXBhZ2Vtb2RlbCkgb2JqZWN0KSBmb3Igd2hpY2ggdGhlIGV2ZW50IGlzIGZpcmVkLlxuICAgKiA8YnIvPiBgb3B0aW9ucy50aXRsZUFjdGlvbnNgIC0gQSBsaXN0IG9mIGFjdGlvbnMgKFtJQWN0aW9uXShodHRwczovL3N1cnZleWpzLmlvL0RvY3VtZW50YXRpb24vTGlicmFyeT9pZD1JQWN0aW9uKSBvYmplY3RzKSBhc3NvY2lhdGVkIHdpdGggdGhlIHByb2Nlc3NlZCBwYWdlLlxuICAgKiBAc2VlIElBY3Rpb25cbiAgICogQHNlZSBQYWdlTW9kZWxcbiAgICovXG4gIHB1YmxpYyBvbkdldFBhZ2VUaXRsZUFjdGlvbnM6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFVzZSB0aGlzIGV2ZW50IHRvIGNyZWF0ZS9jdXN0b21pemUgYWN0aW9ucyB0byBiZSBkaXNwbGF5ZWQgaW4gYSBtYXRyaXggcXVlc3Rpb24ncyByb3cuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gQSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSBBIG1hdHJpeCBxdWVzdGlvbiAoW1F1ZXN0aW9uTWF0cml4QmFzZU1vZGVsXShodHRwczovL3N1cnZleWpzLmlvL0RvY3VtZW50YXRpb24vTGlicmFyeT9pZD1xdWVzdGlvbm1hdHJpeGJhc2Vtb2RlbCkgb2JqZWN0KSBmb3Igd2hpY2ggdGhlIGV2ZW50IGlzIGZpcmVkLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5yb3dgIC0gQSBtYXRyaXggcm93IGZvciB3aGljaCB0aGUgZXZlbnQgaXMgZmlyZWQuXG4gICAqIDxici8+IGBvcHRpb25zLmFjdGlvbnNgIC0gQSBsaXN0IG9mIGFjdGlvbnMgKFtJQWN0aW9uXShodHRwczovL3N1cnZleWpzLmlvL0RvY3VtZW50YXRpb24vTGlicmFyeT9pZD1JQWN0aW9uKSBvYmplY3RzKSBhc3NvY2lhdGVkIHdpdGggdGhlIHByb2Nlc3NlZCBtYXRyaXggcXVlc3Rpb24gYW5kIHJvdy5cbiAgICogQHNlZSBJQWN0aW9uXG4gICAqIEBzZWUgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZVxuICAgKi9cbiAgcHVibGljIG9uR2V0TWF0cml4Um93QWN0aW9uczogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIGFmdGVyIHRoZSBzdXJ2ZXkgZWxlbWVudCBjb250ZW50IHdhcyBjb2xsYXBzZWQgb3IgZXhwYW5kZWQuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLmVsZW1lbnRgIC0gU3BlY2lmaWVzIHdoaWNoIHN1cnZleSBlbGVtZW50IGNvbnRlbnQgd2FzIGNvbGxhcHNlZCBvciBleHBhbmRlZC5cbiAgICogQHNlZSBvbkVsZW1lbnRDb250ZW50VmlzaWJpbGl0eUNoYW5nZWRcbiAgICovXG4gIHB1YmxpYyBvbkVsZW1lbnRDb250ZW50VmlzaWJpbGl0eUNoYW5nZWQ6IEV2ZW50QmFzZTxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+ID0gdGhpcy5hZGRFdmVudDxTdXJ2ZXlNb2RlbD4oKTtcblxuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIGJlZm9yZSBleHByZXNzaW9uIHF1ZXN0aW9uIGNvbnZlcnQgaXQncyB2YWx1ZSBpbnRvIGRpc3BsYXkgdmFsdWUgZm9yIHJlbmRlcmluZy5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gVGhlIGV4cHJlc3Npb24gcXVlc3Rpb24uXG4gICAqIDxici8+IGBvcHRpb25zLnZhbHVlYCAtIFRoZSBxdWVzdGlvbiB2YWx1ZS5cbiAgICogPGJyLz4gYG9wdGlvbnMuZGlzcGxheVZhbHVlYCAtIHRoZSBkaXNwbGF5IHZhbHVlIHRoYXQgeW91IGNhbiBjaGFuZ2UgYmVmb3JlIHJlbmRlcmluZy5cbiAgICovXG4gIHB1YmxpYyBvbkdldEV4cHJlc3Npb25EaXNwbGF5VmFsdWU6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcblxuICAvLyNlbmRyZWdpb25cblxuICBjb25zdHJ1Y3Rvcihqc29uT2JqOiBhbnkgPSBudWxsKSB7XG4gICAgc3VwZXIoKTtcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBTdXJ2ZXlNb2RlbC5zdHlsZXNNYW5hZ2VyID0gbmV3IFN0eWxlc01hbmFnZXIoKTtcbiAgICB9XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInRpdGxlXCIsIHRoaXMsIHRydWUpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJkZXNjcmlwdGlvblwiLCB0aGlzLCB0cnVlKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwibG9nb1wiLCB0aGlzLCBmYWxzZSk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcImNvbXBsZXRlZEh0bWxcIiwgdGhpcyk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcImNvbXBsZXRlZEJlZm9yZUh0bWxcIiwgdGhpcyk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcImxvYWRpbmdIdG1sXCIsIHRoaXMpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJzdGFydFN1cnZleVRleHRcIiwgdGhpcyk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInBhZ2VQcmV2VGV4dFwiLCB0aGlzKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwicGFnZU5leHRUZXh0XCIsIHRoaXMpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJjb21wbGV0ZVRleHRcIiwgdGhpcyk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInByZXZpZXdUZXh0XCIsIHRoaXMpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJlZGl0VGV4dFwiLCB0aGlzKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwicXVlc3Rpb25UaXRsZVRlbXBsYXRlXCIsIHRoaXMsIHRydWUpO1xuXG4gICAgdGhpcy50ZXh0UHJlUHJvY2Vzc29yID0gbmV3IFRleHRQcmVQcm9jZXNzb3IoKTtcbiAgICB0aGlzLnRleHRQcmVQcm9jZXNzb3Iub25Qcm9jZXNzID0gKHRleHRWYWx1ZTogVGV4dFByZVByb2Nlc3NvclZhbHVlKSA9PiB7XG4gICAgICB0aGlzLmdldFByb2Nlc3NlZFRleHRWYWx1ZSh0ZXh0VmFsdWUpO1xuICAgIH07XG4gICAgdGhpcy5jcmVhdGVOZXdBcnJheShcbiAgICAgIFwicGFnZXNcIixcbiAgICAgICh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZG9PblBhZ2VBZGRlZCh2YWx1ZSk7XG4gICAgICB9LFxuICAgICAgKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5kb09uUGFnZVJlbW92ZWQodmFsdWUpO1xuICAgICAgfVxuICAgICk7XG4gICAgdGhpcy5jcmVhdGVOZXdBcnJheShcInRyaWdnZXJzXCIsICh2YWx1ZTogYW55KSA9PiB7XG4gICAgICB2YWx1ZS5zZXRPd25lcih0aGlzKTtcbiAgICB9KTtcbiAgICB0aGlzLmNyZWF0ZU5ld0FycmF5KFwiY2FsY3VsYXRlZFZhbHVlc1wiLCAodmFsdWU6IGFueSkgPT4ge1xuICAgICAgdmFsdWUuc2V0T3duZXIodGhpcyk7XG4gICAgfSk7XG4gICAgdGhpcy5jcmVhdGVOZXdBcnJheShcImNvbXBsZXRlZEh0bWxPbkNvbmRpdGlvblwiLCAodmFsdWU6IGFueSkgPT4ge1xuICAgICAgdmFsdWUubG9jT3duZXIgPSB0aGlzO1xuICAgIH0pO1xuICAgIHRoaXMuY3JlYXRlTmV3QXJyYXkoXCJuYXZpZ2F0ZVRvVXJsT25Db25kaXRpb25cIiwgKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgIHZhbHVlLmxvY093bmVyID0gdGhpcztcbiAgICB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFwiZmlyc3RQYWdlSXNTdGFydGVkXCIsICgpID0+IHtcbiAgICAgIHRoaXMub25GaXJzdFBhZ2VJc1N0YXJ0ZWRDaGFuZ2VkKCk7XG4gICAgfSk7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcIm1vZGVcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5vbk1vZGVDaGFuZ2VkKCk7XG4gICAgfSk7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcInByb2dyZXNzQmFyVHlwZVwiLCAoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVByb2dyZXNzVGV4dCgpO1xuICAgIH0pO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydGllc1ZhbHVlQ2hhbmdlZChcbiAgICAgIFtcInF1ZXN0aW9uU3RhcnRJbmRleFwiLCBcInJlcXVpcmVkVGV4dFwiLCBcInF1ZXN0aW9uVGl0bGVQYXR0ZXJuXCJdLFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLnJlc2V0VmlzaWJsZUluZGV4ZXMoKTtcbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMub25HZXRRdWVzdGlvbk5vLm9uQ2FsbGJhY2tzQ2hhbmdlZCA9ICgpID0+IHtcbiAgICAgIHRoaXMucmVzZXRWaXNpYmxlSW5kZXhlcygpO1xuICAgIH07XG4gICAgdGhpcy5vblByb2dyZXNzVGV4dC5vbkNhbGxiYWNrc0NoYW5nZWQgPSAoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVByb2dyZXNzVGV4dCgpO1xuICAgIH07XG4gICAgdGhpcy5vblRleHRNYXJrZG93bi5vbkNhbGxiYWNrc0NoYW5nZWQgPSAoKSA9PiB7XG4gICAgICB0aGlzLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgfTtcbiAgICB0aGlzLm9uR2V0UXVlc3Rpb25UaXRsZS5vbkNhbGxiYWNrc0NoYW5nZWQgPSAoKSA9PiB7XG4gICAgICB0aGlzLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgfTtcbiAgICB0aGlzLm9uQmVmb3JlQ3JlYXRpbmcoKTtcbiAgICBpZiAoanNvbk9iaikge1xuICAgICAgaWYgKHR5cGVvZiBqc29uT2JqID09PSBcInN0cmluZ1wiIHx8IGpzb25PYmogaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICAgICAganNvbk9iaiA9IEpTT04ucGFyc2UoanNvbk9iaiBhcyBzdHJpbmcpO1xuICAgICAgfVxuICAgICAgaWYgKGpzb25PYmogJiYganNvbk9iai5jbGllbnRJZCkge1xuICAgICAgICB0aGlzLmNsaWVudElkID0ganNvbk9iai5jbGllbnRJZDtcbiAgICAgIH1cbiAgICAgIHRoaXMuZnJvbUpTT04oanNvbk9iaik7XG4gICAgICBpZiAodGhpcy5zdXJ2ZXlJZCkge1xuICAgICAgICB0aGlzLmxvYWRTdXJ2ZXlGcm9tU2VydmljZSh0aGlzLnN1cnZleUlkLCB0aGlzLmNsaWVudElkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5vbkNyZWF0aW5nKCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgZXJyb3JzIG9uIGxvYWRpbmcgc3VydmV5IEpTT04uIElmIHRoZSBsaXN0IGlzIGVtcHR5IGFmdGVyIGxvYWRpbmcgYSBKU09OLCB0aGVuIHRoZSBKU09OIGlzIGNvcnJlY3QgYW5kIGhhcyBubyBlcnJvcnMuXG4gICAqIEBzZWUgSnNvbkVycm9yXG4gICAqL1xuICBwdWJsaWMganNvbkVycm9yczogQXJyYXk8SnNvbkVycm9yPiA9IG51bGw7XG5cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJzdXJ2ZXlcIjtcbiAgfVxuICBwcm90ZWN0ZWQgb25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChuYW1lOiBzdHJpbmcsIG9sZFZhbHVlOiBhbnksIG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBpZiAobmFtZSA9PT0gXCJxdWVzdGlvbnNPblBhZ2VNb2RlXCIpIHtcbiAgICAgIHRoaXMub25RdWVzdGlvbnNPblBhZ2VNb2RlQ2hhbmdlZChvbGRWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBsaXN0IG9mIGFsbCBwYWdlcyBpbiB0aGUgc3VydmV5LCBpbmNsdWRpbmcgaW52aXNpYmxlIHBhZ2VzLlxuICAgKiBAc2VlIFBhZ2VNb2RlbFxuICAgKiBAc2VlIHZpc2libGVQYWdlc1xuICAgKi9cbiAgcHVibGljIGdldCBwYWdlcygpOiBBcnJheTxQYWdlTW9kZWw+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicGFnZXNcIik7XG4gIH1cbiAgcHVibGljIGdldENzcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmNzcztcbiAgfVxuICBwcml2YXRlIGNzc1ZhbHVlOiBhbnkgPSBudWxsO1xuICBwdWJsaWMgZ2V0IGNzcygpOiBhbnkge1xuICAgIGlmICghdGhpcy5jc3NWYWx1ZSkge1xuICAgICAgdGhpcy5jc3NWYWx1ZSA9IHt9O1xuICAgICAgdGhpcy5jb3B5Q3NzQ2xhc3Nlcyh0aGlzLmNzc1ZhbHVlLCBzdXJ2ZXlDc3MuZ2V0Q3NzKCkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jc3NWYWx1ZTtcbiAgfVxuICBwdWJsaWMgc2V0IGNzcyh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy51cGRhdGVFbGVtZW50Q3NzKGZhbHNlKTtcbiAgICB0aGlzLm1lcmdlVmFsdWVzKHZhbHVlLCB0aGlzLmNzcyk7XG4gIH1cbiAgcHVibGljIGdldCBjc3NOYXZpZ2F0aW9uQ29tcGxldGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TmF2aWdhdGlvbkNzcyhcbiAgICAgIHRoaXMuY3NzLm5hdmlnYXRpb25CdXR0b24sXG4gICAgICB0aGlzLmNzcy5uYXZpZ2F0aW9uLmNvbXBsZXRlXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNzc05hdmlnYXRpb25QcmV2aWV3KCkge1xuICAgIHJldHVybiB0aGlzLmdldE5hdmlnYXRpb25Dc3MoXG4gICAgICB0aGlzLmNzcy5uYXZpZ2F0aW9uQnV0dG9uLFxuICAgICAgdGhpcy5jc3MubmF2aWdhdGlvbi5wcmV2aWV3XG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNzc05hdmlnYXRpb25FZGl0KCkge1xuICAgIHJldHVybiB0aGlzLmdldE5hdmlnYXRpb25Dc3MoXG4gICAgICB0aGlzLmNzcy5uYXZpZ2F0aW9uQnV0dG9uLFxuICAgICAgdGhpcy5jc3MubmF2aWdhdGlvbi5lZGl0XG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNzc05hdmlnYXRpb25QcmV2KCkge1xuICAgIHJldHVybiB0aGlzLmdldE5hdmlnYXRpb25Dc3MoXG4gICAgICB0aGlzLmNzcy5uYXZpZ2F0aW9uQnV0dG9uLFxuICAgICAgdGhpcy5jc3MubmF2aWdhdGlvbi5wcmV2XG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNzc05hdmlnYXRpb25TdGFydCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXROYXZpZ2F0aW9uQ3NzKFxuICAgICAgdGhpcy5jc3MubmF2aWdhdGlvbkJ1dHRvbixcbiAgICAgIHRoaXMuY3NzLm5hdmlnYXRpb24uc3RhcnRcbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXQgY3NzTmF2aWdhdGlvbk5leHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TmF2aWdhdGlvbkNzcyhcbiAgICAgIHRoaXMuY3NzLm5hdmlnYXRpb25CdXR0b24sXG4gICAgICB0aGlzLmNzcy5uYXZpZ2F0aW9uLm5leHRcbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXQgY29tcGxldGVkQ3NzKCkge1xuICAgIHZhciBjc3MgPSB0aGlzLmNzcztcbiAgICByZXR1cm4gY3NzLmJvZHkgKyBcIiBcIiArIGNzcy5jb21wbGV0ZWRQYWdlO1xuICB9XG4gIHByaXZhdGUgZ2V0TmF2aWdhdGlvbkNzcyhtYWluOiBzdHJpbmcsIGJ0bjogc3RyaW5nKSB7XG4gICAgdmFyIHJlcyA9IFwiXCI7XG4gICAgaWYgKG1haW4pIHJlcyA9IG1haW47XG4gICAgaWYgKGJ0bikgcmVzICs9IFwiIFwiICsgYnRuO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSBsYXp5UmVuZGVyaW5nVmFsdWU6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IGFsbCByb3dzIGFyZSByZW5kZXJlZCBubyBtYXR0ZXJzIGlmIHRoZXkgYXJlIHZpc2libGUgb3Igbm90LlxuICAgKiBTZXQgaXQgdHJ1ZSwgYW5kIHN1cnZleSBtYXJrdXAgcm93cyB3aWxsIGJlIHJlbmRlcmVkIG9ubHkgaWYgdGhleSBhcmUgdmlzaWJsZSBpbiB2aWV3cG9ydC5cbiAgICogVGhpcyBmZWF0dXJlIGlzIGV4cGVyaW1hbnRhbCBhbmQgbWlnaHQgZG8gbm90IHN1cHBvcnQgYWxsIHRoZSB1c2UgY2FzZXMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGxhenlSZW5kZXJpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubGF6eVJlbmRlcmluZ1ZhbHVlID09PSB0cnVlO1xuICB9XG4gIHB1YmxpYyBzZXQgbGF6eVJlbmRlcmluZyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmxhenlSZW5kZXJpbmdWYWx1ZSA9IHZhbDtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzTGF6eVJlbmRlcmluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5sYXp5UmVuZGVyaW5nIHx8IHNldHRpbmdzLmxhenlSb3dzUmVuZGVyaW5nO1xuICB9XG4gIHByaXZhdGUgdXBkYXRlTGF6eVJlbmRlcmluZ1Jvd3NPblJlbW92aW5nRWxlbWVudHMoKSB7XG4gICAgaWYgKCF0aGlzLmlzTGF6eVJlbmRlcmluZykgcmV0dXJuO1xuICAgIHZhciBwYWdlID0gdGhpcy5jdXJyZW50UGFnZTtcbiAgICBpZiAoISFwYWdlKSB7XG4gICAgICBzY3JvbGxFbGVtZW50QnlDaGlsZElkKHBhZ2UuaWQpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIGEgbGlzdCBvZiB0cmlnZ2VycyBpbiB0aGUgc3VydmV5LlxuICAgKiBAc2VlIFN1cnZleVRyaWdnZXJcbiAgICovXG4gIHB1YmxpYyBnZXQgdHJpZ2dlcnMoKTogQXJyYXk8U3VydmV5VHJpZ2dlcj4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ0cmlnZ2Vyc1wiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHRyaWdnZXJzKHZhbDogQXJyYXk8U3VydmV5VHJpZ2dlcj4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ0cmlnZ2Vyc1wiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSBsaXN0IG9mIGNhbGN1bGF0ZWQgdmFsdWVzIGluIHRoZSBzdXJ2ZXkuXG4gICAqIEBzZWUgQ2FsY3VsYXRlZFZhbHVlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNhbGN1bGF0ZWRWYWx1ZXMoKTogQXJyYXk8Q2FsY3VsYXRlZFZhbHVlPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNhbGN1bGF0ZWRWYWx1ZXNcIik7XG4gIH1cbiAgcHVibGljIHNldCBjYWxjdWxhdGVkVmFsdWVzKHZhbDogQXJyYXk8Q2FsY3VsYXRlZFZhbHVlPikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNhbGN1bGF0ZWRWYWx1ZXNcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIGFuIGlkZW50aWZpZXIgb2YgYSBzdXJ2ZXkgbW9kZWwgbG9hZGVkIGZyb20gdGhlIFthcGkuc3VydmV5anMuaW9dKGh0dHBzOi8vYXBpLnN1cnZleWpzLmlvKSBzZXJ2aWNlLiBXaGVuIHNwZWNpZmllZCwgdGhlIHN1cnZleSBKU09OIGlzIGF1dG9tYXRpY2FsbHkgbG9hZGVkIGZyb20gW2FwaS5zdXJ2ZXlqcy5pb10oaHR0cHM6Ly9hcGkuc3VydmV5anMuaW8pIHNlcnZpY2UuXG4gICAqIEBzZWUgbG9hZFN1cnZleUZyb21TZXJ2aWNlXG4gICAqIEBzZWUgb25Mb2FkZWRTdXJ2ZXlGcm9tU2VydmljZVxuICAgKi9cbiAgcHVibGljIGdldCBzdXJ2ZXlJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzdXJ2ZXlJZFwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHN1cnZleUlkKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic3VydmV5SWRcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIGFuIGlkZW50aWZpZXIgb2YgYSBzdXJ2ZXkgbW9kZWwgc2F2ZWQgdG8gdGhlIFthcGkuc3VydmV5anMuaW9dKGh0dHBzOi8vYXBpLnN1cnZleWpzLmlvKSBzZXJ2aWNlLiBXaGVuIHNwZWNpZmllZCwgdGhlIHN1cnZleSBkYXRhIGlzIGF1dG9tYXRpY2FsbHkgc2F2ZWQgdG8gdGhlIFthcGkuc3VydmV5anMuaW9dKGh0dHBzOi8vYXBpLnN1cnZleWpzLmlvKSBzZXJ2aWNlLlxuICAgKiBAc2VlIG9uQ29tcGxldGVcbiAgICogQHNlZSBzdXJ2ZXlTaG93RGF0YVNhdmluZ1xuICAgKi9cbiAgcHVibGljIGdldCBzdXJ2ZXlQb3N0SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic3VydmV5UG9zdElkXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgc3VydmV5UG9zdElkKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic3VydmV5UG9zdElkXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB1c2VyJ3MgaWRlbnRpZmllciAoZS5nLiwgZS1tYWlsIG9yIHVuaXF1ZSBjdXN0b21lciBpZCkgaW4geW91ciB3ZWIgYXBwbGljYXRpb24uXG4gICAqIElmIHlvdSBsb2FkIHN1cnZleSBvciBwb3N0IHN1cnZleSByZXN1bHRzIGZyb20vdG8gW2FwaS5zdXJ2ZXlqcy5pb10oaHR0cHM6Ly9hcGkuc3VydmV5anMuaW8pIHNlcnZpY2UsIHRoZW4gdGhlIGxpYnJhcnkgZG8gbm90IGFsbG93IHVzZXJzIHRvIHJ1biB0aGUgc2FtZSBzdXJ2ZXkgdGhlIHNlY29uZCB0aW1lLlxuICAgKiBPbiB0aGUgc2Vjb25kIHJ1biwgdGhlIHVzZXIgd2lsbCBzZWUgdGhlIHN1cnZleSBjb21wbGV0ZSBwYWdlLlxuICAgKi9cbiAgcHVibGljIGdldCBjbGllbnRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjbGllbnRJZFwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNsaWVudElkKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY2xpZW50SWRcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIGEgY29va2llIG5hbWUgdXNlZCB0byBzYXZlIGluZm9ybWF0aW9uIGFib3V0IGNvbXBsZXRpbmcgdGhlIHN1cnZleS5cbiAgICogSWYgdGhlIHByb3BlcnR5IGlzIG5vdCBlbXB0eSwgYmVmb3JlIHN0YXJ0aW5nIHRoZSBzdXJ2ZXksIHRoZSBTdXJ2ZXkgbGlicmFyeSBjaGVja3MgaWYgdGhlIGNvb2tpZSB3aXRoIHRoaXMgbmFtZSBleGlzdHMuXG4gICAqIElmIGl0IGlzIGB0cnVlYCwgdGhlIHN1cnZleSBnb2VzIHRvIGNvbXBsZXRlIG1vZGUgYW5kIGEgdXNlciBzZWVzIHRoZSBzdXJ2ZXkgY29tcGxldGUgcGFnZS4gT24gY29tcGxldGluZyB0aGUgc3VydmV5IHRoZSBjb29raWUgd2l0aCB0aGlzIG5hbWUgaXMgY3JlYXRlZC5cbiAgICovXG4gIHB1YmxpYyBnZXQgY29va2llTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjb29raWVOYW1lXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY29va2llTmFtZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNvb2tpZU5hbWVcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHdoZXRoZXIgdG8gc2F2ZSBzdXJ2ZXkgcmVzdWx0cyBvbiBjb21wbGV0aW5nIGV2ZXJ5IHBhZ2UuIElmIHRoZSBwcm9wZXJ0eSB2YWx1ZSBpcyBzZXQgdG8gYHRydWVgLCB0aGUgYG9uUGFydGlhbFNlbmRgIGV2ZW50IGlzIGZpcmVkLlxuICAgKiBAc2VlIG9uUGFydGlhbFNlbmRcbiAgICogQHNlZSBjbGllbnRJZFxuICAgKi9cbiAgcHVibGljIGdldCBzZW5kUmVzdWx0T25QYWdlTmV4dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2VuZFJlc3VsdE9uUGFnZU5leHRcIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2VuZFJlc3VsdE9uUGFnZU5leHQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2VuZFJlc3VsdE9uUGFnZU5leHRcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHdoZXRoZXIgdG8gc2hvdyB0aGUgcHJvZ3Jlc3Mgb24gc2F2aW5nL3NlbmRpbmcgZGF0YSBpbnRvIHRoZSBbYXBpLnN1cnZleWpzLmlvXShodHRwczovL2FwaS5zdXJ2ZXlqcy5pbykgc2VydmljZS5cbiAgICogQHNlZSBzdXJ2ZXlQb3N0SWRcbiAgICovXG4gIHB1YmxpYyBnZXQgc3VydmV5U2hvd0RhdGFTYXZpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInN1cnZleVNob3dEYXRhU2F2aW5nXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IHN1cnZleVNob3dEYXRhU2F2aW5nKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInN1cnZleVNob3dEYXRhU2F2aW5nXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB3aGV0aGVyIHRoZSBmaXJzdCBpbnB1dCBpcyBmb2N1c2VkIG9uIHNob3dpbmcgYSBuZXh0IG9yIGEgcHJldmlvdXMgcGFnZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgZm9jdXNGaXJzdFF1ZXN0aW9uQXV0b21hdGljKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJmb2N1c0ZpcnN0UXVlc3Rpb25BdXRvbWF0aWNcIiwgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIHNldCBmb2N1c0ZpcnN0UXVlc3Rpb25BdXRvbWF0aWModmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZm9jdXNGaXJzdFF1ZXN0aW9uQXV0b21hdGljXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB3aGV0aGVyIHRoZSBmaXJzdCBpbnB1dCBpcyBmb2N1c2VkIGlmIHRoZSBjdXJyZW50IHBhZ2UgaGFzIGVycm9ycy5cbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gYGZhbHNlYCAodGhlIGRlZmF1bHQgdmFsdWUgaXMgYHRydWVgKSBpZiB5b3UgZG8gbm90IHdhbnQgdG8gYnJpbmcgdGhlIGZvY3VzIHRvIHRoZSBmaXJzdCBxdWVzdGlvbiB0aGF0IGhhcyBlcnJvciBvbiB0aGUgcGFnZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgZm9jdXNPbkZpcnN0RXJyb3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImZvY3VzT25GaXJzdEVycm9yXCIsIHRydWUpO1xuICB9XG4gIHB1YmxpYyBzZXQgZm9jdXNPbkZpcnN0RXJyb3IodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZm9jdXNPbkZpcnN0RXJyb3JcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHRoZSBuYXZpZ2F0aW9uIGJ1dHRvbnMgcG9zaXRpb24uXG4gICAqIFBvc3NpYmxlIHZhbHVlczogJ2JvdHRvbScgKGRlZmF1bHQpLCAndG9wJywgJ2JvdGgnIGFuZCAnbm9uZScuIFNldCBpdCB0byAnbm9uZScgdG8gaGlkZSAnUHJldicsICdOZXh0JyBhbmQgJ0NvbXBsZXRlJyBidXR0b25zLlxuICAgKiBJdCBtYWtlcyBzZW5zZSBpZiB5b3UgYXJlIGdvaW5nIHRvIGNyZWF0ZSBhIGN1c3RvbSBuYXZpZ2F0aW9uLCBoYXZlIG9ubHkgYSBzaW5nbGUgcGFnZSwgb3IgdGhlIGBnb05leHRQYWdlQXV0b21hdGljYCBwcm9wZXJ0eSBpcyBzZXQgdG8gYHRydWVgLlxuICAgKiBAc2VlIGdvTmV4dFBhZ2VBdXRvbWF0aWNcbiAgICogQHNlZSBzaG93UHJldkJ1dHRvblxuICAgKi9cbiAgcHVibGljIGdldCBzaG93TmF2aWdhdGlvbkJ1dHRvbnMoKTogc3RyaW5nIHwgYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd05hdmlnYXRpb25CdXR0b25zXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2hvd05hdmlnYXRpb25CdXR0b25zKHZhbDogc3RyaW5nIHwgYW55KSB7XG4gICAgaWYgKHZhbCA9PT0gdHJ1ZSB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFsID0gXCJib3R0b21cIjtcbiAgICB9XG4gICAgaWYgKHZhbCA9PT0gZmFsc2UpIHtcbiAgICAgIHZhbCA9IFwibm9uZVwiO1xuICAgIH1cbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93TmF2aWdhdGlvbkJ1dHRvbnNcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHdoZXRoZXIgdGhlIFN1cnZleSBkaXNwbGF5cyBcIlByZXZcIiBidXR0b24gaW4gaXRzIHBhZ2VzLiBTZXQgaXQgdG8gYGZhbHNlYCB0byBwcmV2ZW50IGVuZC11c2VycyBmcm9tIGdvaW5nIGJhY2sgdG8gdGhlaXIgYW5zd2Vycy5cbiAgICogQHNlZSBzaG93TmF2aWdhdGlvbkJ1dHRvbnNcbiAgICovXG4gIHB1YmxpYyBnZXQgc2hvd1ByZXZCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dQcmV2QnV0dG9uXCIsIHRydWUpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2hvd1ByZXZCdXR0b24odmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1ByZXZCdXR0b25cIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHdoZXRoZXIgdGhlIFN1cnZleSBkaXNwbGF5cyBzdXJ2ZXkgdGl0bGUgaW4gaXRzIHBhZ2VzLiBTZXQgaXQgdG8gYGZhbHNlYCB0byBoaWRlIGEgc3VydmV5IHRpdGxlLlxuICAgKiBAc2VlIHRpdGxlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNob3dUaXRsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1RpdGxlXCIsIHRydWUpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2hvd1RpdGxlKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dUaXRsZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgd2hldGhlciB0aGUgU3VydmV5IGRpc3BsYXlzIHBhZ2UgdGl0bGVzLiBTZXQgaXQgdG8gYGZhbHNlYCB0byBoaWRlIHBhZ2UgdGl0bGVzLlxuICAgKiBAc2VlIFBhZ2VNb2RlbC50aXRsZVxuICAgKi9cbiAgcHVibGljIGdldCBzaG93UGFnZVRpdGxlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1BhZ2VUaXRsZXNcIiwgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIHNldCBzaG93UGFnZVRpdGxlcyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93UGFnZVRpdGxlc1wiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBPbiBmaW5pc2hpbmcgdGhlIHN1cnZleSB0aGUgY29tcGxldGUgcGFnZSBpcyBzaG93bi4gU2V0IHRoZSBwcm9wZXJ0eSB0byBgZmFsc2VgLCB0byBoaWRlIHRoZSBjb21wbGV0ZSBwYWdlLlxuICAgKiBAc2VlIGRhdGFcbiAgICogQHNlZSBvbkNvbXBsZXRlXG4gICAqIEBzZWUgbmF2aWdhdGVUb1VybFxuICAgKi9cbiAgcHVibGljIGdldCBzaG93Q29tcGxldGVkUGFnZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd0NvbXBsZXRlZFBhZ2VcIiwgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIHNldCBzaG93Q29tcGxldGVkUGFnZSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93Q29tcGxldGVkUGFnZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBhIHVybCB5b3Ugd2FudCB0byBuYXZpZ2F0ZSBhZnRlciBhIHVzZXIgY29tcGxldGluZyB0aGUgc3VydmV5LlxuICAgKiBCeSBkZWZhdWx0IGl0IHVzZXMgYWZ0ZXIgY2FsbGluZyBvbkNvbXBsZXRlIGV2ZW50LiBJbiBjYXNlIGNhbGxpbmcgb3B0aW9ucy5zaG93RGF0YVNhdmluZyBjYWxsYmFjayBpbiBvbkNvbXBsZXRlIGV2ZW50LCBuYXZpZ2F0ZVRvVXJsIHdpbGwgYmUgdXNlZCBvbiBjYWxsaW5nIG9wdGlvbnMuc2hvd0RhdGFTYXZpbmdTdWNjZXNzIGNhbGxiYWNrLlxuICAgKi9cbiAgcHVibGljIGdldCBuYXZpZ2F0ZVRvVXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm5hdmlnYXRlVG9VcmxcIik7XG4gIH1cbiAgcHVibGljIHNldCBuYXZpZ2F0ZVRvVXJsKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibmF2aWdhdGVUb1VybFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSBsaXN0IG9mIFVSTCBjb25kaXRpb24gaXRlbXMuIElmIHRoZSBleHByZXNzaW9uIG9mIHRoaXMgaXRlbSByZXR1cm5zIGB0cnVlYCwgdGhlbiBzdXJ2ZXkgd2lsbCBuYXZpZ2F0ZSB0byB0aGUgaXRlbSBVUkwuXG4gICAqIEBzZWUgVXJsQ29uZGl0aW9uSXRlbVxuICAgKiBAc2VlIG5hdmlnYXRlVG9VcmxcbiAgICovXG4gIHB1YmxpYyBnZXQgbmF2aWdhdGVUb1VybE9uQ29uZGl0aW9uKCk6IEFycmF5PFVybENvbmRpdGlvbkl0ZW0+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibmF2aWdhdGVUb1VybE9uQ29uZGl0aW9uXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbmF2aWdhdGVUb1VybE9uQ29uZGl0aW9uKHZhbDogQXJyYXk8VXJsQ29uZGl0aW9uSXRlbT4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJuYXZpZ2F0ZVRvVXJsT25Db25kaXRpb25cIiwgdmFsKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXROYXZpZ2F0ZVRvVXJsKCk6IHN0cmluZyB7XG4gICAgdmFyIGl0ZW0gPSB0aGlzLmdldEV4cHJlc3Npb25JdGVtT25SdW5Db25kaXRpb24oXG4gICAgICB0aGlzLm5hdmlnYXRlVG9VcmxPbkNvbmRpdGlvblxuICAgICk7XG4gICAgdmFyIHVybCA9ICEhaXRlbSA/ICg8VXJsQ29uZGl0aW9uSXRlbT5pdGVtKS51cmwgOiB0aGlzLm5hdmlnYXRlVG9Vcmw7XG4gICAgaWYgKCEhdXJsKSB7XG4gICAgICB1cmwgPSB0aGlzLnByb2Nlc3NUZXh0KHVybCwgdHJ1ZSk7XG4gICAgfVxuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgcHJpdmF0ZSBuYXZpZ2F0ZVRvKCkge1xuICAgIHZhciB1cmwgPSB0aGlzLmdldE5hdmlnYXRlVG9VcmwoKTtcbiAgICB2YXIgb3B0aW9ucyA9IHsgdXJsOiB1cmwgfTtcbiAgICB0aGlzLm9uTmF2aWdhdGVUb1VybC5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIGlmICghb3B0aW9ucy51cmwgfHwgdHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhd2luZG93LmxvY2F0aW9uKVxuICAgICAgcmV0dXJuO1xuICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gb3B0aW9ucy51cmw7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgcmVxdWlyZWQgcXVlc3Rpb24gbWFyay4gVGhlIHJlcXVpcmVkIHF1ZXN0aW9uIG1hcmsgaXMgYSBjaGFyIG9yIHN0cmluZyB0aGF0IGlzIHJlbmRlcmVkIGluIHRoZSByZXF1aXJlZCBxdWVzdGlvbnMnIHRpdGxlcy5cbiAgICogQHNlZSBRdWVzdGlvbi50aXRsZVxuICAgKi9cbiAgcHVibGljIGdldCByZXF1aXJlZFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicmVxdWlyZWRUZXh0XCIsIFwiKlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJlcXVpcmVkVGV4dCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJlcXVpcmVkVGV4dFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgd2hldGhlciB0byBoaWRlIGFsbCByZXF1aXJlZCBlcnJvcnMuXG4gICAqL1xuICBwdWJsaWMgaGlkZVJlcXVpcmVkRXJyb3JzOiBib29sZWFuID0gZmFsc2U7XG4gIGJlZm9yZVNldHRpbmdRdWVzdGlvbkVycm9ycyhcbiAgICBxdWVzdGlvbjogSVF1ZXN0aW9uLFxuICAgIGVycm9yczogQXJyYXk8U3VydmV5RXJyb3I+XG4gICk6IHZvaWQge1xuICAgIHRoaXMubWFha2VSZXF1aXJlZEVycm9yc0ludmlzaWJnbGUoZXJyb3JzKTtcbiAgICB0aGlzLm9uU2V0dGluZ1F1ZXN0aW9uRXJyb3JzLmZpcmUodGhpcywge1xuICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgZXJyb3JzOiBlcnJvcnMsXG4gICAgfSk7XG4gIH1cbiAgYmVmb3JlU2V0dGluZ1BhbmVsRXJyb3JzKHF1ZXN0aW9uOiBJUGFuZWwsIGVycm9yczogQXJyYXk8U3VydmV5RXJyb3I+KTogdm9pZCB7XG4gICAgdGhpcy5tYWFrZVJlcXVpcmVkRXJyb3JzSW52aXNpYmdsZShlcnJvcnMpO1xuICB9XG4gIHByaXZhdGUgbWFha2VSZXF1aXJlZEVycm9yc0ludmlzaWJnbGUoZXJyb3JzOiBBcnJheTxTdXJ2ZXlFcnJvcj4pIHtcbiAgICBpZiAoIXRoaXMuaGlkZVJlcXVpcmVkRXJyb3JzKSByZXR1cm47XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlcnJvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlclR5cGUgPSBlcnJvcnNbaV0uZ2V0RXJyb3JUeXBlKCk7XG4gICAgICBpZiAoZXJUeXBlID09IFwicmVxdWlyZWRcIiB8fCBlclR5cGUgPT0gXCJyZXF1aXJlb25lYW5zd2VyXCIpIHtcbiAgICAgICAgZXJyb3JzW2ldLnZpc2libGUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgZmlyc3QgcXVlc3Rpb24gaW5kZXguIFRoZSBmaXJzdCBxdWVzdGlvbiBpbmRleCBpcyAnMScgYnkgZGVmYXVsdC4gWW91IG1heSBzdGFydCBpdCBmcm9tICcxMDAnIG9yIGZyb20gJ0EnLCBieSBzZXR0aW5nICcxMDAnIG9yICdBJyB0byB0aGlzIHByb3BlcnR5LlxuICAgKiBZb3UgY2FuIHNldCB0aGUgc3RhcnQgaW5kZXggdG8gXCIoMSlcIiBvciBcIiMgQSlcIiBvciBcImEpXCIgdG8gcmVuZGVyIHF1ZXN0aW9uIG51bWJlciBhcyAoMSksICMgQSkgYW5kIGEpIGFjY29yZGluZ2x5LlxuICAgKiBAc2VlIFF1ZXN0aW9uLnRpdGxlXG4gICAqIEBzZWUgcmVxdWlyZWRUZXh0XG4gICAqL1xuICBwdWJsaWMgZ2V0IHF1ZXN0aW9uU3RhcnRJbmRleCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvblN0YXJ0SW5kZXhcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBxdWVzdGlvblN0YXJ0SW5kZXgodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvblN0YXJ0SW5kZXhcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHdoZXRoZXIgdGhlIFwiT3RoZXJzXCIgb3B0aW9uIHRleHQgaXMgc3RvcmVkIGFzIHF1ZXN0aW9uIGNvbW1lbnQuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQgdGhlIGVudGVyZWQgdGV4dCBpbiB0aGUgXCJPdGhlcnNcIiBpbnB1dCBpbiB0aGUgY2hlY2tib3gvcmFkaW9ncm91cC9kcm9wZG93biBpcyBzdG9yZWQgYXMgYFwicXVlc3Rpb24gbmFtZSBcIiArIFwiLUNvbW1lbnRcImAuIFRoZSB2YWx1ZSBpdHNlbGYgaXMgYFwicXVlc3Rpb24gbmFtZVwiOiBcIm90aGVyc1wiYC5cbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gYGZhbHNlYCwgdG8gc3RvcmUgdGhlIGVudGVyZWQgdGV4dCBkaXJlY3RseSBpbiB0aGUgYFwicXVlc3Rpb24gbmFtZVwiYCBrZXkuXG4gICAqIEBzZWUgY29tbWVudFByZWZpeFxuICAgKi9cbiAgcHVibGljIGdldCBzdG9yZU90aGVyc0FzQ29tbWVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic3RvcmVPdGhlcnNBc0NvbW1lbnRcIiwgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIHNldCBzdG9yZU90aGVyc0FzQ29tbWVudCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzdG9yZU90aGVyc0FzQ29tbWVudFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIGRlZmF1bHQgbWF4aW11bSBsZW5ndGggZm9yIHF1ZXN0aW9ucyBsaWtlIHRleHQgYW5kIGNvbW1lbnQsIGluY2x1ZGluZyBtYXRyaXggY2VsbCBxdWVzdGlvbnMuXG4gICAqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGAwYCwgdGhhdCBtZWFucyB0aGF0IHRoZSB0ZXh0IGFuZCBjb21tZW50IGhhdmUgdGhlIHNhbWUgbWF4IGxlbmd0aCBhcyB0aGUgc3RhbmRhcmQgSFRNTCBpbnB1dCAtIDUyNDI4OCBjaGFyYWN0ZXJzOiBodHRwczovL3d3dy53M3NjaG9vbHMuY29tL3RhZ3MvYXR0X2lucHV0X21heGxlbmd0aC5hc3AuXG4gICAqIEBzZWUgbWF4T3RoZXJzTGVuZ3RoXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1heFRleHRMZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWF4VGV4dExlbmd0aFwiLCAwKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1heFRleHRMZW5ndGgodmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtYXhUZXh0TGVuZ3RoXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgZGVmYXVsdCBtYXhpbXVtIGxlbmd0aCBmb3IgcXVlc3Rpb24gY29tbWVudHMgYW5kIG90aGVyc1xuICAgKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgMGAsIHRoYXQgbWVhbnMgdGhhdCB0aGUgcXVlc3Rpb24gY29tbWVudHMgaGF2ZSB0aGUgc2FtZSBtYXggbGVuZ3RoIGFzIHRoZSBzdGFuZGFyZCBIVE1MIGlucHV0IC0gNTI0Mjg4IGNoYXJhY3RlcnM6IGh0dHBzOi8vd3d3Lnczc2Nob29scy5jb20vdGFncy9hdHRfaW5wdXRfbWF4bGVuZ3RoLmFzcC5cbiAgICogQHNlZSBRdWVzdGlvbi5oYXNDb21tZW50XG4gICAqIEBzZWUgUXVlc3Rpb24uaGFzT3RoZXJcbiAgICogQHNlZSBtYXhUZXh0TGVuZ3RoXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1heE90aGVyc0xlbmd0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtYXhPdGhlcnNMZW5ndGhcIiwgMCk7XG4gIH1cbiAgcHVibGljIHNldCBtYXhPdGhlcnNMZW5ndGgodmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtYXhPdGhlcnNMZW5ndGhcIiwgdmFsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIG9yIHNlcyB3aGV0aGVyIGEgdXNlciBjYW4gbmF2aWdhdGUgdGhlIG5leHQgcGFnZSBhdXRvbWF0aWNhbGx5IGFmdGVyIGFuc3dlcmluZyBhbGwgdGhlIHF1ZXN0aW9ucyBvbiBhIHBhZ2Ugd2l0aG91dCBwcmVzc2luZyB0aGUgXCJOZXh0XCIgYnV0dG9uLlxuICAgKiBUaGUgYXZhaWxhYmxlIG9wdGlvbnM6XG4gICAqXG4gICAqIC0gYHRydWVgIC0gbmF2aWdhdGUgdGhlIG5leHQgcGFnZSBhbmQgc3VibWl0IHN1cnZleSBkYXRhIGF1dG9tYXRpY2FsbHkuXG4gICAqIC0gYGF1dG9nb25leHRgIC0gbmF2aWdhdGUgdGhlIG5leHQgcGFnZSBhdXRvbWF0aWNhbGx5IGJ1dCBkbyBub3Qgc3VibWl0IHN1cnZleSBkYXRhLlxuICAgKiAtIGBmYWxzZWAgLSBkbyBub3QgbmF2aWdhdGUgdGhlIG5leHQgcGFnZSBhbmQgZG8gbm90IHN1Ym1pdCBzdXJ2ZXkgZGF0YSBhdXRvbWF0aWNhbGx5LlxuICAgKiBAc2VlIHNob3dOYXZpZ2F0aW9uQnV0dG9uc1xuICAgKi9cbiAgcHVibGljIGdldCBnb05leHRQYWdlQXV0b21hdGljKCk6IGJvb2xlYW4gfCBcImF1dG9nb25leHRcIiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImdvTmV4dFBhZ2VBdXRvbWF0aWNcIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXQgZ29OZXh0UGFnZUF1dG9tYXRpYyh2YWw6IGJvb2xlYW4gfCBcImF1dG9nb25leHRcIikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImdvTmV4dFBhZ2VBdXRvbWF0aWNcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHdoZXRoZXIgYSBzdXJ2ZXkgaXMgYXV0b21hdGljYWxseSBjb21wbGV0ZWQgd2hlbiBgZ29OZXh0UGFnZUF1dG9tYXRpYyA9IHRydWVgLiBTZXQgaXQgdG8gYGZhbHNlYCBpZiB5b3UgZG8gbm90IHdhbnQgdG8gc3VibWl0IHN1cnZleSBhdXRvbWF0aWNhbGx5IG9uIGNvbXBsZXRpbmcgdGhlIGxhc3Qgc3VydmV5IHBhZ2UuXG4gICAqIEBzZWUgZ29OZXh0UGFnZUF1dG9tYXRpY1xuICAgKi9cbiAgcHVibGljIGdldCBhbGxvd0NvbXBsZXRlU3VydmV5QXV0b21hdGljKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJhbGxvd0NvbXBsZXRlU3VydmV5QXV0b21hdGljXCIsIHRydWUpO1xuICB9XG4gIHB1YmxpYyBzZXQgYWxsb3dDb21wbGV0ZVN1cnZleUF1dG9tYXRpYyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJhbGxvd0NvbXBsZXRlU3VydmV5QXV0b21hdGljXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIHZhbHVlIHRoYXQgc3BlY2lmaWVzIGhvdyB0aGUgc3VydmV5IHZhbGlkYXRlcyB0aGUgcXVlc3Rpb24gYW5zd2Vycy5cbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhdmFpbGFibGU6XG4gICAqXG4gICAqIC0gYG9uTmV4dFBhZ2VgIChkZWZhdWx0KSAtIGNoZWNrIGVycm9ycyBvbiBuYXZpZ2F0aW5nIHRvIHRoZSBuZXh0IHBhZ2Ugb3Igb24gY29tcGxldGluZyB0aGUgc3VydmV5LlxuICAgKiAtIGBvblZhbHVlQ2hhbmdlZGAgLSBjaGVjayBlcnJvcnMgb24gZXZlcnkgcXVlc3Rpb24gdmFsdWUgKGkuZS4sIGFuc3dlcikgY2hhbmdpbmcuXG4gICAqIC0gYG9uVmFsdWVDaGFuZ2luZ2AgLSBjaGVjayBlcnJvcnMgYmVmb3JlIHNldHRpbmcgdmFsdWUgaW50byBzdXJ2ZXkuIElmIHRoZXJlIGlzIGFuIGVycm9yLCB0aGVuIHN1cnZleSBkYXRhIGlzIG5vdCBjaGFuZ2VkLCBidXQgcXVlc3Rpb24gdmFsdWUgd2lsbCBiZSBrZWVwZWQuXG4gICAqIC0gYG9uQ29tcGxldGVgIC0gdG8gdmFsaWRhdGUgYWxsIHZpc2libGUgcXVlc3Rpb25zIG9uIGNvbXBsZXRlIGJ1dHRvbiBjbGljay4gSWYgdGhlcmUgYXJlIGVycm9ycyBvbiBwcmV2aW91cyBwYWdlcywgdGhlbiB0aGUgcGFnZSB3aXRoIHRoZSBmaXJzdCBlcnJvciBiZWNvbWVzIHRoZSBjdXJyZW50LlxuICAgKi9cbiAgcHVibGljIGdldCBjaGVja0Vycm9yc01vZGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY2hlY2tFcnJvcnNNb2RlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY2hlY2tFcnJvcnNNb2RlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY2hlY2tFcnJvcnNNb2RlXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIHZhbHVlIHRoYXQgc3BlY2lmaWVzIGhvdyB0aGUgc3VydmV5IHVwZGF0ZXMgaXRzIHF1ZXN0aW9ucycgdGV4dCB2YWx1ZXMuXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlOlxuICAgKlxuICAgKiAtIGBvbkJsdXJgIChkZWZhdWx0KSAtIHRoZSB2YWx1ZSBpcyB1cGRhdGVkIGFmdGVyIGFuIGlucHV0IGxvc2VzIHRoZSBmb2N1cy5cbiAgICogLSBgb25UeXBpbmdgIC0gdXBkYXRlIHRoZSB2YWx1ZSBvZiB0ZXh0IHF1ZXN0aW9ucywgXCJ0ZXh0XCIgYW5kIFwiY29tbWVudFwiLCBvbiBldmVyeSBrZXkgcHJlc3MuXG4gICAqXG4gICAqIE5vdGUsIHRoYXQgc2V0dGluZyB0byBcIm9uVHlwaW5nXCIgbWF5IGxlYWQgdG8gYSBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiwgaW4gY2FzZSB5b3UgaGF2ZSBtYW55IGV4cHJlc3Npb25zIGluIHRoZSBzdXJ2ZXkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHRleHRVcGRhdGVNb2RlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInRleHRVcGRhdGVNb2RlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdGV4dFVwZGF0ZU1vZGUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ0ZXh0VXBkYXRlTW9kZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSB2YWx1ZSB0aGF0IHNwZWNpZmllcyBob3cgdGhlIGludmlzaWJsZSBkYXRhIGlzIGluY2x1ZGVkIGluIHN1cnZleSBkYXRhLlxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZTpcbiAgICpcbiAgICogLSBgbm9uZWAgLSBpbmNsdWRlIHRoZSBpbnZpc2libGUgdmFsdWVzIGludG8gdGhlIHN1cnZleSBkYXRhLlxuICAgKiAtIGBvbkhpZGRlbmAgLSBjbGVhciB0aGUgcXVlc3Rpb24gdmFsdWUgd2hlbiBpdCBiZWNvbWVzIGludmlzaWJsZS4gSWYgYSBxdWVzdGlvbiBoYXMgdmFsdWUgYW5kIGl0IHdhcyBpbnZpc2libGUgaW5pdGlhbGx5IHRoZW4gc3VydmV5IGNsZWFycyB0aGUgdmFsdWUgb24gY29tcGxldGluZy5cbiAgICogLSBgb25IaWRkZW5Db250YWluZXJgIC0gY2xlYXIgdGhlIHF1ZXN0aW9uIHZhbHVlIHdoZW4gaXQgb3IgaXRzIHBhcmVudCAocGFnZSBvciBwYW5lbCkgYmVjb21lcyBpbnZpc2libGUuIElmIGEgcXVlc3Rpb24gaGFzIHZhbHVlIGFuZCBpdCB3YXMgaW52aXNpYmxlIGluaXRpYWxseSB0aGVuIHN1cnZleSBjbGVhcnMgdGhlIHZhbHVlIG9uIGNvbXBsZXRpbmcuXG4gICAqIC0gYG9uQ29tcGxldGVgIChkZWZhdWx0KSAtIGNsZWFyIGludmlzaWJsZSBxdWVzdGlvbiB2YWx1ZXMgb24gc3VydmV5IGNvbXBsZXRlLiBJbiB0aGlzIGNhc2UsIHRoZSBpbnZpc2libGUgcXVlc3Rpb25zIHdpbGwgbm90IGJlIHN0b3JlZCBvbiB0aGUgc2VydmVyLlxuICAgKiBAc2VlIFF1ZXN0aW9uLnZpc2libGVcbiAgICogQHNlZSBvbkNvbXBsZXRlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNsZWFySW52aXNpYmxlVmFsdWVzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNsZWFySW52aXNpYmxlVmFsdWVzXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY2xlYXJJbnZpc2libGVWYWx1ZXModmFsOiBhbnkpIHtcbiAgICBpZiAodmFsID09PSB0cnVlKSB2YWwgPSBcIm9uQ29tcGxldGVcIjtcbiAgICBpZiAodmFsID09PSBmYWxzZSkgdmFsID0gXCJub25lXCI7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY2xlYXJJbnZpc2libGVWYWx1ZXNcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogQ2FsbCB0aGlzIGZ1bmN0aW9uIHRvIHJlbW92ZSBhbGwgcXVlc3Rpb24gdmFsdWVzIGZyb20gdGhlIHN1cnZleSwgdGhhdCBlbmQtdXNlciB3aWxsIG5vdCBiZSBhYmxlIHRvIGVudGVyLlxuICAgKiBGb3IgZXhhbXBsZSB0aGUgdmFsdWUgdGhhdCBkb2Vzbid0IGV4aXN0cyBpbiBhIHJhZGlvZ3JvdXAvZHJvcGRvd24vY2hlY2tib3ggY2hvaWNlcyBvciBtYXRyaXggcm93cy9jb2x1bW5zLlxuICAgKiBQbGVhc2Ugbm90ZSwgdGhpcyBmdW5jdGlvbiBkb2Vzbid0IGNsZWFyIHZhbHVlcyBmb3IgaW52aXNpYmxlIHF1ZXN0aW9ucyBvciB2YWx1ZXMgdGhhdCBkb2Vzbid0IGFzc29jaWF0ZWQgd2l0aCBxdWVzdGlvbnMuXG4gICAqIEluIGZhY3QgdGhpcyBmdW5jdGlvbiBqdXN0IGNhbGwgY2xlYXJJbmNvcnJlY3RWYWx1ZXMgZnVuY3Rpb24gb2YgYWxsIHF1ZXN0aW9ucyBpbiB0aGUgc3VydmV5XG4gICAqIEBwYXJhbSByZW1vdmVOb25FeGlzaW5nUm9vdEtleXMgLSBzZXQgdGhpcyBwYXJhbWV0ZXIgdG8gdHJ1ZSB0byByZW1vdmUga2V5cyBmcm9tIHN1cnZleS5kYXRhIHRoYXQgZG9lc24ndCBoYXZlIGNvcnJlc3BvbmRlZCBxdWVzdGlvbnMgYW5kIGNhbGN1bGF0ZWQgdmFsdWVzXG4gICAqIEBzZWUgUXVlc3Rpb24uY2xlYXJJbmNvcnJlY3RWYWx1ZXNcbiAgICogQHNlZSBQYWdlLmNsZWFySW5jb3JyZWN0VmFsdWVzXG4gICAqIEBzZWUgUGFuZWwuY2xlYXJJbmNvcnJlY3RWYWx1ZXNcbiAgICovXG4gIHB1YmxpYyBjbGVhckluY29ycmVjdFZhbHVlcyhyZW1vdmVOb25FeGlzaW5nUm9vdEtleXM6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5wYWdlc1tpXS5jbGVhckluY29ycmVjdFZhbHVlcygpO1xuICAgIH1cbiAgICBpZiAoIXJlbW92ZU5vbkV4aXNpbmdSb290S2V5cykgcmV0dXJuO1xuICAgIHZhciBkYXRhID0gdGhpcy5kYXRhO1xuICAgIHZhciBoYXNDaGFuZ2VzID0gZmFsc2U7XG4gICAgZm9yICh2YXIga2V5IGluIGRhdGEpIHtcbiAgICAgIGlmICghIXRoaXMuZ2V0UXVlc3Rpb25CeVZhbHVlTmFtZShrZXkpKSBjb250aW51ZTtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pc2NvcnJlY3RWYWx1ZVdpdGhQb3N0UHJlZml4KGtleSwgc2V0dGluZ3MuY29tbWVudFByZWZpeCkgfHxcbiAgICAgICAgdGhpcy5pc2NvcnJlY3RWYWx1ZVdpdGhQb3N0UHJlZml4KGtleSwgc2V0dGluZ3MubWF0cml4VG90YWxWYWx1ZVBvc3RGaXgpXG4gICAgICApXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgdmFyIGNhbGNWYWx1ZSA9IHRoaXMuZ2V0Q2FsY3VsYXRlZFZhbHVlQnlOYW1lKGtleSk7XG4gICAgICBpZiAoISFjYWxjVmFsdWUgJiYgY2FsY1ZhbHVlLmluY2x1ZGVJbnRvUmVzdWx0KSBjb250aW51ZTtcbiAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuICAgICAgZGVsZXRlIGRhdGFba2V5XTtcbiAgICB9XG4gICAgaWYgKGhhc0NoYW5nZXMpIHtcbiAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgaXNjb3JyZWN0VmFsdWVXaXRoUG9zdFByZWZpeChcbiAgICBrZXk6IHN0cmluZyxcbiAgICBwb3N0UHJlZml4OiBzdHJpbmdcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKGtleS5pbmRleE9mKHBvc3RQcmVmaXgpICE9PSBrZXkubGVuZ3RoIC0gcG9zdFByZWZpeC5sZW5ndGgpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICEhdGhpcy5nZXRRdWVzdGlvbkJ5VmFsdWVOYW1lKFxuICAgICAga2V5LnN1YnN0cigwLCBrZXkuaW5kZXhPZihwb3N0UHJlZml4KSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgc3VydmV5IGxvY2FsZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXQgaXMgZW1wdHksIHRoaXMgbWVhbnMgdGhlICdlbicgbG9jYWxlIGlzIHVzZWQuXG4gICAqIFlvdSBjYW4gc2V0IGl0IHRvICdkZScgLSBHZXJtYW4sICdmcicgLSBGcmVuY2ggYW5kIHNvIG9uLiBUaGUgbGlicmFyeSBoYXMgYnVpbHQtaW4gbG9jYWxpemF0aW9uIGZvciBzZXZlcmFsIGxhbmd1YWdlcy4gVGhlIGxpYnJhcnkgaGFzIGEgbXVsdGktbGFuZ3VhZ2Ugc3VwcG9ydCBhcyB3ZWxsLlxuICAgKi9cbiAgcHVibGljIGdldCBsb2NhbGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbGVWYWx1ZTtcbiAgfVxuICBwdWJsaWMgc2V0IGxvY2FsZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgc3VydmV5TG9jYWxpemF0aW9uLmN1cnJlbnRMb2NhbGUgPSB2YWx1ZTtcbiAgICB0aGlzLmxvY2FsZVZhbHVlID0gc3VydmV5TG9jYWxpemF0aW9uLmN1cnJlbnRMb2NhbGU7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibG9jYWxlXCIsIHRoaXMubG9jYWxlVmFsdWUpO1xuICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSByZXR1cm47XG4gICAgdGhpcy5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIHRoaXMubG9jYWxlQ2hhbmdlZCgpO1xuICAgIHRoaXMub25Mb2NhbGVDaGFuZ2VkRXZlbnQuZmlyZSh0aGlzLCB2YWx1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gYXJyYXkgb2YgbG9jYWxlcyB0aGF0IGFyZSB1c2VkIGluIHRoZSBzdXJ2ZXkncyB0cmFuc2xhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBnZXRVc2VkTG9jYWxlcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICB2YXIgbG9jcyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gICAgdGhpcy5hZGRVc2VkTG9jYWxlcyhsb2NzKTtcbiAgICAvL1JlcGxhY2UgdGhlIGRlZmF1bHQgbG9jYWxlIHdpdGggdGhlIHJlYWwgb25lXG4gICAgdmFyIGluZGV4ID0gbG9jcy5pbmRleE9mKFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgdmFyIGRlZmF1bHRMb2MgPSBzdXJ2ZXlMb2NhbGl6YXRpb24uZGVmYXVsdExvY2FsZTtcbiAgICAgIC8vUmVtb3ZlIHRoZSBkZWZhdWx0TG9jXG4gICAgICB2YXIgZGVmSW5kZXggPSBsb2NzLmluZGV4T2YoZGVmYXVsdExvYyk7XG4gICAgICBpZiAoZGVmSW5kZXggPiAtMSkge1xuICAgICAgICBsb2NzLnNwbGljZShkZWZJbmRleCwgMSk7XG4gICAgICB9XG4gICAgICBpbmRleCA9IGxvY3MuaW5kZXhPZihcImRlZmF1bHRcIik7XG4gICAgICBsb2NzW2luZGV4XSA9IGRlZmF1bHRMb2M7XG4gICAgfVxuICAgIHJldHVybiBsb2NzO1xuICB9XG4gIHB1YmxpYyBsb2NhbGVDaGFuZ2VkKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5wYWdlc1tpXS5sb2NhbGVDaGFuZ2VkKCk7XG4gICAgfVxuICB9XG4gIC8vSUxvY2FsaXphYmxlT3duZXJcbiAgZ2V0TG9jYWxlKCkge1xuICAgIHJldHVybiB0aGlzLmxvY2FsZTtcbiAgfVxuICBwdWJsaWMgbG9jU3Ryc0NoYW5nZWQoKSB7XG4gICAgc3VwZXIubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICAvL0RvIG5vdCBzZXQgY3VycmVudCBwYWdlIGlmIGl0IGlzIG5vdCBzZXQgeWV0LlxuICAgIC8vQXQgZmlyc3Qgd2UgZG8gbm90IG5lZWQgdGhpcywgYXQgc2Vjb25kIGl0IGNyZWF0ZXMgaXNzdWVzIHdpdGggVnVlIENMSSBwcm9qZWN0c1xuICAgIC8vTW9yZSBpbmZvcm1hdGlvbiBoZXJlOiBodHRwczovL2dpdGh1Yi5jb20vc3VydmV5anMvc3VydmV5LWxpYnJhcnkvaXNzdWVzLzI1OTlcbiAgICBpZiAoIXRoaXMuY3VycmVudFBhZ2VWYWx1ZSkgcmV0dXJuO1xuICAgIHRoaXMudXBkYXRlUHJvZ3Jlc3NUZXh0KCk7XG4gICAgdmFyIHBhZ2UgPSB0aGlzLmFjdGl2ZVBhZ2U7XG4gICAgaWYgKCEhcGFnZSkge1xuICAgICAgcGFnZS5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRNYXJrZG93bkh0bWwodGV4dDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFN1cnZleU1hcmtkb3duSHRtbCh0aGlzLCB0ZXh0LCBuYW1lKTtcbiAgfVxuICBwdWJsaWMgZ2V0UmVuZGVyZXIobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRSZW5kZXJlckZvclN0cmluZyh0aGlzLCBuYW1lKTtcbiAgfVxuICBwdWJsaWMgZ2V0UmVuZGVyZXJGb3JTdHJpbmcoZWxlbWVudDogQmFzZSwgbmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCByZW5kZXJBcyA9IHRoaXMuZ2V0QnVpbHRJblJlbmRlcmVyRm9yU3RyaW5nKGVsZW1lbnQsIG5hbWUpO1xuICAgIHZhciBvcHRpb25zID0geyBlbGVtZW50OiBlbGVtZW50LCBuYW1lOiBuYW1lLCByZW5kZXJBczogcmVuZGVyQXMgfTtcbiAgICB0aGlzLm9uVGV4dFJlbmRlckFzLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wdGlvbnMucmVuZGVyQXM7XG4gIH1cbiAgZ2V0RXhwcmVzc2lvbkRpc3BsYXlWYWx1ZShcbiAgICBxdWVzdGlvbjogSVF1ZXN0aW9uLFxuICAgIHZhbHVlOiBhbnksXG4gICAgZGlzcGxheVZhbHVlOiBzdHJpbmdcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZGlzcGxheVZhbHVlOiBkaXNwbGF5VmFsdWUsXG4gICAgfTtcbiAgICB0aGlzLm9uR2V0RXhwcmVzc2lvbkRpc3BsYXlWYWx1ZS5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIHJldHVybiBvcHRpb25zLmRpc3BsYXlWYWx1ZTtcbiAgfVxuICBwcml2YXRlIGdldEJ1aWx0SW5SZW5kZXJlckZvclN0cmluZyhlbGVtZW50OiBCYXNlLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSkgcmV0dXJuIExvY2FsaXphYmxlU3RyaW5nLmVkaXRhYmxlUmVuZGVyZXI7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBwdWJsaWMgZ2V0UHJvY2Vzc2VkVGV4dCh0ZXh0OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzVGV4dCh0ZXh0LCB0cnVlKTtcbiAgfVxuICBnZXRMb2NTdHJpbmcoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhzdHIpO1xuICB9XG4gIC8vSVN1cnZleUVycm9yT3duZXJcbiAgZ2V0RXJyb3JDdXN0b21UZXh0KHRleHQ6IHN0cmluZywgZXJyb3I6IFN1cnZleUVycm9yKTogc3RyaW5nIHtcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIHRleHQ6IHRleHQsXG4gICAgICBuYW1lOiBlcnJvci5nZXRFcnJvclR5cGUoKSxcbiAgICAgIGVycm9yOiBlcnJvcixcbiAgICB9O1xuICAgIHRoaXMub25FcnJvckN1c3RvbVRleHQuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICByZXR1cm4gb3B0aW9ucy50ZXh0O1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0ZXh0IHRoYXQgaXMgZGlzcGxheWVkIHdoZW4gdGhlcmUgYXJlIG5vIGFueSB2aXNpYmxlIHBhZ2VzIGFuZCBxdWVzdGlvbmEuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGVtcHR5U3VydmV5VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY1N0cmluZyhcImVtcHR5U3VydmV5XCIpO1xuICB9XG5cbiAgLy8jcmVnaW9uIFRpdGxlL0hlYWRlciBvcHRpb25zXG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSBzdXJ2ZXkgdGl0bGUuXG4gICAqIEBzZWUgZGVzY3JpcHRpb25cbiAgICovXG4gIHB1YmxpYyBnZXQgdGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJ0aXRsZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHRpdGxlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInRpdGxlXCIsIHZhbHVlKTtcbiAgfVxuICBnZXQgbG9jVGl0bGUoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwidGl0bGVcIik7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIHN1cnZleSBkZXNjcmlwdGlvbi4gVGhlIHN1cnZleSBkZXNjcmlwdGlvbiBpcyBkaXNwbGF5ZWQgdW5kZXIgYSBzdXJ2ZXkgdGl0bGUuXG4gICAqIEBzZWUgdGl0bGVcbiAgICovXG4gIHB1YmxpYyBnZXQgZGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJkZXNjcmlwdGlvblwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGRlc2NyaXB0aW9uKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImRlc2NyaXB0aW9uXCIsIHZhbHVlKTtcbiAgfVxuICBnZXQgbG9jRGVzY3JpcHRpb24oKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwiZGVzY3JpcHRpb25cIik7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIHN1cnZleSBsb2dvLlxuICAgKiBAc2VlIHRpdGxlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGxvZ28oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJsb2dvXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbG9nbyh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJsb2dvXCIsIHZhbHVlKTtcbiAgfVxuICBnZXQgbG9jTG9nbygpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJsb2dvXCIpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSBzdXJ2ZXkgbG9nbyB3aWR0aC5cbiAgICogQHNlZSBsb2dvXG4gICAqL1xuICBwdWJsaWMgZ2V0IGxvZ29XaWR0aCgpOiBhbnkge1xuICAgIHZhciB3aWR0aCA9IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImxvZ29XaWR0aFwiKTtcbiAgICByZXR1cm4gZ2V0U2l6ZSh3aWR0aCk7XG4gIH1cbiAgcHVibGljIHNldCBsb2dvV2lkdGgodmFsdWU6IGFueSkge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImxvZ29XaWR0aFwiLCB2YWx1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIHN1cnZleSBsb2dvIGhlaWdodC5cbiAgICogQHNlZSBsb2dvXG4gICAqL1xuICBwdWJsaWMgZ2V0IGxvZ29IZWlnaHQoKTogYW55IHtcbiAgICB2YXIgaGVpZ2h0ID0gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibG9nb0hlaWdodFwiKTtcbiAgICByZXR1cm4gZ2V0U2l6ZShoZWlnaHQpO1xuICB9XG4gIHB1YmxpYyBzZXQgbG9nb0hlaWdodCh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibG9nb0hlaWdodFwiLCB2YWx1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIHN1cnZleSBsb2dvIHBvc2l0aW9uLlxuICAgKiBAc2VlIGxvZ29cbiAgICovXG4gIHB1YmxpYyBnZXQgbG9nb1Bvc2l0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImxvZ29Qb3NpdGlvblwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGxvZ29Qb3NpdGlvbih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibG9nb1Bvc2l0aW9uXCIsIHZhbHVlKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc0xvZ28oKSB7XG4gICAgcmV0dXJuICEhdGhpcy5sb2dvICYmIHRoaXMubG9nb1Bvc2l0aW9uICE9PSBcIm5vbmVcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzTG9nb0JlZm9yZSgpIHtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5yZW5kZXJlZEhhc0xvZ28gJiZcbiAgICAgICh0aGlzLmxvZ29Qb3NpdGlvbiA9PT0gXCJsZWZ0XCIgfHwgdGhpcy5sb2dvUG9zaXRpb24gPT09IFwidG9wXCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzTG9nb0FmdGVyKCkge1xuICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSkgcmV0dXJuIHRoaXMucmVuZGVyZWRIYXNMb2dvO1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnJlbmRlcmVkSGFzTG9nbyAmJlxuICAgICAgKHRoaXMubG9nb1Bvc2l0aW9uID09PSBcInJpZ2h0XCIgfHwgdGhpcy5sb2dvUG9zaXRpb24gPT09IFwiYm90dG9tXCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGxvZ29DbGFzc05hbWVzKCk6IHN0cmluZyB7XG4gICAgdmFyIGxvZ29DbGFzc2VzOiB7IFtpbmRleDogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICBsZWZ0OiBcInN2LWxvZ28tLWxlZnRcIixcbiAgICAgIHJpZ2h0OiBcInN2LWxvZ28tLXJpZ2h0XCIsXG4gICAgICB0b3A6IFwic3YtbG9nby0tdG9wXCIsXG4gICAgICBib3R0b206IFwic3YtbG9nby0tYm90dG9tXCIsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5jc3MubG9nbyArIFwiIFwiICsgbG9nb0NsYXNzZXNbdGhpcy5sb2dvUG9zaXRpb25dO1xuICB9XG4gIHB1YmxpYyBnZXQgcmVuZGVyZWRIYXNUaXRsZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHJldHVybiB0aGlzLmlzUHJvcGVydHlWaXNpYmxlKFwidGl0bGVcIik7XG4gICAgcmV0dXJuICF0aGlzLmxvY1RpdGxlLmlzRW1wdHkgJiYgdGhpcy5zaG93VGl0bGU7XG4gIH1cbiAgcHVibGljIGdldCByZW5kZXJlZEhhc0xvZ28oKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlKSByZXR1cm4gdGhpcy5pc1Byb3BlcnR5VmlzaWJsZShcImxvZ29cIik7XG4gICAgcmV0dXJuIHRoaXMuaGFzTG9nbztcbiAgfVxuICBwdWJsaWMgZ2V0IHJlbmRlcmVkSGFzSGVhZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJlbmRlcmVkSGFzVGl0bGUgfHwgdGhpcy5yZW5kZXJlZEhhc0xvZ287XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBsb2dvIGZpdCBtb2RlLlxuICAgKiBAc2VlIGxvZ29cbiAgICovXG4gIHB1YmxpYyBnZXQgbG9nb0ZpdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJsb2dvRml0XCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbG9nb0ZpdCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImxvZ29GaXRcIiwgdmFsKTtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICBwcml2YXRlIF9pc01vYmlsZSA9IGZhbHNlO1xuICBwdWJsaWMgc2V0SXNNb2JpbGUobmV3VmFsID0gdHJ1ZSkge1xuICAgIHRoaXMuX2lzTW9iaWxlID0gbmV3VmFsO1xuICB9XG4gIHByaXZhdGUgZ2V0IGlzTW9iaWxlKCkge1xuICAgIHJldHVybiBpc01vYmlsZSgpIHx8IHRoaXMuX2lzTW9iaWxlO1xuICB9XG4gIHB1YmxpYyBnZXQgdGl0bGVNYXhXaWR0aCgpOiBzdHJpbmcge1xuICAgIGlmIChcbiAgICAgICF0aGlzLmlzTW9iaWxlICYmXG4gICAgICAhdGhpcy5pc1ZhbHVlRW1wdHkodGhpcy5sb2dvKSAmJlxuICAgICAgIXNldHRpbmdzLnN1cHBvcnRDcmVhdG9yVjJcbiAgICApIHtcbiAgICAgIHZhciBsb2dvV2lkdGggPSB0aGlzLmxvZ29XaWR0aDtcbiAgICAgIGlmICh0aGlzLmxvZ29Qb3NpdGlvbiA9PT0gXCJsZWZ0XCIgfHwgdGhpcy5sb2dvUG9zaXRpb24gPT09IFwicmlnaHRcIikge1xuICAgICAgICByZXR1cm4gXCJjYWxjKDEwMCUgLSA1cHggLSAyZW0gLSBcIiArIGxvZ29XaWR0aCArIFwiKVwiO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHRoZSBIVE1MIGNvbnRlbnQgZGlzcGxheWVkIG9uIHRoZSBjb21wbGV0ZSBwYWdlLiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgY29tcGxldGUgcGFnZSB0ZXh0LlxuICAgKiBAc2VlIHNob3dDb21wbGV0ZWRQYWdlXG4gICAqIEBzZWUgY29tcGxldGVkSHRtbE9uQ29uZGl0aW9uXG4gICAqIEBzZWUgbG9jYWxlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbXBsZXRlZEh0bWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJjb21wbGV0ZWRIdG1sXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY29tcGxldGVkSHRtbCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJjb21wbGV0ZWRIdG1sXCIsIHZhbHVlKTtcbiAgfVxuICBnZXQgbG9jQ29tcGxldGVkSHRtbCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJjb21wbGV0ZWRIdG1sXCIpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBIVE1MIGNvbmRpdGlvbiBpdGVtcy4gSWYgdGhlIGV4cHJlc3Npb24gb2YgdGhpcyBpdGVtIHJldHVybnMgYHRydWVgLCB0aGVuIGEgc3VydmV5IHdpbGwgdXNlIHRoaXMgaXRlbSBIVE1MIGluc3RlYWQgb2YgYGNvbXBsZXRlZEh0bWxgLlxuICAgKiBAc2VlIEh0bWxDb25kaXRpb25JdGVtXG4gICAqIEBzZWUgY29tcGxldGVIdG1sXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbXBsZXRlZEh0bWxPbkNvbmRpdGlvbigpOiBBcnJheTxIdG1sQ29uZGl0aW9uSXRlbT4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjb21wbGV0ZWRIdG1sT25Db25kaXRpb25cIik7XG4gIH1cbiAgcHVibGljIHNldCBjb21wbGV0ZWRIdG1sT25Db25kaXRpb24odmFsOiBBcnJheTxIdG1sQ29uZGl0aW9uSXRlbT4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjb21wbGV0ZWRIdG1sT25Db25kaXRpb25cIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogQ2FsY3VsYXRlcyBhIGdpdmVuIGV4cHJlc3Npb24gYW5kIHJldHVybnMgYSByZXN1bHQgdmFsdWUuXG4gICAqIEBwYXJhbSBleHByZXNzaW9uXG4gICAqL1xuICBwdWJsaWMgcnVuRXhwcmVzc2lvbihleHByZXNzaW9uOiBzdHJpbmcpOiBhbnkge1xuICAgIGlmICghZXhwcmVzc2lvbikgcmV0dXJuIG51bGw7XG4gICAgdmFyIHZhbHVlcyA9IHRoaXMuZ2V0RmlsdGVyZWRWYWx1ZXMoKTtcbiAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMuZ2V0RmlsdGVyZWRQcm9wZXJ0aWVzKCk7XG4gICAgcmV0dXJuIG5ldyBFeHByZXNzaW9uUnVubmVyKGV4cHJlc3Npb24pLnJ1bih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICB9XG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIGEgZ2l2ZW4gZXhwcmVzc2lvbiBhbmQgcmV0dXJucyBgdHJ1ZWAgb3IgYGZhbHNlYC5cbiAgICogQHBhcmFtIGV4cHJlc3Npb25cbiAgICovXG4gIHB1YmxpYyBydW5Db25kaXRpb24oZXhwcmVzc2lvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCFleHByZXNzaW9uKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHZhbHVlcyA9IHRoaXMuZ2V0RmlsdGVyZWRWYWx1ZXMoKTtcbiAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMuZ2V0RmlsdGVyZWRQcm9wZXJ0aWVzKCk7XG4gICAgcmV0dXJuIG5ldyBDb25kaXRpb25SdW5uZXIoZXhwcmVzc2lvbikucnVuKHZhbHVlcywgcHJvcGVydGllcyk7XG4gIH1cbiAgLyoqXG4gICAqIFJ1biBhbGwgdHJpZ2dlcnMgdGhhdCBwZXJmb3JtcyBvbiB2YWx1ZSBjaGFuZ2VkIGFuZCBub3Qgb24gbW92aW5nIHRvIHRoZSBuZXh0IHBhZ2UuXG4gICAqL1xuICBwdWJsaWMgcnVuVHJpZ2dlcnMoKTogdm9pZCB7XG4gICAgdGhpcy5jaGVja1RyaWdnZXJzKHRoaXMuZ2V0RmlsdGVyZWRWYWx1ZXMoKSwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBnZXQgcmVuZGVyZWRDb21wbGV0ZWRIdG1sKCk6IHN0cmluZyB7XG4gICAgdmFyIGl0ZW0gPSB0aGlzLmdldEV4cHJlc3Npb25JdGVtT25SdW5Db25kaXRpb24oXG4gICAgICB0aGlzLmNvbXBsZXRlZEh0bWxPbkNvbmRpdGlvblxuICAgICk7XG4gICAgcmV0dXJuICEhaXRlbSA/ICg8SHRtbENvbmRpdGlvbkl0ZW0+aXRlbSkuaHRtbCA6IHRoaXMuY29tcGxldGVkSHRtbDtcbiAgfVxuICBwcml2YXRlIGdldEV4cHJlc3Npb25JdGVtT25SdW5Db25kaXRpb24oXG4gICAgaXRlbXM6IEFycmF5PEV4cHJlc3Npb25JdGVtPlxuICApOiBFeHByZXNzaW9uSXRlbSB7XG4gICAgaWYgKGl0ZW1zLmxlbmd0aCA9PSAwKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgdmFsdWVzID0gdGhpcy5nZXRGaWx0ZXJlZFZhbHVlcygpO1xuICAgIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5nZXRGaWx0ZXJlZFByb3BlcnRpZXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoaXRlbXNbaV0ucnVuQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcykpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zW2ldO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgSFRNTCBjb250ZW50IGRpc3BsYXllZCB0byBhbiBlbmQgdXNlciB0aGF0IGhhcyBhbHJlYWR5IGNvbXBsZXRlZCB0aGUgc3VydmV5LlxuICAgKiBAc2VlIGNsaWVudElkXG4gICAqIEBzZWUgbG9jYWxlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbXBsZXRlZEJlZm9yZUh0bWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJjb21wbGV0ZWRCZWZvcmVIdG1sXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY29tcGxldGVkQmVmb3JlSHRtbCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJjb21wbGV0ZWRCZWZvcmVIdG1sXCIsIHZhbHVlKTtcbiAgfVxuICBnZXQgbG9jQ29tcGxldGVkQmVmb3JlSHRtbCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJjb21wbGV0ZWRCZWZvcmVIdG1sXCIpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgSFRNTCB0aGF0IHNob3dzIG9uIGxvYWRpbmcgc3VydmV5IEpzb24gZnJvbSB0aGUgW2FwaS5zdXJ2ZXlqcy5pb10oaHR0cHM6Ly9hcGkuc3VydmV5anMuaW8pIHNlcnZpY2UuXG4gICAqIEBzZWUgc3VydmV5SWRcbiAgICogQHNlZSBsb2NhbGVcbiAgICovXG4gIHB1YmxpYyBnZXQgbG9hZGluZ0h0bWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJsb2FkaW5nSHRtbFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGxvYWRpbmdIdG1sKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImxvYWRpbmdIdG1sXCIsIHZhbHVlKTtcbiAgfVxuICBnZXQgbG9jTG9hZGluZ0h0bWwoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwibG9hZGluZ0h0bWxcIik7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgJ1N0YXJ0JyBidXR0b24gY2FwdGlvbi5cbiAgICogVGhlICdTdGFydCcgYnV0dG9uIGlzIHNob3duIG9uIHRoZSBzdGFydGVkIHBhZ2UuIFNldCB0aGUgYGZpcnN0UGFnZUlzU3RhcnRlZGAgcHJvcGVydHkgdG8gYHRydWVgLCB0byBkaXNwbGF5IHRoZSBzdGFydGVkIHBhZ2UuXG4gICAqIEBzZWUgZmlyc3RQYWdlSXNTdGFydGVkXG4gICAqIEBzZWUgbG9jYWxlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHN0YXJ0U3VydmV5VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcbiAgICAgIFwic3RhcnRTdXJ2ZXlUZXh0XCIsXG4gICAgICB0aGlzLmdldExvY1N0cmluZyhcInN0YXJ0U3VydmV5VGV4dFwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBzdGFydFN1cnZleVRleHQobmV3VmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwic3RhcnRTdXJ2ZXlUZXh0XCIsIG5ld1ZhbHVlKTtcbiAgfVxuICBnZXQgbG9jU3RhcnRTdXJ2ZXlUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInN0YXJ0U3VydmV5VGV4dFwiKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHRoZSAnUHJldicgYnV0dG9uIGNhcHRpb24uXG4gICAqIEBzZWUgbG9jYWxlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBhZ2VQcmV2VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcbiAgICAgIFwicGFnZVByZXZUZXh0XCIsXG4gICAgICB0aGlzLmdldExvY1N0cmluZyhcInBhZ2VQcmV2VGV4dFwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBwYWdlUHJldlRleHQobmV3VmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwicGFnZVByZXZUZXh0XCIsIG5ld1ZhbHVlKTtcbiAgfVxuICBnZXQgbG9jUGFnZVByZXZUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInBhZ2VQcmV2VGV4dFwiKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHRoZSAnTmV4dCcgYnV0dG9uIGNhcHRpb24uXG4gICAqIEBzZWUgbG9jYWxlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBhZ2VOZXh0VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcbiAgICAgIFwicGFnZU5leHRUZXh0XCIsXG4gICAgICB0aGlzLmdldExvY1N0cmluZyhcInBhZ2VOZXh0VGV4dFwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBwYWdlTmV4dFRleHQobmV3VmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwicGFnZU5leHRUZXh0XCIsIG5ld1ZhbHVlKTtcbiAgfVxuICBnZXQgbG9jUGFnZU5leHRUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInBhZ2VOZXh0VGV4dFwiKTtcbiAgfVxuICAvKipcbiAgICogIEdldHMgb3Igc2V0cyB0aGUgJ0NvbXBsZXRlJyBidXR0b24gY2FwdGlvbi5cbiAgICogQHNlZSBsb2NhbGVcbiAgICovXG4gIHB1YmxpYyBnZXQgY29tcGxldGVUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgICAgXCJjb21wbGV0ZVRleHRcIixcbiAgICAgIHRoaXMuZ2V0TG9jU3RyaW5nKFwiY29tcGxldGVUZXh0XCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNvbXBsZXRlVGV4dChuZXdWYWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJjb21wbGV0ZVRleHRcIiwgbmV3VmFsdWUpO1xuICB9XG4gIGdldCBsb2NDb21wbGV0ZVRleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwiY29tcGxldGVUZXh0XCIpO1xuICB9XG4gIC8qKlxuICAgKiAgR2V0cyBvciBzZXRzIHRoZSAnUHJldmlldycgYnV0dG9uIGNhcHRpb24uXG4gICAqIEBzZWUgbG9jYWxlXG4gICAqIEBzZWUgc2hvd1ByZXZpZXdCZWZvcmVDb21wbGV0ZVxuICAgKiBAc2VlIGVkaXRUZXh0XG4gICAqIEBzZWUgc2hvd1ByZXZpZXdcbiAgICovXG4gIHB1YmxpYyBnZXQgcHJldmlld1RleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXG4gICAgICBcInByZXZpZXdUZXh0XCIsXG4gICAgICB0aGlzLmdldExvY1N0cmluZyhcInByZXZpZXdUZXh0XCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc2V0IHByZXZpZXdUZXh0KG5ld1ZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInByZXZpZXdUZXh0XCIsIG5ld1ZhbHVlKTtcbiAgfVxuICBnZXQgbG9jUHJldmlld1RleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwicHJldmlld1RleHRcIik7XG4gIH1cbiAgLyoqXG4gICAqICBHZXRzIG9yIHNldHMgdGhlICdFZGl0JyBidXR0b24gY2FwdGlvbi5cbiAgICogQHNlZSBsb2NhbGVcbiAgICogQHNlZSBzaG93UHJldmlld0JlZm9yZUNvbXBsZXRlXG4gICAqIEBzZWUgcHJldmlld1RleHRcbiAgICogQHNlZSBjYW5jZWxQcmV2aWV3XG4gICAqL1xuICBwdWJsaWMgZ2V0IGVkaXRUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgICAgXCJlZGl0VGV4dFwiLFxuICAgICAgdGhpcy5nZXRMb2NTdHJpbmcoXCJlZGl0VGV4dFwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBlZGl0VGV4dChuZXdWYWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJlZGl0VGV4dFwiLCBuZXdWYWx1ZSk7XG4gIH1cbiAgZ2V0IGxvY0VkaXRUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImVkaXRUZXh0XCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgcGF0dGVybiBmb3IgcXVlc3Rpb24gdGl0bGUuIERlZmF1bHQgaXMgXCJudW1UaXRsZVJlcXVpcmVcIiwgMS4gV2hhdCBpcyB5b3VyIG5hbWU/ICosXG4gICAqIFlvdSBjYW4gc2V0IGl0IHRvIG51bVJlcXVpcmVUaXRsZTogMS4gKiBXaGF0IGlzIHlvdXIgbmFtZT9cbiAgICogWW91IGNhbiBzZXQgaXQgdG8gcmVxdWlyZU51bVRpdGxlOiAqIDEuIFdoYXQgaXMgeW91ciBuYW1lP1xuICAgKiBZb3UgY2FuIHNldCBpdCB0byBudW1UaXRsZSAocmVtb3ZlIHJlcXVpcmUgc3ltYm9sIGNvbXBsZXRlbHkpOiAxLiBXaGF0IGlzIHlvdXIgbmFtZT9cbiAgICogQHNlZSBRdWVzdGlvbk1vZGVsLnRpdGxlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHF1ZXN0aW9uVGl0bGVQYXR0ZXJuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInF1ZXN0aW9uVGl0bGVQYXR0ZXJuXCIsIFwibnVtVGl0bGVSZXF1aXJlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcXVlc3Rpb25UaXRsZVBhdHRlcm4odmFsOiBzdHJpbmcpIHtcbiAgICBpZiAoXG4gICAgICB2YWwgIT09IFwibnVtUmVxdWlyZVRpdGxlXCIgJiZcbiAgICAgIHZhbCAhPT0gXCJyZXF1aXJlTnVtVGl0bGVcIiAmJlxuICAgICAgdmFsICE9IFwibnVtVGl0bGVcIlxuICAgICkge1xuICAgICAgdmFsID0gXCJudW1UaXRsZVJlcXVpcmVcIjtcbiAgICB9XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicXVlc3Rpb25UaXRsZVBhdHRlcm5cIiwgdmFsKTtcbiAgfVxuICBnZXRRdWVzdGlvblRpdGxlUGF0dGVybk9wdGlvbnMoKTogQXJyYXk8YW55PiB7XG4gICAgdmFyIHJlcyA9IG5ldyBBcnJheTxhbnk+KCk7XG4gICAgdmFyIHRpdGxlID0gdGhpcy5nZXRMb2NTdHJpbmcoXCJxdWVzdGlvblRpdGxlUGF0dGVyblRleHRcIik7XG4gICAgdmFyIG51bSA9ICEhdGhpcy5xdWVzdGlvblN0YXJ0SW5kZXggPyB0aGlzLnF1ZXN0aW9uU3RhcnRJbmRleCA6IFwiMS5cIjtcbiAgICByZXMucHVzaCh7XG4gICAgICB2YWx1ZTogXCJudW1UaXRsZVJlcXVpcmVcIixcbiAgICAgIHRleHQ6IG51bSArIFwiIFwiICsgdGl0bGUgKyBcIiBcIiArIHRoaXMucmVxdWlyZWRUZXh0LFxuICAgIH0pO1xuICAgIHJlcy5wdXNoKHtcbiAgICAgIHZhbHVlOiBcIm51bVJlcXVpcmVUaXRsZVwiLFxuICAgICAgdGV4dDogbnVtICsgXCIgXCIgKyB0aGlzLnJlcXVpcmVkVGV4dCArIFwiIFwiICsgdGl0bGUsXG4gICAgfSk7XG4gICAgcmVzLnB1c2goe1xuICAgICAgdmFsdWU6IFwicmVxdWlyZU51bVRpdGxlXCIsXG4gICAgICB0ZXh0OiB0aGlzLnJlcXVpcmVkVGV4dCArIFwiIFwiICsgbnVtICsgXCIgXCIgKyB0aXRsZSxcbiAgICB9KTtcbiAgICByZXMucHVzaCh7XG4gICAgICB2YWx1ZTogXCJudW1UaXRsZVwiLFxuICAgICAgdGV4dDogbnVtICsgXCIgXCIgKyB0aXRsZSxcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSBxdWVzdGlvbiB0aXRsZSB0ZW1wbGF0ZS4gT2Jzb2xldGUsIHBsZWFzZSB1c2UgcXVlc3Rpb25UaXRsZVBhdHRlcm5cbiAgICogQHNlZSBRdWVzdGlvbk1vZGVsLnRpdGxlXG4gICAqIEBzZWUgcXVlc3Rpb25UaXRsZVBhdHRlcm5cbiAgICovXG4gIHB1YmxpYyBnZXQgcXVlc3Rpb25UaXRsZVRlbXBsYXRlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwicXVlc3Rpb25UaXRsZVRlbXBsYXRlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcXVlc3Rpb25UaXRsZVRlbXBsYXRlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInF1ZXN0aW9uVGl0bGVUZW1wbGF0ZVwiLCB2YWx1ZSk7XG4gICAgdGhpcy5xdWVzdGlvblRpdGxlUGF0dGVybiA9IHRoaXMuZ2V0TmV3VGl0bGVQYXR0ZXJuKHZhbHVlKTtcbiAgICB0aGlzLnF1ZXN0aW9uU3RhcnRJbmRleCA9IHRoaXMuZ2V0TmV3UXVlc3Rpb25UaXRsZUVsZW1lbnQoXG4gICAgICB2YWx1ZSxcbiAgICAgIFwibm9cIixcbiAgICAgIHRoaXMucXVlc3Rpb25TdGFydEluZGV4LFxuICAgICAgXCIxXCJcbiAgICApO1xuICAgIHRoaXMucmVxdWlyZWRUZXh0ID0gdGhpcy5nZXROZXdRdWVzdGlvblRpdGxlRWxlbWVudChcbiAgICAgIHZhbHVlLFxuICAgICAgXCJyZXF1aXJlXCIsXG4gICAgICB0aGlzLnJlcXVpcmVkVGV4dCxcbiAgICAgIFwiKlwiXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGdldE5ld1RpdGxlUGF0dGVybih0ZW1wbGF0ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoISF0ZW1wbGF0ZSkge1xuICAgICAgdmFyIHN0cnMgPSBbXTtcbiAgICAgIHdoaWxlICh0ZW1wbGF0ZS5pbmRleE9mKFwie1wiKSA+IC0xKSB7XG4gICAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGUuc3Vic3RyKHRlbXBsYXRlLmluZGV4T2YoXCJ7XCIpICsgMSk7XG4gICAgICAgIHZhciBpbmQgPSB0ZW1wbGF0ZS5pbmRleE9mKFwifVwiKTtcbiAgICAgICAgaWYgKGluZCA8IDApIGJyZWFrO1xuICAgICAgICBzdHJzLnB1c2godGVtcGxhdGUuc3Vic3RyKDAsIGluZCkpO1xuICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLnN1YnN0cihpbmQgKyAxKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdHJzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgaWYgKHN0cnNbMF0gPT0gXCJyZXF1aXJlXCIpIHJldHVybiBcInJlcXVpcmVOdW1UaXRsZVwiO1xuICAgICAgICBpZiAoc3Ryc1sxXSA9PSBcInJlcXVpcmVcIiAmJiBzdHJzLmxlbmd0aCA9PSAzKSByZXR1cm4gXCJudW1SZXF1aXJlVGl0bGVcIjtcbiAgICAgICAgaWYgKHN0cnMuaW5kZXhPZihcInJlcXVpcmVcIikgPCAwKSByZXR1cm4gXCJudW1UaXRsZVwiO1xuICAgICAgfVxuICAgICAgaWYgKHN0cnMubGVuZ3RoID09IDEgJiYgc3Ryc1swXSA9PSBcInRpdGxlXCIpIHtcbiAgICAgICAgcmV0dXJuIFwibnVtVGl0bGVcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFwibnVtVGl0bGVSZXF1aXJlXCI7XG4gIH1cbiAgcHJpdmF0ZSBnZXROZXdRdWVzdGlvblRpdGxlRWxlbWVudChcbiAgICB0ZW1wbGF0ZTogc3RyaW5nLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBjdXJyZW50VmFsdWU6IHN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6IHN0cmluZ1xuICApOiBzdHJpbmcge1xuICAgIG5hbWUgPSBcIntcIiArIG5hbWUgKyBcIn1cIjtcbiAgICBpZiAoIXRlbXBsYXRlIHx8IHRlbXBsYXRlLmluZGV4T2YobmFtZSkgPCAwKSByZXR1cm4gY3VycmVudFZhbHVlO1xuICAgIHZhciBpbmQgPSB0ZW1wbGF0ZS5pbmRleE9mKG5hbWUpO1xuICAgIHZhciBwcmVmaXggPSBcIlwiO1xuICAgIHZhciBwb3N0Zml4ID0gXCJcIjtcbiAgICB2YXIgaSA9IGluZCAtIDE7XG4gICAgZm9yICg7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBpZiAodGVtcGxhdGVbaV0gPT0gXCJ9XCIpIGJyZWFrO1xuICAgIH1cbiAgICBpZiAoaSA8IGluZCAtIDEpIHtcbiAgICAgIHByZWZpeCA9IHRlbXBsYXRlLnN1YnN0cihpICsgMSwgaW5kIC0gaSAtIDEpO1xuICAgIH1cbiAgICBpbmQgKz0gbmFtZS5sZW5ndGg7XG4gICAgaSA9IGluZDtcbiAgICBmb3IgKDsgaSA8IHRlbXBsYXRlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGVtcGxhdGVbaV0gPT0gXCJ7XCIpIGJyZWFrO1xuICAgIH1cbiAgICBpZiAoaSA+IGluZCkge1xuICAgICAgcG9zdGZpeCA9IHRlbXBsYXRlLnN1YnN0cihpbmQsIGkgLSBpbmQpO1xuICAgIH1cbiAgICBpID0gMDtcbiAgICB3aGlsZSAoaSA8IHByZWZpeC5sZW5ndGggJiYgcHJlZml4LmNoYXJDb2RlQXQoaSkgPCAzMykgaSsrO1xuICAgIHByZWZpeCA9IHByZWZpeC5zdWJzdHIoaSk7XG4gICAgaSA9IHBvc3RmaXgubGVuZ3RoIC0gMTtcbiAgICB3aGlsZSAoaSA+PSAwICYmIHBvc3RmaXguY2hhckNvZGVBdChpKSA8IDMzKSBpLS07XG4gICAgcG9zdGZpeCA9IHBvc3RmaXguc3Vic3RyKDAsIGkgKyAxKTtcbiAgICBpZiAoIXByZWZpeCAmJiAhcG9zdGZpeCkgcmV0dXJuIGN1cnJlbnRWYWx1ZTtcbiAgICB2YXIgdmFsdWUgPSAhIWN1cnJlbnRWYWx1ZSA/IGN1cnJlbnRWYWx1ZSA6IGRlZmF1bHRWYWx1ZTtcbiAgICByZXR1cm4gcHJlZml4ICsgdmFsdWUgKyBwb3N0Zml4O1xuICB9XG4gIGdldCBsb2NRdWVzdGlvblRpdGxlVGVtcGxhdGUoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwicXVlc3Rpb25UaXRsZVRlbXBsYXRlXCIpO1xuICB9XG4gIGdldFVwZGF0ZWRRdWVzdGlvblRpdGxlKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIHRpdGxlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLm9uR2V0UXVlc3Rpb25UaXRsZS5pc0VtcHR5KSByZXR1cm4gdGl0bGU7XG4gICAgdmFyIG9wdGlvbnMgPSB7IHF1ZXN0aW9uOiBxdWVzdGlvbiwgdGl0bGU6IHRpdGxlIH07XG4gICAgdGhpcy5vbkdldFF1ZXN0aW9uVGl0bGUuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICByZXR1cm4gb3B0aW9ucy50aXRsZTtcbiAgfVxuICBnZXRVcGRhdGVkUXVlc3Rpb25ObyhxdWVzdGlvbjogSVF1ZXN0aW9uLCBubzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5vbkdldFF1ZXN0aW9uTm8uaXNFbXB0eSkgcmV0dXJuIG5vO1xuICAgIHZhciBvcHRpb25zID0geyBxdWVzdGlvbjogcXVlc3Rpb24sIG5vOiBubyB9O1xuICAgIHRoaXMub25HZXRRdWVzdGlvbk5vLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wdGlvbnMubm87XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB3aGV0aGVyIHRoZSBzdXJ2ZXkgZGlzcGxheXMgcGFnZSBudW1iZXJzIG9uIHBhZ2VzIHRpdGxlcy5cbiAgICovXG4gIHB1YmxpYyBnZXQgc2hvd1BhZ2VOdW1iZXJzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93UGFnZU51bWJlcnNcIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2hvd1BhZ2VOdW1iZXJzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHZhbHVlID09PSB0aGlzLnNob3dQYWdlTnVtYmVycykgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dQYWdlTnVtYmVyc1wiLCB2YWx1ZSk7XG4gICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSB2YWx1ZSB0aGF0IHNwZWNpZmllcyBob3cgdGhlIHF1ZXN0aW9uIG51bWJlcnMgYXJlIGRpc3BsYXllZC5cbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhdmFpbGFibGU6XG4gICAqXG4gICAqIC0gYG9uYCAtIGRpc3BsYXkgcXVlc3Rpb24gbnVtYmVyc1xuICAgKiAtIGBvbnBhZ2VgIC0gZGlzcGxheSBxdWVzdGlvbiBudW1iZXJzLCBzdGFydCBudW1iZXJpbmcgb24gZXZlcnkgcGFnZVxuICAgKiAtIGBvZmZgIC0gdHVybiBvZmYgdGhlIG51bWJlcmluZyBmb3IgcXVlc3Rpb25zIHRpdGxlc1xuICAgKi9cbiAgcHVibGljIGdldCBzaG93UXVlc3Rpb25OdW1iZXJzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dRdWVzdGlvbk51bWJlcnNcIik7XG4gIH1cbiAgcHVibGljIHNldCBzaG93UXVlc3Rpb25OdW1iZXJzKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB2YWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFsdWUgPSB2YWx1ZSA9PT0gXCJvbnBhZ2VcIiA/IFwib25QYWdlXCIgOiB2YWx1ZTtcbiAgICBpZiAodmFsdWUgPT09IHRoaXMuc2hvd1F1ZXN0aW9uTnVtYmVycykgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dRdWVzdGlvbk51bWJlcnNcIiwgdmFsdWUpO1xuICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHRoZSBzdXJ2ZXkgcHJvZ3Jlc3MgYmFyIHBvc2l0aW9uLlxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZTpcbiAgICpcbiAgICogLSBgb2ZmYCAoZGVmYXVsdCkgLSBkb24ndCBzaG93IHByb2dyZXNzIGJhclxuICAgKiAtIGB0b3BgIC0gc2hvdyBwcm9ncmVzcyBiYXIgaW4gdGhlIHRvcFxuICAgKiAtIGBib3R0b21gIC0gc2hvdyBwcm9ncmVzcyBiYXIgaW4gdGhlIGJvdHRvbVxuICAgKiAtIGBib3RoYCAtIHNob3cgcHJvZ3Jlc3MgYmFyIGluIGJvdGggc2lkZXM6IHRvcCBhbmQgYm90dG9tLlxuICAgKi9cbiAgcHVibGljIGdldCBzaG93UHJvZ3Jlc3NCYXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1Byb2dyZXNzQmFyXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2hvd1Byb2dyZXNzQmFyKG5ld1ZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93UHJvZ3Jlc3NCYXJcIiwgbmV3VmFsdWUudG9Mb3dlckNhc2UoKSk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgdHlwZSBvZiBpbmZvIGluIHRoZSBwcm9ncmVzcyBiYXIuXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlOlxuICAgKlxuICAgKiAtIGBwYWdlc2AgKGRlZmF1bHQpLFxuICAgKiAtIGBxdWVzdGlvbnNgLFxuICAgKiAtIGByZXF1aXJlZFF1ZXN0aW9uc2AsXG4gICAqIC0gYGNvcnJlY3RRdWVzdGlvbnNgLFxuICAgKiAtIGBidXR0b25zYFxuICAgKi9cbiAgcHVibGljIGdldCBwcm9ncmVzc0JhclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicHJvZ3Jlc3NCYXJUeXBlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcHJvZ3Jlc3NCYXJUeXBlKG5ld1ZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAobmV3VmFsdWUgPT09IFwiY29ycmVjdHF1ZXN0aW9uXCIpIG5ld1ZhbHVlID0gXCJjb3JyZWN0UXVlc3Rpb25cIjtcbiAgICBpZiAobmV3VmFsdWUgPT09IFwicmVxdWlyZWRxdWVzdGlvblwiKSBuZXdWYWx1ZSA9IFwicmVxdWlyZWRRdWVzdGlvblwiO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInByb2dyZXNzQmFyVHlwZVwiLCBuZXdWYWx1ZSk7XG4gIH1cbiAgcHVibGljIGdldCBpc1Nob3dQcm9ncmVzc0Jhck9uVG9wKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5jYW5TaG93UHJvcmVzQmFyKCkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5zaG93UHJvZ3Jlc3NCYXIgPT09IFwidG9wXCIgfHwgdGhpcy5zaG93UHJvZ3Jlc3NCYXIgPT09IFwiYm90aFwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNTaG93UHJvZ3Jlc3NCYXJPbkJvdHRvbSgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY2FuU2hvd1Byb3Jlc0JhcigpKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMuc2hvd1Byb2dyZXNzQmFyID09PSBcImJvdHRvbVwiIHx8IHRoaXMuc2hvd1Byb2dyZXNzQmFyID09PSBcImJvdGhcIjtcbiAgfVxuICBwcml2YXRlIGNhblNob3dQcm9yZXNCYXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICF0aGlzLmlzU2hvd2luZ1ByZXZpZXcgfHxcbiAgICAgIHRoaXMuc2hvd1ByZXZpZXdCZWZvcmVDb21wbGV0ZSAhPSBcInNob3dBbGxRdWVzdGlvbnNcIlxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHRleHQvSFRNTCB0aGF0IGlzIHJlbmRlcmVkIGFzIGEgc3VydmV5IHRpdGxlLlxuICAgKi9cbiAgcHVibGljIGdldCBwcm9jZXNzZWRUaXRsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5sb2NUaXRsZS5yZW5kZXJlZEh0bWw7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgcXVlc3Rpb24gdGl0bGUgbG9jYXRpb24uXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlOlxuICAgKlxuICAgKiAtIGBib3R0b21gIC0gc2hvdyBhIHF1ZXN0aW9uIHRpdGxlIHRvIGJvdHRvbVxuICAgKiAtIGBsZWZ0YCAtIHNob3cgYSBxdWVzdGlvbiB0aXRsZSB0byBsZWZ0XG4gICAqIC0gYHRvcGAgLSBzaG93IGEgcXVlc3Rpb24gdGl0bGUgdG8gdG9wLlxuICAgKlxuICAgKiA+IFNvbWUgcXVlc3Rpb25zLCBmb3IgZXhhbXBsZSBtYXRyaXhlcywgZG8gbm90IHN1cHBvcnQgJ2xlZnQnIHZhbHVlLiBUaGUgdGl0bGUgZm9yIHRoZW0gd2lsbCBiZSBkaXNwbGF5ZWQgdG8gdGhlIHRvcC5cbiAgICovXG4gIHB1YmxpYyBnZXQgcXVlc3Rpb25UaXRsZUxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInF1ZXN0aW9uVGl0bGVMb2NhdGlvblwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHF1ZXN0aW9uVGl0bGVMb2NhdGlvbih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicXVlc3Rpb25UaXRsZUxvY2F0aW9uXCIsIHZhbHVlLnRvTG93ZXJDYXNlKCkpO1xuICAgIGlmICghdGhpcy5pc0xvYWRpbmdGcm9tSnNvbikge1xuICAgICAgdGhpcy51cGRhdGVFbGVtZW50Q3NzKHRydWUpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgdXBkYXRlRWxlbWVudENzcyhyZU5ldz86IGJvb2xlYW4pIHtcbiAgICB2YXIgcGFnZXMgPSB0aGlzLnZpc2libGVQYWdlcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBwYWdlc1tpXS51cGRhdGVFbGVtZW50Q3NzKHJlTmV3KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgZXJyb3IgbWVzc2FnZSBwb3NpdGlvbi5cbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhdmFpbGFibGU6XG4gICAqXG4gICAqIC0gYHRvcGAgLSB0byBzaG93IHF1ZXN0aW9uIGVycm9yKHMpIG92ZXIgdGhlIHF1ZXN0aW9uLFxuICAgKiAtIGBib3R0b21gIC0gdG8gc2hvdyBxdWVzdGlvbiBlcnJvcihzKSB1bmRlciB0aGUgcXVlc3Rpb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0IHF1ZXN0aW9uRXJyb3JMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvbkVycm9yTG9jYXRpb25cIik7XG4gIH1cbiAgcHVibGljIHNldCBxdWVzdGlvbkVycm9yTG9jYXRpb24odmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInF1ZXN0aW9uRXJyb3JMb2NhdGlvblwiLCB2YWx1ZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHRoZSBxdWVzdGlvbiBkZXNjcmlwdGlvbiBwb3NpdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYHVuZGVyVGl0bGVgLlxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZTpcbiAgICpcbiAgICogLSBgdW5kZXJUaXRsZWAgLSBzaG93IHF1ZXN0aW9uIGRlc2NyaXB0aW9uIHVuZGVyIHRoZSBxdWVzdGlvbiB0aXRsZSxcbiAgICogLSBgdW5kZXJJbnB1dGAgLSBzaG93IHF1ZXN0aW9uIGRlc2NyaXB0aW9uIHVuZGVyIHRoZSBxdWVzdGlvbiBpbnB1dCBpbnN0ZWFkIG9mIHF1ZXN0aW9uIHRpdGxlLlxuICAgKi9cbiAgcHVibGljIGdldCBxdWVzdGlvbkRlc2NyaXB0aW9uTG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicXVlc3Rpb25EZXNjcmlwdGlvbkxvY2F0aW9uXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcXVlc3Rpb25EZXNjcmlwdGlvbkxvY2F0aW9uKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvbkRlc2NyaXB0aW9uTG9jYXRpb25cIiwgdmFsdWUpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGhlIHN1cnZleSBlZGl0IG1vZGUuXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlOlxuICAgKlxuICAgKiAtIGBlZGl0YCAoZGVmYXVsdCkgLSBtYWtlIGEgc3VydmV5IGVkaXRhYmxlLFxuICAgKiAtIGBkaXNwbGF5YCAtIG1ha2UgYSBzdXJ2ZXkgcmVhZC1vbmx5LlxuICAgKi9cbiAgcHVibGljIGdldCBtb2RlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1vZGVcIik7XG4gIH1cbiAgcHVibGljIHNldCBtb2RlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB2YWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHZhbHVlID09IHRoaXMubW9kZSkgcmV0dXJuO1xuICAgIGlmICh2YWx1ZSAhPSBcImVkaXRcIiAmJiB2YWx1ZSAhPSBcImRpc3BsYXlcIikgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1vZGVcIiwgdmFsdWUpO1xuICB9XG4gIHByaXZhdGUgb25Nb2RlQ2hhbmdlZCgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwYWdlID0gdGhpcy5wYWdlc1tpXTtcbiAgICAgIHBhZ2Uuc2V0UHJvcGVydHlWYWx1ZShcImlzUmVhZE9ubHlcIiwgcGFnZS5pc1JlYWRPbmx5KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhbiBvYmplY3QgdGhhdCBzdG9yZXMgdGhlIHN1cnZleSByZXN1bHRzL2RhdGEuIFlvdSBjYW4gc2V0IGl0IGRpcmVjdGx5IGFzIGB7ICdxdWVzdGlvbiBuYW1lJzogcXVlc3Rpb25WYWx1ZSwgLi4uIH1gXG4gICAqXG4gICAqID4gSWYgeW91IHNldCB0aGUgYGRhdGFgIHByb3BlcnR5IGFmdGVyIGNyZWF0aW5nIHRoZSBzdXJ2ZXksIHlvdSBtYXkgbmVlZCB0byBzZXQgdGhlIGBjdXJyZW50UGFnZU5vYCB0byBgMGAsIGlmIHlvdSBhcmUgdXNpbmcgYHZpc2libGVJZmAgcHJvcGVydGllcyBmb3IgcXVlc3Rpb25zL3BhZ2VzL3BhbmVscyB0byBlbnN1cmUgdGhhdCB5b3UgYXJlIHN0YXJ0aW5nIGZyb20gdGhlIGZpcnN0IHBhZ2UuXG4gICAqIEBzZWUgc2V0VmFsdWVcbiAgICogQHNlZSBnZXRWYWx1ZVxuICAgKiBAc2VlIG1lcmdlRGF0YVxuICAgKiBAc2VlIGN1cnJlbnRQYWdlTm9cbiAgICovXG4gIHB1YmxpYyBnZXQgZGF0YSgpOiBhbnkge1xuICAgIHZhciByZXN1bHQ6IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIHZhciBrZXlzID0gdGhpcy5nZXRWYWx1ZXNLZXlzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgIHZhciBkYXRhVmFsdWUgPSB0aGlzLmdldERhdGFWYWx1ZUNvcmUodGhpcy52YWx1ZXNIYXNoLCBrZXkpO1xuICAgICAgaWYgKGRhdGFWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gZGF0YVZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNldENhbGN1YXRlZFZhbHVlc0ludG9SZXN1bHQocmVzdWx0KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHB1YmxpYyBzZXQgZGF0YShkYXRhOiBhbnkpIHtcbiAgICB0aGlzLnZhbHVlc0hhc2ggPSB7fTtcbiAgICB0aGlzLnNldERhdGFDb3JlKGRhdGEpO1xuICB9XG4gIC8qKlxuICAgKiBNZXJnZSB0aGUgdmFsdWVzIGludG8gc3VydmV5LmRhdGEuIEl0IHdvcmtzIGFzIHN1cnZleS5kYXRhLCBleGNlcHQgaXQgZG9lc24ndCBjbGVhbiB0aGUgZXhpc3RpbmcgZGF0YSwgYnV0IG92ZXJyaWRlcyB0aGVtLlxuICAgKiBAcGFyYW0gZGF0YSBkYXRhIHRvIG1lcmdlLiBJdCBzaG91bGQgYmUgYW4gb2JqZWN0IHtrZXlWYWx1ZTogVmFsdWUsIC4uLn1cbiAgICogQHNlZSBkYXRhXG4gICAqIEBzZWUgc2V0VmFsdWVcbiAgICovXG4gIHB1YmxpYyBtZXJnZURhdGEoZGF0YTogYW55KSB7XG4gICAgaWYgKCFkYXRhKSByZXR1cm47XG4gICAgdGhpcy5zZXREYXRhQ29yZShkYXRhKTtcbiAgfVxuICBwdWJsaWMgc2V0RGF0YUNvcmUoZGF0YTogYW55KSB7XG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGZvciAodmFyIGtleSBpbiBkYXRhKSB7XG4gICAgICAgIHRoaXMuc2V0RGF0YVZhbHVlQ29yZSh0aGlzLnZhbHVlc0hhc2gsIGtleSwgZGF0YVtrZXldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy51cGRhdGVBbGxRdWVzdGlvbnNWYWx1ZSgpO1xuICAgIHRoaXMubm90aWZ5QWxsUXVlc3Rpb25zT25WYWx1ZUNoYW5nZWQoKTtcbiAgICB0aGlzLm5vdGlmeUVsZW1lbnRzT25BbnlWYWx1ZU9yVmFyaWFibGVDaGFuZ2VkKFwiXCIpO1xuICAgIHRoaXMucnVuQ29uZGl0aW9ucygpO1xuICB9XG4gIHB1YmxpYyBnZXQgZWRpdGluZ09iaigpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0aW5nT2JqVmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBvbkVkaXRpbmdPYmpQcm9wZXJ0eUNoYW5nZWQ6IChzZW5kZXI6IEJhc2UsIG9wdGlvbnM6IGFueSkgPT4gdm9pZDtcbiAgcHVibGljIHNldCBlZGl0aW5nT2JqKHZhbDogQmFzZSkge1xuICAgIGlmICh0aGlzLmVkaXRpbmdPYmogPT0gdmFsKSByZXR1cm47XG4gICAgaWYgKCEhdGhpcy5lZGl0aW5nT2JqKSB7XG4gICAgICB0aGlzLmVkaXRpbmdPYmoub25Qcm9wZXJ0eUNoYW5nZWQucmVtb3ZlKFxuICAgICAgICB0aGlzLm9uRWRpdGluZ09ialByb3BlcnR5Q2hhbmdlZFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5lZGl0aW5nT2JqVmFsdWUgPSB2YWw7XG4gICAgaWYgKHRoaXMuaXNEaXNwb3NlZCkgcmV0dXJuO1xuICAgIGlmICghdmFsKSB7XG4gICAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRBbGxRdWVzdGlvbnMoKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHF1ZXN0aW9uc1tpXS51bmJpbmRWYWx1ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoISF0aGlzLmVkaXRpbmdPYmopIHtcbiAgICAgIHRoaXMuc2V0RGF0YUNvcmUoe30pO1xuICAgICAgdGhpcy5vbkVkaXRpbmdPYmpQcm9wZXJ0eUNoYW5nZWQgPSAoc2VuZGVyOiBCYXNlLCBvcHRpb25zOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKCFTZXJpYWxpemVyLmhhc09yaWdpbmFsUHJvcGVydHkodGhpcy5lZGl0aW5nT2JqLCBvcHRpb25zLm5hbWUpKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy51cGRhdGVPblNldFZhbHVlKG9wdGlvbnMubmFtZSwgb3B0aW9ucy5uZXdWYWx1ZSwgb3B0aW9ucy5vbGRWYWx1ZSk7XG4gICAgICB9O1xuICAgICAgdGhpcy5lZGl0aW5nT2JqLm9uUHJvcGVydHlDaGFuZ2VkLmFkZCh0aGlzLm9uRWRpdGluZ09ialByb3BlcnR5Q2hhbmdlZCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgaXNFZGl0aW5nU3VydmV5RWxlbWVudCgpIHtcbiAgICByZXR1cm4gISF0aGlzLmVkaXRpbmdPYmo7XG4gIH1cbiAgcHJpdmF0ZSBzZXRDYWxjdWF0ZWRWYWx1ZXNJbnRvUmVzdWx0KHJlc3VsdDogYW55KSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNhbGN1bGF0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjYWxWYWx1ZSA9IHRoaXMuY2FsY3VsYXRlZFZhbHVlc1tpXTtcbiAgICAgIGlmIChcbiAgICAgICAgY2FsVmFsdWUuaW5jbHVkZUludG9SZXN1bHQgJiZcbiAgICAgICAgISFjYWxWYWx1ZS5uYW1lICYmXG4gICAgICAgIHRoaXMuZ2V0VmFyaWFibGUoY2FsVmFsdWUubmFtZSkgIT09IHVuZGVmaW5lZFxuICAgICAgKSB7XG4gICAgICAgIHJlc3VsdFtjYWxWYWx1ZS5uYW1lXSA9IHRoaXMuZ2V0VmFyaWFibGUoY2FsVmFsdWUubmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGdldEFsbFZhbHVlcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmRhdGE7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgc3VydmV5IHJlc3VsdCBkYXRhIGFzIGFuIGFycmF5IG9mIHBsYWluIG9iamVjdHM6IHdpdGggcXVlc3Rpb24gYHRpdGxlYCwgYG5hbWVgLCBgdmFsdWVgLCBhbmQgYGRpc3BsYXlWYWx1ZWAuXG4gICAqXG4gICAqIEZvciBjb21wbGV4IHF1ZXN0aW9ucyAobGlrZSBtYXRyaXgsIGV0Yy4pIGBpc05vZGVgIGZsYWcgaXMgc2V0IHRvIGB0cnVlYCBhbmQgZGF0YSBjb250YWlucyBhcnJheSBvZiBuZXN0ZWQgb2JqZWN0cyAocm93cykuXG4gICAqXG4gICAqIFNldCBgb3B0aW9ucy5pbmNsdWRlRW1wdHlgIHRvIGBmYWxzZWAgaWYgeW91IHdhbnQgdG8gc2tpcCBlbXB0eSBhbnN3ZXJzLlxuICAgKi9cbiAgcHVibGljIGdldFBsYWluRGF0YShcbiAgICBvcHRpb25zOiB7XG4gICAgICBpbmNsdWRlRW1wdHk/OiBib29sZWFuO1xuICAgICAgaW5jbHVkZVF1ZXN0aW9uVHlwZXM/OiBib29sZWFuO1xuICAgICAgY2FsY3VsYXRpb25zPzogQXJyYXk8e1xuICAgICAgICBwcm9wZXJ0eU5hbWU6IHN0cmluZztcbiAgICAgIH0+O1xuICAgIH0gPSB7XG4gICAgICBpbmNsdWRlRW1wdHk6IHRydWUsXG4gICAgICBpbmNsdWRlUXVlc3Rpb25UeXBlczogZmFsc2UsXG4gICAgfVxuICApIHtcbiAgICB2YXIgcmVzdWx0OiBBcnJheTxhbnk+ID0gW107XG4gICAgdGhpcy5nZXRBbGxRdWVzdGlvbnMoKS5mb3JFYWNoKChxdWVzdGlvbikgPT4ge1xuICAgICAgdmFyIHJlc3VsdEl0ZW0gPSAoPFF1ZXN0aW9uPnF1ZXN0aW9uKS5nZXRQbGFpbkRhdGEob3B0aW9ucyk7XG4gICAgICBpZiAoISFyZXN1bHRJdGVtKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHJlc3VsdEl0ZW0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgZ2V0RmlsdGVyZWRWYWx1ZXMoKTogYW55IHtcbiAgICB2YXIgdmFsdWVzOiB7IFtpbmRleDogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy52YXJpYWJsZXNIYXNoKSB2YWx1ZXNba2V5XSA9IHRoaXMudmFyaWFibGVzSGFzaFtrZXldO1xuICAgIHRoaXMuYWRkQ2FsY3VsYXRlZFZhbHVlc0ludG9GaWx0ZXJlZFZhbHVlcyh2YWx1ZXMpO1xuICAgIHZhciBrZXlzID0gdGhpcy5nZXRWYWx1ZXNLZXlzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgIHZhbHVlc1trZXldID0gdGhpcy5nZXREYXRhVmFsdWVDb3JlKHRoaXMudmFsdWVzSGFzaCwga2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfVxuICBwcml2YXRlIGFkZENhbGN1bGF0ZWRWYWx1ZXNJbnRvRmlsdGVyZWRWYWx1ZXModmFsdWVzOiB7XG4gICAgW2luZGV4OiBzdHJpbmddOiBhbnk7XG4gIH0pIHtcbiAgICB2YXIgY2FjbFZhbHVlcyA9IHRoaXMuY2FsY3VsYXRlZFZhbHVlcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhY2xWYWx1ZXMubGVuZ3RoOyBpKyspXG4gICAgICB2YWx1ZXNbY2FjbFZhbHVlc1tpXS5uYW1lXSA9IGNhY2xWYWx1ZXNbaV0udmFsdWU7XG4gIH1cbiAgZ2V0RmlsdGVyZWRQcm9wZXJ0aWVzKCk6IGFueSB7XG4gICAgcmV0dXJuIHsgc3VydmV5OiB0aGlzIH07XG4gIH1cbiAgcHJpdmF0ZSBnZXRWYWx1ZXNLZXlzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIGlmICghdGhpcy5lZGl0aW5nT2JqKSByZXR1cm4gT2JqZWN0LmtleXModGhpcy52YWx1ZXNIYXNoKTtcbiAgICB2YXIgcHJvcHMgPSBTZXJpYWxpemVyLmdldFByb3BlcnRpZXNCeU9iaih0aGlzLmVkaXRpbmdPYmopO1xuICAgIHZhciByZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXMucHVzaChwcm9wc1tpXS5uYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgZ2V0RGF0YVZhbHVlQ29yZSh2YWx1ZXNIYXNoOiBhbnksIGtleTogc3RyaW5nKSB7XG4gICAgaWYgKCEhdGhpcy5lZGl0aW5nT2JqKVxuICAgICAgcmV0dXJuIFNlcmlhbGl6ZXIuZ2V0T2JqUHJvcGVydHlWYWx1ZSh0aGlzLmVkaXRpbmdPYmosIGtleSk7XG4gICAgcmV0dXJuIHZhbHVlc0hhc2hba2V5XTtcbiAgfVxuICBwdWJsaWMgc2V0RGF0YVZhbHVlQ29yZSh2YWx1ZXNIYXNoOiBhbnksIGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgaWYgKCEhdGhpcy5lZGl0aW5nT2JqKSB7XG4gICAgICBTZXJpYWxpemVyLnNldE9ialByb3BlcnR5VmFsdWUodGhpcy5lZGl0aW5nT2JqLCBrZXksIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWVzSGFzaFtrZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBkZWxldGVEYXRhVmFsdWVDb3JlKHZhbHVlc0hhc2g6IGFueSwga2V5OiBzdHJpbmcpIHtcbiAgICBpZiAoISF0aGlzLmVkaXRpbmdPYmopIHtcbiAgICAgICg8YW55PnRoaXMuZWRpdGluZ09iailba2V5XSA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZXNIYXNoW2tleV07XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCBjb21tZW50cyBmcm9tIHRoZSBkYXRhLlxuICAgKiBAc2VlIGRhdGFcbiAgICovXG4gIHB1YmxpYyBnZXQgY29tbWVudHMoKTogYW55IHtcbiAgICB2YXIgcmVzdWx0OiB7IFtpbmRleDogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICB2YXIga2V5cyA9IHRoaXMuZ2V0VmFsdWVzS2V5cygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICBpZiAoa2V5LmluZGV4T2YodGhpcy5jb21tZW50UHJlZml4KSA+IDApIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSB0aGlzLmdldERhdGFWYWx1ZUNvcmUodGhpcy52YWx1ZXNIYXNoLCBrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbGlzdCBvZiB2aXNpYmxlIHBhZ2VzLiBJZiBhbGwgcGFnZXMgYXJlIHZpc2libGUsIHRoZW4gdGhpcyBwcm9wZXJ0eSByZXR1cm5zIHRoZSBzYW1lIGxpc3QgYXMgdGhlIGBwYWdlc2AgcHJvcGVydHkuXG4gICAqIEBzZWUgcGFnZXNcbiAgICogQHNlZSBQYWdlTW9kZWwudmlzaWJsZVxuICAgKiBAc2VlIFBhZ2VNb2RlbC52aXNpYmxlSWZcbiAgICovXG4gIHB1YmxpYyBnZXQgdmlzaWJsZVBhZ2VzKCk6IEFycmF5PFBhZ2VNb2RlbD4ge1xuICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSkgcmV0dXJuIHRoaXMucGFnZXM7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheTxQYWdlTW9kZWw+KCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5wYWdlc1tpXS5pc1Zpc2libGUpIHtcbiAgICAgICAgcmVzdWx0LnB1c2godGhpcy5wYWdlc1tpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBzdXJ2ZXkgY29udGFpbnMgbm8gcGFnZXMuIFRoZSBzdXJ2ZXkgaXMgZW1wdHkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucGFnZXMubGVuZ3RoID09IDA7XG4gIH1cbiAgLyoqXG4gICAqIERlcHJlY2F0ZWQuIFVzZSB0aGUgYHBhZ2VDb3VudGAgcHJvcGVydHkgaW5zdGVhZC5cbiAgICovXG4gIGdldCBQYWdlQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wYWdlQ291bnQ7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHN1cnZleSBwYWdlIGNvdW50LlxuICAgKiBAc2VlIHZpc2libGVQYWdlQ291bnRcbiAgICogQHNlZSBwYWdlc1xuICAgKi9cbiAgcHVibGljIGdldCBwYWdlQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wYWdlcy5sZW5ndGg7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSBudW1iZXIgb2YgdmlzaWJsZSBwYWdlcyB3aXRoaW4gdGhlIHN1cnZleS5cbiAgICogQHNlZSBwYWdlQ291bnRcbiAgICogQHNlZSB2aXNpYmxlUGFnZXNcbiAgICovXG4gIHB1YmxpYyBnZXQgdmlzaWJsZVBhZ2VDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnZpc2libGVQYWdlcy5sZW5ndGg7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHN0YXJ0ZWQgcGFnZS4gVGhpcyBwcm9wZXJ0eSB3b3JrcyBpZiB0aGUgYGZpcnN0UGFnZUlzU3RhcnRlZGAgcHJvcGVydHkgaXMgc2V0IHRvIGB0cnVlYC5cbiAgICogQHNlZSBmaXJzdFBhZ2VJc1N0YXJ0ZWRcbiAgICovXG4gIHB1YmxpYyBnZXQgc3RhcnRlZFBhZ2UoKTogUGFnZU1vZGVsIHtcbiAgICB2YXIgcGFnZSA9XG4gICAgICB0aGlzLmZpcnN0UGFnZUlzU3RhcnRlZCAmJiB0aGlzLnBhZ2VzLmxlbmd0aCA+IDAgPyB0aGlzLnBhZ2VzWzBdIDogbnVsbDtcbiAgICBpZiAoISFwYWdlKSB7XG4gICAgICBwYWdlLm9uRmlyc3RSZW5kZXJpbmcoKTtcbiAgICAgIHBhZ2Uuc2V0V2FzU2hvd24odHJ1ZSk7XG4gICAgfVxuICAgIHJldHVybiBwYWdlO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGhlIGN1cnJlbnQgc3VydmV5IHBhZ2UuIElmIGEgc3VydmV5IGlzIHJlbmRlcmVkLCB0aGVuIHRoaXMgcHJvcGVydHkgcmV0dXJucyBhIHBhZ2UgdGhhdCBhIHVzZXIgY2FuIHNlZS9lZGl0LlxuICAgKi9cbiAgcHVibGljIGdldCBjdXJyZW50UGFnZSgpOiBhbnkge1xuICAgIHZhciB2UGFnZXMgPSB0aGlzLnZpc2libGVQYWdlcztcbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZVZhbHVlICE9IG51bGwpIHtcbiAgICAgIGlmICh2UGFnZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRQYWdlVmFsdWUpIDwgMCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIXRoaXMub25Db250YWluc1BhZ2VDYWxsYmFjayB8fFxuICAgICAgICAgICF0aGlzLm9uQ29udGFpbnNQYWdlQ2FsbGJhY2sodGhpcy5jdXJyZW50UGFnZVZhbHVlKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZVZhbHVlID09IG51bGwgJiYgdlBhZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB2UGFnZXNbMF07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmN1cnJlbnRQYWdlVmFsdWU7XG4gIH1cbiAgcHVibGljIHNldCBjdXJyZW50UGFnZSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHJldHVybjtcbiAgICB2YXIgbmV3UGFnZSA9IHRoaXMuZ2V0UGFnZUJ5T2JqZWN0KHZhbHVlKTtcbiAgICBpZiAoISF2YWx1ZSAmJiAhbmV3UGFnZSkgcmV0dXJuO1xuICAgIHZhciB2UGFnZXMgPSB0aGlzLnZpc2libGVQYWdlcztcbiAgICBpZiAobmV3UGFnZSAhPSBudWxsICYmIHZQYWdlcy5pbmRleE9mKG5ld1BhZ2UpIDwgMCkgcmV0dXJuO1xuICAgIGlmIChuZXdQYWdlID09IHRoaXMuY3VycmVudFBhZ2VWYWx1ZSkgcmV0dXJuO1xuICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMuY3VycmVudFBhZ2VWYWx1ZTtcbiAgICBpZiAoIXRoaXMuY3VycmVudFBhZ2VDaGFuZ2luZyhuZXdQYWdlLCBvbGRWYWx1ZSkpIHJldHVybjtcbiAgICB0aGlzLmN1cnJlbnRQYWdlVmFsdWUgPSBuZXdQYWdlO1xuICAgIGlmICghIW5ld1BhZ2UpIHtcbiAgICAgIG5ld1BhZ2Uub25GaXJzdFJlbmRlcmluZygpO1xuICAgICAgbmV3UGFnZS51cGRhdGVDdXN0b21XaWRnZXRzKCk7XG4gICAgICBuZXdQYWdlLnNldFdhc1Nob3duKHRydWUpO1xuICAgIH1cbiAgICB0aGlzLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgdGhpcy5jdXJyZW50UGFnZUNoYW5nZWQobmV3UGFnZSwgb2xkVmFsdWUpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50UGFnZSwgdW5sZXNzIHRoZSBzdGFydGVkIHBhZ2UgaXMgc2hvd2luZy4gSW4gdGhpcyBjYXNlIHJldHVybnMgdGhlIHN0YXJ0ZWQgcGFnZS5cbiAgICogQHNlZSBjdXJyZW50UGFnZVxuICAgKiBAc2VlIGZpcnN0UGFnZUlzU3RhcnRlZFxuICAgKiBAc2VlIHN0YXJ0ZWRQYWdlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFjdGl2ZVBhZ2UoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5pc1N0YXJ0ZWRTdGF0ZSAmJiB0aGlzLnN0YXJ0ZWRQYWdlXG4gICAgICA/IHRoaXMuc3RhcnRlZFBhZ2VcbiAgICAgIDogdGhpcy5jdXJyZW50UGFnZTtcbiAgfVxuICBwcml2YXRlIGdldFBhZ2VCeU9iamVjdCh2YWx1ZTogYW55KTogUGFnZU1vZGVsIHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gbnVsbDtcbiAgICBpZiAodmFsdWUuZ2V0VHlwZSAmJiB2YWx1ZS5nZXRUeXBlKCkgPT0gXCJwYWdlXCIpIHJldHVybiB2YWx1ZTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nKVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFnZUJ5TmFtZShTdHJpbmcodmFsdWUpKTtcbiAgICBpZiAoIWlzTmFOKHZhbHVlKSkge1xuICAgICAgdmFyIGluZGV4ID0gTnVtYmVyKHZhbHVlKTtcbiAgICAgIHZhciB2UGFnZXMgPSB0aGlzLnZpc2libGVQYWdlcztcbiAgICAgIGlmICh2YWx1ZSA8IDAgfHwgdmFsdWUgPj0gdlBhZ2VzLmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gICAgICByZXR1cm4gdlBhZ2VzW2luZGV4XTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgemVyby1iYXNlZCBpbmRleCBvZiB0aGUgY3VycmVudCBwYWdlIGluIHRoZSB2aXNpYmxlIHBhZ2VzIGFycmF5LlxuICAgKi9cbiAgcHVibGljIGdldCBjdXJyZW50UGFnZU5vKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZVBhZ2VzLmluZGV4T2YodGhpcy5jdXJyZW50UGFnZSk7XG4gIH1cbiAgcHVibGljIHNldCBjdXJyZW50UGFnZU5vKHZhbHVlOiBudW1iZXIpIHtcbiAgICB2YXIgdlBhZ2VzID0gdGhpcy52aXNpYmxlUGFnZXM7XG4gICAgaWYgKHZhbHVlIDwgMCB8fCB2YWx1ZSA+PSB2UGFnZXMubGVuZ3RoKSByZXR1cm47XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHZQYWdlc1t2YWx1ZV07XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgcXVlc3Rpb24gZGlzcGxheSBvcmRlci4gVXNlIHRoaXMgcHJvcGVydHkgdG8gcmFuZG9taXplIHF1ZXN0aW9ucy4gWW91IGNhbiByYW5kb21pemUgcXVlc3Rpb25zIG9uIGEgc3BlY2lmaWMgcGFnZS5cbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhdmFpbGFibGU6XG4gICAqXG4gICAqIC0gYHJhbmRvbWAgLSByYW5kb21pemUgcXVlc3Rpb25zXG4gICAqIC0gYGluaXRpYWxgIC0ga2VlcCBxdWVzdGlvbnMgaW4gdGhlIHNhbWUgb3JkZXIsIGFzIGluIGEgc3VydmV5IG1vZGVsLlxuICAgKiBAc2VlIFN1cnZleVBhZ2UucXVlc3Rpb25zT3JkZXJcbiAgICovXG4gIHB1YmxpYyBnZXQgcXVlc3Rpb25zT3JkZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInF1ZXN0aW9uc09yZGVyXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcXVlc3Rpb25zT3JkZXIodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvbnNPcmRlclwiLCB2YWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGlucHV0IGZvY3VzIHRvIHRoZSBmaXJzdCBxdWVzdGlvbiB3aXRoIHRoZSBpbnB1dCBmaWVsZC5cbiAgICovXG4gIHB1YmxpYyBmb2N1c0ZpcnN0UXVlc3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuaXNGb2N1c2luZ1F1ZXN0aW9uKSByZXR1cm47XG4gICAgdmFyIHBhZ2UgPSB0aGlzLmFjdGl2ZVBhZ2U7XG4gICAgaWYgKHBhZ2UpIHtcbiAgICAgIHBhZ2Uuc2Nyb2xsVG9Ub3AoKTtcbiAgICAgIHBhZ2UuZm9jdXNGaXJzdFF1ZXN0aW9uKCk7XG4gICAgfVxuICB9XG4gIHNjcm9sbFRvVG9wT25QYWdlQ2hhbmdlKCkge1xuICAgIHZhciBwYWdlID0gdGhpcy5hY3RpdmVQYWdlO1xuICAgIGlmICghcGFnZSkgcmV0dXJuO1xuICAgIHBhZ2Uuc2Nyb2xsVG9Ub3AoKTtcbiAgICBpZiAodGhpcy5mb2N1c0ZpcnN0UXVlc3Rpb25BdXRvbWF0aWMgJiYgIXRoaXMuaXNGb2N1c2luZ1F1ZXN0aW9uKSB7XG4gICAgICBwYWdlLmZvY3VzRmlyc3RRdWVzdGlvbigpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCBzdXJ2ZXkgc3RhdGU6XG4gICAqXG4gICAqIC0gYGxvYWRpbmdgIC0gdGhlIHN1cnZleSBpcyBiZWluZyBsb2FkZWQgZnJvbSBKU09OLFxuICAgKiAtIGBlbXB0eWAgLSB0aGVyZSBpcyBub3RoaW5nIHRvIGRpc3BsYXkgaW4gdGhlIGN1cnJlbnQgc3VydmV5LFxuICAgKiAtIGBzdGFydGluZ2AgLSB0aGUgc3VydmV5J3Mgc3RhcnQgcGFnZSBpcyBkaXNwbGF5ZWQsXG4gICAqIC0gYHJ1bm5pbmdgIC0gYSByZXNwb25kZW50IGlzIGFuc3dlcmluZyBzdXJ2ZXkgcXVlc3Rpb25zIHJpZ2h0IG5vdyxcbiAgICogLSBgcHJldmlld2AgLSBhIHJlc3BvbmRlbnQgaXMgcHJldmlld2luZyBhbnN3ZXJlZCBxdWVzdGlvbnMgYmVmb3JlIHN1Ym1pdHRpbmcgdGhlIHN1cnZleSAoc2VlIFtleGFtcGxlXShodHRwczovL3N1cnZleWpzLmlvL0V4YW1wbGVzL0xpYnJhcnk/aWQ9c3VydmV5LXNob3dwcmV2aWV3KSksXG4gICAqIC0gYGNvbXBsZXRlZGAgLSBhIHJlc3BvbmRlbnQgaGFzIGNvbXBsZXRlZCB0aGUgc3VydmV5IGFuZCBzdWJtaXR0ZWQgdGhlIHJlc3VsdHMuXG4gICAqXG4gICAqIERldGFpbHM6IFtQcmV2aWV3IFN0YXRlXShodHRwczovL3N1cnZleWpzLmlvL0RvY3VtZW50YXRpb24vTGlicmFyeSNzdGF0ZXMpXG4gICAqL1xuICBwdWJsaWMgZ2V0IHN0YXRlKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nKSByZXR1cm4gXCJsb2FkaW5nXCI7XG4gICAgaWYgKHRoaXMuaXNDb21wbGV0ZWQpIHJldHVybiBcImNvbXBsZXRlZFwiO1xuICAgIGlmICh0aGlzLmlzQ29tcGxldGVkQmVmb3JlKSByZXR1cm4gXCJjb21wbGV0ZWRiZWZvcmVcIjtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5pc0Rlc2lnbk1vZGUgJiZcbiAgICAgIHRoaXMuaXNFZGl0TW9kZSAmJlxuICAgICAgdGhpcy5pc1N0YXJ0ZWRTdGF0ZSAmJlxuICAgICAgdGhpcy5zdGFydGVkUGFnZVxuICAgIClcbiAgICAgIHJldHVybiBcInN0YXJ0aW5nXCI7XG4gICAgaWYgKHRoaXMuaXNTaG93aW5nUHJldmlldykgcmV0dXJuIHRoaXMuY3VycmVudFBhZ2UgPyBcInByZXZpZXdcIiA6IFwiZW1wdHlcIjtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50UGFnZSA/IFwicnVubmluZ1wiIDogXCJlbXB0eVwiO1xuICB9XG4gIHByaXZhdGUgZ2V0IGlzQ29tcGxldGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc0NvbXBsZXRlZFwiLCBmYWxzZSk7XG4gIH1cbiAgcHJpdmF0ZSBzZXQgaXNDb21wbGV0ZWQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNDb21wbGV0ZWRcIiwgdmFsKTtcbiAgfVxuICBwcml2YXRlIGdldCBpc1Nob3dpbmdQcmV2aWV3KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc1Nob3dpbmdQcmV2aWV3XCIsIGZhbHNlKTtcbiAgfVxuICBwcml2YXRlIHNldCBpc1Nob3dpbmdQcmV2aWV3KHZhbDogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLmlzU2hvd2luZ1ByZXZpZXcgPT0gdmFsKSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNTaG93aW5nUHJldmlld1wiLCB2YWwpO1xuICAgIHRoaXMub25TaG93aW5nUHJldmlld0NoYW5nZWQoKTtcbiAgfVxuICBwcml2YXRlIGdldCBpc1N0YXJ0ZWRTdGF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaXNTdGFydGVkU3RhdGVcIiwgZmFsc2UpO1xuICB9XG4gIHByaXZhdGUgc2V0IGlzU3RhcnRlZFN0YXRlKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzU3RhcnRlZFN0YXRlXCIsIHZhbCk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgaXNDb21wbGV0ZWRCZWZvcmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlzQ29tcGxldGVkQmVmb3JlXCIsIGZhbHNlKTtcbiAgfVxuICBwcml2YXRlIHNldCBpc0NvbXBsZXRlZEJlZm9yZSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc0NvbXBsZXRlZEJlZm9yZVwiLCB2YWwpO1xuICB9XG4gIHByaXZhdGUgZ2V0IGlzTG9hZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaXNMb2FkaW5nXCIsIGZhbHNlKTtcbiAgfVxuICBwcml2YXRlIHNldCBpc0xvYWRpbmcodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNMb2FkaW5nXCIsIHZhbCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNvbXBsZXRlZFN0YXRlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29tcGxldGVkU3RhdGVWYWx1ZTtcbiAgfVxuICBnZXQgY29tcGxldGVkU3RhdGVUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29tcGxldGVkU3RhdGVUZXh0VmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIHNldENvbXBsZXRlZFN0YXRlKHZhbHVlOiBzdHJpbmcsIHRleHQ6IHN0cmluZykge1xuICAgIHRoaXMuY29tcGxldGVkU3RhdGVWYWx1ZSA9IHZhbHVlO1xuICAgIGlmICghdGV4dCkge1xuICAgICAgaWYgKHZhbHVlID09IFwic2F2aW5nXCIpIHRleHQgPSB0aGlzLmdldExvY1N0cmluZyhcInNhdmluZ0RhdGFcIik7XG4gICAgICBpZiAodmFsdWUgPT0gXCJlcnJvclwiKSB0ZXh0ID0gdGhpcy5nZXRMb2NTdHJpbmcoXCJzYXZpbmdEYXRhRXJyb3JcIik7XG4gICAgICBpZiAodmFsdWUgPT0gXCJzdWNjZXNzXCIpIHRleHQgPSB0aGlzLmdldExvY1N0cmluZyhcInNhdmluZ0RhdGFTdWNjZXNzXCIpO1xuICAgIH1cbiAgICB0aGlzLmNvbXBsZXRlZFN0YXRlVGV4dFZhbHVlID0gdGV4dDtcbiAgfVxuICAvKipcbiAgICogQ2xlYXJzIHRoZSBzdXJ2ZXkgZGF0YSBhbmQgc3RhdGUuIElmIHRoZSBzdXJ2ZXkgaGFzIGEgYGNvbXBsZXRlZGAgc3RhdGUsIGl0IHdpbGwgZ2V0IGEgYHJ1bm5pbmdgIHN0YXRlLlxuICAgKiBAcGFyYW0gY2xlYXJEYXRhIGNsZWFyIHRoZSBkYXRhXG4gICAqIEBwYXJhbSBnb3RvRmlyc3RQYWdlIG1ha2UgdGhlIGZpcnN0IHBhZ2UgYXMgYSBjdXJyZW50IHBhZ2UuXG4gICAqIEBzZWUgZGF0YVxuICAgKiBAc2VlIHN0YXRlXG4gICAqIEBzZWUgY3VycmVudFBhZ2VcbiAgICovXG4gIHB1YmxpYyBjbGVhcihjbGVhckRhdGE6IGJvb2xlYW4gPSB0cnVlLCBnb3RvRmlyc3RQYWdlOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIGlmIChjbGVhckRhdGEpIHtcbiAgICAgIHRoaXMuZGF0YSA9IG51bGw7XG4gICAgICB0aGlzLnZhcmlhYmxlc0hhc2ggPSB7fTtcbiAgICB9XG4gICAgdGhpcy50aW1lU3BlbnQgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5wYWdlc1tpXS50aW1lU3BlbnQgPSAwO1xuICAgICAgdGhpcy5wYWdlc1tpXS5zZXRXYXNTaG93bihmYWxzZSk7XG4gICAgICB0aGlzLnBhZ2VzW2ldLnBhc3NlZCA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmlzQ29tcGxldGVkID0gZmFsc2U7XG4gICAgdGhpcy5pc0NvbXBsZXRlZEJlZm9yZSA9IGZhbHNlO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5pc1N0YXJ0ZWRTdGF0ZSA9IHRoaXMuZmlyc3RQYWdlSXNTdGFydGVkO1xuICAgIGlmIChnb3RvRmlyc3RQYWdlICYmIHRoaXMudmlzaWJsZVBhZ2VDb3VudCA+IDApIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnZpc2libGVQYWdlc1swXTtcbiAgICB9XG4gICAgaWYgKGNsZWFyRGF0YSkge1xuICAgICAgdGhpcy51cGRhdGVWYWx1ZXNXaXRoRGVmYXVsdHMoKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIG1lcmdlVmFsdWVzKHNyYzogYW55LCBkZXN0OiBhbnkpIHtcbiAgICBpZiAoIWRlc3QgfHwgIXNyYykgcmV0dXJuO1xuICAgIGlmICh0eXBlb2YgZGVzdCAhPT0gXCJvYmplY3RcIikgcmV0dXJuO1xuICAgIGZvciAodmFyIGtleSBpbiBzcmMpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHNyY1trZXldO1xuICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBpZiAoIWRlc3Rba2V5XSkgZGVzdFtrZXldID0ge307XG4gICAgICAgIHRoaXMubWVyZ2VWYWx1ZXModmFsdWUsIGRlc3Rba2V5XSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZXN0W2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVWYWx1ZXNXaXRoRGVmYXVsdHMoKSB7XG4gICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlIHx8IHRoaXMuaXNMb2FkaW5nKSByZXR1cm47XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5wYWdlc1tpXS5xdWVzdGlvbnM7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHF1ZXN0aW9ucy5sZW5ndGg7IGorKykge1xuICAgICAgICBxdWVzdGlvbnNbal0udXBkYXRlVmFsdWVXaXRoRGVmYXVsdHMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIHVwZGF0ZUN1c3RvbVdpZGdldHMocGFnZTogUGFnZU1vZGVsKSB7XG4gICAgaWYgKCFwYWdlKSByZXR1cm47XG4gICAgcGFnZS51cGRhdGVDdXN0b21XaWRnZXRzKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGN1cnJlbnRQYWdlQ2hhbmdpbmcobmV3VmFsdWU6IFBhZ2VNb2RlbCwgb2xkVmFsdWU6IFBhZ2VNb2RlbCkge1xuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgb2xkQ3VycmVudFBhZ2U6IG9sZFZhbHVlLFxuICAgICAgbmV3Q3VycmVudFBhZ2U6IG5ld1ZhbHVlLFxuICAgICAgYWxsb3dDaGFuZ2luZzogdHJ1ZSxcbiAgICAgIGlzTmV4dFBhZ2U6IHRoaXMuaXNOZXh0UGFnZShuZXdWYWx1ZSwgb2xkVmFsdWUpLFxuICAgICAgaXNQcmV2UGFnZTogdGhpcy5pc1ByZXZQYWdlKG5ld1ZhbHVlLCBvbGRWYWx1ZSksXG4gICAgfTtcbiAgICB0aGlzLm9uQ3VycmVudFBhZ2VDaGFuZ2luZy5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIHJldHVybiBvcHRpb25zLmFsbG93Q2hhbmdpbmc7XG4gIH1cbiAgcHJvdGVjdGVkIGN1cnJlbnRQYWdlQ2hhbmdlZChuZXdWYWx1ZTogUGFnZU1vZGVsLCBvbGRWYWx1ZTogUGFnZU1vZGVsKSB7XG4gICAgY29uc3QgaXNOZXh0UGFnZTogYm9vbGVhbiA9IHRoaXMuaXNOZXh0UGFnZShuZXdWYWx1ZSwgb2xkVmFsdWUpO1xuICAgIGlmIChpc05leHRQYWdlKSB7XG4gICAgICBvbGRWYWx1ZS5wYXNzZWQgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLm9uQ3VycmVudFBhZ2VDaGFuZ2VkLmZpcmUodGhpcywge1xuICAgICAgb2xkQ3VycmVudFBhZ2U6IG9sZFZhbHVlLFxuICAgICAgbmV3Q3VycmVudFBhZ2U6IG5ld1ZhbHVlLFxuICAgICAgaXNOZXh0UGFnZTogaXNOZXh0UGFnZSxcbiAgICAgIGlzUHJldlBhZ2U6IHRoaXMuaXNQcmV2UGFnZShuZXdWYWx1ZSwgb2xkVmFsdWUpLFxuICAgIH0pO1xuICB9XG4gIHByaXZhdGUgaXNOZXh0UGFnZShuZXdWYWx1ZTogUGFnZU1vZGVsLCBvbGRWYWx1ZTogUGFnZU1vZGVsKTogYm9vbGVhbiB7XG4gICAgaWYgKCFuZXdWYWx1ZSB8fCAhb2xkVmFsdWUpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gbmV3VmFsdWUudmlzaWJsZUluZGV4ID09IG9sZFZhbHVlLnZpc2libGVJbmRleCArIDE7XG4gIH1cbiAgcHJpdmF0ZSBpc1ByZXZQYWdlKG5ld1ZhbHVlOiBQYWdlTW9kZWwsIG9sZFZhbHVlOiBQYWdlTW9kZWwpOiBib29sZWFuIHtcbiAgICBpZiAoIW5ld1ZhbHVlIHx8ICFvbGRWYWx1ZSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBuZXdWYWx1ZS52aXNpYmxlSW5kZXggKyAxID09IG9sZFZhbHVlLnZpc2libGVJbmRleDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcHJvZ3Jlc3MgdGhhdCBhIHVzZXIgbWFkZSB3aGlsZSBnb2luZyB0aHJvdWdoIHRoZSBzdXJ2ZXkuXG4gICAqIEl0IGRlcGVuZHMgZnJvbSBwcm9ncmVzc0JhclR5cGUgcHJvcGVydHlcbiAgICogQHNlZSBwcm9ncmVzc0JhclR5cGVcbiAgICogQHNlZSBwcm9ncmVzc1ZhbHVlXG4gICAqL1xuICBwdWJsaWMgZ2V0UHJvZ3Jlc3MoKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA9PSBudWxsKSByZXR1cm4gMDtcbiAgICBpZiAodGhpcy5wcm9ncmVzc0JhclR5cGUgIT09IFwicGFnZXNcIikge1xuICAgICAgdmFyIGluZm8gPSB0aGlzLmdldFByb2dyZXNzSW5mbygpO1xuICAgICAgaWYgKHRoaXMucHJvZ3Jlc3NCYXJUeXBlID09PSBcInJlcXVpcmVkUXVlc3Rpb25zXCIpIHtcbiAgICAgICAgcmV0dXJuIGluZm8ucmVxdWlyZWRRdWVzdGlvbkNvdW50ID4gMVxuICAgICAgICAgID8gTWF0aC5jZWlsKFxuICAgICAgICAgICAgICAoaW5mby5yZXF1aXJlZEFuc3dlcmVkUXVlc3Rpb25Db3VudCAqIDEwMCkgL1xuICAgICAgICAgICAgICAgIGluZm8ucmVxdWlyZWRRdWVzdGlvbkNvdW50XG4gICAgICAgICAgICApXG4gICAgICAgICAgOiAxMDA7XG4gICAgICB9XG4gICAgICByZXR1cm4gaW5mby5xdWVzdGlvbkNvdW50ID4gMVxuICAgICAgICA/IE1hdGguY2VpbCgoaW5mby5hbnN3ZXJlZFF1ZXN0aW9uQ291bnQgKiAxMDApIC8gaW5mby5xdWVzdGlvbkNvdW50KVxuICAgICAgICA6IDEwMDtcbiAgICB9XG4gICAgdmFyIGluZGV4ID0gdGhpcy52aXNpYmxlUGFnZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRQYWdlKSArIDE7XG4gICAgcmV0dXJuIE1hdGguY2VpbCgoaW5kZXggKiAxMDApIC8gdGhpcy52aXNpYmxlUGFnZUNvdW50KTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcHJvZ3Jlc3MgdGhhdCBhIHVzZXIgbWFkZSB3aGlsZSBnb2luZyB0aHJvdWdoIHRoZSBzdXJ2ZXkuXG4gICAqIEl0IGRlcGVuZHMgZnJvbSBwcm9ncmVzc0JhclR5cGUgcHJvcGVydHlcbiAgICogQHNlZSBwcm9ncmVzc0JhclR5cGVcbiAgICovXG4gIHB1YmxpYyBnZXQgcHJvZ3Jlc3NWYWx1ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJwcm9ncmVzc1ZhbHVlXCIsIDApO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBuYXZpZ2F0aW9uIGJ1dHRvbnMgKGkuZS4sICdQcmV2JywgJ05leHQnLCBvciAnQ29tcGxldGUnIGFuZCAnUHJldmlldycpIHBvc2l0aW9uLlxuICAgKi9cbiAgcHVibGljIGdldCBpc05hdmlnYXRpb25CdXR0b25zU2hvd2luZygpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSkgcmV0dXJuIFwibm9uZVwiO1xuICAgIHZhciBwYWdlID0gdGhpcy5jdXJyZW50UGFnZTtcbiAgICBpZiAoIXBhZ2UpIHJldHVybiBcIm5vbmVcIjtcbiAgICBpZiAocGFnZS5uYXZpZ2F0aW9uQnV0dG9uc1Zpc2liaWxpdHkgPT09IFwic2hvd1wiKSB7XG4gICAgICByZXR1cm4gXCJib3R0b21cIjtcbiAgICB9XG4gICAgaWYgKHBhZ2UubmF2aWdhdGlvbkJ1dHRvbnNWaXNpYmlsaXR5ID09PSBcImhpZGVcIikge1xuICAgICAgcmV0dXJuIFwibm9uZVwiO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zaG93TmF2aWdhdGlvbkJ1dHRvbnM7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgbmF2aWdhdGlvbiBidXR0b25zIChpLmUuLCAnUHJldicsICdOZXh0Jywgb3IgJ0NvbXBsZXRlJyBhbmQgJ1ByZXZpZXcnKSBhcmUgc2hvd3Mgb24gdG9wLlxuICAgKi9cbiAgcHVibGljIGdldCBpc05hdmlnYXRpb25CdXR0b25zU2hvd2luZ09uVG9wKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldElzTmF2aWdhdGlvbkJ1dHRvbnNTaG93aW5nT24oXCJ0b3BcIik7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgbmF2aWdhdGlvbiBidXR0b25zIChpLmUuLCAnUHJldicsICdOZXh0Jywgb3IgJ0NvbXBsZXRlJyBhbmQgJ1ByZXZpZXcnKSBhcmUgc2hvd3Mgb24gYm90dG9tLlxuICAgKi9cbiAgcHVibGljIGdldCBpc05hdmlnYXRpb25CdXR0b25zU2hvd2luZ09uQm90dG9tKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldElzTmF2aWdhdGlvbkJ1dHRvbnNTaG93aW5nT24oXCJib3R0b21cIik7XG4gIH1cbiAgcHJpdmF0ZSBnZXRJc05hdmlnYXRpb25CdXR0b25zU2hvd2luZ09uKGJ1dHRvblBvc2l0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB2YXIgcmVzID0gdGhpcy5pc05hdmlnYXRpb25CdXR0b25zU2hvd2luZztcbiAgICByZXR1cm4gcmVzID09IFwiYm90aFwiIHx8IHJlcyA9PSBidXR0b25Qb3NpdGlvbjtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHN1cnZleSBpcyBpbiBlZGl0IG1vZGUuXG4gICAqIEBzZWUgbW9kZVxuICAgKi9cbiAgcHVibGljIGdldCBpc0VkaXRNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1vZGUgPT0gXCJlZGl0XCI7XG4gIH1cbiAgcHVibGljIGdldCBpc0NvbXBsZXRlQnV0dG9uVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5pc0VkaXRNb2RlICYmXG4gICAgICAoIXRoaXMuaXNTaG93UHJldmlld0JlZm9yZUNvbXBsZXRlIHx8IHRoaXMuc3RhdGUgPT0gXCJwcmV2aWV3XCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzUHJldmlld0J1dHRvblZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuaXNFZGl0TW9kZSAmJlxuICAgICAgdGhpcy5pc1Nob3dQcmV2aWV3QmVmb3JlQ29tcGxldGUgJiZcbiAgICAgIHRoaXMuc3RhdGUgPT0gXCJydW5uaW5nXCJcbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNDYW5jZWxQcmV2aWV3QnV0dG9uVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5pc0VkaXRNb2RlICYmXG4gICAgICB0aGlzLmlzU2hvd1ByZXZpZXdCZWZvcmVDb21wbGV0ZSAmJlxuICAgICAgdGhpcy5zdGF0ZSA9PSBcInByZXZpZXdcIlxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBzdXJ2ZXkgaXMgaW4gZGlzcGxheSBtb2RlIG9yIGluIHByZXZpZXcgbW9kZS5cbiAgICogQHNlZSBtb2RlXG4gICAqIEBzZWUgc2hvd1ByZXZpZXdCZWZvcmVDb21wbGV0ZVxuICAgKi9cbiAgcHVibGljIGdldCBpc0Rpc3BsYXlNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1vZGUgPT0gXCJkaXNwbGF5XCIgfHwgdGhpcy5zdGF0ZSA9PSBcInByZXZpZXdcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzVXBkYXRlVmFsdWVUZXh0T25UeXBpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGV4dFVwZGF0ZU1vZGUgPT0gXCJvblR5cGluZ1wiO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgc3VydmV5IGlzIGluIGRlc2lnbiBtb2RlLiBJdCBpcyB1c2VkIGJ5IFN1cnZleUpTIEVkaXRvci5cbiAgICogQHNlZSBzZXREZXNpZ25Nb2RlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzRGVzaWduTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNEZXNpZ25Nb2RlO1xuICB9XG4gIHByaXZhdGUgX2lzRGVzaWduTW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICAvKipcbiAgICogU2V0cyB0aGUgc3VydmV5IGludG8gZGVzaWduIG1vZGUuXG4gICAqIEBwYXJhbSB2YWx1ZSB1c2UgdHJ1ZSB0byBzZXQgdGhlIHN1cnZleSBpbnRvIHRoZSBkZXNpZ24gbW9kZS5cbiAgICovXG4gIHB1YmxpYyBzZXREZXNpZ25Nb2RlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5faXNEZXNpZ25Nb2RlID0gdmFsdWU7XG4gICAgdGhpcy5vblF1ZXN0aW9uc09uUGFnZU1vZGVDaGFuZ2VkKFwic3RhbmRhcmRcIik7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB3aGV0aGVyIHRvIHNob3cgYWxsIGVsZW1lbnRzIGluIHRoZSBzdXJ2ZXksIHJlZ2FyZGxlc3MgdGhlaXIgdmlzaWJpbGl0eS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cbiAgICovXG4gIHB1YmxpYyBnZXQgc2hvd0ludmlzaWJsZUVsZW1lbnRzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93SW52aXNpYmxlRWxlbWVudHNcIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2hvd0ludmlzaWJsZUVsZW1lbnRzKHZhbDogYm9vbGVhbikge1xuICAgIHZhciB2aXNQYWdlcyA9IHRoaXMudmlzaWJsZVBhZ2VzO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dJbnZpc2libGVFbGVtZW50c1wiLCB2YWwpO1xuICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSByZXR1cm47XG4gICAgdGhpcy5ydW5Db25kaXRpb25zKCk7XG4gICAgdGhpcy51cGRhdGVBbGxFbGVtZW50c1Zpc2liaWxpdHkodmlzUGFnZXMpO1xuICB9XG4gIHByaXZhdGUgdXBkYXRlQWxsRWxlbWVudHNWaXNpYmlsaXR5KHZpc1BhZ2VzOiBBcnJheTxQYWdlTW9kZWw+KSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcGFnZSA9IHRoaXMucGFnZXNbaV07XG4gICAgICBwYWdlLnVwZGF0ZUVsZW1lbnRWaXNpYmlsaXR5KCk7XG4gICAgICBpZiAodmlzUGFnZXMuaW5kZXhPZihwYWdlKSA+IC0xICE9IHBhZ2UuaXNWaXNpYmxlKSB7XG4gICAgICAgIHRoaXMub25QYWdlVmlzaWJsZUNoYW5nZWQuZmlyZSh0aGlzLCB7XG4gICAgICAgICAgcGFnZTogcGFnZSxcbiAgICAgICAgICB2aXNpYmxlOiBwYWdlLmlzVmlzaWJsZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgYXJlSW52aXNpYmxlRWxlbWVudHNTaG93aW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRGVzaWduTW9kZSB8fCB0aGlzLnNob3dJbnZpc2libGVFbGVtZW50cztcbiAgfVxuICBwdWJsaWMgZ2V0IGFyZUVtcHR5RWxlbWVudHNIaWRkZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuaXNTaG93aW5nUHJldmlldyAmJlxuICAgICAgdGhpcy5zaG93UHJldmlld0JlZm9yZUNvbXBsZXRlID09IFwic2hvd0Fuc3dlcmVkUXVlc3Rpb25zXCJcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCwgaWYgYSB1c2VyIGhhcyBhbHJlYWR5IGNvbXBsZXRlZCB0aGUgc3VydmV5IGluIHRoaXMgYnJvd3NlciBhbmQgdGhlcmUgaXMgYSBjb29raWUgYWJvdXQgaXQuIFN1cnZleSBnb2VzIHRvIGBjb21wbGV0ZWRgIHN0YXRlIGlmIHRoZSBmdW5jdGlvbiByZXR1cm5zIGB0cnVlYC5cbiAgICogQHNlZSBjb29raWVOYW1lXG4gICAqIEBzZWUgc2V0Q29va2llXG4gICAqIEBzZWUgZGVsZXRlQ29va2llXG4gICAqIEBzZWUgc3RhdGVcbiAgICovXG4gIHB1YmxpYyBnZXQgaGFzQ29va2llKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5jb29raWVOYW1lIHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGZhbHNlO1xuICAgIHZhciBjb29raWVzID0gZG9jdW1lbnQuY29va2llO1xuICAgIHJldHVybiBjb29raWVzICYmIGNvb2tpZXMuaW5kZXhPZih0aGlzLmNvb2tpZU5hbWUgKyBcIj10cnVlXCIpID4gLTE7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGUgY29va2llIHdpdGggYGNvb2tpZU5hbWVgIGluIHVzZXIncyBicm93c2VyLiBJdCBpcyBkb25lIGF1dG9tYXRpY2FsbHkgb24gc3VydmV5IGNvbXBsZXRlIGlmIHRoZSBgY29va2llTmFtZWAgcHJvcGVydHkgdmFsdWUgaXMgbm90IGVtcHR5LlxuICAgKiBAc2VlIGNvb2tpZU5hbWVcbiAgICogQHNlZSBoYXNDb29raWVcbiAgICogQHNlZSBkZWxldGVDb29raWVcbiAgICovXG4gIHB1YmxpYyBzZXRDb29raWUoKSB7XG4gICAgaWYgKCF0aGlzLmNvb2tpZU5hbWUgfHwgdHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm47XG4gICAgZG9jdW1lbnQuY29va2llID1cbiAgICAgIHRoaXMuY29va2llTmFtZSArIFwiPXRydWU7IGV4cGlyZXM9RnJpLCAzMSBEZWMgOTk5OSAwOjA6MCBHTVRcIjtcbiAgfVxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgY29va2llIHdpdGggYGNvb2tpZU5hbWVgIGZyb20gdGhlIGJyb3dzZXIuXG4gICAqIEBzZWUgY29va2llTmFtZVxuICAgKiBAc2VlIGhhc0Nvb2tpZVxuICAgKiBAc2VlIHNldENvb2tpZVxuICAgKi9cbiAgcHVibGljIGRlbGV0ZUNvb2tpZSgpIHtcbiAgICBpZiAoIXRoaXMuY29va2llTmFtZSkgcmV0dXJuO1xuICAgIGRvY3VtZW50LmNvb2tpZSA9IHRoaXMuY29va2llTmFtZSArIFwiPTtcIjtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHdoZXRoZXIgdGhlIHN1cnZleSBtdXN0IGlnbm9yZSB2YWxpZGF0aW9uIGxpa2UgcmVxdWlyZWQgcXVlc3Rpb25zIGFuZCBvdGhlcnMsIG9uIGBuZXh0UGFnZWAgYW5kIGBjb21wbGV0ZUxhc3RQYWdlYCBmdW5jdGlvbiBjYWxscy4gVGhlIGRlZmF1bHQgaXMgYGZhbHNlYC5cbiAgICogQHNlZSBuZXh0UGFnZVxuICAgKiBAc2VlIGNvbXBsZXRlTGFzdFBhZ2VcbiAgICogQHNlZSBtb2RlXG4gICAqL1xuICBwdWJsaWMgaWdub3JlVmFsaWRhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuICAvKipcbiAgICogTmF2aWdhdGVzIHVzZXIgdG8gdGhlIG5leHQgcGFnZS5cbiAgICpcbiAgICogUmV0dXJucyBgZmFsc2VgIGluIHRoZSBmb2xsb3dpbmcgY2FzZXM6XG4gICAqXG4gICAqIC0gaWYgdGhlIGN1cnJlbnQgcGFnZSBpcyB0aGUgbGFzdCBwYWdlLlxuICAgKiAtIGlmIHRoZSBjdXJyZW50IHBhZ2UgY29udGFpbnMgZXJyb3JzIChmb3IgZXhhbXBsZSwgYSByZXF1aXJlZCBxdWVzdGlvbiBpcyBlbXB0eSkuXG4gICAqIEBzZWUgaXNDdXJyZW50UGFnZUhhc0Vycm9yc1xuICAgKiBAc2VlIHByZXZQYWdlXG4gICAqIEBzZWUgY29tcGxldGVMYXN0UGFnZVxuICAgKi9cbiAgcHVibGljIG5leHRQYWdlKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzTGFzdFBhZ2UpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5kb0N1cnJlbnRQYWdlQ29tcGxldGUoZmFsc2UpO1xuICB9XG4gIHByaXZhdGUgaGFzRXJyb3JzT25OYXZpZ2F0ZShkb0NvbXBsZXRlOiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaWdub3JlVmFsaWRhdGlvbiB8fCAhdGhpcy5pc0VkaXRNb2RlKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIGZ1bmMgPSAoaGFzRXJyb3JzOiBib29sZWFuKSA9PiB7XG4gICAgICBpZiAoIWhhc0Vycm9ycykge1xuICAgICAgICB0aGlzLmRvQ3VycmVudFBhZ2VDb21wbGV0ZUNvcmUoZG9Db21wbGV0ZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAodGhpcy5jaGVja0Vycm9yc01vZGUgPT09IFwib25Db21wbGV0ZVwiKSB7XG4gICAgICBpZiAoIXRoaXMuaXNMYXN0UGFnZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgcmV0dXJuIHRoaXMuaGFzRXJyb3JzKHRydWUsIHRydWUsIGZ1bmMpICE9PSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaGFzQ3VycmVudFBhZ2VFcnJvcnMoZnVuYykgIT09IGZhbHNlO1xuICB9XG4gIHByaXZhdGUgYXN5bmNWYWxpZGF0aW9uUXVlc2l0b25zOiBBcnJheTxRdWVzdGlvbj47XG4gIHByaXZhdGUgY2hlY2tGb3JBc3luY1F1ZXN0aW9uVmFsaWRhdGlvbihcbiAgICBxdWVzdGlvbnM6IEFycmF5PFF1ZXN0aW9uPixcbiAgICBmdW5jOiAoaGFzRXJyb3JzOiBib29sZWFuKSA9PiB2b2lkXG4gICk6IGJvb2xlYW4ge1xuICAgIHRoaXMuY2xlYXJBc3luY1ZhbGlkYXRpb25RdWVzaXRvbnMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHF1ZXN0aW9uc1tpXS5pc1J1bm5pbmdWYWxpZGF0b3JzKSB7XG4gICAgICAgIHF1ZXN0aW9uc1tpXS5vbkNvbXBsZXRlZEFzeW5jVmFsaWRhdG9ycyA9IChoYXNFcnJvcnM6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICB0aGlzLm9uQ29tcGxldGVkQXN5bmNRdWVzdGlvblZhbGlkYXRvcnMoZnVuYywgaGFzRXJyb3JzKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5hc3luY1ZhbGlkYXRpb25RdWVzaXRvbnMucHVzaChxdWVzdGlvbnNbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hc3luY1ZhbGlkYXRpb25RdWVzaXRvbnMubGVuZ3RoID4gMDtcbiAgfVxuICBwcml2YXRlIGNsZWFyQXN5bmNWYWxpZGF0aW9uUXVlc2l0b25zKCkge1xuICAgIGlmICghIXRoaXMuYXN5bmNWYWxpZGF0aW9uUXVlc2l0b25zKSB7XG4gICAgICB2YXIgYXN5blF1ZXN0aW9ucyA9IHRoaXMuYXN5bmNWYWxpZGF0aW9uUXVlc2l0b25zO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhc3luUXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFzeW5RdWVzdGlvbnNbaV0ub25Db21wbGV0ZWRBc3luY1ZhbGlkYXRvcnMgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmFzeW5jVmFsaWRhdGlvblF1ZXNpdG9ucyA9IFtdO1xuICB9XG4gIHByaXZhdGUgb25Db21wbGV0ZWRBc3luY1F1ZXN0aW9uVmFsaWRhdG9ycyhcbiAgICBmdW5jOiAoaGFzRXJyb3JzOiBib29sZWFuKSA9PiB2b2lkLFxuICAgIGhhc0Vycm9yczogYm9vbGVhblxuICApIHtcbiAgICBpZiAoaGFzRXJyb3JzKSB7XG4gICAgICB0aGlzLmNsZWFyQXN5bmNWYWxpZGF0aW9uUXVlc2l0b25zKCk7XG4gICAgICBmdW5jKHRydWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgYXN5blF1ZXN0aW9ucyA9IHRoaXMuYXN5bmNWYWxpZGF0aW9uUXVlc2l0b25zO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXN5blF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFzeW5RdWVzdGlvbnNbaV0uaXNSdW5uaW5nVmFsaWRhdG9ycykgcmV0dXJuO1xuICAgIH1cbiAgICBmdW5jKGZhbHNlKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAsIGlmIHRoZSBjdXJyZW50IHBhZ2UgY29udGFpbnMgZXJyb3JzLCBmb3IgZXhhbXBsZSwgdGhlIHJlcXVpcmVkIHF1ZXN0aW9uIGlzIGVtcHR5IG9yIGEgcXVlc3Rpb24gdmFsaWRhdGlvbiBpcyBmYWlsZWQuXG4gICAqIEBzZWUgbmV4dFBhZ2VcbiAgICovXG4gIHB1YmxpYyBnZXQgaXNDdXJyZW50UGFnZUhhc0Vycm9ycygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jaGVja0lzQ3VycmVudFBhZ2VIYXNFcnJvcnMoKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAsIGlmIHRoZSBjdXJyZW50IHBhZ2UgY29udGFpbnMgYW55IGVycm9yLiBJZiB0aGVyZSBpcyBhbiBhc3luYyBmdW5jdGlvbiBpbiBhbiBleHByZXNzaW9uLCB0aGVuIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiBgdW5kZWZpbmVkYCB2YWx1ZS5cbiAgICogSW4gdGhpcyBjYXNlLCB5b3Ugc2hvdWxkIHVzZSBgb25Bc3luY1ZhbGlkYXRpb25gIHBhcmFtZXRlciwgd2hpY2ggaXMgYSBjYWxsYmFjayBmdW5jdGlvbjogKGhhc0Vycm9yczogYm9vbGVhbikgPT4gdm9pZFxuICAgKiBAcGFyYW0gb25Bc3luY1ZhbGlkYXRpb24gdXNlIHRoaXMgcGFyYW1ldGVyIGlmIHlvdSB1c2UgYXN5bmMgZnVuY3Rpb25zIGluIHlvdXIgZXhwcmVzc2lvbnMuIFRoaXMgY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2l0aCBoYXNFcnJvcnMgdmFsdWUgZXF1YWxzIHRvIGB0cnVlYCBvciBgZmFsc2VgLlxuICAgKiBAc2VlIGhhc1BhZ2VFcnJvcnNcbiAgICogQHNlZSBoYXNFcnJvcnNcbiAgICogQHNlZSBjdXJyZW50UGFnZVxuICAgKi9cbiAgcHVibGljIGhhc0N1cnJlbnRQYWdlRXJyb3JzKFxuICAgIG9uQXN5bmNWYWxpZGF0aW9uPzogKGhhc0Vycm9yczogYm9vbGVhbikgPT4gdm9pZFxuICApOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNQYWdlRXJyb3JzKHVuZGVmaW5lZCwgb25Bc3luY1ZhbGlkYXRpb24pO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCwgaWYgYSBwYWdlIGNvbnRhaW5zIGFuIGVycm9yLiBJZiB0aGVyZSBpcyBhbiBhc3luYyBmdW5jdGlvbiBpbiBhbiBleHByZXNzaW9uLCB0aGVuIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiBgdW5kZWZpbmVkYCB2YWx1ZS5cbiAgICogSW4gdGhpcyBjYXNlLCB5b3Ugc2hvdWxkIHVzZSB0aGUgc2Vjb25kIGBvbkFzeW5jVmFsaWRhdGlvbmAgcGFyYW1ldGVyLCAgd2hpY2ggaXMgYSBjYWxsYmFjayBmdW5jdGlvbjogKGhhc0Vycm9yczogYm9vbGVhbikgPT4gdm9pZFxuICAgKiBAcGFyYW0gcGFnZSB0aGUgcGFnZSB0aGF0IHlvdSB3YW50IHRvIHZhbGlkYXRlLiBJZiB0aGUgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZCB0aGVuIHRoZSBgYWN0aXZlUGFnZWAgaXMgdXNpbmdcbiAgICogQHBhcmFtIG9uQXN5bmNWYWxpZGF0aW9uIHVzZSB0aGlzIHBhcmFtZXRlciBpZiB5b3UgdXNlIGFzeW5jIGZ1bmN0aW9ucyBpbiB5b3VyIGV4cHJlc3Npb25zLiBUaGlzIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGggaGFzRXJyb3JzIHZhbHVlIGVxdWFscyB0byBgdHJ1ZWAgb3IgYGZhbHNlYC5cbiAgICogQHNlZSBoYXNDdXJyZW50UGFnZUVycm9yc1xuICAgKiBAc2VlIGhhc0Vycm9yc1xuICAgKiBAc2VlIGFjdGl2ZVBhZ2VcbiAgICogQHNlZSBjdXJyZW50UGFnZVxuICAgKi9cbiAgcHVibGljIGhhc1BhZ2VFcnJvcnMoXG4gICAgcGFnZT86IFBhZ2VNb2RlbCxcbiAgICBvbkFzeW5jVmFsaWRhdGlvbj86IChoYXNFcnJvcnM6IGJvb2xlYW4pID0+IHZvaWRcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKCFwYWdlKSB7XG4gICAgICBwYWdlID0gdGhpcy5hY3RpdmVQYWdlO1xuICAgIH1cbiAgICBpZiAoIXBhZ2UpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodGhpcy5jaGVja0lzUGFnZUhhc0Vycm9ycyhwYWdlKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKCFvbkFzeW5jVmFsaWRhdGlvbikgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLmNoZWNrRm9yQXN5bmNRdWVzdGlvblZhbGlkYXRpb24oXG4gICAgICBwYWdlLnF1ZXN0aW9ucyxcbiAgICAgIChoYXNFcnJvcnM6IGJvb2xlYW4pID0+IG9uQXN5bmNWYWxpZGF0aW9uKGhhc0Vycm9ycylcbiAgICApXG4gICAgICA/IHVuZGVmaW5lZFxuICAgICAgOiBmYWxzZTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAsIGlmIGFueSBvZiB0aGUgc3VydmV5IHBhZ2VzIGNvbnRhaW5zIGVycm9ycy4gSWYgdGhlcmUgaXMgYW4gYXN5bmMgZnVuY3Rpb24gaW4gYW4gZXhwcmVzc2lvbiwgdGhlbiB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gYHVuZGVmaW5lZGAgdmFsdWUuXG4gICAqIEluIHRoaXMgY2FzZSwgeW91IHNob3VsZCB1c2UgIHRoZSB0aGlyZCBgb25Bc3luY1ZhbGlkYXRpb25gIHBhcmFtZXRlciwgd2hpY2ggaXMgYSBjYWxsYmFjayBmdW5jdGlvbjogKGhhc0Vycm9yczogYm9vbGVhbikgPT4gdm9pZFxuICAgKiBAcGFyYW0gZmlyZUNhbGxiYWNrIHNldCBpdCB0byBgdHJ1ZWAsIHRvIHNob3cgZXJyb3JzIGluIFVJLlxuICAgKiBAcGFyYW0gZm9jdXNPbkZpcnN0RXJyb3Igc2V0IGl0IHRvIGB0cnVlYCB0byBmb2N1cyBvbiB0aGUgZmlyc3QgcXVlc3Rpb24gdGhhdCBkb2Vzbid0IHBhc3MgdGhlIHZhbGlkYXRpb24gYW5kIG1ha2UgdGhlIHBhZ2UsIHdoZXJlIHRoZSBxdWVzdGlvbiBpcyBsb2NhdGVkLCB0aGUgY3VycmVudC5cbiAgICogQHBhcmFtIG9uQXN5bmNWYWxpZGF0aW9uIHVzZSB0aGlzIHBhcmFtZXRlciBpZiB5b3UgdXNlIGFzeW5jIGZ1bmN0aW9ucyBpbiB5b3VyIGV4cHJlc3Npb25zLiBUaGlzIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGggaGFzRXJyb3JzIHZhbHVlIGVxdWFscyB0byBgdHJ1ZWAgb3IgYGZhbHNlYC5cbiAgICogQHNlZSBoYXNDdXJyZW50UGFnZUVycm9yc1xuICAgKiBAc2VlIGhhc1BhZ2VFcnJvcnNcbiAgICovXG4gIHB1YmxpYyBoYXNFcnJvcnMoXG4gICAgZmlyZUNhbGxiYWNrOiBib29sZWFuID0gdHJ1ZSxcbiAgICBmb2N1c09uRmlyc3RFcnJvcjogYm9vbGVhbiA9IGZhbHNlLFxuICAgIG9uQXN5bmNWYWxpZGF0aW9uPzogKGhhc0Vycm9yczogYm9vbGVhbikgPT4gdm9pZFxuICApOiBib29sZWFuIHtcbiAgICBpZiAoISFvbkFzeW5jVmFsaWRhdGlvbikge1xuICAgICAgZmlyZUNhbGxiYWNrID0gdHJ1ZTtcbiAgICB9XG4gICAgdmFyIHZpc1BhZ2VzID0gdGhpcy52aXNpYmxlUGFnZXM7XG4gICAgdmFyIGZpcnN0RXJyb3JQYWdlID0gbnVsbDtcbiAgICB2YXIgcmVzID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aXNQYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHZpc1BhZ2VzW2ldLmhhc0Vycm9ycyhmaXJlQ2FsbGJhY2ssIGZhbHNlKSkge1xuICAgICAgICBpZiAoIWZpcnN0RXJyb3JQYWdlKSBmaXJzdEVycm9yUGFnZSA9IHZpc1BhZ2VzW2ldO1xuICAgICAgICByZXMgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZm9jdXNPbkZpcnN0RXJyb3IgJiYgISFmaXJzdEVycm9yUGFnZSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IGZpcnN0RXJyb3JQYWdlO1xuICAgICAgdmFyIHF1ZXN0aW9ucyA9IGZpcnN0RXJyb3JQYWdlLnF1ZXN0aW9ucztcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChxdWVzdGlvbnNbaV0uZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBxdWVzdGlvbnNbaV0uZm9jdXModHJ1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJlcyB8fCAhb25Bc3luY1ZhbGlkYXRpb24pIHJldHVybiByZXM7XG4gICAgcmV0dXJuIHRoaXMuY2hlY2tGb3JBc3luY1F1ZXN0aW9uVmFsaWRhdGlvbihcbiAgICAgIHRoaXMuZ2V0QWxsUXVlc3Rpb25zKCksXG4gICAgICAoaGFzRXJyb3JzOiBib29sZWFuKSA9PiBvbkFzeW5jVmFsaWRhdGlvbihoYXNFcnJvcnMpXG4gICAgKVxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDogZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHN1cnZleSBlbGVtZW50cyAocGFnZXMsIHBhbmVscywgYW5kIHF1ZXN0aW9ucykgaGF2ZSB1bmlxdWUgcXVlc3Rpb24gbmFtZXMuXG4gICAqIFlvdSBjYW4gY2hlY2sgZm9yIHVuaXF1ZSBuYW1lcyBmb3IgaW5kaXZpZHVhbCBwYWdlIGFuZCBwYW5lbCAoYW5kIGFsbCB0aGVpciBlbGVtZW50cykgb3IgYSBxdWVzdGlvbi5cbiAgICogSWYgdGhlIHBhcmFtZXRlciBpcyBub3Qgc3BlY2lmaWVkLCB0aGVuIGEgc3VydmV5IGNoZWNrcyB0aGF0IGFsbCBpdHMgZWxlbWVudHMgaGF2ZSB1bmlxdWUgbmFtZXMuXG4gICAqIEBwYXJhbSBlbGVtZW50IHBhZ2UsIHBhbmVsIG9yIHF1ZXN0aW9uLCBpdCBpcyBgbnVsbGAgYnkgZGVmYXVsdCwgdGhhdCBtZWFucyBhbGwgc3VydmV5IGVsZW1lbnRzIHdpbGwgYmUgY2hlY2tlZFxuICAgKi9cbiAgcHVibGljIGVuc3VyZVVuaXF1ZU5hbWVzKGVsZW1lbnQ6IElTdXJ2ZXlFbGVtZW50ID0gbnVsbCkge1xuICAgIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLmVuc3VyZVVuaXF1ZU5hbWUodGhpcy5wYWdlc1tpXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW5zdXJlVW5pcXVlTmFtZShlbGVtZW50KTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBlbnN1cmVVbmlxdWVOYW1lKGVsZW1lbnQ6IElTdXJ2ZXlFbGVtZW50KSB7XG4gICAgaWYgKGVsZW1lbnQuaXNQYWdlKSB7XG4gICAgICB0aGlzLmVuc3VyZVVuaXF1ZVBhZ2VOYW1lKGVsZW1lbnQpO1xuICAgIH1cbiAgICBpZiAoZWxlbWVudC5pc1BhbmVsKSB7XG4gICAgICB0aGlzLmVuc3VyZVVuaXF1ZVBhbmVsTmFtZShlbGVtZW50KTtcbiAgICB9XG4gICAgaWYgKGVsZW1lbnQuaXNQYWdlIHx8IGVsZW1lbnQuaXNQYW5lbCkge1xuICAgICAgdmFyIGVsZW1lbnRzID0gKDxJUGFuZWw+ZWxlbWVudCkuZWxlbWVudHM7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMuZW5zdXJlVW5pcXVlTmFtZXMoZWxlbWVudHNbaV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVuc3VyZVVuaXF1ZVF1ZXN0aW9uTmFtZShlbGVtZW50KTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBlbnN1cmVVbmlxdWVQYWdlTmFtZShlbGVtZW50OiBJU3VydmV5RWxlbWVudCkge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZVVuaXF1ZUVsZW1lbnROYW1lKFxuICAgICAgZWxlbWVudCxcbiAgICAgIChuYW1lOiBzdHJpbmcpOiBJU3VydmV5RWxlbWVudCA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFBhZ2VCeU5hbWUobmFtZSk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGVuc3VyZVVuaXF1ZVBhbmVsTmFtZShlbGVtZW50OiBJU3VydmV5RWxlbWVudCkge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZVVuaXF1ZUVsZW1lbnROYW1lKFxuICAgICAgZWxlbWVudCxcbiAgICAgIChuYW1lOiBzdHJpbmcpOiBJU3VydmV5RWxlbWVudCA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFBhbmVsQnlOYW1lKG5hbWUpO1xuICAgICAgfVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBlbnN1cmVVbmlxdWVRdWVzdGlvbk5hbWUoZWxlbWVudDogSVN1cnZleUVsZW1lbnQpIHtcbiAgICByZXR1cm4gdGhpcy5lbnN1cmVVbmlxdWVFbGVtZW50TmFtZShcbiAgICAgIGVsZW1lbnQsXG4gICAgICAobmFtZTogc3RyaW5nKTogSVN1cnZleUVsZW1lbnQgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIHByaXZhdGUgZW5zdXJlVW5pcXVlRWxlbWVudE5hbWUoXG4gICAgZWxlbWVudDogSVN1cnZleUVsZW1lbnQsXG4gICAgZ2V0RWxlbWVudEJ5TmFtZTogKG5hbWU6IHN0cmluZykgPT4gSVN1cnZleUVsZW1lbnRcbiAgKSB7XG4gICAgdmFyIGV4aXN0aW5nRWxlbWVudCA9IGdldEVsZW1lbnRCeU5hbWUoZWxlbWVudC5uYW1lKTtcbiAgICBpZiAoIWV4aXN0aW5nRWxlbWVudCB8fCBleGlzdGluZ0VsZW1lbnQgPT0gZWxlbWVudCkgcmV0dXJuO1xuICAgIHZhciBuZXdOYW1lID0gdGhpcy5nZXROZXdOYW1lKGVsZW1lbnQubmFtZSk7XG4gICAgd2hpbGUgKCEhZ2V0RWxlbWVudEJ5TmFtZShuZXdOYW1lKSkge1xuICAgICAgdmFyIG5ld05hbWUgPSB0aGlzLmdldE5ld05hbWUoZWxlbWVudC5uYW1lKTtcbiAgICB9XG4gICAgZWxlbWVudC5uYW1lID0gbmV3TmFtZTtcbiAgfVxuICBwcml2YXRlIGdldE5ld05hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB2YXIgcG9zID0gbmFtZS5sZW5ndGg7XG4gICAgd2hpbGUgKHBvcyA+IDAgJiYgbmFtZVtwb3MgLSAxXSA+PSBcIjBcIiAmJiBuYW1lW3BvcyAtIDFdIDw9IFwiOVwiKSB7XG4gICAgICBwb3MtLTtcbiAgICB9XG4gICAgdmFyIGJhc2UgPSBuYW1lLnN1YnN0cigwLCBwb3MpO1xuICAgIHZhciBudW0gPSAwO1xuICAgIGlmIChwb3MgPCBuYW1lLmxlbmd0aCkge1xuICAgICAgbnVtID0gcGFyc2VJbnQobmFtZS5zdWJzdHIocG9zKSk7XG4gICAgfVxuICAgIG51bSsrO1xuICAgIHJldHVybiBiYXNlICsgbnVtO1xuICB9XG4gIHByaXZhdGUgY2hlY2tJc0N1cnJlbnRQYWdlSGFzRXJyb3JzKFxuICAgIGlzRm9jdXNlT25GaXJzdEVycm9yOiBib29sZWFuID0gdW5kZWZpbmVkXG4gICk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNoZWNrSXNQYWdlSGFzRXJyb3JzKHRoaXMuYWN0aXZlUGFnZSwgaXNGb2N1c2VPbkZpcnN0RXJyb3IpO1xuICB9XG4gIHByaXZhdGUgY2hlY2tJc1BhZ2VIYXNFcnJvcnMoXG4gICAgcGFnZTogUGFnZU1vZGVsLFxuICAgIGlzRm9jdXNlT25GaXJzdEVycm9yOiBib29sZWFuID0gdW5kZWZpbmVkXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmIChpc0ZvY3VzZU9uRmlyc3RFcnJvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpc0ZvY3VzZU9uRmlyc3RFcnJvciA9IHRoaXMuZm9jdXNPbkZpcnN0RXJyb3I7XG4gICAgfVxuICAgIGlmICghcGFnZSkgcmV0dXJuIHRydWU7XG4gICAgdmFyIHJlcyA9IHBhZ2UuaGFzRXJyb3JzKHRydWUsIGlzRm9jdXNlT25GaXJzdEVycm9yKTtcbiAgICB0aGlzLmZpcmVWYWxpZGF0ZWRFcnJvcnNPblBhZ2UocGFnZSk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIGZpcmVWYWxpZGF0ZWRFcnJvcnNPblBhZ2UocGFnZTogUGFnZU1vZGVsKSB7XG4gICAgaWYgKHRoaXMub25WYWxpZGF0ZWRFcnJvcnNPbkN1cnJlbnRQYWdlLmlzRW1wdHkgfHwgIXBhZ2UpIHJldHVybjtcbiAgICB2YXIgcXVlc3Rpb25zT25QYWdlID0gcGFnZS5xdWVzdGlvbnM7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IG5ldyBBcnJheTxRdWVzdGlvbj4oKTtcbiAgICB2YXIgZXJyb3JzID0gbmV3IEFycmF5PFN1cnZleUVycm9yPigpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zT25QYWdlLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcSA9IHF1ZXN0aW9uc09uUGFnZVtpXTtcbiAgICAgIGlmIChxLmVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHF1ZXN0aW9ucy5wdXNoKHEpO1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHEuZXJyb3JzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgZXJyb3JzLnB1c2gocS5lcnJvcnNbal0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMub25WYWxpZGF0ZWRFcnJvcnNPbkN1cnJlbnRQYWdlLmZpcmUodGhpcywge1xuICAgICAgcXVlc3Rpb25zOiBxdWVzdGlvbnMsXG4gICAgICBlcnJvcnM6IGVycm9ycyxcbiAgICAgIHBhZ2U6IHBhZ2UsXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIE5hdmlnYXRlcyB1c2VyIHRvIGEgcHJldmlvdXMgcGFnZS4gSWYgdGhlIGN1cnJlbnQgcGFnZSBpcyB0aGUgZmlyc3QgcGFnZSwgYHByZXZQYWdlYCByZXR1cm5zIGBmYWxzZWAuIGBwcmV2UGFnZWAgZG9lcyBub3QgcGVyZm9ybSBhbnkgY2hlY2tzLCByZXF1aXJlZCBxdWVzdGlvbnMgY2FuIGJlIGVtcHR5LlxuICAgKiBAc2VlIGlzRmlyc3RQYWdlXG4gICAqL1xuICBwdWJsaWMgcHJldlBhZ2UoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNGaXJzdFBhZ2UpIHJldHVybiBmYWxzZTtcbiAgICB0aGlzLnJlc2V0TmF2aWdhdGlvbkJ1dHRvbigpO1xuICAgIHZhciB2UGFnZXMgPSB0aGlzLnZpc2libGVQYWdlcztcbiAgICB2YXIgaW5kZXggPSB2UGFnZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRQYWdlKTtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gdlBhZ2VzW2luZGV4IC0gMV07XG4gIH1cbiAgLyoqXG4gICAqIENvbXBsZXRlcyB0aGUgc3VydmV5LCBpZiB0aGUgY3VycmVudCBwYWdlIGlzIHRoZSBsYXN0IG9uZS4gSXQgcmV0dXJucyBgZmFsc2VgIGlmIHRoZSBsYXN0IHBhZ2UgaGFzIGVycm9ycy5cbiAgICogSWYgdGhlIGxhc3QgcGFnZSBoYXMgbm8gZXJyb3JzLCBgY29tcGxldGVMYXN0UGFnZWAgY2FsbHMgYGRvQ29tcGxldGVgIGFuZCByZXR1cm5zIGB0cnVlYC5cbiAgICogQHNlZSBpc0N1cnJlbnRQYWdlSGFzRXJyb3JzXG4gICAqIEBzZWUgbmV4dFBhZ2VcbiAgICogQHNlZSBkb0NvbXBsZXRlXG4gICAqL1xuICBwdWJsaWMgY29tcGxldGVMYXN0UGFnZSgpOiBib29sZWFuIHtcbiAgICB2YXIgcmVzID0gdGhpcy5kb0N1cnJlbnRQYWdlQ29tcGxldGUodHJ1ZSk7XG4gICAgaWYgKHJlcykge1xuICAgICAgdGhpcy5jYW5jZWxQcmV2aWV3KCk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSBpc05hdmlnYXRpb25CdXR0b25QcmVzc2VkOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBuYXZpZ2F0aW9uTW91c2VEb3duKCk6IGJvb2xlYW4ge1xuICAgIHRoaXMuaXNOYXZpZ2F0aW9uQnV0dG9uUHJlc3NlZCA9IHRydWU7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJpdmF0ZSByZXNldE5hdmlnYXRpb25CdXR0b24oKSB7XG4gICAgdGhpcy5pc05hdmlnYXRpb25CdXR0b25QcmVzc2VkID0gZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIFNob3dzIHByZXZpZXcgZm9yIHRoZSBzdXJ2ZXkuIFN3aXRjaGVzIHRoZSBzdXJ2ZXkgdG8gdGhlIFwicHJldmlld1wiIHN0YXRlLlxuICAgKlxuICAgKiBEZXRhaWxzOiBbUHJldmlldyBTdGF0ZV0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9Eb2N1bWVudGF0aW9uL0xpYnJhcnkjc3RhdGVzLXByZXZpZXcpXG4gICAqIEBzZWUgc2hvd1ByZXZpZXdCZWZvcmVDb21wbGV0ZVxuICAgKiBAc2VlIGNhbmNlbFByZXZpZXdcbiAgICogQHNlZSBzdGF0ZVxuICAgKiBAc2VlIHByZXZpZXdUZXh0XG4gICAqIEBzZWUgZWRpdFRleHRcbiAgICovXG4gIHB1YmxpYyBzaG93UHJldmlldygpOiBib29sZWFuIHtcbiAgICB0aGlzLnJlc2V0TmF2aWdhdGlvbkJ1dHRvbigpO1xuICAgIGlmICh0aGlzLmhhc0Vycm9yc09uTmF2aWdhdGUodHJ1ZSkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodGhpcy5kb1NlcnZlclZhbGlkYXRpb24odHJ1ZSwgdHJ1ZSkpIHJldHVybiBmYWxzZTtcbiAgICB2YXIgb3B0aW9ucyA9IHsgYWxsb3dTaG93UHJldmlldzogdHJ1ZSB9O1xuICAgIHRoaXMub25TaG93aW5nUHJldmlldy5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIHRoaXMuaXNTaG93aW5nUHJldmlldyA9IG9wdGlvbnMuYWxsb3dTaG93UHJldmlldztcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogQ2FuY2VscyBwcmV2aWV3IGFuZCBzd2l0Y2hlcyBiYWNrIHRvIHRoZSBcInJ1bm5pbmdcIiBzdGF0ZS5cbiAgICpcbiAgICogRGV0YWlsczogW1ByZXZpZXcgU3RhdGVdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5I3N0YXRlcy1wcmV2aWV3KVxuICAgKiBAcGFyYW0gY3VyUGFnZSAtIEEgbmV3IGN1cnJlbnQgcGFnZS4gSWYgdGhlIHBhcmFtZXRlciBpcyB1bmRlZmluZWQgdGhlbiB0aGUgbGFzdCBwYWdlIGJlY29tZXMgdGhlIGN1cnJlbnQuXG4gICAqIEBzZWUgc2hvd1ByZXZpZXdCZWZvcmVDb21wbGV0ZVxuICAgKiBAc2VlIHNob3dQcmV2aWV3XG4gICAqIEBzZWUgc3RhdGVcbiAgICovXG4gIHB1YmxpYyBjYW5jZWxQcmV2aWV3KGN1clBhZ2U6IGFueSA9IG51bGwpIHtcbiAgICBpZiAoIXRoaXMuaXNTaG93aW5nUHJldmlldykgcmV0dXJuO1xuICAgIHRoaXMuaXNTaG93aW5nUHJldmlldyA9IGZhbHNlO1xuICAgIGlmIChIZWxwZXJzLmlzVmFsdWVFbXB0eShjdXJQYWdlKSAmJiB0aGlzLnZpc2libGVQYWdlQ291bnQgPiAwKSB7XG4gICAgICBjdXJQYWdlID0gdGhpcy52aXNpYmxlUGFnZUNvdW50IC0gMTtcbiAgICB9XG4gICAgaWYgKGN1clBhZ2UgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBjdXJQYWdlO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgY2FuY2VsUHJldmlld0J5UGFnZShwYW5lbDogSVBhbmVsKTogYW55IHtcbiAgICB0aGlzLmNhbmNlbFByZXZpZXcoKDxhbnk+cGFuZWwpW1wib3JpZ2luYWxQYWdlXCJdKTtcbiAgfVxuICBwcm90ZWN0ZWQgZG9DdXJyZW50UGFnZUNvbXBsZXRlKGRvQ29tcGxldGU6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5pc1ZhbGlkYXRpbmdPblNlcnZlcikgcmV0dXJuIGZhbHNlO1xuICAgIHRoaXMucmVzZXROYXZpZ2F0aW9uQnV0dG9uKCk7XG4gICAgaWYgKHRoaXMuaGFzRXJyb3JzT25OYXZpZ2F0ZShkb0NvbXBsZXRlKSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLmRvQ3VycmVudFBhZ2VDb21wbGV0ZUNvcmUoZG9Db21wbGV0ZSk7XG4gIH1cbiAgcHJpdmF0ZSBkb0N1cnJlbnRQYWdlQ29tcGxldGVDb3JlKGRvQ29tcGxldGU6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5kb1NlcnZlclZhbGlkYXRpb24oZG9Db21wbGV0ZSkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoZG9Db21wbGV0ZSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZS5wYXNzZWQgPSB0cnVlO1xuICAgICAgdGhpcy5kb0NvbXBsZXRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZG9OZXh0UGFnZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogT2Jzb2xldGUuIFVzZSB0aGUgYHF1ZXN0aW9uc09uUGFnZU1vZGVgIHByb3BlcnR5IGluc3RlYWQuXG4gICAqIEBzZWUgcXVlc3Rpb25zT25QYWdlTW9kZVxuICAgKi9cbiAgcHVibGljIGdldCBpc1NpbmdsZVBhZ2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25zT25QYWdlTW9kZSA9PSBcInNpbmdsZVBhZ2VcIjtcbiAgfVxuICBwdWJsaWMgc2V0IGlzU2luZ2xlUGFnZSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnF1ZXN0aW9uc09uUGFnZU1vZGUgPSB2YWwgPyBcInNpbmdsZVBhZ2VcIiA6IFwic3RhbmRhcmRcIjtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIGEgdmFsdWUgdGhhdCBzcGVjaWZpZXMgaG93IHRoZSBzdXJ2ZXkgY29tYmluZXMgcXVlc3Rpb25zLCBwYW5lbHMsIGFuZCBwYWdlcy5cbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhdmFpbGFibGU6XG4gICAqXG4gICAqIC0gYHNpbmdsZVBhZ2VgIC0gY29tYmluZSBhbGwgc3VydmV5IHBhZ2VzIGluIGEgc2luZ2xlIHBhZ2UuIFBhZ2VzIHdpbGwgYmUgY29udmVydGVkIHRvIHBhbmVscy5cbiAgICogLSBgcXVlc3Rpb25QZXJQYWdlYCAtIHNob3cgb25lIHF1ZXN0aW9uIHBlciBwYWdlLiBTdXJ2ZXkgd2lsbCBjcmVhdGUgYSBzZXBhcmF0ZSBwYWdlIGZvciBldmVyeSBxdWVzdGlvbi5cbiAgICovXG4gIHB1YmxpYyBnZXQgcXVlc3Rpb25zT25QYWdlTW9kZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvbnNPblBhZ2VNb2RlXCIsIFwic3RhbmRhcmRcIik7XG4gIH1cbiAgcHVibGljIHNldCBxdWVzdGlvbnNPblBhZ2VNb2RlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicXVlc3Rpb25zT25QYWdlTW9kZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgd2hldGhlciB0aGUgZmlyc3Qgc3VydmV5IHBhZ2UgaXMgYSBzdGFydCBwYWdlLiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBgdHJ1ZWAsIHRvIG1ha2UgdGhlIGZpcnN0IHBhZ2UgYSBzdGFydGluZyBwYWdlLlxuICAgKiBBbiBlbmQgdXNlciBjYW5ub3QgbmF2aWdhdGUgdG8gdGhlIHN0YXJ0IHBhZ2UgYW5kIHRoZSBzdGFydCBwYWdlIGRvZXMgbm90IGFmZmVjdCBhIHN1cnZleSBwcm9ncmVzcy5cbiAgICovXG4gIHB1YmxpYyBnZXQgZmlyc3RQYWdlSXNTdGFydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJmaXJzdFBhZ2VJc1N0YXJ0ZWRcIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXQgZmlyc3RQYWdlSXNTdGFydGVkKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImZpcnN0UGFnZUlzU3RhcnRlZFwiLCB2YWwpO1xuICB9XG4gIGlzUGFnZVN0YXJ0ZWQocGFnZTogSVBhZ2UpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5maXJzdFBhZ2VJc1N0YXJ0ZWQgJiYgdGhpcy5wYWdlcy5sZW5ndGggPiAwICYmIHRoaXMucGFnZXNbMF0gPT09IHBhZ2VcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBcInNob3dBbGxRdWVzdGlvbnNcIiBvciBcInNob3dBbnN3ZXJlZFF1ZXN0aW9uc1wiIHRvIGFsbG93IHJlc3BvbmRlbnRzIHRvIHByZXZpZXcgYW5zd2VycyBiZWZvcmUgc3VibWl0dGluZyB0aGUgc3VydmV5IHJlc3VsdHMuXG4gICAqXG4gICAqIERldGFpbHM6IFtQcmV2aWV3IFN0YXRlXShodHRwczovL3N1cnZleWpzLmlvL0RvY3VtZW50YXRpb24vTGlicmFyeSNzdGF0ZXMtcHJldmlldylcbiAgICogRXhhbXBsZTogW1Nob3cgUHJldmlldyBCZWZvcmUgQ29tcGxldGVdKGh0dHBzOi8vc3VydmV5anMuaW8vRXhhbXBsZXMvTGlicmFyeT9pZD1zdXJ2ZXktc2hvd3ByZXZpZXcpXG4gICAqIEBzZWUgc2hvd1ByZXZpZXdcbiAgICogQHNlZSBjYW5jZWxQcmV2aWV3XG4gICAqIEBzZWUgc3RhdGVcbiAgICogQHNlZSBwcmV2aWV3VGV4dFxuICAgKiBAc2VlIGVkaXRUZXh0XG4gICAqL1xuICBwdWJsaWMgZ2V0IHNob3dQcmV2aWV3QmVmb3JlQ29tcGxldGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1ByZXZpZXdCZWZvcmVDb21wbGV0ZVwiLCBcIm5vUHJldmlld1wiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNob3dQcmV2aWV3QmVmb3JlQ29tcGxldGUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93UHJldmlld0JlZm9yZUNvbXBsZXRlXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBpc1Nob3dQcmV2aWV3QmVmb3JlQ29tcGxldGUoKTogYm9vbGVhbiB7XG4gICAgdmFyIHByZXZpZXcgPSB0aGlzLnNob3dQcmV2aWV3QmVmb3JlQ29tcGxldGU7XG4gICAgcmV0dXJuIHByZXZpZXcgPT0gXCJzaG93QWxsUXVlc3Rpb25zXCIgfHwgcHJldmlldyA9PSBcInNob3dBbnN3ZXJlZFF1ZXN0aW9uc1wiO1xuICB9XG4gIHByb3RlY3RlZCBvbkZpcnN0UGFnZUlzU3RhcnRlZENoYW5nZWQoKSB7XG4gICAgaWYgKHRoaXMucGFnZXMubGVuZ3RoID09IDApIHJldHVybjtcbiAgICB0aGlzLmlzU3RhcnRlZFN0YXRlID0gdGhpcy5maXJzdFBhZ2VJc1N0YXJ0ZWQ7XG4gICAgdGhpcy5wYWdlVmlzaWJpbGl0eUNoYW5nZWQodGhpcy5wYWdlc1swXSwgIXRoaXMuZmlyc3RQYWdlSXNTdGFydGVkKTtcbiAgfVxuICBwcml2YXRlIHJ1bm5pbmdQYWdlczogYW55O1xuICBwcml2YXRlIG9uU2hvd2luZ1ByZXZpZXdDaGFuZ2VkKCkge1xuICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmlzU2hvd2luZ1ByZXZpZXcpIHtcbiAgICAgIHRoaXMucnVubmluZ1BhZ2VzID0gdGhpcy5wYWdlcy5zbGljZSgwLCB0aGlzLnBhZ2VzLmxlbmd0aCk7XG4gICAgICB0aGlzLnNldHVwUGFnZXNGb3JQYWdlTW9kZXModHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnJ1bm5pbmdQYWdlcykge1xuICAgICAgICB0aGlzLnJlc3RvcmVPcmlnaW9uYWxQYWdlcyh0aGlzLnJ1bm5pbmdQYWdlcyk7XG4gICAgICB9XG4gICAgICB0aGlzLnJ1bm5pbmdQYWdlcyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5ydW5Db25kaXRpb25zKCk7XG4gICAgdGhpcy51cGRhdGVBbGxFbGVtZW50c1Zpc2liaWxpdHkodGhpcy5wYWdlcyk7XG4gICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xuICAgIHRoaXMuY3VycmVudFBhZ2VObyA9IDA7XG4gIH1cbiAgcHJpdmF0ZSBvcmlnaW9uYWxQYWdlczogYW55O1xuICBwcm90ZWN0ZWQgb25RdWVzdGlvbnNPblBhZ2VNb2RlQ2hhbmdlZChvbGRWYWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuaXNTaG93aW5nUHJldmlldykgcmV0dXJuO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uc09uUGFnZU1vZGUgPT0gXCJzdGFuZGFyZFwiIHx8IHRoaXMuaXNEZXNpZ25Nb2RlKSB7XG4gICAgICBpZiAodGhpcy5vcmlnaW9uYWxQYWdlcykge1xuICAgICAgICB0aGlzLnJlc3RvcmVPcmlnaW9uYWxQYWdlcyh0aGlzLm9yaWdpb25hbFBhZ2VzKTtcbiAgICAgIH1cbiAgICAgIHRoaXMub3JpZ2lvbmFsUGFnZXMgPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghb2xkVmFsdWUgfHwgb2xkVmFsdWUgPT0gXCJzdGFuZGFyZFwiKSB7XG4gICAgICAgIHRoaXMub3JpZ2lvbmFsUGFnZXMgPSB0aGlzLnBhZ2VzLnNsaWNlKDAsIHRoaXMucGFnZXMubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0dXBQYWdlc0ZvclBhZ2VNb2Rlcyh0aGlzLmlzU2luZ2xlUGFnZSk7XG4gICAgfVxuICAgIHRoaXMucnVuQ29uZGl0aW9ucygpO1xuICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcbiAgfVxuICBwcml2YXRlIHJlc3RvcmVPcmlnaW9uYWxQYWdlcyhvcmlnaW5hbFBhZ2VzOiBBcnJheTxQYWdlTW9kZWw+KSB7XG4gICAgdGhpcy5xdWVzdGlvbkhhc2hlc0NsZWFyKCk7XG4gICAgdGhpcy5wYWdlcy5zcGxpY2UoMCwgdGhpcy5wYWdlcy5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3JpZ2luYWxQYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5wYWdlcy5wdXNoKG9yaWdpbmFsUGFnZXNbaV0pO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIHNldHVwUGFnZXNGb3JQYWdlTW9kZXMoaXNTaW5nbGVQYWdlOiBib29sZWFuKSB7XG4gICAgdGhpcy5xdWVzdGlvbkhhc2hlc0NsZWFyKCk7XG4gICAgdmFyIHN0YXJ0SW5kZXggPSB0aGlzLmZpcnN0UGFnZUlzU3RhcnRlZCA/IDEgOiAwO1xuICAgIHN1cGVyLnN0YXJ0TG9hZGluZ0Zyb21Kc29uKCk7XG4gICAgdmFyIG5ld1BhZ2VzID0gdGhpcy5jcmVhdGVQYWdlc0ZvclF1ZXN0aW9uT25QYWdlTW9kZShcbiAgICAgIGlzU2luZ2xlUGFnZSxcbiAgICAgIHN0YXJ0SW5kZXhcbiAgICApO1xuICAgIHZhciBkZWxldGVkTGVuID0gdGhpcy5wYWdlcy5sZW5ndGggLSBzdGFydEluZGV4O1xuICAgIHRoaXMucGFnZXMuc3BsaWNlKHN0YXJ0SW5kZXgsIGRlbGV0ZWRMZW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3UGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMucGFnZXMucHVzaChuZXdQYWdlc1tpXSk7XG4gICAgfVxuICAgIHN1cGVyLmVuZExvYWRpbmdGcm9tSnNvbigpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3UGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG5ld1BhZ2VzW2ldLmVuZExvYWRpbmdGcm9tSnNvbigpO1xuICAgICAgbmV3UGFnZXNbaV0uc2V0U3VydmV5SW1wbCh0aGlzKTtcbiAgICB9XG4gICAgdGhpcy5kb0VsZW1lbnRzT25Mb2FkKCk7XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVQYWdlc0ZvclF1ZXN0aW9uT25QYWdlTW9kZShcbiAgICBpc1NpbmdsZVBhZ2U6IGJvb2xlYW4sXG4gICAgc3RhcnRJbmRleDogbnVtYmVyXG4gICk6IEFycmF5PFBhZ2VNb2RlbD4ge1xuICAgIGlmIChpc1NpbmdsZVBhZ2UpIHtcbiAgICAgIHJldHVybiBbdGhpcy5jcmVhdGVTaW5nbGVQYWdlKHN0YXJ0SW5kZXgpXTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlUGFnZXNGb3JFdmVyeVF1ZXN0aW9uKHN0YXJ0SW5kZXgpO1xuICB9XG4gIHByaXZhdGUgY3JlYXRlU2luZ2xlUGFnZShzdGFydEluZGV4OiBudW1iZXIpOiBQYWdlTW9kZWwge1xuICAgIHZhciBzaW5nbGUgPSB0aGlzLmNyZWF0ZU5ld1BhZ2UoXCJhbGxcIik7XG4gICAgc2luZ2xlLnNldFN1cnZleUltcGwodGhpcyk7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5kZXg7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcGFnZSA9IHRoaXMucGFnZXNbaV07XG4gICAgICB2YXIgcGFuZWwgPSBTZXJpYWxpemVyLmNyZWF0ZUNsYXNzKFwicGFuZWxcIik7XG4gICAgICBwYW5lbC5vcmlnaW5hbFBhZ2UgPSBwYWdlO1xuICAgICAgc2luZ2xlLmFkZFBhbmVsKHBhbmVsKTtcbiAgICAgIHZhciBqc29uID0gbmV3IEpzb25PYmplY3QoKS50b0pzb25PYmplY3QocGFnZSk7XG4gICAgICBuZXcgSnNvbk9iamVjdCgpLnRvT2JqZWN0KGpzb24sIHBhbmVsKTtcbiAgICAgIGlmICghdGhpcy5zaG93UGFnZVRpdGxlcykge1xuICAgICAgICBwYW5lbC50aXRsZSA9IFwiXCI7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzaW5nbGU7XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVQYWdlc0ZvckV2ZXJ5UXVlc3Rpb24oc3RhcnRJbmRleDogbnVtYmVyKTogQXJyYXk8UGFnZU1vZGVsPiB7XG4gICAgdmFyIHJlczogQXJyYXk8UGFnZU1vZGVsPiA9IFtdO1xuICAgIGZvciAodmFyIGkgPSBzdGFydEluZGV4OyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG9yaWdpbmFsUGFnZSA9IHRoaXMucGFnZXNbaV07XG4gICAgICAvLyBJbml0aWFsaXplIHJhbmRvbWl6YXRpb25cbiAgICAgIG9yaWdpbmFsUGFnZS5zZXRXYXNTaG93bih0cnVlKTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgb3JpZ2luYWxQYWdlLmVsZW1lbnRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBvcmlnaW5hbEVsZW1lbnQgPSBvcmlnaW5hbFBhZ2UuZWxlbWVudHNbal07XG4gICAgICAgIHZhciBlbGVtZW50ID0gU2VyaWFsaXplci5jcmVhdGVDbGFzcyhvcmlnaW5hbEVsZW1lbnQuZ2V0VHlwZSgpKTtcbiAgICAgICAgaWYgKCFlbGVtZW50KSBjb250aW51ZTtcbiAgICAgICAgdmFyIGpzb25PYmogPSBuZXcgSnNvbk9iamVjdCgpO1xuICAgICAgICAvL0Rlc2VyaWFsaXplIHBhZ2UgcHJvcGVydGllcyBvbmx5LCBleGNsdWRpbmcgZWxlbWVudHNcbiAgICAgICAganNvbk9iai5saWdodFNlcmlhbGl6aW5nID0gdHJ1ZTtcbiAgICAgICAgdmFyIHBhZ2VKc29uID0ganNvbk9iai50b0pzb25PYmplY3Qob3JpZ2luYWxQYWdlKTtcblxuICAgICAgICB2YXIgcGFnZSA9IDxQYWdlTW9kZWw+U2VyaWFsaXplci5jcmVhdGVDbGFzcyhvcmlnaW5hbFBhZ2UuZ2V0VHlwZSgpKTtcbiAgICAgICAgcGFnZS5mcm9tSlNPTihwYWdlSnNvbik7XG4gICAgICAgIHBhZ2UubmFtZSA9IFwicGFnZVwiICsgKHJlcy5sZW5ndGggKyAxKTtcbiAgICAgICAgcGFnZS5zZXRTdXJ2ZXlJbXBsKHRoaXMpO1xuICAgICAgICByZXMucHVzaChwYWdlKTtcbiAgICAgICAgdmFyIGpzb24gPSBuZXcgSnNvbk9iamVjdCgpLnRvSnNvbk9iamVjdChvcmlnaW5hbEVsZW1lbnQpO1xuICAgICAgICBuZXcgSnNvbk9iamVjdCgpLnRvT2JqZWN0KGpzb24sIGVsZW1lbnQpO1xuICAgICAgICBwYWdlLmFkZEVsZW1lbnQoZWxlbWVudCk7XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgcGFnZS5xdWVzdGlvbnMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzQWRkZWQocGFnZS5xdWVzdGlvbnNba10pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgd2hldGhlciB0aGUgY3VycmVudCBwYWdlIGlzIHRoZSBmaXJzdCBvbmUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzRmlyc3RQYWdlKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlID09IG51bGwpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiB0aGlzLnZpc2libGVQYWdlcy5pbmRleE9mKHRoaXMuY3VycmVudFBhZ2UpID09IDA7XG4gIH1cbiAgcHVibGljIGdldCBpc1Nob3dQcmV2QnV0dG9uKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzRmlyc3RQYWdlIHx8ICF0aGlzLnNob3dQcmV2QnV0dG9uKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHBhZ2UgPSB0aGlzLnZpc2libGVQYWdlc1t0aGlzLmN1cnJlbnRQYWdlTm8gLSAxXTtcbiAgICByZXR1cm4gdGhpcy5nZXRQYWdlTWF4VGltZVRvRmluaXNoKHBhZ2UpIDw9IDA7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgd2hldGhlciB0aGUgY3VycmVudCBwYWdlIGlzIHRoZSBsYXN0IG9uZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXNMYXN0UGFnZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA9PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgICB2YXIgdlBhZ2VzID0gdGhpcy52aXNpYmxlUGFnZXM7XG4gICAgcmV0dXJuIHZQYWdlcy5pbmRleE9mKHRoaXMuY3VycmVudFBhZ2UpID09IHZQYWdlcy5sZW5ndGggLSAxO1xuICB9XG4gIC8qKlxuICAgKiBDb21wbGV0ZXMgdGhlIHN1cnZleS5cbiAgICpcbiAgICogQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgdGFza3M6XG4gICAqXG4gICAqIC0gd3JpdGVzIGNvb2tpZSBpZiB0aGUgYGNvb2tpZU5hbWVgIHByb3BlcnR5IGlzIG5vdCBlbXB0eVxuICAgKiAtIHNldHMgdGhlIHN1cnZleSBpbnRvIGBjb21wbGV0ZWRgIHN0YXRlXG4gICAqIC0gZmlyZXMgdGhlIGBvbkNvbXBsZXRlYCBldmVudFxuICAgKiAtIGNhbGxzIGBzZW5kUmVzdWx0YCBmdW5jdGlvbi5cbiAgICpcbiAgICogQ2FsbGluZyB0aGUgYGRvQ29tcGxldGVgIGZ1bmN0aW9uIGRvZXMgbm90IHBlcmZvcm0gYW55IHZhbGlkYXRpb24sIHVubGlrZSB0aGUgYGNvbXBsZXRlTGFzdFBhZ2VgIGZ1bmN0aW9uLlxuICAgKiBJdCBjYWxscyBgbmF2aWdhdGVUb1VybGAgYWZ0ZXIgY2FsbGluZyBgb25Db21wbGV0ZWAgZXZlbnQuXG4gICAqIEluIGNhc2UgY2FsbGluZyBgb3B0aW9ucy5zaG93RGF0YVNhdmluZ2AgY2FsbGJhY2sgaW4gdGhlIGBvbkNvbXBsZXRlYCBldmVudCwgYG5hdmlnYXRlVG9VcmxgIGlzIHVzZWQgb24gY2FsbGluZyBgb3B0aW9ucy5zaG93RGF0YVNhdmluZ1N1Y2Nlc3NgIGNhbGxiYWNrLlxuICAgKiBAc2VlIGNvbXBsZXRlTGFzdFBhZ2VcbiAgICogQHNlZSBjb29raWVOYW1lXG4gICAqIEBzZWUgc3RhdGVcbiAgICogQHNlZSBvbkNvbXBsZXRlXG4gICAqIEBzZWUgc3VydmV5UG9zdElkXG4gICAqIEBzZWUgY29tcGxldGVMYXN0UGFnZVxuICAgKiBAc2VlIG5hdmlnYXRlVG9VcmxcbiAgICogQHNlZSBuYXZpZ2F0ZVRvVXJsT25Db25kaXRpb25cbiAgICovXG4gIHB1YmxpYyBkb0NvbXBsZXRlKGlzQ29tcGxldGVPblRyaWdnZXI6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIHZhciBvbkNvbXBsZXRpbmdPcHRpb25zID0ge1xuICAgICAgYWxsb3dDb21wbGV0ZTogdHJ1ZSxcbiAgICAgIGlzQ29tcGxldGVPblRyaWdnZXI6IGlzQ29tcGxldGVPblRyaWdnZXIsXG4gICAgfTtcbiAgICB0aGlzLm9uQ29tcGxldGluZy5maXJlKHRoaXMsIG9uQ29tcGxldGluZ09wdGlvbnMpO1xuICAgIGlmICghb25Db21wbGV0aW5nT3B0aW9ucy5hbGxvd0NvbXBsZXRlKSByZXR1cm47XG4gICAgbGV0IHByZXZpb3VzQ29va2llID0gdGhpcy5oYXNDb29raWU7XG4gICAgdGhpcy5zdG9wVGltZXIoKTtcbiAgICB0aGlzLnNldENvbXBsZXRlZCgpO1xuICAgIHRoaXMuY2xlYXJVbnVzZWRWYWx1ZXMoKTtcbiAgICB0aGlzLnNldENvb2tpZSgpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgc2F2aW5nRGF0YVN0YXJ0ZWQgPSBmYWxzZTtcbiAgICB2YXIgb25Db21wbGV0ZU9wdGlvbnMgPSB7XG4gICAgICBpc0NvbXBsZXRlT25UcmlnZ2VyOiBpc0NvbXBsZXRlT25UcmlnZ2VyLFxuICAgICAgc2hvd0RhdGFTYXZpbmc6IGZ1bmN0aW9uKHRleHQ6IHN0cmluZykge1xuICAgICAgICBzYXZpbmdEYXRhU3RhcnRlZCA9IHRydWU7XG4gICAgICAgIHNlbGYuc2V0Q29tcGxldGVkU3RhdGUoXCJzYXZpbmdcIiwgdGV4dCk7XG4gICAgICB9LFxuICAgICAgc2hvd0RhdGFTYXZpbmdFcnJvcjogZnVuY3Rpb24odGV4dDogc3RyaW5nKSB7XG4gICAgICAgIHNlbGYuc2V0Q29tcGxldGVkU3RhdGUoXCJlcnJvclwiLCB0ZXh0KTtcbiAgICAgIH0sXG4gICAgICBzaG93RGF0YVNhdmluZ1N1Y2Nlc3M6IGZ1bmN0aW9uKHRleHQ6IHN0cmluZykge1xuICAgICAgICBzZWxmLnNldENvbXBsZXRlZFN0YXRlKFwic3VjY2Vzc1wiLCB0ZXh0KTtcbiAgICAgICAgc2VsZi5uYXZpZ2F0ZVRvKCk7XG4gICAgICB9LFxuICAgICAgc2hvd0RhdGFTYXZpbmdDbGVhcjogZnVuY3Rpb24odGV4dDogc3RyaW5nKSB7XG4gICAgICAgIHNlbGYuc2V0Q29tcGxldGVkU3RhdGUoXCJcIiwgXCJcIik7XG4gICAgICB9LFxuICAgIH07XG4gICAgdGhpcy5vbkNvbXBsZXRlLmZpcmUodGhpcywgb25Db21wbGV0ZU9wdGlvbnMpO1xuICAgIGlmICghcHJldmlvdXNDb29raWUgJiYgdGhpcy5zdXJ2ZXlQb3N0SWQpIHtcbiAgICAgIHRoaXMuc2VuZFJlc3VsdCgpO1xuICAgIH1cbiAgICBpZiAoIXNhdmluZ0RhdGFTdGFydGVkKSB7XG4gICAgICB0aGlzLm5hdmlnYXRlVG8oKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFN0YXJ0cyB0aGUgc3VydmV5LiBDaGFuZ2VzIHRoZSBzdXJ2ZXkgbW9kZSBmcm9tIFwic3RhcnRpbmdcIiB0byBcInJ1bm5pbmdcIi4gQ2FsbCB0aGlzIGZ1bmN0aW9uIGlmIHlvdXIgc3VydmV5IGhhcyBhIHN0YXJ0IHBhZ2UsIG90aGVyd2lzZSB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZy5cbiAgICogQHNlZSBmaXJzdFBhZ2VJc1N0YXJ0ZWRcbiAgICovXG4gIHB1YmxpYyBzdGFydCgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuZmlyc3RQYWdlSXNTdGFydGVkKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRoaXMuY2hlY2tJc1BhZ2VIYXNFcnJvcnModGhpcy5zdGFydGVkUGFnZSwgdHJ1ZSkpIHJldHVybiBmYWxzZTtcbiAgICB0aGlzLmlzU3RhcnRlZFN0YXRlID0gZmFsc2U7XG4gICAgdGhpcy5zdGFydFRpbWVyRnJvbVVJKCk7XG4gICAgdGhpcy5vblN0YXJ0ZWQuZmlyZSh0aGlzLCB7fSk7XG4gICAgaWYgKCEhdGhpcy5jdXJyZW50UGFnZSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZS5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogR2V0cyB3aGV0aGVyIHRoZSBxdWVzdGlvbiB2YWx1ZXMgb24gdGhlIGN1cnJlbnQgcGFnZSBhcmUgdmFsaWRhdGluZyBvbiB0aGUgc2VydmVyIGF0IHRoZSBjdXJyZW50IG1vbWVudC5cbiAgICogQHNlZSBvblNlcnZlclZhbGlkYXRlUXVlc3Rpb25zXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzVmFsaWRhdGluZ09uU2VydmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc1ZhbGlkYXRpbmdPblNlcnZlclwiLCBmYWxzZSk7XG4gIH1cbiAgcHJpdmF0ZSBzZXRJc1ZhbGlkYXRpbmdPblNlcnZlcih2YWw6IGJvb2xlYW4pIHtcbiAgICBpZiAodmFsID09IHRoaXMuaXNWYWxpZGF0aW5nT25TZXJ2ZXIpIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc1ZhbGlkYXRpbmdPblNlcnZlclwiLCB2YWwpO1xuICAgIHRoaXMub25Jc1ZhbGlkYXRpbmdPblNlcnZlckNoYW5nZWQoKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25Jc1ZhbGlkYXRpbmdPblNlcnZlckNoYW5nZWQoKSB7fVxuICBwcm90ZWN0ZWQgZG9TZXJ2ZXJWYWxpZGF0aW9uKFxuICAgIGRvQ29tcGxldGU6IGJvb2xlYW4sXG4gICAgaXNQcmV2aWV3OiBib29sZWFuID0gZmFsc2VcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMub25TZXJ2ZXJWYWxpZGF0ZVF1ZXN0aW9ucyB8fFxuICAgICAgdGhpcy5vblNlcnZlclZhbGlkYXRlUXVlc3Rpb25zLmlzRW1wdHlcbiAgICApXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCFkb0NvbXBsZXRlICYmIHRoaXMuY2hlY2tFcnJvcnNNb2RlID09PSBcIm9uQ29tcGxldGVcIikgcmV0dXJuIGZhbHNlO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIGRhdGE6IDx7IFtpbmRleDogc3RyaW5nXTogYW55IH0+e30sXG4gICAgICBlcnJvcnM6IHt9LFxuICAgICAgc3VydmV5OiB0aGlzLFxuICAgICAgY29tcGxldGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICBzZWxmLmNvbXBsZXRlU2VydmVyVmFsaWRhdGlvbihvcHRpb25zLCBpc1ByZXZpZXcpO1xuICAgICAgfSxcbiAgICB9O1xuICAgIGlmIChkb0NvbXBsZXRlICYmIHRoaXMuY2hlY2tFcnJvcnNNb2RlID09PSBcIm9uQ29tcGxldGVcIikge1xuICAgICAgb3B0aW9ucy5kYXRhID0gdGhpcy5kYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5hY3RpdmVQYWdlLnF1ZXN0aW9ucztcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBxdWVzdGlvbiA9IHF1ZXN0aW9uc1tpXTtcbiAgICAgICAgaWYgKCFxdWVzdGlvbi52aXNpYmxlKSBjb250aW51ZTtcbiAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5nZXRWYWx1ZShxdWVzdGlvbi5nZXRWYWx1ZU5hbWUoKSk7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbHVlRW1wdHkodmFsdWUpKVxuICAgICAgICAgIG9wdGlvbnMuZGF0YVtxdWVzdGlvbi5nZXRWYWx1ZU5hbWUoKV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zZXRJc1ZhbGlkYXRpbmdPblNlcnZlcih0cnVlKTtcblxuICAgIGlmICh0eXBlb2YgdGhpcy5vblNlcnZlclZhbGlkYXRlUXVlc3Rpb25zID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMub25TZXJ2ZXJWYWxpZGF0ZVF1ZXN0aW9ucyh0aGlzLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vblNlcnZlclZhbGlkYXRlUXVlc3Rpb25zLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJpdmF0ZSBjb21wbGV0ZVNlcnZlclZhbGlkYXRpb24ob3B0aW9uczogYW55LCBpc1ByZXZpZXc6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldElzVmFsaWRhdGluZ09uU2VydmVyKGZhbHNlKTtcbiAgICBpZiAoIW9wdGlvbnMgJiYgIW9wdGlvbnMuc3VydmV5KSByZXR1cm47XG4gICAgdmFyIHNlbGYgPSBvcHRpb25zLnN1cnZleTtcbiAgICB2YXIgaGFzRXJyb3JzID0gZmFsc2U7XG4gICAgaWYgKG9wdGlvbnMuZXJyb3JzKSB7XG4gICAgICB2YXIgaGFzVG9Gb2N1cyA9IHRoaXMuZm9jdXNPbkZpcnN0RXJyb3I7XG4gICAgICBmb3IgKHZhciBuYW1lIGluIG9wdGlvbnMuZXJyb3JzKSB7XG4gICAgICAgIHZhciBxdWVzdGlvbiA9IHNlbGYuZ2V0UXVlc3Rpb25CeU5hbWUobmFtZSk7XG4gICAgICAgIGlmIChxdWVzdGlvbiAmJiBxdWVzdGlvbltcImVycm9yc1wiXSkge1xuICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7XG4gICAgICAgICAgcXVlc3Rpb24uYWRkRXJyb3IobmV3IEN1c3RvbUVycm9yKG9wdGlvbnMuZXJyb3JzW25hbWVdLCB0aGlzKSk7XG4gICAgICAgICAgaWYgKGhhc1RvRm9jdXMpIHtcbiAgICAgICAgICAgIGhhc1RvRm9jdXMgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICghIXF1ZXN0aW9uLnBhZ2UpIHtcbiAgICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHF1ZXN0aW9uLnBhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxdWVzdGlvbi5mb2N1cyh0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuZmlyZVZhbGlkYXRlZEVycm9yc09uUGFnZSh0aGlzLmN1cnJlbnRQYWdlKTtcbiAgICB9XG4gICAgaWYgKCFoYXNFcnJvcnMpIHtcbiAgICAgIGlmIChpc1ByZXZpZXcpIHtcbiAgICAgICAgdGhpcy5pc1Nob3dpbmdQcmV2aWV3ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChzZWxmLmlzTGFzdFBhZ2UpIHNlbGYuZG9Db21wbGV0ZSgpO1xuICAgICAgICBlbHNlIHNlbGYuZG9OZXh0UGFnZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZG9OZXh0UGFnZSgpIHtcbiAgICB2YXIgY3VyUGFnZSA9IHRoaXMuY3VycmVudFBhZ2U7XG4gICAgdGhpcy5jaGVja09uUGFnZVRyaWdnZXJzKCk7XG4gICAgaWYgKCF0aGlzLmlzQ29tcGxldGVkKSB7XG4gICAgICBpZiAodGhpcy5zZW5kUmVzdWx0T25QYWdlTmV4dCkge1xuICAgICAgICB0aGlzLnNlbmRSZXN1bHQodGhpcy5zdXJ2ZXlQb3N0SWQsIHRoaXMuY2xpZW50SWQsIHRydWUpO1xuICAgICAgfVxuICAgICAgaWYgKGN1clBhZ2UgPT09IHRoaXMuY3VycmVudFBhZ2UpIHtcbiAgICAgICAgdmFyIHZQYWdlcyA9IHRoaXMudmlzaWJsZVBhZ2VzO1xuICAgICAgICB2YXIgaW5kZXggPSB2UGFnZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRQYWdlKTtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHZQYWdlc1tpbmRleCArIDFdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRvQ29tcGxldGUodHJ1ZSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBzZXRDb21wbGV0ZWQoKSB7XG4gICAgdGhpcy5pc0NvbXBsZXRlZCA9IHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIEhUTUwgY29udGVudCBmb3IgdGhlIGNvbXBsZXRlIHBhZ2UuXG4gICAqIEBzZWUgY29tcGxldGVkSHRtbFxuICAgKi9cbiAgcHVibGljIGdldCBwcm9jZXNzZWRDb21wbGV0ZWRIdG1sKCk6IHN0cmluZyB7XG4gICAgdmFyIGh0bWwgPSB0aGlzLnJlbmRlcmVkQ29tcGxldGVkSHRtbDtcbiAgICBpZiAoaHRtbCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0h0bWwoaHRtbCk7XG4gICAgfVxuICAgIHJldHVybiBcIjxoMz5cIiArIHRoaXMuZ2V0TG9jU3RyaW5nKFwiY29tcGxldGluZ1N1cnZleVwiKSArIFwiPC9oMz5cIjtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgSFRNTCBjb250ZW50LCB0aGF0IGlzIHNob3duIHRvIGEgdXNlciB0aGF0IGhhZCBjb21wbGV0ZWQgdGhlIHN1cnZleSBiZWZvcmUuXG4gICAqIEBzZWUgY29tcGxldGVkSHRtbFxuICAgKiBAc2VlIGNvb2tpZU5hbWVcbiAgICovXG4gIHB1YmxpYyBnZXQgcHJvY2Vzc2VkQ29tcGxldGVkQmVmb3JlSHRtbCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmNvbXBsZXRlZEJlZm9yZUh0bWwpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NIdG1sKHRoaXMuY29tcGxldGVkQmVmb3JlSHRtbCk7XG4gICAgfVxuICAgIHJldHVybiBcIjxoMz5cIiArIHRoaXMuZ2V0TG9jU3RyaW5nKFwiY29tcGxldGluZ1N1cnZleUJlZm9yZVwiKSArIFwiPC9oMz5cIjtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgSFRNTCBjb250ZW50LCB0aGF0IGlzIHNob3dzIHdoZW4gYSBzdXJ2ZXkgbG9hZHMgdGhlIHN1cnZleSBKU09OLlxuICAgKi9cbiAgcHVibGljIGdldCBwcm9jZXNzZWRMb2FkaW5nSHRtbCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmxvYWRpbmdIdG1sKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzSHRtbCh0aGlzLmxvYWRpbmdIdG1sKTtcbiAgICB9XG4gICAgcmV0dXJuIFwiPGgzPlwiICsgdGhpcy5nZXRMb2NTdHJpbmcoXCJsb2FkaW5nU3VydmV5XCIpICsgXCI8L2gzPlwiO1xuICB9XG4gIHB1YmxpYyBnZXRQcm9ncmVzc0luZm8oKTogSVByb2dyZXNzSW5mbyB7XG4gICAgdmFyIHBhZ2VzID0gdGhpcy5pc0Rlc2lnbk1vZGUgPyB0aGlzLnBhZ2VzIDogdGhpcy52aXNpYmxlUGFnZXM7XG4gICAgcmV0dXJuIFN1cnZleUVsZW1lbnQuZ2V0UHJvZ3Jlc3NJbmZvQnlFbGVtZW50cyhwYWdlcywgZmFsc2UpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0ZXh0IGZvciB0aGUgY3VycmVudCBwcm9ncmVzcy5cbiAgICovXG4gIHB1YmxpYyBnZXQgcHJvZ3Jlc3NUZXh0KCk6IHN0cmluZyB7XG4gICAgdmFyIHJlcyA9IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInByb2dyZXNzVGV4dFwiLCBcIlwiKTtcbiAgICBpZiAoIXJlcykge1xuICAgICAgdGhpcy51cGRhdGVQcm9ncmVzc1RleHQoKTtcbiAgICAgIHJlcyA9IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInByb2dyZXNzVGV4dFwiLCBcIlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIGlzQ2FsY3VsYXRpbmdQcm9ncmVzc1RleHQgPSBmYWxzZTtcbiAgcHVibGljIHVwZGF0ZVByb2dyZXNzVGV4dChvblZhbHVlQ2hhbmdlZDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgaWYgKHRoaXMuaXNDYWxjdWxhdGluZ1Byb2dyZXNzVGV4dCkgcmV0dXJuO1xuICAgIGlmIChcbiAgICAgIG9uVmFsdWVDaGFuZ2VkICYmXG4gICAgICB0aGlzLnByb2dyZXNzQmFyVHlwZSA9PSBcInBhZ2VzXCIgJiZcbiAgICAgIHRoaXMub25Qcm9ncmVzc1RleHQuaXNFbXB0eVxuICAgIClcbiAgICAgIHJldHVybjtcbiAgICB0aGlzLmlzQ2FsY3VsYXRpbmdQcm9ncmVzc1RleHQgPSB0cnVlO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInByb2dyZXNzVGV4dFwiLCB0aGlzLmdldFByb2dyZXNzVGV4dCgpKTtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJwcm9ncmVzc1ZhbHVlXCIsIHRoaXMuZ2V0UHJvZ3Jlc3MoKSk7XG4gICAgdGhpcy5pc0NhbGN1bGF0aW5nUHJvZ3Jlc3NUZXh0ID0gZmFsc2U7XG4gIH1cbiAgcHVibGljIGdldFByb2dyZXNzVGV4dCgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5pc0Rlc2lnbk1vZGUgJiYgdGhpcy5jdXJyZW50UGFnZSA9PSBudWxsKSByZXR1cm4gXCJcIjtcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIHF1ZXN0aW9uQ291bnQ6IDAsXG4gICAgICBhbnN3ZXJlZFF1ZXN0aW9uQ291bnQ6IDAsXG4gICAgICByZXF1aXJlZFF1ZXN0aW9uQ291bnQ6IDAsXG4gICAgICByZXF1aXJlZEFuc3dlcmVkUXVlc3Rpb25Db3VudDogMCxcbiAgICAgIHRleHQ6IFwiXCIsXG4gICAgfTtcbiAgICB2YXIgdHlwZSA9IHRoaXMucHJvZ3Jlc3NCYXJUeXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKFxuICAgICAgdHlwZSA9PT0gXCJxdWVzdGlvbnNcIiB8fFxuICAgICAgdHlwZSA9PT0gXCJyZXF1aXJlZHF1ZXN0aW9uc1wiIHx8XG4gICAgICB0eXBlID09PSBcImNvcnJlY3RxdWVzdGlvbnNcIiB8fFxuICAgICAgIXRoaXMub25Qcm9ncmVzc1RleHQuaXNFbXB0eVxuICAgICkge1xuICAgICAgdmFyIGluZm8gPSB0aGlzLmdldFByb2dyZXNzSW5mbygpO1xuICAgICAgb3B0aW9ucy5xdWVzdGlvbkNvdW50ID0gaW5mby5xdWVzdGlvbkNvdW50O1xuICAgICAgb3B0aW9ucy5hbnN3ZXJlZFF1ZXN0aW9uQ291bnQgPSBpbmZvLmFuc3dlcmVkUXVlc3Rpb25Db3VudDtcbiAgICAgIG9wdGlvbnMucmVxdWlyZWRRdWVzdGlvbkNvdW50ID0gaW5mby5yZXF1aXJlZFF1ZXN0aW9uQ291bnQ7XG4gICAgICBvcHRpb25zLnJlcXVpcmVkQW5zd2VyZWRRdWVzdGlvbkNvdW50ID1cbiAgICAgICAgaW5mby5yZXF1aXJlZEFuc3dlcmVkUXVlc3Rpb25Db3VudDtcbiAgICB9XG5cbiAgICBvcHRpb25zLnRleHQgPSB0aGlzLmdldFByb2dyZXNzVGV4dENvcmUob3B0aW9ucyk7XG4gICAgdGhpcy5vblByb2dyZXNzVGV4dC5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIHJldHVybiBvcHRpb25zLnRleHQ7XG4gIH1cbiAgcHJpdmF0ZSBnZXRQcm9ncmVzc1RleHRDb3JlKGluZm86IElQcm9ncmVzc0luZm8pOiBzdHJpbmcge1xuICAgIHZhciB0eXBlID0gdGhpcy5wcm9ncmVzc0JhclR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAodHlwZSA9PT0gXCJxdWVzdGlvbnNcIikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jU3RyaW5nKFwicXVlc3Rpb25zUHJvZ3Jlc3NUZXh0XCIpW1wiZm9ybWF0XCJdKFxuICAgICAgICBpbmZvLmFuc3dlcmVkUXVlc3Rpb25Db3VudCxcbiAgICAgICAgaW5mby5xdWVzdGlvbkNvdW50XG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gXCJyZXF1aXJlZHF1ZXN0aW9uc1wiKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMb2NTdHJpbmcoXCJxdWVzdGlvbnNQcm9ncmVzc1RleHRcIilbXCJmb3JtYXRcIl0oXG4gICAgICAgIGluZm8ucmVxdWlyZWRBbnN3ZXJlZFF1ZXN0aW9uQ291bnQsXG4gICAgICAgIGluZm8ucmVxdWlyZWRRdWVzdGlvbkNvdW50XG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gXCJjb3JyZWN0cXVlc3Rpb25zXCIpIHtcbiAgICAgIHZhciBjb3JyZWN0QW5zd2Vyc0NvdW50ID0gdGhpcy5nZXRDb3JyZWN0ZWRBbnN3ZXJDb3VudCgpO1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jU3RyaW5nKFwicXVlc3Rpb25zUHJvZ3Jlc3NUZXh0XCIpW1wiZm9ybWF0XCJdKFxuICAgICAgICBjb3JyZWN0QW5zd2Vyc0NvdW50LFxuICAgICAgICBpbmZvLnF1ZXN0aW9uQ291bnRcbiAgICAgICk7XG4gICAgfVxuICAgIHZhciB2UGFnZXMgPSB0aGlzLmlzRGVzaWduTW9kZSA/IHRoaXMucGFnZXMgOiB0aGlzLnZpc2libGVQYWdlcztcbiAgICB2YXIgaW5kZXggPSB0aGlzLmlzRGVzaWduTW9kZSA/IDEgOiB2UGFnZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRQYWdlKSArIDE7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jU3RyaW5nKFwicHJvZ3Jlc3NUZXh0XCIpW1wiZm9ybWF0XCJdKGluZGV4LCB2UGFnZXMubGVuZ3RoKTtcbiAgfVxuICBwcm90ZWN0ZWQgYWZ0ZXJSZW5kZXJTdXJ2ZXkoaHRtbEVsZW1lbnQ6IGFueSkge1xuICAgIHRoaXMub25BZnRlclJlbmRlclN1cnZleS5maXJlKHRoaXMsIHtcbiAgICAgIHN1cnZleTogdGhpcyxcbiAgICAgIGh0bWxFbGVtZW50OiBodG1sRWxlbWVudCxcbiAgICB9KTtcbiAgfVxuICB1cGRhdGVRdWVzdGlvbkNzc0NsYXNzZXMocXVlc3Rpb246IElRdWVzdGlvbiwgY3NzQ2xhc3NlczogYW55KSB7XG4gICAgdGhpcy5vblVwZGF0ZVF1ZXN0aW9uQ3NzQ2xhc3Nlcy5maXJlKHRoaXMsIHtcbiAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgIGNzc0NsYXNzZXM6IGNzc0NsYXNzZXMsXG4gICAgfSk7XG4gIH1cbiAgdXBkYXRlUGFuZWxDc3NDbGFzc2VzKHBhbmVsOiBJUGFuZWwsIGNzc0NsYXNzZXM6IGFueSkge1xuICAgIHRoaXMub25VcGRhdGVQYW5lbENzc0NsYXNzZXMuZmlyZSh0aGlzLCB7XG4gICAgICBwYW5lbDogcGFuZWwsXG4gICAgICBjc3NDbGFzc2VzOiBjc3NDbGFzc2VzLFxuICAgIH0pO1xuICB9XG4gIHVwZGF0ZVBhZ2VDc3NDbGFzc2VzKHBhZ2U6IElQYWdlLCBjc3NDbGFzc2VzOiBhbnkpIHtcbiAgICB0aGlzLm9uVXBkYXRlUGFnZUNzc0NsYXNzZXMuZmlyZSh0aGlzLCB7XG4gICAgICBwYWdlOiBwYWdlLFxuICAgICAgY3NzQ2xhc3NlczogY3NzQ2xhc3NlcyxcbiAgICB9KTtcbiAgfVxuICBhZnRlclJlbmRlclBhZ2UoaHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgaWYgKHRoaXMub25BZnRlclJlbmRlclBhZ2UuaXNFbXB0eSkgcmV0dXJuO1xuICAgIHRoaXMub25BZnRlclJlbmRlclBhZ2UuZmlyZSh0aGlzLCB7XG4gICAgICBwYWdlOiB0aGlzLmFjdGl2ZVBhZ2UsXG4gICAgICBodG1sRWxlbWVudDogaHRtbEVsZW1lbnQsXG4gICAgfSk7XG4gIH1cbiAgYWZ0ZXJSZW5kZXJIZWFkZXIoaHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgaWYgKHRoaXMub25BZnRlclJlbmRlckhlYWRlci5pc0VtcHR5KSByZXR1cm47XG4gICAgdGhpcy5vbkFmdGVyUmVuZGVySGVhZGVyLmZpcmUodGhpcywge1xuICAgICAgaHRtbEVsZW1lbnQ6IGh0bWxFbGVtZW50LFxuICAgIH0pO1xuICB9XG4gIGFmdGVyUmVuZGVyUXVlc3Rpb24ocXVlc3Rpb246IElRdWVzdGlvbiwgaHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgdGhpcy5vbkFmdGVyUmVuZGVyUXVlc3Rpb24uZmlyZSh0aGlzLCB7XG4gICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICBodG1sRWxlbWVudDogaHRtbEVsZW1lbnQsXG4gICAgfSk7XG4gIH1cbiAgYWZ0ZXJSZW5kZXJRdWVzdGlvbklucHV0KHF1ZXN0aW9uOiBJUXVlc3Rpb24sIGh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgIGlmICh0aGlzLm9uQWZ0ZXJSZW5kZXJRdWVzdGlvbklucHV0LmlzRW1wdHkpIHJldHVybjtcbiAgICBsZXQgaWQgPSAoPFF1ZXN0aW9uPnF1ZXN0aW9uKS5pbnB1dElkO1xuICAgIGlmICghIWlkICYmIGh0bWxFbGVtZW50LmlkICE9PSBpZCAmJiB0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGxldCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgICAgIGlmICghIWVsKSB7XG4gICAgICAgIGh0bWxFbGVtZW50ID0gZWw7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMub25BZnRlclJlbmRlclF1ZXN0aW9uSW5wdXQuZmlyZSh0aGlzLCB7XG4gICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICBodG1sRWxlbWVudDogaHRtbEVsZW1lbnQsXG4gICAgfSk7XG4gIH1cbiAgYWZ0ZXJSZW5kZXJQYW5lbChwYW5lbDogSUVsZW1lbnQsIGh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgIHRoaXMub25BZnRlclJlbmRlclBhbmVsLmZpcmUodGhpcywge1xuICAgICAgcGFuZWw6IHBhbmVsLFxuICAgICAgaHRtbEVsZW1lbnQ6IGh0bWxFbGVtZW50LFxuICAgIH0pO1xuICB9XG4gIG1hdHJpeEJlZm9yZVJvd0FkZGVkKG9wdGlvbnM6IGFueSkge1xuICAgIHRoaXMub25NYXRyaXhCZWZvcmVSb3dBZGRlZC5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICB9XG4gIG1hdHJpeFJvd0FkZGVkKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIHJvdzogYW55KSB7XG4gICAgdGhpcy5vbk1hdHJpeFJvd0FkZGVkLmZpcmUodGhpcywgeyBxdWVzdGlvbjogcXVlc3Rpb24sIHJvdzogcm93IH0pO1xuICB9XG4gIGdldFF1ZXN0aW9uQnlWYWx1ZU5hbWVGcm9tQXJyYXkoXG4gICAgdmFsdWVOYW1lOiBzdHJpbmcsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGluZGV4OiBudW1iZXJcbiAgKTogSVF1ZXN0aW9uIHtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRRdWVzdGlvbnNCeVZhbHVlTmFtZSh2YWx1ZU5hbWUpO1xuICAgIGlmICghcXVlc3Rpb25zKSByZXR1cm47XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByZXMgPSBxdWVzdGlvbnNbaV0uZ2V0UXVlc3Rpb25Gcm9tQXJyYXkobmFtZSwgaW5kZXgpO1xuICAgICAgaWYgKCEhcmVzKSByZXR1cm4gcmVzO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBtYXRyaXhSb3dSZW1vdmVkKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIHJvd0luZGV4OiBudW1iZXIsIHJvdzogYW55KSB7XG4gICAgdGhpcy5vbk1hdHJpeFJvd1JlbW92ZWQuZmlyZSh0aGlzLCB7XG4gICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICByb3dJbmRleDogcm93SW5kZXgsXG4gICAgICByb3c6IHJvdyxcbiAgICB9KTtcbiAgfVxuICBtYXRyaXhSb3dSZW1vdmluZyhxdWVzdGlvbjogSVF1ZXN0aW9uLCByb3dJbmRleDogbnVtYmVyLCByb3c6IGFueSk6IGJvb2xlYW4ge1xuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgcm93SW5kZXg6IHJvd0luZGV4LFxuICAgICAgcm93OiByb3csXG4gICAgICBhbGxvdzogdHJ1ZSxcbiAgICB9O1xuICAgIHRoaXMub25NYXRyaXhSb3dSZW1vdmluZy5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIHJldHVybiBvcHRpb25zLmFsbG93O1xuICB9XG4gIG1hdHJpeEFsbG93UmVtb3ZlUm93KFxuICAgIHF1ZXN0aW9uOiBJUXVlc3Rpb24sXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICByb3c6IGFueVxuICApOiBib29sZWFuIHtcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgIHJvd0luZGV4OiByb3dJbmRleCxcbiAgICAgIHJvdzogcm93LFxuICAgICAgYWxsb3c6IHRydWUsXG4gICAgfTtcbiAgICB0aGlzLm9uTWF0cml4QWxsb3dSZW1vdmVSb3cuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICByZXR1cm4gb3B0aW9ucy5hbGxvdztcbiAgfVxuICBtYXRyaXhDZWxsQ3JlYXRlZChxdWVzdGlvbjogSVF1ZXN0aW9uLCBvcHRpb25zOiBhbnkpIHtcbiAgICBvcHRpb25zLnF1ZXN0aW9uID0gcXVlc3Rpb247XG4gICAgdGhpcy5vbk1hdHJpeENlbGxDcmVhdGVkLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gIH1cbiAgbWF0cml4QWZ0ZXJDZWxsUmVuZGVyKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIG9wdGlvbnM6IGFueSkge1xuICAgIG9wdGlvbnMucXVlc3Rpb24gPSBxdWVzdGlvbjtcbiAgICB0aGlzLm9uTWF0cml4QWZ0ZXJDZWxsUmVuZGVyLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gIH1cbiAgbWF0cml4Q2VsbFZhbHVlQ2hhbmdlZChxdWVzdGlvbjogSVF1ZXN0aW9uLCBvcHRpb25zOiBhbnkpIHtcbiAgICBvcHRpb25zLnF1ZXN0aW9uID0gcXVlc3Rpb247XG4gICAgdGhpcy5vbk1hdHJpeENlbGxWYWx1ZUNoYW5nZWQuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgfVxuICBtYXRyaXhDZWxsVmFsdWVDaGFuZ2luZyhxdWVzdGlvbjogSVF1ZXN0aW9uLCBvcHRpb25zOiBhbnkpIHtcbiAgICBvcHRpb25zLnF1ZXN0aW9uID0gcXVlc3Rpb247XG4gICAgdGhpcy5vbk1hdHJpeENlbGxWYWx1ZUNoYW5naW5nLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gIH1cbiAgZ2V0IGlzVmFsaWRhdGVPblZhbHVlQ2hhbmdpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2hlY2tFcnJvcnNNb2RlID09PSBcIm9uVmFsdWVDaGFuZ2luZ1wiO1xuICB9XG4gIG1hdHJpeENlbGxWYWxpZGF0ZShxdWVzdGlvbjogSVF1ZXN0aW9uLCBvcHRpb25zOiBhbnkpOiBTdXJ2ZXlFcnJvciB7XG4gICAgb3B0aW9ucy5xdWVzdGlvbiA9IHF1ZXN0aW9uO1xuICAgIHRoaXMub25NYXRyaXhDZWxsVmFsaWRhdGUuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICByZXR1cm4gb3B0aW9ucy5lcnJvciA/IG5ldyBDdXN0b21FcnJvcihvcHRpb25zLmVycm9yLCB0aGlzKSA6IG51bGw7XG4gIH1cbiAgZHluYW1pY1BhbmVsQWRkZWQocXVlc3Rpb246IElRdWVzdGlvbikge1xuICAgIGlmICh0aGlzLm9uRHluYW1pY1BhbmVsQWRkZWQuaXNFbXB0eSkgcmV0dXJuO1xuICAgIHZhciBwYW5lbHMgPSAoPGFueT5xdWVzdGlvbikucGFuZWxzO1xuICAgIHZhciBwYW5lbCA9IHBhbmVsc1twYW5lbHMubGVuZ3RoIC0gMV07XG4gICAgdGhpcy5vbkR5bmFtaWNQYW5lbEFkZGVkLmZpcmUodGhpcywgeyBxdWVzdGlvbjogcXVlc3Rpb24sIHBhbmVsOiBwYW5lbCB9KTtcbiAgfVxuICBkeW5hbWljUGFuZWxSZW1vdmVkKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIHBhbmVsSW5kZXg6IG51bWJlciwgcGFuZWw6IElQYW5lbCkge1xuICAgIHZhciBxdWVzdGlvbnMgPSAhIXBhbmVsID8gKDxQYW5lbE1vZGVsQmFzZT5wYW5lbCkucXVlc3Rpb25zIDogW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHF1ZXN0aW9uc1tpXS5jbGVhck9uRGVsZXRpbmdDb250YWluZXIoKTtcbiAgICB9XG4gICAgdGhpcy5vbkR5bmFtaWNQYW5lbFJlbW92ZWQuZmlyZSh0aGlzLCB7XG4gICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICBwYW5lbEluZGV4OiBwYW5lbEluZGV4LFxuICAgICAgcGFuZWw6IHBhbmVsLFxuICAgIH0pO1xuICB9XG4gIGR5bmFtaWNQYW5lbEl0ZW1WYWx1ZUNoYW5nZWQocXVlc3Rpb246IElRdWVzdGlvbiwgb3B0aW9uczogYW55KSB7XG4gICAgb3B0aW9ucy5xdWVzdGlvbiA9IHF1ZXN0aW9uO1xuICAgIHRoaXMub25EeW5hbWljUGFuZWxJdGVtVmFsdWVDaGFuZ2VkLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gIH1cbiAgZHJhZ0FuZERyb3BBbGxvdyhvcHRpb25zOiBhbnkpOiBib29sZWFuIHtcbiAgICBvcHRpb25zLmFsbG93ID0gdHJ1ZTtcbiAgICB0aGlzLm9uRHJhZ0Ryb3BBbGxvdy5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIHJldHVybiBvcHRpb25zLmFsbG93O1xuICB9XG4gIGVsZW1lbnRDb250ZW50VmlzaWJpbGl0eUNoYW5nZWQoZWxlbWVudDogSVN1cnZleUVsZW1lbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZVZhbHVlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlVmFsdWUuZW5zdXJlUm93c1Zpc2liaWxpdHkoKTtcbiAgICB9XG4gICAgdGhpcy5vbkVsZW1lbnRDb250ZW50VmlzaWJpbGl0eUNoYW5nZWQuZmlyZSh0aGlzLCB7IGVsZW1lbnQgfSk7XG4gIH1cblxuICBnZXRVcGRhdGVkRWxlbWVudFRpdGxlQWN0aW9ucyhcbiAgICBlbGVtZW50OiBJU3VydmV5RWxlbWVudCxcbiAgICB0aXRsZUFjdGlvbnM6IEFycmF5PElBY3Rpb24+XG4gICk6IEFycmF5PElBY3Rpb24+IHtcbiAgICBpZiAoZWxlbWVudC5pc1BhZ2UpXG4gICAgICByZXR1cm4gdGhpcy5nZXRVcGRhdGVkUGFnZVRpdGxlQWN0aW9ucyhlbGVtZW50LCB0aXRsZUFjdGlvbnMpO1xuICAgIGlmIChlbGVtZW50LmlzUGFuZWwpXG4gICAgICByZXR1cm4gdGhpcy5nZXRVcGRhdGVkUGFuZWxUaXRsZUFjdGlvbnMoZWxlbWVudCwgdGl0bGVBY3Rpb25zKTtcbiAgICByZXR1cm4gdGhpcy5nZXRVcGRhdGVkUXVlc3Rpb25UaXRsZUFjdGlvbnMoZWxlbWVudCwgdGl0bGVBY3Rpb25zKTtcbiAgfVxuICBwcml2YXRlIGdldFVwZGF0ZWRRdWVzdGlvblRpdGxlQWN0aW9ucyhcbiAgICBxdWVzdGlvbjogSVN1cnZleUVsZW1lbnQsXG4gICAgdGl0bGVBY3Rpb25zOiBBcnJheTxJQWN0aW9uPlxuICApIHtcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgIHRpdGxlQWN0aW9uczogdGl0bGVBY3Rpb25zLFxuICAgIH07XG4gICAgdGhpcy5vbkdldFF1ZXN0aW9uVGl0bGVBY3Rpb25zLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wdGlvbnMudGl0bGVBY3Rpb25zO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRVcGRhdGVkUGFuZWxUaXRsZUFjdGlvbnMoXG4gICAgcGFuZWw6IElTdXJ2ZXlFbGVtZW50LFxuICAgIHRpdGxlQWN0aW9uczogQXJyYXk8SUFjdGlvbj5cbiAgKSB7XG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICBwYW5lbDogcGFuZWwsXG4gICAgICB0aXRsZUFjdGlvbnM6IHRpdGxlQWN0aW9ucyxcbiAgICB9O1xuICAgIHRoaXMub25HZXRQYW5lbFRpdGxlQWN0aW9ucy5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIHJldHVybiBvcHRpb25zLnRpdGxlQWN0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VXBkYXRlZFBhZ2VUaXRsZUFjdGlvbnMoXG4gICAgcGFnZTogSVN1cnZleUVsZW1lbnQsXG4gICAgdGl0bGVBY3Rpb25zOiBBcnJheTxJQWN0aW9uPlxuICApIHtcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIHBhZ2U6IHBhZ2UsXG4gICAgICB0aXRsZUFjdGlvbnM6IHRpdGxlQWN0aW9ucyxcbiAgICB9O1xuICAgIHRoaXMub25HZXRQYWdlVGl0bGVBY3Rpb25zLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wdGlvbnMudGl0bGVBY3Rpb25zO1xuICB9XG5cbiAgZ2V0VXBkYXRlZE1hdHJpeFJvd0FjdGlvbnMoXG4gICAgcXVlc3Rpb246IElRdWVzdGlvbixcbiAgICByb3c6IGFueSxcbiAgICBhY3Rpb25zOiBBcnJheTxJQWN0aW9uPlxuICApIHtcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgIGFjdGlvbnM6IGFjdGlvbnMsXG4gICAgICByb3c6IHJvdyxcbiAgICB9O1xuICAgIHRoaXMub25HZXRNYXRyaXhSb3dBY3Rpb25zLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wdGlvbnMuYWN0aW9ucztcbiAgfVxuXG4gIHNjcm9sbEVsZW1lbnRUb1RvcChcbiAgICBlbGVtZW50OiBJU3VydmV5RWxlbWVudCxcbiAgICBxdWVzdGlvbjogSVF1ZXN0aW9uLFxuICAgIHBhZ2U6IElQYWdlLFxuICAgIGlkOiBzdHJpbmdcbiAgKTogYW55IHtcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICBwYWdlOiBwYWdlLFxuICAgICAgZWxlbWVudElkOiBpZCxcbiAgICAgIGNhbmNlbDogZmFsc2UsXG4gICAgfTtcbiAgICB0aGlzLm9uU2Nyb2xsaW5nRWxlbWVudFRvVG9wLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgaWYgKCFvcHRpb25zLmNhbmNlbCkge1xuICAgICAgU3VydmV5RWxlbWVudC5TY3JvbGxFbGVtZW50VG9Ub3Aob3B0aW9ucy5lbGVtZW50SWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGxvYWRzIGEgZmlsZSB0byBzZXJ2ZXIuXG4gICAqIEBwYXJhbSBxdWVzdGlvbiBhIGZpbGUgcXVlc3Rpb24gb2JqZWN0XG4gICAqIEBwYXJhbSBuYW1lIGEgcXVlc3Rpb24gbmFtZVxuICAgKiBAcGFyYW0gZmlsZXMgZmlsZXMgdG8gdXBsb2FkXG4gICAqIEBwYXJhbSB1cGxvYWRpbmdDYWxsYmFjayBhIGNhbGwgYmFjayBmdW5jdGlvbiB0byBnZXQgdGhlIHN0YXR1cyBvbiB1cGxvYWRpbmcgdGhlIGZpbGVzXG4gICAqL1xuICBwdWJsaWMgdXBsb2FkRmlsZXMoXG4gICAgcXVlc3Rpb246IElRdWVzdGlvbixcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgZmlsZXM6IEZpbGVbXSxcbiAgICB1cGxvYWRpbmdDYWxsYmFjazogKHN0YXR1czogc3RyaW5nLCBkYXRhOiBhbnkpID0+IGFueVxuICApIHtcbiAgICBpZiAodGhpcy5vblVwbG9hZEZpbGVzLmlzRW1wdHkpIHtcbiAgICAgIHVwbG9hZGluZ0NhbGxiYWNrKFwiZXJyb3JcIiwgZmlsZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9uVXBsb2FkRmlsZXMuZmlyZSh0aGlzLCB7XG4gICAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgZmlsZXM6IGZpbGVzIHx8IFtdLFxuICAgICAgICBjYWxsYmFjazogdXBsb2FkaW5nQ2FsbGJhY2ssXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3VydmV5UG9zdElkKSB7XG4gICAgICB0aGlzLnVwbG9hZEZpbGVzQ29yZShuYW1lLCBmaWxlcywgdXBsb2FkaW5nQ2FsbGJhY2spO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogRG93bmxvYWRzIGEgZmlsZSBmcm9tIHNlcnZlclxuICAgKiBAcGFyYW0gbmFtZSBhIHF1ZXN0aW9uIG5hbWVcbiAgICogQHBhcmFtIGZpbGVWYWx1ZSBhIHNpbmdsZSBmaWxlIHF1ZXN0aW9uIHZhbHVlXG4gICAqIEBwYXJhbSBjYWxsYmFjayBhIGNhbGwgYmFjayBmdW5jdGlvbiB0byBnZXQgdGhlIHN0YXR1cyBvbiBkb3dubG9hZGluZyB0aGUgZmlsZSBhbmQgdGhlIGRvd25sb2FkZWQgZmlsZSBjb250ZW50XG4gICAqL1xuICBwdWJsaWMgZG93bmxvYWRGaWxlKFxuICAgIHF1ZXN0aW9uTmFtZTogc3RyaW5nLFxuICAgIGZpbGVWYWx1ZTogYW55LFxuICAgIGNhbGxiYWNrOiAoc3RhdHVzOiBzdHJpbmcsIGRhdGE6IGFueSkgPT4gYW55XG4gICkge1xuICAgIGlmICh0aGlzLm9uRG93bmxvYWRGaWxlLmlzRW1wdHkpIHtcbiAgICAgICEhY2FsbGJhY2sgJiYgY2FsbGJhY2soXCJzdWNjZXNzXCIsIGZpbGVWYWx1ZS5jb250ZW50IHx8IGZpbGVWYWx1ZSk7XG4gICAgfVxuICAgIHRoaXMub25Eb3dubG9hZEZpbGUuZmlyZSh0aGlzLCB7XG4gICAgICBuYW1lOiBxdWVzdGlvbk5hbWUsXG4gICAgICBjb250ZW50OiBmaWxlVmFsdWUuY29udGVudCB8fCBmaWxlVmFsdWUsXG4gICAgICBmaWxlVmFsdWU6IGZpbGVWYWx1ZSxcbiAgICAgIGNhbGxiYWNrOiBjYWxsYmFjayxcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQ2xlYXJzIGZpbGVzIGZyb20gc2VydmVyLlxuICAgKiBAcGFyYW0gcXVlc3Rpb24gcXVlc3Rpb25cbiAgICogQHBhcmFtIG5hbWUgcXVlc3Rpb24gbmFtZVxuICAgKiBAcGFyYW0gdmFsdWUgZmlsZSBxdWVzdGlvbiB2YWx1ZVxuICAgKiBAcGFyYW0gY2FsbGJhY2sgY2FsbCBiYWNrIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3RhdHVzIG9mIHRoZSBjbGVhcmluZyBvcGVyYXRpb25cbiAgICovXG4gIHB1YmxpYyBjbGVhckZpbGVzKFxuICAgIHF1ZXN0aW9uOiBJUXVlc3Rpb24sXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHZhbHVlOiBhbnksXG4gICAgZmlsZU5hbWU6IHN0cmluZyxcbiAgICBjYWxsYmFjazogKHN0YXR1czogc3RyaW5nLCBkYXRhOiBhbnkpID0+IGFueVxuICApIHtcbiAgICBpZiAodGhpcy5vbkNsZWFyRmlsZXMuaXNFbXB0eSkge1xuICAgICAgISFjYWxsYmFjayAmJiBjYWxsYmFjayhcInN1Y2Nlc3NcIiwgdmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLm9uQ2xlYXJGaWxlcy5maXJlKHRoaXMsIHtcbiAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBmaWxlTmFtZTogZmlsZU5hbWUsXG4gICAgICBjYWxsYmFjazogY2FsbGJhY2ssXG4gICAgfSk7XG4gIH1cbiAgdXBkYXRlQ2hvaWNlc0Zyb21TZXJ2ZXIoXG4gICAgcXVlc3Rpb246IElRdWVzdGlvbixcbiAgICBjaG9pY2VzOiBBcnJheTxJdGVtVmFsdWU+LFxuICAgIHNlcnZlclJlc3VsdDogYW55XG4gICk6IEFycmF5PEl0ZW1WYWx1ZT4ge1xuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgY2hvaWNlczogY2hvaWNlcyxcbiAgICAgIHNlcnZlclJlc3VsdDogc2VydmVyUmVzdWx0LFxuICAgIH07XG4gICAgdGhpcy5vbkxvYWRDaG9pY2VzRnJvbVNlcnZlci5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIHJldHVybiBvcHRpb25zLmNob2ljZXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlU3VydmV5U2VydmljZSgpOiBkeFN1cnZleVNlcnZpY2Uge1xuICAgIHJldHVybiBuZXcgZHhTdXJ2ZXlTZXJ2aWNlKCk7XG4gIH1cbiAgcHJvdGVjdGVkIHVwbG9hZEZpbGVzQ29yZShcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgZmlsZXM6IEZpbGVbXSxcbiAgICB1cGxvYWRpbmdDYWxsYmFjazogKHN0YXR1czogc3RyaW5nLCBkYXRhOiBhbnkpID0+IGFueVxuICApIHtcbiAgICB2YXIgcmVzcG9uc2VzOiBBcnJheTxhbnk+ID0gW107XG4gICAgZmlsZXMuZm9yRWFjaCgoZmlsZSkgPT4ge1xuICAgICAgaWYgKHVwbG9hZGluZ0NhbGxiYWNrKSB1cGxvYWRpbmdDYWxsYmFjayhcInVwbG9hZGluZ1wiLCBmaWxlKTtcbiAgICAgIHRoaXMuY3JlYXRlU3VydmV5U2VydmljZSgpLnNlbmRGaWxlKFxuICAgICAgICB0aGlzLnN1cnZleVBvc3RJZCxcbiAgICAgICAgZmlsZSxcbiAgICAgICAgKHN1Y2Nlc3M6IGJvb2xlYW4sIHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgICAgcmVzcG9uc2VzLnB1c2goeyBjb250ZW50OiByZXNwb25zZSwgZmlsZTogZmlsZSB9KTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZXMubGVuZ3RoID09PSBmaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgaWYgKHVwbG9hZGluZ0NhbGxiYWNrKSB1cGxvYWRpbmdDYWxsYmFjayhcInN1Y2Nlc3NcIiwgcmVzcG9uc2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHVwbG9hZGluZ0NhbGxiYWNrKVxuICAgICAgICAgICAgICB1cGxvYWRpbmdDYWxsYmFjayhcImVycm9yXCIsIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZTogcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgZmlsZTogZmlsZSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pO1xuICB9XG4gIGdldFBhZ2UoaW5kZXg6IG51bWJlcik6IFBhZ2VNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucGFnZXNbaW5kZXhdO1xuICB9XG4gIC8qKlxuICAgKiBBZGRzIGFuIGV4aXN0aW5nIHBhZ2UgdG8gdGhlIHN1cnZleS5cbiAgICogQHBhcmFtIHBhZ2UgYSBuZXdseSBhZGRlZCBwYWdlXG4gICAqIEBwYXJhbSBpbmRleCAtIGEgcGFnZSBpbmRleCB0byB3aGVyZSBpbnNlcnQgYSBwYWdlLiBJdCBpcyAtMSBieSBkZWZhdWx0IGFuZCB0aGUgcGFnZSB3aWxsIGJlIGFkZGVkIGludG8gdGhlIGVuZC5cbiAgICogQHNlZSBhZGROZXdQYWdlXG4gICAqL1xuICBwdWJsaWMgYWRkUGFnZShwYWdlOiBQYWdlTW9kZWwsIGluZGV4OiBudW1iZXIgPSAtMSkge1xuICAgIGlmIChwYWdlID09IG51bGwpIHJldHVybjtcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMucGFnZXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnBhZ2VzLnB1c2gocGFnZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFnZXMuc3BsaWNlKGluZGV4LCAwLCBwYWdlKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgcGFnZSBhbmQgYWRkcyBpdCB0byBhIHN1cnZleS4gR2VuZXJhdGVzIGEgbmV3IG5hbWUgaWYgdGhlIGBuYW1lYCBwYXJhbWV0ZXIgaXMgbm90IHNwZWNpZmllZC5cbiAgICogQHBhcmFtIG5hbWUgYSBwYWdlIG5hbWVcbiAgICogQHBhcmFtIGluZGV4IC0gYSBwYWdlIGluZGV4IHRvIHdoZXJlIGluc2VydCBhIG5ldyBwYWdlLiBJdCBpcyAtMSBieSBkZWZhdWx0IGFuZCB0aGUgcGFnZSB3aWxsIGJlIGFkZGVkIGludG8gdGhlIGVuZC5cbiAgICogQHNlZSBhZGRQYWdlXG4gICAqL1xuICBwdWJsaWMgYWRkTmV3UGFnZShuYW1lOiBzdHJpbmcgPSBudWxsLCBpbmRleDogbnVtYmVyID0gLTEpIHtcbiAgICB2YXIgcGFnZSA9IHRoaXMuY3JlYXRlTmV3UGFnZShuYW1lKTtcbiAgICB0aGlzLmFkZFBhZ2UocGFnZSwgaW5kZXgpO1xuICAgIHJldHVybiBwYWdlO1xuICB9XG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgcGFnZSBmcm9tIGEgc3VydmV5LlxuICAgKiBAcGFyYW0gcGFnZVxuICAgKi9cbiAgcHVibGljIHJlbW92ZVBhZ2UocGFnZTogUGFnZU1vZGVsKSB7XG4gICAgdmFyIGluZGV4ID0gdGhpcy5wYWdlcy5pbmRleE9mKHBhZ2UpO1xuICAgIGlmIChpbmRleCA8IDApIHJldHVybjtcbiAgICB0aGlzLnBhZ2VzLnNwbGljZShpbmRleCwgMSk7XG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2VWYWx1ZSA9PSBwYWdlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlcy5sZW5ndGggPiAwID8gdGhpcy5wYWdlc1swXSA6IG51bGw7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcXVlc3Rpb24gYnkgaXRzIG5hbWUuXG4gICAqIEBwYXJhbSBuYW1lIGEgcXVlc3Rpb24gbmFtZVxuICAgKiBAcGFyYW0gY2FzZUluc2Vuc2l0aXZlXG4gICAqIEBzZWUgZ2V0UXVlc3Rpb25CeVZhbHVlTmFtZVxuICAgKi9cbiAgcHVibGljIGdldFF1ZXN0aW9uQnlOYW1lKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBjYXNlSW5zZW5zaXRpdmU6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBRdWVzdGlvbiB7XG4gICAgaWYgKCFuYW1lKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoY2FzZUluc2Vuc2l0aXZlKSB7XG4gICAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICB2YXIgaGFzaDogSGFzaFRhYmxlPGFueT4gPSAhIWNhc2VJbnNlbnNpdGl2ZVxuICAgICAgPyB0aGlzLnF1ZXN0aW9uSGFzaGVzLm5hbWVzSW5zZW5zaXRpdmVcbiAgICAgIDogdGhpcy5xdWVzdGlvbkhhc2hlcy5uYW1lcztcbiAgICB2YXIgcmVzID0gaGFzaFtuYW1lXTtcbiAgICBpZiAoIXJlcykgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHJlc1swXTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHF1ZXN0aW9uIGJ5IGl0cyB2YWx1ZSBuYW1lXG4gICAqIEBwYXJhbSB2YWx1ZU5hbWUgYSBxdWVzdGlvbiBuYW1lXG4gICAqIEBwYXJhbSBjYXNlSW5zZW5zaXRpdmVcbiAgICogQHNlZSBnZXRRdWVzdGlvbkJ5TmFtZVxuICAgKiBAc2VlIGdldFF1ZXN0aW9uc0J5VmFsdWVOYW1lXG4gICAqIEBzZWUgUXVlc3Rpb24udmFsdWVOYW1lXG4gICAqL1xuICBwdWJsaWMgZ2V0UXVlc3Rpb25CeVZhbHVlTmFtZShcbiAgICB2YWx1ZU5hbWU6IHN0cmluZyxcbiAgICBjYXNlSW5zZW5zaXRpdmU6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBJUXVlc3Rpb24ge1xuICAgIHZhciByZXMgPSB0aGlzLmdldFF1ZXN0aW9uc0J5VmFsdWVOYW1lKHZhbHVlTmFtZSwgY2FzZUluc2Vuc2l0aXZlKTtcbiAgICByZXR1cm4gISFyZXMgPyByZXNbMF0gOiBudWxsO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCBxdWVzdGlvbnMgYnkgdGhlaXIgdmFsdWVOYW1lLiBuYW1lIHByb3BlcnR5IGlzIHVzZWQgaWYgdmFsdWVOYW1lIHByb3BlcnR5IGlzIGVtcHR5LlxuICAgKiBAcGFyYW0gdmFsdWVOYW1lIGEgcXVlc3Rpb24gbmFtZVxuICAgKiBAcGFyYW0gY2FzZUluc2Vuc2l0aXZlXG4gICAqIEBzZWUgZ2V0UXVlc3Rpb25CeU5hbWVcbiAgICogQHNlZSBnZXRRdWVzdGlvbkJ5VmFsdWVOYW1lXG4gICAqIEBzZWUgUXVlc3Rpb24udmFsdWVOYW1lXG4gICAqL1xuICBwdWJsaWMgZ2V0UXVlc3Rpb25zQnlWYWx1ZU5hbWUoXG4gICAgdmFsdWVOYW1lOiBzdHJpbmcsXG4gICAgY2FzZUluc2Vuc2l0aXZlOiBib29sZWFuID0gZmFsc2VcbiAgKTogQXJyYXk8UXVlc3Rpb24+IHtcbiAgICB2YXIgaGFzaDogSGFzaFRhYmxlPGFueT4gPSAhIWNhc2VJbnNlbnNpdGl2ZVxuICAgICAgPyB0aGlzLnF1ZXN0aW9uSGFzaGVzLnZhbHVlTmFtZXNJbnNlbnNpdGl2ZVxuICAgICAgOiB0aGlzLnF1ZXN0aW9uSGFzaGVzLnZhbHVlTmFtZXM7XG4gICAgdmFyIHJlcyA9IGhhc2hbdmFsdWVOYW1lXTtcbiAgICBpZiAoIXJlcykgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgZ2V0Q2FsY3VsYXRlZFZhbHVlQnlOYW1lKG5hbWU6IHN0cmluZyk6IENhbGN1bGF0ZWRWYWx1ZSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNhbGN1bGF0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChuYW1lID09IHRoaXMuY2FsY3VsYXRlZFZhbHVlc1tpXS5uYW1lKVxuICAgICAgICByZXR1cm4gdGhpcy5jYWxjdWxhdGVkVmFsdWVzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvKipcbiAgICogR2V0cyBhIGxpc3Qgb2YgcXVlc3Rpb25zIGJ5IHRoZWlyIG5hbWVzLlxuICAgKiBAcGFyYW0gbmFtZXMgYW4gYXJyYXkgb2YgcXVlc3Rpb24gbmFtZXNcbiAgICogQHBhcmFtIGNhc2VJbnNlbnNpdGl2ZVxuICAgKi9cbiAgcHVibGljIGdldFF1ZXN0aW9uc0J5TmFtZXMoXG4gICAgbmFtZXM6IHN0cmluZ1tdLFxuICAgIGNhc2VJbnNlbnNpdGl2ZTogYm9vbGVhbiA9IGZhbHNlXG4gICk6IElRdWVzdGlvbltdIHtcbiAgICB2YXIgcmVzdWx0OiBJUXVlc3Rpb25bXSA9IFtdO1xuICAgIGlmICghbmFtZXMpIHJldHVybiByZXN1bHQ7XG4gICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIW5hbWVzW2ldKSBjb250aW51ZTtcbiAgICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuZ2V0UXVlc3Rpb25CeU5hbWUobmFtZXNbaV0sIGNhc2VJbnNlbnNpdGl2ZSk7XG4gICAgICBpZiAocXVlc3Rpb24pIHJlc3VsdC5wdXNoKHF1ZXN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHBhZ2Ugb24gd2hpY2ggYW4gZWxlbWVudCAocXVlc3Rpb24gb3IgcGFuZWwpIGlzIHBsYWNlZC5cbiAgICogQHBhcmFtIGVsZW1lbnQgUXVlc3Rpb24gb3IgUGFuZWxcbiAgICovXG4gIHB1YmxpYyBnZXRQYWdlQnlFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50KTogUGFnZU1vZGVsIHtcbiAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHBhZ2UgPSB0aGlzLnBhZ2VzW2ldO1xuICAgICAgaWYgKHBhZ2UuY29udGFpbnNFbGVtZW50KGVsZW1lbnQpKSByZXR1cm4gcGFnZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSBwYWdlIG9uIHdoaWNoIGEgcXVlc3Rpb24gaXMgbG9jYXRlZC5cbiAgICogQHBhcmFtIHF1ZXN0aW9uXG4gICAqL1xuICBwdWJsaWMgZ2V0UGFnZUJ5UXVlc3Rpb24ocXVlc3Rpb246IElRdWVzdGlvbik6IFBhZ2VNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UGFnZUJ5RWxlbWVudChxdWVzdGlvbik7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSBwYWdlIGJ5IGl0J3MgbmFtZS5cbiAgICogQHBhcmFtIG5hbWVcbiAgICovXG4gIHB1YmxpYyBnZXRQYWdlQnlOYW1lKG5hbWU6IHN0cmluZyk6IFBhZ2VNb2RlbCB7XG4gICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLnBhZ2VzW2ldLm5hbWUgPT0gbmFtZSkgcmV0dXJuIHRoaXMucGFnZXNbaV07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBwYWdlcyBieSB0aGVpciBuYW1lcy5cbiAgICogQHBhcmFtIG5hbWVzIGEgbGlzdCBvZiBwYWdlIG5hbWVzXG4gICAqL1xuICBwdWJsaWMgZ2V0UGFnZXNCeU5hbWVzKG5hbWVzOiBzdHJpbmdbXSk6IFBhZ2VNb2RlbFtdIHtcbiAgICB2YXIgcmVzdWx0OiBQYWdlTW9kZWxbXSA9IFtdO1xuICAgIGlmICghbmFtZXMpIHJldHVybiByZXN1bHQ7XG4gICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIW5hbWVzW2ldKSBjb250aW51ZTtcbiAgICAgIHZhciBwYWdlID0gdGhpcy5nZXRQYWdlQnlOYW1lKG5hbWVzW2ldKTtcbiAgICAgIGlmIChwYWdlKSByZXN1bHQucHVzaChwYWdlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIGxpc3Qgb2YgYWxsIHF1ZXN0aW9ucyBpbiBhIHN1cnZleS5cbiAgICogQHBhcmFtIHZpc2libGVPbmx5IHNldCBpdCBgdHJ1ZWAsIGlmIHlvdSB3YW50IHRvIGdldCBvbmx5IHZpc2libGUgcXVlc3Rpb25zXG4gICAqL1xuICBwdWJsaWMgZ2V0QWxsUXVlc3Rpb25zKFxuICAgIHZpc2libGVPbmx5OiBib29sZWFuID0gZmFsc2UsXG4gICAgaW5jbHVkaW5nRGVzaWduVGltZTogYm9vbGVhbiA9IGZhbHNlXG4gICk6IEFycmF5PFF1ZXN0aW9uPiB7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheTxRdWVzdGlvbj4oKTtcbiAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5wYWdlc1tpXS5hZGRRdWVzdGlvbnNUb0xpc3QoXG4gICAgICAgIHJlc3VsdCxcbiAgICAgICAgdmlzaWJsZU9ubHksXG4gICAgICAgIGluY2x1ZGluZ0Rlc2lnblRpbWVcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgcXVpeiBxdWVzdGlvbnMuIEFsbCB2aXNpYmxlIHF1ZXN0aW9ucyB0aGF0IGhhcyBpbnB1dChzKSB3aWRnZXRzLlxuICAgKiBAc2VlIGdldFF1aXpRdWVzdGlvbkNvdW50XG4gICAqL1xuICBwdWJsaWMgZ2V0UXVpelF1ZXN0aW9ucygpOiBBcnJheTxJUXVlc3Rpb24+IHtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5PElRdWVzdGlvbj4oKTtcbiAgICB2YXIgc3RhcnRJbmRleCA9IHRoaXMuZmlyc3RQYWdlSXNTdGFydGVkID8gMSA6IDA7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5kZXg7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIXRoaXMucGFnZXNbaV0uaXNWaXNpYmxlKSBjb250aW51ZTtcbiAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLnBhZ2VzW2ldLnF1ZXN0aW9ucztcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcXVlc3Rpb25zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBxID0gcXVlc3Rpb25zW2pdO1xuICAgICAgICBpZiAocS5xdWl6UXVlc3Rpb25Db3VudCA+IDApIHtcbiAgICAgICAgICByZXN1bHQucHVzaChxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcGFuZWwgYnkgaXRzIG5hbWUuXG4gICAqIEBwYXJhbSBuYW1lIGEgcGFuZWwgbmFtZVxuICAgKiBAcGFyYW0gY2FzZUluc2Vuc2l0aXZlXG4gICAqIEBzZWUgZ2V0UXVlc3Rpb25CeU5hbWVcbiAgICovXG4gIHB1YmxpYyBnZXRQYW5lbEJ5TmFtZShcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgY2FzZUluc2Vuc2l0aXZlOiBib29sZWFuID0gZmFsc2VcbiAgKTogSVBhbmVsIHtcbiAgICB2YXIgcGFuZWxzID0gdGhpcy5nZXRBbGxQYW5lbHMoKTtcbiAgICBpZiAoY2FzZUluc2Vuc2l0aXZlKSBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGZvciAodmFyIGk6IG51bWJlciA9IDA7IGkgPCBwYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwYW5lbE5hbWUgPSBwYW5lbHNbaV0ubmFtZTtcbiAgICAgIGlmIChjYXNlSW5zZW5zaXRpdmUpIHBhbmVsTmFtZSA9IHBhbmVsTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKHBhbmVsTmFtZSA9PSBuYW1lKSByZXR1cm4gcGFuZWxzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIGxpc3Qgb2YgYWxsIHN1cnZleSdzIHBhbmVscy5cbiAgICovXG4gIHB1YmxpYyBnZXRBbGxQYW5lbHMoXG4gICAgdmlzaWJsZU9ubHk6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBpbmNsdWRpbmdEZXNpZ25UaW1lOiBib29sZWFuID0gZmFsc2VcbiAgKTogQXJyYXk8SVBhbmVsPiB7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheTxJUGFuZWw+KCk7XG4gICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMucGFnZXNbaV0uYWRkUGFuZWxzSW50b0xpc3QocmVzdWx0LCB2aXNpYmxlT25seSwgaW5jbHVkaW5nRGVzaWduVGltZSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW5kIHJldHVybnMgYSBuZXcgcGFnZSwgYnV0IGRvIG5vdCBhZGQgaXQgaW50byB0aGUgc3VydmV5LlxuICAgKiBZb3UgY2FuIHVzZSBhZGRQYWdlKHBhZ2UpIGZ1bmN0aW9uIHRvIGFkZCBpdCBpbnRvIHN1cnZleSBsYXRlci5cbiAgICogQHNlZSBhZGRQYWdlXG4gICAqIEBzZWUgYWRkTmV3UGFnZVxuICAgKi9cbiAgcHVibGljIGNyZWF0ZU5ld1BhZ2UobmFtZTogc3RyaW5nKTogUGFnZU1vZGVsIHtcbiAgICByZXR1cm4gbmV3IFBhZ2VNb2RlbChuYW1lKTtcbiAgfVxuICBwcm90ZWN0ZWQgcXVlc3Rpb25PblZhbHVlQ2hhbmdpbmcodmFsdWVOYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGlmICh0aGlzLm9uVmFsdWVDaGFuZ2luZy5pc0VtcHR5KSByZXR1cm4gbmV3VmFsdWU7XG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICBuYW1lOiB2YWx1ZU5hbWUsXG4gICAgICBxdWVzdGlvbjogdGhpcy5nZXRRdWVzdGlvbkJ5VmFsdWVOYW1lKHZhbHVlTmFtZSksXG4gICAgICB2YWx1ZTogdGhpcy5nZXRVbmJpbmRWYWx1ZShuZXdWYWx1ZSksXG4gICAgICBvbGRWYWx1ZTogdGhpcy5nZXRWYWx1ZSh2YWx1ZU5hbWUpLFxuICAgIH07XG4gICAgdGhpcy5vblZhbHVlQ2hhbmdpbmcuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICByZXR1cm4gb3B0aW9ucy52YWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgdXBkYXRlUXVlc3Rpb25WYWx1ZSh2YWx1ZU5hbWU6IHN0cmluZywgbmV3VmFsdWU6IGFueSkge1xuICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSByZXR1cm47XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0UXVlc3Rpb25zQnlWYWx1ZU5hbWUodmFsdWVOYW1lKTtcbiAgICBpZiAoISFxdWVzdGlvbnMpIHtcbiAgICAgIGZvciAodmFyIGk6IG51bWJlciA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHFWYWx1ZSA9IHF1ZXN0aW9uc1tpXS52YWx1ZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChxVmFsdWUgPT09IG5ld1ZhbHVlICYmIEFycmF5LmlzQXJyYXkocVZhbHVlKSAmJiAhIXRoaXMuZWRpdGluZ09iaikgfHxcbiAgICAgICAgICAhdGhpcy5pc1R3b1ZhbHVlRXF1YWxzKHFWYWx1ZSwgbmV3VmFsdWUpXG4gICAgICAgICkge1xuICAgICAgICAgIHF1ZXN0aW9uc1tpXS51cGRhdGVWYWx1ZUZyb21TdXJ2ZXkobmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgY2hlY2tRdWVzdGlvbkVycm9yT25WYWx1ZUNoYW5nZWQocXVlc3Rpb246IFF1ZXN0aW9uKSB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuaXNOYXZpZ2F0aW9uQnV0dG9uUHJlc3NlZCAmJlxuICAgICAgKHRoaXMuY2hlY2tFcnJvcnNNb2RlID09PSBcIm9uVmFsdWVDaGFuZ2VkXCIgfHxcbiAgICAgICAgcXVlc3Rpb24uZ2V0QWxsRXJyb3JzKCkubGVuZ3RoID4gMClcbiAgICApIHtcbiAgICAgIHRoaXMuY2hlY2tRdWVzdGlvbkVycm9yT25WYWx1ZUNoYW5nZWRDb3JlKHF1ZXN0aW9uKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBjaGVja1F1ZXN0aW9uRXJyb3JPblZhbHVlQ2hhbmdlZENvcmUocXVlc3Rpb246IFF1ZXN0aW9uKTogYm9vbGVhbiB7XG4gICAgdmFyIG9sZEVycm9yQ291bnQgPSBxdWVzdGlvbi5nZXRBbGxFcnJvcnMoKS5sZW5ndGg7XG4gICAgdmFyIHJlcyA9IHF1ZXN0aW9uLmhhc0Vycm9ycyh0cnVlLCB7XG4gICAgICBpc09uVmFsdWVDaGFuZ2VkOiAhdGhpcy5pc1ZhbGlkYXRlT25WYWx1ZUNoYW5naW5nLFxuICAgIH0pO1xuICAgIGlmIChcbiAgICAgICEhcXVlc3Rpb24ucGFnZSAmJlxuICAgICAgKG9sZEVycm9yQ291bnQgPiAwIHx8IHF1ZXN0aW9uLmdldEFsbEVycm9ycygpLmxlbmd0aCA+IDApXG4gICAgKSB7XG4gICAgICB0aGlzLmZpcmVWYWxpZGF0ZWRFcnJvcnNPblBhZ2UoPFBhZ2VNb2RlbD5xdWVzdGlvbi5wYWdlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIGNoZWNrRXJyb3JzT25WYWx1ZUNoYW5naW5nKFxuICAgIHZhbHVlTmFtZTogc3RyaW5nLFxuICAgIG5ld1ZhbHVlOiBhbnlcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHJldHVybiBmYWxzZTtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRRdWVzdGlvbnNCeVZhbHVlTmFtZSh2YWx1ZU5hbWUpO1xuICAgIGlmICghcXVlc3Rpb25zKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHJlcyA9IGZhbHNlO1xuICAgIGZvciAodmFyIGk6IG51bWJlciA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxID0gcXVlc3Rpb25zW2ldO1xuICAgICAgaWYgKCF0aGlzLmlzVHdvVmFsdWVFcXVhbHMocS52YWx1ZUZvclN1cnZleSwgbmV3VmFsdWUpKSB7XG4gICAgICAgIHEudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNoZWNrUXVlc3Rpb25FcnJvck9uVmFsdWVDaGFuZ2VkQ29yZShxKSkgcmVzID0gdHJ1ZTtcbiAgICAgIHJlcyA9IHJlcyB8fCBxLmVycm9ycy5sZW5ndGggPiAwO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByb3RlY3RlZCBub3RpZnlRdWVzdGlvbk9uVmFsdWVDaGFuZ2VkKHZhbHVlTmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogYW55KSB7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHJldHVybjtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRRdWVzdGlvbnNCeVZhbHVlTmFtZSh2YWx1ZU5hbWUpO1xuICAgIGlmICghIXF1ZXN0aW9ucykge1xuICAgICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcXVlc3Rpb24gPSBxdWVzdGlvbnNbaV07XG4gICAgICAgIHRoaXMuY2hlY2tRdWVzdGlvbkVycm9yT25WYWx1ZUNoYW5nZWQocXVlc3Rpb24pO1xuICAgICAgICBxdWVzdGlvbi5vblN1cnZleVZhbHVlQ2hhbmdlZChuZXdWYWx1ZSk7XG4gICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZWQuZmlyZSh0aGlzLCB7XG4gICAgICAgICAgbmFtZTogdmFsdWVOYW1lLFxuICAgICAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgICAgICB2YWx1ZTogbmV3VmFsdWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VkLmZpcmUodGhpcywge1xuICAgICAgICBuYW1lOiB2YWx1ZU5hbWUsXG4gICAgICAgIHF1ZXN0aW9uOiBudWxsLFxuICAgICAgICB2YWx1ZTogbmV3VmFsdWUsXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNEaXNwb3NlZCkgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5wYWdlc1tpXS5jaGVja0JpbmRpbmdzKHZhbHVlTmFtZSwgbmV3VmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLm5vdGlmeUVsZW1lbnRzT25BbnlWYWx1ZU9yVmFyaWFibGVDaGFuZ2VkKHZhbHVlTmFtZSk7XG4gIH1cbiAgcHJpdmF0ZSBub3RpZnlFbGVtZW50c09uQW55VmFsdWVPclZhcmlhYmxlQ2hhbmdlZChuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5pc0VuZExvYWRpbmdGcm9tSnNvbiA9PT0gXCJwcm9jZXNzaW5nXCIpIHJldHVybjtcbiAgICBpZiAodGhpcy5pc1J1bm5pbmdDb25kaXRpb25zKSB7XG4gICAgICB0aGlzLmNvbmRpdGlvbk5vdGlmeUVsZW1lbnRzT25BbnlWYWx1ZU9yVmFyaWFibGVDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnBhZ2VzW2ldLm9uQW55VmFsdWVDaGFuZ2VkKG5hbWUpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaXNFbmRMb2FkaW5nRnJvbUpzb24pIHtcbiAgICAgIHRoaXMubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVBbGxRdWVzdGlvbnNWYWx1ZSgpIHtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRBbGxRdWVzdGlvbnMoKTtcbiAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcSA9IDxRdWVzdGlvbj5xdWVzdGlvbnNbaV07XG4gICAgICB2YXIgdmFsTmFtZSA9IHEuZ2V0VmFsdWVOYW1lKCk7XG4gICAgICBxLnVwZGF0ZVZhbHVlRnJvbVN1cnZleSh0aGlzLmdldFZhbHVlKHZhbE5hbWUpKTtcbiAgICAgIGlmIChxLnJlcXVpcmVVcGRhdGVDb21tZW50VmFsdWUpIHtcbiAgICAgICAgcS51cGRhdGVDb21tZW50RnJvbVN1cnZleSh0aGlzLmdldENvbW1lbnQodmFsTmFtZSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIG5vdGlmeUFsbFF1ZXN0aW9uc09uVmFsdWVDaGFuZ2VkKCkge1xuICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmdldEFsbFF1ZXN0aW9ucygpO1xuICAgIGZvciAodmFyIGk6IG51bWJlciA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHF1ZXN0aW9uc1tpXS5vblN1cnZleVZhbHVlQ2hhbmdlZChcbiAgICAgICAgdGhpcy5nZXRWYWx1ZShxdWVzdGlvbnNbaV0uZ2V0VmFsdWVOYW1lKCkpXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGNoZWNrT25QYWdlVHJpZ2dlcnMoKSB7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0Q3VycmVudFBhZ2VRdWVzdGlvbnModHJ1ZSk7XG4gICAgdmFyIHZhbHVlczogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxdWVzdGlvbiA9IHF1ZXN0aW9uc1tpXTtcbiAgICAgIHZhciBuYW1lID0gcXVlc3Rpb24uZ2V0VmFsdWVOYW1lKCk7XG4gICAgICB2YWx1ZXNbbmFtZV0gPSB0aGlzLmdldFZhbHVlKG5hbWUpO1xuICAgIH1cbiAgICB0aGlzLmFkZENhbGN1bGF0ZWRWYWx1ZXNJbnRvRmlsdGVyZWRWYWx1ZXModmFsdWVzKTtcbiAgICB0aGlzLmNoZWNrVHJpZ2dlcnModmFsdWVzLCB0cnVlKTtcbiAgfVxuICBwcml2YXRlIGdldEN1cnJlbnRQYWdlUXVlc3Rpb25zKFxuICAgIGluY2x1ZGVJbnZzaWJsZTogYm9vbGVhbiA9IGZhbHNlXG4gICk6IEFycmF5PFF1ZXN0aW9uPiB7XG4gICAgdmFyIHJlc3VsdDogQXJyYXk8UXVlc3Rpb24+ID0gW107XG4gICAgdmFyIHBhZ2UgPSB0aGlzLmN1cnJlbnRQYWdlO1xuICAgIGlmICghcGFnZSkgcmV0dXJuIHJlc3VsdDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhZ2UucXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcXVlc3Rpb24gPSBwYWdlLnF1ZXN0aW9uc1tpXTtcbiAgICAgIGlmICgoIWluY2x1ZGVJbnZzaWJsZSAmJiAhcXVlc3Rpb24udmlzaWJsZSkgfHwgIXF1ZXN0aW9uLm5hbWUpIGNvbnRpbnVlO1xuICAgICAgcmVzdWx0LnB1c2gocXVlc3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHByaXZhdGUgaXNUcmlnZ2VySXNSdW5uaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgdHJpZ2dlclZhbHVlczogYW55ID0gbnVsbDtcbiAgcHJpdmF0ZSB0cmlnZ2VyS2V5czogYW55ID0gbnVsbDtcbiAgcHJpdmF0ZSBjaGVja1RyaWdnZXJzKGtleTogYW55LCBpc09uTmV4dFBhZ2U6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5pc0NvbXBsZXRlZCB8fCB0aGlzLnRyaWdnZXJzLmxlbmd0aCA9PSAwKSByZXR1cm47XG4gICAgaWYgKHRoaXMuaXNUcmlnZ2VySXNSdW5uaW5nKSB7XG4gICAgICB0aGlzLnRyaWdnZXJWYWx1ZXMgPSB0aGlzLmdldEZpbHRlcmVkVmFsdWVzKCk7XG4gICAgICBmb3IgKHZhciBrIGluIGtleSkge1xuICAgICAgICB0aGlzLnRyaWdnZXJLZXlzW2tdID0ga2V5W2tdO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmlzVHJpZ2dlcklzUnVubmluZyA9IHRydWU7XG4gICAgdGhpcy50cmlnZ2VyS2V5cyA9IGtleTtcbiAgICB0aGlzLnRyaWdnZXJWYWx1ZXMgPSB0aGlzLmdldEZpbHRlcmVkVmFsdWVzKCk7XG4gICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLmdldEZpbHRlcmVkUHJvcGVydGllcygpO1xuICAgIGZvciAodmFyIGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLnRyaWdnZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdHJpZ2dlciA9IHRoaXMudHJpZ2dlcnNbaV07XG4gICAgICBpZiAodHJpZ2dlci5pc09uTmV4dFBhZ2UgPT0gaXNPbk5leHRQYWdlKSB7XG4gICAgICAgIHRyaWdnZXIuY2hlY2tFeHByZXNzaW9uKFxuICAgICAgICAgIHRoaXMudHJpZ2dlcktleXMsXG4gICAgICAgICAgdGhpcy50cmlnZ2VyVmFsdWVzLFxuICAgICAgICAgIHByb3BlcnRpZXNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5pc1RyaWdnZXJJc1J1bm5pbmcgPSBmYWxzZTtcbiAgfVxuICBwcml2YXRlIGRvRWxlbWVudHNPbkxvYWQoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnBhZ2VzW2ldLm9uU3VydmV5TG9hZCgpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGNvbmRpdGlvblZhbHVlczogYW55ID0gbnVsbDtcbiAgcHJpdmF0ZSBnZXQgaXNSdW5uaW5nQ29uZGl0aW9ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmNvbmRpdGlvblZhbHVlcztcbiAgfVxuICBwcml2YXRlIGlzVmFsdWVDaGFuZ2VkT25SdW5uaW5nQ29uZGl0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgY29uZGl0aW9uUnVubmVyQ291bnRlcjogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBjb25kaXRpb25VcGRhdGVWaXNpYmxlSW5kZXhlczogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGNvbmRpdGlvbk5vdGlmeUVsZW1lbnRzT25BbnlWYWx1ZU9yVmFyaWFibGVDaGFuZ2VkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgcnVuQ29uZGl0aW9ucygpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmlzQ29tcGxldGVkIHx8XG4gICAgICB0aGlzLmlzRW5kTG9hZGluZ0Zyb21Kc29uID09PSBcInByb2Nlc3NpbmdcIiB8fFxuICAgICAgdGhpcy5pc1J1bm5pbmdDb25kaXRpb25zXG4gICAgKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuY29uZGl0aW9uVmFsdWVzID0gdGhpcy5nZXRGaWx0ZXJlZFZhbHVlcygpO1xuICAgIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5nZXRGaWx0ZXJlZFByb3BlcnRpZXMoKTtcbiAgICB2YXIgb2xkQ3VycmVudFBhZ2VJbmRleCA9IHRoaXMucGFnZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRQYWdlVmFsdWUpO1xuICAgIHRoaXMucnVuQ29uZGl0aW9uc0NvcmUocHJvcGVydGllcyk7XG4gICAgdGhpcy5jaGVja0lmTmV3UGFnZXNCZWNvbWVWaXNpYmxlKG9sZEN1cnJlbnRQYWdlSW5kZXgpO1xuICAgIHRoaXMuY29uZGl0aW9uVmFsdWVzID0gbnVsbDtcbiAgICBpZiAoXG4gICAgICB0aGlzLmlzVmFsdWVDaGFuZ2VkT25SdW5uaW5nQ29uZGl0aW9uICYmXG4gICAgICB0aGlzLmNvbmRpdGlvblJ1bm5lckNvdW50ZXIgPFxuICAgICAgICBzZXR0aW5ncy5tYXhpbXVtQ29uZGl0aW9uUnVuQ291bnRPblZhbHVlQ2hhbmdlZFxuICAgICkge1xuICAgICAgdGhpcy5pc1ZhbHVlQ2hhbmdlZE9uUnVubmluZ0NvbmRpdGlvbiA9IGZhbHNlO1xuICAgICAgdGhpcy5jb25kaXRpb25SdW5uZXJDb3VudGVyKys7XG4gICAgICB0aGlzLnJ1bkNvbmRpdGlvbnMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc1ZhbHVlQ2hhbmdlZE9uUnVubmluZ0NvbmRpdGlvbiA9IGZhbHNlO1xuICAgICAgdGhpcy5jb25kaXRpb25SdW5uZXJDb3VudGVyID0gMDtcbiAgICAgIGlmICh0aGlzLmNvbmRpdGlvblVwZGF0ZVZpc2libGVJbmRleGVzKSB7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uVXBkYXRlVmlzaWJsZUluZGV4ZXMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY29uZGl0aW9uTm90aWZ5RWxlbWVudHNPbkFueVZhbHVlT3JWYXJpYWJsZUNoYW5nZWQpIHtcbiAgICAgICAgdGhpcy5jb25kaXRpb25Ob3RpZnlFbGVtZW50c09uQW55VmFsdWVPclZhcmlhYmxlQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLm5vdGlmeUVsZW1lbnRzT25BbnlWYWx1ZU9yVmFyaWFibGVDaGFuZ2VkKFwiXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIHJ1bkNvbmRpdGlvbk9uVmFsdWVDaGFuZ2VkKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIGlmICh0aGlzLmlzUnVubmluZ0NvbmRpdGlvbnMpIHtcbiAgICAgIHRoaXMuY29uZGl0aW9uVmFsdWVzW25hbWVdID0gdmFsdWU7XG4gICAgICB0aGlzLmlzVmFsdWVDaGFuZ2VkT25SdW5uaW5nQ29uZGl0aW9uID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ydW5Db25kaXRpb25zKCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgcnVuQ29uZGl0aW9uc0NvcmUocHJvcGVydGllczogYW55KSB7XG4gICAgdmFyIHBhZ2VzID0gdGhpcy5wYWdlcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2FsY3VsYXRlZFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5jYWxjdWxhdGVkVmFsdWVzW2ldLnJlc2V0Q2FsY3VsYXRpb24oKTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNhbGN1bGF0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuY2FsY3VsYXRlZFZhbHVlc1tpXS5kb0NhbGN1bGF0aW9uKFxuICAgICAgICB0aGlzLmNhbGN1bGF0ZWRWYWx1ZXMsXG4gICAgICAgIHRoaXMuY29uZGl0aW9uVmFsdWVzLFxuICAgICAgICBwcm9wZXJ0aWVzXG4gICAgICApO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBwYWdlc1tpXS5ydW5Db25kaXRpb24odGhpcy5jb25kaXRpb25WYWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGNoZWNrSWZOZXdQYWdlc0JlY29tZVZpc2libGUob2xkQ3VycmVudFBhZ2VJbmRleDogbnVtYmVyKSB7XG4gICAgdmFyIG5ld0N1cnJlbnRQYWdlSW5kZXggPSB0aGlzLnBhZ2VzLmluZGV4T2YodGhpcy5jdXJyZW50UGFnZVZhbHVlKTtcbiAgICBpZiAobmV3Q3VycmVudFBhZ2VJbmRleCA8PSBvbGRDdXJyZW50UGFnZUluZGV4ICsgMSkgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSBvbGRDdXJyZW50UGFnZUluZGV4ICsgMTsgaSA8IG5ld0N1cnJlbnRQYWdlSW5kZXg7IGkrKykge1xuICAgICAgaWYgKHRoaXMucGFnZXNbaV0uaXNWaXNpYmxlKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VzW2ldO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFNlbmRzIGEgc3VydmV5IHJlc3VsdCB0byB0aGUgW2FwaS5zdXJ2ZXlqcy5pb10oaHR0cHM6Ly9hcGkuc3VydmV5anMuaW8pIHNlcnZpY2UuXG4gICAqIEBwYXJhbSBwb3N0SWQgW2FwaS5zdXJ2ZXlqcy5pb10oaHR0cHM6Ly9hcGkuc3VydmV5anMuaW8pIHNlcnZpY2UgcG9zdElkXG4gICAqIEBwYXJhbSBjbGllbnRJZCBUeXBpY2FsbHkgYSBjdXN0b21lciBlLW1haWwgb3IgYW4gaWRlbnRpZmllclxuICAgKiBAcGFyYW0gaXNQYXJ0aWFsQ29tcGxldGVkIFNldCBpdCB0byBgdHJ1ZWAgaWYgdGhlIHN1cnZleSBpcyBub3QgY29tcGxldGVkIHlldCBhbmQgdGhlIHJlc3VsdHMgYXJlIGludGVybWVkaWF0ZVxuICAgKiBAc2VlIHN1cnZleVBvc3RJZFxuICAgKiBAc2VlIGNsaWVudElkXG4gICAqL1xuICBwdWJsaWMgc2VuZFJlc3VsdChcbiAgICBwb3N0SWQ6IHN0cmluZyA9IG51bGwsXG4gICAgY2xpZW50SWQ6IHN0cmluZyA9IG51bGwsXG4gICAgaXNQYXJ0aWFsQ29tcGxldGVkOiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgaWYgKCF0aGlzLmlzRWRpdE1vZGUpIHJldHVybjtcbiAgICBpZiAoaXNQYXJ0aWFsQ29tcGxldGVkICYmIHRoaXMub25QYXJ0aWFsU2VuZCkge1xuICAgICAgdGhpcy5vblBhcnRpYWxTZW5kLmZpcmUodGhpcywgbnVsbCk7XG4gICAgfVxuXG4gICAgaWYgKCFwb3N0SWQgJiYgdGhpcy5zdXJ2ZXlQb3N0SWQpIHtcbiAgICAgIHBvc3RJZCA9IHRoaXMuc3VydmV5UG9zdElkO1xuICAgIH1cbiAgICBpZiAoIXBvc3RJZCkgcmV0dXJuO1xuICAgIGlmIChjbGllbnRJZCkge1xuICAgICAgdGhpcy5jbGllbnRJZCA9IGNsaWVudElkO1xuICAgIH1cbiAgICBpZiAoaXNQYXJ0aWFsQ29tcGxldGVkICYmICF0aGlzLmNsaWVudElkKSByZXR1cm47XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIGlmICh0aGlzLnN1cnZleVNob3dEYXRhU2F2aW5nKSB7XG4gICAgICB0aGlzLnNldENvbXBsZXRlZFN0YXRlKFwic2F2aW5nXCIsIFwiXCIpO1xuICAgIH1cbiAgICB0aGlzLmNyZWF0ZVN1cnZleVNlcnZpY2UoKS5zZW5kUmVzdWx0KFxuICAgICAgcG9zdElkLFxuICAgICAgdGhpcy5kYXRhLFxuICAgICAgZnVuY3Rpb24oc3VjY2VzczogYm9vbGVhbiwgcmVzcG9uc2U6IGFueSwgcmVxdWVzdDogYW55KSB7XG4gICAgICAgIGlmIChzZWxmLnN1cnZleVNob3dEYXRhU2F2aW5nKSB7XG4gICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHNlbGYuc2V0Q29tcGxldGVkU3RhdGUoXCJzdWNjZXNzXCIsIFwiXCIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZWxmLnNldENvbXBsZXRlZFN0YXRlKFwiZXJyb3JcIiwgcmVzcG9uc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzZWxmLm9uU2VuZFJlc3VsdC5maXJlKHNlbGYsIHtcbiAgICAgICAgICBzdWNjZXNzOiBzdWNjZXNzLFxuICAgICAgICAgIHJlc3BvbnNlOiByZXNwb25zZSxcbiAgICAgICAgICByZXF1ZXN0OiByZXF1ZXN0LFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICB0aGlzLmNsaWVudElkLFxuICAgICAgaXNQYXJ0aWFsQ29tcGxldGVkXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICogQ2FsbHMgdGhlIFthcGkuc3VydmV5anMuaW9dKGh0dHBzOi8vYXBpLnN1cnZleWpzLmlvKSBzZXJ2aWNlIGFuZCwgb24gY2FsbGJhY2ssIGZpcmVzIHRoZSBgb25HZXRSZXN1bHRgIGV2ZW50IHdpdGggYWxsIGFuc3dlcnMgdGhhdCB5b3VyIHVzZXJzIG1hZGUgZm9yIGEgcXVlc3Rpb24uXG4gICAqIEBwYXJhbSByZXN1bHRJZCBbYXBpLnN1cnZleWpzLmlvXShodHRwczovL2FwaS5zdXJ2ZXlqcy5pbykgc2VydmljZSByZXN1bHRJZFxuICAgKiBAcGFyYW0gbmFtZSBUaGUgcXVlc3Rpb24gbmFtZVxuICAgKiBAc2VlIG9uR2V0UmVzdWx0XG4gICAqL1xuICBwdWJsaWMgZ2V0UmVzdWx0KHJlc3VsdElkOiBzdHJpbmcsIG5hbWU6IHN0cmluZykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLmNyZWF0ZVN1cnZleVNlcnZpY2UoKS5nZXRSZXN1bHQocmVzdWx0SWQsIG5hbWUsIGZ1bmN0aW9uKFxuICAgICAgc3VjY2VzczogYm9vbGVhbixcbiAgICAgIGRhdGE6IGFueSxcbiAgICAgIGRhdGFMaXN0OiBhbnlbXSxcbiAgICAgIHJlc3BvbnNlOiBhbnlcbiAgICApIHtcbiAgICAgIHNlbGYub25HZXRSZXN1bHQuZmlyZShzZWxmLCB7XG4gICAgICAgIHN1Y2Nlc3M6IHN1Y2Nlc3MsXG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIGRhdGFMaXN0OiBkYXRhTGlzdCxcbiAgICAgICAgcmVzcG9uc2U6IHJlc3BvbnNlLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIExvYWRzIHRoZSBzdXJ2ZXkgSlNPTiBmcm9tIHRoZSBbYXBpLnN1cnZleWpzLmlvXShodHRwczovL2FwaS5zdXJ2ZXlqcy5pbykgc2VydmljZS5cbiAgICogSWYgYGNsaWVudElkYCBpcyBub3QgYG51bGxgIGFuZCBhIHVzZXIgaGFkIGNvbXBsZXRlZCBhIHN1cnZleSBiZWZvcmUsIHRoZSBzdXJ2ZXkgc3dpdGNoZXMgdG8gYGNvbXBsZXRlZGJlZm9yZWAgc3RhdGUuXG4gICAqIEBwYXJhbSBzdXJ2ZXlJZCBbYXBpLnN1cnZleWpzLmlvXShodHRwczovL2FwaS5zdXJ2ZXlqcy5pbykgc2VydmljZSBzdXJ2ZXlJZFxuICAgKiBAcGFyYW0gY2xpZW50SWQgdXNlcnMnIGluZGVudGlmaWVyLCBmb3IgZXhhbXBsZSBhbiBlLW1haWwgb3IgYSB1bmlxdWUgY3VzdG9tZXIgaWQgaW4geW91ciB3ZWIgYXBwbGljYXRpb24uXG4gICAqIEBzZWUgc3RhdGVcbiAgICogQHNlZSBvbkxvYWRlZFN1cnZleUZyb21TZXJ2aWNlXG4gICAqL1xuICBwdWJsaWMgbG9hZFN1cnZleUZyb21TZXJ2aWNlKFxuICAgIHN1cnZleUlkOiBzdHJpbmcgPSBudWxsLFxuICAgIGNsaWVuZElkOiBzdHJpbmcgPSBudWxsXG4gICkge1xuICAgIGlmIChzdXJ2ZXlJZCkge1xuICAgICAgdGhpcy5zdXJ2ZXlJZCA9IHN1cnZleUlkO1xuICAgIH1cbiAgICBpZiAoY2xpZW5kSWQpIHtcbiAgICAgIHRoaXMuY2xpZW50SWQgPSBjbGllbmRJZDtcbiAgICB9XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLm9uTG9hZGluZ1N1cnZleUZyb21TZXJ2aWNlKCk7XG4gICAgaWYgKGNsaWVuZElkKSB7XG4gICAgICB0aGlzLmNyZWF0ZVN1cnZleVNlcnZpY2UoKS5nZXRTdXJ2ZXlKc29uQW5kSXNDb21wbGV0ZWQoXG4gICAgICAgIHRoaXMuc3VydmV5SWQsXG4gICAgICAgIHRoaXMuY2xpZW50SWQsXG4gICAgICAgIGZ1bmN0aW9uKFxuICAgICAgICAgIHN1Y2Nlc3M6IGJvb2xlYW4sXG4gICAgICAgICAganNvbjogc3RyaW5nLFxuICAgICAgICAgIGlzQ29tcGxldGVkOiBzdHJpbmcsXG4gICAgICAgICAgcmVzcG9uc2U6IGFueVxuICAgICAgICApIHtcbiAgICAgICAgICBzZWxmLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgICBzZWxmLmlzQ29tcGxldGVkQmVmb3JlID0gaXNDb21wbGV0ZWQgPT0gXCJjb21wbGV0ZWRcIjtcbiAgICAgICAgICAgIHNlbGYubG9hZFN1cnZleUZyb21TZXJ2aWNlSnNvbihqc29uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3JlYXRlU3VydmV5U2VydmljZSgpLmxvYWRTdXJ2ZXkodGhpcy5zdXJ2ZXlJZCwgZnVuY3Rpb24oXG4gICAgICAgIHN1Y2Nlc3M6IGJvb2xlYW4sXG4gICAgICAgIHJlc3VsdDogc3RyaW5nLFxuICAgICAgICByZXNwb25zZTogYW55XG4gICAgICApIHtcbiAgICAgICAgc2VsZi5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICBzZWxmLmxvYWRTdXJ2ZXlGcm9tU2VydmljZUpzb24ocmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgbG9hZFN1cnZleUZyb21TZXJ2aWNlSnNvbihqc29uOiBhbnkpIHtcbiAgICBpZiAoIWpzb24pIHJldHVybjtcbiAgICB0aGlzLmZyb21KU09OKGpzb24pO1xuICAgIHRoaXMubm90aWZ5QWxsUXVlc3Rpb25zT25WYWx1ZUNoYW5nZWQoKTtcbiAgICB0aGlzLm9uTG9hZFN1cnZleUZyb21TZXJ2aWNlKCk7XG4gICAgdGhpcy5vbkxvYWRlZFN1cnZleUZyb21TZXJ2aWNlLmZpcmUodGhpcywge30pO1xuICB9XG4gIHByb3RlY3RlZCBvbkxvYWRpbmdTdXJ2ZXlGcm9tU2VydmljZSgpIHt9XG4gIHByb3RlY3RlZCBvbkxvYWRTdXJ2ZXlGcm9tU2VydmljZSgpIHt9XG4gIHByaXZhdGUgcmVzZXRWaXNpYmxlSW5kZXhlcygpIHtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRBbGxRdWVzdGlvbnModHJ1ZSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHF1ZXN0aW9uc1tpXS5zZXRWaXNpYmxlSW5kZXgoLTEpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVWaXNpYmxlSW5kZXhlcygpIHtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbiB8fCAhIXRoaXMuaXNFbmRMb2FkaW5nRnJvbUpzb24pIHJldHVybjtcbiAgICBpZiAoXG4gICAgICB0aGlzLmlzUnVubmluZ0NvbmRpdGlvbnMgJiZcbiAgICAgIHRoaXMub25WaXNpYmxlQ2hhbmdlZC5pc0VtcHR5ICYmXG4gICAgICB0aGlzLm9uUGFnZVZpc2libGVDaGFuZ2VkLmlzRW1wdHlcbiAgICApIHtcbiAgICAgIC8vUnVuIHVwZGF0ZSB2aXNpYmxlIGluZGV4IG9ubHkgb25lIHRpbWUgb24gZmluaXNoaW5nIHJ1bm5pbmcgY29uZGl0aW9uc1xuICAgICAgdGhpcy5jb25kaXRpb25VcGRhdGVWaXNpYmxlSW5kZXhlcyA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudXBkYXRlUGFnZVZpc2libGVJbmRleGVzKHRoaXMuc2hvd1BhZ2VOdW1iZXJzKTtcbiAgICBpZiAodGhpcy5zaG93UXVlc3Rpb25OdW1iZXJzID09IFwib25QYWdlXCIpIHtcbiAgICAgIHZhciB2aXNQYWdlcyA9IHRoaXMudmlzaWJsZVBhZ2VzO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aXNQYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2aXNQYWdlc1tpXS5zZXRWaXNpYmxlSW5kZXgoMCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBpbmRleCA9IHRoaXMuc2hvd1F1ZXN0aW9uTnVtYmVycyA9PSBcIm9uXCIgPyAwIDogLTE7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaW5kZXggKz0gdGhpcy5wYWdlc1tpXS5zZXRWaXNpYmxlSW5kZXgoaW5kZXgpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVByb2dyZXNzVGV4dCh0cnVlKTtcbiAgfVxuICBwcml2YXRlIHVwZGF0ZVBhZ2VWaXNpYmxlSW5kZXhlcyhzaG93SW5kZXg6IGJvb2xlYW4pIHtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGlzUGFnZVZpc2libGUgPSB0aGlzLnBhZ2VzW2ldLmlzVmlzaWJsZTtcbiAgICAgIHRoaXMucGFnZXNbaV0udmlzaWJsZUluZGV4ID0gaXNQYWdlVmlzaWJsZSA/IGluZGV4KysgOiAtMTtcbiAgICAgIHRoaXMucGFnZXNbaV0ubnVtID1cbiAgICAgICAgc2hvd0luZGV4ICYmIGlzUGFnZVZpc2libGUgPyB0aGlzLnBhZ2VzW2ldLnZpc2libGVJbmRleCArIDEgOiAtMTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGZyb21KU09OKGpzb246IGFueSkge1xuICAgIGlmICghanNvbikgcmV0dXJuO1xuICAgIHRoaXMucXVlc3Rpb25IYXNoZXNDbGVhcigpO1xuICAgIHRoaXMuanNvbkVycm9ycyA9IG51bGw7XG4gICAgdmFyIGpzb25Db252ZXJ0ZXIgPSBuZXcgSnNvbk9iamVjdCgpO1xuICAgIGpzb25Db252ZXJ0ZXIudG9PYmplY3QoanNvbiwgdGhpcyk7XG4gICAgaWYgKGpzb25Db252ZXJ0ZXIuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuanNvbkVycm9ycyA9IGpzb25Db252ZXJ0ZXIuZXJyb3JzO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgc2V0SnNvbk9iamVjdChqc29uT2JqOiBhbnkpIHtcbiAgICB0aGlzLmZyb21KU09OKGpzb25PYmopO1xuICB9XG4gIHByaXZhdGUgaXNFbmRMb2FkaW5nRnJvbUpzb246IHN0cmluZyA9IG51bGw7XG4gIGVuZExvYWRpbmdGcm9tSnNvbigpIHtcbiAgICB0aGlzLmlzRW5kTG9hZGluZ0Zyb21Kc29uID0gXCJwcm9jZXNzaW5nXCI7XG4gICAgdGhpcy5pc1N0YXJ0ZWRTdGF0ZSA9IHRoaXMuZmlyc3RQYWdlSXNTdGFydGVkO1xuICAgIHRoaXMub25RdWVzdGlvbnNPblBhZ2VNb2RlQ2hhbmdlZChcInN0YW5kYXJkXCIpO1xuICAgIHN1cGVyLmVuZExvYWRpbmdGcm9tSnNvbigpO1xuICAgIGlmICh0aGlzLmhhc0Nvb2tpZSkge1xuICAgICAgdGhpcy5kb0NvbXBsZXRlKCk7XG4gICAgfVxuICAgIHRoaXMuZG9FbGVtZW50c09uTG9hZCgpO1xuICAgIHRoaXMuaXNFbmRMb2FkaW5nRnJvbUpzb24gPSBcImNvbmRpdGlvbnNcIjtcbiAgICB0aGlzLnJ1bkNvbmRpdGlvbnMoKTtcbiAgICB0aGlzLm5vdGlmeUVsZW1lbnRzT25BbnlWYWx1ZU9yVmFyaWFibGVDaGFuZ2VkKFwiXCIpO1xuICAgIHRoaXMuaXNFbmRMb2FkaW5nRnJvbUpzb24gPSBudWxsO1xuICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25CZWZvcmVDcmVhdGluZygpIHt9XG4gIHByb3RlY3RlZCBvbkNyZWF0aW5nKCkge31cbiAgcHJpdmF0ZSBnZXRQcm9jZXNzZWRUZXh0VmFsdWUodGV4dFZhbHVlOiBUZXh0UHJlUHJvY2Vzc29yVmFsdWUpOiB2b2lkIHtcbiAgICB0aGlzLmdldFByb2Nlc3NlZFRleHRWYWx1ZUNvcmUodGV4dFZhbHVlKTtcbiAgICBpZiAoIXRoaXMub25Qcm9jZXNzVGV4dFZhbHVlLmlzRW1wdHkpIHtcbiAgICAgIHZhciB3YXNFbXB0eSA9IHRoaXMuaXNWYWx1ZUVtcHR5KHRleHRWYWx1ZS52YWx1ZSk7XG4gICAgICB0aGlzLm9uUHJvY2Vzc1RleHRWYWx1ZS5maXJlKHRoaXMsIHRleHRWYWx1ZSk7XG4gICAgICB0ZXh0VmFsdWUuaXNFeGlzdHMgPVxuICAgICAgICB0ZXh0VmFsdWUuaXNFeGlzdHMgfHwgKHdhc0VtcHR5ICYmICF0aGlzLmlzVmFsdWVFbXB0eSh0ZXh0VmFsdWUudmFsdWUpKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBnZXRQcm9jZXNzZWRUZXh0VmFsdWVDb3JlKHRleHRWYWx1ZTogVGV4dFByZVByb2Nlc3NvclZhbHVlKTogdm9pZCB7XG4gICAgdmFyIG5hbWUgPSB0ZXh0VmFsdWUubmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgIGlmIChbXCJub1wiLCBcInJlcXVpcmVcIiwgXCJ0aXRsZVwiXS5pbmRleE9mKG5hbWUpICE9PSAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobmFtZSA9PT0gXCJwYWdlbm9cIikge1xuICAgICAgdGV4dFZhbHVlLmlzRXhpc3RzID0gdHJ1ZTtcbiAgICAgIHZhciBwYWdlID0gdGhpcy5jdXJyZW50UGFnZTtcbiAgICAgIHRleHRWYWx1ZS52YWx1ZSA9IHBhZ2UgIT0gbnVsbCA/IHRoaXMudmlzaWJsZVBhZ2VzLmluZGV4T2YocGFnZSkgKyAxIDogMDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG5hbWUgPT09IFwicGFnZWNvdW50XCIpIHtcbiAgICAgIHRleHRWYWx1ZS5pc0V4aXN0cyA9IHRydWU7XG4gICAgICB0ZXh0VmFsdWUudmFsdWUgPSB0aGlzLnZpc2libGVQYWdlQ291bnQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChuYW1lID09PSBcImxvY2FsZVwiKSB7XG4gICAgICB0ZXh0VmFsdWUuaXNFeGlzdHMgPSB0cnVlO1xuICAgICAgdGV4dFZhbHVlLnZhbHVlID0gISF0aGlzLmxvY2FsZVxuICAgICAgICA/IHRoaXMubG9jYWxlXG4gICAgICAgIDogc3VydmV5TG9jYWxpemF0aW9uLmRlZmF1bHRMb2NhbGU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChuYW1lID09PSBcImNvcnJlY3RlZGFuc3dlcnNcIiB8fCBuYW1lID09PSBcImNvcnJlY3RlZGFuc3dlcmNvdW50XCIpIHtcbiAgICAgIHRleHRWYWx1ZS5pc0V4aXN0cyA9IHRydWU7XG4gICAgICB0ZXh0VmFsdWUudmFsdWUgPSB0aGlzLmdldENvcnJlY3RlZEFuc3dlckNvdW50KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChuYW1lID09PSBcImluY29ycmVjdGVkYW5zd2Vyc1wiIHx8IG5hbWUgPT09IFwiaW5jb3JyZWN0ZWRhbnN3ZXJjb3VudFwiKSB7XG4gICAgICB0ZXh0VmFsdWUuaXNFeGlzdHMgPSB0cnVlO1xuICAgICAgdGV4dFZhbHVlLnZhbHVlID0gdGhpcy5nZXRJbkNvcnJlY3RlZEFuc3dlckNvdW50KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChuYW1lID09PSBcInF1ZXN0aW9uY291bnRcIikge1xuICAgICAgdGV4dFZhbHVlLmlzRXhpc3RzID0gdHJ1ZTtcbiAgICAgIHRleHRWYWx1ZS52YWx1ZSA9IHRoaXMuZ2V0UXVpelF1ZXN0aW9uQ291bnQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHZhcmlhYmxlID0gdGhpcy5nZXRWYXJpYWJsZShuYW1lKTtcbiAgICBpZiAodmFyaWFibGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGV4dFZhbHVlLmlzRXhpc3RzID0gdHJ1ZTtcbiAgICAgIHRleHRWYWx1ZS52YWx1ZSA9IHZhcmlhYmxlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLmdldEZpcnN0TmFtZShuYW1lKTtcbiAgICBpZiAocXVlc3Rpb24pIHtcbiAgICAgIHRleHRWYWx1ZS5pc0V4aXN0cyA9IHRydWU7XG4gICAgICB2YXIgZmlyc3ROYW1lID0gcXVlc3Rpb24uZ2V0VmFsdWVOYW1lKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIG5hbWUgPSBmaXJzdE5hbWUgKyBuYW1lLnN1YnN0cihmaXJzdE5hbWUubGVuZ3RoKTtcbiAgICAgIG5hbWUgPSBuYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICB2YXIgdmFsdWVzOiB7IFtpbmRleDogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICAgIHZhbHVlc1tmaXJzdE5hbWVdID0gdGV4dFZhbHVlLnJldHVybkRpc3BsYXlWYWx1ZVxuICAgICAgICA/IHF1ZXN0aW9uLmdldERpc3BsYXlWYWx1ZShmYWxzZSwgdW5kZWZpbmVkKVxuICAgICAgICA6IHF1ZXN0aW9uLnZhbHVlO1xuICAgICAgdGV4dFZhbHVlLnZhbHVlID0gbmV3IFByb2Nlc3NWYWx1ZSgpLmdldFZhbHVlKG5hbWUsIHZhbHVlcyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUodGV4dFZhbHVlLm5hbWUpO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0ZXh0VmFsdWUuaXNFeGlzdHMgPSB0cnVlO1xuICAgICAgdGV4dFZhbHVlLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0Rmlyc3ROYW1lKG5hbWU6IHN0cmluZyk6IElRdWVzdGlvbiB7XG4gICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgcXVlc3Rpb247XG4gICAgZG8ge1xuICAgICAgcXVlc3Rpb24gPSB0aGlzLmdldFF1ZXN0aW9uQnlWYWx1ZU5hbWUobmFtZSwgdHJ1ZSk7XG4gICAgICBuYW1lID0gdGhpcy5yZWR1Y2VGaXJzdE5hbWUobmFtZSk7XG4gICAgfSB3aGlsZSAoIXF1ZXN0aW9uICYmICEhbmFtZSk7XG4gICAgcmV0dXJuIHF1ZXN0aW9uO1xuICB9XG4gIHByaXZhdGUgcmVkdWNlRmlyc3ROYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdmFyIHBvczEgPSBuYW1lLmxhc3RJbmRleE9mKFwiLlwiKTtcbiAgICB2YXIgcG9zMiA9IG5hbWUubGFzdEluZGV4T2YoXCJbXCIpO1xuICAgIGlmIChwb3MxIDwgMCAmJiBwb3MyIDwgMCkgcmV0dXJuIFwiXCI7XG4gICAgdmFyIHBvcyA9IE1hdGgubWF4KHBvczEsIHBvczIpO1xuICAgIHJldHVybiBuYW1lLnN1YnN0cigwLCBwb3MpO1xuICB9XG4gIHByaXZhdGUgY2xlYXJVbnVzZWRWYWx1ZXMoKSB7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0QWxsUXVlc3Rpb25zKCk7XG4gICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgcXVlc3Rpb25zW2ldLmNsZWFyVW51c2VkVmFsdWVzKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNsZWFySW52aXNpYmxlVmFsdWVzICE9IFwibm9uZVwiKSB7XG4gICAgICB0aGlzLmNsZWFySW52aXNpYmxlUXVlc3Rpb25WYWx1ZXMoKTtcbiAgICB9XG4gIH1cbiAgaGFzVmlzaWJsZVF1ZXN0aW9uQnlWYWx1ZU5hbWUodmFsdWVOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRRdWVzdGlvbnNCeVZhbHVlTmFtZSh2YWx1ZU5hbWUpO1xuICAgIGlmICghcXVlc3Rpb25zKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHF1ZXN0aW9uc1tpXS5pc1Zpc2libGUpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcXVlc3Rpb25Db3VudEJ5VmFsdWVOYW1lKHZhbHVlTmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRRdWVzdGlvbnNCeVZhbHVlTmFtZSh2YWx1ZU5hbWUpO1xuICAgIHJldHVybiAhIXF1ZXN0aW9ucyA/IHF1ZXN0aW9ucy5sZW5ndGggOiAwO1xuICB9XG4gIHByaXZhdGUgY2xlYXJJbnZpc2libGVRdWVzdGlvblZhbHVlcygpIHtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRBbGxRdWVzdGlvbnMoKTtcbiAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBxdWVzdGlvbnNbaV0uY2xlYXJWYWx1ZUlmSW52aXNpYmxlKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgdmFyaWFibGUgdmFsdWUuIFZhcmlhYmxlLCB1bmxpa2UgdmFsdWVzLCBhcmUgbm90IHN0b3JlZCBpbiB0aGUgc3VydmV5IHJlc3VsdHMuXG4gICAqIEBwYXJhbSBuYW1lIEEgdmFyaWFibGUgbmFtZVxuICAgKiBAc2VlIFNldFZhcmlhYmxlXG4gICAqL1xuICBwdWJsaWMgZ2V0VmFyaWFibGUobmFtZTogc3RyaW5nKTogYW55IHtcbiAgICBpZiAoIW5hbWUpIHJldHVybiBudWxsO1xuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIHJlcyA9IHRoaXMudmFyaWFibGVzSGFzaFtuYW1lXTtcbiAgICBpZiAoIXRoaXMuaXNWYWx1ZUVtcHR5KHJlcykpIHJldHVybiByZXM7XG4gICAgaWYgKG5hbWUuaW5kZXhPZihcIi5cIikgPiAtMSB8fCBuYW1lLmluZGV4T2YoXCJbXCIpID4gLTEpIHtcbiAgICAgIGlmIChuZXcgUHJvY2Vzc1ZhbHVlKCkuaGFzVmFsdWUobmFtZSwgdGhpcy52YXJpYWJsZXNIYXNoKSlcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9jZXNzVmFsdWUoKS5nZXRWYWx1ZShuYW1lLCB0aGlzLnZhcmlhYmxlc0hhc2gpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIC8qKlxuICAgKiBTZXRzIGEgdmFyaWFibGUgdmFsdWUuIFZhcmlhYmxlLCB1bmxpa2UgdmFsdWVzLCBhcmUgbm90IHN0b3JlZCBpbiB0aGUgc3VydmV5IHJlc3VsdHMuXG4gICAqIEBwYXJhbSBuYW1lIEEgdmFyaWFibGUgbmFtZVxuICAgKiBAcGFyYW0gbmV3VmFsdWUgQSB2YXJpYWJsZSBuZXcgdmFsdWVcbiAgICogQHNlZSBHZXRWYXJpYWJsZVxuICAgKi9cbiAgcHVibGljIHNldFZhcmlhYmxlKG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IGFueSkge1xuICAgIGlmICghbmFtZSkgcmV0dXJuO1xuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy52YXJpYWJsZXNIYXNoW25hbWVdID0gbmV3VmFsdWU7XG4gICAgdGhpcy5ub3RpZnlFbGVtZW50c09uQW55VmFsdWVPclZhcmlhYmxlQ2hhbmdlZChuYW1lKTtcbiAgICB0aGlzLnJ1bkNvbmRpdGlvbk9uVmFsdWVDaGFuZ2VkKG5hbWUsIG5ld1ZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhbGwgdmFyaWFibGVzIGluIHRoZSBzdXJ2ZXkuIFVzZSBzZXRWYXJpYWJsZSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgdmFyaWFibGUuXG4gICAqIEBzZWUgZ2V0VmFyaWFibGVcbiAgICogQHNlZSBzZXRWYXJpYWJsZVxuICAgKi9cbiAgcHVibGljIGdldFZhcmlhYmxlTmFtZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnZhcmlhYmxlc0hhc2gpIHtcbiAgICAgIHJlcy5wdXNoKGtleSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgLy9JU3VydmV5IGRhdGFcbiAgcHJvdGVjdGVkIGdldFVuYmluZFZhbHVlKHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGlmICghIXRoaXMuZWRpdGluZ09iaikgcmV0dXJuIHZhbHVlO1xuICAgIHJldHVybiBIZWxwZXJzLmdldFVuYmluZFZhbHVlKHZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHF1ZXN0aW9uIHZhbHVlIChhbnN3ZXIpIGJ5IGEgcXVlc3Rpb24ncyBuYW1lLlxuICAgKiBAcGFyYW0gbmFtZSBBIHF1ZXN0aW9uIG5hbWVcbiAgICogQHNlZSBkYXRhXG4gICAqIEBzZWUgc2V0VmFsdWVcbiAgICovXG4gIHB1YmxpYyBnZXRWYWx1ZShuYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIGlmICghbmFtZSB8fCBuYW1lLmxlbmd0aCA9PSAwKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLmdldERhdGFWYWx1ZUNvcmUodGhpcy52YWx1ZXNIYXNoLCBuYW1lKTtcbiAgICByZXR1cm4gdGhpcy5nZXRVbmJpbmRWYWx1ZSh2YWx1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIFNldHMgYSBxdWVzdGlvbiB2YWx1ZSAoYW5zd2VyKS4gSXQgcnVucyBhbGwgdHJpZ2dlcnMgYW5kIGNvbmRpdGlvbnMgKGB2aXNpYmxlSWZgIHByb3BlcnRpZXMpLlxuICAgKlxuICAgKiBHb2VzIHRvIHRoZSBuZXh0IHBhZ2UgaWYgYGdvTmV4dFBhZ2VBdXRvbWF0aWNgIGlzIGB0cnVlYCBhbmQgYWxsIHF1ZXN0aW9ucyBvbiB0aGUgY3VycmVudCBwYWdlIGFyZSBhbnN3ZXJlZCBjb3JyZWN0bHkuXG4gICAqIEBwYXJhbSBuYW1lIEEgcXVlc3Rpb24gbmFtZVxuICAgKiBAcGFyYW0gbmV3VmFsdWUgQSBuZXcgcXVlc3Rpb24gdmFsdWVcbiAgICogQHNlZSBkYXRhXG4gICAqIEBzZWUgZ2V0VmFsdWVcbiAgICogQHNlZSBQYWdlTW9kZWwudmlzaWJsZUlmXG4gICAqIEBzZWUgUXVlc3Rpb24udmlzaWJsZUlmXG4gICAqIEBzZWUgZ29OZXh0UGFnZUF1dG9tYXRpY1xuICAgKi9cbiAgcHVibGljIHNldFZhbHVlKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBuZXdRdWVzdGlvblZhbHVlOiBhbnksXG4gICAgbG9jTm90aWZpY2F0aW9uOiBhbnkgPSBmYWxzZSxcbiAgICBhbGxvd05vdGlmeVZhbHVlQ2hhbmdlZDogYm9vbGVhbiA9IHRydWVcbiAgKSB7XG4gICAgdmFyIG5ld1ZhbHVlID0gbmV3UXVlc3Rpb25WYWx1ZTtcbiAgICBpZiAoYWxsb3dOb3RpZnlWYWx1ZUNoYW5nZWQpIHtcbiAgICAgIG5ld1ZhbHVlID0gdGhpcy5xdWVzdGlvbk9uVmFsdWVDaGFuZ2luZyhuYW1lLCBuZXdRdWVzdGlvblZhbHVlKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdGhpcy5pc1ZhbGlkYXRlT25WYWx1ZUNoYW5naW5nICYmXG4gICAgICB0aGlzLmNoZWNrRXJyb3JzT25WYWx1ZUNoYW5naW5nKG5hbWUsIG5ld1ZhbHVlKVxuICAgIClcbiAgICAgIHJldHVybjtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5lZGl0aW5nT2JqICYmXG4gICAgICB0aGlzLmlzVmFsdWVFcXVhbChuYW1lLCBuZXdWYWx1ZSkgJiZcbiAgICAgIHRoaXMuaXNUd29WYWx1ZUVxdWFscyhuZXdWYWx1ZSwgbmV3UXVlc3Rpb25WYWx1ZSlcbiAgICApXG4gICAgICByZXR1cm47XG4gICAgdmFyIG9sZFZhbHVlID0gdGhpcy5nZXRWYWx1ZShuYW1lKTtcbiAgICBpZiAodGhpcy5pc1ZhbHVlRW1wdHkobmV3VmFsdWUpKSB7XG4gICAgICB0aGlzLmRlbGV0ZURhdGFWYWx1ZUNvcmUodGhpcy52YWx1ZXNIYXNoLCBuYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3VmFsdWUgPSB0aGlzLmdldFVuYmluZFZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgIHRoaXMuc2V0RGF0YVZhbHVlQ29yZSh0aGlzLnZhbHVlc0hhc2gsIG5hbWUsIG5ld1ZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVPblNldFZhbHVlKFxuICAgICAgbmFtZSxcbiAgICAgIG5ld1ZhbHVlLFxuICAgICAgb2xkVmFsdWUsXG4gICAgICBsb2NOb3RpZmljYXRpb24sXG4gICAgICBhbGxvd05vdGlmeVZhbHVlQ2hhbmdlZFxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVPblNldFZhbHVlKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBuZXdWYWx1ZTogYW55LFxuICAgIG9sZFZhbHVlOiBhbnksXG4gICAgbG9jTm90aWZpY2F0aW9uOiBhbnkgPSBmYWxzZSxcbiAgICBhbGxvd05vdGlmeVZhbHVlQ2hhbmdlZDogYm9vbGVhbiA9IHRydWVcbiAgKSB7XG4gICAgdGhpcy51cGRhdGVRdWVzdGlvblZhbHVlKG5hbWUsIG5ld1ZhbHVlKTtcbiAgICBpZiAobG9jTm90aWZpY2F0aW9uID09PSB0cnVlIHx8IHRoaXMuaXNEaXNwb3NlZCkgcmV0dXJuO1xuICAgIHZhciB0cmlnZ2VyS2V5czogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgdHJpZ2dlcktleXNbbmFtZV0gPSB7IG5ld1ZhbHVlOiBuZXdWYWx1ZSwgb2xkVmFsdWU6IG9sZFZhbHVlIH07XG4gICAgdGhpcy5ydW5Db25kaXRpb25PblZhbHVlQ2hhbmdlZChuYW1lLCBuZXdWYWx1ZSk7XG4gICAgdGhpcy5jaGVja1RyaWdnZXJzKHRyaWdnZXJLZXlzLCBmYWxzZSk7XG4gICAgaWYgKGFsbG93Tm90aWZ5VmFsdWVDaGFuZ2VkKVxuICAgICAgdGhpcy5ub3RpZnlRdWVzdGlvbk9uVmFsdWVDaGFuZ2VkKG5hbWUsIG5ld1ZhbHVlKTtcbiAgICBpZiAobG9jTm90aWZpY2F0aW9uICE9PSBcInRleHRcIikge1xuICAgICAgdGhpcy50cnlHb05leHRQYWdlQXV0b21hdGljKG5hbWUpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVByb2dyZXNzVGV4dCh0cnVlKTtcbiAgfVxuICBwcml2YXRlIGlzVmFsdWVFcXVhbChuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAobmV3VmFsdWUgPT09IFwiXCIgfHwgbmV3VmFsdWUgPT09IHVuZGVmaW5lZCkgbmV3VmFsdWUgPSBudWxsO1xuICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMuZ2V0VmFsdWUobmFtZSk7XG4gICAgaWYgKG9sZFZhbHVlID09PSBcIlwiIHx8IG9sZFZhbHVlID09PSB1bmRlZmluZWQpIG9sZFZhbHVlID0gbnVsbDtcbiAgICBpZiAobmV3VmFsdWUgPT09IG51bGwgfHwgb2xkVmFsdWUgPT09IG51bGwpIHJldHVybiBuZXdWYWx1ZSA9PT0gb2xkVmFsdWU7XG4gICAgcmV0dXJuIHRoaXMuaXNUd29WYWx1ZUVxdWFscyhuZXdWYWx1ZSwgb2xkVmFsdWUpO1xuICB9XG4gIHByb3RlY3RlZCBkb09uUGFnZUFkZGVkKHBhZ2U6IFBhZ2VNb2RlbCkge1xuICAgIHBhZ2Uuc2V0U3VydmV5SW1wbCh0aGlzKTtcbiAgICBpZiAoIXBhZ2UubmFtZSkgcGFnZS5uYW1lID0gdGhpcy5nZW5lcmF0ZU5ld05hbWUodGhpcy5wYWdlcywgXCJwYWdlXCIpO1xuICAgIHRoaXMucXVlc3Rpb25IYXNoZXNQYW5lbEFkZGVkKHBhZ2UpO1xuICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHtcbiAgICAgIHRoaXMudXBkYXRlUHJvZ3Jlc3NUZXh0KCk7XG4gICAgfVxuICAgIHZhciBvcHRpb25zID0geyBwYWdlOiBwYWdlIH07XG4gICAgdGhpcy5vblBhZ2VBZGRlZC5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICB9XG4gIHByb3RlY3RlZCBkb09uUGFnZVJlbW92ZWQocGFnZTogUGFnZU1vZGVsKSB7XG4gICAgcGFnZS5zZXRTdXJ2ZXlJbXBsKG51bGwpO1xuICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHtcbiAgICAgIHRoaXMudXBkYXRlUHJvZ3Jlc3NUZXh0KCk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlTGF6eVJlbmRlcmluZ1Jvd3NPblJlbW92aW5nRWxlbWVudHMoKTtcbiAgfVxuICBwcml2YXRlIGdlbmVyYXRlTmV3TmFtZShlbGVtZW50czogQXJyYXk8YW55PiwgYmFzZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdmFyIGtleXM6IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIGtleXNbZWxlbWVudHNbaV1bXCJuYW1lXCJdXSA9IHRydWU7XG4gICAgdmFyIGluZGV4ID0gMTtcbiAgICB3aGlsZSAoa2V5c1tiYXNlTmFtZSArIGluZGV4XSkgaW5kZXgrKztcbiAgICByZXR1cm4gYmFzZU5hbWUgKyBpbmRleDtcbiAgfVxuICBwcm90ZWN0ZWQgdHJ5R29OZXh0UGFnZUF1dG9tYXRpYyhuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoXG4gICAgICAhIXRoaXMuaXNFbmRMb2FkaW5nRnJvbUpzb24gfHxcbiAgICAgICF0aGlzLmdvTmV4dFBhZ2VBdXRvbWF0aWMgfHxcbiAgICAgICF0aGlzLmN1cnJlbnRQYWdlXG4gICAgKVxuICAgICAgcmV0dXJuO1xuICAgIHZhciBxdWVzdGlvbiA9IDxRdWVzdGlvbj50aGlzLmdldFF1ZXN0aW9uQnlWYWx1ZU5hbWUobmFtZSk7XG4gICAgaWYgKFxuICAgICAgIXF1ZXN0aW9uIHx8XG4gICAgICAoISFxdWVzdGlvbiAmJlxuICAgICAgICAoIXF1ZXN0aW9uLnZpc2libGUgfHwgIXF1ZXN0aW9uLnN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkpKVxuICAgIClcbiAgICAgIHJldHVybjtcbiAgICBpZiAocXVlc3Rpb24uaGFzRXJyb3JzKGZhbHNlKSAmJiAhcXVlc3Rpb24uc3VwcG9ydEdvTmV4dFBhZ2VFcnJvcigpKSByZXR1cm47XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0Q3VycmVudFBhZ2VRdWVzdGlvbnMoKTtcbiAgICBpZiAocXVlc3Rpb25zLmluZGV4T2YocXVlc3Rpb24pIDwgMCkgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocXVlc3Rpb25zW2ldLmhhc0lucHV0ICYmIHF1ZXN0aW9uc1tpXS5pc0VtcHR5KCkpIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmNoZWNrSXNDdXJyZW50UGFnZUhhc0Vycm9ycyhmYWxzZSkpIHtcbiAgICAgIGlmICghdGhpcy5pc0xhc3RQYWdlKSB7XG4gICAgICAgIHRoaXMubmV4dFBhZ2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLmdvTmV4dFBhZ2VBdXRvbWF0aWMgPT09IHRydWUgJiZcbiAgICAgICAgICB0aGlzLmFsbG93Q29tcGxldGVTdXJ2ZXlBdXRvbWF0aWNcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5jb21wbGV0ZUxhc3RQYWdlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGNvbW1lbnQgdmFsdWUuXG4gICAqIEBwYXJhbSBuYW1lIEEgY29tbWVudCdzIG5hbWUuXG4gICAqIEBzZWUgc2V0Q29tbWVudFxuICAgKi9cbiAgcHVibGljIGdldENvbW1lbnQobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB2YXIgcmVzdWx0ID0gdGhpcy5kYXRhW25hbWUgKyB0aGlzLmNvbW1lbnRQcmVmaXhdO1xuICAgIGlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gXCJcIjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIC8qKlxuICAgKiBTZXRzIGEgY29tbWVudCB2YWx1ZS5cbiAgICogQHBhcmFtIG5hbWUgQSBjb21tZW50IG5hbWUuXG4gICAqIEBwYXJhbSBuZXdWYWx1ZSBBIG5ldyBjb21tZW50IHZhbHVlLlxuICAgKiBAc2VlIGdldENvbW1lbnRcbiAgICovXG4gIHB1YmxpYyBzZXRDb21tZW50KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBuZXdWYWx1ZTogc3RyaW5nLFxuICAgIGxvY05vdGlmaWNhdGlvbjogYW55ID0gZmFsc2VcbiAgKSB7XG4gICAgaWYgKCFuZXdWYWx1ZSkgbmV3VmFsdWUgPSBcIlwiO1xuICAgIGlmIChIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMobmV3VmFsdWUsIHRoaXMuZ2V0Q29tbWVudChuYW1lKSkpIHJldHVybjtcbiAgICB2YXIgY29tbWVudE5hbWUgPSBuYW1lICsgdGhpcy5jb21tZW50UHJlZml4O1xuICAgIGlmICh0aGlzLmlzVmFsdWVFbXB0eShuZXdWYWx1ZSkpIHtcbiAgICAgIHRoaXMuZGVsZXRlRGF0YVZhbHVlQ29yZSh0aGlzLnZhbHVlc0hhc2gsIGNvbW1lbnROYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXREYXRhVmFsdWVDb3JlKHRoaXMudmFsdWVzSGFzaCwgY29tbWVudE5hbWUsIG5ld1ZhbHVlKTtcbiAgICB9XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0UXVlc3Rpb25zQnlWYWx1ZU5hbWUobmFtZSk7XG4gICAgaWYgKCEhcXVlc3Rpb25zKSB7XG4gICAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHF1ZXN0aW9uc1tpXS51cGRhdGVDb21tZW50RnJvbVN1cnZleShuZXdWYWx1ZSk7XG4gICAgICAgIHRoaXMuY2hlY2tRdWVzdGlvbkVycm9yT25WYWx1ZUNoYW5nZWQocXVlc3Rpb25zW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGxvY05vdGlmaWNhdGlvbiAhPT0gXCJ0ZXh0XCIpIHtcbiAgICAgIHRoaXMudHJ5R29OZXh0UGFnZUF1dG9tYXRpYyhuYW1lKTtcbiAgICB9XG4gICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lKTtcbiAgICBpZiAocXVlc3Rpb24pIHtcbiAgICAgIHRoaXMub25WYWx1ZUNoYW5nZWQuZmlyZSh0aGlzLCB7XG4gICAgICAgIG5hbWU6IGNvbW1lbnROYW1lLFxuICAgICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICAgIHZhbHVlOiBuZXdWYWx1ZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmVtb3ZlcyBhIHZhbHVlIGZyb20gdGhlIHN1cnZleSByZXN1bHRzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgdmFsdWUuIFR5cGljYWxseSBpdCBpcyBhIHF1ZXN0aW9uIG5hbWUuXG4gICAqL1xuICBwdWJsaWMgY2xlYXJWYWx1ZShuYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFZhbHVlKG5hbWUsIG51bGwpO1xuICAgIHRoaXMuc2V0Q29tbWVudChuYW1lLCBudWxsKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHdoZXRoZXIgdG8gY2xlYXIgdmFsdWUgb24gZGlzYWJsZSBpdGVtcyBpbiBjaGVja2JveCwgZHJvcGRvd24gYW5kIHJhZGlvZ3JvdXAgcXVlc3Rpb25zLlxuICAgKiBCeSBkZWZhdWx0LCB2YWx1ZXMgYXJlIG5vdCBjbGVhcmVkIG9uIGRpc2FibGVkIHRoZSBjb3JyZXNwb25kZWQgaXRlbXMuIFRoaXMgcHJvcGVydHkgaXMgbm90IHBlcnNpc3RlZCBpbiBzdXJ2ZXkgSlNPTiBhbmQgeW91IGhhdmUgdG8gc2V0IGl0IGluIGNvZGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNsZWFyVmFsdWVPbkRpc2FibGVJdGVtcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY2xlYXJWYWx1ZU9uRGlzYWJsZUl0ZW1zXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNsZWFyVmFsdWVPbkRpc2FibGVJdGVtcyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjbGVhclZhbHVlT25EaXNhYmxlSXRlbXNcIiwgdmFsKTtcbiAgfVxuICBnZXQgaXNDbGVhclZhbHVlT25IaWRkZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY2xlYXJJbnZpc2libGVWYWx1ZXMgPT0gXCJvbkhpZGRlblwiIHx8XG4gICAgICB0aGlzLmlzQ2xlYXJWYWx1ZU9uSGlkZGVuQ29udGFpbmVyXG4gICAgKTtcbiAgfVxuICBnZXQgaXNDbGVhclZhbHVlT25IaWRkZW5Db250YWluZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY2xlYXJJbnZpc2libGVWYWx1ZXMgPT0gXCJvbkhpZGRlbkNvbnRhaW5lclwiICYmXG4gICAgICAhdGhpcy5pc1Nob3dpbmdQcmV2aWV3ICYmXG4gICAgICAhdGhpcy5ydW5uaW5nUGFnZXNcbiAgICApO1xuICB9XG4gIHF1ZXN0aW9uVmlzaWJpbGl0eUNoYW5nZWQocXVlc3Rpb246IElRdWVzdGlvbiwgbmV3VmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XG4gICAgdGhpcy5vblZpc2libGVDaGFuZ2VkLmZpcmUodGhpcywge1xuICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgbmFtZTogcXVlc3Rpb24ubmFtZSxcbiAgICAgIHZpc2libGU6IG5ld1ZhbHVlLFxuICAgIH0pO1xuICB9XG4gIHBhZ2VWaXNpYmlsaXR5Q2hhbmdlZChwYWdlOiBJUGFnZSwgbmV3VmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbikgcmV0dXJuO1xuICAgIGlmIChuZXdWYWx1ZSAmJiAhdGhpcy5jdXJyZW50UGFnZVZhbHVlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlVmFsdWUgPSB0aGlzLmN1cnJlbnRQYWdlO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XG4gICAgdGhpcy5vblBhZ2VWaXNpYmxlQ2hhbmdlZC5maXJlKHRoaXMsIHtcbiAgICAgIHBhZ2U6IHBhZ2UsXG4gICAgICB2aXNpYmxlOiBuZXdWYWx1ZSxcbiAgICB9KTtcbiAgfVxuICBwYW5lbFZpc2liaWxpdHlDaGFuZ2VkKHBhbmVsOiBJUGFuZWwsIG5ld1ZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xuICAgIHRoaXMub25QYW5lbFZpc2libGVDaGFuZ2VkLmZpcmUodGhpcywge1xuICAgICAgcGFuZWw6IHBhbmVsLFxuICAgICAgdmlzaWJsZTogbmV3VmFsdWUsXG4gICAgfSk7XG4gIH1cbiAgcXVlc3Rpb25DcmVhdGVkKHF1ZXN0aW9uOiBJUXVlc3Rpb24pOiBhbnkge1xuICAgIHRoaXMub25RdWVzdGlvbkNyZWF0ZWQuZmlyZSh0aGlzLCB7IHF1ZXN0aW9uOiBxdWVzdGlvbiB9KTtcbiAgfVxuICBxdWVzdGlvbkFkZGVkKFxuICAgIHF1ZXN0aW9uOiBJUXVlc3Rpb24sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBwYXJlbnRQYW5lbDogYW55LFxuICAgIHJvb3RQYW5lbDogYW55XG4gICkge1xuICAgIGlmICghcXVlc3Rpb24ubmFtZSkge1xuICAgICAgcXVlc3Rpb24ubmFtZSA9IHRoaXMuZ2VuZXJhdGVOZXdOYW1lKFxuICAgICAgICB0aGlzLmdldEFsbFF1ZXN0aW9ucyhmYWxzZSwgdHJ1ZSksXG4gICAgICAgIFwicXVlc3Rpb25cIlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCEhKDxRdWVzdGlvbj5xdWVzdGlvbikucGFnZSkge1xuICAgICAgdGhpcy5xdWVzdGlvbkhhc2hlc0FkZGVkKDxRdWVzdGlvbj5xdWVzdGlvbik7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcbiAgICB0aGlzLm9uUXVlc3Rpb25BZGRlZC5maXJlKHRoaXMsIHtcbiAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgIG5hbWU6IHF1ZXN0aW9uLm5hbWUsXG4gICAgICBpbmRleDogaW5kZXgsXG4gICAgICBwYXJlbnRQYW5lbDogcGFyZW50UGFuZWwsXG4gICAgICByb290UGFuZWw6IHJvb3RQYW5lbCxcbiAgICB9KTtcbiAgfVxuICBxdWVzdGlvblJlbW92ZWQocXVlc3Rpb246IElRdWVzdGlvbikge1xuICAgIHRoaXMucXVlc3Rpb25IYXNoZXNSZW1vdmVkKFxuICAgICAgPFF1ZXN0aW9uPnF1ZXN0aW9uLFxuICAgICAgcXVlc3Rpb24ubmFtZSxcbiAgICAgIHF1ZXN0aW9uLmdldFZhbHVlTmFtZSgpXG4gICAgKTtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XG4gICAgdGhpcy5vblF1ZXN0aW9uUmVtb3ZlZC5maXJlKHRoaXMsIHtcbiAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgIG5hbWU6IHF1ZXN0aW9uLm5hbWUsXG4gICAgfSk7XG4gICAgdGhpcy51cGRhdGVMYXp5UmVuZGVyaW5nUm93c09uUmVtb3ZpbmdFbGVtZW50cygpO1xuICB9XG4gIHF1ZXN0aW9uUmVuYW1lZChcbiAgICBxdWVzdGlvbjogSVF1ZXN0aW9uLFxuICAgIG9sZE5hbWU6IHN0cmluZyxcbiAgICBvbGRWYWx1ZU5hbWU6IHN0cmluZ1xuICApOiBhbnkge1xuICAgIHRoaXMucXVlc3Rpb25IYXNoZXNSZW1vdmVkKDxRdWVzdGlvbj5xdWVzdGlvbiwgb2xkTmFtZSwgb2xkVmFsdWVOYW1lKTtcbiAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzQWRkZWQoPFF1ZXN0aW9uPnF1ZXN0aW9uKTtcbiAgfVxuICBwcml2YXRlIHF1ZXN0aW9uSGFzaGVzID0ge1xuICAgIG5hbWVzOiB7fSxcbiAgICBuYW1lc0luc2Vuc2l0aXZlOiB7fSxcbiAgICB2YWx1ZU5hbWVzOiB7fSxcbiAgICB2YWx1ZU5hbWVzSW5zZW5zaXRpdmU6IHt9LFxuICB9O1xuICBwcml2YXRlIHF1ZXN0aW9uSGFzaGVzQ2xlYXIoKSB7XG4gICAgdGhpcy5xdWVzdGlvbkhhc2hlcy5uYW1lcyA9IHt9O1xuICAgIHRoaXMucXVlc3Rpb25IYXNoZXMubmFtZXNJbnNlbnNpdGl2ZSA9IHt9O1xuICAgIHRoaXMucXVlc3Rpb25IYXNoZXMudmFsdWVOYW1lcyA9IHt9O1xuICAgIHRoaXMucXVlc3Rpb25IYXNoZXMudmFsdWVOYW1lc0luc2Vuc2l0aXZlID0ge307XG4gIH1cbiAgcHJpdmF0ZSBxdWVzdGlvbkhhc2hlc1BhbmVsQWRkZWQocGFuZWw6IFBhbmVsTW9kZWxCYXNlKSB7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHJldHVybjtcbiAgICB2YXIgcXVlc3Rpb25zID0gcGFuZWwucXVlc3Rpb25zO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzQWRkZWQocXVlc3Rpb25zW2ldKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBxdWVzdGlvbkhhc2hlc0FkZGVkKHF1ZXN0aW9uOiBRdWVzdGlvbikge1xuICAgIHRoaXMucXVlc3Rpb25IYXNoQWRkZWRDb3JlKFxuICAgICAgdGhpcy5xdWVzdGlvbkhhc2hlcy5uYW1lcyxcbiAgICAgIHF1ZXN0aW9uLFxuICAgICAgcXVlc3Rpb24ubmFtZVxuICAgICk7XG4gICAgdGhpcy5xdWVzdGlvbkhhc2hBZGRlZENvcmUoXG4gICAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzLm5hbWVzSW5zZW5zaXRpdmUsXG4gICAgICBxdWVzdGlvbixcbiAgICAgIHF1ZXN0aW9uLm5hbWUudG9Mb3dlckNhc2UoKVxuICAgICk7XG4gICAgdGhpcy5xdWVzdGlvbkhhc2hBZGRlZENvcmUoXG4gICAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzLnZhbHVlTmFtZXMsXG4gICAgICBxdWVzdGlvbixcbiAgICAgIHF1ZXN0aW9uLmdldFZhbHVlTmFtZSgpXG4gICAgKTtcbiAgICB0aGlzLnF1ZXN0aW9uSGFzaEFkZGVkQ29yZShcbiAgICAgIHRoaXMucXVlc3Rpb25IYXNoZXMudmFsdWVOYW1lc0luc2Vuc2l0aXZlLFxuICAgICAgcXVlc3Rpb24sXG4gICAgICBxdWVzdGlvbi5nZXRWYWx1ZU5hbWUoKS50b0xvd2VyQ2FzZSgpXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHF1ZXN0aW9uSGFzaGVzUmVtb3ZlZChcbiAgICBxdWVzdGlvbjogUXVlc3Rpb24sXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHZhbHVlTmFtZTogc3RyaW5nXG4gICkge1xuICAgIGlmICghIW5hbWUpIHtcbiAgICAgIHRoaXMucXVlc3Rpb25IYXNoUmVtb3ZlZENvcmUodGhpcy5xdWVzdGlvbkhhc2hlcy5uYW1lcywgcXVlc3Rpb24sIG5hbWUpO1xuICAgICAgdGhpcy5xdWVzdGlvbkhhc2hSZW1vdmVkQ29yZShcbiAgICAgICAgdGhpcy5xdWVzdGlvbkhhc2hlcy5uYW1lc0luc2Vuc2l0aXZlLFxuICAgICAgICBxdWVzdGlvbixcbiAgICAgICAgbmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoISF2YWx1ZU5hbWUpIHtcbiAgICAgIHRoaXMucXVlc3Rpb25IYXNoUmVtb3ZlZENvcmUoXG4gICAgICAgIHRoaXMucXVlc3Rpb25IYXNoZXMudmFsdWVOYW1lcyxcbiAgICAgICAgcXVlc3Rpb24sXG4gICAgICAgIHZhbHVlTmFtZVxuICAgICAgKTtcbiAgICAgIHRoaXMucXVlc3Rpb25IYXNoUmVtb3ZlZENvcmUoXG4gICAgICAgIHRoaXMucXVlc3Rpb25IYXNoZXMudmFsdWVOYW1lc0luc2Vuc2l0aXZlLFxuICAgICAgICBxdWVzdGlvbixcbiAgICAgICAgdmFsdWVOYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgcXVlc3Rpb25IYXNoQWRkZWRDb3JlKGhhc2g6IGFueSwgcXVlc3Rpb246IFF1ZXN0aW9uLCBuYW1lOiBzdHJpbmcpIHtcbiAgICB2YXIgcmVzID0gaGFzaFtuYW1lXTtcbiAgICBpZiAoISFyZXMpIHtcbiAgICAgIHZhciByZXMgPSBoYXNoW25hbWVdO1xuICAgICAgaWYgKHJlcy5pbmRleE9mKHF1ZXN0aW9uKSA8IDApIHtcbiAgICAgICAgcmVzLnB1c2gocXVlc3Rpb24pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBoYXNoW25hbWVdID0gW3F1ZXN0aW9uXTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBxdWVzdGlvbkhhc2hSZW1vdmVkQ29yZShoYXNoOiBhbnksIHF1ZXN0aW9uOiBRdWVzdGlvbiwgbmFtZTogc3RyaW5nKSB7XG4gICAgdmFyIHJlcyA9IGhhc2hbbmFtZV07XG4gICAgaWYgKCFyZXMpIHJldHVybjtcbiAgICB2YXIgaW5kZXggPSByZXMuaW5kZXhPZihxdWVzdGlvbik7XG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIHJlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgICBpZiAocmVzLmxlbmd0aCA9PSAwKSB7XG4gICAgICBkZWxldGUgaGFzaFtuYW1lXTtcbiAgICB9XG4gIH1cbiAgcGFuZWxBZGRlZChwYW5lbDogSUVsZW1lbnQsIGluZGV4OiBudW1iZXIsIHBhcmVudFBhbmVsOiBhbnksIHJvb3RQYW5lbDogYW55KSB7XG4gICAgaWYgKCFwYW5lbC5uYW1lKSB7XG4gICAgICBwYW5lbC5uYW1lID0gdGhpcy5nZW5lcmF0ZU5ld05hbWUoXG4gICAgICAgIHRoaXMuZ2V0QWxsUGFuZWxzKGZhbHNlLCB0cnVlKSxcbiAgICAgICAgXCJwYW5lbFwiXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzUGFuZWxBZGRlZCg8UGFuZWxNb2RlbEJhc2U+KDxhbnk+cGFuZWwpKTtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XG4gICAgdGhpcy5vblBhbmVsQWRkZWQuZmlyZSh0aGlzLCB7XG4gICAgICBwYW5lbDogcGFuZWwsXG4gICAgICBuYW1lOiBwYW5lbC5uYW1lLFxuICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgcGFyZW50UGFuZWw6IHBhcmVudFBhbmVsLFxuICAgICAgcm9vdFBhbmVsOiByb290UGFuZWwsXG4gICAgfSk7XG4gIH1cbiAgcGFuZWxSZW1vdmVkKHBhbmVsOiBJRWxlbWVudCkge1xuICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcbiAgICB0aGlzLm9uUGFuZWxSZW1vdmVkLmZpcmUodGhpcywgeyBwYW5lbDogcGFuZWwsIG5hbWU6IHBhbmVsLm5hbWUgfSk7XG4gICAgdGhpcy51cGRhdGVMYXp5UmVuZGVyaW5nUm93c09uUmVtb3ZpbmdFbGVtZW50cygpO1xuICB9XG4gIHZhbGlkYXRlUXVlc3Rpb24ocXVlc3Rpb246IElRdWVzdGlvbik6IFN1cnZleUVycm9yIHtcbiAgICBpZiAodGhpcy5vblZhbGlkYXRlUXVlc3Rpb24uaXNFbXB0eSkgcmV0dXJuIG51bGw7XG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICBuYW1lOiBxdWVzdGlvbi5uYW1lLFxuICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgdmFsdWU6IHF1ZXN0aW9uLnZhbHVlLFxuICAgICAgZXJyb3I6IDxhbnk+bnVsbCxcbiAgICB9O1xuICAgIHRoaXMub25WYWxpZGF0ZVF1ZXN0aW9uLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wdGlvbnMuZXJyb3IgPyBuZXcgQ3VzdG9tRXJyb3Iob3B0aW9ucy5lcnJvciwgdGhpcykgOiBudWxsO1xuICB9XG4gIHZhbGlkYXRlUGFuZWwocGFuZWw6IElQYW5lbCk6IFN1cnZleUVycm9yIHtcbiAgICBpZiAodGhpcy5vblZhbGlkYXRlUGFuZWwuaXNFbXB0eSkgcmV0dXJuIG51bGw7XG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICBuYW1lOiBwYW5lbC5uYW1lLFxuICAgICAgcGFuZWw6IHBhbmVsLFxuICAgICAgZXJyb3I6IDxhbnk+bnVsbCxcbiAgICB9O1xuICAgIHRoaXMub25WYWxpZGF0ZVBhbmVsLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wdGlvbnMuZXJyb3IgPyBuZXcgQ3VzdG9tRXJyb3Iob3B0aW9ucy5lcnJvciwgdGhpcykgOiBudWxsO1xuICB9XG4gIHByb2Nlc3NIdG1sKGh0bWw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdmFyIG9wdGlvbnMgPSB7IGh0bWw6IGh0bWwgfTtcbiAgICB0aGlzLm9uUHJvY2Vzc0h0bWwuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzVGV4dChvcHRpb25zLmh0bWwsIHRydWUpO1xuICB9XG4gIHByb2Nlc3NUZXh0KHRleHQ6IHN0cmluZywgcmV0dXJuRGlzcGxheVZhbHVlOiBib29sZWFuKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzVGV4dEV4KHRleHQsIHJldHVybkRpc3BsYXlWYWx1ZSwgZmFsc2UpLnRleHQ7XG4gIH1cbiAgcHJvY2Vzc1RleHRFeChcbiAgICB0ZXh0OiBzdHJpbmcsXG4gICAgcmV0dXJuRGlzcGxheVZhbHVlOiBib29sZWFuLFxuICAgIGRvRW5jb2Rpbmc6IGJvb2xlYW5cbiAgKTogYW55IHtcbiAgICB2YXIgcmVzID0ge1xuICAgICAgdGV4dDogdGhpcy5wcm9jZXNzVGV4dENvcmUodGV4dCwgcmV0dXJuRGlzcGxheVZhbHVlLCBkb0VuY29kaW5nKSxcbiAgICAgIGhhc0FsbFZhbHVlc09uTGFzdFJ1bjogdHJ1ZSxcbiAgICB9O1xuICAgIHJlcy5oYXNBbGxWYWx1ZXNPbkxhc3RSdW4gPSB0aGlzLnRleHRQcmVQcm9jZXNzb3IuaGFzQWxsVmFsdWVzT25MYXN0UnVuO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSBwcm9jZXNzVGV4dENvcmUoXG4gICAgdGV4dDogc3RyaW5nLFxuICAgIHJldHVybkRpc3BsYXlWYWx1ZTogYm9vbGVhbixcbiAgICBkb0VuY29kaW5nOiBib29sZWFuID0gZmFsc2VcbiAgKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHJldHVybiB0ZXh0O1xuICAgIHJldHVybiB0aGlzLnRleHRQcmVQcm9jZXNzb3IucHJvY2Vzcyh0ZXh0LCByZXR1cm5EaXNwbGF5VmFsdWUsIGRvRW5jb2RpbmcpO1xuICB9XG4gIGdldFN1cnZleU1hcmtkb3duSHRtbChlbGVtZW50OiBCYXNlLCB0ZXh0OiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgdGV4dDogdGV4dCxcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICBodG1sOiA8YW55Pm51bGwsXG4gICAgfTtcbiAgICB0aGlzLm9uVGV4dE1hcmtkb3duLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wdGlvbnMuaHRtbDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhbiBhbW91bnQgb2YgY29ycmVjdGVkIHF1aXogYW5zd2Vycy5cbiAgICovXG4gIHB1YmxpYyBnZXRDb3JyZWN0ZWRBbnN3ZXJDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldENvcnJlY3RlZEFuc3dlckNvdW50Q29yZSh0cnVlKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBxdWl6IHF1ZXN0aW9uIG51bWJlci4gSXQgbWF5IGJlIGRpZmZlcmVudCBmcm9tIGBnZXRRdWl6UXVlc3Rpb25zLmxlbmd0aGAgYmVjYXVzZSBzb21lIHdpZGdldHMgbGlrZSBtYXRyaXggbWF5IGhhdmUgc2V2ZXJhbCBxdWVzdGlvbnMuXG4gICAqIEBzZWUgZ2V0UXVpelF1ZXN0aW9uc1xuICAgKi9cbiAgcHVibGljIGdldFF1aXpRdWVzdGlvbkNvdW50KCk6IG51bWJlciB7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0UXVpelF1ZXN0aW9ucygpO1xuICAgIHZhciByZXMgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXMgKz0gKDxRdWVzdGlvbj5xdWVzdGlvbnNbaV0pLnF1aXpRdWVzdGlvbkNvdW50O1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGFtb3VudCBvZiBpbmNvcnJlY3QgcXVpeiBhbnN3ZXJzLlxuICAgKi9cbiAgcHVibGljIGdldEluQ29ycmVjdGVkQW5zd2VyQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDb3JyZWN0ZWRBbnN3ZXJDb3VudENvcmUoZmFsc2UpO1xuICB9XG4gIHByaXZhdGUgZ2V0Q29ycmVjdGVkQW5zd2VyQ291bnRDb3JlKGlzQ29ycmVjdDogYm9vbGVhbik6IG51bWJlciB7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0UXVpelF1ZXN0aW9ucygpO1xuICAgIHZhciBjb3VudGVyID0gMDtcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIHF1ZXN0aW9uOiA8SVF1ZXN0aW9uPm51bGwsXG4gICAgICByZXN1bHQ6IGZhbHNlLFxuICAgICAgY29ycmVjdEFuc3dlcnM6IDAsXG4gICAgICBpbmNvcnJlY3RBbnN3ZXJzOiAwLFxuICAgIH07XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxID0gPFF1ZXN0aW9uPnF1ZXN0aW9uc1tpXTtcbiAgICAgIHZhciBxdWl6UXVlc3Rpb25Db3VudCA9IHEucXVpelF1ZXN0aW9uQ291bnQ7XG4gICAgICBvcHRpb25zLnF1ZXN0aW9uID0gcTtcbiAgICAgIG9wdGlvbnMuY29ycmVjdEFuc3dlcnMgPSBxLmNvcnJlY3RBbnN3ZXJDb3VudDtcbiAgICAgIG9wdGlvbnMuaW5jb3JyZWN0QW5zd2VycyA9IHF1aXpRdWVzdGlvbkNvdW50IC0gb3B0aW9ucy5jb3JyZWN0QW5zd2VycztcbiAgICAgIG9wdGlvbnMucmVzdWx0ID0gb3B0aW9ucy5xdWVzdGlvbi5pc0Fuc3dlckNvcnJlY3QoKTtcbiAgICAgIHRoaXMub25Jc0Fuc3dlckNvcnJlY3QuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICAgIGlmIChpc0NvcnJlY3QpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMucmVzdWx0IHx8IG9wdGlvbnMuY29ycmVjdEFuc3dlcnMgPCBxdWl6UXVlc3Rpb25Db3VudCkge1xuICAgICAgICAgIHZhciBhZGRDb3VudCA9IG9wdGlvbnMuY29ycmVjdEFuc3dlcnM7XG4gICAgICAgICAgaWYgKGFkZENvdW50ID09IDAgJiYgb3B0aW9ucy5yZXN1bHQpIGFkZENvdW50ID0gMTtcbiAgICAgICAgICBjb3VudGVyICs9IGFkZENvdW50O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIW9wdGlvbnMucmVzdWx0IHx8IG9wdGlvbnMuaW5jb3JyZWN0QW5zd2VycyA8IHF1aXpRdWVzdGlvbkNvdW50KSB7XG4gICAgICAgICAgY291bnRlciArPSBvcHRpb25zLmluY29ycmVjdEFuc3dlcnM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvdW50ZXI7XG4gIH1cbiAgZ2V0Q29ycmVjdGVkQW5zd2VycygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldENvcnJlY3RlZEFuc3dlckNvdW50KCk7XG4gIH1cbiAgZ2V0SW5Db3JyZWN0ZWRBbnN3ZXJzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SW5Db3JyZWN0ZWRBbnN3ZXJDb3VudCgpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSB0aW1lciBwYW5lbCBwb3NpdGlvbi4gVGhlIHRpbWVyIHBhbmVsIGRpc3BsYXlzIGluZm9ybWF0aW9uIGFib3V0IGhvdyBtdWNoIHRpbWUgYW4gZW5kIHVzZXIgc3BlbmRzIG9uIGEgc3VydmV5L3BhZ2UuXG4gICAqXG4gICAqIFRoZSBhdmFpbGFibGUgb3B0aW9uczpcbiAgICogLSBgdG9wYCAtIGRpc3BsYXkgdGltZXIgcGFuZWwgaW4gdGhlIHRvcC5cbiAgICogLSBgYm90dG9tYCAtIGRpc3BsYXkgdGltZXIgcGFuZWwgaW4gdGhlIGJvdHRvbS5cbiAgICogLSBgbm9uZWAgLSBkbyBub3QgZGlzcGxheSBhIHRpbWVyIHBhbmVsLlxuICAgKlxuICAgKiBJZiB0aGUgdmFsdWUgaXMgbm90IGVxdWFsIHRvICdub25lJywgdGhlIHN1cnZleSBjYWxscyB0aGUgYHN0YXJ0VGltZXIoKWAgbWV0aG9kIG9uIHN1cnZleSByZW5kZXJpbmcuXG4gICAqIEBzZWUgc2hvd1RpbWVyUGFuZWxNb2RlXG4gICAqIEBzZWUgc3RhcnRUaW1lclxuICAgKiBAc2VlIHN0b3BUaW1lclxuICAgKi9cbiAgcHVibGljIGdldCBzaG93VGltZXJQYW5lbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93VGltZXJQYW5lbFwiLCBcIm5vbmVcIik7XG4gIH1cbiAgcHVibGljIHNldCBzaG93VGltZXJQYW5lbCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dUaW1lclBhbmVsXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBpc1RpbWVyUGFuZWxTaG93aW5nT25Ub3AoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNUaW1lclN0YXJ0ZWQgJiYgdGhpcy5zaG93VGltZXJQYW5lbCA9PSBcInRvcFwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNUaW1lclBhbmVsU2hvd2luZ09uQm90dG9tKCkge1xuICAgIHJldHVybiB0aGlzLmlzVGltZXJTdGFydGVkICYmIHRoaXMuc2hvd1RpbWVyUGFuZWwgPT0gXCJib3R0b21cIjtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXQgYSB2YWx1ZSB0aGF0IHNwZWNpZmllcyB3aGV0aGVyIHRoZSB0aW1lciBkaXNwbGF5cyBpbmZvcm1hdGlvbiBmb3IgdGhlIHBhZ2Ugb3IgZm9yIHRoZSBlbnRpcmUgc3VydmV5LlxuICAgKlxuICAgKiBUaGUgYXZhaWxhYmxlIG9wdGlvbnM6XG4gICAqXG4gICAqIC0gYHBhZ2VgIC0gc2hvdyB0aW1lciBpbmZvcm1hdGlvbiBmb3IgcGFnZVxuICAgKiAtIGBzdXJ2ZXlgIC0gc2hvdyB0aW1lciBpbmZvcm1hdGlvbiBmb3Igc3VydmV5XG4gICAqXG4gICAqIFVzZSB0aGUgYG9uVGltZXJQYW5lbEluZm9UZXh0YCBldmVudCB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgdGV4dC5cbiAgICogQHNlZSBzaG93VGltZXJQYW5lbFxuICAgKiBAc2VlIG9uVGltZXJQYW5lbEluZm9UZXh0XG4gICAqL1xuICBwdWJsaWMgZ2V0IHNob3dUaW1lclBhbmVsTW9kZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93VGltZXJQYW5lbE1vZGVcIiwgXCJhbGxcIik7XG4gIH1cbiAgcHVibGljIHNldCBzaG93VGltZXJQYW5lbE1vZGUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93VGltZXJQYW5lbE1vZGVcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHRpbWVySW5mb1RleHQoKTogc3RyaW5nIHtcbiAgICB2YXIgb3B0aW9ucyA9IHsgdGV4dDogdGhpcy5nZXRUaW1lckluZm9UZXh0KCkgfTtcbiAgICB0aGlzLm9uVGltZXJQYW5lbEluZm9UZXh0LmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgdmFyIGxvYyA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzLCB0cnVlKTtcbiAgICBsb2MudGV4dCA9IG9wdGlvbnMudGV4dDtcbiAgICByZXR1cm4gbG9jLnRleHRPckh0bWw7XG4gIH1cbiAgcHJpdmF0ZSBnZXRUaW1lckluZm9UZXh0KCkge1xuICAgIHZhciBwYWdlID0gdGhpcy5jdXJyZW50UGFnZTtcbiAgICBpZiAoIXBhZ2UpIHJldHVybiBcIlwiO1xuICAgIHZhciBwYWdlU3BlbnQgPSB0aGlzLmdldERpc3BsYXlUaW1lKHBhZ2UudGltZVNwZW50KTtcbiAgICB2YXIgc3VydmV5U3BlbnQgPSB0aGlzLmdldERpc3BsYXlUaW1lKHRoaXMudGltZVNwZW50KTtcbiAgICB2YXIgcGFnZUxpbWl0U2VjID0gdGhpcy5nZXRQYWdlTWF4VGltZVRvRmluaXNoKHBhZ2UpO1xuICAgIHZhciBwYWdlTGltaXQgPSB0aGlzLmdldERpc3BsYXlUaW1lKHBhZ2VMaW1pdFNlYyk7XG4gICAgdmFyIHN1cnZleUxpbWl0ID0gdGhpcy5nZXREaXNwbGF5VGltZSh0aGlzLm1heFRpbWVUb0ZpbmlzaCk7XG4gICAgaWYgKHRoaXMuc2hvd1RpbWVyUGFuZWxNb2RlID09IFwicGFnZVwiKVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0VGltZXJJbmZvUGFnZVRleHQocGFnZSwgcGFnZVNwZW50LCBwYWdlTGltaXQpO1xuICAgIGlmICh0aGlzLnNob3dUaW1lclBhbmVsTW9kZSA9PSBcInN1cnZleVwiKVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0VGltZXJJbmZvU3VydmV5VGV4dChzdXJ2ZXlTcGVudCwgc3VydmV5TGltaXQpO1xuICAgIGlmICh0aGlzLnNob3dUaW1lclBhbmVsTW9kZSA9PSBcImFsbFwiKSB7XG4gICAgICBpZiAocGFnZUxpbWl0U2VjIDw9IDAgJiYgdGhpcy5tYXhUaW1lVG9GaW5pc2ggPD0gMCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NTdHJpbmcoXCJ0aW1lclNwZW50QWxsXCIpW1wiZm9ybWF0XCJdKFxuICAgICAgICAgIHBhZ2VTcGVudCxcbiAgICAgICAgICBzdXJ2ZXlTcGVudFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHBhZ2VMaW1pdFNlYyA+IDAgJiYgdGhpcy5tYXhUaW1lVG9GaW5pc2ggPiAwKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldExvY1N0cmluZyhcInRpbWVyTGltaXRBbGxcIilbXCJmb3JtYXRcIl0oXG4gICAgICAgICAgcGFnZVNwZW50LFxuICAgICAgICAgIHBhZ2VMaW1pdCxcbiAgICAgICAgICBzdXJ2ZXlTcGVudCxcbiAgICAgICAgICBzdXJ2ZXlMaW1pdFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgbGV0IHBhZ2VUZXh0ID0gdGhpcy5nZXRUaW1lckluZm9QYWdlVGV4dChwYWdlLCBwYWdlU3BlbnQsIHBhZ2VMaW1pdCk7XG4gICAgICBsZXQgc3VydmV5VGV4dCA9IHRoaXMuZ2V0VGltZXJJbmZvU3VydmV5VGV4dChzdXJ2ZXlTcGVudCwgc3VydmV5TGltaXQpO1xuICAgICAgcmV0dXJuIHBhZ2VUZXh0ICsgXCIgXCIgKyBzdXJ2ZXlUZXh0O1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuICBwcml2YXRlIGdldFRpbWVySW5mb1BhZ2VUZXh0KFxuICAgIHBhZ2U6IFBhZ2VNb2RlbCxcbiAgICBwYWdlU3BlbnQ6IHN0cmluZyxcbiAgICBwYWdlTGltaXQ6IHN0cmluZ1xuICApOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFBhZ2VNYXhUaW1lVG9GaW5pc2gocGFnZSkgPiAwXG4gICAgICA/IHRoaXMuZ2V0TG9jU3RyaW5nKFwidGltZXJMaW1pdFBhZ2VcIilbXCJmb3JtYXRcIl0ocGFnZVNwZW50LCBwYWdlTGltaXQpXG4gICAgICA6IHRoaXMuZ2V0TG9jU3RyaW5nKFwidGltZXJTcGVudFBhZ2VcIilbXCJmb3JtYXRcIl0ocGFnZVNwZW50LCBwYWdlTGltaXQpO1xuICB9XG4gIHByaXZhdGUgZ2V0VGltZXJJbmZvU3VydmV5VGV4dChcbiAgICBzdXJ2ZXlTcGVudDogc3RyaW5nLFxuICAgIHN1cnZleUxpbWl0OiBzdHJpbmdcbiAgKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5tYXhUaW1lVG9GaW5pc2ggPiAwXG4gICAgICA/IHRoaXMuZ2V0TG9jU3RyaW5nKFwidGltZXJMaW1pdFN1cnZleVwiKVtcImZvcm1hdFwiXShcbiAgICAgICAgICBzdXJ2ZXlTcGVudCxcbiAgICAgICAgICBzdXJ2ZXlMaW1pdFxuICAgICAgICApXG4gICAgICA6IHRoaXMuZ2V0TG9jU3RyaW5nKFwidGltZXJTcGVudFN1cnZleVwiKVtcImZvcm1hdFwiXShcbiAgICAgICAgICBzdXJ2ZXlTcGVudCxcbiAgICAgICAgICBzdXJ2ZXlMaW1pdFxuICAgICAgICApO1xuICB9XG4gIHByaXZhdGUgZ2V0RGlzcGxheVRpbWUodmFsOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHZhciBtaW4gPSBNYXRoLmZsb29yKHZhbCAvIDYwKTtcbiAgICB2YXIgc2VjID0gdmFsICUgNjA7XG4gICAgdmFyIHJlcyA9IFwiXCI7XG4gICAgaWYgKG1pbiA+IDApIHtcbiAgICAgIHJlcyArPSBtaW4gKyBcIiBcIiArIHRoaXMuZ2V0TG9jU3RyaW5nKFwidGltZXJNaW5cIik7XG4gICAgfVxuICAgIGlmIChyZXMgJiYgc2VjID09IDApIHJldHVybiByZXM7XG4gICAgaWYgKHJlcykgcmVzICs9IFwiIFwiO1xuICAgIHJldHVybiByZXMgKyBzZWMgKyBcIiBcIiArIHRoaXMuZ2V0TG9jU3RyaW5nKFwidGltZXJTZWNcIik7XG4gIH1cbiAgcHJpdmF0ZSB0aW1lckZ1bmM6IGFueSA9IG51bGw7XG4gIC8qKlxuICAgKiBTdGFydHMgYSB0aW1lciB0aGF0IHdpbGwgY2FsY3VsYXRlIGhvdyBtdWNoIHRpbWUgZW5kLXVzZXIgc3BlbmRzIG9uIHRoZSBzdXJ2ZXkgb3Igb24gcGFnZXMuXG4gICAqIEBzZWUgc3RvcFRpbWVyXG4gICAqIEBzZWUgdGltZVNwZW50XG4gICAqL1xuICBwdWJsaWMgc3RhcnRUaW1lcigpIHtcbiAgICBpZiAodGhpcy5pc1RpbWVyU3RhcnRlZCB8fCB0aGlzLmlzRGVzaWduTW9kZSkgcmV0dXJuO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnRpbWVyRnVuYyA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2VsZi5kb1RpbWVyKCk7XG4gICAgfTtcbiAgICB0aGlzLmlzVGltZXJTdGFydGVkID0gdHJ1ZTtcbiAgICBTdXJ2ZXlUaW1lci5pbnN0YW5jZS5zdGFydCh0aGlzLnRpbWVyRnVuYyk7XG4gIH1cbiAgc3RhcnRUaW1lckZyb21VSSgpIHtcbiAgICBpZiAodGhpcy5zaG93VGltZXJQYW5lbCAhPSBcIm5vbmVcIiAmJiB0aGlzLnN0YXRlID09PSBcInJ1bm5pbmdcIikge1xuICAgICAgdGhpcy5zdGFydFRpbWVyKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBTdG9wcyB0aGUgdGltZXIuXG4gICAqIEBzZWUgc3RhcnRUaW1lclxuICAgKiBAc2VlIHRpbWVTcGVudFxuICAgKi9cbiAgcHVibGljIHN0b3BUaW1lcigpIHtcbiAgICBpZiAoIXRoaXMuaXNUaW1lclN0YXJ0ZWQpIHJldHVybjtcbiAgICB0aGlzLmlzVGltZXJTdGFydGVkID0gZmFsc2U7XG4gICAgU3VydmV5VGltZXIuaW5zdGFuY2Uuc3RvcCh0aGlzLnRpbWVyRnVuYyk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHRpbWUgaW4gc2Vjb25kcyBhbiBlbmQgdXNlciBzcGVuZHMgb24gdGhlIHN1cnZleVxuICAgKiBAc2VlIHN0YXJ0VGltZXJcbiAgICogQHNlZSBQYWdlTW9kZWwudGltZVNwZW50XG4gICAqL1xuICBwdWJsaWMgdGltZVNwZW50ID0gMDtcbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgbWF4aW11bSB0aW1lIGluIHNlY29uZHMgdGhhdCBlbmQgdXNlciBoYXMgdG8gY29tcGxldGUgYSBzdXJ2ZXkuIElmIHRoZSB2YWx1ZSBpcyAwIG9yIGxlc3MsIGFuIGVuZCB1c2VyIGhhcyBubyB0aW1lIGxpbWl0IHRvIGZpbmlzaCBhIHN1cnZleS5cbiAgICogQHNlZSBzdGFydFRpbWVyXG4gICAqIEBzZWUgbWF4VGltZVRvRmluaXNoUGFnZVxuICAgKi9cbiAgcHVibGljIGdldCBtYXhUaW1lVG9GaW5pc2goKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWF4VGltZVRvRmluaXNoXCIsIDApO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4VGltZVRvRmluaXNoKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWF4VGltZVRvRmluaXNoXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgbWF4aW11bSB0aW1lIGluIHNlY29uZHMgdGhhdCBlbmQgdXNlciBoYXMgdG8gY29tcGxldGUgYSBwYWdlIGluIHRoZSBzdXJ2ZXkuIElmIHRoZSB2YWx1ZSBpcyAwIG9yIGxlc3MsIGFuIGVuZCB1c2VyIGhhcyBubyB0aW1lIGxpbWl0LlxuICAgKlxuICAgKiBZb3UgbWF5IG92ZXJyaWRlIHRoaXMgdmFsdWUgZm9yIGV2ZXJ5IHBhZ2UuXG4gICAqIEBzZWUgc3RhcnRUaW1lclxuICAgKiBAc2VlIG1heFRpbWVUb0ZpbmlzaFxuICAgKiBAc2VlIFBhZ2VNb2RlbC5tYXhUaW1lVG9GaW5pc2hcbiAgICovXG4gIHB1YmxpYyBnZXQgbWF4VGltZVRvRmluaXNoUGFnZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtYXhUaW1lVG9GaW5pc2hQYWdlXCIsIDApO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4VGltZVRvRmluaXNoUGFnZSh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1heFRpbWVUb0ZpbmlzaFBhZ2VcIiwgdmFsKTtcbiAgfVxuICBwcml2YXRlIGdldFBhZ2VNYXhUaW1lVG9GaW5pc2gocGFnZTogUGFnZU1vZGVsKSB7XG4gICAgaWYgKCFwYWdlIHx8IHBhZ2UubWF4VGltZVRvRmluaXNoIDwgMCkgcmV0dXJuIDA7XG4gICAgcmV0dXJuIHBhZ2UubWF4VGltZVRvRmluaXNoID4gMFxuICAgICAgPyBwYWdlLm1heFRpbWVUb0ZpbmlzaFxuICAgICAgOiB0aGlzLm1heFRpbWVUb0ZpbmlzaFBhZ2U7XG4gIH1cbiAgcHJvdGVjdGVkIGRvVGltZXIoKSB7XG4gICAgdmFyIHBhZ2UgPSB0aGlzLmN1cnJlbnRQYWdlO1xuICAgIGlmIChwYWdlKSB7XG4gICAgICBwYWdlLnRpbWVTcGVudCA9IHBhZ2UudGltZVNwZW50ICsgMTtcbiAgICB9XG4gICAgdGhpcy50aW1lU3BlbnQgPSB0aGlzLnRpbWVTcGVudCArIDE7XG4gICAgdGhpcy5vblRpbWVyLmZpcmUodGhpcywge30pO1xuICAgIGlmICh0aGlzLm1heFRpbWVUb0ZpbmlzaCA+IDAgJiYgdGhpcy5tYXhUaW1lVG9GaW5pc2ggPT0gdGhpcy50aW1lU3BlbnQpIHtcbiAgICAgIHRoaXMuY29tcGxldGVMYXN0UGFnZSgpO1xuICAgIH1cbiAgICBpZiAocGFnZSkge1xuICAgICAgdmFyIHBhZ2VMaW1pdCA9IHRoaXMuZ2V0UGFnZU1heFRpbWVUb0ZpbmlzaChwYWdlKTtcbiAgICAgIGlmIChwYWdlTGltaXQgPiAwICYmIHBhZ2VMaW1pdCA9PSBwYWdlLnRpbWVTcGVudCkge1xuICAgICAgICBpZiAodGhpcy5pc0xhc3RQYWdlKSB7XG4gICAgICAgICAgdGhpcy5jb21wbGV0ZUxhc3RQYWdlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5uZXh0UGFnZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgaW5TdXJ2ZXkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLy9JU3VydmV5SW1wbGVtZW50b3JcbiAgZ2V0U3VydmV5RGF0YSgpOiBJU3VydmV5RGF0YSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgZ2V0U3VydmV5KCk6IElTdXJ2ZXkge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGdldFRleHRQcm9jZXNzb3IoKTogSVRleHRQcm9jZXNzb3Ige1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIC8vSVN1cnZleVRyaWdnZXJPd25lclxuICBnZXRPYmplY3RzKHBhZ2VzOiBzdHJpbmdbXSwgcXVlc3Rpb25zOiBzdHJpbmdbXSk6IGFueVtdIHtcbiAgICB2YXIgcmVzdWx0OiBhbnlbXSA9IFtdO1xuICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHJlc3VsdCwgdGhpcy5nZXRQYWdlc0J5TmFtZXMocGFnZXMpKTtcbiAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShyZXN1bHQsIHRoaXMuZ2V0UXVlc3Rpb25zQnlOYW1lcyhxdWVzdGlvbnMpKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHNldFRyaWdnZXJWYWx1ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnksIGlzVmFyaWFibGU6IGJvb2xlYW4pIHtcbiAgICBpZiAoIW5hbWUpIHJldHVybjtcbiAgICBpZiAoaXNWYXJpYWJsZSkge1xuICAgICAgdGhpcy5zZXRWYXJpYWJsZShuYW1lLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuZ2V0UXVlc3Rpb25CeU5hbWUobmFtZSk7XG4gICAgICBpZiAoISFxdWVzdGlvbikge1xuICAgICAgICBxdWVzdGlvbi52YWx1ZSA9IHZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHByb2Nlc3NvciA9IG5ldyBQcm9jZXNzVmFsdWUoKTtcbiAgICAgICAgdmFyIGZpcnN0TmFtZSA9IHByb2Nlc3Nvci5nZXRGaXJzdE5hbWUobmFtZSk7XG4gICAgICAgIGlmIChmaXJzdE5hbWUgPT0gbmFtZSkge1xuICAgICAgICAgIHRoaXMuc2V0VmFsdWUobmFtZSwgdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghdGhpcy5nZXRRdWVzdGlvbkJ5TmFtZShmaXJzdE5hbWUpKSByZXR1cm47XG4gICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmdldFVuYmluZFZhbHVlKHRoaXMuZ2V0RmlsdGVyZWRWYWx1ZXMoKSk7XG4gICAgICAgICAgcHJvY2Vzc29yLnNldFZhbHVlKGRhdGEsIG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICB0aGlzLnNldFZhbHVlKGZpcnN0TmFtZSwgZGF0YVtmaXJzdE5hbWVdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb3B5VHJpZ2dlclZhbHVlKG5hbWU6IHN0cmluZywgZnJvbU5hbWU6IHN0cmluZykge1xuICAgIGlmICghbmFtZSB8fCAhZnJvbU5hbWUpIHJldHVybjtcbiAgICB2YXIgcHJvY2Vzc29yID0gbmV3IFByb2Nlc3NWYWx1ZSgpO1xuICAgIHZhciB2YWx1ZSA9IHByb2Nlc3Nvci5nZXRWYWx1ZShmcm9tTmFtZSwgdGhpcy5nZXRGaWx0ZXJlZFZhbHVlcygpKTtcbiAgICB0aGlzLnNldFRyaWdnZXJWYWx1ZShuYW1lLCB2YWx1ZSwgZmFsc2UpO1xuICB9XG4gIHByaXZhdGUgaXNGb2N1c2luZ1F1ZXN0aW9uOiBib29sZWFuO1xuICBmb2N1c1F1ZXN0aW9uKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuZ2V0UXVlc3Rpb25CeU5hbWUobmFtZSwgdHJ1ZSk7XG4gICAgaWYgKCFxdWVzdGlvbiB8fCAhcXVlc3Rpb24uaXNWaXNpYmxlIHx8ICFxdWVzdGlvbi5wYWdlKSByZXR1cm4gZmFsc2U7XG4gICAgdGhpcy5pc0ZvY3VzaW5nUXVlc3Rpb24gPSB0cnVlO1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSA8UGFnZU1vZGVsPnF1ZXN0aW9uLnBhZ2U7XG4gICAgcXVlc3Rpb24uZm9jdXMoKTtcbiAgICB0aGlzLmlzRm9jdXNpbmdRdWVzdGlvbiA9IGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHB1YmxpYyBnZXRFbGVtZW50V3JhcHBlckNvbXBvbmVudE5hbWUoZWxlbWVudDogYW55LCByZWFzb24/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChyZWFzb24gPT09IFwibG9nby1pbWFnZVwiKSB7XG4gICAgICByZXR1cm4gXCJzdi1sb2dvLWltYWdlXCI7XG4gICAgfVxuICAgIHJldHVybiBTdXJ2ZXlNb2RlbC5UZW1wbGF0ZVJlbmRlcmVyQ29tcG9uZW50TmFtZTtcbiAgfVxuICBwdWJsaWMgZ2V0Um93V3JhcHBlckNvbXBvbmVudE5hbWUocm93OiBRdWVzdGlvblJvd01vZGVsKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU3VydmV5TW9kZWwuVGVtcGxhdGVSZW5kZXJlckNvbXBvbmVudE5hbWU7XG4gIH1cbiAgcHVibGljIGdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50RGF0YShlbGVtZW50OiBhbnksIHJlYXNvbj86IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cbiAgcHVibGljIGdldFJvd1dyYXBwZXJDb21wb25lbnREYXRhKHJvdzogUXVlc3Rpb25Sb3dNb2RlbCk6IGFueSB7XG4gICAgcmV0dXJuIHJvdztcbiAgfVxuICBwdWJsaWMgZ2V0SXRlbVZhbHVlV3JhcHBlckNvbXBvbmVudE5hbWUoXG4gICAgaXRlbTogSXRlbVZhbHVlLFxuICAgIHF1ZXN0aW9uOiBRdWVzdGlvblNlbGVjdEJhc2VcbiAgKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU3VydmV5TW9kZWwuVGVtcGxhdGVSZW5kZXJlckNvbXBvbmVudE5hbWU7XG4gIH1cbiAgcHVibGljIGdldEl0ZW1WYWx1ZVdyYXBwZXJDb21wb25lbnREYXRhKFxuICAgIGl0ZW06IEl0ZW1WYWx1ZSxcbiAgICBxdWVzdGlvbjogUXVlc3Rpb25TZWxlY3RCYXNlXG4gICk6IGFueSB7XG4gICAgcmV0dXJuIGl0ZW07XG4gIH1cbiAgcHVibGljIGdldE1hdHJpeENlbGxUZW1wbGF0ZURhdGEoY2VsbDogYW55KSB7XG4gICAgcmV0dXJuIGNlbGwucXVlc3Rpb247XG4gIH1cbiAgcHVibGljIHNlYXJjaFRleHQodGV4dDogc3RyaW5nKTogQXJyYXk8SUZpbmRFbGVtZW50PiB7XG4gICAgaWYgKCEhdGV4dCkgdGV4dCA9IHRleHQudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgcmVzOiBBcnJheTxJRmluZEVsZW1lbnQ+ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnBhZ2VzW2ldLnNlYXJjaFRleHQodGV4dCwgcmVzKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgbWV0aG9kIHRvIGRpc3Bvc2Ugc3VydmV5IG1vZGVsIHByb3Blcmx5LlxuICAgKi9cbiAgcHVibGljIGRpc3Bvc2UoKSB7XG4gICAgc3VwZXIuZGlzcG9zZSgpO1xuICAgIHRoaXMuZWRpdGluZ09iaiA9IG51bGw7XG4gICAgaWYgKCF0aGlzLnBhZ2VzKSByZXR1cm47XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnBhZ2VzW2ldLmRpc3Bvc2UoKTtcbiAgICB9XG4gICAgdGhpcy5wYWdlcy5zcGxpY2UoMCwgdGhpcy5wYWdlcy5sZW5ndGgpO1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSBudWxsO1xuICB9XG59XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXCJzdXJ2ZXlcIiwgW1xuICB7XG4gICAgbmFtZTogXCJsb2NhbGVcIixcbiAgICBjaG9pY2VzOiAoKSA9PiB7XG4gICAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldExvY2FsZXModHJ1ZSk7XG4gICAgfSxcbiAgICBvbkdldFZhbHVlOiAob2JqOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgcmV0dXJuIG9iai5sb2NhbGUgPT0gc3VydmV5TG9jYWxpemF0aW9uLmRlZmF1bHRMb2NhbGUgPyBudWxsIDogb2JqLmxvY2FsZTtcbiAgICB9LFxuICB9LFxuICB7IG5hbWU6IFwidGl0bGVcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1RpdGxlXCIsIGRlcGVuZHNPbjogXCJsb2NhbGVcIiB9LFxuICB7XG4gICAgbmFtZTogXCJkZXNjcmlwdGlvbjp0ZXh0XCIsXG4gICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0Rlc2NyaXB0aW9uXCIsXG4gICAgZGVwZW5kc09uOiBcImxvY2FsZVwiLFxuICB9LFxuICB7IG5hbWU6IFwibG9nb1wiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jTG9nb1wiIH0sXG4gIHsgbmFtZTogXCJsb2dvV2lkdGhcIiwgZGVmYXVsdDogXCIzMDBweFwiLCBtaW5WYWx1ZTogMCB9LFxuICB7IG5hbWU6IFwibG9nb0hlaWdodFwiLCBkZWZhdWx0OiBcIjIwMHB4XCIsIG1pblZhbHVlOiAwIH0sXG4gIHtcbiAgICBuYW1lOiBcImxvZ29GaXRcIixcbiAgICBkZWZhdWx0OiBcImNvbnRhaW5cIixcbiAgICBjaG9pY2VzOiBbXCJub25lXCIsIFwiY29udGFpblwiLCBcImNvdmVyXCIsIFwiZmlsbFwiXSxcbiAgfSxcbiAge1xuICAgIG5hbWU6IFwibG9nb1Bvc2l0aW9uXCIsXG4gICAgZGVmYXVsdDogXCJsZWZ0XCIsXG4gICAgY2hvaWNlczogW1wibm9uZVwiLCBcImxlZnRcIiwgXCJyaWdodFwiLCBcInRvcFwiLCBcImJvdHRvbVwiXSxcbiAgfSxcbiAgeyBuYW1lOiBcImZvY3VzRmlyc3RRdWVzdGlvbkF1dG9tYXRpYzpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSxcbiAgeyBuYW1lOiBcImZvY3VzT25GaXJzdEVycm9yOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICB7IG5hbWU6IFwiY29tcGxldGVkSHRtbDpodG1sXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NDb21wbGV0ZWRIdG1sXCIgfSxcbiAge1xuICAgIG5hbWU6IFwiY29tcGxldGVkQmVmb3JlSHRtbDpodG1sXCIsXG4gICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0NvbXBsZXRlZEJlZm9yZUh0bWxcIixcbiAgfSxcbiAge1xuICAgIG5hbWU6IFwiY29tcGxldGVkSHRtbE9uQ29uZGl0aW9uOmh0bWxjb25kaXRpb25zXCIsXG4gICAgY2xhc3NOYW1lOiBcImh0bWxjb25kaXRpb25pdGVtXCIsXG4gIH0sXG4gIHsgbmFtZTogXCJsb2FkaW5nSHRtbDpodG1sXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NMb2FkaW5nSHRtbFwiIH0sXG4gIHsgbmFtZTogXCJwYWdlczpzdXJ2ZXlwYWdlc1wiLCBjbGFzc05hbWU6IFwicGFnZVwiIH0sXG4gIHtcbiAgICBuYW1lOiBcInF1ZXN0aW9uc1wiLFxuICAgIGFsdGVybmF0aXZlTmFtZTogXCJlbGVtZW50c1wiLFxuICAgIGJhc2VDbGFzc05hbWU6IFwicXVlc3Rpb25cIixcbiAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICBpc0xpZ2h0U2VyaWFsaXphYmxlOiBmYWxzZSxcbiAgICBvbkdldFZhbHVlOiBmdW5jdGlvbihvYmo6IGFueSk6IGFueSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuICAgIG9uU2V0VmFsdWU6IGZ1bmN0aW9uKG9iajogYW55LCB2YWx1ZTogYW55LCBqc29uQ29udmVydGVyOiBhbnkpIHtcbiAgICAgIHZhciBwYWdlID0gb2JqLmFkZE5ld1BhZ2UoXCJcIik7XG4gICAgICBqc29uQ29udmVydGVyLnRvT2JqZWN0KHsgcXVlc3Rpb25zOiB2YWx1ZSB9LCBwYWdlKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgbmFtZTogXCJ0cmlnZ2Vyczp0cmlnZ2Vyc1wiLFxuICAgIGJhc2VDbGFzc05hbWU6IFwic3VydmV5dHJpZ2dlclwiLFxuICAgIGNsYXNzTmFtZVBhcnQ6IFwidHJpZ2dlclwiLFxuICB9LFxuICB7XG4gICAgbmFtZTogXCJjYWxjdWxhdGVkVmFsdWVzOmNhbGN1bGF0ZWR2YWx1ZXNcIixcbiAgICBjbGFzc05hbWU6IFwiY2FsY3VsYXRlZHZhbHVlXCIsXG4gIH0sXG4gIHsgbmFtZTogXCJzdXJ2ZXlJZFwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICB7IG5hbWU6IFwic3VydmV5UG9zdElkXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gIHsgbmFtZTogXCJzdXJ2ZXlTaG93RGF0YVNhdmluZzpib29sZWFuXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gIFwiY29va2llTmFtZVwiLFxuICBcInNlbmRSZXN1bHRPblBhZ2VOZXh0OmJvb2xlYW5cIixcbiAge1xuICAgIG5hbWU6IFwic2hvd05hdmlnYXRpb25CdXR0b25zXCIsXG4gICAgZGVmYXVsdDogXCJib3R0b21cIixcbiAgICBjaG9pY2VzOiBbXCJub25lXCIsIFwidG9wXCIsIFwiYm90dG9tXCIsIFwiYm90aFwiXSxcbiAgfSxcbiAgeyBuYW1lOiBcInNob3dQcmV2QnV0dG9uOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICB7IG5hbWU6IFwic2hvd1RpdGxlOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICB7IG5hbWU6IFwic2hvd1BhZ2VUaXRsZXM6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sXG4gIHsgbmFtZTogXCJzaG93Q29tcGxldGVkUGFnZTpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSxcbiAgXCJuYXZpZ2F0ZVRvVXJsXCIsXG4gIHtcbiAgICBuYW1lOiBcIm5hdmlnYXRlVG9VcmxPbkNvbmRpdGlvbjp1cmxjb25kaXRpb25zXCIsXG4gICAgY2xhc3NOYW1lOiBcInVybGNvbmRpdGlvbml0ZW1cIixcbiAgfSxcbiAge1xuICAgIG5hbWU6IFwicXVlc3Rpb25zT3JkZXJcIixcbiAgICBkZWZhdWx0OiBcImluaXRpYWxcIixcbiAgICBjaG9pY2VzOiBbXCJpbml0aWFsXCIsIFwicmFuZG9tXCJdLFxuICB9LFxuICBcInNob3dQYWdlTnVtYmVyczpib29sZWFuXCIsXG4gIHtcbiAgICBuYW1lOiBcInNob3dRdWVzdGlvbk51bWJlcnNcIixcbiAgICBkZWZhdWx0OiBcIm9uXCIsXG4gICAgY2hvaWNlczogW1wib25cIiwgXCJvblBhZ2VcIiwgXCJvZmZcIl0sXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcInF1ZXN0aW9uVGl0bGVMb2NhdGlvblwiLFxuICAgIGRlZmF1bHQ6IFwidG9wXCIsXG4gICAgY2hvaWNlczogW1widG9wXCIsIFwiYm90dG9tXCIsIFwibGVmdFwiXSxcbiAgfSxcbiAge1xuICAgIG5hbWU6IFwicXVlc3Rpb25EZXNjcmlwdGlvbkxvY2F0aW9uXCIsXG4gICAgZGVmYXVsdDogXCJ1bmRlclRpdGxlXCIsXG4gICAgY2hvaWNlczogW1widW5kZXJJbnB1dFwiLCBcInVuZGVyVGl0bGVcIl0sXG4gIH0sXG4gIHsgbmFtZTogXCJxdWVzdGlvbkVycm9yTG9jYXRpb25cIiwgZGVmYXVsdDogXCJ0b3BcIiwgY2hvaWNlczogW1widG9wXCIsIFwiYm90dG9tXCJdIH0sXG4gIHtcbiAgICBuYW1lOiBcInNob3dQcm9ncmVzc0JhclwiLFxuICAgIGRlZmF1bHQ6IFwib2ZmXCIsXG4gICAgY2hvaWNlczogW1wib2ZmXCIsIFwidG9wXCIsIFwiYm90dG9tXCIsIFwiYm90aFwiXSxcbiAgfSxcbiAge1xuICAgIG5hbWU6IFwicHJvZ3Jlc3NCYXJUeXBlXCIsXG4gICAgZGVmYXVsdDogXCJwYWdlc1wiLFxuICAgIGNob2ljZXM6IFtcbiAgICAgIFwicGFnZXNcIixcbiAgICAgIFwicXVlc3Rpb25zXCIsXG4gICAgICBcInJlcXVpcmVkUXVlc3Rpb25zXCIsXG4gICAgICBcImNvcnJlY3RRdWVzdGlvbnNcIixcbiAgICAgIFwiYnV0dG9uc1wiLFxuICAgIF0sXG4gIH0sXG4gIHsgbmFtZTogXCJtb2RlXCIsIGRlZmF1bHQ6IFwiZWRpdFwiLCBjaG9pY2VzOiBbXCJlZGl0XCIsIFwiZGlzcGxheVwiXSB9LFxuICB7IG5hbWU6IFwic3RvcmVPdGhlcnNBc0NvbW1lbnQ6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sXG4gIHsgbmFtZTogXCJtYXhUZXh0TGVuZ3RoOm51bWJlclwiLCBkZWZhdWx0OiAwLCBtaW5WYWx1ZTogMCB9LFxuICB7IG5hbWU6IFwibWF4T3RoZXJzTGVuZ3RoOm51bWJlclwiLCBkZWZhdWx0OiAwLCBtaW5WYWx1ZTogMCB9LFxuICBcImdvTmV4dFBhZ2VBdXRvbWF0aWM6Ym9vbGVhblwiLFxuICB7XG4gICAgbmFtZTogXCJjbGVhckludmlzaWJsZVZhbHVlc1wiLFxuICAgIGRlZmF1bHQ6IFwib25Db21wbGV0ZVwiLFxuICAgIGNob2ljZXM6IFtcIm5vbmVcIiwgXCJvbkNvbXBsZXRlXCIsIFwib25IaWRkZW5cIiwgXCJvbkhpZGRlbkNvbnRhaW5lclwiXSxcbiAgfSxcbiAge1xuICAgIG5hbWU6IFwiY2hlY2tFcnJvcnNNb2RlXCIsXG4gICAgZGVmYXVsdDogXCJvbk5leHRQYWdlXCIsXG4gICAgY2hvaWNlczogW1wib25OZXh0UGFnZVwiLCBcIm9uVmFsdWVDaGFuZ2VkXCIsIFwib25WYWx1ZUNoYW5naW5nXCIsIFwib25Db21wbGV0ZVwiXSxcbiAgfSxcbiAge1xuICAgIG5hbWU6IFwidGV4dFVwZGF0ZU1vZGVcIixcbiAgICBkZWZhdWx0OiBcIm9uQmx1clwiLFxuICAgIGNob2ljZXM6IFtcIm9uQmx1clwiLCBcIm9uVHlwaW5nXCJdLFxuICB9LFxuICB7IG5hbWU6IFwic3RhcnRTdXJ2ZXlUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NTdGFydFN1cnZleVRleHRcIiB9LFxuICB7IG5hbWU6IFwicGFnZVByZXZUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NQYWdlUHJldlRleHRcIiB9LFxuICB7IG5hbWU6IFwicGFnZU5leHRUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NQYWdlTmV4dFRleHRcIiB9LFxuICB7IG5hbWU6IFwiY29tcGxldGVUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NDb21wbGV0ZVRleHRcIiB9LFxuICB7IG5hbWU6IFwicHJldmlld1RleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1ByZXZpZXdUZXh0XCIgfSxcbiAgeyBuYW1lOiBcImVkaXRUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NFZGl0VGV4dFwiIH0sXG4gIHsgbmFtZTogXCJyZXF1aXJlZFRleHRcIiwgZGVmYXVsdDogXCIqXCIgfSxcbiAge1xuICAgIG5hbWU6IFwicXVlc3Rpb25TdGFydEluZGV4XCIsXG4gICAgZGVwZW5kc09uOiBbXCJzaG93UXVlc3Rpb25OdW1iZXJzXCJdLFxuICAgIHZpc2libGVJZjogZnVuY3Rpb24oc3VydmV5OiBhbnkpIHtcbiAgICAgIHJldHVybiAhc3VydmV5IHx8IHN1cnZleS5zaG93UXVlc3Rpb25OdW1iZXJzICE9PSBcIm9mZlwiO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcInF1ZXN0aW9uVGl0bGVQYXR0ZXJuXCIsXG4gICAgZGVmYXVsdDogXCJudW1UaXRsZVJlcXVpcmVcIixcbiAgICBkZXBlbmRzT246IFtcInF1ZXN0aW9uU3RhcnRJbmRleFwiLCBcInJlcXVpcmVkVGV4dFwiXSxcbiAgICBjaG9pY2VzOiAob2JqOiBhbnkpID0+IHtcbiAgICAgIGlmICghb2JqKSByZXR1cm4gW107XG4gICAgICByZXR1cm4gb2JqLmdldFF1ZXN0aW9uVGl0bGVQYXR0ZXJuT3B0aW9ucygpO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcInF1ZXN0aW9uVGl0bGVUZW1wbGF0ZVwiLFxuICAgIHZpc2libGU6IGZhbHNlLFxuICAgIGlzU2VyaWFsaXphYmxlOiBmYWxzZSxcbiAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jUXVlc3Rpb25UaXRsZVRlbXBsYXRlXCIsXG4gIH0sXG4gIHsgbmFtZTogXCJmaXJzdFBhZ2VJc1N0YXJ0ZWQ6Ym9vbGVhblwiLCBkZWZhdWx0OiBmYWxzZSB9LFxuICB7XG4gICAgbmFtZTogXCJpc1NpbmdsZVBhZ2U6Ym9vbGVhblwiLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgIHZpc2libGU6IGZhbHNlLFxuICAgIGlzU2VyaWFsaXphYmxlOiBmYWxzZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6IFwicXVlc3Rpb25zT25QYWdlTW9kZVwiLFxuICAgIGRlZmF1bHQ6IFwic3RhbmRhcmRcIixcbiAgICBjaG9pY2VzOiBbXCJzaW5nbGVQYWdlXCIsIFwic3RhbmRhcmRcIiwgXCJxdWVzdGlvblBlclBhZ2VcIl0sXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcInNob3dQcmV2aWV3QmVmb3JlQ29tcGxldGVcIixcbiAgICBkZWZhdWx0OiBcIm5vUHJldmlld1wiLFxuICAgIGNob2ljZXM6IFtcIm5vUHJldmlld1wiLCBcInNob3dBbGxRdWVzdGlvbnNcIiwgXCJzaG93QW5zd2VyZWRRdWVzdGlvbnNcIl0sXG4gIH0sXG4gIHsgbmFtZTogXCJtYXhUaW1lVG9GaW5pc2g6bnVtYmVyXCIsIGRlZmF1bHQ6IDAsIG1pblZhbHVlOiAwIH0sXG4gIHsgbmFtZTogXCJtYXhUaW1lVG9GaW5pc2hQYWdlOm51bWJlclwiLCBkZWZhdWx0OiAwLCBtaW5WYWx1ZTogMCB9LFxuICB7XG4gICAgbmFtZTogXCJzaG93VGltZXJQYW5lbFwiLFxuICAgIGRlZmF1bHQ6IFwibm9uZVwiLFxuICAgIGNob2ljZXM6IFtcIm5vbmVcIiwgXCJ0b3BcIiwgXCJib3R0b21cIl0sXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcInNob3dUaW1lclBhbmVsTW9kZVwiLFxuICAgIGRlZmF1bHQ6IFwiYWxsXCIsXG4gICAgY2hvaWNlczogW1wiYWxsXCIsIFwicGFnZVwiLCBcInN1cnZleVwiXSxcbiAgfSxcbl0pO1xuIiwiaW1wb3J0IHsgU3VydmV5TW9kZWwgfSBmcm9tICcuL3N1cnZleSc7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQcm9ncmVzc0J1dHRvbnNNb2RlbCB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc3VydmV5OiBTdXJ2ZXlNb2RlbCkge1xuICB9XG4gIHB1YmxpYyBpc0xpc3RFbGVtZW50Q2xpY2thYmxlKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuc3VydmV5Lm9uU2VydmVyVmFsaWRhdGVRdWVzdGlvbnMgfHxcbiAgICAgIHRoaXMuc3VydmV5Lm9uU2VydmVyVmFsaWRhdGVRdWVzdGlvbnMuaXNFbXB0eSB8fFxuICAgICAgdGhpcy5zdXJ2ZXkuY2hlY2tFcnJvcnNNb2RlID09PSBcIm9uQ29tcGxldGVcIikge1xuICAgICAgcmV0dXJuIHRydWU7ICAgIFxuICAgIH1cbiAgICByZXR1cm4gaW5kZXggPD0gdGhpcy5zdXJ2ZXkuY3VycmVudFBhZ2VObyArIDE7XG4gIH1cbiAgcHVibGljIGdldExpc3RFbGVtZW50Q3NzKGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmIChpbmRleCA+PSB0aGlzLnN1cnZleS52aXNpYmxlUGFnZXMubGVuZ3RoKSByZXR1cm47XG4gICAgbGV0IGVsZW1lbnRDc3M6IHN0cmluZyA9IHRoaXMuc3VydmV5LnZpc2libGVQYWdlc1tpbmRleF0ucGFzc2VkID9cbiAgICAgIHRoaXMuc3VydmV5LmNzcy5wcm9ncmVzc0J1dHRvbnNMaXN0RWxlbWVudFBhc3NlZCA6IFwiXCI7XG4gICAgaWYgKHRoaXMuc3VydmV5LmN1cnJlbnRQYWdlTm8gPT09IGluZGV4KSB7XG4gICAgICBlbGVtZW50Q3NzICs9IGVsZW1lbnRDc3MgIT09IFwiXCIgPyBcIiBcIiA6IFwiXCI7XG4gICAgICBlbGVtZW50Q3NzICs9IHRoaXMuc3VydmV5LmNzcy5wcm9ncmVzc0J1dHRvbnNMaXN0RWxlbWVudEN1cnJlbnQ7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc0xpc3RFbGVtZW50Q2xpY2thYmxlKGluZGV4KSkge1xuICAgICAgZWxlbWVudENzcyArPSBlbGVtZW50Q3NzICE9PSBcIlwiID8gXCIgXCIgOiBcIlwiO1xuICAgICAgZWxlbWVudENzcyArPSB0aGlzLnN1cnZleS5jc3MucHJvZ3Jlc3NCdXR0b25zTGlzdEVsZW1lbnROb25DbGlja2FibGU7XG4gICAgfVxuICAgIHJldHVybiBlbGVtZW50Q3NzO1xuICB9XG4gIHB1YmxpYyBjbGlja0xpc3RFbGVtZW50KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdXJ2ZXkuaXNEZXNpZ25Nb2RlKSByZXR1cm47XG4gICAgaWYgKGluZGV4IDwgdGhpcy5zdXJ2ZXkuY3VycmVudFBhZ2VObykge1xuICAgICAgdGhpcy5zdXJ2ZXkuY3VycmVudFBhZ2VObyA9IGluZGV4O1xuICAgIH1cbiAgICBlbHNlIGlmIChpbmRleCA+IHRoaXMuc3VydmV5LmN1cnJlbnRQYWdlTm8pIHtcbiAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IHRoaXMuc3VydmV5LmN1cnJlbnRQYWdlTm87IGkgPCBpbmRleDsgaSsrKSB7XG4gICAgICAgIGlmICghdGhpcy5zdXJ2ZXkubmV4dFBhZ2UoKSkgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBlbmdsaXNoU3RyaW5ncyB9IGZyb20gXCIuL2xvY2FsaXphdGlvbi9lbmdsaXNoXCI7XG5cbmV4cG9ydCB2YXIgc3VydmV5TG9jYWxpemF0aW9uID0ge1xuICBjdXJyZW50TG9jYWxlVmFsdWU6IFwiXCIsXG4gIGRlZmF1bHRMb2NhbGVWYWx1ZTogXCJlblwiLFxuICBsb2NhbGVzOiA8eyBbaW5kZXg6IHN0cmluZ106IGFueSB9Pnt9LFxuICBsb2NhbGVOYW1lczogPHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfT57fSxcbiAgc3VwcG9ydGVkTG9jYWxlczogPEFycmF5PGFueT4+W10sXG4gIGdldCBjdXJyZW50TG9jYWxlKCkge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRMb2NhbGVWYWx1ZSA9PT0gdGhpcy5kZWZhdWx0TG9jYWxlVmFsdWVcbiAgICAgID8gXCJcIlxuICAgICAgOiB0aGlzLmN1cnJlbnRMb2NhbGVWYWx1ZTtcbiAgfSxcbiAgc2V0IGN1cnJlbnRMb2NhbGUodmFsOiBzdHJpbmcpIHtcbiAgICBpZiAodmFsID09PSBcImN6XCIpIHZhbCA9IFwiY3NcIjtcbiAgICB0aGlzLmN1cnJlbnRMb2NhbGVWYWx1ZSA9IHZhbDtcbiAgfSxcbiAgZ2V0IGRlZmF1bHRMb2NhbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdExvY2FsZVZhbHVlO1xuICB9LFxuICBzZXQgZGVmYXVsdExvY2FsZSh2YWw6IHN0cmluZykge1xuICAgIGlmICh2YWwgPT09IFwiY3pcIikgdmFsID0gXCJjc1wiO1xuICAgIHRoaXMuZGVmYXVsdExvY2FsZVZhbHVlID0gdmFsO1xuICB9LFxuICBnZXRMb2NhbGVTdHJpbmdzKGxvYzogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbGVzW2xvY107XG4gIH0sXG4gIGdldEN1cnJlbnRTdHJpbmdzKCk6IGFueSB7XG4gICAgdmFyIGxvYyA9IHRoaXMuY3VycmVudExvY2FsZVxuICAgICAgPyB0aGlzLmxvY2FsZXNbdGhpcy5jdXJyZW50TG9jYWxlXVxuICAgICAgOiB0aGlzLmxvY2FsZXNbdGhpcy5kZWZhdWx0TG9jYWxlXTtcbiAgICBpZiAoIWxvYykgbG9jID0gdGhpcy5sb2NhbGVzW3RoaXMuZGVmYXVsdExvY2FsZV07XG4gICAgcmV0dXJuIGxvYztcbiAgfSxcbiAgZ2V0U3RyaW5nOiBmdW5jdGlvbiAoc3RyTmFtZTogc3RyaW5nKSB7XG4gICAgdmFyIGxvYyA9IHRoaXMuZ2V0Q3VycmVudFN0cmluZ3MoKTtcbiAgICBpZiAoIWxvY1tzdHJOYW1lXSkgbG9jID0gdGhpcy5sb2NhbGVzW3RoaXMuZGVmYXVsdExvY2FsZV07XG4gICAgdmFyIHJlc3VsdCA9IGxvY1tzdHJOYW1lXTtcbiAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMubG9jYWxlc1tcImVuXCJdW3N0ck5hbWVdO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LFxuICBnZXRMb2NhbGVzOiBmdW5jdGlvbiAocmVtb3ZlRGVmYXVsdExvYzogYm9vbGVhbiA9IGZhbHNlKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHJlcy5wdXNoKFwiXCIpO1xuICAgIHZhciBsb2NzID0gdGhpcy5sb2NhbGVzO1xuICAgIGlmICh0aGlzLnN1cHBvcnRlZExvY2FsZXMgJiYgdGhpcy5zdXBwb3J0ZWRMb2NhbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGxvY3MgPSB7fTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zdXBwb3J0ZWRMb2NhbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxvY3NbdGhpcy5zdXBwb3J0ZWRMb2NhbGVzW2ldXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAodmFyIGtleSBpbiBsb2NzKSB7XG4gICAgICBpZiAocmVtb3ZlRGVmYXVsdExvYyAmJiBrZXkgPT0gdGhpcy5kZWZhdWx0TG9jYWxlKSBjb250aW51ZTtcbiAgICAgIHJlcy5wdXNoKGtleSk7XG4gICAgfVxuICAgIHZhciBsb2NOYW1lID0gKGxvYzogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICAgIGlmICghbG9jKSByZXR1cm4gXCJcIjtcbiAgICAgIHZhciByZXMgPSAoPGFueT5zdXJ2ZXlMb2NhbGl6YXRpb24pLmxvY2FsZU5hbWVzW2xvY107XG4gICAgICBpZiAoIXJlcykgcmVzID0gbG9jO1xuICAgICAgcmV0dXJuIHJlcy50b0xvd2VyQ2FzZSgpO1xuICAgIH07XG4gICAgcmVzLnNvcnQoKGEsIGIpOiBudW1iZXIgPT4ge1xuICAgICAgdmFyIHN0cjEgPSBsb2NOYW1lKGEpO1xuICAgICAgdmFyIHN0cjIgPSBsb2NOYW1lKGIpO1xuICAgICAgaWYgKHN0cjEgPT09IHN0cjIpIHJldHVybiAwO1xuICAgICAgcmV0dXJuIHN0cjEgPCBzdHIyID8gLTEgOiAxO1xuICAgIH0pO1xuICAgIHJldHVybiByZXM7XG4gIH0sXG59O1xuXG5leHBvcnQgdmFyIHN1cnZleVN0cmluZ3MgPSBlbmdsaXNoU3RyaW5ncztcbig8YW55PnN1cnZleUxvY2FsaXphdGlvbikubG9jYWxlc1tcImVuXCJdID0gZW5nbGlzaFN0cmluZ3M7XG4oPGFueT5zdXJ2ZXlMb2NhbGl6YXRpb24pLmxvY2FsZU5hbWVzW1wiZW5cIl0gPSBcImVuZ2xpc2hcIjtcbiIsImltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCIuL3N1cnZleVwiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuXG4vKipcbiAqIEEgTW9kZWwgZm9yIGEgc3VydmV5IHJ1bm5pbmcgaW4gdGhlIFdpbmRvdy5cbiAqL1xuZXhwb3J0IGNsYXNzIFN1cnZleVdpbmRvd01vZGVsIGV4dGVuZHMgQmFzZSB7XG4gIHB1YmxpYyBzdGF0aWMgc3VydmV5RWxlbWVudE5hbWUgPSBcIndpbmRvd1N1cnZleUpTXCI7XG4gIHN1cnZleVZhbHVlOiBTdXJ2ZXlNb2RlbDtcbiAgd2luZG93RWxlbWVudDogSFRNTERpdkVsZW1lbnQ7XG5cbiAgdGVtcGxhdGVWYWx1ZTogc3RyaW5nO1xuICBleHBhbmRlZENoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcbiAgc2hvd2luZ0NoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcbiAgY2xvc2VXaW5kb3dPbkNvbXBsZXRlQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoanNvbk9iajogYW55LCBpbml0aWFsTW9kZWw6IFN1cnZleU1vZGVsID0gbnVsbCkge1xuICAgIHN1cGVyKCk7XG4gICAgaWYgKGluaXRpYWxNb2RlbCkge1xuICAgICAgdGhpcy5zdXJ2ZXlWYWx1ZSA9IGluaXRpYWxNb2RlbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdXJ2ZXlWYWx1ZSA9IHRoaXMuY3JlYXRlU3VydmV5KGpzb25PYmopO1xuICAgIH1cbiAgICB0aGlzLnN1cnZleVZhbHVlLnNob3dUaXRsZSA9IGZhbHNlO1xuICAgIGlmIChcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgZG9jdW1lbnQpIHtcbiAgICAgIHRoaXMud2luZG93RWxlbWVudCA9IDxIVE1MRGl2RWxlbWVudD5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIH1cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5zdXJ2ZXkub25Db21wbGV0ZS5hZGQoZnVuY3Rpb24gKHN1cnZleSwgb3B0aW9ucykge1xuICAgICAgc2VsZi5vblN1cnZleUNvbXBsZXRlKCk7XG4gICAgfSk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJ3aW5kb3dcIjtcbiAgfVxuICAvKipcbiAgICogQSBzdXJ2ZXkgb2JqZWN0LlxuICAgKiBAc2VlIFN1cnZleU1vZGVsXG4gICAqL1xuICBwdWJsaWMgZ2V0IHN1cnZleSgpOiBTdXJ2ZXlNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5VmFsdWU7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHZhbHVlIHRvIG5lZ2F0aXZlIHZhbHVlLCBmb3IgZXhhbXBsZSAtMSwgdG8gYXZvaWQgY2xvc2luZyB0aGUgd2luZG93IG9uIGNvbXBsZXRpbmcgdGhlIHN1cnZleS4gTGVhdmUgaXQgZXF1YWxzIHRvIDAgKGRlZmF1bHQgdmFsdWUpIHRvIGNsb3NlIHRoZSB3aW5kb3cgaW1tZWRpYXRlbHksIG9yIHNldCBpdCB0byAzLCA1LCAxMCwgLi4uIHRvIGNsb3NlIHRoZSB3aW5kb3cgaW4gMywgNSwgMTAgc2Vjb25kcy5cbiAgICovXG4gIHB1YmxpYyBjbG9zZU9uQ29tcGxldGVUaW1lb3V0OiBudW1iZXIgPSAwO1xuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSB3aW5kb3cgaXMgY3VycmVudGx5IHNob3dpbmcuIFNldCBpdCB0byB0cnVlIHRvIHNob3cgdGhlIHdpbmRvdyBhbmQgZmFsc2UgdG8gaGlkZSBpdC5cbiAgICogQHNlZSBzaG93XG4gICAqIEBzZWUgaGlkZVxuICAgKi9cbiAgcHVibGljIGdldCBpc1Nob3dpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlzU2hvd2luZ1wiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBpc1Nob3dpbmcodmFsOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuaXNTaG93aW5nID09IHZhbCkgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzU2hvd2luZ1wiLCB2YWwpO1xuICAgIGlmICh0aGlzLnNob3dpbmdDaGFuZ2VkQ2FsbGJhY2spIHRoaXMuc2hvd2luZ0NoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIC8qKlxuICAgKiBTaG93IHRoZSB3aW5kb3dcbiAgICogQHNlZSBoaWRlXG4gICAqIEBzZWUgaXNTaG93aW5nXG4gICAqL1xuICBwdWJsaWMgc2hvdygpIHtcbiAgICB0aGlzLmlzU2hvd2luZyA9IHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIEhpZGUgdGhlIHdpbmRvd1xuICAgKiBAc2VlIHNob3dcbiAgICogQHNlZSBpc1Nob3dpbmdcbiAgICovXG4gIHB1YmxpYyBoaWRlKCkge1xuICAgIHRoaXMuaXNTaG93aW5nID0gZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgd2luZG93IGlzIGV4cGFuZGVkLiBTZXQgaXQgdG8gdHJ1ZSB0byBleHBhbmQgdGhlIHdpbmRvdyBvciBmYWxzZSB0byBjb2xsYXBzZSBpdC5cbiAgICogQHNlZSBleHBhbmRcbiAgICogQHNlZSBjb2xsYXBzZVxuICAgKi9cbiAgcHVibGljIGdldCBpc0V4cGFuZGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc0V4cGFuZGVkXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGlzRXhwYW5kZWQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNFeHBhbmRlZFwiLCB2YWwpO1xuICAgIGlmICghdGhpcy5pc0xvYWRpbmdGcm9tSnNvbiAmJiB0aGlzLmV4cGFuZGVkQ2hhbmdlZENhbGxiYWNrKVxuICAgICAgdGhpcy5leHBhbmRlZENoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgd2luZG93IGFuZCBzdXJ2ZXkgdGl0bGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5LnRpdGxlO1xuICB9XG4gIHB1YmxpYyBzZXQgdGl0bGUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc3VydmV5LnRpdGxlID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGxvY1RpdGxlKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkubG9jVGl0bGU7XG4gIH1cbiAgLyoqXG4gICAqIEV4cGFuZCB0aGUgd2luZG93IHRvIHNob3cgdGhlIHN1cnZleS5cbiAgICovXG4gIHB1YmxpYyBleHBhbmQoKSB7XG4gICAgdGhpcy5leHBhbmRjb2xsYXBzZSh0cnVlKTtcbiAgfVxuICAvKipcbiAgICogQ29sbGFwc2UgdGhlIHdpbmRvdyBhbmQgc2hvdyBzdXJ2ZXkgdGl0bGUgb25seS5cbiAgICovXG4gIHB1YmxpYyBjb2xsYXBzZSgpIHtcbiAgICB0aGlzLmV4cGFuZGNvbGxhcHNlKGZhbHNlKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlU3VydmV5KGpzb25PYmo6IGFueSk6IFN1cnZleU1vZGVsIHtcbiAgICByZXR1cm4gbmV3IFN1cnZleU1vZGVsKGpzb25PYmopO1xuICB9XG4gIHByb3RlY3RlZCBleHBhbmRjb2xsYXBzZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuaXNFeHBhbmRlZCA9IHZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBvblN1cnZleUNvbXBsZXRlKCkge1xuICAgIGlmICh0aGlzLmNsb3NlT25Db21wbGV0ZVRpbWVvdXQgPCAwKSByZXR1cm47XG4gICAgaWYgKHRoaXMuY2xvc2VPbkNvbXBsZXRlVGltZW91dCA9PSAwKSB7XG4gICAgICB0aGlzLmNsb3NlV2luZG93T25Db21wbGV0ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICB2YXIgdGltZXJJZDogYW55ID0gbnVsbDtcbiAgICAgIHZhciBmdW5jID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBzZWxmLmNsb3NlV2luZG93T25Db21wbGV0ZSgpO1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKHRpbWVySWQpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdGltZXJJZCA9XG4gICAgICAgIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgICA/IHdpbmRvdy5zZXRJbnRlcnZhbChmdW5jLCB0aGlzLmNsb3NlT25Db21wbGV0ZVRpbWVvdXQgKiAxMDAwKVxuICAgICAgICAgIDogMDtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNsb3NlV2luZG93T25Db21wbGV0ZSgpIHtcbiAgICBpZiAoISF0aGlzLmNsb3NlV2luZG93T25Db21wbGV0ZUNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmNsb3NlV2luZG93T25Db21wbGV0ZUNhbGxiYWNrKCk7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBFdmVudCB9IGZyb20gXCIuL2Jhc2VcIjtcblxuZXhwb3J0IHZhciBzdXJ2ZXlUaW1lckZ1bmN0aW9ucyA9IHtcbiAgc2V0VGltZW91dDogZnVuY3Rpb24gKGZ1bmM6ICgpID0+IGFueSk6IG51bWJlciB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiAwO1xuICAgIHJldHVybiB3aW5kb3cuc2V0VGltZW91dChmdW5jLCAxMDAwKTtcbiAgfSxcbiAgY2xlYXJUaW1lb3V0OiBmdW5jdGlvbiAodGltZXJJZDogbnVtYmVyKSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcbiAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICB9LFxufTtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVRpbWVyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2VWYWx1ZTogU3VydmV5VGltZXIgPSBudWxsO1xuICBwdWJsaWMgc3RhdGljIGdldCBpbnN0YW5jZSgpIHtcbiAgICBpZiAoIVN1cnZleVRpbWVyLmluc3RhbmNlVmFsdWUpIHtcbiAgICAgIFN1cnZleVRpbWVyLmluc3RhbmNlVmFsdWUgPSBuZXcgU3VydmV5VGltZXIoKTtcbiAgICB9XG4gICAgcmV0dXJuIFN1cnZleVRpbWVyLmluc3RhbmNlVmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBsaXN0ZW5lckNvdW50ZXIgPSAwO1xuICBwcml2YXRlIHRpbWVySWQgPSAtMTtcbiAgcHVibGljIG9uVGltZXI6IEV2ZW50PCgpID0+IGFueSwgYW55PiA9IG5ldyBFdmVudDwoKSA9PiBhbnksIGFueT4oKTtcbiAgcHVibGljIHN0YXJ0KGZ1bmM6ICgpID0+IGFueSA9IG51bGwpIHtcbiAgICBpZiAoZnVuYykge1xuICAgICAgdGhpcy5vblRpbWVyLmFkZChmdW5jKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGltZXJJZCA8IDApIHtcbiAgICAgIHRoaXMudGltZXJJZCA9IHN1cnZleVRpbWVyRnVuY3Rpb25zLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmRvVGltZXIoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmxpc3RlbmVyQ291bnRlcisrO1xuICB9XG4gIHB1YmxpYyBzdG9wKGZ1bmM6ICgpID0+IGFueSA9IG51bGwpIHtcbiAgICBpZiAoZnVuYykge1xuICAgICAgdGhpcy5vblRpbWVyLnJlbW92ZShmdW5jKTtcbiAgICB9XG4gICAgdGhpcy5saXN0ZW5lckNvdW50ZXItLTtcbiAgICBpZiAodGhpcy5saXN0ZW5lckNvdW50ZXIgPT0gMCAmJiB0aGlzLnRpbWVySWQgPiAtMSkge1xuICAgICAgc3VydmV5VGltZXJGdW5jdGlvbnMuY2xlYXJUaW1lb3V0KHRoaXMudGltZXJJZCk7XG4gICAgICB0aGlzLnRpbWVySWQgPSAtMTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGRvVGltZXIoKSB7XG4gICAgaWYgKHRoaXMudGltZXJJZCA8IDApIHJldHVybjtcbiAgICB0aGlzLm9uVGltZXIuZmlyZSh0aGlzLCB7fSk7XG4gICAgdGhpcy50aW1lcklkID0gc3VydmV5VGltZXJGdW5jdGlvbnMuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmRvVGltZXIoKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSGVscGVycyB9IGZyb20gXCIuL2hlbHBlcnNcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IFBhbmVsTW9kZWwgfSBmcm9tIFwiLi9wYW5lbFwiO1xuaW1wb3J0IHsgSVN1cnZleSwgSVRleHRQcm9jZXNzb3IgfSBmcm9tIFwiLi9iYXNlLWludGVyZmFjZXNcIjtcbmltcG9ydCB7IFByb2Nlc3NWYWx1ZSB9IGZyb20gXCIuL2NvbmRpdGlvblByb2Nlc3NWYWx1ZVwiO1xuXG5leHBvcnQgY2xhc3MgVGV4dFByZVByb2Nlc3Nvckl0ZW0ge1xuICBwdWJsaWMgc3RhcnQ6IG51bWJlcjtcbiAgcHVibGljIGVuZDogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgVGV4dFByZVByb2Nlc3NvclZhbHVlIHtcbiAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZywgcHVibGljIHJldHVybkRpc3BsYXlWYWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuaXNFeGlzdHMgPSBmYWxzZTtcbiAgICB0aGlzLmNhblByb2Nlc3MgPSB0cnVlO1xuICB9XG4gIHB1YmxpYyB2YWx1ZTogYW55O1xuICBwdWJsaWMgaXNFeGlzdHM6IGJvb2xlYW47XG4gIHB1YmxpYyBjYW5Qcm9jZXNzOiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgVGV4dFByZVByb2Nlc3NvciB7XG4gIHByaXZhdGUgaGFzQWxsVmFsdWVzT25MYXN0UnVuVmFsdWU6IGJvb2xlYW47XG4gIHB1YmxpYyBvblByb2Nlc3M6ICh0ZXh0VmFsdWU6IFRleHRQcmVQcm9jZXNzb3JWYWx1ZSkgPT4gdm9pZDtcbiAgY29uc3RydWN0b3IoKSB7fVxuICBwdWJsaWMgcHJvY2VzcyhcbiAgICB0ZXh0OiBzdHJpbmcsXG4gICAgcmV0dXJuRGlzcGxheVZhbHVlOiBib29sZWFuID0gZmFsc2UsXG4gICAgZG9FbmNvZGluZzogYm9vbGVhbiA9IGZhbHNlXG4gICk6IHN0cmluZyB7XG4gICAgdGhpcy5oYXNBbGxWYWx1ZXNPbkxhc3RSdW5WYWx1ZSA9IHRydWU7XG4gICAgaWYgKCF0ZXh0KSByZXR1cm4gdGV4dDtcbiAgICBpZiAoIXRoaXMub25Qcm9jZXNzKSByZXR1cm4gdGV4dDtcbiAgICB2YXIgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKHRleHQpO1xuICAgIGZvciAodmFyIGkgPSBpdGVtcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGl0ZW0gPSBpdGVtc1tpXTtcbiAgICAgIHZhciBuYW1lID0gdGhpcy5nZXROYW1lKHRleHQuc3Vic3RyaW5nKGl0ZW0uc3RhcnQgKyAxLCBpdGVtLmVuZCkpO1xuICAgICAgaWYgKCFuYW1lKSBjb250aW51ZTtcbiAgICAgIHZhciB0ZXh0VmFsdWUgPSBuZXcgVGV4dFByZVByb2Nlc3NvclZhbHVlKG5hbWUsIHJldHVybkRpc3BsYXlWYWx1ZSk7XG4gICAgICB0aGlzLm9uUHJvY2Vzcyh0ZXh0VmFsdWUpO1xuICAgICAgaWYgKCF0ZXh0VmFsdWUuaXNFeGlzdHMpIHtcbiAgICAgICAgaWYgKHRleHRWYWx1ZS5jYW5Qcm9jZXNzKSB7XG4gICAgICAgICAgdGhpcy5oYXNBbGxWYWx1ZXNPbkxhc3RSdW5WYWx1ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKEhlbHBlcnMuaXNWYWx1ZUVtcHR5KHRleHRWYWx1ZS52YWx1ZSkpIHtcbiAgICAgICAgdGhpcy5oYXNBbGxWYWx1ZXNPbkxhc3RSdW5WYWx1ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgdmFyIHJlcGxhY2VkVmFsdWUgPSAhSGVscGVycy5pc1ZhbHVlRW1wdHkodGV4dFZhbHVlLnZhbHVlKVxuICAgICAgICA/IHRleHRWYWx1ZS52YWx1ZVxuICAgICAgICA6IFwiXCI7XG4gICAgICBpZiAoZG9FbmNvZGluZykge1xuICAgICAgICByZXBsYWNlZFZhbHVlID0gZW5jb2RlVVJJQ29tcG9uZW50KHJlcGxhY2VkVmFsdWUpO1xuICAgICAgfVxuICAgICAgdGV4dCA9XG4gICAgICAgIHRleHQuc3Vic3RyKDAsIGl0ZW0uc3RhcnQpICsgcmVwbGFjZWRWYWx1ZSArIHRleHQuc3Vic3RyKGl0ZW0uZW5kICsgMSk7XG4gICAgfVxuICAgIHJldHVybiB0ZXh0O1xuICB9XG4gIHB1YmxpYyBwcm9jZXNzVmFsdWUoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHJldHVybkRpc3BsYXlWYWx1ZTogYm9vbGVhblxuICApOiBUZXh0UHJlUHJvY2Vzc29yVmFsdWUge1xuICAgIHZhciB0ZXh0VmFsdWUgPSBuZXcgVGV4dFByZVByb2Nlc3NvclZhbHVlKG5hbWUsIHJldHVybkRpc3BsYXlWYWx1ZSk7XG4gICAgaWYgKCEhdGhpcy5vblByb2Nlc3MpIHtcbiAgICAgIHRoaXMub25Qcm9jZXNzKHRleHRWYWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB0ZXh0VmFsdWU7XG4gIH1cbiAgcHVibGljIGdldCBoYXNBbGxWYWx1ZXNPbkxhc3RSdW4oKSB7XG4gICAgcmV0dXJuICEhdGhpcy5oYXNBbGxWYWx1ZXNPbkxhc3RSdW5WYWx1ZTtcbiAgfVxuICBwcml2YXRlIGdldEl0ZW1zKHRleHQ6IHN0cmluZyk6IEFycmF5PFRleHRQcmVQcm9jZXNzb3JJdGVtPiB7XG4gICAgdmFyIGl0ZW1zID0gW107XG4gICAgdmFyIGxlbmd0aCA9IHRleHQubGVuZ3RoO1xuICAgIHZhciBzdGFydCA9IC0xO1xuICAgIHZhciBjaCA9IFwiXCI7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgY2ggPSB0ZXh0W2ldO1xuICAgICAgaWYgKGNoID09IFwie1wiKSBzdGFydCA9IGk7XG4gICAgICBpZiAoY2ggPT0gXCJ9XCIpIHtcbiAgICAgICAgaWYgKHN0YXJ0ID4gLTEpIHtcbiAgICAgICAgICB2YXIgaXRlbSA9IG5ldyBUZXh0UHJlUHJvY2Vzc29ySXRlbSgpO1xuICAgICAgICAgIGl0ZW0uc3RhcnQgPSBzdGFydDtcbiAgICAgICAgICBpdGVtLmVuZCA9IGk7XG4gICAgICAgICAgaXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICBzdGFydCA9IC0xO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cbiAgcHJpdmF0ZSBnZXROYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFuYW1lKSByZXR1cm47XG4gICAgcmV0dXJuIG5hbWUudHJpbSgpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvblRleHRQcm9jZXNzb3IgaW1wbGVtZW50cyBJVGV4dFByb2Nlc3NvciB7XG4gIHByaXZhdGUgdGV4dFByZVByb2Nlc3NvcjogVGV4dFByZVByb2Nlc3NvcjtcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIHZhcmlhYmxlTmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy50ZXh0UHJlUHJvY2Vzc29yID0gbmV3IFRleHRQcmVQcm9jZXNzb3IoKTtcbiAgICB0aGlzLnRleHRQcmVQcm9jZXNzb3Iub25Qcm9jZXNzID0gKHRleHRWYWx1ZTogVGV4dFByZVByb2Nlc3NvclZhbHVlKSA9PiB7XG4gICAgICB0aGlzLmdldFByb2Nlc3NlZFRleHRWYWx1ZSh0ZXh0VmFsdWUpO1xuICAgIH07XG4gIH1cbiAgcHVibGljIHByb2Nlc3NWYWx1ZShcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcmV0dXJuRGlzcGxheVZhbHVlOiBib29sZWFuXG4gICk6IFRleHRQcmVQcm9jZXNzb3JWYWx1ZSB7XG4gICAgcmV0dXJuIHRoaXMudGV4dFByZVByb2Nlc3Nvci5wcm9jZXNzVmFsdWUobmFtZSwgcmV0dXJuRGlzcGxheVZhbHVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHN1cnZleSgpOiBJU3VydmV5IHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHBhbmVsKCk6IFBhbmVsTW9kZWwge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBnZXRWYWx1ZXMoKTogYW55IHtcbiAgICByZXR1cm4gISF0aGlzLnBhbmVsID8gdGhpcy5wYW5lbC5nZXRWYWx1ZSgpIDogbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UXVlc3Rpb25CeU5hbWUobmFtZTogc3RyaW5nKTogUXVlc3Rpb24ge1xuICAgIHJldHVybiAhIXRoaXMucGFuZWxcbiAgICAgID8gPFF1ZXN0aW9uPnRoaXMucGFuZWwuZ2V0UXVlc3Rpb25CeVZhbHVlTmFtZShuYW1lKVxuICAgICAgOiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBvbkN1c3RvbVByb2Nlc3NUZXh0KHRleHRWYWx1ZTogVGV4dFByZVByb2Nlc3NvclZhbHVlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vSVRleHRQcm9jZXNzb3JcbiAgcHJpdmF0ZSBnZXRQcm9jZXNzZWRUZXh0VmFsdWUodGV4dFZhbHVlOiBUZXh0UHJlUHJvY2Vzc29yVmFsdWUpIHtcbiAgICBpZiAoIXRleHRWYWx1ZSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLm9uQ3VzdG9tUHJvY2Vzc1RleHQodGV4dFZhbHVlKSkgcmV0dXJuO1xuICAgIHZhciBmaXJzdE5hbWUgPSBuZXcgUHJvY2Vzc1ZhbHVlKCkuZ2V0Rmlyc3ROYW1lKHRleHRWYWx1ZS5uYW1lKTtcbiAgICB0ZXh0VmFsdWUuaXNFeGlzdHMgPSBmaXJzdE5hbWUgPT0gdGhpcy52YXJpYWJsZU5hbWU7XG4gICAgdGV4dFZhbHVlLmNhblByb2Nlc3MgPSB0ZXh0VmFsdWUuaXNFeGlzdHM7XG4gICAgaWYgKCF0ZXh0VmFsdWUuY2FuUHJvY2VzcykgcmV0dXJuO1xuICAgIC8vbmFtZSBzaG91bGQgc3RhcnQgd2l0aCB0aGUgdmFyaWFibGUgbmFtZVxuICAgIHRleHRWYWx1ZS5uYW1lID0gdGV4dFZhbHVlLm5hbWUucmVwbGFjZSh0aGlzLnZhcmlhYmxlTmFtZSArIFwiLlwiLCBcIlwiKTtcbiAgICB2YXIgZmlyc3ROYW1lID0gbmV3IFByb2Nlc3NWYWx1ZSgpLmdldEZpcnN0TmFtZSh0ZXh0VmFsdWUubmFtZSk7XG4gICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5nZXRRdWVzdGlvbkJ5TmFtZShmaXJzdE5hbWUpO1xuICAgIHZhciB2YWx1ZXMgPSB7fTtcbiAgICBpZiAocXVlc3Rpb24pIHtcbiAgICAgICg8YW55PnZhbHVlcylbZmlyc3ROYW1lXSA9IHRleHRWYWx1ZS5yZXR1cm5EaXNwbGF5VmFsdWVcbiAgICAgICAgPyBxdWVzdGlvbi5kaXNwbGF5VmFsdWVcbiAgICAgICAgOiBxdWVzdGlvbi52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGFsbFZhbHVlcyA9ICEhdGhpcy5wYW5lbCA/IHRoaXMuZ2V0VmFsdWVzKCkgOiBudWxsO1xuICAgICAgaWYgKGFsbFZhbHVlcykge1xuICAgICAgICAoPGFueT52YWx1ZXMpW2ZpcnN0TmFtZV0gPSBhbGxWYWx1ZXNbZmlyc3ROYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGV4dFZhbHVlLnZhbHVlID0gbmV3IFByb2Nlc3NWYWx1ZSgpLmdldFZhbHVlKHRleHRWYWx1ZS5uYW1lLCB2YWx1ZXMpO1xuICB9XG4gIHByb2Nlc3NUZXh0KHRleHQ6IHN0cmluZywgcmV0dXJuRGlzcGxheVZhbHVlOiBib29sZWFuKTogc3RyaW5nIHtcbiAgICB0ZXh0ID0gdGhpcy50ZXh0UHJlUHJvY2Vzc29yLnByb2Nlc3ModGV4dCwgcmV0dXJuRGlzcGxheVZhbHVlKTtcbiAgICB2YXIgc3VydmV5ID0gdGhpcy5zdXJ2ZXk7XG4gICAgcmV0dXJuIHN1cnZleSA/IHN1cnZleS5wcm9jZXNzVGV4dCh0ZXh0LCByZXR1cm5EaXNwbGF5VmFsdWUpIDogdGV4dDtcbiAgfVxuICBwcm9jZXNzVGV4dEV4KHRleHQ6IHN0cmluZywgcmV0dXJuRGlzcGxheVZhbHVlOiBib29sZWFuKTogYW55IHtcbiAgICB0ZXh0ID0gdGhpcy5wcm9jZXNzVGV4dCh0ZXh0LCByZXR1cm5EaXNwbGF5VmFsdWUpO1xuICAgIHZhciBoYXNBbGxWYWx1ZXNPbkxhc3RSdW4gPSB0aGlzLnRleHRQcmVQcm9jZXNzb3IuaGFzQWxsVmFsdWVzT25MYXN0UnVuO1xuICAgIHZhciByZXMgPSB7IGhhc0FsbFZhbHVlc09uTGFzdFJ1bjogdHJ1ZSwgdGV4dDogdGV4dCB9O1xuICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgcmVzID0gdGhpcy5zdXJ2ZXkucHJvY2Vzc1RleHRFeCh0ZXh0LCByZXR1cm5EaXNwbGF5VmFsdWUsIGZhbHNlKTtcbiAgICB9XG4gICAgcmVzLmhhc0FsbFZhbHVlc09uTGFzdFJ1biA9XG4gICAgICByZXMuaGFzQWxsVmFsdWVzT25MYXN0UnVuICYmIGhhc0FsbFZhbHVlc09uTGFzdFJ1bjtcbiAgICByZXR1cm4gcmVzO1xuICB9XG59XG4iLCJpbXBvcnQgeyBIYXNoVGFibGUsIEhlbHBlcnMgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZVwiO1xuaW1wb3J0IHsgSVN1cnZleSB9IGZyb20gXCIuL2Jhc2UtaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IENvbmRpdGlvblJ1bm5lciwgRXhwcmVzc2lvblJ1bm5lciB9IGZyb20gXCIuL2NvbmRpdGlvbnNcIjtcbmltcG9ydCB7IE9wZXJhbmRNYWtlciB9IGZyb20gXCIuL2V4cHJlc3Npb25zL2V4cHJlc3Npb25zXCI7XG5pbXBvcnQgeyBQcm9jZXNzVmFsdWUgfSBmcm9tIFwiLi9jb25kaXRpb25Qcm9jZXNzVmFsdWVcIjtcbmltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcblxuLyoqXG4gKiBBIGJhc2UgY2xhc3MgZm9yIGFsbCB0cmlnZ2Vycy5cbiAqIEEgdHJpZ2dlciBjYWxscyBhIG1ldGhvZCB3aGVuIHRoZSBleHByZXNzaW9uIGNoYW5nZSB0aGUgcmVzdWx0OiBmcm9tIGZhbHNlIHRvIHRydWUgb3IgZnJvbSB0cnVlIHRvIGZhbHNlLlxuICogUGxlYXNlIG5vdGUsIGl0IHJ1bnMgb25seSBvbmUgY2hhbmdpbmcgdGhlIGV4cHJlc3Npb24gcmVzdWx0LlxuICovXG5leHBvcnQgY2xhc3MgVHJpZ2dlciBleHRlbmRzIEJhc2Uge1xuICBzdGF0aWMgb3BlcmF0b3JzVmFsdWU6IEhhc2hUYWJsZTxGdW5jdGlvbj4gPSBudWxsO1xuICBzdGF0aWMgZ2V0IG9wZXJhdG9ycygpIHtcbiAgICBpZiAoVHJpZ2dlci5vcGVyYXRvcnNWYWx1ZSAhPSBudWxsKSByZXR1cm4gVHJpZ2dlci5vcGVyYXRvcnNWYWx1ZTtcbiAgICBUcmlnZ2VyLm9wZXJhdG9yc1ZhbHVlID0ge1xuICAgICAgZW1wdHk6IGZ1bmN0aW9uKHZhbHVlOiBhbnksIGV4cGVjdGVkVmFsdWU6IGFueSkge1xuICAgICAgICByZXR1cm4gIXZhbHVlO1xuICAgICAgfSxcbiAgICAgIG5vdGVtcHR5OiBmdW5jdGlvbih2YWx1ZTogYW55LCBleHBlY3RlZFZhbHVlOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuICEhdmFsdWU7XG4gICAgICB9LFxuICAgICAgZXF1YWw6IGZ1bmN0aW9uKHZhbHVlOiBhbnksIGV4cGVjdGVkVmFsdWU6IGFueSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgPT0gZXhwZWN0ZWRWYWx1ZTtcbiAgICAgIH0sXG4gICAgICBub3RlcXVhbDogZnVuY3Rpb24odmFsdWU6IGFueSwgZXhwZWN0ZWRWYWx1ZTogYW55KSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSAhPSBleHBlY3RlZFZhbHVlO1xuICAgICAgfSxcbiAgICAgIGNvbnRhaW5zOiBmdW5jdGlvbih2YWx1ZTogYW55LCBleHBlY3RlZFZhbHVlOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlICYmIHZhbHVlW1wiaW5kZXhPZlwiXSAmJiB2YWx1ZS5pbmRleE9mKGV4cGVjdGVkVmFsdWUpID4gLTE7XG4gICAgICB9LFxuICAgICAgbm90Y29udGFpbnM6IGZ1bmN0aW9uKHZhbHVlOiBhbnksIGV4cGVjdGVkVmFsdWU6IGFueSkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICF2YWx1ZSB8fCAhdmFsdWVbXCJpbmRleE9mXCJdIHx8IHZhbHVlLmluZGV4T2YoZXhwZWN0ZWRWYWx1ZSkgPT0gLTFcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBncmVhdGVyOiBmdW5jdGlvbih2YWx1ZTogYW55LCBleHBlY3RlZFZhbHVlOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID4gZXhwZWN0ZWRWYWx1ZTtcbiAgICAgIH0sXG4gICAgICBsZXNzOiBmdW5jdGlvbih2YWx1ZTogYW55LCBleHBlY3RlZFZhbHVlOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlIDwgZXhwZWN0ZWRWYWx1ZTtcbiAgICAgIH0sXG4gICAgICBncmVhdGVyb3JlcXVhbDogZnVuY3Rpb24odmFsdWU6IGFueSwgZXhwZWN0ZWRWYWx1ZTogYW55KSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA+PSBleHBlY3RlZFZhbHVlO1xuICAgICAgfSxcbiAgICAgIGxlc3NvcmVxdWFsOiBmdW5jdGlvbih2YWx1ZTogYW55LCBleHBlY3RlZFZhbHVlOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlIDw9IGV4cGVjdGVkVmFsdWU7XG4gICAgICB9LFxuICAgIH07XG4gICAgcmV0dXJuIFRyaWdnZXIub3BlcmF0b3JzVmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBjb25kaXRpb25SdW5uZXI6IENvbmRpdGlvblJ1bm5lcjtcbiAgcHJpdmF0ZSB1c2VkTmFtZXM6IEFycmF5PHN0cmluZz47XG4gIHByaXZhdGUgaGFzRnVuY3Rpb246IGJvb2xlYW47XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy51c2VkTmFtZXMgPSBbXTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0aWVzVmFsdWVDaGFuZ2VkKFxuICAgICAgW1wib3BlcmF0b3JcIiwgXCJ2YWx1ZVwiLCBcIm5hbWVcIl0sXG4gICAgICBmdW5jdGlvbigpIHtcbiAgICAgICAgc2VsZi5vbGRQcm9wZXJ0aWVzQ2hhbmdlZCgpO1xuICAgICAgfVxuICAgICk7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcImV4cHJlc3Npb25cIiwgZnVuY3Rpb24oKSB7XG4gICAgICBzZWxmLm9uRXhwcmVzc2lvbkNoYW5nZWQoKTtcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInRyaWdnZXJiYXNlXCI7XG4gIH1cbiAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgdmFyIHJlcyA9IHRoaXMuZ2V0VHlwZSgpLnJlcGxhY2UoXCJ0cmlnZ2VyXCIsIFwiXCIpO1xuICAgIHZhciBleHAgPSAhIXRoaXMuZXhwcmVzc2lvbiA/IHRoaXMuZXhwcmVzc2lvbiA6IHRoaXMuYnVpbGRFeHByZXNzaW9uKCk7XG4gICAgaWYgKGV4cCkge1xuICAgICAgcmVzICs9IFwiLCBcIiArIGV4cDtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgZ2V0IG9wZXJhdG9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm9wZXJhdG9yXCIsIFwiZXF1YWxcIik7XG4gIH1cbiAgcHVibGljIHNldCBvcGVyYXRvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuICAgIHZhbHVlID0gdmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoIVRyaWdnZXIub3BlcmF0b3JzW3ZhbHVlXSkgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm9wZXJhdG9yXCIsIHZhbHVlKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZhbHVlXCIsIG51bGwpO1xuICB9XG4gIHB1YmxpYyBzZXQgdmFsdWUodmFsOiBhbnkpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ2YWx1ZVwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJuYW1lXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbmFtZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm5hbWVcIiwgdmFsKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZXhwcmVzc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJleHByZXNzaW9uXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgZXhwcmVzc2lvbih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImV4cHJlc3Npb25cIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgY2hlY2tFeHByZXNzaW9uKFxuICAgIGtleXM6IGFueSxcbiAgICB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+ID0gbnVsbFxuICApIHtcbiAgICBpZiAoIXRoaXMuaXNDaGVja1JlcXVpcmVkKGtleXMpKSByZXR1cm47XG4gICAgaWYgKCEhdGhpcy5jb25kaXRpb25SdW5uZXIpIHtcbiAgICAgIHRoaXMucGVyZm9ybSh2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgY2hlY2sodmFsdWU6IGFueSkge1xuICAgIHZhciB0cmlnZ2VyUmVzdWx0ID0gVHJpZ2dlci5vcGVyYXRvcnNbdGhpcy5vcGVyYXRvcl0odmFsdWUsIHRoaXMudmFsdWUpO1xuICAgIGlmICh0cmlnZ2VyUmVzdWx0KSB7XG4gICAgICB0aGlzLm9uU3VjY2Vzcyh7fSwgbnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub25GYWlsdXJlKCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgcGVyZm9ybSh2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIHRoaXMuY29uZGl0aW9uUnVubmVyLm9uUnVuQ29tcGxldGUgPSAocmVzOiBib29sZWFuKSA9PiB7XG4gICAgICB0aGlzLnRyaWdnZXJSZXN1bHQocmVzLCB2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIH07XG4gICAgdGhpcy5jb25kaXRpb25SdW5uZXIucnVuKHZhbHVlcywgcHJvcGVydGllcyk7XG4gIH1cbiAgcHJpdmF0ZSB0cmlnZ2VyUmVzdWx0KFxuICAgIHJlczogYm9vbGVhbixcbiAgICB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+XG4gICkge1xuICAgIGlmIChyZXMpIHtcbiAgICAgIHRoaXMub25TdWNjZXNzKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub25GYWlsdXJlKCk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBvblN1Y2Nlc3ModmFsdWVzOiBIYXNoVGFibGU8YW55PiwgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4pIHt9XG4gIHByb3RlY3RlZCBvbkZhaWx1cmUoKSB7fVxuICBlbmRMb2FkaW5nRnJvbUpzb24oKSB7XG4gICAgc3VwZXIuZW5kTG9hZGluZ0Zyb21Kc29uKCk7XG4gICAgdGhpcy5vbGRQcm9wZXJ0aWVzQ2hhbmdlZCgpO1xuICB9XG4gIHByaXZhdGUgb2xkUHJvcGVydGllc0NoYW5nZWQoKSB7XG4gICAgdGhpcy5vbkV4cHJlc3Npb25DaGFuZ2VkKCk7XG4gIH1cbiAgcHJpdmF0ZSBvbkV4cHJlc3Npb25DaGFuZ2VkKCkge1xuICAgIHRoaXMudXNlZE5hbWVzID0gW107XG4gICAgdGhpcy5oYXNGdW5jdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuY29uZGl0aW9uUnVubmVyID0gbnVsbDtcbiAgfVxuICBwdWJsaWMgYnVpbGRFeHByZXNzaW9uKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLm5hbWUpIHJldHVybiBcIlwiO1xuICAgIGlmICh0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLnZhbHVlKSAmJiB0aGlzLmlzUmVxdWlyZVZhbHVlKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gKFxuICAgICAgXCJ7XCIgK1xuICAgICAgdGhpcy5uYW1lICtcbiAgICAgIFwifSBcIiArXG4gICAgICB0aGlzLm9wZXJhdG9yICtcbiAgICAgIFwiIFwiICtcbiAgICAgIE9wZXJhbmRNYWtlci50b09wZXJhbmRTdHJpbmcodGhpcy52YWx1ZSlcbiAgICApO1xuICB9XG4gIHByaXZhdGUgaXNDaGVja1JlcXVpcmVkKGtleXM6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICgha2V5cykgcmV0dXJuIGZhbHNlO1xuICAgIHRoaXMuYnVpbGRVc2VkTmFtZXMoKTtcbiAgICBpZiAodGhpcy5oYXNGdW5jdGlvbiA9PT0gdHJ1ZSkgcmV0dXJuIHRydWU7XG4gICAgdmFyIHByb2Nlc3NWYWx1ZSA9IG5ldyBQcm9jZXNzVmFsdWUoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudXNlZE5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbmFtZSA9IHRoaXMudXNlZE5hbWVzW2ldO1xuICAgICAgaWYgKGtleXMuaGFzT3duUHJvcGVydHkobmFtZSkpIHJldHVybiB0cnVlO1xuICAgICAgdmFyIGZpcnN0TmFtZSA9IHByb2Nlc3NWYWx1ZS5nZXRGaXJzdE5hbWUobmFtZSk7XG4gICAgICBpZiAoIWtleXMuaGFzT3duUHJvcGVydHkoZmlyc3ROYW1lKSkgY29udGludWU7XG4gICAgICBpZiAobmFtZSA9PSBmaXJzdE5hbWUpIHJldHVybiB0cnVlO1xuICAgICAgdmFyIGtleVZhbHVlID0ga2V5c1tmaXJzdE5hbWVdO1xuICAgICAgaWYgKGtleVZhbHVlID09IHVuZGVmaW5lZCkgY29udGludWU7XG4gICAgICBpZiAoXG4gICAgICAgICFrZXlWYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIm9sZFZhbHVlXCIpIHx8XG4gICAgICAgICFrZXlWYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIm5ld1ZhbHVlXCIpXG4gICAgICApXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgdmFyIHY6IGFueSA9IHt9O1xuICAgICAgdltmaXJzdE5hbWVdID0ga2V5VmFsdWVbXCJvbGRWYWx1ZVwiXTtcbiAgICAgIHZhciBvbGRWYWx1ZSA9IHByb2Nlc3NWYWx1ZS5nZXRWYWx1ZShuYW1lLCB2KTtcbiAgICAgIHZbZmlyc3ROYW1lXSA9IGtleVZhbHVlW1wibmV3VmFsdWVcIl07XG4gICAgICB2YXIgbmV3VmFsdWUgPSBwcm9jZXNzVmFsdWUuZ2V0VmFsdWUobmFtZSwgdik7XG4gICAgICByZXR1cm4gIUhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyhvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJpdmF0ZSBidWlsZFVzZWROYW1lcygpIHtcbiAgICBpZiAoISF0aGlzLmNvbmRpdGlvblJ1bm5lcikgcmV0dXJuO1xuICAgIHZhciBleHByZXNzaW9uID0gdGhpcy5leHByZXNzaW9uO1xuICAgIGlmICghZXhwcmVzc2lvbikge1xuICAgICAgZXhwcmVzc2lvbiA9IHRoaXMuYnVpbGRFeHByZXNzaW9uKCk7XG4gICAgfVxuICAgIGlmICghZXhwcmVzc2lvbikgcmV0dXJuO1xuICAgIHRoaXMuY29uZGl0aW9uUnVubmVyID0gbmV3IENvbmRpdGlvblJ1bm5lcihleHByZXNzaW9uKTtcbiAgICB0aGlzLmhhc0Z1bmN0aW9uID0gdGhpcy5jb25kaXRpb25SdW5uZXIuaGFzRnVuY3Rpb24oKTtcbiAgICB0aGlzLnVzZWROYW1lcyA9IHRoaXMuY29uZGl0aW9uUnVubmVyLmdldFZhcmlhYmxlcygpO1xuICB9XG4gIHByaXZhdGUgZ2V0IGlzUmVxdWlyZVZhbHVlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm9wZXJhdG9yICE9PSBcImVtcHR5XCIgJiYgdGhpcy5vcGVyYXRvciAhPSBcIm5vdGVtcHR5XCI7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU3VydmV5VHJpZ2dlck93bmVyIHtcbiAgZ2V0T2JqZWN0cyhwYWdlczogc3RyaW5nW10sIHF1ZXN0aW9uczogc3RyaW5nW10pOiBhbnlbXTtcbiAgc2V0Q29tcGxldGVkKCk6IGFueTtcbiAgc2V0VHJpZ2dlclZhbHVlKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSwgaXNWYXJpYWJsZTogYm9vbGVhbik6IGFueTtcbiAgY29weVRyaWdnZXJWYWx1ZShuYW1lOiBzdHJpbmcsIGZyb21OYW1lOiBzdHJpbmcpOiBhbnk7XG4gIGZvY3VzUXVlc3Rpb24obmFtZTogc3RyaW5nKTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBJdCBleHRlbmRzIHRoZSBUcmlnZ2VyIGJhc2UgY2xhc3MgYW5kIGFkZCBwcm9wZXJ0aWVzIHJlcXVpcmVkIGZvciBTdXJ2ZXlKUyBjbGFzc2VzLlxuICovXG5leHBvcnQgY2xhc3MgU3VydmV5VHJpZ2dlciBleHRlbmRzIFRyaWdnZXIge1xuICBwcm90ZWN0ZWQgb3duZXJWYWx1ZTogSVN1cnZleVRyaWdnZXJPd25lciA9IG51bGw7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbiAgcHVibGljIGdldCBvd25lcigpOiBJU3VydmV5VHJpZ2dlck93bmVyIHtcbiAgICByZXR1cm4gdGhpcy5vd25lclZhbHVlO1xuICB9XG4gIHB1YmxpYyBzZXRPd25lcihvd25lcjogSVN1cnZleVRyaWdnZXJPd25lcikge1xuICAgIHRoaXMub3duZXJWYWx1ZSA9IG93bmVyO1xuICB9XG4gIHB1YmxpYyBnZXRTdXJ2ZXkobGl2ZTogYm9vbGVhbiA9IGZhbHNlKTogSVN1cnZleSB7XG4gICAgcmV0dXJuICEhdGhpcy5vd25lciAmJiAhISg8YW55PnRoaXMub3duZXIpW1wiZ2V0U3VydmV5XCJdXG4gICAgICA/ICg8YW55PnRoaXMub3duZXIpLmdldFN1cnZleSgpXG4gICAgICA6IG51bGw7XG4gIH1cbiAgcHVibGljIGdldCBpc09uTmV4dFBhZ2UoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4vKipcbiAqIElmIGV4cHJlc3Npb24gcmV0dXJucyB0cnVlLCBpdCBtYWtlcyBxdWVzdGlvbnMvcGFnZXMgdmlzaWJsZS5cbiAqIE9odGVyd2lzZSBpdCBtYWtlcyB0aGVtIGludmlzaWJsZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFN1cnZleVRyaWdnZXJWaXNpYmxlIGV4dGVuZHMgU3VydmV5VHJpZ2dlciB7XG4gIHB1YmxpYyBwYWdlczogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIHF1ZXN0aW9uczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInZpc2libGV0cmlnZ2VyXCI7XG4gIH1cbiAgcHJvdGVjdGVkIG9uU3VjY2Vzcyh2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIHRoaXMub25UcmlnZ2VyKHRoaXMub25JdGVtU3VjY2Vzcyk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uRmFpbHVyZSgpIHtcbiAgICB0aGlzLm9uVHJpZ2dlcih0aGlzLm9uSXRlbUZhaWx1cmUpO1xuICB9XG4gIHByaXZhdGUgb25UcmlnZ2VyKGZ1bmM6IEZ1bmN0aW9uKSB7XG4gICAgaWYgKCF0aGlzLm93bmVyKSByZXR1cm47XG4gICAgdmFyIG9iamVjdHMgPSB0aGlzLm93bmVyLmdldE9iamVjdHModGhpcy5wYWdlcywgdGhpcy5xdWVzdGlvbnMpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqZWN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgZnVuYyhvYmplY3RzW2ldKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIG9uSXRlbVN1Y2Nlc3MoaXRlbTogYW55KSB7XG4gICAgaXRlbS52aXNpYmxlID0gdHJ1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgb25JdGVtRmFpbHVyZShpdGVtOiBhbnkpIHtcbiAgICBpdGVtLnZpc2libGUgPSBmYWxzZTtcbiAgfVxufVxuLyoqXG4gKiBJZiBleHByZXNzaW9uIHJldHVybnMgdHJ1ZSwgaXQgY29tcGxldGVzIHRoZSBzdXJ2ZXkuXG4gKi9cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlUcmlnZ2VyQ29tcGxldGUgZXh0ZW5kcyBTdXJ2ZXlUcmlnZ2VyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImNvbXBsZXRldHJpZ2dlclwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNPbk5leHRQYWdlKCkge1xuICAgIHJldHVybiAhc2V0dGluZ3MuZXhlY3V0ZUNvbXBsZXRlVHJpZ2dlck9uVmFsdWVDaGFuZ2VkO1xuICB9XG4gIHByb3RlY3RlZCBvblN1Y2Nlc3ModmFsdWVzOiBIYXNoVGFibGU8YW55PiwgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4pIHtcbiAgICBpZiAodGhpcy5vd25lcikgdGhpcy5vd25lci5zZXRDb21wbGV0ZWQoKTtcbiAgfVxufVxuLyoqXG4gKiBJZiBleHByZXNzaW9uIHJldHVybnMgdHJ1ZSwgdGhlIHZhbHVlIGZyb20gcHJvcGVydHkgKipzZXRWYWx1ZSoqIHdpbGwgYmUgc2V0IHRvICoqc2V0VG9OYW1lKipcbiAqL1xuZXhwb3J0IGNsYXNzIFN1cnZleVRyaWdnZXJTZXRWYWx1ZSBleHRlbmRzIFN1cnZleVRyaWdnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwic2V0dmFsdWV0cmlnZ2VyXCI7XG4gIH1cbiAgcHVibGljIGdldCBzZXRUb05hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2V0VG9OYW1lXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2V0VG9OYW1lKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2V0VG9OYW1lXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBzZXRWYWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzZXRWYWx1ZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNldFZhbHVlKHZhbDogYW55KSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2V0VmFsdWVcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzVmFyaWFibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlzVmFyaWFibGVcIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXQgaXNWYXJpYWJsZSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc1ZhcmlhYmxlXCIsIHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uU3VjY2Vzcyh2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIGlmICghdGhpcy5zZXRUb05hbWUgfHwgIXRoaXMub3duZXIpIHJldHVybjtcbiAgICB0aGlzLm93bmVyLnNldFRyaWdnZXJWYWx1ZSh0aGlzLnNldFRvTmFtZSwgdGhpcy5zZXRWYWx1ZSwgdGhpcy5pc1ZhcmlhYmxlKTtcbiAgfVxufVxuLyoqXG4gKiBJZiBleHByZXNzaW9uIHJldHVybnMgdHJ1ZSwgdGhlIHN1cnZleSBnbyB0byBxdWVzdGlvbiAqKmdvdG9OYW1lKiogYW5kIGZvY3VzIGl0LlxuICovXG5leHBvcnQgY2xhc3MgU3VydmV5VHJpZ2dlclNraXAgZXh0ZW5kcyBTdXJ2ZXlUcmlnZ2VyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInNraXB0cmlnZ2VyXCI7XG4gIH1cbiAgcHVibGljIGdldCBnb3RvTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJnb3RvTmFtZVwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGdvdG9OYW1lKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZ290b05hbWVcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzT25OZXh0UGFnZSgpIHtcbiAgICByZXR1cm4gIXNldHRpbmdzLmV4ZWN1dGVTa2lwVHJpZ2dlck9uVmFsdWVDaGFuZ2VkO1xuICB9XG4gIHByb3RlY3RlZCBvblN1Y2Nlc3ModmFsdWVzOiBIYXNoVGFibGU8YW55PiwgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4pIHtcbiAgICBpZiAoIXRoaXMuZ290b05hbWUgfHwgIXRoaXMub3duZXIpIHJldHVybjtcbiAgICB0aGlzLm93bmVyLmZvY3VzUXVlc3Rpb24odGhpcy5nb3RvTmFtZSk7XG4gIH1cbn1cbi8qKlxuICogSWYgZXhwcmVzc2lvbiByZXR1cm5zIHRydWUsIHRoZSAqKnJ1bkV4cHJlc3Npb24qKiB3aWxsIGJlIHJ1bi4gSWYgKipzZXRUb05hbWUqKiBwcm9wZXJ0eSBpcyBub3QgZW1wdHkgdGhlbiB0aGUgcmVzdWx0IG9mICoqcnVuRXhwcmVzc2lvbioqIHdpbGwgYmUgc2V0IHRvIGl0LlxuICovXG5leHBvcnQgY2xhc3MgU3VydmV5VHJpZ2dlclJ1bkV4cHJlc3Npb24gZXh0ZW5kcyBTdXJ2ZXlUcmlnZ2VyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInJ1bmV4cHJlc3Npb250cmlnZ2VyXCI7XG4gIH1cbiAgcHVibGljIGdldCBzZXRUb05hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2V0VG9OYW1lXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2V0VG9OYW1lKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2V0VG9OYW1lXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBydW5FeHByZXNzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJ1bkV4cHJlc3Npb25cIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBydW5FeHByZXNzaW9uKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicnVuRXhwcmVzc2lvblwiLCB2YWwpO1xuICB9XG4gIHByb3RlY3RlZCBvblN1Y2Nlc3ModmFsdWVzOiBIYXNoVGFibGU8YW55PiwgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4pIHtcbiAgICBpZiAoIXRoaXMub3duZXIgfHwgIXRoaXMucnVuRXhwcmVzc2lvbikgcmV0dXJuO1xuICAgIHZhciBleHByZXNzaW9uID0gbmV3IEV4cHJlc3Npb25SdW5uZXIodGhpcy5ydW5FeHByZXNzaW9uKTtcbiAgICBpZiAoZXhwcmVzc2lvbi5jYW5SdW4pIHtcbiAgICAgIGV4cHJlc3Npb24ub25SdW5Db21wbGV0ZSA9IChyZXMpID0+IHtcbiAgICAgICAgdGhpcy5vbkNvbXBsZXRlUnVuRXhwcmVzc2lvbihyZXMpO1xuICAgICAgfTtcbiAgICAgIGV4cHJlc3Npb24ucnVuKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgb25Db21wbGV0ZVJ1bkV4cHJlc3Npb24obmV3VmFsdWU6IGFueSkge1xuICAgIGlmICghIXRoaXMuc2V0VG9OYW1lICYmIG5ld1ZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMub3duZXIuc2V0VHJpZ2dlclZhbHVlKHRoaXMuc2V0VG9OYW1lLCBuZXdWYWx1ZSwgZmFsc2UpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIElmIGV4cHJlc3Npb24gcmV0dXJucyB0cnVlLCB0aGUgdmFsdWUgZnJvbSBxdWVzdGlvbiAqKmZyb21OYW1lKiogd2lsbCBiZSBzZXQgaW50byAqKnNldFRvTmFtZSoqLlxuICovXG5leHBvcnQgY2xhc3MgU3VydmV5VHJpZ2dlckNvcHlWYWx1ZSBleHRlbmRzIFN1cnZleVRyaWdnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG4gIHB1YmxpYyBnZXQgc2V0VG9OYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNldFRvTmFtZVwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNldFRvTmFtZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNldFRvTmFtZVwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgZnJvbU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZnJvbU5hbWVcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBmcm9tTmFtZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImZyb21OYW1lXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJjb3B5dmFsdWV0cmlnZ2VyXCI7XG4gIH1cbiAgcHJvdGVjdGVkIG9uU3VjY2Vzcyh2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIGlmICghdGhpcy5zZXRUb05hbWUgfHwgIXRoaXMub3duZXIpIHJldHVybjtcbiAgICB0aGlzLm93bmVyLmNvcHlUcmlnZ2VyVmFsdWUodGhpcy5zZXRUb05hbWUsIHRoaXMuZnJvbU5hbWUpO1xuICB9XG59XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXCJ0cmlnZ2VyXCIsIFtcbiAgeyBuYW1lOiBcIm9wZXJhdG9yXCIsIGRlZmF1bHQ6IFwiZXF1YWxcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgeyBuYW1lOiBcInZhbHVlXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gIFwiZXhwcmVzc2lvbjpjb25kaXRpb25cIixcbl0pO1xuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJzdXJ2ZXl0cmlnZ2VyXCIsXG4gIFt7IG5hbWU6IFwibmFtZVwiLCB2aXNpYmxlOiBmYWxzZSB9XSxcbiAgbnVsbCxcbiAgXCJ0cmlnZ2VyXCJcbik7XG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcInZpc2libGV0cmlnZ2VyXCIsXG4gIFtcInBhZ2VzOnBhZ2VzXCIsIFwicXVlc3Rpb25zOnF1ZXN0aW9uc1wiXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBTdXJ2ZXlUcmlnZ2VyVmlzaWJsZSgpO1xuICB9LFxuICBcInN1cnZleXRyaWdnZXJcIlxuKTtcblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwiY29tcGxldGV0cmlnZ2VyXCIsXG4gIFtdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFN1cnZleVRyaWdnZXJDb21wbGV0ZSgpO1xuICB9LFxuICBcInN1cnZleXRyaWdnZXJcIlxuKTtcblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwic2V0dmFsdWV0cmlnZ2VyXCIsXG4gIFtcbiAgICB7IG5hbWU6IFwiIXNldFRvTmFtZTpxdWVzdGlvbnZhbHVlXCIgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInNldFZhbHVlOnRyaWdnZXJ2YWx1ZVwiLFxuICAgICAgZGVwZW5kc09uOiBcInNldFRvTmFtZVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICByZXR1cm4gISFvYmogJiYgISFvYmpbXCJzZXRUb05hbWVcIl07XG4gICAgICB9LFxuICAgIH0sXG4gICAgeyBuYW1lOiBcImlzVmFyaWFibGU6Ym9vbGVhblwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICBdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFN1cnZleVRyaWdnZXJTZXRWYWx1ZSgpO1xuICB9LFxuICBcInN1cnZleXRyaWdnZXJcIlxuKTtcblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwiY29weXZhbHVldHJpZ2dlclwiLFxuICBbeyBuYW1lOiBcIiFzZXRUb05hbWU6cXVlc3Rpb252YWx1ZVwiIH0sIHsgbmFtZTogXCIhZnJvbU5hbWU6cXVlc3Rpb252YWx1ZVwiIH1dLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFN1cnZleVRyaWdnZXJDb3B5VmFsdWUoKTtcbiAgfSxcbiAgXCJzdXJ2ZXl0cmlnZ2VyXCJcbik7XG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcInNraXB0cmlnZ2VyXCIsXG4gIFt7IG5hbWU6IFwiIWdvdG9OYW1lOnF1ZXN0aW9uXCIgfV0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgU3VydmV5VHJpZ2dlclNraXAoKTtcbiAgfSxcbiAgXCJzdXJ2ZXl0cmlnZ2VyXCJcbik7XG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcInJ1bmV4cHJlc3Npb250cmlnZ2VyXCIsXG4gIFt7IG5hbWU6IFwic2V0VG9OYW1lOnF1ZXN0aW9udmFsdWVcIiB9LCBcInJ1bkV4cHJlc3Npb246ZXhwcmVzc2lvblwiXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBTdXJ2ZXlUcmlnZ2VyUnVuRXhwcmVzc2lvbigpO1xuICB9LFxuICBcInN1cnZleXRyaWdnZXJcIlxuKTtcbiIsImxldCBfaXNNb2JpbGUgPSBmYWxzZTtcbmxldCB2ZW5kb3IgPSBudWxsO1xuXG5pZiAoXG4gIHR5cGVvZiBuYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICBuYXZpZ2F0b3IgJiZcbiAgd2luZG93XG4pIHtcbiAgdmVuZG9yID0gbmF2aWdhdG9yLnVzZXJBZ2VudCB8fCBuYXZpZ2F0b3IudmVuZG9yIHx8ICg8YW55PndpbmRvdykub3BlcmE7XG59XG5cbihmdW5jdGlvbiAoYTogYW55KSB7XG4gIGlmICghYSkgcmV0dXJuO1xuICBpZiAoXG4gICAgLyhhbmRyb2lkfGJiXFxkK3xtZWVnbykuK21vYmlsZXxhdmFudGdvfGJhZGFcXC98YmxhY2tiZXJyeXxibGF6ZXJ8Y29tcGFsfGVsYWluZXxmZW5uZWN8aGlwdG9wfGllbW9iaWxlfGlwKGhvbmV8b2QpfGlyaXN8a2luZGxlfGxnZSB8bWFlbW98bWlkcHxtbXB8bW9iaWxlLitmaXJlZm94fG5ldGZyb250fG9wZXJhIG0ob2J8aW4paXxwYWxtKCBvcyk/fHBob25lfHAoaXhpfHJlKVxcL3xwbHVja2VyfHBvY2tldHxwc3B8c2VyaWVzKDR8NikwfHN5bWJpYW58dHJlb3x1cFxcLihicm93c2VyfGxpbmspfHZvZGFmb25lfHdhcHx3aW5kb3dzIGNlfHhkYXx4aWluby9pLnRlc3QoXG4gICAgICBhXG4gICAgKSB8fFxuICAgIC8xMjA3fDYzMTB8NjU5MHwzZ3NvfDR0aHB8NTBbMS02XWl8Nzcwc3w4MDJzfGEgd2F8YWJhY3xhYyhlcnxvb3xzXFwtKXxhaShrb3xybil8YWwoYXZ8Y2F8Y28pfGFtb2l8YW4oZXh8bnl8eXcpfGFwdHV8YXIoY2h8Z28pfGFzKHRlfHVzKXxhdHR3fGF1KGRpfFxcLW18ciB8cyApfGF2YW58YmUoY2t8bGx8bnEpfGJpKGxifHJkKXxibChhY3xheil8YnIoZXx2KXd8YnVtYnxid1xcLShufHUpfGM1NVxcL3xjYXBpfGNjd2F8Y2RtXFwtfGNlbGx8Y2h0bXxjbGRjfGNtZFxcLXxjbyhtcHxuZCl8Y3Jhd3xkYShpdHxsbHxuZyl8ZGJ0ZXxkY1xcLXN8ZGV2aXxkaWNhfGRtb2J8ZG8oY3xwKW98ZHMoMTJ8XFwtZCl8ZWwoNDl8YWkpfGVtKGwyfHVsKXxlcihpY3xrMCl8ZXNsOHxleihbNC03XTB8b3N8d2F8emUpfGZldGN8Zmx5KFxcLXxfKXxnMSB1fGc1NjB8Z2VuZXxnZlxcLTV8Z1xcLW1vfGdvKFxcLnd8b2QpfGdyKGFkfHVuKXxoYWllfGhjaXR8aGRcXC0obXxwfHQpfGhlaVxcLXxoaShwdHx0YSl8aHAoIGl8aXApfGhzXFwtY3xodChjKFxcLXwgfF98YXxnfHB8c3x0KXx0cCl8aHUoYXd8dGMpfGlcXC0oMjB8Z298bWEpfGkyMzB8aWFjKCB8XFwtfFxcLyl8aWJyb3xpZGVhfGlnMDF8aWtvbXxpbTFrfGlubm98aXBhcXxpcmlzfGphKHR8dilhfGpicm98amVtdXxqaWdzfGtkZGl8a2VqaXxrZ3QoIHxcXC8pfGtsb258a3B0IHxrd2NcXC18a3lvKGN8ayl8bGUobm98eGkpfGxnKCBnfFxcLyhrfGx8dSl8NTB8NTR8XFwtW2Etd10pfGxpYnd8bHlueHxtMVxcLXd8bTNnYXxtNTBcXC98bWEodGV8dWl8eG8pfG1jKDAxfDIxfGNhKXxtXFwtY3J8bWUocmN8cmkpfG1pKG84fG9hfHRzKXxtbWVmfG1vKDAxfDAyfGJpfGRlfGRvfHQoXFwtfCB8b3x2KXx6eil8bXQoNTB8cDF8diApfG13YnB8bXl3YXxuMTBbMC0yXXxuMjBbMi0zXXxuMzAoMHwyKXxuNTAoMHwyfDUpfG43KDAoMHwxKXwxMCl8bmUoKGN8bSlcXC18b258dGZ8d2Z8d2d8d3QpfG5vayg2fGkpfG56cGh8bzJpbXxvcCh0aXx3dil8b3Jhbnxvd2cxfHA4MDB8cGFuKGF8ZHx0KXxwZHhnfHBnKDEzfFxcLShbMS04XXxjKSl8cGhpbHxwaXJlfHBsKGF5fHVjKXxwblxcLTJ8cG8oY2t8cnR8c2UpfHByb3h8cHNpb3xwdFxcLWd8cWFcXC1hfHFjKDA3fDEyfDIxfDMyfDYwfFxcLVsyLTddfGlcXC0pfHF0ZWt8cjM4MHxyNjAwfHJha3N8cmltOXxybyh2ZXx6byl8czU1XFwvfHNhKGdlfG1hfG1tfG1zfG55fHZhKXxzYygwMXxoXFwtfG9vfHBcXC0pfHNka1xcL3xzZShjKFxcLXwwfDEpfDQ3fG1jfG5kfHJpKXxzZ2hcXC18c2hhcnxzaWUoXFwtfG0pfHNrXFwtMHxzbCg0NXxpZCl8c20oYWx8YXJ8YjN8aXR8dDUpfHNvKGZ0fG55KXxzcCgwMXxoXFwtfHZcXC18diApfHN5KDAxfG1iKXx0MigxOHw1MCl8dDYoMDB8MTB8MTgpfHRhKGd0fGxrKXx0Y2xcXC18dGRnXFwtfHRlbChpfG0pfHRpbVxcLXx0XFwtbW98dG8ocGx8c2gpfHRzKDcwfG1cXC18bTN8bTUpfHR4XFwtOXx1cChcXC5ifGcxfHNpKXx1dHN0fHY0MDB8djc1MHx2ZXJpfHZpKHJnfHRlKXx2ayg0MHw1WzAtM118XFwtdil8dm00MHx2b2RhfHZ1bGN8dngoNTJ8NTN8NjB8NjF8NzB8ODB8ODF8ODN8ODV8OTgpfHczYyhcXC18ICl8d2ViY3x3aGl0fHdpKGcgfG5jfG53KXx3bWxifHdvbnV8eDcwMHx5YXNcXC18eW91cnx6ZXRvfHp0ZVxcLS9pLnRlc3QoXG4gICAgICBhLnN1YnN0cigwLCA0KVxuICAgIClcbiAgKVxuICAgIF9pc01vYmlsZSA9IHRydWU7XG59KSh2ZW5kb3IpO1xuXG5leHBvcnQgY29uc3QgSXNNb2JpbGUgPSBfaXNNb2JpbGU7XG4iLCJleHBvcnQgdHlwZSBWZXJ0aWNhbFBvc2l0aW9uID0gXCJ0b3BcIiB8IFwiYm90dG9tXCIgfCBcIm1pZGRsZVwiO1xuZXhwb3J0IHR5cGUgSG9yaXpvbnRhbFBvc2l0aW9uID0gXCJsZWZ0XCIgfCBcInJpZ2h0XCIgfCBcImNlbnRlclwiO1xuZXhwb3J0IGludGVyZmFjZSBJUG9zaXRpb24ge1xuICBsZWZ0PzogbnVtYmVyIHwgc3RyaW5nO1xuICB0b3A/OiBudW1iZXIgfCBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU51bWJlclBvc2l0aW9uIGV4dGVuZHMgSVBvc2l0aW9uIHtcbiAgbGVmdD86IG51bWJlcjtcbiAgdG9wPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTaXplIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBQb3B1cFV0aWxzIHtcbiAgcHVibGljIHN0YXRpYyBjYWxjdWxhdGVQb3NpdGlvbihcbiAgICB0YXJnZXRSZWN0OiBDbGllbnRSZWN0LFxuICAgIGhlaWdodDogbnVtYmVyLFxuICAgIHdpZHRoOiBudW1iZXIsXG4gICAgdmVydGljYWxQb3NpdGlvbjogVmVydGljYWxQb3NpdGlvbixcbiAgICBob3Jpem9udGFsUG9zaXRpb246IEhvcml6b250YWxQb3NpdGlvbixcbiAgICBzaG93UG9pbnRlcjogYm9vbGVhblxuICApOiBJTnVtYmVyUG9zaXRpb24ge1xuICAgIGlmIChob3Jpem9udGFsUG9zaXRpb24gPT0gXCJjZW50ZXJcIilcbiAgICAgIHZhciBsZWZ0ID0gKHRhcmdldFJlY3QubGVmdCArIHRhcmdldFJlY3QucmlnaHQgLSB3aWR0aCkgLyAyO1xuICAgIGVsc2UgaWYgKGhvcml6b250YWxQb3NpdGlvbiA9PSBcImxlZnRcIikgbGVmdCA9IHRhcmdldFJlY3QubGVmdCAtIHdpZHRoO1xuICAgIGVsc2UgbGVmdCA9IHRhcmdldFJlY3QucmlnaHQ7XG5cbiAgICBpZiAodmVydGljYWxQb3NpdGlvbiA9PSBcIm1pZGRsZVwiKVxuICAgICAgdmFyIHRvcCA9ICh0YXJnZXRSZWN0LnRvcCArIHRhcmdldFJlY3QuYm90dG9tIC0gaGVpZ2h0KSAvIDI7XG4gICAgZWxzZSBpZiAodmVydGljYWxQb3NpdGlvbiA9PSBcInRvcFwiKSB0b3AgPSB0YXJnZXRSZWN0LnRvcCAtIGhlaWdodDtcbiAgICBlbHNlIHRvcCA9IHRhcmdldFJlY3QuYm90dG9tO1xuXG4gICAgaWYgKHNob3dQb2ludGVyKSB7XG4gICAgICBpZiAoaG9yaXpvbnRhbFBvc2l0aW9uICE9IFwiY2VudGVyXCIgJiYgdmVydGljYWxQb3NpdGlvbiAhPSBcIm1pZGRsZVwiKSB7XG4gICAgICAgIGlmICh2ZXJ0aWNhbFBvc2l0aW9uID09IFwidG9wXCIpIHtcbiAgICAgICAgICB0b3AgPSB0b3AgKyB0YXJnZXRSZWN0LmhlaWdodDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0b3AgPSB0b3AgLSB0YXJnZXRSZWN0LmhlaWdodDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IGxlZnQ6IE1hdGgucm91bmQobGVmdCksIHRvcDogTWF0aC5yb3VuZCh0b3ApIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHVwZGF0ZVZlcnRpY2FsRGltZW5zaW9ucyhcbiAgICB0b3A6IG51bWJlcixcbiAgICBoZWlnaHQ6IG51bWJlcixcbiAgICB3aW5kb3dIZWlnaHQ6IG51bWJlclxuICApIHtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGlmICh0b3AgPCAwKSB7XG4gICAgICByZXN1bHQgPSB7IGhlaWdodDogaGVpZ2h0ICsgdG9wLCB0b3A6IDAgfTtcbiAgICB9IGVsc2UgaWYgKGhlaWdodCArIHRvcCA+IHdpbmRvd0hlaWdodCkge1xuICAgICAgcmVzdWx0ID0geyBoZWlnaHQ6IHdpbmRvd0hlaWdodCAtIHRvcCwgdG9wOiB0b3AgfTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgdXBkYXRlVmVydGljYWxQb3NpdGlvbihcbiAgICB0YXJnZXRSZWN0OiBDbGllbnRSZWN0LFxuICAgIGhlaWdodDogbnVtYmVyLFxuICAgIHZlcnRpY2FsUG9zaXRpb246IFZlcnRpY2FsUG9zaXRpb24sXG4gICAgc2hvd1BvaW50ZXI6IGJvb2xlYW4sXG4gICAgd2luZG93SGVpZ2h0OiBudW1iZXJcbiAgKTogVmVydGljYWxQb3NpdGlvbiB7XG4gICAgbGV0IGRlbHRhVG9wID1cbiAgICAgIGhlaWdodCAtICh0YXJnZXRSZWN0LnRvcCArIChzaG93UG9pbnRlciA/IHRhcmdldFJlY3QuaGVpZ2h0IDogMCkpO1xuICAgIGxldCBkZWx0YUJvdHRvbSA9XG4gICAgICBoZWlnaHQgK1xuICAgICAgdGFyZ2V0UmVjdC5ib3R0b20gLVxuICAgICAgKHNob3dQb2ludGVyID8gdGFyZ2V0UmVjdC5oZWlnaHQgOiAwKSAtXG4gICAgICB3aW5kb3dIZWlnaHQ7XG4gICAgaWYgKGRlbHRhVG9wID4gMCAmJiBkZWx0YUJvdHRvbSA8PSAwICYmIHZlcnRpY2FsUG9zaXRpb24gPT0gXCJ0b3BcIikge1xuICAgICAgdmVydGljYWxQb3NpdGlvbiA9IFwiYm90dG9tXCI7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGRlbHRhQm90dG9tID4gMCAmJlxuICAgICAgZGVsdGFUb3AgPD0gMCAmJlxuICAgICAgdmVydGljYWxQb3NpdGlvbiA9PSBcImJvdHRvbVwiXG4gICAgKSB7XG4gICAgICB2ZXJ0aWNhbFBvc2l0aW9uID0gXCJ0b3BcIjtcbiAgICB9IGVsc2UgaWYgKGRlbHRhQm90dG9tID4gMCAmJiBkZWx0YVRvcCA+IDApIHtcbiAgICAgIHZlcnRpY2FsUG9zaXRpb24gPSBkZWx0YVRvcCA8IGRlbHRhQm90dG9tID8gXCJ0b3BcIiA6IFwiYm90dG9tXCI7XG4gICAgfVxuICAgIHJldHVybiB2ZXJ0aWNhbFBvc2l0aW9uO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBjYWxjdWxhdGVQb3B1cERpcmVjdGlvbihcbiAgICB2ZXJ0aWNhbFBvc2l0aW9uOiBWZXJ0aWNhbFBvc2l0aW9uLFxuICAgIGhvcml6b250YWxQb3NpdGlvbjogSG9yaXpvbnRhbFBvc2l0aW9uXG4gICkge1xuICAgIHZhciBwb3B1cERpcmVjdGlvbjogc3RyaW5nO1xuICAgIGlmIChob3Jpem9udGFsUG9zaXRpb24gPT0gXCJjZW50ZXJcIiAmJiB2ZXJ0aWNhbFBvc2l0aW9uICE9IFwibWlkZGxlXCIpIHtcbiAgICAgIHBvcHVwRGlyZWN0aW9uID0gdmVydGljYWxQb3NpdGlvbjtcbiAgICB9IGVsc2UgaWYgKGhvcml6b250YWxQb3NpdGlvbiAhPSBcImNlbnRlclwiKSB7XG4gICAgICBwb3B1cERpcmVjdGlvbiA9IGhvcml6b250YWxQb3NpdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIHBvcHVwRGlyZWN0aW9uO1xuICB9XG5cbiAgLy9jYWxsZWQgd2hlbiBzaG93UG9pbnRlciAgaXMgdHJ1ZVxuICBwdWJsaWMgc3RhdGljIGNhbGN1bGF0ZVBvaW50ZXJUYXJnZXQoXG4gICAgdGFyZ2V0UmVjdDogQ2xpZW50UmVjdCxcbiAgICB0b3A6IG51bWJlcixcbiAgICBsZWZ0OiBudW1iZXIsXG4gICAgdmVydGljYWxQb3NpdGlvbjogVmVydGljYWxQb3NpdGlvbixcbiAgICBob3Jpem9udGFsUG9zaXRpb246IEhvcml6b250YWxQb3NpdGlvblxuICApIHtcbiAgICB2YXIgdGFyZ2V0UG9zOiBJTnVtYmVyUG9zaXRpb24gPSB7fTtcbiAgICBpZiAoaG9yaXpvbnRhbFBvc2l0aW9uICE9IFwiY2VudGVyXCIpIHtcbiAgICAgIHRhcmdldFBvcy50b3AgPSB0YXJnZXRSZWN0LnRvcCArIHRhcmdldFJlY3QuaGVpZ2h0IC8gMjtcbiAgICAgIHRhcmdldFBvcy5sZWZ0ID0gdGFyZ2V0UmVjdFtob3Jpem9udGFsUG9zaXRpb25dO1xuICAgIH0gZWxzZSBpZiAodmVydGljYWxQb3NpdGlvbiAhPSBcIm1pZGRsZVwiKSB7XG4gICAgICB0YXJnZXRQb3MudG9wID0gdGFyZ2V0UmVjdFt2ZXJ0aWNhbFBvc2l0aW9uXTtcbiAgICAgIHRhcmdldFBvcy5sZWZ0ID0gdGFyZ2V0UmVjdC5sZWZ0ICsgdGFyZ2V0UmVjdC53aWR0aCAvIDI7XG4gICAgfVxuICAgIHRhcmdldFBvcy5sZWZ0ID0gTWF0aC5yb3VuZCh0YXJnZXRQb3MubGVmdCAtIGxlZnQpO1xuICAgIHRhcmdldFBvcy50b3AgPSBNYXRoLnJvdW5kKHRhcmdldFBvcy50b3AgLSB0b3ApO1xuICAgIHJldHVybiB0YXJnZXRQb3M7XG4gIH1cbn1cbiIsImltcG9ydCB7IEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyIH0gZnJvbSBcIi4uL2FjdGlvbnMvYWRhcHRpdmUtY29udGFpbmVyXCI7XG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tIFwiLi4vYWN0aW9ucy9hY3Rpb25cIjtcblxuaW50ZXJmYWNlIElEaW1lbnNpb25zIHtcbiAgc2Nyb2xsOiBudW1iZXI7XG4gIG9mZnNldDogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgUmVzcG9uc2l2aXR5TWFuYWdlciB7XG4gIHByaXZhdGUgcmVzaXplT2JzZXJ2ZXI6IFJlc2l6ZU9ic2VydmVyID0gdW5kZWZpbmVkO1xuICBwcml2YXRlIGlzSW5pbGl6ZWQgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIG1pbkRpbWVuc2lvbkNvbnN0ID0gNTY7XG4gIHNlcGFyYXRvclNpemUgPSAxNztcblxuICBwdWJsaWMgZ2V0Q29tcHV0ZWRTdHlsZTogKFxuICAgIGVsdDogRWxlbWVudFxuICApID0+IENTU1N0eWxlRGVjbGFyYXRpb24gPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZS5iaW5kKHdpbmRvdyk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGNvbnRhaW5lcjogSFRNTERpdkVsZW1lbnQsXG4gICAgcHJpdmF0ZSBtb2RlbDogQWRhcHRpdmVBY3Rpb25Db250YWluZXIsXG4gICAgcHJpdmF0ZSBpdGVtc1NlbGVjdG9yOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSBkb3RzSXRlbVNpemU6IG51bWJlciA9IDQ4XG4gICkge1xuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKF8pID0+IHRoaXMucHJvY2VzcygpKTtcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5jb250YWluZXIucGFyZW50RWxlbWVudCk7XG4gIH1cblxuICBnZXQgaXRlbXMoKTogQXJyYXk8QWN0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWwuYWN0aW9ucy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0udmlzaWJsZSAhPT0gZmFsc2UpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldERpbWVuc2lvbnMoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBJRGltZW5zaW9ucyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjcm9sbDogZWxlbWVudC5zY3JvbGxXaWR0aCxcbiAgICAgIG9mZnNldDogZWxlbWVudC5vZmZzZXRXaWR0aCxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEF2YWlsYWJsZVNwYWNlKCk6IG51bWJlciB7XG4gICAgY29uc3Qgc3R5bGU6IENTU1N0eWxlRGVjbGFyYXRpb24gPSB0aGlzLmdldENvbXB1dGVkU3R5bGUodGhpcy5jb250YWluZXIpO1xuICAgIGxldCBzcGFjZSA9IHRoaXMuY29udGFpbmVyLm9mZnNldFdpZHRoO1xuICAgIGlmIChzdHlsZS5ib3hTaXppbmcgPT09IFwiYm9yZGVyLWJveFwiKSB7XG4gICAgICBzcGFjZSAtPSBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdMZWZ0KSArIHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZ1JpZ2h0KTtcbiAgICB9XG4gICAgcmV0dXJuIHNwYWNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhbGNJdGVtU2l6ZShpdGVtOiBIVE1MRGl2RWxlbWVudCk6IG51bWJlciB7XG4gICAgcmV0dXJuIGl0ZW0ub2Zmc2V0V2lkdGg7XG4gIH1cblxuICBwcml2YXRlIGNhbGNJdGVtc1NpemVzKCkge1xuICAgIGNvbnN0IGFjdGlvbnMgPSB0aGlzLm1vZGVsLmFjdGlvbnM7XG4gICAgdGhpcy5jb250YWluZXJcbiAgICAgIC5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuaXRlbXNTZWxlY3RvcilcbiAgICAgIC5mb3JFYWNoKChpdGVtOiBIVE1MRGl2RWxlbWVudCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICBsZXQgY3VycmVudEFjdGlvbiA9IGFjdGlvbnNbaW5kZXhdO1xuICAgICAgICBjdXJyZW50QWN0aW9uLm1heERpbWVuc2lvbiA9IHRoaXMuY2FsY0l0ZW1TaXplKGl0ZW0pO1xuICAgICAgICBjdXJyZW50QWN0aW9uLm1pbkRpbWVuc2lvbiA9IGN1cnJlbnRBY3Rpb24uY2FuU2hyaW5rXG4gICAgICAgICAgPyB0aGlzLm1pbkRpbWVuc2lvbkNvbnN0ICtcbiAgICAgICAgICAgIChjdXJyZW50QWN0aW9uLm5lZWRTZXBhcmF0b3IgPyB0aGlzLnNlcGFyYXRvclNpemUgOiAwKVxuICAgICAgICAgIDogY3VycmVudEFjdGlvbi5tYXhEaW1lbnNpb247XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VmlzaWJsZUl0ZW1zQ291bnQoc2l6ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBpdGVtc1NpemVzOiBudW1iZXJbXSA9IHRoaXMuaXRlbXMubWFwKChpdGVtKSA9PiBpdGVtLm1pbkRpbWVuc2lvbik7XG4gICAgbGV0IGN1cnJTaXplOiBudW1iZXIgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXNTaXplcy5sZW5ndGg7IGkrKykge1xuICAgICAgY3VyclNpemUgKz0gaXRlbXNTaXplc1tpXTtcbiAgICAgIGlmIChjdXJyU2l6ZSA+IHNpemUpIHJldHVybiBpO1xuICAgIH1cbiAgICByZXR1cm4gaTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlSXRlbU1vZGUoZGltZW5zaW9uOiBudW1iZXIsIG1pblNpemU6IG51bWJlciwgbWF4U2l6ZTogbnVtYmVyKSB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLml0ZW1zO1xuICAgIGZvciAobGV0IGluZGV4ID0gaXRlbXMubGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgICAgaWYgKG1pblNpemUgPD0gZGltZW5zaW9uICYmIGRpbWVuc2lvbiA8IG1heFNpemUpIHtcbiAgICAgICAgbWF4U2l6ZSAtPSBpdGVtc1tpbmRleF0ubWF4RGltZW5zaW9uIC0gaXRlbXNbaW5kZXhdLm1pbkRpbWVuc2lvbjtcbiAgICAgICAgaXRlbXNbaW5kZXhdLm1vZGUgPSBcInNtYWxsXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpdGVtc1tpbmRleF0ubW9kZSA9IFwibGFyZ2VcIjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZml0KGRpbWVuc2lvbjogbnVtYmVyKSB7XG4gICAgaWYgKGRpbWVuc2lvbiA8PSAwKSByZXR1cm47XG5cbiAgICB0aGlzLm1vZGVsLnJlbW92ZURvdHNCdXR0b24oKTtcbiAgICBsZXQgbWluU2l6ZSA9IDA7XG4gICAgbGV0IG1heFNpemUgPSAwO1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5pdGVtcztcblxuICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIG1pblNpemUgKz0gaXRlbS5taW5EaW1lbnNpb247XG4gICAgICBtYXhTaXplICs9IGl0ZW0ubWF4RGltZW5zaW9uO1xuICAgIH0pO1xuXG4gICAgaWYgKGRpbWVuc2lvbiA+PSBtYXhTaXplKSB7XG4gICAgICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PiAoaXRlbS5tb2RlID0gXCJsYXJnZVwiKSk7XG4gICAgfSBlbHNlIGlmIChkaW1lbnNpb24gPCBtaW5TaXplKSB7XG4gICAgICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PiAoaXRlbS5tb2RlID0gXCJzbWFsbFwiKSk7XG4gICAgICB0aGlzLm1vZGVsLnNob3dGaXJzdE4oXG4gICAgICAgIHRoaXMuZ2V0VmlzaWJsZUl0ZW1zQ291bnQoZGltZW5zaW9uIC0gdGhpcy5kb3RzSXRlbVNpemUpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwZGF0ZUl0ZW1Nb2RlKGRpbWVuc2lvbiwgbWluU2l6ZSwgbWF4U2l6ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0luaWxpemVkKSB7XG4gICAgICB0aGlzLmNhbGNJdGVtc1NpemVzKCk7XG4gICAgICB0aGlzLmlzSW5pbGl6ZWQgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLmZpdCh0aGlzLmdldEF2YWlsYWJsZVNwYWNlKCkpO1xuICB9XG5cbiAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFZlcnRpY2FsUmVzcG9uc2l2aXR5TWFuYWdlciBleHRlbmRzIFJlc3BvbnNpdml0eU1hbmFnZXIge1xuICBwcm90ZWN0ZWQgbWluRGltZW5zaW9uQ29uc3QgPSA0MDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBjb250YWluZXI6IEhUTUxEaXZFbGVtZW50LFxuICAgIG1vZGVsOiBBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lcixcbiAgICBpdGVtc1NlbGVjdG9yOiBzdHJpbmcsXG4gICAgZG90c0l0ZW1TaXplPzogbnVtYmVyXG4gICkge1xuICAgIHN1cGVyKGNvbnRhaW5lciwgbW9kZWwsIGl0ZW1zU2VsZWN0b3IsIGRvdHNJdGVtU2l6ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0RGltZW5zaW9ucygpOiBJRGltZW5zaW9ucyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjcm9sbDogdGhpcy5jb250YWluZXIuc2Nyb2xsSGVpZ2h0LFxuICAgICAgb2Zmc2V0OiB0aGlzLmNvbnRhaW5lci5vZmZzZXRIZWlnaHQsXG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRBdmFpbGFibGVTcGFjZSgpOiBudW1iZXIge1xuICAgIGNvbnN0IHN0eWxlOiBDU1NTdHlsZURlY2xhcmF0aW9uID0gdGhpcy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuY29udGFpbmVyKTtcbiAgICBsZXQgc3BhY2U6IG51bWJlciA9IHRoaXMuY29udGFpbmVyLm9mZnNldEhlaWdodDtcbiAgICBpZiAoc3R5bGUuYm94U2l6aW5nID09PSBcImJvcmRlci1ib3hcIikge1xuICAgICAgc3BhY2UgLT0gcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nVG9wKSArIHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZ0JvdHRvbSk7XG4gICAgfVxuICAgIHJldHVybiBzcGFjZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjYWxjSXRlbVNpemUoaXRlbTogSFRNTERpdkVsZW1lbnQpOiBudW1iZXIge1xuICAgIHJldHVybiBpdGVtLm9mZnNldEhlaWdodDtcbiAgfVxufVxuIiwiaW1wb3J0IHsgc2V0dGluZ3MgfSBmcm9tIFwiLi8uLi9zZXR0aW5nc1wiO1xuZnVuY3Rpb24gY29tcGFyZVZlcnNpb25zKGE6IGFueSwgYjogYW55KSB7XG4gIGNvbnN0IHJlZ0V4U3RyaXAwOiBSZWdFeHAgPSAvKFxcLjArKSskLztcbiAgY29uc3Qgc2VnbWVudHNBOiBzdHJpbmdbXSA9IGEucmVwbGFjZShyZWdFeFN0cmlwMCwgXCJcIikuc3BsaXQoXCIuXCIpO1xuICBjb25zdCBzZWdtZW50c0I6IHN0cmluZ1tdID0gYi5yZXBsYWNlKHJlZ0V4U3RyaXAwLCBcIlwiKS5zcGxpdChcIi5cIik7XG4gIGNvbnN0IGxlbjogbnVtYmVyID0gTWF0aC5taW4oc2VnbWVudHNBLmxlbmd0aCwgc2VnbWVudHNCLmxlbmd0aCk7XG4gIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGNvbnN0IGRpZmY6IG51bWJlciA9XG4gICAgICBwYXJzZUludChzZWdtZW50c0FbaV0sIDEwKSAtIHBhcnNlSW50KHNlZ21lbnRzQltpXSwgMTApO1xuICAgIGlmIChkaWZmKSB7XG4gICAgICByZXR1cm4gZGlmZjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNlZ21lbnRzQS5sZW5ndGggLSBzZWdtZW50c0IubGVuZ3RoO1xufVxuZnVuY3Rpb24gY29uZmlybUFjdGlvbihtZXNzYWdlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKCEhc2V0dGluZ3MgJiYgISFzZXR0aW5ncy5jb25maXJtQWN0aW9uRnVuYylcbiAgICByZXR1cm4gc2V0dGluZ3MuY29uZmlybUFjdGlvbkZ1bmMobWVzc2FnZSk7XG4gIHJldHVybiBjb25maXJtKG1lc3NhZ2UpO1xufVxuZnVuY3Rpb24gZGV0ZWN0SUVCcm93c2VyKCkge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGZhbHNlO1xuICBjb25zdCB1YTogc3RyaW5nID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7XG4gIGNvbnN0IG9sZEllOiBudW1iZXIgPSB1YS5pbmRleE9mKFwiTVNJRSBcIik7XG4gIGNvbnN0IGVsZXZlbkllOiBudW1iZXIgPSB1YS5pbmRleE9mKFwiVHJpZGVudC9cIik7XG4gIHJldHVybiBvbGRJZSA+IC0xIHx8IGVsZXZlbkllID4gLTE7XG59XG5mdW5jdGlvbiBkZXRlY3RJRU9yRWRnZSgpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiAoPGFueT5kZXRlY3RJRU9yRWRnZSkuaXNJRU9yRWRnZSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIGNvbnN0IHVhOiBzdHJpbmcgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgICBjb25zdCBtc2llOiBudW1iZXIgPSB1YS5pbmRleE9mKFwiTVNJRSBcIik7XG4gICAgY29uc3QgdHJpZGVudDogbnVtYmVyID0gdWEuaW5kZXhPZihcIlRyaWRlbnQvXCIpO1xuICAgIGNvbnN0IGVkZ2U6IG51bWJlciA9IHVhLmluZGV4T2YoXCJFZGdlL1wiKTtcbiAgICAoPGFueT5kZXRlY3RJRU9yRWRnZSkuaXNJRU9yRWRnZSA9IGVkZ2UgPiAwIHx8IHRyaWRlbnQgPiAwIHx8IG1zaWUgPiAwO1xuICB9XG4gIHJldHVybiAoPGFueT5kZXRlY3RJRU9yRWRnZSkuaXNJRU9yRWRnZTtcbn1cbmZ1bmN0aW9uIGxvYWRGaWxlRnJvbUJhc2U2NChiNjREYXRhOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBieXRlU3RyaW5nOiBzdHJpbmcgPSBhdG9iKGI2NERhdGEuc3BsaXQoXCIsXCIpWzFdKTtcblxuICAgIC8vIHNlcGFyYXRlIG91dCB0aGUgbWltZSBjb21wb25lbnRcbiAgICBjb25zdCBtaW1lU3RyaW5nOiBzdHJpbmcgPSBiNjREYXRhXG4gICAgICAuc3BsaXQoXCIsXCIpWzBdXG4gICAgICAuc3BsaXQoXCI6XCIpWzFdXG4gICAgICAuc3BsaXQoXCI7XCIpWzBdO1xuXG4gICAgLy8gd3JpdGUgdGhlIGJ5dGVzIG9mIHRoZSBzdHJpbmcgdG8gYW4gQXJyYXlCdWZmZXJcbiAgICBjb25zdCBhYjogQXJyYXlCdWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoYnl0ZVN0cmluZy5sZW5ndGgpO1xuICAgIGNvbnN0IGlhOiBVaW50OEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYWIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZVN0cmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgaWFbaV0gPSBieXRlU3RyaW5nLmNoYXJDb2RlQXQoaSk7XG4gICAgfVxuICAgIC8vIHdyaXRlIHRoZSBBcnJheUJ1ZmZlciB0byBhIGJsb2IsIGFuZCB5b3UncmUgZG9uZVxuICAgIGNvbnN0IGJiOiBCbG9iID0gbmV3IEJsb2IoW2FiXSwgeyB0eXBlOiBtaW1lU3RyaW5nIH0pO1xuICAgIGlmIChcbiAgICAgIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgIHdpbmRvdy5uYXZpZ2F0b3IgJiZcbiAgICAgIHdpbmRvdy5uYXZpZ2F0b3IubXNTYXZlQmxvYlxuICAgICkge1xuICAgICAgd2luZG93Lm5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iKGJiLCBmaWxlTmFtZSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHt9XG59XG5mdW5jdGlvbiBpc01vYmlsZSgpIHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cub3JpZW50YXRpb24gIT09IFwidW5kZWZpbmVkXCJcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNFbGVtZW50VmlzaWJsZShcbiAgZWxlbWVudDogSFRNTEVsZW1lbnQsXG4gIHRocmVzaG9sZDogbnVtYmVyID0gMFxuKTogYm9vbGVhbiB7XG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgZWxlbWVudFJlY3Q6IERPTVJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCB2aWV3SGVpZ2h0OiBudW1iZXIgPSBNYXRoLm1heChcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LFxuICAgIHdpbmRvdy5pbm5lckhlaWdodFxuICApO1xuICBjb25zdCB0b3BXaW46IG51bWJlciA9IC10aHJlc2hvbGQ7XG4gIGNvbnN0IGJvdHRvbVdpbjogbnVtYmVyID0gdmlld0hlaWdodCArIHRocmVzaG9sZDtcbiAgY29uc3QgdG9wRWw6IG51bWJlciA9IGVsZW1lbnRSZWN0LnRvcDtcbiAgY29uc3QgYm90dG9tRWw6IG51bWJlciA9IGVsZW1lbnRSZWN0LmJvdHRvbTtcblxuICBjb25zdCBtYXhUb3A6IG51bWJlciA9IE1hdGgubWF4KHRvcFdpbiwgdG9wRWwpO1xuICBjb25zdCBtaW5Cb3R0b206IG51bWJlciA9IE1hdGgubWluKGJvdHRvbVdpbiwgYm90dG9tRWwpO1xuICByZXR1cm4gbWF4VG9wIDw9IG1pbkJvdHRvbTtcbn1cblxuZnVuY3Rpb24gZmluZFNjcm9sbGFibGVQYXJlbnQoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudCB7XG4gIGlmICghZWxlbWVudCkge1xuICAgIHJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIH1cbiAgaWYgKFxuICAgIGVsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gZWxlbWVudC5jbGllbnRIZWlnaHQgJiZcbiAgICAoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5vdmVyZmxvd1kgPT09IFwic2Nyb2xsXCIgfHxcbiAgICAgIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkub3ZlcmZsb3dZID09PSBcImF1dG9cIilcbiAgKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZpbmRTY3JvbGxhYmxlUGFyZW50KGVsZW1lbnQucGFyZW50RWxlbWVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2Nyb2xsRWxlbWVudEJ5Q2hpbGRJZChpZDogc3RyaW5nKSB7XG4gIGlmICghZG9jdW1lbnQpIHJldHVybjtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gIGlmICghZWwpIHJldHVybjtcbiAgY29uc3Qgc2Nyb2xsYWJsZUVsID0gZmluZFNjcm9sbGFibGVQYXJlbnQoZWwpO1xuICBpZiAoISFzY3JvbGxhYmxlRWwpIHtcbiAgICBzY3JvbGxhYmxlRWwuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoXCJzY3JvbGxcIikpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEljb25OYW1lRnJvbVByb3h5KGljb25OYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoIWljb25OYW1lKSByZXR1cm4gaWNvbk5hbWU7XG4gIHZhciBwcm94eU5hbWUgPSAoPGFueT5zZXR0aW5ncy5jdXN0b21JY29ucylbaWNvbk5hbWVdO1xuICByZXR1cm4gISFwcm94eU5hbWUgPyBwcm94eU5hbWUgOiBpY29uTmFtZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU3ZnKFxuICBzaXplOiBudW1iZXIsXG4gIHdpZHRoOiBudW1iZXIsXG4gIGhlaWdodDogbnVtYmVyLFxuICBpY29uTmFtZTogc3RyaW5nLFxuICBzdmdFbGVtOiBhbnlcbikge1xuICBzdmdFbGVtLnN0eWxlLndpZHRoID0gKHNpemUgfHwgd2lkdGggfHwgMTYpICsgXCJweFwiO1xuICBzdmdFbGVtLnN0eWxlLmhlaWdodCA9IChzaXplIHx8IGhlaWdodCB8fCAxNikgKyBcInB4XCI7XG4gIGNvbnN0IG5vZGU6IGFueSA9IHN2Z0VsZW0uY2hpbGROb2Rlc1swXTtcbiAgY29uc3QgcmVhbEljb25OYW1lID0gZ2V0SWNvbk5hbWVGcm9tUHJveHkoaWNvbk5hbWUpO1xuICBub2RlLnNldEF0dHJpYnV0ZU5TKFxuICAgIFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFxuICAgIFwieGxpbms6aHJlZlwiLFxuICAgIFwiI1wiICsgcmVhbEljb25OYW1lXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bndyYXA8VD4odmFsdWU6IFQgfCAoKCkgPT4gVCkpOiBUIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAoPCgpID0+IFQ+dmFsdWUpKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNpemUodmFsdWU6IGFueSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIFwiXCIgKyB2YWx1ZSArIFwicHhcIjtcbiAgfVxuICBpZiAoISF2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGxhc3RTeW1ib2w6IHN0cmluZyA9IHZhbHVlW3ZhbHVlLmxlbmd0aCAtIDFdO1xuICAgIGlmICgobGFzdFN5bWJvbCA+PSBcIjBcIiAmJiBsYXN0U3ltYm9sIDw9IFwiOVwiKSB8fCBsYXN0U3ltYm9sID09IFwiLlwiKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBudW06IG51bWJlciA9IHBhcnNlRmxvYXQodmFsdWUpO1xuICAgICAgICByZXR1cm4gXCJcIiArIG51bSArIFwicHhcIjtcbiAgICAgIH0gY2F0Y2gge31cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiBkb0tleTJDbGljayhldjogYW55KSB7XG4gIHZhciBlbDogYW55ID0gZXYudGFyZ2V0O1xuICBpZiAoIWVsKSByZXR1cm47XG4gIHZhciBjaGFyID0gZXYud2hpY2ggfHwgZXYua2V5Q29kZTtcbiAgaWYgKGNoYXIgPT09IDEzIHx8IGNoYXIgPT09IDMyKSB7XG4gICAgaWYgKGVsLmNsaWNrKSBlbC5jbGljaygpO1xuICB9IGVsc2UgaWYgKGNoYXIgPT09IDI3KSB7XG4gICAgaWYgKGVsLmJsdXIpIGVsLmJsdXIoKTtcbiAgfVxufVxuXG5leHBvcnQge1xuICBjb21wYXJlVmVyc2lvbnMsXG4gIGNvbmZpcm1BY3Rpb24sXG4gIGRldGVjdElFT3JFZGdlLFxuICBkZXRlY3RJRUJyb3dzZXIsXG4gIGxvYWRGaWxlRnJvbUJhc2U2NCxcbiAgaXNNb2JpbGUsXG4gIGlzRWxlbWVudFZpc2libGUsXG4gIGZpbmRTY3JvbGxhYmxlUGFyZW50LFxuICBzY3JvbGxFbGVtZW50QnlDaGlsZElkLFxuICBjcmVhdGVTdmcsXG4gIGRvS2V5MkNsaWNrLFxuICBnZXRJY29uTmFtZUZyb21Qcm94eSxcbn07XG4iLCJpbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZVwiO1xuaW1wb3J0IHsgSVN1cnZleUVycm9yT3duZXIsIElTdXJ2ZXkgfSBmcm9tIFwiLi9iYXNlLWludGVyZmFjZXNcIjtcbmltcG9ydCB7IFN1cnZleUVycm9yIH0gZnJvbSBcIi4vc3VydmV5LWVycm9yXCI7XG5pbXBvcnQgeyBDdXN0b21FcnJvciwgUmVxdXJlTnVtZXJpY0Vycm9yIH0gZnJvbSBcIi4vZXJyb3JcIjtcbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcbmltcG9ydCB7IElMb2NhbGl6YWJsZU93bmVyLCBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5pbXBvcnQgeyBTZXJpYWxpemVyIH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuaW1wb3J0IHsgQ29uZGl0aW9uUnVubmVyIH0gZnJvbSBcIi4vY29uZGl0aW9uc1wiO1xuaW1wb3J0IHsgSGVscGVycyB9IGZyb20gXCIuL2hlbHBlcnNcIjtcblxuZXhwb3J0IGNsYXNzIFZhbGlkYXRvclJlc3VsdCB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB2YWx1ZTogYW55LCBwdWJsaWMgZXJyb3I6IFN1cnZleUVycm9yID0gbnVsbCkge31cbn1cbi8qKlxuICogQmFzZSBTdXJ2ZXlKUyB2YWxpZGF0b3IgY2xhc3MuXG4gKi9cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlWYWxpZGF0b3IgZXh0ZW5kcyBCYXNlIHtcbiAgcHVibGljIGVycm9yT3duZXI6IElTdXJ2ZXlFcnJvck93bmVyO1xuICBwdWJsaWMgb25Bc3luY0NvbXBsZXRlZDogKHJlc3VsdDogVmFsaWRhdG9yUmVzdWx0KSA9PiB2b2lkO1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJ0ZXh0XCIsIHRoaXMsIHRydWUpO1xuICB9XG4gIHB1YmxpYyBnZXRTdXJ2ZXkobGl2ZTogYm9vbGVhbiA9IGZhbHNlKTogSVN1cnZleSB7XG4gICAgcmV0dXJuICEhdGhpcy5lcnJvck93bmVyICYmICEhKDxhbnk+dGhpcy5lcnJvck93bmVyKVtcImdldFN1cnZleVwiXVxuICAgICAgPyAoPGFueT50aGlzLmVycm9yT3duZXIpLmdldFN1cnZleSgpXG4gICAgICA6IG51bGw7XG4gIH1cbiAgcHVibGljIGdldCB0ZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwidGV4dFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHRleHQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwidGV4dFwiLCB2YWx1ZSk7XG4gIH1cbiAgcHVibGljIGdldCBpc1ZhbGlkYXRlQWxsVmFsdWVzKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBnZXQgbG9jVGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJ0ZXh0XCIpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRFcnJvclRleHQobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy50ZXh0KSByZXR1cm4gdGhpcy50ZXh0O1xuICAgIHJldHVybiB0aGlzLmdldERlZmF1bHRFcnJvclRleHQobmFtZSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERlZmF1bHRFcnJvclRleHQobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuICBwdWJsaWMgdmFsaWRhdGUoXG4gICAgdmFsdWU6IGFueSxcbiAgICBuYW1lOiBzdHJpbmcgPSBudWxsLFxuICAgIHZhbHVlczogYW55ID0gbnVsbCxcbiAgICBwcm9wZXJ0aWVzOiBhbnkgPSBudWxsXG4gICk6IFZhbGlkYXRvclJlc3VsdCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHVibGljIGdldCBpc1J1bm5pbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNBc3luYygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgZ2V0TG9jYWxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICEhdGhpcy5lcnJvck93bmVyID8gdGhpcy5lcnJvck93bmVyLmdldExvY2FsZSgpIDogXCJcIjtcbiAgfVxuICBnZXRNYXJrZG93bkh0bWwodGV4dDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiAhIXRoaXMuZXJyb3JPd25lclxuICAgICAgPyB0aGlzLmVycm9yT3duZXIuZ2V0TWFya2Rvd25IdG1sKHRleHQsIG5hbWUpXG4gICAgICA6IG51bGw7XG4gIH1cbiAgZ2V0UmVuZGVyZXIobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gISF0aGlzLmVycm9yT3duZXIgPyB0aGlzLmVycm9yT3duZXIuZ2V0UmVuZGVyZXIobmFtZSkgOiBudWxsO1xuICB9XG4gIGdldFByb2Nlc3NlZFRleHQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gISF0aGlzLmVycm9yT3duZXIgPyB0aGlzLmVycm9yT3duZXIuZ2V0UHJvY2Vzc2VkVGV4dCh0ZXh0KSA6IHRleHQ7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZUN1c3RvbUVycm9yKG5hbWU6IHN0cmluZyk6IFN1cnZleUVycm9yIHtcbiAgICByZXR1cm4gbmV3IEN1c3RvbUVycm9yKHRoaXMuZ2V0RXJyb3JUZXh0KG5hbWUpLCB0aGlzLmVycm9yT3duZXIpO1xuICB9XG4gIHB1YmxpYyB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHZhciByZXMgPSB0aGlzLmdldFR5cGUoKS5yZXBsYWNlKFwidmFsaWRhdG9yXCIsIFwiXCIpO1xuICAgIGlmICghIXRoaXMudGV4dCkge1xuICAgICAgcmVzICs9IFwiLCBcIiArIHRoaXMudGV4dDtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxufVxuZXhwb3J0IGludGVyZmFjZSBJVmFsaWRhdG9yT3duZXIge1xuICBnZXRWYWxpZGF0b3JzKCk6IEFycmF5PFN1cnZleVZhbGlkYXRvcj47XG4gIHZhbGlkYXRlZFZhbHVlOiBhbnk7XG4gIGdldFZhbGlkYXRvclRpdGxlKCk6IHN0cmluZztcbiAgZ2V0RGF0YUZpbHRlcmVkVmFsdWVzKCk6IGFueTtcbiAgZ2V0RGF0YUZpbHRlcmVkUHJvcGVydGllcygpOiBhbnk7XG59XG5leHBvcnQgY2xhc3MgVmFsaWRhdG9yUnVubmVyIHtcbiAgcHJpdmF0ZSBhc3luY1ZhbGlkYXRvcnM6IEFycmF5PFN1cnZleVZhbGlkYXRvcj47XG4gIHB1YmxpYyBvbkFzeW5jQ29tcGxldGVkOiAoZXJyb3JzOiBBcnJheTxTdXJ2ZXlFcnJvcj4pID0+IHZvaWQ7XG4gIHB1YmxpYyBydW4ob3duZXI6IElWYWxpZGF0b3JPd25lcik6IEFycmF5PFN1cnZleUVycm9yPiB7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHZhciB2YWx1ZXMgPSBudWxsO1xuICAgIHZhciBwcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB0aGlzLnByZXBhcmVBc3luY1ZhbGlkYXRvcnMoKTtcbiAgICB2YXIgYXN5bmNSZXN1bHRzOiBBcnJheTxTdXJ2ZXlFcnJvcj4gPSBbXTtcbiAgICB2YXIgdmFsaWRhdG9ycyA9IG93bmVyLmdldFZhbGlkYXRvcnMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbGlkYXRvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2YWxpZGF0b3IgPSB2YWxpZGF0b3JzW2ldO1xuICAgICAgaWYgKCF2YWx1ZXMgJiYgdmFsaWRhdG9yLmlzVmFsaWRhdGVBbGxWYWx1ZXMpIHtcbiAgICAgICAgdmFsdWVzID0gb3duZXIuZ2V0RGF0YUZpbHRlcmVkVmFsdWVzKCk7XG4gICAgICAgIHByb3BlcnRpZXMgPSBvd25lci5nZXREYXRhRmlsdGVyZWRQcm9wZXJ0aWVzKCk7XG4gICAgICB9XG4gICAgICBpZiAodmFsaWRhdG9yLmlzQXN5bmMpIHtcbiAgICAgICAgdGhpcy5hc3luY1ZhbGlkYXRvcnMucHVzaCh2YWxpZGF0b3IpO1xuICAgICAgICB2YWxpZGF0b3Iub25Bc3luY0NvbXBsZXRlZCA9IChyZXN1bHQ6IFZhbGlkYXRvclJlc3VsdCkgPT4ge1xuICAgICAgICAgIGlmICghIXJlc3VsdCAmJiAhIXJlc3VsdC5lcnJvcikgYXN5bmNSZXN1bHRzLnB1c2gocmVzdWx0LmVycm9yKTtcbiAgICAgICAgICBpZiAoIXRoaXMub25Bc3luY0NvbXBsZXRlZCkgcmV0dXJuO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hc3luY1ZhbGlkYXRvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFzeW5jVmFsaWRhdG9yc1tpXS5pc1J1bm5pbmcpIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5vbkFzeW5jQ29tcGxldGVkKGFzeW5jUmVzdWx0cyk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIHZhbGlkYXRvcnMgPSBvd25lci5nZXRWYWxpZGF0b3JzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWxpZGF0b3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdmFsaWRhdG9yID0gdmFsaWRhdG9yc1tpXTtcblxuICAgICAgdmFyIHZhbGlkYXRvclJlc3VsdCA9IHZhbGlkYXRvci52YWxpZGF0ZShcbiAgICAgICAgb3duZXIudmFsaWRhdGVkVmFsdWUsXG4gICAgICAgIG93bmVyLmdldFZhbGlkYXRvclRpdGxlKCksXG4gICAgICAgIHZhbHVlcyxcbiAgICAgICAgcHJvcGVydGllc1xuICAgICAgKTtcbiAgICAgIGlmICghIXZhbGlkYXRvclJlc3VsdCAmJiAhIXZhbGlkYXRvclJlc3VsdC5lcnJvcikge1xuICAgICAgICByZXMucHVzaCh2YWxpZGF0b3JSZXN1bHQuZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5hc3luY1ZhbGlkYXRvcnMubGVuZ3RoID09IDAgJiYgISF0aGlzLm9uQXN5bmNDb21wbGV0ZWQpXG4gICAgICB0aGlzLm9uQXN5bmNDb21wbGV0ZWQoW10pO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSBwcmVwYXJlQXN5bmNWYWxpZGF0b3JzKCkge1xuICAgIGlmICghIXRoaXMuYXN5bmNWYWxpZGF0b3JzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXN5bmNWYWxpZGF0b3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMuYXN5bmNWYWxpZGF0b3JzW2ldLm9uQXN5bmNDb21wbGV0ZWQgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmFzeW5jVmFsaWRhdG9ycyA9IFtdO1xuICB9XG59XG4vKipcbiAqIFZhbGlkYXRlIG51bWVyaWMgdmFsdWVzLlxuICovXG5leHBvcnQgY2xhc3MgTnVtZXJpY1ZhbGlkYXRvciBleHRlbmRzIFN1cnZleVZhbGlkYXRvciB7XG4gIGNvbnN0cnVjdG9yKG1pblZhbHVlOiBudW1iZXIgPSBudWxsLCBtYXhWYWx1ZTogbnVtYmVyID0gbnVsbCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5taW5WYWx1ZSA9IG1pblZhbHVlO1xuICAgIHRoaXMubWF4VmFsdWUgPSBtYXhWYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIm51bWVyaWN2YWxpZGF0b3JcIjtcbiAgfVxuICBwdWJsaWMgdmFsaWRhdGUoXG4gICAgdmFsdWU6IGFueSxcbiAgICBuYW1lOiBzdHJpbmcgPSBudWxsLFxuICAgIHZhbHVlczogYW55ID0gbnVsbCxcbiAgICBwcm9wZXJ0aWVzOiBhbnkgPSBudWxsXG4gICk6IFZhbGlkYXRvclJlc3VsdCB7XG4gICAgaWYgKHRoaXMuaXNWYWx1ZUVtcHR5KHZhbHVlKSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKCFIZWxwZXJzLmlzTnVtYmVyKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIG5ldyBWYWxpZGF0b3JSZXN1bHQoXG4gICAgICAgIG51bGwsXG4gICAgICAgIG5ldyBSZXF1cmVOdW1lcmljRXJyb3IobnVsbCwgdGhpcy5lcnJvck93bmVyKVxuICAgICAgKTtcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBWYWxpZGF0b3JSZXN1bHQocGFyc2VGbG9hdCh2YWx1ZSkpO1xuICAgIGlmICh0aGlzLm1pblZhbHVlICE9PSBudWxsICYmIHRoaXMubWluVmFsdWUgPiByZXN1bHQudmFsdWUpIHtcbiAgICAgIHJlc3VsdC5lcnJvciA9IHRoaXMuY3JlYXRlQ3VzdG9tRXJyb3IobmFtZSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBpZiAodGhpcy5tYXhWYWx1ZSAhPT0gbnVsbCAmJiB0aGlzLm1heFZhbHVlIDwgcmVzdWx0LnZhbHVlKSB7XG4gICAgICByZXN1bHQuZXJyb3IgPSB0aGlzLmNyZWF0ZUN1c3RvbUVycm9yKG5hbWUpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiA/IG51bGwgOiByZXN1bHQ7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERlZmF1bHRFcnJvclRleHQobmFtZTogc3RyaW5nKSB7XG4gICAgdmFyIHZOYW1lID0gbmFtZSA/IG5hbWUgOiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwidmFsdWVcIik7XG4gICAgaWYgKHRoaXMubWluVmFsdWUgIT09IG51bGwgJiYgdGhpcy5tYXhWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvblxuICAgICAgICAuZ2V0U3RyaW5nKFwibnVtZXJpY01pbk1heFwiKVxuICAgICAgICBbXCJmb3JtYXRcIl0odk5hbWUsIHRoaXMubWluVmFsdWUsIHRoaXMubWF4VmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5taW5WYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uXG4gICAgICAgICAgLmdldFN0cmluZyhcIm51bWVyaWNNaW5cIilcbiAgICAgICAgICBbXCJmb3JtYXRcIl0odk5hbWUsIHRoaXMubWluVmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvblxuICAgICAgICAuZ2V0U3RyaW5nKFwibnVtZXJpY01heFwiKVxuICAgICAgICBbXCJmb3JtYXRcIl0odk5hbWUsIHRoaXMubWF4VmFsdWUpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogVGhlIG1pblZhbHVlIHByb3BlcnR5LlxuICAgKi9cbiAgcHVibGljIGdldCBtaW5WYWx1ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtaW5WYWx1ZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1pblZhbHVlKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWluVmFsdWVcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIG1heFZhbHVlIHByb3BlcnR5LlxuICAgKi9cbiAgcHVibGljIGdldCBtYXhWYWx1ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtYXhWYWx1ZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1heFZhbHVlKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWF4VmFsdWVcIiwgdmFsKTtcbiAgfVxufVxuLyoqXG4gKiBWYWxpZGF0ZSB0ZXh0IHZhbHVlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFRleHRWYWxpZGF0b3IgZXh0ZW5kcyBTdXJ2ZXlWYWxpZGF0b3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBtaW5MZW5ndGg6IG51bWJlciA9IDAsXG4gICAgbWF4TGVuZ3RoOiBudW1iZXIgPSAwLFxuICAgIGFsbG93RGlnaXRzID0gdHJ1ZVxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubWluTGVuZ3RoID0gbWluTGVuZ3RoO1xuICAgIHRoaXMubWF4TGVuZ3RoID0gbWF4TGVuZ3RoO1xuICAgIHRoaXMuYWxsb3dEaWdpdHMgPSBhbGxvd0RpZ2l0cztcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInRleHR2YWxpZGF0b3JcIjtcbiAgfVxuICBwdWJsaWMgdmFsaWRhdGUoXG4gICAgdmFsdWU6IGFueSxcbiAgICBuYW1lOiBzdHJpbmcgPSBudWxsLFxuICAgIHZhbHVlczogYW55ID0gbnVsbCxcbiAgICBwcm9wZXJ0aWVzOiBhbnkgPSBudWxsXG4gICk6IFZhbGlkYXRvclJlc3VsdCB7XG4gICAgaWYgKHRoaXMuaXNWYWx1ZUVtcHR5KHZhbHVlKSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKCF0aGlzLmFsbG93RGlnaXRzKSB7XG4gICAgICB2YXIgcmVnID0gL15bQS1aYS16XFxzXSokLztcbiAgICAgIGlmICghcmVnLnRlc3QodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBuZXcgVmFsaWRhdG9yUmVzdWx0KG51bGwsIHRoaXMuY3JlYXRlQ3VzdG9tRXJyb3IobmFtZSkpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5taW5MZW5ndGggPiAwICYmIHZhbHVlLmxlbmd0aCA8IHRoaXMubWluTGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbmV3IFZhbGlkYXRvclJlc3VsdChudWxsLCB0aGlzLmNyZWF0ZUN1c3RvbUVycm9yKG5hbWUpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubWF4TGVuZ3RoID4gMCAmJiB2YWx1ZS5sZW5ndGggPiB0aGlzLm1heExlbmd0aCkge1xuICAgICAgcmV0dXJuIG5ldyBWYWxpZGF0b3JSZXN1bHQobnVsbCwgdGhpcy5jcmVhdGVDdXN0b21FcnJvcihuYW1lKSk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBnZXREZWZhdWx0RXJyb3JUZXh0KG5hbWU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLm1pbkxlbmd0aCA+IDAgJiYgdGhpcy5tYXhMZW5ndGggPiAwKVxuICAgICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvblxuICAgICAgICAuZ2V0U3RyaW5nKFwidGV4dE1pbk1heExlbmd0aFwiKVxuICAgICAgICBbXCJmb3JtYXRcIl0odGhpcy5taW5MZW5ndGgsIHRoaXMubWF4TGVuZ3RoKTtcbiAgICBpZiAodGhpcy5taW5MZW5ndGggPiAwKVxuICAgICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvblxuICAgICAgICAuZ2V0U3RyaW5nKFwidGV4dE1pbkxlbmd0aFwiKVxuICAgICAgICBbXCJmb3JtYXRcIl0odGhpcy5taW5MZW5ndGgpO1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb25cbiAgICAgIC5nZXRTdHJpbmcoXCJ0ZXh0TWF4TGVuZ3RoXCIpXG4gICAgICBbXCJmb3JtYXRcIl0odGhpcy5tYXhMZW5ndGgpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbWluTGVuZ3RoIHByb3BlcnR5LlxuICAgKi9cbiAgcHVibGljIGdldCBtaW5MZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWluTGVuZ3RoXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbWluTGVuZ3RoKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWluTGVuZ3RoXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBtYXhMZW5ndGggcHJvcGVydHkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1heExlbmd0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtYXhMZW5ndGhcIik7XG4gIH1cbiAgcHVibGljIHNldCBtYXhMZW5ndGgodmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtYXhMZW5ndGhcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGFsbG93RGlnaXRzIHByb3BlcnR5LlxuICAgKi9cbiAgcHVibGljIGdldCBhbGxvd0RpZ2l0cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dEaWdpdHNcIiwgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIHNldCBhbGxvd0RpZ2l0cyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJhbGxvd0RpZ2l0c1wiLCB2YWwpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBbnN3ZXJDb3VudFZhbGlkYXRvciBleHRlbmRzIFN1cnZleVZhbGlkYXRvciB7XG4gIGNvbnN0cnVjdG9yKG1pbkNvdW50OiBudW1iZXIgPSBudWxsLCBtYXhDb3VudDogbnVtYmVyID0gbnVsbCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5taW5Db3VudCA9IG1pbkNvdW50O1xuICAgIHRoaXMubWF4Q291bnQgPSBtYXhDb3VudDtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImFuc3dlcmNvdW50dmFsaWRhdG9yXCI7XG4gIH1cbiAgcHVibGljIHZhbGlkYXRlKFxuICAgIHZhbHVlOiBhbnksXG4gICAgbmFtZTogc3RyaW5nID0gbnVsbCxcbiAgICB2YWx1ZXM6IGFueSA9IG51bGwsXG4gICAgcHJvcGVydGllczogYW55ID0gbnVsbFxuICApOiBWYWxpZGF0b3JSZXN1bHQge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlLmNvbnN0cnVjdG9yICE9IEFycmF5KSByZXR1cm4gbnVsbDtcbiAgICB2YXIgY291bnQgPSB2YWx1ZS5sZW5ndGg7XG4gICAgaWYgKGNvdW50ID09IDApIHJldHVybiBudWxsO1xuICAgIGlmICh0aGlzLm1pbkNvdW50ICYmIGNvdW50IDwgdGhpcy5taW5Db3VudCkge1xuICAgICAgcmV0dXJuIG5ldyBWYWxpZGF0b3JSZXN1bHQoXG4gICAgICAgIG51bGwsXG4gICAgICAgIHRoaXMuY3JlYXRlQ3VzdG9tRXJyb3IoXG4gICAgICAgICAgc3VydmV5TG9jYWxpemF0aW9uXG4gICAgICAgICAgICAuZ2V0U3RyaW5nKFwibWluU2VsZWN0RXJyb3JcIilcbiAgICAgICAgICAgIFtcImZvcm1hdFwiXSh0aGlzLm1pbkNvdW50KVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodGhpcy5tYXhDb3VudCAmJiBjb3VudCA+IHRoaXMubWF4Q291bnQpIHtcbiAgICAgIHJldHVybiBuZXcgVmFsaWRhdG9yUmVzdWx0KFxuICAgICAgICBudWxsLFxuICAgICAgICB0aGlzLmNyZWF0ZUN1c3RvbUVycm9yKFxuICAgICAgICAgIHN1cnZleUxvY2FsaXphdGlvblxuICAgICAgICAgICAgLmdldFN0cmluZyhcIm1heFNlbGVjdEVycm9yXCIpXG4gICAgICAgICAgICBbXCJmb3JtYXRcIl0odGhpcy5tYXhDb3VudClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERlZmF1bHRFcnJvclRleHQobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBtaW5Db3VudCBwcm9wZXJ0eS5cbiAgICovXG4gIHB1YmxpYyBnZXQgbWluQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWluQ291bnRcIik7XG4gIH1cbiAgcHVibGljIHNldCBtaW5Db3VudCh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1pbkNvdW50XCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBtYXhDb3VudCBwcm9wZXJ0eS5cbiAgICovXG4gIHB1YmxpYyBnZXQgbWF4Q291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWF4Q291bnRcIik7XG4gIH1cbiAgcHVibGljIHNldCBtYXhDb3VudCh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1heENvdW50XCIsIHZhbCk7XG4gIH1cbn1cbi8qKlxuICogVXNlIGl0IHRvIHZhbGlkYXRlIHRoZSB0ZXh0IGJ5IHJlZ3VsYXIgZXhwcmVzc2lvbnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBSZWdleFZhbGlkYXRvciBleHRlbmRzIFN1cnZleVZhbGlkYXRvciB7XG4gIGNvbnN0cnVjdG9yKHJlZ2V4OiBzdHJpbmcgPSBudWxsKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnJlZ2V4ID0gcmVnZXg7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJyZWdleHZhbGlkYXRvclwiO1xuICB9XG4gIHB1YmxpYyB2YWxpZGF0ZShcbiAgICB2YWx1ZTogYW55LFxuICAgIG5hbWU6IHN0cmluZyA9IG51bGwsXG4gICAgdmFsdWVzOiBhbnkgPSBudWxsLFxuICAgIHByb3BlcnRpZXM6IGFueSA9IG51bGxcbiAgKTogVmFsaWRhdG9yUmVzdWx0IHtcbiAgICBpZiAoIXRoaXMucmVnZXggfHwgdGhpcy5pc1ZhbHVlRW1wdHkodmFsdWUpKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgcmUgPSBuZXcgUmVnRXhwKHRoaXMucmVnZXgpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcmVzID0gdGhpcy5oYXNFcnJvcihyZSwgdmFsdWVbaV0sIG5hbWUpO1xuICAgICAgICBpZiAocmVzKSByZXR1cm4gcmVzO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5oYXNFcnJvcihyZSwgdmFsdWUsIG5hbWUpO1xuICB9XG4gIHByaXZhdGUgaGFzRXJyb3IocmU6IFJlZ0V4cCwgdmFsdWU6IGFueSwgbmFtZTogc3RyaW5nKTogVmFsaWRhdG9yUmVzdWx0IHtcbiAgICBpZiAocmUudGVzdCh2YWx1ZSkpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBuZXcgVmFsaWRhdG9yUmVzdWx0KHZhbHVlLCB0aGlzLmNyZWF0ZUN1c3RvbUVycm9yKG5hbWUpKTtcbiAgfVxuICAvKipcbiAgICogVGhlIHJlZ2V4IHByb3BlcnR5LlxuICAgKi9cbiAgcHVibGljIGdldCByZWdleCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyZWdleFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJlZ2V4KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicmVnZXhcIiwgdmFsKTtcbiAgfVxufVxuLyoqXG4gKiBWYWxpZGF0ZSBlLW1haWwgYWRkcmVzcyBpbiB0aGUgdGV4dCBpbnB1dFxuICovXG5leHBvcnQgY2xhc3MgRW1haWxWYWxpZGF0b3IgZXh0ZW5kcyBTdXJ2ZXlWYWxpZGF0b3Ige1xuICBwcml2YXRlIHJlID0gL14oKFtePD4oKVxcW1xcXVxcLiw7Olxcc0BcXFwiXSsoXFwuW148PigpXFxbXFxdXFwuLDs6XFxzQFxcXCJdKykqKXwoXFxcIi4rXFxcIikpQCgoW148PigpPVtcXF1cXC4sOzpcXHNAXFxcIl0rXFwuKStbXjw+KCk9W1xcXVxcLiw7Olxcc0BcXFwiXXsyLH0pJC9pO1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiZW1haWx2YWxpZGF0b3JcIjtcbiAgfVxuICBwdWJsaWMgdmFsaWRhdGUoXG4gICAgdmFsdWU6IGFueSxcbiAgICBuYW1lOiBzdHJpbmcgPSBudWxsLFxuICAgIHZhbHVlczogYW55ID0gbnVsbCxcbiAgICBwcm9wZXJ0aWVzOiBhbnkgPSBudWxsXG4gICk6IFZhbGlkYXRvclJlc3VsdCB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKHRoaXMucmUudGVzdCh2YWx1ZSkpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBuZXcgVmFsaWRhdG9yUmVzdWx0KHZhbHVlLCB0aGlzLmNyZWF0ZUN1c3RvbUVycm9yKG5hbWUpKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdEVycm9yVGV4dChuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcImludmFsaWRFbWFpbFwiKTtcbiAgfVxufVxuXG4vKipcbiAqIFNob3cgZXJyb3IgaWYgZXhwcmVzc2lvbiByZXR1cm5zIGZhbHNlXG4gKi9cbmV4cG9ydCBjbGFzcyBFeHByZXNzaW9uVmFsaWRhdG9yIGV4dGVuZHMgU3VydmV5VmFsaWRhdG9yIHtcbiAgcHJpdmF0ZSBjb25kaXRpb25SdW5uZXI6IENvbmRpdGlvblJ1bm5lciA9IG51bGw7XG4gIHByaXZhdGUgaXNSdW5uaW5nVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY29uc3RydWN0b3IoZXhwcmVzc2lvbjogc3RyaW5nID0gbnVsbCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5leHByZXNzaW9uID0gZXhwcmVzc2lvbjtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImV4cHJlc3Npb252YWxpZGF0b3JcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzVmFsaWRhdGVBbGxWYWx1ZXMoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHVibGljIGdldCBpc0FzeW5jKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5lbnN1cmVDb25kaXRpb25SdW5uZXIoKSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblJ1bm5lci5pc0FzeW5jO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNSdW5uaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzUnVubmluZ1ZhbHVlO1xuICB9XG4gIHB1YmxpYyB2YWxpZGF0ZShcbiAgICB2YWx1ZTogYW55LFxuICAgIG5hbWU6IHN0cmluZyA9IG51bGwsXG4gICAgdmFsdWVzOiBhbnkgPSBudWxsLFxuICAgIHByb3BlcnRpZXM6IGFueSA9IG51bGxcbiAgKTogVmFsaWRhdG9yUmVzdWx0IHtcbiAgICBpZiAoIXRoaXMuZW5zdXJlQ29uZGl0aW9uUnVubmVyKCkpIHJldHVybiBudWxsO1xuICAgIHRoaXMuY29uZGl0aW9uUnVubmVyLm9uUnVuQ29tcGxldGUgPSAocmVzKSA9PiB7XG4gICAgICB0aGlzLmlzUnVubmluZ1ZhbHVlID0gZmFsc2U7XG4gICAgICBpZiAoISF0aGlzLm9uQXN5bmNDb21wbGV0ZWQpIHtcbiAgICAgICAgdGhpcy5vbkFzeW5jQ29tcGxldGVkKHRoaXMuZ2VuZXJhdGVFcnJvcihyZXMsIHZhbHVlLCBuYW1lKSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmlzUnVubmluZ1ZhbHVlID0gdHJ1ZTtcbiAgICB2YXIgcmVzID0gdGhpcy5jb25kaXRpb25SdW5uZXIucnVuKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgaWYgKHRoaXMuY29uZGl0aW9uUnVubmVyLmlzQXN5bmMpIHJldHVybiBudWxsO1xuICAgIHRoaXMuaXNSdW5uaW5nVmFsdWUgPSBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZUVycm9yKHJlcywgdmFsdWUsIG5hbWUpO1xuICB9XG4gIHByb3RlY3RlZCBnZW5lcmF0ZUVycm9yKHJlczogYm9vbGVhbiwgdmFsdWU6IGFueSwgbmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKCFyZXMpIHtcbiAgICAgIHJldHVybiBuZXcgVmFsaWRhdG9yUmVzdWx0KHZhbHVlLCB0aGlzLmNyZWF0ZUN1c3RvbUVycm9yKG5hbWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERlZmF1bHRFcnJvclRleHQobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvblxuICAgICAgLmdldFN0cmluZyhcImludmFsaWRFeHByZXNzaW9uXCIpXG4gICAgICBbXCJmb3JtYXRcIl0odGhpcy5leHByZXNzaW9uKTtcbiAgfVxuICBwcm90ZWN0ZWQgZW5zdXJlQ29uZGl0aW9uUnVubmVyKCk6IGJvb2xlYW4ge1xuICAgIGlmICghIXRoaXMuY29uZGl0aW9uUnVubmVyKSB7XG4gICAgICB0aGlzLmNvbmRpdGlvblJ1bm5lci5leHByZXNzaW9uID0gdGhpcy5leHByZXNzaW9uO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICghdGhpcy5leHByZXNzaW9uKSByZXR1cm4gZmFsc2U7XG4gICAgdGhpcy5jb25kaXRpb25SdW5uZXIgPSBuZXcgQ29uZGl0aW9uUnVubmVyKHRoaXMuZXhwcmVzc2lvbik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBleHByZXNzaW9uIHByb3BlcnR5LlxuICAgKi9cbiAgcHVibGljIGdldCBleHByZXNzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImV4cHJlc3Npb25cIik7XG4gIH1cbiAgcHVibGljIHNldCBleHByZXNzaW9uKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZXhwcmVzc2lvblwiLCB2YWwpO1xuICB9XG59XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXCJzdXJ2ZXl2YWxpZGF0b3JcIiwgW1xuICB7IG5hbWU6IFwidGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jVGV4dFwiIH0sXG5dKTtcblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwibnVtZXJpY3ZhbGlkYXRvclwiLFxuICBbXCJtaW5WYWx1ZTpudW1iZXJcIiwgXCJtYXhWYWx1ZTpudW1iZXJcIl0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgTnVtZXJpY1ZhbGlkYXRvcigpO1xuICB9LFxuICBcInN1cnZleXZhbGlkYXRvclwiXG4pO1xuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJ0ZXh0dmFsaWRhdG9yXCIsXG4gIFtcIm1pbkxlbmd0aDpudW1iZXJcIiwgXCJtYXhMZW5ndGg6bnVtYmVyXCIsIFwiYWxsb3dEaWdpdHM6Ym9vbGVhblwiXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBUZXh0VmFsaWRhdG9yKCk7XG4gIH0sXG4gIFwic3VydmV5dmFsaWRhdG9yXCJcbik7XG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcImFuc3dlcmNvdW50dmFsaWRhdG9yXCIsXG4gIFtcIm1pbkNvdW50Om51bWJlclwiLCBcIm1heENvdW50Om51bWJlclwiXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBBbnN3ZXJDb3VudFZhbGlkYXRvcigpO1xuICB9LFxuICBcInN1cnZleXZhbGlkYXRvclwiXG4pO1xuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJyZWdleHZhbGlkYXRvclwiLFxuICBbXCJyZWdleFwiXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBSZWdleFZhbGlkYXRvcigpO1xuICB9LFxuICBcInN1cnZleXZhbGlkYXRvclwiXG4pO1xuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJlbWFpbHZhbGlkYXRvclwiLFxuICBbXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBFbWFpbFZhbGlkYXRvcigpO1xuICB9LFxuICBcInN1cnZleXZhbGlkYXRvclwiXG4pO1xuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcImV4cHJlc3Npb252YWxpZGF0b3JcIixcbiAgW1wiZXhwcmVzc2lvbjpjb25kaXRpb25cIl0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgRXhwcmVzc2lvblZhbGlkYXRvcigpO1xuICB9LFxuICBcInN1cnZleXZhbGlkYXRvclwiXG4pO1xuIiwiaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AsIFdhdGNoIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIEJhc2VWdWUgZXh0ZW5kcyBWdWUge1xuICBwcm90ZWN0ZWQgZ2V0TW9kZWwoKTogQmFzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBzZXRJc1JlbmRlcmluZyh2YWw6IGJvb2xlYW4pIHtcbiAgICB2YXIgbW9kZWwgPSB0aGlzLmdldE1vZGVsKCk7XG4gICAgaWYgKCEhbW9kZWwpIHtcbiAgICAgICg8YW55Pm1vZGVsKS5pc1JlbmRlcmluZyA9IHZhbDtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBnZXRJc1JlbmRlcmluZygpOiBib29sZWFuIHtcbiAgICB2YXIgbW9kZWwgPSB0aGlzLmdldE1vZGVsKCk7XG4gICAgcmV0dXJuICEhbW9kZWwgJiYgISEoPGFueT5tb2RlbCkuaXNSZW5kZXJpbmc7XG4gIH1cbiAgcHJvdGVjdGVkIG9uTW91bnRlZCgpIHt9XG4gIHByb3RlY3RlZCBvblVwZGF0ZWQoKSB7fVxuICBwcm90ZWN0ZWQgb25EZXN0cm95ZWQoKSB7fVxuICBwcm90ZWN0ZWQgb25DcmVhdGVkKCkge1xuICAgIHZhciBtb2RlbCA9IHRoaXMuZ2V0TW9kZWwoKTtcbiAgICBpZiAoIW1vZGVsKSByZXR1cm47XG4gICAgbW9kZWwuaXRlcmF0ZVByb3BlcnRpZXNIYXNoKChoYXNoOiBhbnksIGtleTogYW55KSA9PiB7XG4gICAgICBWdWUuc2V0KGhhc2gsIGtleSwgaGFzaFtrZXldKTtcbiAgICB9KTtcbiAgICBtb2RlbC5zZXRQcm9wZXJ0eVZhbHVlQ29yZUhhbmRsZXIgPSAoXG4gICAgICBwcm9wZXJ0aWVzSGFzaDogYW55LFxuICAgICAgbmFtZTogc3RyaW5nLFxuICAgICAgdmFsOiBhbnlcbiAgICApID0+IHtcbiAgICAgIGlmICghcHJvcGVydGllc0hhc2guaGFzT3duUHJvcGVydHkobmFtZSkgfHwgIXRoaXMuZ2V0SXNSZW5kZXJpbmcoKSlcbiAgICAgICAgVnVlLnNldChwcm9wZXJ0aWVzSGFzaCwgbmFtZSwgdmFsKTtcbiAgICAgIGVsc2UgcHJvcGVydGllc0hhc2hbbmFtZV0gPSB2YWw7XG4gICAgfTtcbiAgfVxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMub25DcmVhdGVkKCk7XG4gIH1cbiAgYmVmb3JlTW91bnQoKSB7XG4gICAgdGhpcy5zZXRJc1JlbmRlcmluZyh0cnVlKTtcbiAgfVxuICBiZWZvcmVVcGRhdGUoKSB7XG4gICAgdGhpcy5zZXRJc1JlbmRlcmluZyh0cnVlKTtcbiAgfVxuICBtb3VudGVkKCkge1xuICAgIHRoaXMuc2V0SXNSZW5kZXJpbmcoZmFsc2UpO1xuICAgIHRoaXMub25Nb3VudGVkKCk7XG4gIH1cbiAgdXBkYXRlZCgpIHtcbiAgICB0aGlzLnNldElzUmVuZGVyaW5nKGZhbHNlKTtcbiAgICB0aGlzLm9uVXBkYXRlZCgpO1xuICB9XG4gIGRlc3Ryb3llZCgpIHtcbiAgICB0aGlzLm9uRGVzdHJveWVkKCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQmFzZVZ1ZTtcbiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vYm9vbGVhbi1jaGVja2JveC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWNjZDM0MGEmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vYm9vbGVhbi1jaGVja2JveC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2Jvb2xlYW4tY2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzVjY2QzNDBhJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzVjY2QzNDBhJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzVjY2QzNDBhJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9ib29sZWFuLWNoZWNrYm94LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01Y2NkMzQwYSZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc1Y2NkMzQwYScsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9ib29sZWFuLWNoZWNrYm94LnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYm9vbGVhbi1jaGVja2JveC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYm9vbGVhbi1jaGVja2JveC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYm9vbGVhbi1jaGVja2JveC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWNjZDM0MGEmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2Jvb2xlYW4tc3dpdGNoLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03MGU0YWViYiZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9ib29sZWFuLXN3aXRjaC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2Jvb2xlYW4tc3dpdGNoLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc3MGU0YWViYicpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc3MGU0YWViYicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc3MGU0YWViYicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vYm9vbGVhbi1zd2l0Y2gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTcwZTRhZWJiJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzcwZTRhZWJiJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2Jvb2xlYW4tc3dpdGNoLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYm9vbGVhbi1zd2l0Y2gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2Jvb2xlYW4tc3dpdGNoLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ib29sZWFuLXN3aXRjaC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzBlNGFlYmImXCIiLCJpbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCwgV2F0Y2ggfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBRdWVzdGlvblZ1ZSB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkJvb2xlYW5Nb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgQm9vbGVhbiBleHRlbmRzIFF1ZXN0aW9uVnVlPFF1ZXN0aW9uQm9vbGVhbk1vZGVsPiB7XG4gIGdldCBpdGVtQ2xhc3MoKSB7XG4gICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbjtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgbGV0IGlzQ2hlY2tlZCA9IHF1ZXN0aW9uLmNoZWNrZWRWYWx1ZTtcbiAgICBsZXQgaXNEaXNhYmxlZCA9IHF1ZXN0aW9uLmlzUmVhZE9ubHk7XG4gICAgbGV0IGl0ZW1DbGFzcyA9IGNzc0NsYXNzZXMuaXRlbTtcbiAgICBpZiAoaXNEaXNhYmxlZCkgaXRlbUNsYXNzICs9IFwiIFwiICsgY3NzQ2xhc3Nlcy5pdGVtRGlzYWJsZWQ7XG4gICAgaWYgKGlzQ2hlY2tlZCkgaXRlbUNsYXNzICs9IFwiIFwiICsgY3NzQ2xhc3Nlcy5pdGVtQ2hlY2tlZDtcbiAgICBlbHNlIGlmIChpc0NoZWNrZWQgPT09IG51bGwpXG4gICAgICBpdGVtQ2xhc3MgKz0gXCIgXCIgKyBjc3NDbGFzc2VzLml0ZW1JbmRldGVybWluYXRlO1xuICAgIHJldHVybiBpdGVtQ2xhc3M7XG4gIH1cbiAgZ2V0TGFiZWxDbGFzcyhjaGVja2VkOiBib29sZWFuKTogc3RyaW5nIHtcbiAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uO1xuICAgIHZhciBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHJldHVybiAoXG4gICAgICBjc3NDbGFzc2VzLmxhYmVsICtcbiAgICAgIFwiIFwiICtcbiAgICAgIChxdWVzdGlvbi5jaGVja2VkVmFsdWUgPT09ICFjaGVja2VkIHx8IHF1ZXN0aW9uLmlzUmVhZE9ubHlcbiAgICAgICAgPyBxdWVzdGlvbi5jc3NDbGFzc2VzLmRpc2FibGVkTGFiZWxcbiAgICAgICAgOiBcIlwiKVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBwcmV2ZW50RGVmYXVsdHMoZXZlbnQ6IGFueSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cbiAgcHVibGljIG9uU3dpdGNoQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzSW5kZXRlcm1pbmF0ZSkge1xuICAgICAgdGhpcy5wcmV2ZW50RGVmYXVsdHMoZXZlbnQpO1xuICAgICAgdmFyIGlzUmlnaHRDbGljayA9IGV2ZW50Lm9mZnNldFggLyBldmVudC50YXJnZXQub2Zmc2V0V2lkdGggPiAwLjU7XG4gICAgICB2YXIgaXNSdGwgPVxuICAgICAgICBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGV2ZW50LnRhcmdldCkuZGlyZWN0aW9uID09IFwicnRsXCI7XG4gICAgICB0aGlzLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSA9IGlzUnRsID8gIWlzUmlnaHRDbGljayA6IGlzUmlnaHRDbGljaztcbiAgICB9XG4gIH1cbiAgcHVibGljIG9uTGFiZWxDbGljayhldmVudDogYW55LCB2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzSW5kZXRlcm1pbmF0ZSkge1xuICAgICAgdGhpcy5wcmV2ZW50RGVmYXVsdHMoZXZlbnQpO1xuICAgICAgdGhpcy5xdWVzdGlvbi5jaGVja2VkVmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vYnV0dG9uZ3JvdXAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTZiZGM3YWJiJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2J1dHRvbmdyb3VwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vYnV0dG9uZ3JvdXAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzZiZGM3YWJiJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzZiZGM3YWJiJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzZiZGM3YWJiJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9idXR0b25ncm91cC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NmJkYzdhYmImXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignNmJkYzdhYmInLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvYnV0dG9uZ3JvdXAudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9idXR0b25ncm91cC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYnV0dG9uZ3JvdXAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2J1dHRvbmdyb3VwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02YmRjN2FiYiZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vYnV0dG9uZ3JvdXBpdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00YmFkNmFjZSZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9idXR0b25ncm91cGl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9idXR0b25ncm91cGl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzRiYWQ2YWNlJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzRiYWQ2YWNlJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzRiYWQ2YWNlJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9idXR0b25ncm91cGl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRiYWQ2YWNlJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzRiYWQ2YWNlJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2J1dHRvbmdyb3VwaXRlbS52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2J1dHRvbmdyb3VwaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYnV0dG9uZ3JvdXBpdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9idXR0b25ncm91cGl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRiYWQ2YWNlJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9jaGVja2JveC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Y2FkMjc2ZjYmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vY2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9jaGVja2JveC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnY2FkMjc2ZjYnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnY2FkMjc2ZjYnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnY2FkMjc2ZjYnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2NoZWNrYm94LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jYWQyNzZmNiZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCdjYWQyNzZmNicsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9jaGVja2JveC52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2NoZWNrYm94LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9jaGVja2JveC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vY2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWNhZDI3NmY2JlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9jaGVja2JveGl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWM1OGM4MGQwJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2NoZWNrYm94aXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2NoZWNrYm94aXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnYzU4YzgwZDAnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnYzU4YzgwZDAnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnYzU4YzgwZDAnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2NoZWNrYm94aXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YzU4YzgwZDAmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignYzU4YzgwZDAnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvY2hlY2tib3hpdGVtLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vY2hlY2tib3hpdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9jaGVja2JveGl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2NoZWNrYm94aXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YzU4YzgwZDAmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2NvbW1lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA5OWMyYzhkJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2NvbW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9jb21tZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCcwOTljMmM4ZCcpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCcwOTljMmM4ZCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCcwOTljMmM4ZCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vY29tbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDk5YzJjOGQmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMDk5YzJjOGQnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvY29tbWVudC52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2NvbW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2NvbW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2NvbW1lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA5OWMyYzhkJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9hY3Rpb24tYmFyLWl0ZW0tZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRjYTRmMjc2JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2FjdGlvbi1iYXItaXRlbS1kcm9wZG93bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2FjdGlvbi1iYXItaXRlbS1kcm9wZG93bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNGNhNGYyNzYnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNGNhNGYyNzYnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNGNhNGYyNzYnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2FjdGlvbi1iYXItaXRlbS1kcm9wZG93bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGNhNGYyNzYmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignNGNhNGYyNzYnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS1kcm9wZG93bi52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2FjdGlvbi1iYXItaXRlbS1kcm9wZG93bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYWN0aW9uLWJhci1pdGVtLWRyb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9hY3Rpb24tYmFyLWl0ZW0tZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRjYTRmMjc2JlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9hY3Rpb24tYmFyLWl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQwYTA1NmY4JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2FjdGlvbi1iYXItaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2FjdGlvbi1iYXItaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNDBhMDU2ZjgnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNDBhMDU2ZjgnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNDBhMDU2ZjgnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2FjdGlvbi1iYXItaXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDBhMDU2ZjgmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignNDBhMDU2ZjgnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2FjdGlvbi1iYXItaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYWN0aW9uLWJhci1pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9hY3Rpb24tYmFyLWl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQwYTA1NmY4JlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9hY3Rpb24tYmFyLXNlcGFyYXRvci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWFhYjY4NTAmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vYWN0aW9uLWJhci1zZXBhcmF0b3IudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9hY3Rpb24tYmFyLXNlcGFyYXRvci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnMWFhYjY4NTAnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnMWFhYjY4NTAnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnMWFhYjY4NTAnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2FjdGlvbi1iYXItc2VwYXJhdG9yLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xYWFiNjg1MCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCcxYWFiNjg1MCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci1zZXBhcmF0b3IudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9hY3Rpb24tYmFyLXNlcGFyYXRvci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYWN0aW9uLWJhci1zZXBhcmF0b3IudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2FjdGlvbi1iYXItc2VwYXJhdG9yLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xYWFiNjg1MCZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vYWN0aW9uLWJhci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MzEzYmYyMTAmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vYWN0aW9uLWJhci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2FjdGlvbi1iYXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzMxM2JmMjEwJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzMxM2JmMjEwJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzMxM2JmMjEwJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9hY3Rpb24tYmFyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zMTNiZjIxMCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCczMTNiZjIxMCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2FjdGlvbi1iYXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2FjdGlvbi1iYXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2FjdGlvbi1iYXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTMxM2JmMjEwJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9hY3Rpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJmZTU0NjMyJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2FjdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2FjdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnMmZlNTQ2MzInKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnMmZlNTQ2MzInLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnMmZlNTQ2MzInLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2FjdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmZlNTQ2MzImXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMmZlNTQ2MzInLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2FjdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYWN0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9hY3Rpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJmZTU0NjMyJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9kZWZhdWx0LXRpdGxlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03ZjYxMTdkYyZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9kZWZhdWx0LXRpdGxlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vZGVmYXVsdC10aXRsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnN2Y2MTE3ZGMnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnN2Y2MTE3ZGMnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnN2Y2MTE3ZGMnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2RlZmF1bHQtdGl0bGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdmNjExN2RjJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzdmNjExN2RjJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2NvbXBvbmVudHMvZGVmYXVsdC10aXRsZS9kZWZhdWx0LXRpdGxlLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZGVmYXVsdC10aXRsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZGVmYXVsdC10aXRsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZGVmYXVsdC10aXRsZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2Y2MTE3ZGMmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2xpc3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWNjMTdhMDEwJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2xpc3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9saXN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCdjYzE3YTAxMCcpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCdjYzE3YTAxMCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCdjYzE3YTAxMCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vbGlzdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Y2MxN2EwMTAmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignY2MxN2EwMTAnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvY29tcG9uZW50cy9saXN0L2xpc3QudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9saXN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9saXN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9saXN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jYzE3YTAxMCZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vZGV0YWlsLWJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWI0ZTY5YjYmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vZGV0YWlsLWJ1dHRvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2RldGFpbC1idXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzViNGU2OWI2JykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzViNGU2OWI2JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzViNGU2OWI2JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9kZXRhaWwtYnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01YjRlNjliNiZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc1YjRlNjliNicsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL2RldGFpbC1idXR0b24vZGV0YWlsLWJ1dHRvbi52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2RldGFpbC1idXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2RldGFpbC1idXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2RldGFpbC1idXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTViNGU2OWI2JlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9kcmFnLWRyb3AtaWNvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGY1NWQyOTgmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vZHJhZy1kcm9wLWljb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9kcmFnLWRyb3AtaWNvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNGY1NWQyOTgnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNGY1NWQyOTgnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNGY1NWQyOTgnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2RyYWctZHJvcC1pY29uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00ZjU1ZDI5OCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc0ZjU1ZDI5OCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL2RyYWctZHJvcC1pY29uL2RyYWctZHJvcC1pY29uLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZHJhZy1kcm9wLWljb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2RyYWctZHJvcC1pY29uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9kcmFnLWRyb3AtaWNvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGY1NWQyOTgmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3JlbW92ZS1idXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWM4YTdhYTYwJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3JlbW92ZS1idXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9yZW1vdmUtYnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCdjOGE3YWE2MCcpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCdjOGE3YWE2MCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCdjOGE3YWE2MCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vcmVtb3ZlLWJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YzhhN2FhNjAmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignYzhhN2FhNjAnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9yZW1vdmUtYnV0dG9uL3JlbW92ZS1idXR0b24udnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZW1vdmUtYnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZW1vdmUtYnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZW1vdmUtYnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jOGE3YWE2MCZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vcG9wdXAtY29udGFpbmVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jMThkZmQ3NCZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9wb3B1cC1jb250YWluZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9wb3B1cC1jb250YWluZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJ2MxOGRmZDc0JykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJ2MxOGRmZDc0JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJ2MxOGRmZDc0JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9wb3B1cC1jb250YWluZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWMxOGRmZDc0JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJ2MxOGRmZDc0Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAtY29udGFpbmVyLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcG9wdXAtY29udGFpbmVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wb3B1cC1jb250YWluZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BvcHVwLWNvbnRhaW5lci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YzE4ZGZkNzQmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3BvcHVwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1lZjExMjY1YyZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9wb3B1cC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL3BvcHVwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCdlZjExMjY1YycpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCdlZjExMjY1YycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCdlZjExMjY1YycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vcG9wdXAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWVmMTEyNjVjJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJ2VmMTEyNjVjJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wb3B1cC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcG9wdXAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BvcHVwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1lZjExMjY1YyZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vc3ZnLWljb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTY4NDc3NmY4JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3N2Zy1pY29uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vc3ZnLWljb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzY4NDc3NmY4JykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzY4NDc3NmY4JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzY4NDc3NmY4JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9zdmctaWNvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Njg0Nzc2ZjgmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignNjg0Nzc2ZjgnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvbi52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3N2Zy1pY29uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zdmctaWNvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3ZnLWljb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTY4NDc3NmY4JlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi90aXRsZS1hY3Rpb25zLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1iNzI4ODZlYyZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi90aXRsZS1hY3Rpb25zLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vdGl0bGUtYWN0aW9ucy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnYjcyODg2ZWMnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnYjcyODg2ZWMnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnYjcyODg2ZWMnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL3RpdGxlLWFjdGlvbnMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWI3Mjg4NmVjJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJ2I3Mjg4NmVjJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2NvbXBvbmVudHMvdGl0bGUtYWN0aW9ucy90aXRsZS1hY3Rpb25zLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vdGl0bGUtYWN0aW9ucy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vdGl0bGUtYWN0aW9ucy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vdGl0bGUtYWN0aW9ucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YjcyODg2ZWMmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2NvbXBvc2l0ZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWE5ZTIxOTYmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vY29tcG9zaXRlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9zaXRlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCcxYTllMjE5NicpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCcxYTllMjE5NicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCcxYTllMjE5NicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vY29tcG9zaXRlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xYTllMjE5NiZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCcxYTllMjE5NicsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9jb21wb3NpdGUudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9jb21wb3NpdGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2NvbXBvc2l0ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vY29tcG9zaXRlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xYTllMjE5NiZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vY3VzdG9tLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kNGFhZTA5YSZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9jdXN0b20udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9jdXN0b20udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJ2Q0YWFlMDlhJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJ2Q0YWFlMDlhJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJ2Q0YWFlMDlhJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9jdXN0b20udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWQ0YWFlMDlhJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJ2Q0YWFlMDlhJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2N1c3RvbS52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2N1c3RvbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vY3VzdG9tLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9jdXN0b20udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWQ0YWFlMDlhJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9jdXN0b213aWRnZXQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFlNjFhN2I3JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2N1c3RvbXdpZGdldC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2N1c3RvbXdpZGdldC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnMWU2MWE3YjcnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnMWU2MWE3YjcnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnMWU2MWE3YjcnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2N1c3RvbXdpZGdldC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWU2MWE3YjcmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMWU2MWE3YjcnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvY3VzdG9td2lkZ2V0LnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vY3VzdG9td2lkZ2V0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9jdXN0b213aWRnZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2N1c3RvbXdpZGdldC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWU2MWE3YjcmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2Ryb3Bkb3duLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02YjMyMTVkMyZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9kcm9wZG93bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2Ryb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc2YjMyMTVkMycpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc2YjMyMTVkMycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc2YjMyMTVkMycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTZiMzIxNWQzJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzZiMzIxNWQzJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2Ryb3Bkb3duLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2Ryb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9kcm9wZG93bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NmIzMjE1ZDMmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2VsZW1lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTk3MzQ3MmFjJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2VsZW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9lbGVtZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc5NzM0NzJhYycpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc5NzM0NzJhYycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc5NzM0NzJhYycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vZWxlbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OTczNDcyYWMmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignOTczNDcyYWMnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvZWxlbWVudC52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2VsZW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2VsZW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2VsZW1lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTk3MzQ3MmFjJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9lbGVtZW50aGVhZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yN2FkYzUzNyZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9lbGVtZW50aGVhZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vZWxlbWVudGhlYWRlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnMjdhZGM1MzcnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnMjdhZGM1MzcnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnMjdhZGM1MzcnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2VsZW1lbnRoZWFkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI3YWRjNTM3JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzI3YWRjNTM3Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2VsZW1lbnRoZWFkZXIudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9lbGVtZW50aGVhZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9lbGVtZW50aGVhZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9lbGVtZW50aGVhZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yN2FkYzUzNyZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vZW1wdHkudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA1MDUyYzBhJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2VtcHR5LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vZW1wdHkudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzA1MDUyYzBhJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzA1MDUyYzBhJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzA1MDUyYzBhJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9lbXB0eS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDUwNTJjMGEmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMDUwNTJjMGEnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvZW1wdHkudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9lbXB0eS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZW1wdHkudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2VtcHR5LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wNTA1MmMwYSZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vZXJyb3JzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01NjgyZTZhZCZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9lcnJvcnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9lcnJvcnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzU2ODJlNmFkJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzU2ODJlNmFkJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzU2ODJlNmFkJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9lcnJvcnMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTU2ODJlNmFkJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzU2ODJlNmFkJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2Vycm9ycy52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2Vycm9ycy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZXJyb3JzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9lcnJvcnMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTU2ODJlNmFkJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9leHByZXNzaW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xZDIwODY1YSZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9leHByZXNzaW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vZXhwcmVzc2lvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnMWQyMDg2NWEnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnMWQyMDg2NWEnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnMWQyMDg2NWEnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2V4cHJlc3Npb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFkMjA4NjVhJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzFkMjA4NjVhJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2V4cHJlc3Npb24udnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9leHByZXNzaW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9leHByZXNzaW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9leHByZXNzaW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xZDIwODY1YSZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vZmlsZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjBmNzAyODQmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vZmlsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2ZpbGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzIwZjcwMjg0JykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzIwZjcwMjg0JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzIwZjcwMjg0JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9maWxlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yMGY3MDI4NCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCcyMGY3MDI4NCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9maWxlLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZmlsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZmlsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZmlsZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjBmNzAyODQmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2Zsb3dwYW5lbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OTZhZTFhNzgmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vZmxvd3BhbmVsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vZmxvd3BhbmVsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc5NmFlMWE3OCcpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc5NmFlMWE3OCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc5NmFlMWE3OCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vZmxvd3BhbmVsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05NmFlMWE3OCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc5NmFlMWE3OCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9mbG93cGFuZWwudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9mbG93cGFuZWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2Zsb3dwYW5lbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZmxvd3BhbmVsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05NmFlMWE3OCZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vZmxvd3BhbmVsZWxlbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OWQ5OTJjMzAmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vZmxvd3BhbmVsZWxlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2Zsb3dwYW5lbGVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzlkOTkyYzMwJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzlkOTkyYzMwJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzlkOTkyYzMwJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9mbG93cGFuZWxlbGVtZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05ZDk5MmMzMCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc5ZDk5MmMzMCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9mbG93cGFuZWxlbGVtZW50LnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZmxvd3BhbmVsZWxlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZmxvd3BhbmVsZWxlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZmxvd3BhbmVsZWxlbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OWQ5OTJjMzAmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2hlYWRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjljZmY4Y2YmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vaGVhZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vaGVhZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc2OWNmZjhjZicpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc2OWNmZjhjZicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc2OWNmZjhjZicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vaGVhZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02OWNmZjhjZiZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc2OWNmZjhjZicsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9oZWFkZXIudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9oZWFkZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2hlYWRlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vaGVhZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02OWNmZjhjZiZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vaHRtbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDc0MmUxNmQmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vaHRtbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2h0bWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzA3NDJlMTZkJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzA3NDJlMTZkJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzA3NDJlMTZkJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9odG1sLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wNzQyZTE2ZCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCcwNzQyZTE2ZCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9odG1sLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vaHRtbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vaHRtbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vaHRtbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDc0MmUxNmQmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2ltYWdlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xZGM4ZDcwOSZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9pbWFnZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2ltYWdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCcxZGM4ZDcwOScpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCcxZGM4ZDcwOScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCcxZGM4ZDcwOScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vaW1hZ2UudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFkYzhkNzA5JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzFkYzhkNzA5Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2ltYWdlLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vaW1hZ2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2ltYWdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9pbWFnZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWRjOGQ3MDkmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2ltYWdlcGlja2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xNTNmZTA1MiZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9pbWFnZXBpY2tlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2ltYWdlcGlja2VyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCcxNTNmZTA1MicpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCcxNTNmZTA1MicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCcxNTNmZTA1MicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vaW1hZ2VwaWNrZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTE1M2ZlMDUyJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzE1M2ZlMDUyJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2ltYWdlcGlja2VyLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vaW1hZ2VwaWNrZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2ltYWdlcGlja2VyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9pbWFnZXBpY2tlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MTUzZmUwNTImXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL21hdHJpeC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2ZhMmY0MDMmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vbWF0cml4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vbWF0cml4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc3ZmEyZjQwMycpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc3ZmEyZjQwMycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc3ZmEyZjQwMycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vbWF0cml4LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03ZmEyZjQwMyZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc3ZmEyZjQwMycsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9tYXRyaXgudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9tYXRyaXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL21hdHJpeC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbWF0cml4LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03ZmEyZjQwMyZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vbWF0cml4Y2VsbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9M2NhNTRlZTUmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vbWF0cml4Y2VsbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL21hdHJpeGNlbGwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzNjYTU0ZWU1JykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzNjYTU0ZWU1JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzNjYTU0ZWU1JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9tYXRyaXhjZWxsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zY2E1NGVlNSZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCczY2E1NGVlNScsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9tYXRyaXhjZWxsLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbWF0cml4Y2VsbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbWF0cml4Y2VsbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbWF0cml4Y2VsbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9M2NhNTRlZTUmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL21hdHJpeGRyb3Bkb3duLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wYjRkYTZkOCZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9tYXRyaXhkcm9wZG93bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL21hdHJpeGRyb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCcwYjRkYTZkOCcpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCcwYjRkYTZkOCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCcwYjRkYTZkOCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vbWF0cml4ZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTBiNGRhNmQ4JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzBiNGRhNmQ4Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL21hdHJpeGRyb3Bkb3duLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbWF0cml4ZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL21hdHJpeGRyb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9tYXRyaXhkcm9wZG93bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MGI0ZGE2ZDgmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL21hdHJpeGR5bmFtaWMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTlhMGI4OGU4JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL21hdHJpeGR5bmFtaWMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9tYXRyaXhkeW5hbWljLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc5YTBiODhlOCcpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc5YTBiODhlOCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc5YTBiODhlOCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vbWF0cml4ZHluYW1pYy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OWEwYjg4ZTgmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignOWEwYjg4ZTgnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvbWF0cml4ZHluYW1pYy52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL21hdHJpeGR5bmFtaWMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL21hdHJpeGR5bmFtaWMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL21hdHJpeGR5bmFtaWMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTlhMGI4OGU4JlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9tYXRyaXh0YWJsZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZmExOTdlNGEmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vbWF0cml4dGFibGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9tYXRyaXh0YWJsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnZmExOTdlNGEnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnZmExOTdlNGEnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnZmExOTdlNGEnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL21hdHJpeHRhYmxlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1mYTE5N2U0YSZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCdmYTE5N2U0YScsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9tYXRyaXh0YWJsZS52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL21hdHJpeHRhYmxlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9tYXRyaXh0YWJsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbWF0cml4dGFibGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWZhMTk3ZTRhJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9tdWx0aXBsZXRleHQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTkzZmU0YzAyJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL211bHRpcGxldGV4dC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL211bHRpcGxldGV4dC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnOTNmZTRjMDInKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnOTNmZTRjMDInLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnOTNmZTRjMDInLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL211bHRpcGxldGV4dC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OTNmZTRjMDImXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignOTNmZTRjMDInLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvbXVsdGlwbGV0ZXh0LnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbXVsdGlwbGV0ZXh0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9tdWx0aXBsZXRleHQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL211bHRpcGxldGV4dC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OTNmZTRjMDImXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL25hdmlnYXRpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTc1ZWFkZmQ2JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL25hdmlnYXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9uYXZpZ2F0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc3NWVhZGZkNicpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc3NWVhZGZkNicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc3NWVhZGZkNicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vbmF2aWdhdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzVlYWRmZDYmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignNzVlYWRmZDYnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvbmF2aWdhdGlvbi52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25hdmlnYXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25hdmlnYXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25hdmlnYXRpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTc1ZWFkZmQ2JlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9vdGhlckNob2ljZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmVkNzc2ZmYmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vb3RoZXJDaG9pY2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9vdGhlckNob2ljZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnMmVkNzc2ZmYnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnMmVkNzc2ZmYnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnMmVkNzc2ZmYnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL290aGVyQ2hvaWNlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yZWQ3NzZmZiZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCcyZWQ3NzZmZicsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9vdGhlckNob2ljZS52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL290aGVyQ2hvaWNlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9vdGhlckNob2ljZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vb3RoZXJDaG9pY2UudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJlZDc3NmZmJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9wYWdlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00ZTk2MmE1MSZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9wYWdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vcGFnZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNGU5NjJhNTEnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNGU5NjJhNTEnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNGU5NjJhNTEnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL3BhZ2UudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRlOTYyYTUxJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzRlOTYyYTUxJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL3BhZ2UudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWdlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00ZTk2MmE1MSZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vcGFuZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTBjNzg4OTljJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3BhbmVsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vcGFuZWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzBjNzg4OTljJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzBjNzg4OTljJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzBjNzg4OTljJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9wYW5lbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MGM3ODg5OWMmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMGM3ODg5OWMnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvcGFuZWwudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYW5lbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFuZWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhbmVsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wYzc4ODk5YyZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vcGFuZWxkeW5hbWljLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05ZGRhNWQwNiZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9wYW5lbGR5bmFtaWMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9wYW5lbGR5bmFtaWMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzlkZGE1ZDA2JykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzlkZGE1ZDA2JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzlkZGE1ZDA2JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9wYW5lbGR5bmFtaWMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTlkZGE1ZDA2JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzlkZGE1ZDA2Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL3BhbmVsZHluYW1pYy52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhbmVsZHluYW1pYy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFuZWxkeW5hbWljLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYW5lbGR5bmFtaWMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTlkZGE1ZDA2JlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9wYW5lbGR5bmFtaWNwcm9ncmVzcy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzQyYmZmYWMmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vcGFuZWxkeW5hbWljcHJvZ3Jlc3MudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9wYW5lbGR5bmFtaWNwcm9ncmVzcy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNzQyYmZmYWMnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNzQyYmZmYWMnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNzQyYmZmYWMnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL3BhbmVsZHluYW1pY3Byb2dyZXNzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03NDJiZmZhYyZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc3NDJiZmZhYycsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9wYW5lbGR5bmFtaWNwcm9ncmVzcy52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhbmVsZHluYW1pY3Byb2dyZXNzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYW5lbGR5bmFtaWNwcm9ncmVzcy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFuZWxkeW5hbWljcHJvZ3Jlc3MudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTc0MmJmZmFjJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9wYW5lbGR5bmFtaWNyZW1vdmUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWRiNmIyZjdlJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3BhbmVsZHluYW1pY3JlbW92ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL3BhbmVsZHluYW1pY3JlbW92ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnZGI2YjJmN2UnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnZGI2YjJmN2UnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnZGI2YjJmN2UnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL3BhbmVsZHluYW1pY3JlbW92ZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZGI2YjJmN2UmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignZGI2YjJmN2UnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvcGFuZWxkeW5hbWljcmVtb3ZlLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFuZWxkeW5hbWljcmVtb3ZlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYW5lbGR5bmFtaWNyZW1vdmUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhbmVsZHluYW1pY3JlbW92ZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZGI2YjJmN2UmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3Byb2dyZXNzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yN2UzMjVlZiZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9wcm9ncmVzcy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL3Byb2dyZXNzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCcyN2UzMjVlZicpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCcyN2UzMjVlZicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCcyN2UzMjVlZicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vcHJvZ3Jlc3MudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI3ZTMyNWVmJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzI3ZTMyNWVmJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL3Byb2dyZXNzLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcHJvZ3Jlc3MudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3Byb2dyZXNzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wcm9ncmVzcy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjdlMzI1ZWYmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3Byb2dyZXNzQnV0dG9ucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmFlN2RlNDImXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vcHJvZ3Jlc3NCdXR0b25zLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vcHJvZ3Jlc3NCdXR0b25zLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCcyYWU3ZGU0MicpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCcyYWU3ZGU0MicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCcyYWU3ZGU0MicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vcHJvZ3Jlc3NCdXR0b25zLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yYWU3ZGU0MiZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCcyYWU3ZGU0MicsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9wcm9ncmVzc0J1dHRvbnMudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wcm9ncmVzc0J1dHRvbnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3Byb2dyZXNzQnV0dG9ucy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcHJvZ3Jlc3NCdXR0b25zLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yYWU3ZGU0MiZcIiIsImltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCwgV2F0Y2ggfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgQmFzZVZ1ZSB9IGZyb20gXCIuL2Jhc2VcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uVnVlPFQgZXh0ZW5kcyBRdWVzdGlvbj4gZXh0ZW5kcyBCYXNlVnVlIHtcbiAgcHVibGljIGlubmVyVmFsdWU6IGFueSA9IG51bGw7XG5cbiAgQFByb3AoKSBxdWVzdGlvbjogVDtcbiAgLy8gY3NzIHByb3AgbmVlZCBvbmx5IGZvciBwYW5lbC4gV2hlbiBwYW5lbCB3aWxsIGhhdmUgY3NzQ2xhc3NlcyBwcm9wZXJ0eSB0aGlzIHByb3Agd2lsbCBuZWVkIHRvIHJlbW92ZVxuICBAUHJvcCgpIGNzczogYW55O1xuXG4gIEBXYXRjaChcInF1ZXN0aW9uXCIpXG4gIGNoYW5nZVF1ZXN0aW9uKG5ld192YWw6IFQsIG9sZF92YWw6IFQpIHtcbiAgICB0aGlzLmlubmVyVmFsdWUgPSBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBnZXRNb2RlbCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgb25Nb3VudGVkKCkge1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uKSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uLmFmdGVyUmVuZGVyUXVlc3Rpb25FbGVtZW50KHRoaXMuJGVsIGFzIEhUTUxFbGVtZW50KTtcbiAgICB9XG4gIH1cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5xdWVzdGlvbikge1xuICAgICAgdGhpcy5xdWVzdGlvbi5iZWZvcmVEZXN0cm95UXVlc3Rpb25FbGVtZW50KHRoaXMuJGVsIGFzIEhUTUxFbGVtZW50KTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUXVlc3Rpb25WdWU7XG4iLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3JhZGlvZ3JvdXAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA2YzZkNTI2JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3JhZGlvZ3JvdXAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9yYWRpb2dyb3VwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCcwNmM2ZDUyNicpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCcwNmM2ZDUyNicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCcwNmM2ZDUyNicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vcmFkaW9ncm91cC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDZjNmQ1MjYmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMDZjNmQ1MjYnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvcmFkaW9ncm91cC52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3JhZGlvZ3JvdXAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3JhZGlvZ3JvdXAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3JhZGlvZ3JvdXAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA2YzZkNTI2JlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9yYWRpb2dyb3VwaXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWJiZTk3YjkmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vcmFkaW9ncm91cGl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9yYWRpb2dyb3VwaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNWJiZTk3YjknKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNWJiZTk3YjknLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNWJiZTk3YjknLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL3JhZGlvZ3JvdXBpdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01YmJlOTdiOSZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc1YmJlOTdiOScsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9yYWRpb2dyb3VwaXRlbS52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3JhZGlvZ3JvdXBpdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yYWRpb2dyb3VwaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmFkaW9ncm91cGl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTViYmU5N2I5JlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9yYW5raW5nLWl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJmYWRlZDc2JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3JhbmtpbmctaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL3JhbmtpbmctaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnMmZhZGVkNzYnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnMmZhZGVkNzYnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnMmZhZGVkNzYnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL3JhbmtpbmctaXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmZhZGVkNzYmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMmZhZGVkNzYnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvcmFua2luZy9yYW5raW5nLWl0ZW0udnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yYW5raW5nLWl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3JhbmtpbmctaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmFua2luZy1pdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yZmFkZWQ3NiZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vcmFua2luZy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MTkwNzRlZWEmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vcmFua2luZy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL3JhbmtpbmcudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzE5MDc0ZWVhJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzE5MDc0ZWVhJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzE5MDc0ZWVhJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9yYW5raW5nLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xOTA3NGVlYSZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCcxOTA3NGVlYScsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9yYW5raW5nL3JhbmtpbmcudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yYW5raW5nLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yYW5raW5nLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yYW5raW5nLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xOTA3NGVlYSZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vcmF0aW5nLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03MDkyYmZkZiZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9yYXRpbmcudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9yYXRpbmcudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzcwOTJiZmRmJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzcwOTJiZmRmJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzcwOTJiZmRmJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9yYXRpbmcudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTcwOTJiZmRmJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzcwOTJiZmRmJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL3JhdGluZy52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3JhdGluZy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmF0aW5nLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yYXRpbmcudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTcwOTJiZmRmJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9yb3cudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdjYzBiZDg4JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3Jvdy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL3Jvdy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnN2NjMGJkODgnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnN2NjMGJkODgnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnN2NjMGJkODgnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL3Jvdy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2NjMGJkODgmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignN2NjMGJkODgnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvcm93LnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcm93LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yb3cudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3Jvdy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2NjMGJkODgmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3NpZ25hdHVyZXBhZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDQ2MjM0OWQmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vc2lnbmF0dXJlcGFkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vc2lnbmF0dXJlcGFkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCcwNDYyMzQ5ZCcpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCcwNDYyMzQ5ZCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCcwNDYyMzQ5ZCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vc2lnbmF0dXJlcGFkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wNDYyMzQ5ZCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCcwNDYyMzQ5ZCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9zaWduYXR1cmVwYWQudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zaWduYXR1cmVwYWQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NpZ25hdHVyZXBhZC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vc2lnbmF0dXJlcGFkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wNDYyMzQ5ZCZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vc3RyaW5nLWVkaXRvci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OTYzOWYxNTImXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vc3RyaW5nLWVkaXRvci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL3N0cmluZy1lZGl0b3IudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzk2MzlmMTUyJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzk2MzlmMTUyJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzk2MzlmMTUyJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9zdHJpbmctZWRpdG9yLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05NjM5ZjE1MiZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc5NjM5ZjE1MicsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9zdHJpbmctZWRpdG9yLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3RyaW5nLWVkaXRvci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3RyaW5nLWVkaXRvci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3RyaW5nLWVkaXRvci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OTYzOWYxNTImXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3N0cmluZy12aWV3ZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdkOTE4NTA4JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3N0cmluZy12aWV3ZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9zdHJpbmctdmlld2VyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc3ZDkxODUwOCcpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc3ZDkxODUwOCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc3ZDkxODUwOCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vc3RyaW5nLXZpZXdlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2Q5MTg1MDgmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignN2Q5MTg1MDgnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvc3RyaW5nLXZpZXdlci52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3N0cmluZy12aWV3ZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3N0cmluZy12aWV3ZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3N0cmluZy12aWV3ZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdkOTE4NTA4JlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9zdHJpbmcudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWQzYTNkNzVhJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3N0cmluZy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL3N0cmluZy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnZDNhM2Q3NWEnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnZDNhM2Q3NWEnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnZDNhM2Q3NWEnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL3N0cmluZy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZDNhM2Q3NWEmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignZDNhM2Q3NWEnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvc3RyaW5nLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3RyaW5nLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zdHJpbmcudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3N0cmluZy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZDNhM2Q3NWEmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3N1cnZleS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Njg3NGUxYzgmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vc3VydmV5LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vc3VydmV5LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc2ODc0ZTFjOCcpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc2ODc0ZTFjOCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc2ODc0ZTFjOCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vc3VydmV5LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02ODc0ZTFjOCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc2ODc0ZTFjOCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9zdXJ2ZXkudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zdXJ2ZXkudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3N1cnZleS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3VydmV5LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02ODc0ZTFjOCZcIiIsImltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVdpbmRvd01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBzdXJ2ZXlDc3MgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuZXhwb3J0IGNsYXNzIFZ1ZVN1cnZleU1vZGVsIGV4dGVuZHMgU3VydmV5TW9kZWwge1xuICByZW5kZXJDYWxsYmFjazogKCkgPT4gdm9pZDtcbiAgcHVibGljIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5yZW5kZXJDYWxsYmFjaykge1xuICAgICAgdGhpcy5yZW5kZXJDYWxsYmFjaygpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgb25Mb2FkU3VydmV5RnJvbVNlcnZpY2UoKSB7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25Mb2FkaW5nU3VydmV5RnJvbVNlcnZpY2UoKSB7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuICBnZXQgY3NzKCkge1xuICAgIHJldHVybiBzdXJ2ZXlDc3MuZ2V0Q3NzKCk7XG4gIH1cbiAgc2V0IGNzcyh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5tZXJnZVZhbHVlcyh2YWx1ZSwgdGhpcy5jc3MpO1xuICB9XG4gIHB1YmxpYyBzZXREYXRhVmFsdWVDb3JlKHZhbHVlc0hhc2g6IGFueSwga2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICBWdWUuc2V0KHZhbHVlc0hhc2gsIGtleSwgdmFsdWUpO1xuICB9XG4gIHB1YmxpYyBkZWxldGVEYXRhVmFsdWVDb3JlKHZhbHVlc0hhc2g6IGFueSwga2V5OiBzdHJpbmcpIHtcbiAgICBWdWUuZGVsZXRlKHZhbHVlc0hhc2gsIGtleSk7XG4gIH1cbiAgcHVibGljIGRvQWZ0ZXJSZW5kZXJTdXJ2ZXkoZWw6IGFueSkge1xuICAgIHRoaXMuYWZ0ZXJSZW5kZXJTdXJ2ZXkoZWwpO1xuICB9XG4gIHB1YmxpYyBkb0FmdGVyUmVuZGVySGVhZGVyKGVsOiBhbnkpIHtcbiAgICB0aGlzLmFmdGVyUmVuZGVySGVhZGVyKGVsKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVnVlU3VydmV5V2luZG93TW9kZWwgZXh0ZW5kcyBTdXJ2ZXlXaW5kb3dNb2RlbCB7XG4gIGNvbnN0cnVjdG9yKGpzb25PYmo6IGFueSwgaW5pdGlhbE1vZGVsOiBTdXJ2ZXlNb2RlbCA9IG51bGwpIHtcbiAgICBzdXBlcihqc29uT2JqLCBpbml0aWFsTW9kZWwpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVTdXJ2ZXkoanNvbk9iajogYW55KTogU3VydmV5TW9kZWwge1xuICAgIHJldHVybiBuZXcgVnVlU3VydmV5TW9kZWwoanNvbk9iaik7XG4gIH1cbn1cblxuU3VydmV5TW9kZWwucGxhdGZvcm0gPSBcInZ1ZVwiO1xuIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi90ZXh0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00MGVjZTQyMiZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi90ZXh0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vdGV4dC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNDBlY2U0MjInKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNDBlY2U0MjInLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNDBlY2U0MjInLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL3RleHQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQwZWNlNDIyJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzQwZWNlNDIyJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL3RleHQudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi90ZXh0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi90ZXh0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi90ZXh0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00MGVjZTQyMiZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vdGltZXJwYW5lbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MGQyYWJlMjEmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vdGltZXJwYW5lbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL3RpbWVycGFuZWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzBkMmFiZTIxJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzBkMmFiZTIxJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzBkMmFiZTIxJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi90aW1lcnBhbmVsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wZDJhYmUyMSZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCcwZDJhYmUyMScsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS90aW1lcnBhbmVsLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vdGltZXJwYW5lbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vdGltZXJwYW5lbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vdGltZXJwYW5lbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MGQyYWJlMjEmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3RpdGxlY29udGVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Y2Q0OWI4M2EmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vdGl0bGVjb250ZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vdGl0bGVjb250ZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCdjZDQ5YjgzYScpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCdjZDQ5YjgzYScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCdjZDQ5YjgzYScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vdGl0bGVjb250ZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jZDQ5YjgzYSZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCdjZDQ5YjgzYScsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS90aXRsZWNvbnRlbnQudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi90aXRsZWNvbnRlbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3RpdGxlY29udGVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vdGl0bGVjb250ZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jZDQ5YjgzYSZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vd2luZG93LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02MmY1ODhiMiZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi93aW5kb3cudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi93aW5kb3cudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzYyZjU4OGIyJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzYyZjU4OGIyJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzYyZjU4OGIyJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi93aW5kb3cudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTYyZjU4OGIyJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzYyZjU4OGIyJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL3dpbmRvdy52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3dpbmRvdy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vd2luZG93LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi93aW5kb3cudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTYyZjU4OGIyJlwiIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3Z1ZV9fOyJdLCJzb3VyY2VSb290IjoiIn0=","// Styles\nimport './VItemGroup.sass'\n\n// Mixins\nimport Groupable from '../../mixins/groupable'\nimport Proxyable from '../../mixins/proxyable'\nimport Themeable from '../../mixins/themeable'\n\n// Utilities\nimport mixins from '../../util/mixins'\nimport { consoleWarn } from '../../util/console'\n\n// Types\nimport { VNode } from 'vue/types'\n\nexport type GroupableInstance = InstanceType & {\n id?: string\n to?: any\n value?: any\n }\n\nexport const BaseItemGroup = mixins(\n Proxyable,\n Themeable\n).extend({\n name: 'base-item-group',\n\n props: {\n activeClass: {\n type: String,\n default: 'v-item--active',\n },\n mandatory: Boolean,\n max: {\n type: [Number, String],\n default: null,\n },\n multiple: Boolean,\n },\n\n data () {\n return {\n // As long as a value is defined, show it\n // Otherwise, check if multiple\n // to determine which default to provide\n internalLazyValue: this.value !== undefined\n ? this.value\n : this.multiple ? [] : undefined,\n items: [] as GroupableInstance[],\n }\n },\n\n computed: {\n classes (): Record {\n return {\n 'v-item-group': true,\n ...this.themeClasses,\n }\n },\n selectedIndex (): number {\n return (this.selectedItem && this.items.indexOf(this.selectedItem)) || -1\n },\n selectedItem (): GroupableInstance | undefined {\n if (this.multiple) return undefined\n\n return this.selectedItems[0]\n },\n selectedItems (): GroupableInstance[] {\n return this.items.filter((item, index) => {\n return this.toggleMethod(this.getValue(item, index))\n })\n },\n selectedValues (): any[] {\n if (this.internalValue == null) return []\n\n return Array.isArray(this.internalValue)\n ? this.internalValue\n : [this.internalValue]\n },\n toggleMethod (): (v: any) => boolean {\n if (!this.multiple) {\n return (v: any) => this.internalValue === v\n }\n\n const internalValue = this.internalValue\n if (Array.isArray(internalValue)) {\n return (v: any) => internalValue.includes(v)\n }\n\n return () => false\n },\n },\n\n watch: {\n internalValue: 'updateItemsState',\n items: 'updateItemsState',\n },\n\n created () {\n if (this.multiple && !Array.isArray(this.internalValue)) {\n consoleWarn('Model must be bound to an array if the multiple property is true.', this)\n }\n },\n\n methods: {\n\n genData (): object {\n return {\n class: this.classes,\n }\n },\n getValue (item: GroupableInstance, i: number): unknown {\n return item.value == null || item.value === ''\n ? i\n : item.value\n },\n onClick (item: GroupableInstance) {\n this.updateInternalValue(\n this.getValue(item, this.items.indexOf(item))\n )\n },\n register (item: GroupableInstance) {\n const index = this.items.push(item) - 1\n\n item.$on('change', () => this.onClick(item))\n\n // If no value provided and mandatory,\n // assign first registered item\n if (this.mandatory && !this.selectedValues.length) {\n this.updateMandatory()\n }\n\n this.updateItem(item, index)\n },\n unregister (item: GroupableInstance) {\n if (this._isDestroyed) return\n\n const index = this.items.indexOf(item)\n const value = this.getValue(item, index)\n\n this.items.splice(index, 1)\n\n const valueIndex = this.selectedValues.indexOf(value)\n\n // Items is not selected, do nothing\n if (valueIndex < 0) return\n\n // If not mandatory, use regular update process\n if (!this.mandatory) {\n return this.updateInternalValue(value)\n }\n\n // Remove the value\n if (this.multiple && Array.isArray(this.internalValue)) {\n this.internalValue = this.internalValue.filter(v => v !== value)\n } else {\n this.internalValue = undefined\n }\n\n // If mandatory and we have no selection\n // add the last item as value\n /* istanbul ignore else */\n if (!this.selectedItems.length) {\n this.updateMandatory(true)\n }\n },\n updateItem (item: GroupableInstance, index: number) {\n const value = this.getValue(item, index)\n\n item.isActive = this.toggleMethod(value)\n },\n // https://github.com/vuetifyjs/vuetify/issues/5352\n updateItemsState () {\n this.$nextTick(() => {\n if (this.mandatory &&\n !this.selectedItems.length\n ) {\n return this.updateMandatory()\n }\n\n // TODO: Make this smarter so it\n // doesn't have to iterate every\n // child in an update\n this.items.forEach(this.updateItem)\n })\n },\n updateInternalValue (value: any) {\n this.multiple\n ? this.updateMultiple(value)\n : this.updateSingle(value)\n },\n updateMandatory (last?: boolean) {\n if (!this.items.length) return\n\n const items = this.items.slice()\n\n if (last) items.reverse()\n\n const item = items.find(item => !item.disabled)\n\n // If no tabs are available\n // aborts mandatory value\n if (!item) return\n\n const index = this.items.indexOf(item)\n\n this.updateInternalValue(\n this.getValue(item, index)\n )\n },\n updateMultiple (value: any) {\n const defaultValue = Array.isArray(this.internalValue)\n ? this.internalValue\n : []\n const internalValue = defaultValue.slice()\n const index = internalValue.findIndex(val => val === value)\n\n if (\n this.mandatory &&\n // Item already exists\n index > -1 &&\n // value would be reduced below min\n internalValue.length - 1 < 1\n ) return\n\n if (\n // Max is set\n this.max != null &&\n // Item doesn't exist\n index < 0 &&\n // value would be increased above max\n internalValue.length + 1 > this.max\n ) return\n\n index > -1\n ? internalValue.splice(index, 1)\n : internalValue.push(value)\n\n this.internalValue = internalValue\n },\n updateSingle (value: any) {\n const isSame = value === this.internalValue\n\n if (this.mandatory && isSame) return\n\n this.internalValue = isSame ? undefined : value\n },\n },\n\n render (h): VNode {\n return h('div', this.genData(), this.$slots.default)\n },\n})\n\nexport default BaseItemGroup.extend({\n name: 'v-item-group',\n\n provide (): object {\n return {\n itemGroup: this,\n }\n },\n})\n","// Styles\nimport './VListItemGroup.sass'\n\n// Extensions\nimport { BaseItemGroup } from '../VItemGroup/VItemGroup'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\n\n// Utilities\nimport mixins from '../../util/mixins'\n\nexport default mixins(\n BaseItemGroup,\n Colorable\n).extend({\n name: 'v-list-item-group',\n\n provide () {\n return {\n isInGroup: true,\n listItemGroup: this,\n }\n },\n\n computed: {\n classes (): object {\n return {\n ...BaseItemGroup.options.computed.classes.call(this),\n 'v-list-item-group': true,\n }\n },\n },\n\n methods: {\n genData (): object {\n return this.setTextColor(this.color, {\n ...BaseItemGroup.options.methods.genData.call(this),\n attrs: {\n role: 'listbox',\n },\n })\n },\n },\n})\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","module.exports = function (it) {\n if (typeof it != 'function') {\n throw TypeError(String(it) + ' is not a function');\n } return it;\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var called = 0;\n var iteratorWithReturn = {\n next: function () {\n return { done: !!called++ };\n },\n 'return': function () {\n SAFE_CLOSING = true;\n }\n };\n iteratorWithReturn[ITERATOR] = function () {\n return this;\n };\n // eslint-disable-next-line no-throw-literal\n Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n var ITERATION_SUPPORT = false;\n try {\n var object = {};\n object[ITERATOR] = function () {\n return {\n next: function () {\n return { done: ITERATION_SUPPORT = true };\n }\n };\n };\n exec(object);\n } catch (error) { /* empty */ }\n return ITERATION_SUPPORT;\n};\n","import Vue, { VNodeData, PropType } from 'vue'\n\n// Directives\nimport Ripple, { RippleOptions } from '../../directives/ripple'\n\n// Utilities\nimport { getObjectValueByPath } from '../../util/helpers'\n\nexport default Vue.extend({\n name: 'routable',\n\n directives: {\n Ripple,\n },\n\n props: {\n activeClass: String,\n append: Boolean,\n disabled: Boolean,\n exact: {\n type: Boolean as PropType,\n default: undefined,\n },\n exactActiveClass: String,\n link: Boolean,\n href: [String, Object],\n to: [String, Object],\n nuxt: Boolean,\n replace: Boolean,\n ripple: {\n type: [Boolean, Object],\n default: null,\n },\n tag: String,\n target: String,\n },\n\n data: () => ({\n isActive: false,\n proxyClass: '',\n }),\n\n computed: {\n classes (): object {\n const classes: Record = {}\n\n if (this.to) return classes\n\n if (this.activeClass) classes[this.activeClass] = this.isActive\n if (this.proxyClass) classes[this.proxyClass] = this.isActive\n\n return classes\n },\n computedRipple (): RippleOptions | boolean {\n return this.ripple ?? (!this.disabled && this.isClickable)\n },\n isClickable (): boolean {\n if (this.disabled) return false\n\n return Boolean(\n this.isLink ||\n this.$listeners.click ||\n this.$listeners['!click'] ||\n this.$attrs.tabindex\n )\n },\n isLink (): boolean {\n return this.to || this.href || this.link\n },\n styles: () => ({}),\n },\n\n watch: {\n $route: 'onRouteChange',\n },\n\n methods: {\n click (e: MouseEvent): void {\n this.$emit('click', e)\n },\n generateRouteLink () {\n let exact = this.exact\n let tag\n\n const data: VNodeData = {\n attrs: {\n tabindex: 'tabindex' in this.$attrs ? this.$attrs.tabindex : undefined,\n },\n class: this.classes,\n style: this.styles,\n props: {},\n directives: [{\n name: 'ripple',\n value: this.computedRipple,\n }],\n [this.to ? 'nativeOn' : 'on']: {\n ...this.$listeners,\n click: this.click,\n },\n ref: 'link',\n }\n\n if (typeof this.exact === 'undefined') {\n exact = this.to === '/' ||\n (this.to === Object(this.to) && this.to.path === '/')\n }\n\n if (this.to) {\n // Add a special activeClass hook\n // for component level styles\n let activeClass = this.activeClass\n let exactActiveClass = this.exactActiveClass || activeClass\n\n if (this.proxyClass) {\n activeClass = `${activeClass} ${this.proxyClass}`.trim()\n exactActiveClass = `${exactActiveClass} ${this.proxyClass}`.trim()\n }\n\n tag = this.nuxt ? 'nuxt-link' : 'router-link'\n Object.assign(data.props, {\n to: this.to,\n exact,\n activeClass,\n exactActiveClass,\n append: this.append,\n replace: this.replace,\n })\n } else {\n tag = (this.href && 'a') || this.tag || 'div'\n\n if (tag === 'a' && this.href) data.attrs!.href = this.href\n }\n\n if (this.target) data.attrs!.target = this.target\n\n return { tag, data }\n },\n onRouteChange () {\n if (!this.to || !this.$refs.link || !this.$route) return\n const activeClass = `${this.activeClass} ${this.proxyClass || ''}`.trim()\n\n const path = `_vnode.data.class.${activeClass}`\n\n this.$nextTick(() => {\n /* istanbul ignore else */\n if (getObjectValueByPath(this.$refs.link, path)) {\n this.toggle()\n }\n })\n },\n toggle: () => { /* noop */ },\n },\n})\n","var userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /(iphone|ipod|ipad).*applewebkit/i.test(userAgent);\n","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n","// `RequireObjectCoercible` abstract operation\n// https://tc39.github.io/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}","var fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (METHOD_NAME) {\n // We can't use this feature detection in V8 since it causes\n // deoptimization and serious performance degradation\n // https://github.com/zloirock/core-js/issues/677\n return V8_VERSION >= 51 || !fails(function () {\n var array = [];\n var constructor = array.constructor = {};\n constructor[SPECIES] = function () {\n return { foo: 1 };\n };\n return array[METHOD_NAME](Boolean).foo !== 1;\n });\n};\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(\n uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)\n ))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar $sort = [].sort;\n\n// `%TypedArray%.prototype.sort` method\n// https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.sort\nexportTypedArrayMethod('sort', function sort(comparefn) {\n return $sort.call(aTypedArray(this), comparefn);\n});\n","(function(a,b){if(\"function\"==typeof define&&define.amd)define([],b);else if(\"undefined\"!=typeof exports)b();else{b(),a.FileSaver={exports:{}}.exports}})(this,function(){\"use strict\";function b(a,b){return\"undefined\"==typeof b?b={autoBom:!1}:\"object\"!=typeof b&&(console.warn(\"Deprecated: Expected third argument to be a object\"),b={autoBom:!b}),b.autoBom&&/^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(a.type)?new Blob([\"\\uFEFF\",a],{type:a.type}):a}function c(b,c,d){var e=new XMLHttpRequest;e.open(\"GET\",b),e.responseType=\"blob\",e.onload=function(){a(e.response,c,d)},e.onerror=function(){console.error(\"could not download file\")},e.send()}function d(a){var b=new XMLHttpRequest;b.open(\"HEAD\",a,!1);try{b.send()}catch(a){}return 200<=b.status&&299>=b.status}function e(a){try{a.dispatchEvent(new MouseEvent(\"click\"))}catch(c){var b=document.createEvent(\"MouseEvents\");b.initMouseEvent(\"click\",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),a.dispatchEvent(b)}}var f=\"object\"==typeof window&&window.window===window?window:\"object\"==typeof self&&self.self===self?self:\"object\"==typeof global&&global.global===global?global:void 0,a=f.saveAs||(\"object\"!=typeof window||window!==f?function(){}:\"download\"in HTMLAnchorElement.prototype?function(b,g,h){var i=f.URL||f.webkitURL,j=document.createElement(\"a\");g=g||b.name||\"download\",j.download=g,j.rel=\"noopener\",\"string\"==typeof b?(j.href=b,j.origin===location.origin?e(j):d(j.href)?c(b,g,h):e(j,j.target=\"_blank\")):(j.href=i.createObjectURL(b),setTimeout(function(){i.revokeObjectURL(j.href)},4E4),setTimeout(function(){e(j)},0))}:\"msSaveOrOpenBlob\"in navigator?function(f,g,h){if(g=g||f.name||\"download\",\"string\"!=typeof f)navigator.msSaveOrOpenBlob(b(f,h),g);else if(d(f))c(f,g,h);else{var i=document.createElement(\"a\");i.href=f,i.target=\"_blank\",setTimeout(function(){e(i)})}}:function(a,b,d,e){if(e=e||open(\"\",\"_blank\"),e&&(e.document.title=e.document.body.innerText=\"downloading...\"),\"string\"==typeof a)return c(a,b,d);var g=\"application/octet-stream\"===a.type,h=/constructor/i.test(f.HTMLElement)||f.safari,i=/CriOS\\/[\\d]+/.test(navigator.userAgent);if((i||g&&h)&&\"object\"==typeof FileReader){var j=new FileReader;j.onloadend=function(){var a=j.result;a=i?a:a.replace(/^data:[^;]*;/,\"data:attachment/file;\"),e?e.location.href=a:location=a,e=null},j.readAsDataURL(a)}else{var k=f.URL||f.webkitURL,l=k.createObjectURL(a);e?e.location=l:location.href=l,e=null,setTimeout(function(){k.revokeObjectURL(l)},4E4)}});f.saveAs=a.saveAs=a,\"undefined\"!=typeof module&&(module.exports=a)});\n\n//# sourceMappingURL=FileSaver.min.js.map","function dateLongFormatter(pattern, formatLong) {\n switch (pattern) {\n case 'P':\n return formatLong.date({\n width: 'short'\n });\n\n case 'PP':\n return formatLong.date({\n width: 'medium'\n });\n\n case 'PPP':\n return formatLong.date({\n width: 'long'\n });\n\n case 'PPPP':\n default:\n return formatLong.date({\n width: 'full'\n });\n }\n}\n\nfunction timeLongFormatter(pattern, formatLong) {\n switch (pattern) {\n case 'p':\n return formatLong.time({\n width: 'short'\n });\n\n case 'pp':\n return formatLong.time({\n width: 'medium'\n });\n\n case 'ppp':\n return formatLong.time({\n width: 'long'\n });\n\n case 'pppp':\n default:\n return formatLong.time({\n width: 'full'\n });\n }\n}\n\nfunction dateTimeLongFormatter(pattern, formatLong) {\n var matchResult = pattern.match(/(P+)(p+)?/);\n var datePattern = matchResult[1];\n var timePattern = matchResult[2];\n\n if (!timePattern) {\n return dateLongFormatter(pattern, formatLong);\n }\n\n var dateTimeFormat;\n\n switch (datePattern) {\n case 'P':\n dateTimeFormat = formatLong.dateTime({\n width: 'short'\n });\n break;\n\n case 'PP':\n dateTimeFormat = formatLong.dateTime({\n width: 'medium'\n });\n break;\n\n case 'PPP':\n dateTimeFormat = formatLong.dateTime({\n width: 'long'\n });\n break;\n\n case 'PPPP':\n default:\n dateTimeFormat = formatLong.dateTime({\n width: 'full'\n });\n break;\n }\n\n return dateTimeFormat.replace('{{date}}', dateLongFormatter(datePattern, formatLong)).replace('{{time}}', timeLongFormatter(timePattern, formatLong));\n}\n\nvar longFormatters = {\n p: timeLongFormatter,\n P: dateTimeLongFormatter\n};\nexport default longFormatters;","/* cpexcel.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/*jshint -W100 */\nvar cptable = {version:\"1.14.0\"};\ncptable[437] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[620] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÇüéâäàąçêëèïîćÄĄĘęłôöĆûùŚÖÜ¢Ł¥śƒŹŻóÓńŃźż¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[737] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρσςτυφχψ░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ωάέήϊίόύϋώΆΈΉΊΌΎΏ±≥≤ΪΫ÷≈°∙·√ⁿ²■ \", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[850] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø׃áíóúñѪº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈıÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýݯ´­±‗¾¶§÷¸°¨·¹³²■ \", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[852] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÇüéâäůćçłëŐőîŹÄĆÉĹĺôöĽľŚśÖÜŤťŁ×čáíóúĄąŽžĘ꬟Ⱥ«»░▒▓│┤ÁÂĚŞ╣║╗╝Żż┐└┴┬├─┼Ăă╚╔╩╦╠═╬¤đĐĎËďŇÍÎě┘┌█▄ŢŮ▀ÓßÔŃńňŠšŔÚŕŰýÝţ´­˝˛ˇ˘§÷¸°¨˙űŘř■ \", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[857] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÇüéâäàåçêëèïîıÄÅÉæÆôöòûùİÖÜø£ØŞşáíóúñÑĞ𿮬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ºªÊËÈ�ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµ�×ÚÛÙìÿ¯´­±�¾¶§÷¸°¨·¹³²■ \", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[861] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÇüéâäàåçêëèÐðÞÄÅÉæÆôöþûÝýÖÜø£Ø₧ƒáíóúÁÍÓÚ¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[865] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø₧ƒáíóúñѪº¿⌐¬½¼¡«¤░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[866] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№¤■ \", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[874] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€����…�����������‘’“”•–—�������� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[895] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ČüéďäĎŤčěĚĹÍľǪÄÁÉžŽôöÓůÚýÖÜŠĽÝŘťáíóúňŇŮÔšřŕŔ¼§«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[932] = (function(){ var d = [], e = {}, D = [], j;\nD[0] = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~���������������������������������。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚��������������������������������\".split(\"\");\nfor(j = 0; j != D[0].length; ++j) if(D[0][j].charCodeAt(0) !== 0xFFFD) { e[D[0][j]] = 0 + j; d[0 + j] = D[0][j];}\nD[129] = \"���������������������������������������������������������������� 、。,.・:;?!゛゜´`¨^ ̄_ヽヾゝゞ〃仝々〆〇ー―‐/\~∥|…‥‘’“”()〔〕[]{}〈〉《》「」『』【】+-±×�÷=≠<>≦≧∞∴♂♀°′″℃¥$¢£%#&*@§☆★○●◎◇◆□■△▲▽▼※〒→←↑↓〓�����������∈∋⊆⊇⊂⊃∪∩��������∧∨¬⇒⇔∀∃�����������∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬�������ʼn♯♭♪†‡¶����◯���\".split(\"\");\nfor(j = 0; j != D[129].length; ++j) if(D[129][j].charCodeAt(0) !== 0xFFFD) { e[D[129][j]] = 33024 + j; d[33024 + j] = D[129][j];}\nD[130] = \"�������������������������������������������������������������������������������0123456789�������ABCDEFGHIJKLMNOPQRSTUVWXYZ�������abcdefghijklmnopqrstuvwxyz����ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん��������������\".split(\"\");\nfor(j = 0; j != D[130].length; ++j) if(D[130][j].charCodeAt(0) !== 0xFFFD) { e[D[130][j]] = 33280 + j; d[33280 + j] = D[130][j];}\nD[131] = \"����������������������������������������������������������������ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミ�ムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ��������ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ��������αβγδεζηθικλμνξοπρστυφχψω�����������������������������������������\".split(\"\");\nfor(j = 0; j != D[131].length; ++j) if(D[131][j].charCodeAt(0) !== 0xFFFD) { e[D[131][j]] = 33536 + j; d[33536 + j] = D[131][j];}\nD[132] = \"����������������������������������������������������������������АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ���������������абвгдеёжзийклмн�опрстуфхцчшщъыьэюя�������������─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂�����������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[132].length; ++j) if(D[132][j].charCodeAt(0) !== 0xFFFD) { e[D[132][j]] = 33792 + j; d[33792 + j] = D[132][j];}\nD[135] = \"����������������������������������������������������������������①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ�㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡��������㍻�〝〟№㏍℡㊤㊥㊦㊧㊨㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪���������������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[135].length; ++j) if(D[135][j].charCodeAt(0) !== 0xFFFD) { e[D[135][j]] = 34560 + j; d[34560 + j] = D[135][j];}\nD[136] = \"���������������������������������������������������������������������������������������������������������������������������������������������������������������亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭���\".split(\"\");\nfor(j = 0; j != D[136].length; ++j) if(D[136][j].charCodeAt(0) !== 0xFFFD) { e[D[136][j]] = 34816 + j; d[34816 + j] = D[136][j];}\nD[137] = \"����������������������������������������������������������������院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円�園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改���\".split(\"\");\nfor(j = 0; j != D[137].length; ++j) if(D[137][j].charCodeAt(0) !== 0xFFFD) { e[D[137][j]] = 35072 + j; d[35072 + j] = D[137][j];}\nD[138] = \"����������������������������������������������������������������魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫�橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄���\".split(\"\");\nfor(j = 0; j != D[138].length; ++j) if(D[138][j].charCodeAt(0) !== 0xFFFD) { e[D[138][j]] = 35328 + j; d[35328 + j] = D[138][j];}\nD[139] = \"����������������������������������������������������������������機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救�朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈���\".split(\"\");\nfor(j = 0; j != D[139].length; ++j) if(D[139][j].charCodeAt(0) !== 0xFFFD) { e[D[139][j]] = 35584 + j; d[35584 + j] = D[139][j];}\nD[140] = \"����������������������������������������������������������������掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨�劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向���\".split(\"\");\nfor(j = 0; j != D[140].length; ++j) if(D[140][j].charCodeAt(0) !== 0xFFFD) { e[D[140][j]] = 35840 + j; d[35840 + j] = D[140][j];}\nD[141] = \"����������������������������������������������������������������后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降�項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷���\".split(\"\");\nfor(j = 0; j != D[141].length; ++j) if(D[141][j].charCodeAt(0) !== 0xFFFD) { e[D[141][j]] = 36096 + j; d[36096 + j] = D[141][j];}\nD[142] = \"����������������������������������������������������������������察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止�死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周���\".split(\"\");\nfor(j = 0; j != D[142].length; ++j) if(D[142][j].charCodeAt(0) !== 0xFFFD) { e[D[142][j]] = 36352 + j; d[36352 + j] = D[142][j];}\nD[143] = \"����������������������������������������������������������������宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳�準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾���\".split(\"\");\nfor(j = 0; j != D[143].length; ++j) if(D[143][j].charCodeAt(0) !== 0xFFFD) { e[D[143][j]] = 36608 + j; d[36608 + j] = D[143][j];}\nD[144] = \"����������������������������������������������������������������拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨�逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線���\".split(\"\");\nfor(j = 0; j != D[144].length; ++j) if(D[144][j].charCodeAt(0) !== 0xFFFD) { e[D[144][j]] = 36864 + j; d[36864 + j] = D[144][j];}\nD[145] = \"����������������������������������������������������������������繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻�操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只���\".split(\"\");\nfor(j = 0; j != D[145].length; ++j) if(D[145][j].charCodeAt(0) !== 0xFFFD) { e[D[145][j]] = 37120 + j; d[37120 + j] = D[145][j];}\nD[146] = \"����������������������������������������������������������������叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄�逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓���\".split(\"\");\nfor(j = 0; j != D[146].length; ++j) if(D[146][j].charCodeAt(0) !== 0xFFFD) { e[D[146][j]] = 37376 + j; d[37376 + j] = D[146][j];}\nD[147] = \"����������������������������������������������������������������邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬�凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入���\".split(\"\");\nfor(j = 0; j != D[147].length; ++j) if(D[147][j].charCodeAt(0) !== 0xFFFD) { e[D[147][j]] = 37632 + j; d[37632 + j] = D[147][j];}\nD[148] = \"����������������������������������������������������������������如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅�楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美���\".split(\"\");\nfor(j = 0; j != D[148].length; ++j) if(D[148][j].charCodeAt(0) !== 0xFFFD) { e[D[148][j]] = 37888 + j; d[37888 + j] = D[148][j];}\nD[149] = \"����������������������������������������������������������������鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷�斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋���\".split(\"\");\nfor(j = 0; j != D[149].length; ++j) if(D[149][j].charCodeAt(0) !== 0xFFFD) { e[D[149][j]] = 38144 + j; d[38144 + j] = D[149][j];}\nD[150] = \"����������������������������������������������������������������法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆�摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒���\".split(\"\");\nfor(j = 0; j != D[150].length; ++j) if(D[150][j].charCodeAt(0) !== 0xFFFD) { e[D[150][j]] = 38400 + j; d[38400 + j] = D[150][j];}\nD[151] = \"����������������������������������������������������������������諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲�沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯���\".split(\"\");\nfor(j = 0; j != D[151].length; ++j) if(D[151][j].charCodeAt(0) !== 0xFFFD) { e[D[151][j]] = 38656 + j; d[38656 + j] = D[151][j];}\nD[152] = \"����������������������������������������������������������������蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕��������������������������������������������弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲���\".split(\"\");\nfor(j = 0; j != D[152].length; ++j) if(D[152][j].charCodeAt(0) !== 0xFFFD) { e[D[152][j]] = 38912 + j; d[38912 + j] = D[152][j];}\nD[153] = \"����������������������������������������������������������������僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭�凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨���\".split(\"\");\nfor(j = 0; j != D[153].length; ++j) if(D[153][j].charCodeAt(0) !== 0xFFFD) { e[D[153][j]] = 39168 + j; d[39168 + j] = D[153][j];}\nD[154] = \"����������������������������������������������������������������咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸�噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩���\".split(\"\");\nfor(j = 0; j != D[154].length; ++j) if(D[154][j].charCodeAt(0) !== 0xFFFD) { e[D[154][j]] = 39424 + j; d[39424 + j] = D[154][j];}\nD[155] = \"����������������������������������������������������������������奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀�它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏���\".split(\"\");\nfor(j = 0; j != D[155].length; ++j) if(D[155][j].charCodeAt(0) !== 0xFFFD) { e[D[155][j]] = 39680 + j; d[39680 + j] = D[155][j];}\nD[156] = \"����������������������������������������������������������������廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠�怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛���\".split(\"\");\nfor(j = 0; j != D[156].length; ++j) if(D[156][j].charCodeAt(0) !== 0xFFFD) { e[D[156][j]] = 39936 + j; d[39936 + j] = D[156][j];}\nD[157] = \"����������������������������������������������������������������戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫�捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼���\".split(\"\");\nfor(j = 0; j != D[157].length; ++j) if(D[157][j].charCodeAt(0) !== 0xFFFD) { e[D[157][j]] = 40192 + j; d[40192 + j] = D[157][j];}\nD[158] = \"����������������������������������������������������������������曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎�梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣���\".split(\"\");\nfor(j = 0; j != D[158].length; ++j) if(D[158][j].charCodeAt(0) !== 0xFFFD) { e[D[158][j]] = 40448 + j; d[40448 + j] = D[158][j];}\nD[159] = \"����������������������������������������������������������������檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯�麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌���\".split(\"\");\nfor(j = 0; j != D[159].length; ++j) if(D[159][j].charCodeAt(0) !== 0xFFFD) { e[D[159][j]] = 40704 + j; d[40704 + j] = D[159][j];}\nD[224] = \"����������������������������������������������������������������漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝�烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱���\".split(\"\");\nfor(j = 0; j != D[224].length; ++j) if(D[224][j].charCodeAt(0) !== 0xFFFD) { e[D[224][j]] = 57344 + j; d[57344 + j] = D[224][j];}\nD[225] = \"����������������������������������������������������������������瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿�痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬���\".split(\"\");\nfor(j = 0; j != D[225].length; ++j) if(D[225][j].charCodeAt(0) !== 0xFFFD) { e[D[225][j]] = 57600 + j; d[57600 + j] = D[225][j];}\nD[226] = \"����������������������������������������������������������������磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰�窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆���\".split(\"\");\nfor(j = 0; j != D[226].length; ++j) if(D[226][j].charCodeAt(0) !== 0xFFFD) { e[D[226][j]] = 57856 + j; d[57856 + j] = D[226][j];}\nD[227] = \"����������������������������������������������������������������紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷�縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋���\".split(\"\");\nfor(j = 0; j != D[227].length; ++j) if(D[227][j].charCodeAt(0) !== 0xFFFD) { e[D[227][j]] = 58112 + j; d[58112 + j] = D[227][j];}\nD[228] = \"����������������������������������������������������������������隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤�艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈���\".split(\"\");\nfor(j = 0; j != D[228].length; ++j) if(D[228][j].charCodeAt(0) !== 0xFFFD) { e[D[228][j]] = 58368 + j; d[58368 + j] = D[228][j];}\nD[229] = \"����������������������������������������������������������������蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬�蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞���\".split(\"\");\nfor(j = 0; j != D[229].length; ++j) if(D[229][j].charCodeAt(0) !== 0xFFFD) { e[D[229][j]] = 58624 + j; d[58624 + j] = D[229][j];}\nD[230] = \"����������������������������������������������������������������襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧�諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊���\".split(\"\");\nfor(j = 0; j != D[230].length; ++j) if(D[230][j].charCodeAt(0) !== 0xFFFD) { e[D[230][j]] = 58880 + j; d[58880 + j] = D[230][j];}\nD[231] = \"����������������������������������������������������������������蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜�轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮���\".split(\"\");\nfor(j = 0; j != D[231].length; ++j) if(D[231][j].charCodeAt(0) !== 0xFFFD) { e[D[231][j]] = 59136 + j; d[59136 + j] = D[231][j];}\nD[232] = \"����������������������������������������������������������������錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙�閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰���\".split(\"\");\nfor(j = 0; j != D[232].length; ++j) if(D[232][j].charCodeAt(0) !== 0xFFFD) { e[D[232][j]] = 59392 + j; d[59392 + j] = D[232][j];}\nD[233] = \"����������������������������������������������������������������顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃�騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈���\".split(\"\");\nfor(j = 0; j != D[233].length; ++j) if(D[233][j].charCodeAt(0) !== 0xFFFD) { e[D[233][j]] = 59648 + j; d[59648 + j] = D[233][j];}\nD[234] = \"����������������������������������������������������������������鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯�黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠堯槇遙瑤凜熙�������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[234].length; ++j) if(D[234][j].charCodeAt(0) !== 0xFFFD) { e[D[234][j]] = 59904 + j; d[59904 + j] = D[234][j];}\nD[237] = \"����������������������������������������������������������������纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏�塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱���\".split(\"\");\nfor(j = 0; j != D[237].length; ++j) if(D[237][j].charCodeAt(0) !== 0xFFFD) { e[D[237][j]] = 60672 + j; d[60672 + j] = D[237][j];}\nD[238] = \"����������������������������������������������������������������犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙�蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑��ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ¬¦'"���\".split(\"\");\nfor(j = 0; j != D[238].length; ++j) if(D[238][j].charCodeAt(0) !== 0xFFFD) { e[D[238][j]] = 60928 + j; d[60928 + j] = D[238][j];}\nD[250] = \"����������������������������������������������������������������ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ¬¦'"㈱№℡∵纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊�兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯���\".split(\"\");\nfor(j = 0; j != D[250].length; ++j) if(D[250][j].charCodeAt(0) !== 0xFFFD) { e[D[250][j]] = 64000 + j; d[64000 + j] = D[250][j];}\nD[251] = \"����������������������������������������������������������������涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神�祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙���\".split(\"\");\nfor(j = 0; j != D[251].length; ++j) if(D[251][j].charCodeAt(0) !== 0xFFFD) { e[D[251][j]] = 64256 + j; d[64256 + j] = D[251][j];}\nD[252] = \"����������������������������������������������������������������髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[252].length; ++j) if(D[252][j].charCodeAt(0) !== 0xFFFD) { e[D[252][j]] = 64512 + j; d[64512 + j] = D[252][j];}\nreturn {\"enc\": e, \"dec\": d }; })();\ncptable[936] = (function(){ var d = [], e = {}, D = [], j;\nD[0] = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�������������������������������������������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[0].length; ++j) if(D[0][j].charCodeAt(0) !== 0xFFFD) { e[D[0][j]] = 0 + j; d[0 + j] = D[0][j];}\nD[129] = \"����������������������������������������������������������������丂丄丅丆丏丒丗丟丠両丣並丩丮丯丱丳丵丷丼乀乁乂乄乆乊乑乕乗乚乛乢乣乤乥乧乨乪乫乬乭乮乯乲乴乵乶乷乸乹乺乻乼乽乿亀亁亂亃亄亅亇亊�亐亖亗亙亜亝亞亣亪亯亰亱亴亶亷亸亹亼亽亾仈仌仏仐仒仚仛仜仠仢仦仧仩仭仮仯仱仴仸仹仺仼仾伀伂伃伄伅伆伇伈伋伌伒伓伔伕伖伜伝伡伣伨伩伬伭伮伱伳伵伷伹伻伾伿佀佁佂佄佅佇佈佉佊佋佌佒佔佖佡佢佦佨佪佫佭佮佱佲併佷佸佹佺佽侀侁侂侅來侇侊侌侎侐侒侓侕侖侘侙侚侜侞侟価侢�\".split(\"\");\nfor(j = 0; j != D[129].length; ++j) if(D[129][j].charCodeAt(0) !== 0xFFFD) { e[D[129][j]] = 33024 + j; d[33024 + j] = D[129][j];}\nD[130] = \"����������������������������������������������������������������侤侫侭侰侱侲侳侴侶侷侸侹侺侻侼侽侾俀俁係俆俇俈俉俋俌俍俒俓俔俕俖俙俛俠俢俤俥俧俫俬俰俲俴俵俶俷俹俻俼俽俿倀倁倂倃倄倅倆倇倈倉倊�個倎倐們倓倕倖倗倛倝倞倠倢倣値倧倫倯倰倱倲倳倴倵倶倷倸倹倻倽倿偀偁偂偄偅偆偉偊偋偍偐偑偒偓偔偖偗偘偙偛偝偞偟偠偡偢偣偤偦偧偨偩偪偫偭偮偯偰偱偲偳側偵偸偹偺偼偽傁傂傃傄傆傇傉傊傋傌傎傏傐傑傒傓傔傕傖傗傘備傚傛傜傝傞傟傠傡傢傤傦傪傫傭傮傯傰傱傳傴債傶傷傸傹傼�\".split(\"\");\nfor(j = 0; j != D[130].length; ++j) if(D[130][j].charCodeAt(0) !== 0xFFFD) { e[D[130][j]] = 33280 + j; d[33280 + j] = D[130][j];}\nD[131] = \"����������������������������������������������������������������傽傾傿僀僁僂僃僄僅僆僇僈僉僊僋僌働僎僐僑僒僓僔僕僗僘僙僛僜僝僞僟僠僡僢僣僤僥僨僩僪僫僯僰僱僲僴僶僷僸價僺僼僽僾僿儀儁儂儃億儅儈�儉儊儌儍儎儏儐儑儓儔儕儖儗儘儙儚儛儜儝儞償儠儢儣儤儥儦儧儨儩優儫儬儭儮儯儰儱儲儳儴儵儶儷儸儹儺儻儼儽儾兂兇兊兌兎兏児兒兓兗兘兙兛兝兞兟兠兡兣兤兦內兩兪兯兲兺兾兿冃冄円冇冊冋冎冏冐冑冓冔冘冚冝冞冟冡冣冦冧冨冩冪冭冮冴冸冹冺冾冿凁凂凃凅凈凊凍凎凐凒凓凔凕凖凗�\".split(\"\");\nfor(j = 0; j != D[131].length; ++j) if(D[131][j].charCodeAt(0) !== 0xFFFD) { e[D[131][j]] = 33536 + j; d[33536 + j] = D[131][j];}\nD[132] = \"����������������������������������������������������������������凘凙凚凜凞凟凢凣凥処凧凨凩凪凬凮凱凲凴凷凾刄刅刉刋刌刏刐刓刔刕刜刞刟刡刢刣別刦刧刪刬刯刱刲刴刵刼刾剄剅剆則剈剉剋剎剏剒剓剕剗剘�剙剚剛剝剟剠剢剣剤剦剨剫剬剭剮剰剱剳剴創剶剷剸剹剺剻剼剾劀劃劄劅劆劇劉劊劋劌劍劎劏劑劒劔劕劖劗劘劙劚劜劤劥劦劧劮劯劰労劵劶劷劸効劺劻劼劽勀勁勂勄勅勆勈勊勌勍勎勏勑勓勔動勗務勚勛勜勝勞勠勡勢勣勥勦勧勨勩勪勫勬勭勮勯勱勲勳勴勵勶勷勸勻勼勽匁匂匃匄匇匉匊匋匌匎�\".split(\"\");\nfor(j = 0; j != D[132].length; ++j) if(D[132][j].charCodeAt(0) !== 0xFFFD) { e[D[132][j]] = 33792 + j; d[33792 + j] = D[132][j];}\nD[133] = \"����������������������������������������������������������������匑匒匓匔匘匛匜匞匟匢匤匥匧匨匩匫匬匭匯匰匱匲匳匴匵匶匷匸匼匽區卂卄卆卋卌卍卐協単卙卛卝卥卨卪卬卭卲卶卹卻卼卽卾厀厁厃厇厈厊厎厏�厐厑厒厓厔厖厗厙厛厜厞厠厡厤厧厪厫厬厭厯厰厱厲厳厴厵厷厸厹厺厼厽厾叀參叄叅叆叇収叏叐叒叓叕叚叜叝叞叡叢叧叴叺叾叿吀吂吅吇吋吔吘吙吚吜吢吤吥吪吰吳吶吷吺吽吿呁呂呄呅呇呉呌呍呎呏呑呚呝呞呟呠呡呣呥呧呩呪呫呬呭呮呯呰呴呹呺呾呿咁咃咅咇咈咉咊咍咑咓咗咘咜咞咟咠咡�\".split(\"\");\nfor(j = 0; j != D[133].length; ++j) if(D[133][j].charCodeAt(0) !== 0xFFFD) { e[D[133][j]] = 34048 + j; d[34048 + j] = D[133][j];}\nD[134] = \"����������������������������������������������������������������咢咥咮咰咲咵咶咷咹咺咼咾哃哅哊哋哖哘哛哠員哢哣哤哫哬哯哰哱哴哵哶哷哸哹哻哾唀唂唃唄唅唈唊唋唌唍唎唒唓唕唖唗唘唙唚唜唝唞唟唡唥唦�唨唩唫唭唲唴唵唶唸唹唺唻唽啀啂啅啇啈啋啌啍啎問啑啒啓啔啗啘啙啚啛啝啞啟啠啢啣啨啩啫啯啰啱啲啳啴啹啺啽啿喅喆喌喍喎喐喒喓喕喖喗喚喛喞喠喡喢喣喤喥喦喨喩喪喫喬喭單喯喰喲喴営喸喺喼喿嗀嗁嗂嗃嗆嗇嗈嗊嗋嗎嗏嗐嗕嗗嗘嗙嗚嗛嗞嗠嗢嗧嗩嗭嗮嗰嗱嗴嗶嗸嗹嗺嗻嗼嗿嘂嘃嘄嘅�\".split(\"\");\nfor(j = 0; j != D[134].length; ++j) if(D[134][j].charCodeAt(0) !== 0xFFFD) { e[D[134][j]] = 34304 + j; d[34304 + j] = D[134][j];}\nD[135] = \"����������������������������������������������������������������嘆嘇嘊嘋嘍嘐嘑嘒嘓嘔嘕嘖嘗嘙嘚嘜嘝嘠嘡嘢嘥嘦嘨嘩嘪嘫嘮嘯嘰嘳嘵嘷嘸嘺嘼嘽嘾噀噁噂噃噄噅噆噇噈噉噊噋噏噐噑噒噓噕噖噚噛噝噞噟噠噡�噣噥噦噧噭噮噯噰噲噳噴噵噷噸噹噺噽噾噿嚀嚁嚂嚃嚄嚇嚈嚉嚊嚋嚌嚍嚐嚑嚒嚔嚕嚖嚗嚘嚙嚚嚛嚜嚝嚞嚟嚠嚡嚢嚤嚥嚦嚧嚨嚩嚪嚫嚬嚭嚮嚰嚱嚲嚳嚴嚵嚶嚸嚹嚺嚻嚽嚾嚿囀囁囂囃囄囅囆囇囈囉囋囌囍囎囏囐囑囒囓囕囖囘囙囜団囥囦囧囨囩囪囬囮囯囲図囶囷囸囻囼圀圁圂圅圇國圌圍圎圏圐圑�\".split(\"\");\nfor(j = 0; j != D[135].length; ++j) if(D[135][j].charCodeAt(0) !== 0xFFFD) { e[D[135][j]] = 34560 + j; d[34560 + j] = D[135][j];}\nD[136] = \"����������������������������������������������������������������園圓圔圕圖圗團圙圚圛圝圞圠圡圢圤圥圦圧圫圱圲圴圵圶圷圸圼圽圿坁坃坄坅坆坈坉坋坒坓坔坕坖坘坙坢坣坥坧坬坮坰坱坲坴坵坸坹坺坽坾坿垀�垁垇垈垉垊垍垎垏垐垑垔垕垖垗垘垙垚垜垝垞垟垥垨垪垬垯垰垱垳垵垶垷垹垺垻垼垽垾垿埀埁埄埅埆埇埈埉埊埌埍埐埑埓埖埗埛埜埞埡埢埣埥埦埧埨埩埪埫埬埮埰埱埲埳埵埶執埻埼埾埿堁堃堄堅堈堉堊堌堎堏堐堒堓堔堖堗堘堚堛堜堝堟堢堣堥堦堧堨堩堫堬堭堮堯報堲堳場堶堷堸堹堺堻堼堽�\".split(\"\");\nfor(j = 0; j != D[136].length; ++j) if(D[136][j].charCodeAt(0) !== 0xFFFD) { e[D[136][j]] = 34816 + j; d[34816 + j] = D[136][j];}\nD[137] = \"����������������������������������������������������������������堾堿塀塁塂塃塅塆塇塈塉塊塋塎塏塐塒塓塕塖塗塙塚塛塜塝塟塠塡塢塣塤塦塧塨塩塪塭塮塯塰塱塲塳塴塵塶塷塸塹塺塻塼塽塿墂墄墆墇墈墊墋墌�墍墎墏墐墑墔墕墖増墘墛墜墝墠墡墢墣墤墥墦墧墪墫墬墭墮墯墰墱墲墳墴墵墶墷墸墹墺墻墽墾墿壀壂壃壄壆壇壈壉壊壋壌壍壎壏壐壒壓壔壖壗壘壙壚壛壜壝壞壟壠壡壢壣壥壦壧壨壩壪壭壯壱売壴壵壷壸壺壻壼壽壾壿夀夁夃夅夆夈変夊夋夌夎夐夑夒夓夗夘夛夝夞夠夡夢夣夦夨夬夰夲夳夵夶夻�\".split(\"\");\nfor(j = 0; j != D[137].length; ++j) if(D[137][j].charCodeAt(0) !== 0xFFFD) { e[D[137][j]] = 35072 + j; d[35072 + j] = D[137][j];}\nD[138] = \"����������������������������������������������������������������夽夾夿奀奃奅奆奊奌奍奐奒奓奙奛奜奝奞奟奡奣奤奦奧奨奩奪奫奬奭奮奯奰奱奲奵奷奺奻奼奾奿妀妅妉妋妌妎妏妐妑妔妕妘妚妛妜妝妟妠妡妢妦�妧妬妭妰妱妳妴妵妶妷妸妺妼妽妿姀姁姂姃姄姅姇姈姉姌姍姎姏姕姖姙姛姞姟姠姡姢姤姦姧姩姪姫姭姮姯姰姱姲姳姴姵姶姷姸姺姼姽姾娀娂娊娋娍娎娏娐娒娔娕娖娗娙娚娛娝娞娡娢娤娦娧娨娪娫娬娭娮娯娰娳娵娷娸娹娺娻娽娾娿婁婂婃婄婅婇婈婋婌婍婎婏婐婑婒婓婔婖婗婘婙婛婜婝婞婟婠�\".split(\"\");\nfor(j = 0; j != D[138].length; ++j) if(D[138][j].charCodeAt(0) !== 0xFFFD) { e[D[138][j]] = 35328 + j; d[35328 + j] = D[138][j];}\nD[139] = \"����������������������������������������������������������������婡婣婤婥婦婨婩婫婬婭婮婯婰婱婲婳婸婹婻婼婽婾媀媁媂媃媄媅媆媇媈媉媊媋媌媍媎媏媐媑媓媔媕媖媗媘媙媜媝媞媟媠媡媢媣媤媥媦媧媨媩媫媬�媭媮媯媰媱媴媶媷媹媺媻媼媽媿嫀嫃嫄嫅嫆嫇嫈嫊嫋嫍嫎嫏嫐嫑嫓嫕嫗嫙嫚嫛嫝嫞嫟嫢嫤嫥嫧嫨嫪嫬嫭嫮嫯嫰嫲嫳嫴嫵嫶嫷嫸嫹嫺嫻嫼嫽嫾嫿嬀嬁嬂嬃嬄嬅嬆嬇嬈嬊嬋嬌嬍嬎嬏嬐嬑嬒嬓嬔嬕嬘嬙嬚嬛嬜嬝嬞嬟嬠嬡嬢嬣嬤嬥嬦嬧嬨嬩嬪嬫嬬嬭嬮嬯嬰嬱嬳嬵嬶嬸嬹嬺嬻嬼嬽嬾嬿孁孂孃孄孅孆孇�\".split(\"\");\nfor(j = 0; j != D[139].length; ++j) if(D[139][j].charCodeAt(0) !== 0xFFFD) { e[D[139][j]] = 35584 + j; d[35584 + j] = D[139][j];}\nD[140] = \"����������������������������������������������������������������孈孉孊孋孌孍孎孏孒孖孞孠孡孧孨孫孭孮孯孲孴孶孷學孹孻孼孾孿宂宆宊宍宎宐宑宒宔宖実宧宨宩宬宭宮宯宱宲宷宺宻宼寀寁寃寈寉寊寋寍寎寏�寑寔寕寖寗寘寙寚寛寜寠寢寣實寧審寪寫寬寭寯寱寲寳寴寵寶寷寽対尀専尃尅將專尋尌對導尐尒尓尗尙尛尞尟尠尡尣尦尨尩尪尫尭尮尯尰尲尳尵尶尷屃屄屆屇屌屍屒屓屔屖屗屘屚屛屜屝屟屢層屧屨屩屪屫屬屭屰屲屳屴屵屶屷屸屻屼屽屾岀岃岄岅岆岇岉岊岋岎岏岒岓岕岝岞岟岠岡岤岥岦岧岨�\".split(\"\");\nfor(j = 0; j != D[140].length; ++j) if(D[140][j].charCodeAt(0) !== 0xFFFD) { e[D[140][j]] = 35840 + j; d[35840 + j] = D[140][j];}\nD[141] = \"����������������������������������������������������������������岪岮岯岰岲岴岶岹岺岻岼岾峀峂峃峅峆峇峈峉峊峌峍峎峏峐峑峓峔峕峖峗峘峚峛峜峝峞峟峠峢峣峧峩峫峬峮峯峱峲峳峴峵島峷峸峹峺峼峽峾峿崀�崁崄崅崈崉崊崋崌崍崏崐崑崒崓崕崗崘崙崚崜崝崟崠崡崢崣崥崨崪崫崬崯崰崱崲崳崵崶崷崸崹崺崻崼崿嵀嵁嵂嵃嵄嵅嵆嵈嵉嵍嵎嵏嵐嵑嵒嵓嵔嵕嵖嵗嵙嵚嵜嵞嵟嵠嵡嵢嵣嵤嵥嵦嵧嵨嵪嵭嵮嵰嵱嵲嵳嵵嵶嵷嵸嵹嵺嵻嵼嵽嵾嵿嶀嶁嶃嶄嶅嶆嶇嶈嶉嶊嶋嶌嶍嶎嶏嶐嶑嶒嶓嶔嶕嶖嶗嶘嶚嶛嶜嶞嶟嶠�\".split(\"\");\nfor(j = 0; j != D[141].length; ++j) if(D[141][j].charCodeAt(0) !== 0xFFFD) { e[D[141][j]] = 36096 + j; d[36096 + j] = D[141][j];}\nD[142] = \"����������������������������������������������������������������嶡嶢嶣嶤嶥嶦嶧嶨嶩嶪嶫嶬嶭嶮嶯嶰嶱嶲嶳嶴嶵嶶嶸嶹嶺嶻嶼嶽嶾嶿巀巁巂巃巄巆巇巈巉巊巋巌巎巏巐巑巒巓巔巕巖巗巘巙巚巜巟巠巣巤巪巬巭�巰巵巶巸巹巺巻巼巿帀帄帇帉帊帋帍帎帒帓帗帞帟帠帡帢帣帤帥帨帩帪師帬帯帰帲帳帴帵帶帹帺帾帿幀幁幃幆幇幈幉幊幋幍幎幏幐幑幒幓幖幗幘幙幚幜幝幟幠幣幤幥幦幧幨幩幪幫幬幭幮幯幰幱幵幷幹幾庁庂広庅庈庉庌庍庎庒庘庛庝庡庢庣庤庨庩庪庫庬庮庯庰庱庲庴庺庻庼庽庿廀廁廂廃廄廅�\".split(\"\");\nfor(j = 0; j != D[142].length; ++j) if(D[142][j].charCodeAt(0) !== 0xFFFD) { e[D[142][j]] = 36352 + j; d[36352 + j] = D[142][j];}\nD[143] = \"����������������������������������������������������������������廆廇廈廋廌廍廎廏廐廔廕廗廘廙廚廜廝廞廟廠廡廢廣廤廥廦廧廩廫廬廭廮廯廰廱廲廳廵廸廹廻廼廽弅弆弇弉弌弍弎弐弒弔弖弙弚弜弝弞弡弢弣弤�弨弫弬弮弰弲弳弴張弶強弸弻弽弾弿彁彂彃彄彅彆彇彈彉彊彋彌彍彎彏彑彔彙彚彛彜彞彟彠彣彥彧彨彫彮彯彲彴彵彶彸彺彽彾彿徃徆徍徎徏徑従徔徖徚徛徝從徟徠徢徣徤徥徦徧復徫徬徯徰徱徲徳徴徶徸徹徺徻徾徿忀忁忂忇忈忊忋忎忓忔忕忚忛応忞忟忢忣忥忦忨忩忬忯忰忲忳忴忶忷忹忺忼怇�\".split(\"\");\nfor(j = 0; j != D[143].length; ++j) if(D[143][j].charCodeAt(0) !== 0xFFFD) { e[D[143][j]] = 36608 + j; d[36608 + j] = D[143][j];}\nD[144] = \"����������������������������������������������������������������怈怉怋怌怐怑怓怗怘怚怞怟怢怣怤怬怭怮怰怱怲怳怴怶怷怸怹怺怽怾恀恄恅恆恇恈恉恊恌恎恏恑恓恔恖恗恘恛恜恞恟恠恡恥恦恮恱恲恴恵恷恾悀�悁悂悅悆悇悈悊悋悎悏悐悑悓悕悗悘悙悜悞悡悢悤悥悧悩悪悮悰悳悵悶悷悹悺悽悾悿惀惁惂惃惄惇惈惉惌惍惎惏惐惒惓惔惖惗惙惛惞惡惢惣惤惥惪惱惲惵惷惸惻惼惽惾惿愂愃愄愅愇愊愋愌愐愑愒愓愔愖愗愘愙愛愜愝愞愡愢愥愨愩愪愬愭愮愯愰愱愲愳愴愵愶愷愸愹愺愻愼愽愾慀慁慂慃慄慅慆�\".split(\"\");\nfor(j = 0; j != D[144].length; ++j) if(D[144][j].charCodeAt(0) !== 0xFFFD) { e[D[144][j]] = 36864 + j; d[36864 + j] = D[144][j];}\nD[145] = \"����������������������������������������������������������������慇慉態慍慏慐慒慓慔慖慗慘慙慚慛慜慞慟慠慡慣慤慥慦慩慪慫慬慭慮慯慱慲慳慴慶慸慹慺慻慼慽慾慿憀憁憂憃憄憅憆憇憈憉憊憌憍憏憐憑憒憓憕�憖憗憘憙憚憛憜憞憟憠憡憢憣憤憥憦憪憫憭憮憯憰憱憲憳憴憵憶憸憹憺憻憼憽憿懀懁懃懄懅懆懇應懌懍懎懏懐懓懕懖懗懘懙懚懛懜懝懞懟懠懡懢懣懤懥懧懨懩懪懫懬懭懮懯懰懱懲懳懴懶懷懸懹懺懻懼懽懾戀戁戂戃戄戅戇戉戓戔戙戜戝戞戠戣戦戧戨戩戫戭戯戰戱戲戵戶戸戹戺戻戼扂扄扅扆扊�\".split(\"\");\nfor(j = 0; j != D[145].length; ++j) if(D[145][j].charCodeAt(0) !== 0xFFFD) { e[D[145][j]] = 37120 + j; d[37120 + j] = D[145][j];}\nD[146] = \"����������������������������������������������������������������扏扐払扖扗扙扚扜扝扞扟扠扡扢扤扥扨扱扲扴扵扷扸扺扻扽抁抂抃抅抆抇抈抋抌抍抎抏抐抔抙抜抝択抣抦抧抩抪抭抮抯抰抲抳抴抶抷抸抺抾拀拁�拃拋拏拑拕拝拞拠拡拤拪拫拰拲拵拸拹拺拻挀挃挄挅挆挊挋挌挍挏挐挒挓挔挕挗挘挙挜挦挧挩挬挭挮挰挱挳挴挵挶挷挸挻挼挾挿捀捁捄捇捈捊捑捒捓捔捖捗捘捙捚捛捜捝捠捤捥捦捨捪捫捬捯捰捲捳捴捵捸捹捼捽捾捿掁掃掄掅掆掋掍掑掓掔掕掗掙掚掛掜掝掞掟採掤掦掫掯掱掲掵掶掹掻掽掿揀�\".split(\"\");\nfor(j = 0; j != D[146].length; ++j) if(D[146][j].charCodeAt(0) !== 0xFFFD) { e[D[146][j]] = 37376 + j; d[37376 + j] = D[146][j];}\nD[147] = \"����������������������������������������������������������������揁揂揃揅揇揈揊揋揌揑揓揔揕揗揘揙揚換揜揝揟揢揤揥揦揧揨揫揬揮揯揰揱揳揵揷揹揺揻揼揾搃搄搆搇搈搉搊損搎搑搒搕搖搗搘搙搚搝搟搢搣搤�搥搧搨搩搫搮搯搰搱搲搳搵搶搷搸搹搻搼搾摀摂摃摉摋摌摍摎摏摐摑摓摕摖摗摙摚摛摜摝摟摠摡摢摣摤摥摦摨摪摫摬摮摯摰摱摲摳摴摵摶摷摻摼摽摾摿撀撁撃撆撈撉撊撋撌撍撎撏撐撓撔撗撘撚撛撜撝撟撠撡撢撣撥撦撧撨撪撫撯撱撲撳撴撶撹撻撽撾撿擁擃擄擆擇擈擉擊擋擌擏擑擓擔擕擖擙據�\".split(\"\");\nfor(j = 0; j != D[147].length; ++j) if(D[147][j].charCodeAt(0) !== 0xFFFD) { e[D[147][j]] = 37632 + j; d[37632 + j] = D[147][j];}\nD[148] = \"����������������������������������������������������������������擛擜擝擟擠擡擣擥擧擨擩擪擫擬擭擮擯擰擱擲擳擴擵擶擷擸擹擺擻擼擽擾擿攁攂攃攄攅攆攇攈攊攋攌攍攎攏攐攑攓攔攕攖攗攙攚攛攜攝攞攟攠攡�攢攣攤攦攧攨攩攪攬攭攰攱攲攳攷攺攼攽敀敁敂敃敄敆敇敊敋敍敎敐敒敓敔敗敘敚敜敟敠敡敤敥敧敨敩敪敭敮敯敱敳敵敶數敹敺敻敼敽敾敿斀斁斂斃斄斅斆斈斉斊斍斎斏斒斔斕斖斘斚斝斞斠斢斣斦斨斪斬斮斱斲斳斴斵斶斷斸斺斻斾斿旀旂旇旈旉旊旍旐旑旓旔旕旘旙旚旛旜旝旞旟旡旣旤旪旫�\".split(\"\");\nfor(j = 0; j != D[148].length; ++j) if(D[148][j].charCodeAt(0) !== 0xFFFD) { e[D[148][j]] = 37888 + j; d[37888 + j] = D[148][j];}\nD[149] = \"����������������������������������������������������������������旲旳旴旵旸旹旻旼旽旾旿昁昄昅昇昈昉昋昍昐昑昒昖昗昘昚昛昜昞昡昢昣昤昦昩昪昫昬昮昰昲昳昷昸昹昺昻昽昿晀時晄晅晆晇晈晉晊晍晎晐晑晘�晙晛晜晝晞晠晢晣晥晧晩晪晫晬晭晱晲晳晵晸晹晻晼晽晿暀暁暃暅暆暈暉暊暋暍暎暏暐暒暓暔暕暘暙暚暛暜暞暟暠暡暢暣暤暥暦暩暪暫暬暭暯暰暱暲暳暵暶暷暸暺暻暼暽暿曀曁曂曃曄曅曆曇曈曉曊曋曌曍曎曏曐曑曒曓曔曕曖曗曘曚曞曟曠曡曢曣曤曥曧曨曪曫曬曭曮曯曱曵曶書曺曻曽朁朂會�\".split(\"\");\nfor(j = 0; j != D[149].length; ++j) if(D[149][j].charCodeAt(0) !== 0xFFFD) { e[D[149][j]] = 38144 + j; d[38144 + j] = D[149][j];}\nD[150] = \"����������������������������������������������������������������朄朅朆朇朌朎朏朑朒朓朖朘朙朚朜朞朠朡朢朣朤朥朧朩朮朰朲朳朶朷朸朹朻朼朾朿杁杄杅杇杊杋杍杒杔杕杗杘杙杚杛杝杢杣杤杦杧杫杬杮東杴杶�杸杹杺杻杽枀枂枃枅枆枈枊枌枍枎枏枑枒枓枔枖枙枛枟枠枡枤枦枩枬枮枱枲枴枹枺枻枼枽枾枿柀柂柅柆柇柈柉柊柋柌柍柎柕柖柗柛柟柡柣柤柦柧柨柪柫柭柮柲柵柶柷柸柹柺査柼柾栁栂栃栄栆栍栐栒栔栕栘栙栚栛栜栞栟栠栢栣栤栥栦栧栨栫栬栭栮栯栰栱栴栵栶栺栻栿桇桋桍桏桒桖桗桘桙桚桛�\".split(\"\");\nfor(j = 0; j != D[150].length; ++j) if(D[150][j].charCodeAt(0) !== 0xFFFD) { e[D[150][j]] = 38400 + j; d[38400 + j] = D[150][j];}\nD[151] = \"����������������������������������������������������������������桜桝桞桟桪桬桭桮桯桰桱桲桳桵桸桹桺桻桼桽桾桿梀梂梄梇梈梉梊梋梌梍梎梐梑梒梔梕梖梘梙梚梛梜條梞梟梠梡梣梤梥梩梪梫梬梮梱梲梴梶梷梸�梹梺梻梼梽梾梿棁棃棄棅棆棇棈棊棌棎棏棐棑棓棔棖棗棙棛棜棝棞棟棡棢棤棥棦棧棨棩棪棫棬棭棯棲棳棴棶棷棸棻棽棾棿椀椂椃椄椆椇椈椉椊椌椏椑椓椔椕椖椗椘椙椚椛検椝椞椡椢椣椥椦椧椨椩椪椫椬椮椯椱椲椳椵椶椷椸椺椻椼椾楀楁楃楄楅楆楇楈楉楊楋楌楍楎楏楐楑楒楓楕楖楘楙楛楜楟�\".split(\"\");\nfor(j = 0; j != D[151].length; ++j) if(D[151][j].charCodeAt(0) !== 0xFFFD) { e[D[151][j]] = 38656 + j; d[38656 + j] = D[151][j];}\nD[152] = \"����������������������������������������������������������������楡楢楤楥楧楨楩楪楬業楯楰楲楳楴極楶楺楻楽楾楿榁榃榅榊榋榌榎榏榐榑榒榓榖榗榙榚榝榞榟榠榡榢榣榤榥榦榩榪榬榮榯榰榲榳榵榶榸榹榺榼榽�榾榿槀槂槃槄槅槆槇槈槉構槍槏槑槒槓槕槖槗様槙槚槜槝槞槡槢槣槤槥槦槧槨槩槪槫槬槮槯槰槱槳槴槵槶槷槸槹槺槻槼槾樀樁樂樃樄樅樆樇樈樉樋樌樍樎樏樐樑樒樓樔樕樖標樚樛樜樝樞樠樢樣樤樥樦樧権樫樬樭樮樰樲樳樴樶樷樸樹樺樻樼樿橀橁橂橃橅橆橈橉橊橋橌橍橎橏橑橒橓橔橕橖橗橚�\".split(\"\");\nfor(j = 0; j != D[152].length; ++j) if(D[152][j].charCodeAt(0) !== 0xFFFD) { e[D[152][j]] = 38912 + j; d[38912 + j] = D[152][j];}\nD[153] = \"����������������������������������������������������������������橜橝橞機橠橢橣橤橦橧橨橩橪橫橬橭橮橯橰橲橳橴橵橶橷橸橺橻橽橾橿檁檂檃檅檆檇檈檉檊檋檌檍檏檒檓檔檕檖檘檙檚檛檜檝檞檟檡檢檣檤檥檦�檧檨檪檭檮檯檰檱檲檳檴檵檶檷檸檹檺檻檼檽檾檿櫀櫁櫂櫃櫄櫅櫆櫇櫈櫉櫊櫋櫌櫍櫎櫏櫐櫑櫒櫓櫔櫕櫖櫗櫘櫙櫚櫛櫜櫝櫞櫟櫠櫡櫢櫣櫤櫥櫦櫧櫨櫩櫪櫫櫬櫭櫮櫯櫰櫱櫲櫳櫴櫵櫶櫷櫸櫹櫺櫻櫼櫽櫾櫿欀欁欂欃欄欅欆欇欈欉權欋欌欍欎欏欐欑欒欓欔欕欖欗欘欙欚欛欜欝欞欟欥欦欨欩欪欫欬欭欮�\".split(\"\");\nfor(j = 0; j != D[153].length; ++j) if(D[153][j].charCodeAt(0) !== 0xFFFD) { e[D[153][j]] = 39168 + j; d[39168 + j] = D[153][j];}\nD[154] = \"����������������������������������������������������������������欯欰欱欳欴欵欶欸欻欼欽欿歀歁歂歄歅歈歊歋歍歎歏歐歑歒歓歔歕歖歗歘歚歛歜歝歞歟歠歡歨歩歫歬歭歮歯歰歱歲歳歴歵歶歷歸歺歽歾歿殀殅殈�殌殎殏殐殑殔殕殗殘殙殜殝殞殟殠殢殣殤殥殦殧殨殩殫殬殭殮殯殰殱殲殶殸殹殺殻殼殽殾毀毃毄毆毇毈毉毊毌毎毐毑毘毚毜毝毞毟毠毢毣毤毥毦毧毨毩毬毭毮毰毱毲毴毶毷毸毺毻毼毾毿氀氁氂氃氄氈氉氊氋氌氎氒気氜氝氞氠氣氥氫氬氭氱氳氶氷氹氺氻氼氾氿汃汄汅汈汋汌汍汎汏汑汒汓汖汘�\".split(\"\");\nfor(j = 0; j != D[154].length; ++j) if(D[154][j].charCodeAt(0) !== 0xFFFD) { e[D[154][j]] = 39424 + j; d[39424 + j] = D[154][j];}\nD[155] = \"����������������������������������������������������������������汙汚汢汣汥汦汧汫汬汭汮汯汱汳汵汷汸決汻汼汿沀沄沇沊沋沍沎沑沒沕沖沗沘沚沜沝沞沠沢沨沬沯沰沴沵沶沷沺泀況泂泃泆泇泈泋泍泎泏泑泒泘�泙泚泜泝泟泤泦泧泩泬泭泲泴泹泿洀洂洃洅洆洈洉洊洍洏洐洑洓洔洕洖洘洜洝洟洠洡洢洣洤洦洨洩洬洭洯洰洴洶洷洸洺洿浀浂浄浉浌浐浕浖浗浘浛浝浟浡浢浤浥浧浨浫浬浭浰浱浲浳浵浶浹浺浻浽浾浿涀涁涃涄涆涇涊涋涍涏涐涒涖涗涘涙涚涜涢涥涬涭涰涱涳涴涶涷涹涺涻涼涽涾淁淂淃淈淉淊�\".split(\"\");\nfor(j = 0; j != D[155].length; ++j) if(D[155][j].charCodeAt(0) !== 0xFFFD) { e[D[155][j]] = 39680 + j; d[39680 + j] = D[155][j];}\nD[156] = \"����������������������������������������������������������������淍淎淏淐淒淓淔淕淗淚淛淜淟淢淣淥淧淨淩淪淭淯淰淲淴淵淶淸淺淽淾淿渀渁渂渃渄渆渇済渉渋渏渒渓渕渘渙減渜渞渟渢渦渧渨渪測渮渰渱渳渵�渶渷渹渻渼渽渾渿湀湁湂湅湆湇湈湉湊湋湌湏湐湑湒湕湗湙湚湜湝湞湠湡湢湣湤湥湦湧湨湩湪湬湭湯湰湱湲湳湴湵湶湷湸湹湺湻湼湽満溁溂溄溇溈溊溋溌溍溎溑溒溓溔溕準溗溙溚溛溝溞溠溡溣溤溦溨溩溫溬溭溮溰溳溵溸溹溼溾溿滀滃滄滅滆滈滉滊滌滍滎滐滒滖滘滙滛滜滝滣滧滪滫滬滭滮滯�\".split(\"\");\nfor(j = 0; j != D[156].length; ++j) if(D[156][j].charCodeAt(0) !== 0xFFFD) { e[D[156][j]] = 39936 + j; d[39936 + j] = D[156][j];}\nD[157] = \"����������������������������������������������������������������滰滱滲滳滵滶滷滸滺滻滼滽滾滿漀漁漃漄漅漇漈漊漋漌漍漎漐漑漒漖漗漘漙漚漛漜漝漞漟漡漢漣漥漦漧漨漬漮漰漲漴漵漷漸漹漺漻漼漽漿潀潁潂�潃潄潅潈潉潊潌潎潏潐潑潒潓潔潕潖潗潙潚潛潝潟潠潡潣潤潥潧潨潩潪潫潬潯潰潱潳潵潶潷潹潻潽潾潿澀澁澂澃澅澆澇澊澋澏澐澑澒澓澔澕澖澗澘澙澚澛澝澞澟澠澢澣澤澥澦澨澩澪澫澬澭澮澯澰澱澲澴澵澷澸澺澻澼澽澾澿濁濃濄濅濆濇濈濊濋濌濍濎濏濐濓濔濕濖濗濘濙濚濛濜濝濟濢濣濤濥�\".split(\"\");\nfor(j = 0; j != D[157].length; ++j) if(D[157][j].charCodeAt(0) !== 0xFFFD) { e[D[157][j]] = 40192 + j; d[40192 + j] = D[157][j];}\nD[158] = \"����������������������������������������������������������������濦濧濨濩濪濫濬濭濰濱濲濳濴濵濶濷濸濹濺濻濼濽濾濿瀀瀁瀂瀃瀄瀅瀆瀇瀈瀉瀊瀋瀌瀍瀎瀏瀐瀒瀓瀔瀕瀖瀗瀘瀙瀜瀝瀞瀟瀠瀡瀢瀤瀥瀦瀧瀨瀩瀪�瀫瀬瀭瀮瀯瀰瀱瀲瀳瀴瀶瀷瀸瀺瀻瀼瀽瀾瀿灀灁灂灃灄灅灆灇灈灉灊灋灍灎灐灑灒灓灔灕灖灗灘灙灚灛灜灝灟灠灡灢灣灤灥灦灧灨灩灪灮灱灲灳灴灷灹灺灻災炁炂炃炄炆炇炈炋炌炍炏炐炑炓炗炘炚炛炞炟炠炡炢炣炤炥炦炧炨炩炪炰炲炴炵炶為炾炿烄烅烆烇烉烋烌烍烎烏烐烑烒烓烔烕烖烗烚�\".split(\"\");\nfor(j = 0; j != D[158].length; ++j) if(D[158][j].charCodeAt(0) !== 0xFFFD) { e[D[158][j]] = 40448 + j; d[40448 + j] = D[158][j];}\nD[159] = \"����������������������������������������������������������������烜烝烞烠烡烢烣烥烪烮烰烱烲烳烴烵烶烸烺烻烼烾烿焀焁焂焃焄焅焆焇焈焋焌焍焎焏焑焒焔焗焛焜焝焞焟焠無焢焣焤焥焧焨焩焪焫焬焭焮焲焳焴�焵焷焸焹焺焻焼焽焾焿煀煁煂煃煄煆煇煈煉煋煍煏煐煑煒煓煔煕煖煗煘煙煚煛煝煟煠煡煢煣煥煩煪煫煬煭煯煰煱煴煵煶煷煹煻煼煾煿熀熁熂熃熅熆熇熈熉熋熌熍熎熐熑熒熓熕熖熗熚熛熜熝熞熡熢熣熤熥熦熧熩熪熫熭熮熯熰熱熲熴熶熷熸熺熻熼熽熾熿燀燁燂燄燅燆燇燈燉燊燋燌燍燏燐燑燒燓�\".split(\"\");\nfor(j = 0; j != D[159].length; ++j) if(D[159][j].charCodeAt(0) !== 0xFFFD) { e[D[159][j]] = 40704 + j; d[40704 + j] = D[159][j];}\nD[160] = \"����������������������������������������������������������������燖燗燘燙燚燛燜燝燞營燡燢燣燤燦燨燩燪燫燬燭燯燰燱燲燳燴燵燶燷燸燺燻燼燽燾燿爀爁爂爃爄爅爇爈爉爊爋爌爍爎爏爐爑爒爓爔爕爖爗爘爙爚�爛爜爞爟爠爡爢爣爤爥爦爧爩爫爭爮爯爲爳爴爺爼爾牀牁牂牃牄牅牆牉牊牋牎牏牐牑牓牔牕牗牘牚牜牞牠牣牤牥牨牪牫牬牭牰牱牳牴牶牷牸牻牼牽犂犃犅犆犇犈犉犌犎犐犑犓犔犕犖犗犘犙犚犛犜犝犞犠犡犢犣犤犥犦犧犨犩犪犫犮犱犲犳犵犺犻犼犽犾犿狀狅狆狇狉狊狋狌狏狑狓狔狕狖狘狚狛�\".split(\"\");\nfor(j = 0; j != D[160].length; ++j) if(D[160][j].charCodeAt(0) !== 0xFFFD) { e[D[160][j]] = 40960 + j; d[40960 + j] = D[160][j];}\nD[161] = \"����������������������������������������������������������������������������������������������������������������������������������������������������������������� 、。·ˉˇ¨〃々—~‖…‘’“”〔〕〈〉《》「」『』〖〗【】±×÷∶∧∨∑∏∪∩∈∷√⊥∥∠⌒⊙∫∮≡≌≈∽∝≠≮≯≤≥∞∵∴♂♀°′″℃$¤¢£‰§№☆★○●◎◇◆□■△▲※→←↑↓〓�\".split(\"\");\nfor(j = 0; j != D[161].length; ++j) if(D[161][j].charCodeAt(0) !== 0xFFFD) { e[D[161][j]] = 41216 + j; d[41216 + j] = D[161][j];}\nD[162] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ������⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖⒗⒘⒙⒚⒛⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂⒃⒄⒅⒆⒇①②③④⑤⑥⑦⑧⑨⑩��㈠㈡㈢㈣㈤㈥㈦㈧㈨㈩��ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫ���\".split(\"\");\nfor(j = 0; j != D[162].length; ++j) if(D[162][j].charCodeAt(0) !== 0xFFFD) { e[D[162][j]] = 41472 + j; d[41472 + j] = D[162][j];}\nD[163] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������!"#¥%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} ̄�\".split(\"\");\nfor(j = 0; j != D[163].length; ++j) if(D[163][j].charCodeAt(0) !== 0xFFFD) { e[D[163][j]] = 41728 + j; d[41728 + j] = D[163][j];}\nD[164] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん������������\".split(\"\");\nfor(j = 0; j != D[164].length; ++j) if(D[164][j].charCodeAt(0) !== 0xFFFD) { e[D[164][j]] = 41984 + j; d[41984 + j] = D[164][j];}\nD[165] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ���������\".split(\"\");\nfor(j = 0; j != D[165].length; ++j) if(D[165][j].charCodeAt(0) !== 0xFFFD) { e[D[165][j]] = 42240 + j; d[42240 + j] = D[165][j];}\nD[166] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ��������αβγδεζηθικλμνξοπρστυφχψω�������︵︶︹︺︿﹀︽︾﹁﹂﹃﹄��︻︼︷︸︱�︳︴����������\".split(\"\");\nfor(j = 0; j != D[166].length; ++j) if(D[166][j].charCodeAt(0) !== 0xFFFD) { e[D[166][j]] = 42496 + j; d[42496 + j] = D[166][j];}\nD[167] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ���������������абвгдеёжзийклмнопрстуфхцчшщъыьэюя��������������\".split(\"\");\nfor(j = 0; j != D[167].length; ++j) if(D[167][j].charCodeAt(0) !== 0xFFFD) { e[D[167][j]] = 42752 + j; d[42752 + j] = D[167][j];}\nD[168] = \"����������������������������������������������������������������ˊˋ˙–―‥‵℅℉↖↗↘↙∕∟∣≒≦≧⊿═║╒╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡╢╣╤╥╦╧╨╩╪╫╬╭╮╯╰╱╲╳▁▂▃▄▅▆▇�█▉▊▋▌▍▎▏▓▔▕▼▽◢◣◤◥☉⊕〒〝〞�����������āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜüêɑ�ńň�ɡ����ㄅㄆㄇㄈㄉㄊㄋㄌㄍㄎㄏㄐㄑㄒㄓㄔㄕㄖㄗㄘㄙㄚㄛㄜㄝㄞㄟㄠㄡㄢㄣㄤㄥㄦㄧㄨㄩ����������������������\".split(\"\");\nfor(j = 0; j != D[168].length; ++j) if(D[168][j].charCodeAt(0) !== 0xFFFD) { e[D[168][j]] = 43008 + j; d[43008 + j] = D[168][j];}\nD[169] = \"����������������������������������������������������������������〡〢〣〤〥〦〧〨〩㊣㎎㎏㎜㎝㎞㎡㏄㏎㏑㏒㏕︰¬¦�℡㈱�‐���ー゛゜ヽヾ〆ゝゞ﹉﹊﹋﹌﹍﹎﹏﹐﹑﹒﹔﹕﹖﹗﹙﹚﹛﹜﹝﹞﹟﹠﹡�﹢﹣﹤﹥﹦﹨﹩﹪﹫�������������〇�������������─━│┃┄┅┆┇┈┉┊┋┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁╂╃╄╅╆╇╈╉╊╋����������������\".split(\"\");\nfor(j = 0; j != D[169].length; ++j) if(D[169][j].charCodeAt(0) !== 0xFFFD) { e[D[169][j]] = 43264 + j; d[43264 + j] = D[169][j];}\nD[170] = \"����������������������������������������������������������������狜狝狟狢狣狤狥狦狧狪狫狵狶狹狽狾狿猀猂猄猅猆猇猈猉猋猌猍猏猐猑猒猔猘猙猚猟猠猣猤猦猧猨猭猯猰猲猳猵猶猺猻猼猽獀獁獂獃獄獅獆獇獈�獉獊獋獌獎獏獑獓獔獕獖獘獙獚獛獜獝獞獟獡獢獣獤獥獦獧獨獩獪獫獮獰獱�����������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[170].length; ++j) if(D[170][j].charCodeAt(0) !== 0xFFFD) { e[D[170][j]] = 43520 + j; d[43520 + j] = D[170][j];}\nD[171] = \"����������������������������������������������������������������獲獳獴獵獶獷獸獹獺獻獼獽獿玀玁玂玃玅玆玈玊玌玍玏玐玒玓玔玕玗玘玙玚玜玝玞玠玡玣玤玥玦玧玨玪玬玭玱玴玵玶玸玹玼玽玾玿珁珃珄珅珆珇�珋珌珎珒珓珔珕珖珗珘珚珛珜珝珟珡珢珣珤珦珨珪珫珬珮珯珰珱珳珴珵珶珷�����������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[171].length; ++j) if(D[171][j].charCodeAt(0) !== 0xFFFD) { e[D[171][j]] = 43776 + j; d[43776 + j] = D[171][j];}\nD[172] = \"����������������������������������������������������������������珸珹珺珻珼珽現珿琀琁琂琄琇琈琋琌琍琎琑琒琓琔琕琖琗琘琙琜琝琞琟琠琡琣琤琧琩琫琭琯琱琲琷琸琹琺琻琽琾琿瑀瑂瑃瑄瑅瑆瑇瑈瑉瑊瑋瑌瑍�瑎瑏瑐瑑瑒瑓瑔瑖瑘瑝瑠瑡瑢瑣瑤瑥瑦瑧瑨瑩瑪瑫瑬瑮瑯瑱瑲瑳瑴瑵瑸瑹瑺�����������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[172].length; ++j) if(D[172][j].charCodeAt(0) !== 0xFFFD) { e[D[172][j]] = 44032 + j; d[44032 + j] = D[172][j];}\nD[173] = \"����������������������������������������������������������������瑻瑼瑽瑿璂璄璅璆璈璉璊璌璍璏璑璒璓璔璕璖璗璘璙璚璛璝璟璠璡璢璣璤璥璦璪璫璬璭璮璯環璱璲璳璴璵璶璷璸璹璻璼璽璾璿瓀瓁瓂瓃瓄瓅瓆瓇�瓈瓉瓊瓋瓌瓍瓎瓏瓐瓑瓓瓔瓕瓖瓗瓘瓙瓚瓛瓝瓟瓡瓥瓧瓨瓩瓪瓫瓬瓭瓰瓱瓲�����������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[173].length; ++j) if(D[173][j].charCodeAt(0) !== 0xFFFD) { e[D[173][j]] = 44288 + j; d[44288 + j] = D[173][j];}\nD[174] = \"����������������������������������������������������������������瓳瓵瓸瓹瓺瓻瓼瓽瓾甀甁甂甃甅甆甇甈甉甊甋甌甎甐甒甔甕甖甗甛甝甞甠甡產産甤甦甧甪甮甴甶甹甼甽甿畁畂畃畄畆畇畉畊畍畐畑畒畓畕畖畗畘�畝畞畟畠畡畢畣畤畧畨畩畫畬畭畮畯異畱畳畵當畷畺畻畼畽畾疀疁疂疄疅疇�����������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[174].length; ++j) if(D[174][j].charCodeAt(0) !== 0xFFFD) { e[D[174][j]] = 44544 + j; d[44544 + j] = D[174][j];}\nD[175] = \"����������������������������������������������������������������疈疉疊疌疍疎疐疓疕疘疛疜疞疢疦疧疨疩疪疭疶疷疺疻疿痀痁痆痋痌痎痏痐痑痓痗痙痚痜痝痟痠痡痥痩痬痭痮痯痲痳痵痶痷痸痺痻痽痾瘂瘄瘆瘇�瘈瘉瘋瘍瘎瘏瘑瘒瘓瘔瘖瘚瘜瘝瘞瘡瘣瘧瘨瘬瘮瘯瘱瘲瘶瘷瘹瘺瘻瘽癁療癄�����������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[175].length; ++j) if(D[175][j].charCodeAt(0) !== 0xFFFD) { e[D[175][j]] = 44800 + j; d[44800 + j] = D[175][j];}\nD[176] = \"����������������������������������������������������������������癅癆癇癈癉癊癋癎癏癐癑癒癓癕癗癘癙癚癛癝癟癠癡癢癤癥癦癧癨癩癪癬癭癮癰癱癲癳癴癵癶癷癹発發癿皀皁皃皅皉皊皌皍皏皐皒皔皕皗皘皚皛�皜皝皞皟皠皡皢皣皥皦皧皨皩皪皫皬皭皯皰皳皵皶皷皸皹皺皻皼皽皾盀盁盃啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙坝霸罢爸白柏百摆佰败拜稗斑班搬扳般颁板版扮拌伴瓣半办绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞包褒剥�\".split(\"\");\nfor(j = 0; j != D[176].length; ++j) if(D[176][j].charCodeAt(0) !== 0xFFFD) { e[D[176][j]] = 45056 + j; d[45056 + j] = D[176][j];}\nD[177] = \"����������������������������������������������������������������盄盇盉盋盌盓盕盙盚盜盝盞盠盡盢監盤盦盧盨盩盪盫盬盭盰盳盵盶盷盺盻盽盿眀眂眃眅眆眊県眎眏眐眑眒眓眔眕眖眗眘眛眜眝眞眡眣眤眥眧眪眫�眬眮眰眱眲眳眴眹眻眽眾眿睂睄睅睆睈睉睊睋睌睍睎睏睒睓睔睕睖睗睘睙睜薄雹保堡饱宝抱报暴豹鲍爆杯碑悲卑北辈背贝钡倍狈备惫焙被奔苯本笨崩绷甭泵蹦迸逼鼻比鄙笔彼碧蓖蔽毕毙毖币庇痹闭敝弊必辟壁臂避陛鞭边编贬扁便变卞辨辩辫遍标彪膘表鳖憋别瘪彬斌濒滨宾摈兵冰柄丙秉饼炳�\".split(\"\");\nfor(j = 0; j != D[177].length; ++j) if(D[177][j].charCodeAt(0) !== 0xFFFD) { e[D[177][j]] = 45312 + j; d[45312 + j] = D[177][j];}\nD[178] = \"����������������������������������������������������������������睝睞睟睠睤睧睩睪睭睮睯睰睱睲睳睴睵睶睷睸睺睻睼瞁瞂瞃瞆瞇瞈瞉瞊瞋瞏瞐瞓瞔瞕瞖瞗瞘瞙瞚瞛瞜瞝瞞瞡瞣瞤瞦瞨瞫瞭瞮瞯瞱瞲瞴瞶瞷瞸瞹瞺�瞼瞾矀矁矂矃矄矅矆矇矈矉矊矋矌矎矏矐矑矒矓矔矕矖矘矙矚矝矞矟矠矡矤病并玻菠播拨钵波博勃搏铂箔伯帛舶脖膊渤泊驳捕卜哺补埠不布步簿部怖擦猜裁材才财睬踩采彩菜蔡餐参蚕残惭惨灿苍舱仓沧藏操糙槽曹草厕策侧册测层蹭插叉茬茶查碴搽察岔差诧拆柴豺搀掺蝉馋谗缠铲产阐颤昌猖�\".split(\"\");\nfor(j = 0; j != D[178].length; ++j) if(D[178][j].charCodeAt(0) !== 0xFFFD) { e[D[178][j]] = 45568 + j; d[45568 + j] = D[178][j];}\nD[179] = \"����������������������������������������������������������������矦矨矪矯矰矱矲矴矵矷矹矺矻矼砃砄砅砆砇砈砊砋砎砏砐砓砕砙砛砞砠砡砢砤砨砪砫砮砯砱砲砳砵砶砽砿硁硂硃硄硆硈硉硊硋硍硏硑硓硔硘硙硚�硛硜硞硟硠硡硢硣硤硥硦硧硨硩硯硰硱硲硳硴硵硶硸硹硺硻硽硾硿碀碁碂碃场尝常长偿肠厂敞畅唱倡超抄钞朝嘲潮巢吵炒车扯撤掣彻澈郴臣辰尘晨忱沉陈趁衬撑称城橙成呈乘程惩澄诚承逞骋秤吃痴持匙池迟弛驰耻齿侈尺赤翅斥炽充冲虫崇宠抽酬畴踌稠愁筹仇绸瞅丑臭初出橱厨躇锄雏滁除楚�\".split(\"\");\nfor(j = 0; j != D[179].length; ++j) if(D[179][j].charCodeAt(0) !== 0xFFFD) { e[D[179][j]] = 45824 + j; d[45824 + j] = D[179][j];}\nD[180] = \"����������������������������������������������������������������碄碅碆碈碊碋碏碐碒碔碕碖碙碝碞碠碢碤碦碨碩碪碫碬碭碮碯碵碶碷碸確碻碼碽碿磀磂磃磄磆磇磈磌磍磎磏磑磒磓磖磗磘磚磛磜磝磞磟磠磡磢磣�磤磥磦磧磩磪磫磭磮磯磰磱磳磵磶磸磹磻磼磽磾磿礀礂礃礄礆礇礈礉礊礋礌础储矗搐触处揣川穿椽传船喘串疮窗幢床闯创吹炊捶锤垂春椿醇唇淳纯蠢戳绰疵茨磁雌辞慈瓷词此刺赐次聪葱囱匆从丛凑粗醋簇促蹿篡窜摧崔催脆瘁粹淬翠村存寸磋撮搓措挫错搭达答瘩打大呆歹傣戴带殆代贷袋待逮�\".split(\"\");\nfor(j = 0; j != D[180].length; ++j) if(D[180][j].charCodeAt(0) !== 0xFFFD) { e[D[180][j]] = 46080 + j; d[46080 + j] = D[180][j];}\nD[181] = \"����������������������������������������������������������������礍礎礏礐礑礒礔礕礖礗礘礙礚礛礜礝礟礠礡礢礣礥礦礧礨礩礪礫礬礭礮礯礰礱礲礳礵礶礷礸礹礽礿祂祃祄祅祇祊祋祌祍祎祏祐祑祒祔祕祘祙祡祣�祤祦祩祪祫祬祮祰祱祲祳祴祵祶祹祻祼祽祾祿禂禃禆禇禈禉禋禌禍禎禐禑禒怠耽担丹单郸掸胆旦氮但惮淡诞弹蛋当挡党荡档刀捣蹈倒岛祷导到稻悼道盗德得的蹬灯登等瞪凳邓堤低滴迪敌笛狄涤翟嫡抵底地蒂第帝弟递缔颠掂滇碘点典靛垫电佃甸店惦奠淀殿碉叼雕凋刁掉吊钓调跌爹碟蝶迭谍叠�\".split(\"\");\nfor(j = 0; j != D[181].length; ++j) if(D[181][j].charCodeAt(0) !== 0xFFFD) { e[D[181][j]] = 46336 + j; d[46336 + j] = D[181][j];}\nD[182] = \"����������������������������������������������������������������禓禔禕禖禗禘禙禛禜禝禞禟禠禡禢禣禤禥禦禨禩禪禫禬禭禮禯禰禱禲禴禵禶禷禸禼禿秂秄秅秇秈秊秌秎秏秐秓秔秖秗秙秚秛秜秝秞秠秡秢秥秨秪�秬秮秱秲秳秴秵秶秷秹秺秼秾秿稁稄稅稇稈稉稊稌稏稐稑稒稓稕稖稘稙稛稜丁盯叮钉顶鼎锭定订丢东冬董懂动栋侗恫冻洞兜抖斗陡豆逗痘都督毒犊独读堵睹赌杜镀肚度渡妒端短锻段断缎堆兑队对墩吨蹲敦顿囤钝盾遁掇哆多夺垛躲朵跺舵剁惰堕蛾峨鹅俄额讹娥恶厄扼遏鄂饿恩而儿耳尔饵洱二�\".split(\"\");\nfor(j = 0; j != D[182].length; ++j) if(D[182][j].charCodeAt(0) !== 0xFFFD) { e[D[182][j]] = 46592 + j; d[46592 + j] = D[182][j];}\nD[183] = \"����������������������������������������������������������������稝稟稡稢稤稥稦稧稨稩稪稫稬稭種稯稰稱稲稴稵稶稸稺稾穀穁穂穃穄穅穇穈穉穊穋穌積穎穏穐穒穓穔穕穖穘穙穚穛穜穝穞穟穠穡穢穣穤穥穦穧穨�穩穪穫穬穭穮穯穱穲穳穵穻穼穽穾窂窅窇窉窊窋窌窎窏窐窓窔窙窚窛窞窡窢贰发罚筏伐乏阀法珐藩帆番翻樊矾钒繁凡烦反返范贩犯饭泛坊芳方肪房防妨仿访纺放菲非啡飞肥匪诽吠肺废沸费芬酚吩氛分纷坟焚汾粉奋份忿愤粪丰封枫蜂峰锋风疯烽逢冯缝讽奉凤佛否夫敷肤孵扶拂辐幅氟符伏俘服�\".split(\"\");\nfor(j = 0; j != D[183].length; ++j) if(D[183][j].charCodeAt(0) !== 0xFFFD) { e[D[183][j]] = 46848 + j; d[46848 + j] = D[183][j];}\nD[184] = \"����������������������������������������������������������������窣窤窧窩窪窫窮窯窰窱窲窴窵窶窷窸窹窺窻窼窽窾竀竁竂竃竄竅竆竇竈竉竊竌竍竎竏竐竑竒竓竔竕竗竘竚竛竜竝竡竢竤竧竨竩竪竫竬竮竰竱竲竳�竴竵競竷竸竻竼竾笀笁笂笅笇笉笌笍笎笐笒笓笖笗笘笚笜笝笟笡笢笣笧笩笭浮涪福袱弗甫抚辅俯釜斧脯腑府腐赴副覆赋复傅付阜父腹负富讣附妇缚咐噶嘎该改概钙盖溉干甘杆柑竿肝赶感秆敢赣冈刚钢缸肛纲岗港杠篙皋高膏羔糕搞镐稿告哥歌搁戈鸽胳疙割革葛格蛤阁隔铬个各给根跟耕更庚羹�\".split(\"\");\nfor(j = 0; j != D[184].length; ++j) if(D[184][j].charCodeAt(0) !== 0xFFFD) { e[D[184][j]] = 47104 + j; d[47104 + j] = D[184][j];}\nD[185] = \"����������������������������������������������������������������笯笰笲笴笵笶笷笹笻笽笿筀筁筂筃筄筆筈筊筍筎筓筕筗筙筜筞筟筡筣筤筥筦筧筨筩筪筫筬筭筯筰筳筴筶筸筺筼筽筿箁箂箃箄箆箇箈箉箊箋箌箎箏�箑箒箓箖箘箙箚箛箞箟箠箣箤箥箮箯箰箲箳箵箶箷箹箺箻箼箽箾箿節篂篃範埂耿梗工攻功恭龚供躬公宫弓巩汞拱贡共钩勾沟苟狗垢构购够辜菇咕箍估沽孤姑鼓古蛊骨谷股故顾固雇刮瓜剐寡挂褂乖拐怪棺关官冠观管馆罐惯灌贯光广逛瑰规圭硅归龟闺轨鬼诡癸桂柜跪贵刽辊滚棍锅郭国果裹过哈�\".split(\"\");\nfor(j = 0; j != D[185].length; ++j) if(D[185][j].charCodeAt(0) !== 0xFFFD) { e[D[185][j]] = 47360 + j; d[47360 + j] = D[185][j];}\nD[186] = \"����������������������������������������������������������������篅篈築篊篋篍篎篏篐篒篔篕篖篗篘篛篜篞篟篠篢篣篤篧篨篩篫篬篭篯篰篲篳篴篵篶篸篹篺篻篽篿簀簁簂簃簄簅簆簈簉簊簍簎簐簑簒簓簔簕簗簘簙�簚簛簜簝簞簠簡簢簣簤簥簨簩簫簬簭簮簯簰簱簲簳簴簵簶簷簹簺簻簼簽簾籂骸孩海氦亥害骇酣憨邯韩含涵寒函喊罕翰撼捍旱憾悍焊汗汉夯杭航壕嚎豪毫郝好耗号浩呵喝荷菏核禾和何合盒貉阂河涸赫褐鹤贺嘿黑痕很狠恨哼亨横衡恒轰哄烘虹鸿洪宏弘红喉侯猴吼厚候后呼乎忽瑚壶葫胡蝴狐糊湖�\".split(\"\");\nfor(j = 0; j != D[186].length; ++j) if(D[186][j].charCodeAt(0) !== 0xFFFD) { e[D[186][j]] = 47616 + j; d[47616 + j] = D[186][j];}\nD[187] = \"����������������������������������������������������������������籃籄籅籆籇籈籉籊籋籌籎籏籐籑籒籓籔籕籖籗籘籙籚籛籜籝籞籟籠籡籢籣籤籥籦籧籨籩籪籫籬籭籮籯籰籱籲籵籶籷籸籹籺籾籿粀粁粂粃粄粅粆粇�粈粊粋粌粍粎粏粐粓粔粖粙粚粛粠粡粣粦粧粨粩粫粬粭粯粰粴粵粶粷粸粺粻弧虎唬护互沪户花哗华猾滑画划化话槐徊怀淮坏欢环桓还缓换患唤痪豢焕涣宦幻荒慌黄磺蝗簧皇凰惶煌晃幌恍谎灰挥辉徽恢蛔回毁悔慧卉惠晦贿秽会烩汇讳诲绘荤昏婚魂浑混豁活伙火获或惑霍货祸击圾基机畸稽积箕�\".split(\"\");\nfor(j = 0; j != D[187].length; ++j) if(D[187][j].charCodeAt(0) !== 0xFFFD) { e[D[187][j]] = 47872 + j; d[47872 + j] = D[187][j];}\nD[188] = \"����������������������������������������������������������������粿糀糂糃糄糆糉糋糎糏糐糑糒糓糔糘糚糛糝糞糡糢糣糤糥糦糧糩糪糫糬糭糮糰糱糲糳糴糵糶糷糹糺糼糽糾糿紀紁紂紃約紅紆紇紈紉紋紌納紎紏紐�紑紒紓純紕紖紗紘紙級紛紜紝紞紟紡紣紤紥紦紨紩紪紬紭紮細紱紲紳紴紵紶肌饥迹激讥鸡姬绩缉吉极棘辑籍集及急疾汲即嫉级挤几脊己蓟技冀季伎祭剂悸济寄寂计记既忌际妓继纪嘉枷夹佳家加荚颊贾甲钾假稼价架驾嫁歼监坚尖笺间煎兼肩艰奸缄茧检柬碱硷拣捡简俭剪减荐槛鉴践贱见键箭件�\".split(\"\");\nfor(j = 0; j != D[188].length; ++j) if(D[188][j].charCodeAt(0) !== 0xFFFD) { e[D[188][j]] = 48128 + j; d[48128 + j] = D[188][j];}\nD[189] = \"����������������������������������������������������������������紷紸紹紺紻紼紽紾紿絀絁終絃組絅絆絇絈絉絊絋経絍絎絏結絑絒絓絔絕絖絗絘絙絚絛絜絝絞絟絠絡絢絣絤絥給絧絨絩絪絫絬絭絯絰統絲絳絴絵絶�絸絹絺絻絼絽絾絿綀綁綂綃綄綅綆綇綈綉綊綋綌綍綎綏綐綑綒經綔綕綖綗綘健舰剑饯渐溅涧建僵姜将浆江疆蒋桨奖讲匠酱降蕉椒礁焦胶交郊浇骄娇嚼搅铰矫侥脚狡角饺缴绞剿教酵轿较叫窖揭接皆秸街阶截劫节桔杰捷睫竭洁结解姐戒藉芥界借介疥诫届巾筋斤金今津襟紧锦仅谨进靳晋禁近烬浸�\".split(\"\");\nfor(j = 0; j != D[189].length; ++j) if(D[189][j].charCodeAt(0) !== 0xFFFD) { e[D[189][j]] = 48384 + j; d[48384 + j] = D[189][j];}\nD[190] = \"����������������������������������������������������������������継続綛綜綝綞綟綠綡綢綣綤綥綧綨綩綪綫綬維綯綰綱網綳綴綵綶綷綸綹綺綻綼綽綾綿緀緁緂緃緄緅緆緇緈緉緊緋緌緍緎総緐緑緒緓緔緕緖緗緘緙�線緛緜緝緞緟締緡緢緣緤緥緦緧編緩緪緫緬緭緮緯緰緱緲緳練緵緶緷緸緹緺尽劲荆兢茎睛晶鲸京惊精粳经井警景颈静境敬镜径痉靖竟竞净炯窘揪究纠玖韭久灸九酒厩救旧臼舅咎就疚鞠拘狙疽居驹菊局咀矩举沮聚拒据巨具距踞锯俱句惧炬剧捐鹃娟倦眷卷绢撅攫抉掘倔爵觉决诀绝均菌钧军君峻�\".split(\"\");\nfor(j = 0; j != D[190].length; ++j) if(D[190][j].charCodeAt(0) !== 0xFFFD) { e[D[190][j]] = 48640 + j; d[48640 + j] = D[190][j];}\nD[191] = \"����������������������������������������������������������������緻緼緽緾緿縀縁縂縃縄縅縆縇縈縉縊縋縌縍縎縏縐縑縒縓縔縕縖縗縘縙縚縛縜縝縞縟縠縡縢縣縤縥縦縧縨縩縪縫縬縭縮縯縰縱縲縳縴縵縶縷縸縹�縺縼總績縿繀繂繃繄繅繆繈繉繊繋繌繍繎繏繐繑繒繓織繕繖繗繘繙繚繛繜繝俊竣浚郡骏喀咖卡咯开揩楷凯慨刊堪勘坎砍看康慷糠扛抗亢炕考拷烤靠坷苛柯棵磕颗科壳咳可渴克刻客课肯啃垦恳坑吭空恐孔控抠口扣寇枯哭窟苦酷库裤夸垮挎跨胯块筷侩快宽款匡筐狂框矿眶旷况亏盔岿窥葵奎魁傀�\".split(\"\");\nfor(j = 0; j != D[191].length; ++j) if(D[191][j].charCodeAt(0) !== 0xFFFD) { e[D[191][j]] = 48896 + j; d[48896 + j] = D[191][j];}\nD[192] = \"����������������������������������������������������������������繞繟繠繡繢繣繤繥繦繧繨繩繪繫繬繭繮繯繰繱繲繳繴繵繶繷繸繹繺繻繼繽繾繿纀纁纃纄纅纆纇纈纉纊纋續纍纎纏纐纑纒纓纔纕纖纗纘纙纚纜纝纞�纮纴纻纼绖绤绬绹缊缐缞缷缹缻缼缽缾缿罀罁罃罆罇罈罉罊罋罌罍罎罏罒罓馈愧溃坤昆捆困括扩廓阔垃拉喇蜡腊辣啦莱来赖蓝婪栏拦篮阑兰澜谰揽览懒缆烂滥琅榔狼廊郎朗浪捞劳牢老佬姥酪烙涝勒乐雷镭蕾磊累儡垒擂肋类泪棱楞冷厘梨犁黎篱狸离漓理李里鲤礼莉荔吏栗丽厉励砾历利傈例俐�\".split(\"\");\nfor(j = 0; j != D[192].length; ++j) if(D[192][j].charCodeAt(0) !== 0xFFFD) { e[D[192][j]] = 49152 + j; d[49152 + j] = D[192][j];}\nD[193] = \"����������������������������������������������������������������罖罙罛罜罝罞罠罣罤罥罦罧罫罬罭罯罰罳罵罶罷罸罺罻罼罽罿羀羂羃羄羅羆羇羈羉羋羍羏羐羑羒羓羕羖羗羘羙羛羜羠羢羣羥羦羨義羪羫羬羭羮羱�羳羴羵羶羷羺羻羾翀翂翃翄翆翇翈翉翋翍翏翐翑習翓翖翗翙翚翛翜翝翞翢翣痢立粒沥隶力璃哩俩联莲连镰廉怜涟帘敛脸链恋炼练粮凉梁粱良两辆量晾亮谅撩聊僚疗燎寥辽潦了撂镣廖料列裂烈劣猎琳林磷霖临邻鳞淋凛赁吝拎玲菱零龄铃伶羚凌灵陵岭领另令溜琉榴硫馏留刘瘤流柳六龙聋咙笼窿�\".split(\"\");\nfor(j = 0; j != D[193].length; ++j) if(D[193][j].charCodeAt(0) !== 0xFFFD) { e[D[193][j]] = 49408 + j; d[49408 + j] = D[193][j];}\nD[194] = \"����������������������������������������������������������������翤翧翨翪翫翬翭翯翲翴翵翶翷翸翹翺翽翾翿耂耇耈耉耊耎耏耑耓耚耛耝耞耟耡耣耤耫耬耭耮耯耰耲耴耹耺耼耾聀聁聄聅聇聈聉聎聏聐聑聓聕聖聗�聙聛聜聝聞聟聠聡聢聣聤聥聦聧聨聫聬聭聮聯聰聲聳聴聵聶職聸聹聺聻聼聽隆垄拢陇楼娄搂篓漏陋芦卢颅庐炉掳卤虏鲁麓碌露路赂鹿潞禄录陆戮驴吕铝侣旅履屡缕虑氯律率滤绿峦挛孪滦卵乱掠略抡轮伦仑沦纶论萝螺罗逻锣箩骡裸落洛骆络妈麻玛码蚂马骂嘛吗埋买麦卖迈脉瞒馒蛮满蔓曼慢漫�\".split(\"\");\nfor(j = 0; j != D[194].length; ++j) if(D[194][j].charCodeAt(0) !== 0xFFFD) { e[D[194][j]] = 49664 + j; d[49664 + j] = D[194][j];}\nD[195] = \"����������������������������������������������������������������聾肁肂肅肈肊肍肎肏肐肑肒肔肕肗肙肞肣肦肧肨肬肰肳肵肶肸肹肻胅胇胈胉胊胋胏胐胑胒胓胔胕胘胟胠胢胣胦胮胵胷胹胻胾胿脀脁脃脄脅脇脈脋�脌脕脗脙脛脜脝脟脠脡脢脣脤脥脦脧脨脩脪脫脭脮脰脳脴脵脷脹脺脻脼脽脿谩芒茫盲氓忙莽猫茅锚毛矛铆卯茂冒帽貌贸么玫枚梅酶霉煤没眉媒镁每美昧寐妹媚门闷们萌蒙檬盟锰猛梦孟眯醚靡糜迷谜弥米秘觅泌蜜密幂棉眠绵冕免勉娩缅面苗描瞄藐秒渺庙妙蔑灭民抿皿敏悯闽明螟鸣铭名命谬摸�\".split(\"\");\nfor(j = 0; j != D[195].length; ++j) if(D[195][j].charCodeAt(0) !== 0xFFFD) { e[D[195][j]] = 49920 + j; d[49920 + j] = D[195][j];}\nD[196] = \"����������������������������������������������������������������腀腁腂腃腄腅腇腉腍腎腏腒腖腗腘腛腜腝腞腟腡腢腣腤腦腨腪腫腬腯腲腳腵腶腷腸膁膃膄膅膆膇膉膋膌膍膎膐膒膓膔膕膖膗膙膚膞膟膠膡膢膤膥�膧膩膫膬膭膮膯膰膱膲膴膵膶膷膸膹膼膽膾膿臄臅臇臈臉臋臍臎臏臐臑臒臓摹蘑模膜磨摩魔抹末莫墨默沫漠寞陌谋牟某拇牡亩姆母墓暮幕募慕木目睦牧穆拿哪呐钠那娜纳氖乃奶耐奈南男难囊挠脑恼闹淖呢馁内嫩能妮霓倪泥尼拟你匿腻逆溺蔫拈年碾撵捻念娘酿鸟尿捏聂孽啮镊镍涅您柠狞凝宁�\".split(\"\");\nfor(j = 0; j != D[196].length; ++j) if(D[196][j].charCodeAt(0) !== 0xFFFD) { e[D[196][j]] = 50176 + j; d[50176 + j] = D[196][j];}\nD[197] = \"����������������������������������������������������������������臔臕臖臗臘臙臚臛臜臝臞臟臠臡臢臤臥臦臨臩臫臮臯臰臱臲臵臶臷臸臹臺臽臿舃與興舉舊舋舎舏舑舓舕舖舗舘舙舚舝舠舤舥舦舧舩舮舲舺舼舽舿�艀艁艂艃艅艆艈艊艌艍艎艐艑艒艓艔艕艖艗艙艛艜艝艞艠艡艢艣艤艥艦艧艩拧泞牛扭钮纽脓浓农弄奴努怒女暖虐疟挪懦糯诺哦欧鸥殴藕呕偶沤啪趴爬帕怕琶拍排牌徘湃派攀潘盘磐盼畔判叛乓庞旁耪胖抛咆刨炮袍跑泡呸胚培裴赔陪配佩沛喷盆砰抨烹澎彭蓬棚硼篷膨朋鹏捧碰坯砒霹批披劈琵毗�\".split(\"\");\nfor(j = 0; j != D[197].length; ++j) if(D[197][j].charCodeAt(0) !== 0xFFFD) { e[D[197][j]] = 50432 + j; d[50432 + j] = D[197][j];}\nD[198] = \"����������������������������������������������������������������艪艫艬艭艱艵艶艷艸艻艼芀芁芃芅芆芇芉芌芐芓芔芕芖芚芛芞芠芢芣芧芲芵芶芺芻芼芿苀苂苃苅苆苉苐苖苙苚苝苢苧苨苩苪苬苭苮苰苲苳苵苶苸�苺苼苽苾苿茀茊茋茍茐茒茓茖茘茙茝茞茟茠茡茢茣茤茥茦茩茪茮茰茲茷茻茽啤脾疲皮匹痞僻屁譬篇偏片骗飘漂瓢票撇瞥拼频贫品聘乒坪苹萍平凭瓶评屏坡泼颇婆破魄迫粕剖扑铺仆莆葡菩蒲埔朴圃普浦谱曝瀑期欺栖戚妻七凄漆柒沏其棋奇歧畦崎脐齐旗祈祁骑起岂乞企启契砌器气迄弃汽泣讫掐�\".split(\"\");\nfor(j = 0; j != D[198].length; ++j) if(D[198][j].charCodeAt(0) !== 0xFFFD) { e[D[198][j]] = 50688 + j; d[50688 + j] = D[198][j];}\nD[199] = \"����������������������������������������������������������������茾茿荁荂荄荅荈荊荋荌荍荎荓荕荖荗荘荙荝荢荰荱荲荳荴荵荶荹荺荾荿莀莁莂莃莄莇莈莊莋莌莍莏莐莑莔莕莖莗莙莚莝莟莡莢莣莤莥莦莧莬莭莮�莯莵莻莾莿菂菃菄菆菈菉菋菍菎菐菑菒菓菕菗菙菚菛菞菢菣菤菦菧菨菫菬菭恰洽牵扦钎铅千迁签仟谦乾黔钱钳前潜遣浅谴堑嵌欠歉枪呛腔羌墙蔷强抢橇锹敲悄桥瞧乔侨巧鞘撬翘峭俏窍切茄且怯窃钦侵亲秦琴勤芹擒禽寝沁青轻氢倾卿清擎晴氰情顷请庆琼穷秋丘邱球求囚酋泅趋区蛆曲躯屈驱渠�\".split(\"\");\nfor(j = 0; j != D[199].length; ++j) if(D[199][j].charCodeAt(0) !== 0xFFFD) { e[D[199][j]] = 50944 + j; d[50944 + j] = D[199][j];}\nD[200] = \"����������������������������������������������������������������菮華菳菴菵菶菷菺菻菼菾菿萀萂萅萇萈萉萊萐萒萓萔萕萖萗萙萚萛萞萟萠萡萢萣萩萪萫萬萭萮萯萰萲萳萴萵萶萷萹萺萻萾萿葀葁葂葃葄葅葇葈葉�葊葋葌葍葎葏葐葒葓葔葕葖葘葝葞葟葠葢葤葥葦葧葨葪葮葯葰葲葴葷葹葻葼取娶龋趣去圈颧权醛泉全痊拳犬券劝缺炔瘸却鹊榷确雀裙群然燃冉染瓤壤攘嚷让饶扰绕惹热壬仁人忍韧任认刃妊纫扔仍日戎茸蓉荣融熔溶容绒冗揉柔肉茹蠕儒孺如辱乳汝入褥软阮蕊瑞锐闰润若弱撒洒萨腮鳃塞赛三叁�\".split(\"\");\nfor(j = 0; j != D[200].length; ++j) if(D[200][j].charCodeAt(0) !== 0xFFFD) { e[D[200][j]] = 51200 + j; d[51200 + j] = D[200][j];}\nD[201] = \"����������������������������������������������������������������葽葾葿蒀蒁蒃蒄蒅蒆蒊蒍蒏蒐蒑蒒蒓蒔蒕蒖蒘蒚蒛蒝蒞蒟蒠蒢蒣蒤蒥蒦蒧蒨蒩蒪蒫蒬蒭蒮蒰蒱蒳蒵蒶蒷蒻蒼蒾蓀蓂蓃蓅蓆蓇蓈蓋蓌蓎蓏蓒蓔蓕蓗�蓘蓙蓚蓛蓜蓞蓡蓢蓤蓧蓨蓩蓪蓫蓭蓮蓯蓱蓲蓳蓴蓵蓶蓷蓸蓹蓺蓻蓽蓾蔀蔁蔂伞散桑嗓丧搔骚扫嫂瑟色涩森僧莎砂杀刹沙纱傻啥煞筛晒珊苫杉山删煽衫闪陕擅赡膳善汕扇缮墒伤商赏晌上尚裳梢捎稍烧芍勺韶少哨邵绍奢赊蛇舌舍赦摄射慑涉社设砷申呻伸身深娠绅神沈审婶甚肾慎渗声生甥牲升绳�\".split(\"\");\nfor(j = 0; j != D[201].length; ++j) if(D[201][j].charCodeAt(0) !== 0xFFFD) { e[D[201][j]] = 51456 + j; d[51456 + j] = D[201][j];}\nD[202] = \"����������������������������������������������������������������蔃蔄蔅蔆蔇蔈蔉蔊蔋蔍蔎蔏蔐蔒蔔蔕蔖蔘蔙蔛蔜蔝蔞蔠蔢蔣蔤蔥蔦蔧蔨蔩蔪蔭蔮蔯蔰蔱蔲蔳蔴蔵蔶蔾蔿蕀蕁蕂蕄蕅蕆蕇蕋蕌蕍蕎蕏蕐蕑蕒蕓蕔蕕�蕗蕘蕚蕛蕜蕝蕟蕠蕡蕢蕣蕥蕦蕧蕩蕪蕫蕬蕭蕮蕯蕰蕱蕳蕵蕶蕷蕸蕼蕽蕿薀薁省盛剩胜圣师失狮施湿诗尸虱十石拾时什食蚀实识史矢使屎驶始式示士世柿事拭誓逝势是嗜噬适仕侍释饰氏市恃室视试收手首守寿授售受瘦兽蔬枢梳殊抒输叔舒淑疏书赎孰熟薯暑曙署蜀黍鼠属术述树束戍竖墅庶数漱�\".split(\"\");\nfor(j = 0; j != D[202].length; ++j) if(D[202][j].charCodeAt(0) !== 0xFFFD) { e[D[202][j]] = 51712 + j; d[51712 + j] = D[202][j];}\nD[203] = \"����������������������������������������������������������������薂薃薆薈薉薊薋薌薍薎薐薑薒薓薔薕薖薗薘薙薚薝薞薟薠薡薢薣薥薦薧薩薫薬薭薱薲薳薴薵薶薸薺薻薼薽薾薿藀藂藃藄藅藆藇藈藊藋藌藍藎藑藒�藔藖藗藘藙藚藛藝藞藟藠藡藢藣藥藦藧藨藪藫藬藭藮藯藰藱藲藳藴藵藶藷藸恕刷耍摔衰甩帅栓拴霜双爽谁水睡税吮瞬顺舜说硕朔烁斯撕嘶思私司丝死肆寺嗣四伺似饲巳松耸怂颂送宋讼诵搜艘擞嗽苏酥俗素速粟僳塑溯宿诉肃酸蒜算虽隋随绥髓碎岁穗遂隧祟孙损笋蓑梭唆缩琐索锁所塌他它她塔�\".split(\"\");\nfor(j = 0; j != D[203].length; ++j) if(D[203][j].charCodeAt(0) !== 0xFFFD) { e[D[203][j]] = 51968 + j; d[51968 + j] = D[203][j];}\nD[204] = \"����������������������������������������������������������������藹藺藼藽藾蘀蘁蘂蘃蘄蘆蘇蘈蘉蘊蘋蘌蘍蘎蘏蘐蘒蘓蘔蘕蘗蘘蘙蘚蘛蘜蘝蘞蘟蘠蘡蘢蘣蘤蘥蘦蘨蘪蘫蘬蘭蘮蘯蘰蘱蘲蘳蘴蘵蘶蘷蘹蘺蘻蘽蘾蘿虀�虁虂虃虄虅虆虇虈虉虊虋虌虒虓處虖虗虘虙虛虜虝號虠虡虣虤虥虦虧虨虩虪獭挞蹋踏胎苔抬台泰酞太态汰坍摊贪瘫滩坛檀痰潭谭谈坦毯袒碳探叹炭汤塘搪堂棠膛唐糖倘躺淌趟烫掏涛滔绦萄桃逃淘陶讨套特藤腾疼誊梯剔踢锑提题蹄啼体替嚏惕涕剃屉天添填田甜恬舔腆挑条迢眺跳贴铁帖厅听烃�\".split(\"\");\nfor(j = 0; j != D[204].length; ++j) if(D[204][j].charCodeAt(0) !== 0xFFFD) { e[D[204][j]] = 52224 + j; d[52224 + j] = D[204][j];}\nD[205] = \"����������������������������������������������������������������虭虯虰虲虳虴虵虶虷虸蚃蚄蚅蚆蚇蚈蚉蚎蚏蚐蚑蚒蚔蚖蚗蚘蚙蚚蚛蚞蚟蚠蚡蚢蚥蚦蚫蚭蚮蚲蚳蚷蚸蚹蚻蚼蚽蚾蚿蛁蛂蛃蛅蛈蛌蛍蛒蛓蛕蛖蛗蛚蛜�蛝蛠蛡蛢蛣蛥蛦蛧蛨蛪蛫蛬蛯蛵蛶蛷蛺蛻蛼蛽蛿蜁蜄蜅蜆蜋蜌蜎蜏蜐蜑蜔蜖汀廷停亭庭挺艇通桐酮瞳同铜彤童桶捅筒统痛偷投头透凸秃突图徒途涂屠土吐兔湍团推颓腿蜕褪退吞屯臀拖托脱鸵陀驮驼椭妥拓唾挖哇蛙洼娃瓦袜歪外豌弯湾玩顽丸烷完碗挽晚皖惋宛婉万腕汪王亡枉网往旺望忘妄威�\".split(\"\");\nfor(j = 0; j != D[205].length; ++j) if(D[205][j].charCodeAt(0) !== 0xFFFD) { e[D[205][j]] = 52480 + j; d[52480 + j] = D[205][j];}\nD[206] = \"����������������������������������������������������������������蜙蜛蜝蜟蜠蜤蜦蜧蜨蜪蜫蜬蜭蜯蜰蜲蜳蜵蜶蜸蜹蜺蜼蜽蝀蝁蝂蝃蝄蝅蝆蝊蝋蝍蝏蝐蝑蝒蝔蝕蝖蝘蝚蝛蝜蝝蝞蝟蝡蝢蝦蝧蝨蝩蝪蝫蝬蝭蝯蝱蝲蝳蝵�蝷蝸蝹蝺蝿螀螁螄螆螇螉螊螌螎螏螐螑螒螔螕螖螘螙螚螛螜螝螞螠螡螢螣螤巍微危韦违桅围唯惟为潍维苇萎委伟伪尾纬未蔚味畏胃喂魏位渭谓尉慰卫瘟温蚊文闻纹吻稳紊问嗡翁瓮挝蜗涡窝我斡卧握沃巫呜钨乌污诬屋无芜梧吾吴毋武五捂午舞伍侮坞戊雾晤物勿务悟误昔熙析西硒矽晰嘻吸锡牺�\".split(\"\");\nfor(j = 0; j != D[206].length; ++j) if(D[206][j].charCodeAt(0) !== 0xFFFD) { e[D[206][j]] = 52736 + j; d[52736 + j] = D[206][j];}\nD[207] = \"����������������������������������������������������������������螥螦螧螩螪螮螰螱螲螴螶螷螸螹螻螼螾螿蟁蟂蟃蟄蟅蟇蟈蟉蟌蟍蟎蟏蟐蟔蟕蟖蟗蟘蟙蟚蟜蟝蟞蟟蟡蟢蟣蟤蟦蟧蟨蟩蟫蟬蟭蟯蟰蟱蟲蟳蟴蟵蟶蟷蟸�蟺蟻蟼蟽蟿蠀蠁蠂蠄蠅蠆蠇蠈蠉蠋蠌蠍蠎蠏蠐蠑蠒蠔蠗蠘蠙蠚蠜蠝蠞蠟蠠蠣稀息希悉膝夕惜熄烯溪汐犀檄袭席习媳喜铣洗系隙戏细瞎虾匣霞辖暇峡侠狭下厦夏吓掀锨先仙鲜纤咸贤衔舷闲涎弦嫌显险现献县腺馅羡宪陷限线相厢镶香箱襄湘乡翔祥详想响享项巷橡像向象萧硝霄削哮嚣销消宵淆晓�\".split(\"\");\nfor(j = 0; j != D[207].length; ++j) if(D[207][j].charCodeAt(0) !== 0xFFFD) { e[D[207][j]] = 52992 + j; d[52992 + j] = D[207][j];}\nD[208] = \"����������������������������������������������������������������蠤蠥蠦蠧蠨蠩蠪蠫蠬蠭蠮蠯蠰蠱蠳蠴蠵蠶蠷蠸蠺蠻蠽蠾蠿衁衂衃衆衇衈衉衊衋衎衏衐衑衒術衕衖衘衚衛衜衝衞衟衠衦衧衪衭衯衱衳衴衵衶衸衹衺�衻衼袀袃袆袇袉袊袌袎袏袐袑袓袔袕袗袘袙袚袛袝袞袟袠袡袣袥袦袧袨袩袪小孝校肖啸笑效楔些歇蝎鞋协挟携邪斜胁谐写械卸蟹懈泄泻谢屑薪芯锌欣辛新忻心信衅星腥猩惺兴刑型形邢行醒幸杏性姓兄凶胸匈汹雄熊休修羞朽嗅锈秀袖绣墟戌需虚嘘须徐许蓄酗叙旭序畜恤絮婿绪续轩喧宣悬旋玄�\".split(\"\");\nfor(j = 0; j != D[208].length; ++j) if(D[208][j].charCodeAt(0) !== 0xFFFD) { e[D[208][j]] = 53248 + j; d[53248 + j] = D[208][j];}\nD[209] = \"����������������������������������������������������������������袬袮袯袰袲袳袴袵袶袸袹袺袻袽袾袿裀裃裄裇裈裊裋裌裍裏裐裑裓裖裗裚裛補裝裞裠裡裦裧裩裪裫裬裭裮裯裲裵裶裷裺裻製裿褀褁褃褄褅褆複褈�褉褋褌褍褎褏褑褔褕褖褗褘褜褝褞褟褠褢褣褤褦褧褨褩褬褭褮褯褱褲褳褵褷选癣眩绚靴薛学穴雪血勋熏循旬询寻驯巡殉汛训讯逊迅压押鸦鸭呀丫芽牙蚜崖衙涯雅哑亚讶焉咽阉烟淹盐严研蜒岩延言颜阎炎沿奄掩眼衍演艳堰燕厌砚雁唁彦焰宴谚验殃央鸯秧杨扬佯疡羊洋阳氧仰痒养样漾邀腰妖瑶�\".split(\"\");\nfor(j = 0; j != D[209].length; ++j) if(D[209][j].charCodeAt(0) !== 0xFFFD) { e[D[209][j]] = 53504 + j; d[53504 + j] = D[209][j];}\nD[210] = \"����������������������������������������������������������������褸褹褺褻褼褽褾褿襀襂襃襅襆襇襈襉襊襋襌襍襎襏襐襑襒襓襔襕襖襗襘襙襚襛襜襝襠襡襢襣襤襥襧襨襩襪襫襬襭襮襯襰襱襲襳襴襵襶襷襸襹襺襼�襽襾覀覂覄覅覇覈覉覊見覌覍覎規覐覑覒覓覔覕視覗覘覙覚覛覜覝覞覟覠覡摇尧遥窑谣姚咬舀药要耀椰噎耶爷野冶也页掖业叶曳腋夜液一壹医揖铱依伊衣颐夷遗移仪胰疑沂宜姨彝椅蚁倚已乙矣以艺抑易邑屹亿役臆逸肄疫亦裔意毅忆义益溢诣议谊译异翼翌绎茵荫因殷音阴姻吟银淫寅饮尹引隐�\".split(\"\");\nfor(j = 0; j != D[210].length; ++j) if(D[210][j].charCodeAt(0) !== 0xFFFD) { e[D[210][j]] = 53760 + j; d[53760 + j] = D[210][j];}\nD[211] = \"����������������������������������������������������������������覢覣覤覥覦覧覨覩親覫覬覭覮覯覰覱覲観覴覵覶覷覸覹覺覻覼覽覾覿觀觃觍觓觔觕觗觘觙觛觝觟觠觡觢觤觧觨觩觪觬觭觮觰觱觲觴觵觶觷觸觹觺�觻觼觽觾觿訁訂訃訄訅訆計訉訊訋訌訍討訏訐訑訒訓訔訕訖託記訙訚訛訜訝印英樱婴鹰应缨莹萤营荧蝇迎赢盈影颖硬映哟拥佣臃痈庸雍踊蛹咏泳涌永恿勇用幽优悠忧尤由邮铀犹油游酉有友右佑釉诱又幼迂淤于盂榆虞愚舆余俞逾鱼愉渝渔隅予娱雨与屿禹宇语羽玉域芋郁吁遇喻峪御愈欲狱育誉�\".split(\"\");\nfor(j = 0; j != D[211].length; ++j) if(D[211][j].charCodeAt(0) !== 0xFFFD) { e[D[211][j]] = 54016 + j; d[54016 + j] = D[211][j];}\nD[212] = \"����������������������������������������������������������������訞訟訠訡訢訣訤訥訦訧訨訩訪訫訬設訮訯訰許訲訳訴訵訶訷訸訹診註証訽訿詀詁詂詃詄詅詆詇詉詊詋詌詍詎詏詐詑詒詓詔評詖詗詘詙詚詛詜詝詞�詟詠詡詢詣詤詥試詧詨詩詪詫詬詭詮詯詰話該詳詴詵詶詷詸詺詻詼詽詾詿誀浴寓裕预豫驭鸳渊冤元垣袁原援辕园员圆猿源缘远苑愿怨院曰约越跃钥岳粤月悦阅耘云郧匀陨允运蕴酝晕韵孕匝砸杂栽哉灾宰载再在咱攒暂赞赃脏葬遭糟凿藻枣早澡蚤躁噪造皂灶燥责择则泽贼怎增憎曾赠扎喳渣札轧�\".split(\"\");\nfor(j = 0; j != D[212].length; ++j) if(D[212][j].charCodeAt(0) !== 0xFFFD) { e[D[212][j]] = 54272 + j; d[54272 + j] = D[212][j];}\nD[213] = \"����������������������������������������������������������������誁誂誃誄誅誆誇誈誋誌認誎誏誐誑誒誔誕誖誗誘誙誚誛誜誝語誟誠誡誢誣誤誥誦誧誨誩說誫説読誮誯誰誱課誳誴誵誶誷誸誹誺誻誼誽誾調諀諁諂�諃諄諅諆談諈諉諊請諌諍諎諏諐諑諒諓諔諕論諗諘諙諚諛諜諝諞諟諠諡諢諣铡闸眨栅榨咋乍炸诈摘斋宅窄债寨瞻毡詹粘沾盏斩辗崭展蘸栈占战站湛绽樟章彰漳张掌涨杖丈帐账仗胀瘴障招昭找沼赵照罩兆肇召遮折哲蛰辙者锗蔗这浙珍斟真甄砧臻贞针侦枕疹诊震振镇阵蒸挣睁征狰争怔整拯正政�\".split(\"\");\nfor(j = 0; j != D[213].length; ++j) if(D[213][j].charCodeAt(0) !== 0xFFFD) { e[D[213][j]] = 54528 + j; d[54528 + j] = D[213][j];}\nD[214] = \"����������������������������������������������������������������諤諥諦諧諨諩諪諫諬諭諮諯諰諱諲諳諴諵諶諷諸諹諺諻諼諽諾諿謀謁謂謃謄謅謆謈謉謊謋謌謍謎謏謐謑謒謓謔謕謖謗謘謙謚講謜謝謞謟謠謡謢謣�謤謥謧謨謩謪謫謬謭謮謯謰謱謲謳謴謵謶謷謸謹謺謻謼謽謾謿譀譁譂譃譄譅帧症郑证芝枝支吱蜘知肢脂汁之织职直植殖执值侄址指止趾只旨纸志挚掷至致置帜峙制智秩稚质炙痔滞治窒中盅忠钟衷终种肿重仲众舟周州洲诌粥轴肘帚咒皱宙昼骤珠株蛛朱猪诸诛逐竹烛煮拄瞩嘱主著柱助蛀贮铸筑�\".split(\"\");\nfor(j = 0; j != D[214].length; ++j) if(D[214][j].charCodeAt(0) !== 0xFFFD) { e[D[214][j]] = 54784 + j; d[54784 + j] = D[214][j];}\nD[215] = \"����������������������������������������������������������������譆譇譈證譊譋譌譍譎譏譐譑譒譓譔譕譖譗識譙譚譛譜譝譞譟譠譡譢譣譤譥譧譨譩譪譫譭譮譯議譱譲譳譴譵譶護譸譹譺譻譼譽譾譿讀讁讂讃讄讅讆�讇讈讉變讋讌讍讎讏讐讑讒讓讔讕讖讗讘讙讚讛讜讝讞讟讬讱讻诇诐诪谉谞住注祝驻抓爪拽专砖转撰赚篆桩庄装妆撞壮状椎锥追赘坠缀谆准捉拙卓桌琢茁酌啄着灼浊兹咨资姿滋淄孜紫仔籽滓子自渍字鬃棕踪宗综总纵邹走奏揍租足卒族祖诅阻组钻纂嘴醉最罪尊遵昨左佐柞做作坐座������\".split(\"\");\nfor(j = 0; j != D[215].length; ++j) if(D[215][j].charCodeAt(0) !== 0xFFFD) { e[D[215][j]] = 55040 + j; d[55040 + j] = D[215][j];}\nD[216] = \"����������������������������������������������������������������谸谹谺谻谼谽谾谿豀豂豃豄豅豈豊豋豍豎豏豐豑豒豓豔豖豗豘豙豛豜豝豞豟豠豣豤豥豦豧豨豩豬豭豮豯豰豱豲豴豵豶豷豻豼豽豾豿貀貁貃貄貆貇�貈貋貍貎貏貐貑貒貓貕貖貗貙貚貛貜貝貞貟負財貢貣貤貥貦貧貨販貪貫責貭亍丌兀丐廿卅丕亘丞鬲孬噩丨禺丿匕乇夭爻卮氐囟胤馗毓睾鼗丶亟鼐乜乩亓芈孛啬嘏仄厍厝厣厥厮靥赝匚叵匦匮匾赜卦卣刂刈刎刭刳刿剀剌剞剡剜蒯剽劂劁劐劓冂罔亻仃仉仂仨仡仫仞伛仳伢佤仵伥伧伉伫佞佧攸佚佝�\".split(\"\");\nfor(j = 0; j != D[216].length; ++j) if(D[216][j].charCodeAt(0) !== 0xFFFD) { e[D[216][j]] = 55296 + j; d[55296 + j] = D[216][j];}\nD[217] = \"����������������������������������������������������������������貮貯貰貱貲貳貴貵貶買貸貹貺費貼貽貾貿賀賁賂賃賄賅賆資賈賉賊賋賌賍賎賏賐賑賒賓賔賕賖賗賘賙賚賛賜賝賞賟賠賡賢賣賤賥賦賧賨賩質賫賬�賭賮賯賰賱賲賳賴賵賶賷賸賹賺賻購賽賾賿贀贁贂贃贄贅贆贇贈贉贊贋贌贍佟佗伲伽佶佴侑侉侃侏佾佻侪佼侬侔俦俨俪俅俚俣俜俑俟俸倩偌俳倬倏倮倭俾倜倌倥倨偾偃偕偈偎偬偻傥傧傩傺僖儆僭僬僦僮儇儋仝氽佘佥俎龠汆籴兮巽黉馘冁夔勹匍訇匐凫夙兕亠兖亳衮袤亵脔裒禀嬴蠃羸冫冱冽冼�\".split(\"\");\nfor(j = 0; j != D[217].length; ++j) if(D[217][j].charCodeAt(0) !== 0xFFFD) { e[D[217][j]] = 55552 + j; d[55552 + j] = D[217][j];}\nD[218] = \"����������������������������������������������������������������贎贏贐贑贒贓贔贕贖贗贘贙贚贛贜贠赑赒赗赟赥赨赩赪赬赮赯赱赲赸赹赺赻赼赽赾赿趀趂趃趆趇趈趉趌趍趎趏趐趒趓趕趖趗趘趙趚趛趜趝趞趠趡�趢趤趥趦趧趨趩趪趫趬趭趮趯趰趲趶趷趹趻趽跀跁跂跅跇跈跉跊跍跐跒跓跔凇冖冢冥讠讦讧讪讴讵讷诂诃诋诏诎诒诓诔诖诘诙诜诟诠诤诨诩诮诰诳诶诹诼诿谀谂谄谇谌谏谑谒谔谕谖谙谛谘谝谟谠谡谥谧谪谫谮谯谲谳谵谶卩卺阝阢阡阱阪阽阼陂陉陔陟陧陬陲陴隈隍隗隰邗邛邝邙邬邡邴邳邶邺�\".split(\"\");\nfor(j = 0; j != D[218].length; ++j) if(D[218][j].charCodeAt(0) !== 0xFFFD) { e[D[218][j]] = 55808 + j; d[55808 + j] = D[218][j];}\nD[219] = \"����������������������������������������������������������������跕跘跙跜跠跡跢跥跦跧跩跭跮跰跱跲跴跶跼跾跿踀踁踂踃踄踆踇踈踋踍踎踐踑踒踓踕踖踗踘踙踚踛踜踠踡踤踥踦踧踨踫踭踰踲踳踴踶踷踸踻踼踾�踿蹃蹅蹆蹌蹍蹎蹏蹐蹓蹔蹕蹖蹗蹘蹚蹛蹜蹝蹞蹟蹠蹡蹢蹣蹤蹥蹧蹨蹪蹫蹮蹱邸邰郏郅邾郐郄郇郓郦郢郜郗郛郫郯郾鄄鄢鄞鄣鄱鄯鄹酃酆刍奂劢劬劭劾哿勐勖勰叟燮矍廴凵凼鬯厶弁畚巯坌垩垡塾墼壅壑圩圬圪圳圹圮圯坜圻坂坩垅坫垆坼坻坨坭坶坳垭垤垌垲埏垧垴垓垠埕埘埚埙埒垸埴埯埸埤埝�\".split(\"\");\nfor(j = 0; j != D[219].length; ++j) if(D[219][j].charCodeAt(0) !== 0xFFFD) { e[D[219][j]] = 56064 + j; d[56064 + j] = D[219][j];}\nD[220] = \"����������������������������������������������������������������蹳蹵蹷蹸蹹蹺蹻蹽蹾躀躂躃躄躆躈躉躊躋躌躍躎躑躒躓躕躖躗躘躙躚躛躝躟躠躡躢躣躤躥躦躧躨躩躪躭躮躰躱躳躴躵躶躷躸躹躻躼躽躾躿軀軁軂�軃軄軅軆軇軈軉車軋軌軍軏軐軑軒軓軔軕軖軗軘軙軚軛軜軝軞軟軠軡転軣軤堋堍埽埭堀堞堙塄堠塥塬墁墉墚墀馨鼙懿艹艽艿芏芊芨芄芎芑芗芙芫芸芾芰苈苊苣芘芷芮苋苌苁芩芴芡芪芟苄苎芤苡茉苷苤茏茇苜苴苒苘茌苻苓茑茚茆茔茕苠苕茜荑荛荜茈莒茼茴茱莛荞茯荏荇荃荟荀茗荠茭茺茳荦荥�\".split(\"\");\nfor(j = 0; j != D[220].length; ++j) if(D[220][j].charCodeAt(0) !== 0xFFFD) { e[D[220][j]] = 56320 + j; d[56320 + j] = D[220][j];}\nD[221] = \"����������������������������������������������������������������軥軦軧軨軩軪軫軬軭軮軯軰軱軲軳軴軵軶軷軸軹軺軻軼軽軾軿輀輁輂較輄輅輆輇輈載輊輋輌輍輎輏輐輑輒輓輔輕輖輗輘輙輚輛輜輝輞輟輠輡輢輣�輤輥輦輧輨輩輪輫輬輭輮輯輰輱輲輳輴輵輶輷輸輹輺輻輼輽輾輿轀轁轂轃轄荨茛荩荬荪荭荮莰荸莳莴莠莪莓莜莅荼莶莩荽莸荻莘莞莨莺莼菁萁菥菘堇萘萋菝菽菖萜萸萑萆菔菟萏萃菸菹菪菅菀萦菰菡葜葑葚葙葳蒇蒈葺蒉葸萼葆葩葶蒌蒎萱葭蓁蓍蓐蓦蒽蓓蓊蒿蒺蓠蒡蒹蒴蒗蓥蓣蔌甍蔸蓰蔹蔟蔺�\".split(\"\");\nfor(j = 0; j != D[221].length; ++j) if(D[221][j].charCodeAt(0) !== 0xFFFD) { e[D[221][j]] = 56576 + j; d[56576 + j] = D[221][j];}\nD[222] = \"����������������������������������������������������������������轅轆轇轈轉轊轋轌轍轎轏轐轑轒轓轔轕轖轗轘轙轚轛轜轝轞轟轠轡轢轣轤轥轪辀辌辒辝辠辡辢辤辥辦辧辪辬辭辮辯農辳辴辵辷辸辺辻込辿迀迃迆�迉迊迋迌迍迏迒迖迗迚迠迡迣迧迬迯迱迲迴迵迶迺迻迼迾迿逇逈逌逎逓逕逘蕖蔻蓿蓼蕙蕈蕨蕤蕞蕺瞢蕃蕲蕻薤薨薇薏蕹薮薜薅薹薷薰藓藁藜藿蘧蘅蘩蘖蘼廾弈夼奁耷奕奚奘匏尢尥尬尴扌扪抟抻拊拚拗拮挢拶挹捋捃掭揶捱捺掎掴捭掬掊捩掮掼揲揸揠揿揄揞揎摒揆掾摅摁搋搛搠搌搦搡摞撄摭撖�\".split(\"\");\nfor(j = 0; j != D[222].length; ++j) if(D[222][j].charCodeAt(0) !== 0xFFFD) { e[D[222][j]] = 56832 + j; d[56832 + j] = D[222][j];}\nD[223] = \"����������������������������������������������������������������這逜連逤逥逧逨逩逪逫逬逰週進逳逴逷逹逺逽逿遀遃遅遆遈遉遊運遌過達違遖遙遚遜遝遞遟遠遡遤遦遧適遪遫遬遯遰遱遲遳遶遷選遹遺遻遼遾邁�還邅邆邇邉邊邌邍邎邏邐邒邔邖邘邚邜邞邟邠邤邥邧邨邩邫邭邲邷邼邽邿郀摺撷撸撙撺擀擐擗擤擢攉攥攮弋忒甙弑卟叱叽叩叨叻吒吖吆呋呒呓呔呖呃吡呗呙吣吲咂咔呷呱呤咚咛咄呶呦咝哐咭哂咴哒咧咦哓哔呲咣哕咻咿哌哙哚哜咩咪咤哝哏哞唛哧唠哽唔哳唢唣唏唑唧唪啧喏喵啉啭啁啕唿啐唼�\".split(\"\");\nfor(j = 0; j != D[223].length; ++j) if(D[223][j].charCodeAt(0) !== 0xFFFD) { e[D[223][j]] = 57088 + j; d[57088 + j] = D[223][j];}\nD[224] = \"����������������������������������������������������������������郂郃郆郈郉郋郌郍郒郔郕郖郘郙郚郞郟郠郣郤郥郩郪郬郮郰郱郲郳郵郶郷郹郺郻郼郿鄀鄁鄃鄅鄆鄇鄈鄉鄊鄋鄌鄍鄎鄏鄐鄑鄒鄓鄔鄕鄖鄗鄘鄚鄛鄜�鄝鄟鄠鄡鄤鄥鄦鄧鄨鄩鄪鄫鄬鄭鄮鄰鄲鄳鄴鄵鄶鄷鄸鄺鄻鄼鄽鄾鄿酀酁酂酄唷啖啵啶啷唳唰啜喋嗒喃喱喹喈喁喟啾嗖喑啻嗟喽喾喔喙嗪嗷嗉嘟嗑嗫嗬嗔嗦嗝嗄嗯嗥嗲嗳嗌嗍嗨嗵嗤辔嘞嘈嘌嘁嘤嘣嗾嘀嘧嘭噘嘹噗嘬噍噢噙噜噌噔嚆噤噱噫噻噼嚅嚓嚯囔囗囝囡囵囫囹囿圄圊圉圜帏帙帔帑帱帻帼�\".split(\"\");\nfor(j = 0; j != D[224].length; ++j) if(D[224][j].charCodeAt(0) !== 0xFFFD) { e[D[224][j]] = 57344 + j; d[57344 + j] = D[224][j];}\nD[225] = \"����������������������������������������������������������������酅酇酈酑酓酔酕酖酘酙酛酜酟酠酦酧酨酫酭酳酺酻酼醀醁醂醃醄醆醈醊醎醏醓醔醕醖醗醘醙醜醝醞醟醠醡醤醥醦醧醨醩醫醬醰醱醲醳醶醷醸醹醻�醼醽醾醿釀釁釂釃釄釅釆釈釋釐釒釓釔釕釖釗釘釙釚釛針釞釟釠釡釢釣釤釥帷幄幔幛幞幡岌屺岍岐岖岈岘岙岑岚岜岵岢岽岬岫岱岣峁岷峄峒峤峋峥崂崃崧崦崮崤崞崆崛嵘崾崴崽嵬嵛嵯嵝嵫嵋嵊嵩嵴嶂嶙嶝豳嶷巅彳彷徂徇徉後徕徙徜徨徭徵徼衢彡犭犰犴犷犸狃狁狎狍狒狨狯狩狲狴狷猁狳猃狺�\".split(\"\");\nfor(j = 0; j != D[225].length; ++j) if(D[225][j].charCodeAt(0) !== 0xFFFD) { e[D[225][j]] = 57600 + j; d[57600 + j] = D[225][j];}\nD[226] = \"����������������������������������������������������������������釦釧釨釩釪釫釬釭釮釯釰釱釲釳釴釵釶釷釸釹釺釻釼釽釾釿鈀鈁鈂鈃鈄鈅鈆鈇鈈鈉鈊鈋鈌鈍鈎鈏鈐鈑鈒鈓鈔鈕鈖鈗鈘鈙鈚鈛鈜鈝鈞鈟鈠鈡鈢鈣鈤�鈥鈦鈧鈨鈩鈪鈫鈬鈭鈮鈯鈰鈱鈲鈳鈴鈵鈶鈷鈸鈹鈺鈻鈼鈽鈾鈿鉀鉁鉂鉃鉄鉅狻猗猓猡猊猞猝猕猢猹猥猬猸猱獐獍獗獠獬獯獾舛夥飧夤夂饣饧饨饩饪饫饬饴饷饽馀馄馇馊馍馐馑馓馔馕庀庑庋庖庥庠庹庵庾庳赓廒廑廛廨廪膺忄忉忖忏怃忮怄忡忤忾怅怆忪忭忸怙怵怦怛怏怍怩怫怊怿怡恸恹恻恺恂�\".split(\"\");\nfor(j = 0; j != D[226].length; ++j) if(D[226][j].charCodeAt(0) !== 0xFFFD) { e[D[226][j]] = 57856 + j; d[57856 + j] = D[226][j];}\nD[227] = \"����������������������������������������������������������������鉆鉇鉈鉉鉊鉋鉌鉍鉎鉏鉐鉑鉒鉓鉔鉕鉖鉗鉘鉙鉚鉛鉜鉝鉞鉟鉠鉡鉢鉣鉤鉥鉦鉧鉨鉩鉪鉫鉬鉭鉮鉯鉰鉱鉲鉳鉵鉶鉷鉸鉹鉺鉻鉼鉽鉾鉿銀銁銂銃銄銅�銆銇銈銉銊銋銌銍銏銐銑銒銓銔銕銖銗銘銙銚銛銜銝銞銟銠銡銢銣銤銥銦銧恪恽悖悚悭悝悃悒悌悛惬悻悱惝惘惆惚悴愠愦愕愣惴愀愎愫慊慵憬憔憧憷懔懵忝隳闩闫闱闳闵闶闼闾阃阄阆阈阊阋阌阍阏阒阕阖阗阙阚丬爿戕氵汔汜汊沣沅沐沔沌汨汩汴汶沆沩泐泔沭泷泸泱泗沲泠泖泺泫泮沱泓泯泾�\".split(\"\");\nfor(j = 0; j != D[227].length; ++j) if(D[227][j].charCodeAt(0) !== 0xFFFD) { e[D[227][j]] = 58112 + j; d[58112 + j] = D[227][j];}\nD[228] = \"����������������������������������������������������������������銨銩銪銫銬銭銯銰銱銲銳銴銵銶銷銸銹銺銻銼銽銾銿鋀鋁鋂鋃鋄鋅鋆鋇鋉鋊鋋鋌鋍鋎鋏鋐鋑鋒鋓鋔鋕鋖鋗鋘鋙鋚鋛鋜鋝鋞鋟鋠鋡鋢鋣鋤鋥鋦鋧鋨�鋩鋪鋫鋬鋭鋮鋯鋰鋱鋲鋳鋴鋵鋶鋷鋸鋹鋺鋻鋼鋽鋾鋿錀錁錂錃錄錅錆錇錈錉洹洧洌浃浈洇洄洙洎洫浍洮洵洚浏浒浔洳涑浯涞涠浞涓涔浜浠浼浣渚淇淅淞渎涿淠渑淦淝淙渖涫渌涮渫湮湎湫溲湟溆湓湔渲渥湄滟溱溘滠漭滢溥溧溽溻溷滗溴滏溏滂溟潢潆潇漤漕滹漯漶潋潴漪漉漩澉澍澌潸潲潼潺濑�\".split(\"\");\nfor(j = 0; j != D[228].length; ++j) if(D[228][j].charCodeAt(0) !== 0xFFFD) { e[D[228][j]] = 58368 + j; d[58368 + j] = D[228][j];}\nD[229] = \"����������������������������������������������������������������錊錋錌錍錎錏錐錑錒錓錔錕錖錗錘錙錚錛錜錝錞錟錠錡錢錣錤錥錦錧錨錩錪錫錬錭錮錯錰錱録錳錴錵錶錷錸錹錺錻錼錽錿鍀鍁鍂鍃鍄鍅鍆鍇鍈鍉�鍊鍋鍌鍍鍎鍏鍐鍑鍒鍓鍔鍕鍖鍗鍘鍙鍚鍛鍜鍝鍞鍟鍠鍡鍢鍣鍤鍥鍦鍧鍨鍩鍫濉澧澹澶濂濡濮濞濠濯瀚瀣瀛瀹瀵灏灞宀宄宕宓宥宸甯骞搴寤寮褰寰蹇謇辶迓迕迥迮迤迩迦迳迨逅逄逋逦逑逍逖逡逵逶逭逯遄遑遒遐遨遘遢遛暹遴遽邂邈邃邋彐彗彖彘尻咫屐屙孱屣屦羼弪弩弭艴弼鬻屮妁妃妍妩妪妣�\".split(\"\");\nfor(j = 0; j != D[229].length; ++j) if(D[229][j].charCodeAt(0) !== 0xFFFD) { e[D[229][j]] = 58624 + j; d[58624 + j] = D[229][j];}\nD[230] = \"����������������������������������������������������������������鍬鍭鍮鍯鍰鍱鍲鍳鍴鍵鍶鍷鍸鍹鍺鍻鍼鍽鍾鍿鎀鎁鎂鎃鎄鎅鎆鎇鎈鎉鎊鎋鎌鎍鎎鎐鎑鎒鎓鎔鎕鎖鎗鎘鎙鎚鎛鎜鎝鎞鎟鎠鎡鎢鎣鎤鎥鎦鎧鎨鎩鎪鎫�鎬鎭鎮鎯鎰鎱鎲鎳鎴鎵鎶鎷鎸鎹鎺鎻鎼鎽鎾鎿鏀鏁鏂鏃鏄鏅鏆鏇鏈鏉鏋鏌鏍妗姊妫妞妤姒妲妯姗妾娅娆姝娈姣姘姹娌娉娲娴娑娣娓婀婧婊婕娼婢婵胬媪媛婷婺媾嫫媲嫒嫔媸嫠嫣嫱嫖嫦嫘嫜嬉嬗嬖嬲嬷孀尕尜孚孥孳孑孓孢驵驷驸驺驿驽骀骁骅骈骊骐骒骓骖骘骛骜骝骟骠骢骣骥骧纟纡纣纥纨纩�\".split(\"\");\nfor(j = 0; j != D[230].length; ++j) if(D[230][j].charCodeAt(0) !== 0xFFFD) { e[D[230][j]] = 58880 + j; d[58880 + j] = D[230][j];}\nD[231] = \"����������������������������������������������������������������鏎鏏鏐鏑鏒鏓鏔鏕鏗鏘鏙鏚鏛鏜鏝鏞鏟鏠鏡鏢鏣鏤鏥鏦鏧鏨鏩鏪鏫鏬鏭鏮鏯鏰鏱鏲鏳鏴鏵鏶鏷鏸鏹鏺鏻鏼鏽鏾鏿鐀鐁鐂鐃鐄鐅鐆鐇鐈鐉鐊鐋鐌鐍�鐎鐏鐐鐑鐒鐓鐔鐕鐖鐗鐘鐙鐚鐛鐜鐝鐞鐟鐠鐡鐢鐣鐤鐥鐦鐧鐨鐩鐪鐫鐬鐭鐮纭纰纾绀绁绂绉绋绌绐绔绗绛绠绡绨绫绮绯绱绲缍绶绺绻绾缁缂缃缇缈缋缌缏缑缒缗缙缜缛缟缡缢缣缤缥缦缧缪缫缬缭缯缰缱缲缳缵幺畿巛甾邕玎玑玮玢玟珏珂珑玷玳珀珉珈珥珙顼琊珩珧珞玺珲琏琪瑛琦琥琨琰琮琬�\".split(\"\");\nfor(j = 0; j != D[231].length; ++j) if(D[231][j].charCodeAt(0) !== 0xFFFD) { e[D[231][j]] = 59136 + j; d[59136 + j] = D[231][j];}\nD[232] = \"����������������������������������������������������������������鐯鐰鐱鐲鐳鐴鐵鐶鐷鐸鐹鐺鐻鐼鐽鐿鑀鑁鑂鑃鑄鑅鑆鑇鑈鑉鑊鑋鑌鑍鑎鑏鑐鑑鑒鑓鑔鑕鑖鑗鑘鑙鑚鑛鑜鑝鑞鑟鑠鑡鑢鑣鑤鑥鑦鑧鑨鑩鑪鑬鑭鑮鑯�鑰鑱鑲鑳鑴鑵鑶鑷鑸鑹鑺鑻鑼鑽鑾鑿钀钁钂钃钄钑钖钘铇铏铓铔铚铦铻锜锠琛琚瑁瑜瑗瑕瑙瑷瑭瑾璜璎璀璁璇璋璞璨璩璐璧瓒璺韪韫韬杌杓杞杈杩枥枇杪杳枘枧杵枨枞枭枋杷杼柰栉柘栊柩枰栌柙枵柚枳柝栀柃枸柢栎柁柽栲栳桠桡桎桢桄桤梃栝桕桦桁桧桀栾桊桉栩梵梏桴桷梓桫棂楮棼椟椠棹�\".split(\"\");\nfor(j = 0; j != D[232].length; ++j) if(D[232][j].charCodeAt(0) !== 0xFFFD) { e[D[232][j]] = 59392 + j; d[59392 + j] = D[232][j];}\nD[233] = \"����������������������������������������������������������������锧锳锽镃镈镋镕镚镠镮镴镵長镸镹镺镻镼镽镾門閁閂閃閄閅閆閇閈閉閊開閌閍閎閏閐閑閒間閔閕閖閗閘閙閚閛閜閝閞閟閠閡関閣閤閥閦閧閨閩閪�閫閬閭閮閯閰閱閲閳閴閵閶閷閸閹閺閻閼閽閾閿闀闁闂闃闄闅闆闇闈闉闊闋椤棰椋椁楗棣椐楱椹楠楂楝榄楫榀榘楸椴槌榇榈槎榉楦楣楹榛榧榻榫榭槔榱槁槊槟榕槠榍槿樯槭樗樘橥槲橄樾檠橐橛樵檎橹樽樨橘橼檑檐檩檗檫猷獒殁殂殇殄殒殓殍殚殛殡殪轫轭轱轲轳轵轶轸轷轹轺轼轾辁辂辄辇辋�\".split(\"\");\nfor(j = 0; j != D[233].length; ++j) if(D[233][j].charCodeAt(0) !== 0xFFFD) { e[D[233][j]] = 59648 + j; d[59648 + j] = D[233][j];}\nD[234] = \"����������������������������������������������������������������闌闍闎闏闐闑闒闓闔闕闖闗闘闙闚闛關闝闞闟闠闡闢闣闤闥闦闧闬闿阇阓阘阛阞阠阣阤阥阦阧阨阩阫阬阭阯阰阷阸阹阺阾陁陃陊陎陏陑陒陓陖陗�陘陙陚陜陝陞陠陣陥陦陫陭陮陯陰陱陳陸陹険陻陼陽陾陿隀隁隂隃隄隇隉隊辍辎辏辘辚軎戋戗戛戟戢戡戥戤戬臧瓯瓴瓿甏甑甓攴旮旯旰昊昙杲昃昕昀炅曷昝昴昱昶昵耆晟晔晁晏晖晡晗晷暄暌暧暝暾曛曜曦曩贲贳贶贻贽赀赅赆赈赉赇赍赕赙觇觊觋觌觎觏觐觑牮犟牝牦牯牾牿犄犋犍犏犒挈挲掰�\".split(\"\");\nfor(j = 0; j != D[234].length; ++j) if(D[234][j].charCodeAt(0) !== 0xFFFD) { e[D[234][j]] = 59904 + j; d[59904 + j] = D[234][j];}\nD[235] = \"����������������������������������������������������������������隌階隑隒隓隕隖隚際隝隞隟隠隡隢隣隤隥隦隨隩險隫隬隭隮隯隱隲隴隵隷隸隺隻隿雂雃雈雊雋雐雑雓雔雖雗雘雙雚雛雜雝雞雟雡離難雤雥雦雧雫�雬雭雮雰雱雲雴雵雸雺電雼雽雿霂霃霅霊霋霌霐霑霒霔霕霗霘霙霚霛霝霟霠搿擘耄毪毳毽毵毹氅氇氆氍氕氘氙氚氡氩氤氪氲攵敕敫牍牒牖爰虢刖肟肜肓肼朊肽肱肫肭肴肷胧胨胩胪胛胂胄胙胍胗朐胝胫胱胴胭脍脎胲胼朕脒豚脶脞脬脘脲腈腌腓腴腙腚腱腠腩腼腽腭腧塍媵膈膂膑滕膣膪臌朦臊膻�\".split(\"\");\nfor(j = 0; j != D[235].length; ++j) if(D[235][j].charCodeAt(0) !== 0xFFFD) { e[D[235][j]] = 60160 + j; d[60160 + j] = D[235][j];}\nD[236] = \"����������������������������������������������������������������霡霢霣霤霥霦霧霨霩霫霬霮霯霱霳霴霵霶霷霺霻霼霽霿靀靁靂靃靄靅靆靇靈靉靊靋靌靍靎靏靐靑靔靕靗靘靚靜靝靟靣靤靦靧靨靪靫靬靭靮靯靰靱�靲靵靷靸靹靺靻靽靾靿鞀鞁鞂鞃鞄鞆鞇鞈鞉鞊鞌鞎鞏鞐鞓鞕鞖鞗鞙鞚鞛鞜鞝臁膦欤欷欹歃歆歙飑飒飓飕飙飚殳彀毂觳斐齑斓於旆旄旃旌旎旒旖炀炜炖炝炻烀炷炫炱烨烊焐焓焖焯焱煳煜煨煅煲煊煸煺熘熳熵熨熠燠燔燧燹爝爨灬焘煦熹戾戽扃扈扉礻祀祆祉祛祜祓祚祢祗祠祯祧祺禅禊禚禧禳忑忐�\".split(\"\");\nfor(j = 0; j != D[236].length; ++j) if(D[236][j].charCodeAt(0) !== 0xFFFD) { e[D[236][j]] = 60416 + j; d[60416 + j] = D[236][j];}\nD[237] = \"����������������������������������������������������������������鞞鞟鞡鞢鞤鞥鞦鞧鞨鞩鞪鞬鞮鞰鞱鞳鞵鞶鞷鞸鞹鞺鞻鞼鞽鞾鞿韀韁韂韃韄韅韆韇韈韉韊韋韌韍韎韏韐韑韒韓韔韕韖韗韘韙韚韛韜韝韞韟韠韡韢韣�韤韥韨韮韯韰韱韲韴韷韸韹韺韻韼韽韾響頀頁頂頃頄項順頇須頉頊頋頌頍頎怼恝恚恧恁恙恣悫愆愍慝憩憝懋懑戆肀聿沓泶淼矶矸砀砉砗砘砑斫砭砜砝砹砺砻砟砼砥砬砣砩硎硭硖硗砦硐硇硌硪碛碓碚碇碜碡碣碲碹碥磔磙磉磬磲礅磴礓礤礞礴龛黹黻黼盱眄眍盹眇眈眚眢眙眭眦眵眸睐睑睇睃睚睨�\".split(\"\");\nfor(j = 0; j != D[237].length; ++j) if(D[237][j].charCodeAt(0) !== 0xFFFD) { e[D[237][j]] = 60672 + j; d[60672 + j] = D[237][j];}\nD[238] = \"����������������������������������������������������������������頏預頑頒頓頔頕頖頗領頙頚頛頜頝頞頟頠頡頢頣頤頥頦頧頨頩頪頫頬頭頮頯頰頱頲頳頴頵頶頷頸頹頺頻頼頽頾頿顀顁顂顃顄顅顆顇顈顉顊顋題額�顎顏顐顑顒顓顔顕顖顗願顙顚顛顜顝類顟顠顡顢顣顤顥顦顧顨顩顪顫顬顭顮睢睥睿瞍睽瞀瞌瞑瞟瞠瞰瞵瞽町畀畎畋畈畛畲畹疃罘罡罟詈罨罴罱罹羁罾盍盥蠲钅钆钇钋钊钌钍钏钐钔钗钕钚钛钜钣钤钫钪钭钬钯钰钲钴钶钷钸钹钺钼钽钿铄铈铉铊铋铌铍铎铐铑铒铕铖铗铙铘铛铞铟铠铢铤铥铧铨铪�\".split(\"\");\nfor(j = 0; j != D[238].length; ++j) if(D[238][j].charCodeAt(0) !== 0xFFFD) { e[D[238][j]] = 60928 + j; d[60928 + j] = D[238][j];}\nD[239] = \"����������������������������������������������������������������顯顰顱顲顳顴颋颎颒颕颙颣風颩颪颫颬颭颮颯颰颱颲颳颴颵颶颷颸颹颺颻颼颽颾颿飀飁飂飃飄飅飆飇飈飉飊飋飌飍飏飐飔飖飗飛飜飝飠飡飢飣飤�飥飦飩飪飫飬飭飮飯飰飱飲飳飴飵飶飷飸飹飺飻飼飽飾飿餀餁餂餃餄餅餆餇铩铫铮铯铳铴铵铷铹铼铽铿锃锂锆锇锉锊锍锎锏锒锓锔锕锖锘锛锝锞锟锢锪锫锩锬锱锲锴锶锷锸锼锾锿镂锵镄镅镆镉镌镎镏镒镓镔镖镗镘镙镛镞镟镝镡镢镤镥镦镧镨镩镪镫镬镯镱镲镳锺矧矬雉秕秭秣秫稆嵇稃稂稞稔�\".split(\"\");\nfor(j = 0; j != D[239].length; ++j) if(D[239][j].charCodeAt(0) !== 0xFFFD) { e[D[239][j]] = 61184 + j; d[61184 + j] = D[239][j];}\nD[240] = \"����������������������������������������������������������������餈餉養餋餌餎餏餑餒餓餔餕餖餗餘餙餚餛餜餝餞餟餠餡餢餣餤餥餦餧館餩餪餫餬餭餯餰餱餲餳餴餵餶餷餸餹餺餻餼餽餾餿饀饁饂饃饄饅饆饇饈饉�饊饋饌饍饎饏饐饑饒饓饖饗饘饙饚饛饜饝饞饟饠饡饢饤饦饳饸饹饻饾馂馃馉稹稷穑黏馥穰皈皎皓皙皤瓞瓠甬鸠鸢鸨鸩鸪鸫鸬鸲鸱鸶鸸鸷鸹鸺鸾鹁鹂鹄鹆鹇鹈鹉鹋鹌鹎鹑鹕鹗鹚鹛鹜鹞鹣鹦鹧鹨鹩鹪鹫鹬鹱鹭鹳疒疔疖疠疝疬疣疳疴疸痄疱疰痃痂痖痍痣痨痦痤痫痧瘃痱痼痿瘐瘀瘅瘌瘗瘊瘥瘘瘕瘙�\".split(\"\");\nfor(j = 0; j != D[240].length; ++j) if(D[240][j].charCodeAt(0) !== 0xFFFD) { e[D[240][j]] = 61440 + j; d[61440 + j] = D[240][j];}\nD[241] = \"����������������������������������������������������������������馌馎馚馛馜馝馞馟馠馡馢馣馤馦馧馩馪馫馬馭馮馯馰馱馲馳馴馵馶馷馸馹馺馻馼馽馾馿駀駁駂駃駄駅駆駇駈駉駊駋駌駍駎駏駐駑駒駓駔駕駖駗駘�駙駚駛駜駝駞駟駠駡駢駣駤駥駦駧駨駩駪駫駬駭駮駯駰駱駲駳駴駵駶駷駸駹瘛瘼瘢瘠癀瘭瘰瘿瘵癃瘾瘳癍癞癔癜癖癫癯翊竦穸穹窀窆窈窕窦窠窬窨窭窳衤衩衲衽衿袂袢裆袷袼裉裢裎裣裥裱褚裼裨裾裰褡褙褓褛褊褴褫褶襁襦襻疋胥皲皴矜耒耔耖耜耠耢耥耦耧耩耨耱耋耵聃聆聍聒聩聱覃顸颀颃�\".split(\"\");\nfor(j = 0; j != D[241].length; ++j) if(D[241][j].charCodeAt(0) !== 0xFFFD) { e[D[241][j]] = 61696 + j; d[61696 + j] = D[241][j];}\nD[242] = \"����������������������������������������������������������������駺駻駼駽駾駿騀騁騂騃騄騅騆騇騈騉騊騋騌騍騎騏騐騑騒験騔騕騖騗騘騙騚騛騜騝騞騟騠騡騢騣騤騥騦騧騨騩騪騫騬騭騮騯騰騱騲騳騴騵騶騷騸�騹騺騻騼騽騾騿驀驁驂驃驄驅驆驇驈驉驊驋驌驍驎驏驐驑驒驓驔驕驖驗驘驙颉颌颍颏颔颚颛颞颟颡颢颥颦虍虔虬虮虿虺虼虻蚨蚍蚋蚬蚝蚧蚣蚪蚓蚩蚶蛄蚵蛎蚰蚺蚱蚯蛉蛏蚴蛩蛱蛲蛭蛳蛐蜓蛞蛴蛟蛘蛑蜃蜇蛸蜈蜊蜍蜉蜣蜻蜞蜥蜮蜚蜾蝈蜴蜱蜩蜷蜿螂蜢蝽蝾蝻蝠蝰蝌蝮螋蝓蝣蝼蝤蝙蝥螓螯螨蟒�\".split(\"\");\nfor(j = 0; j != D[242].length; ++j) if(D[242][j].charCodeAt(0) !== 0xFFFD) { e[D[242][j]] = 61952 + j; d[61952 + j] = D[242][j];}\nD[243] = \"����������������������������������������������������������������驚驛驜驝驞驟驠驡驢驣驤驥驦驧驨驩驪驫驲骃骉骍骎骔骕骙骦骩骪骫骬骭骮骯骲骳骴骵骹骻骽骾骿髃髄髆髇髈髉髊髍髎髏髐髒體髕髖髗髙髚髛髜�髝髞髠髢髣髤髥髧髨髩髪髬髮髰髱髲髳髴髵髶髷髸髺髼髽髾髿鬀鬁鬂鬄鬅鬆蟆螈螅螭螗螃螫蟥螬螵螳蟋蟓螽蟑蟀蟊蟛蟪蟠蟮蠖蠓蟾蠊蠛蠡蠹蠼缶罂罄罅舐竺竽笈笃笄笕笊笫笏筇笸笪笙笮笱笠笥笤笳笾笞筘筚筅筵筌筝筠筮筻筢筲筱箐箦箧箸箬箝箨箅箪箜箢箫箴篑篁篌篝篚篥篦篪簌篾篼簏簖簋�\".split(\"\");\nfor(j = 0; j != D[243].length; ++j) if(D[243][j].charCodeAt(0) !== 0xFFFD) { e[D[243][j]] = 62208 + j; d[62208 + j] = D[243][j];}\nD[244] = \"����������������������������������������������������������������鬇鬉鬊鬋鬌鬍鬎鬐鬑鬒鬔鬕鬖鬗鬘鬙鬚鬛鬜鬝鬞鬠鬡鬢鬤鬥鬦鬧鬨鬩鬪鬫鬬鬭鬮鬰鬱鬳鬴鬵鬶鬷鬸鬹鬺鬽鬾鬿魀魆魊魋魌魎魐魒魓魕魖魗魘魙魚�魛魜魝魞魟魠魡魢魣魤魥魦魧魨魩魪魫魬魭魮魯魰魱魲魳魴魵魶魷魸魹魺魻簟簪簦簸籁籀臾舁舂舄臬衄舡舢舣舭舯舨舫舸舻舳舴舾艄艉艋艏艚艟艨衾袅袈裘裟襞羝羟羧羯羰羲籼敉粑粝粜粞粢粲粼粽糁糇糌糍糈糅糗糨艮暨羿翎翕翥翡翦翩翮翳糸絷綦綮繇纛麸麴赳趄趔趑趱赧赭豇豉酊酐酎酏酤�\".split(\"\");\nfor(j = 0; j != D[244].length; ++j) if(D[244][j].charCodeAt(0) !== 0xFFFD) { e[D[244][j]] = 62464 + j; d[62464 + j] = D[244][j];}\nD[245] = \"����������������������������������������������������������������魼魽魾魿鮀鮁鮂鮃鮄鮅鮆鮇鮈鮉鮊鮋鮌鮍鮎鮏鮐鮑鮒鮓鮔鮕鮖鮗鮘鮙鮚鮛鮜鮝鮞鮟鮠鮡鮢鮣鮤鮥鮦鮧鮨鮩鮪鮫鮬鮭鮮鮯鮰鮱鮲鮳鮴鮵鮶鮷鮸鮹鮺�鮻鮼鮽鮾鮿鯀鯁鯂鯃鯄鯅鯆鯇鯈鯉鯊鯋鯌鯍鯎鯏鯐鯑鯒鯓鯔鯕鯖鯗鯘鯙鯚鯛酢酡酰酩酯酽酾酲酴酹醌醅醐醍醑醢醣醪醭醮醯醵醴醺豕鹾趸跫踅蹙蹩趵趿趼趺跄跖跗跚跞跎跏跛跆跬跷跸跣跹跻跤踉跽踔踝踟踬踮踣踯踺蹀踹踵踽踱蹉蹁蹂蹑蹒蹊蹰蹶蹼蹯蹴躅躏躔躐躜躞豸貂貊貅貘貔斛觖觞觚觜�\".split(\"\");\nfor(j = 0; j != D[245].length; ++j) if(D[245][j].charCodeAt(0) !== 0xFFFD) { e[D[245][j]] = 62720 + j; d[62720 + j] = D[245][j];}\nD[246] = \"����������������������������������������������������������������鯜鯝鯞鯟鯠鯡鯢鯣鯤鯥鯦鯧鯨鯩鯪鯫鯬鯭鯮鯯鯰鯱鯲鯳鯴鯵鯶鯷鯸鯹鯺鯻鯼鯽鯾鯿鰀鰁鰂鰃鰄鰅鰆鰇鰈鰉鰊鰋鰌鰍鰎鰏鰐鰑鰒鰓鰔鰕鰖鰗鰘鰙鰚�鰛鰜鰝鰞鰟鰠鰡鰢鰣鰤鰥鰦鰧鰨鰩鰪鰫鰬鰭鰮鰯鰰鰱鰲鰳鰴鰵鰶鰷鰸鰹鰺鰻觥觫觯訾謦靓雩雳雯霆霁霈霏霎霪霭霰霾龀龃龅龆龇龈龉龊龌黾鼋鼍隹隼隽雎雒瞿雠銎銮鋈錾鍪鏊鎏鐾鑫鱿鲂鲅鲆鲇鲈稣鲋鲎鲐鲑鲒鲔鲕鲚鲛鲞鲟鲠鲡鲢鲣鲥鲦鲧鲨鲩鲫鲭鲮鲰鲱鲲鲳鲴鲵鲶鲷鲺鲻鲼鲽鳄鳅鳆鳇鳊鳋�\".split(\"\");\nfor(j = 0; j != D[246].length; ++j) if(D[246][j].charCodeAt(0) !== 0xFFFD) { e[D[246][j]] = 62976 + j; d[62976 + j] = D[246][j];}\nD[247] = \"����������������������������������������������������������������鰼鰽鰾鰿鱀鱁鱂鱃鱄鱅鱆鱇鱈鱉鱊鱋鱌鱍鱎鱏鱐鱑鱒鱓鱔鱕鱖鱗鱘鱙鱚鱛鱜鱝鱞鱟鱠鱡鱢鱣鱤鱥鱦鱧鱨鱩鱪鱫鱬鱭鱮鱯鱰鱱鱲鱳鱴鱵鱶鱷鱸鱹鱺�鱻鱽鱾鲀鲃鲄鲉鲊鲌鲏鲓鲖鲗鲘鲙鲝鲪鲬鲯鲹鲾鲿鳀鳁鳂鳈鳉鳑鳒鳚鳛鳠鳡鳌鳍鳎鳏鳐鳓鳔鳕鳗鳘鳙鳜鳝鳟鳢靼鞅鞑鞒鞔鞯鞫鞣鞲鞴骱骰骷鹘骶骺骼髁髀髅髂髋髌髑魅魃魇魉魈魍魑飨餍餮饕饔髟髡髦髯髫髻髭髹鬈鬏鬓鬟鬣麽麾縻麂麇麈麋麒鏖麝麟黛黜黝黠黟黢黩黧黥黪黯鼢鼬鼯鼹鼷鼽鼾齄�\".split(\"\");\nfor(j = 0; j != D[247].length; ++j) if(D[247][j].charCodeAt(0) !== 0xFFFD) { e[D[247][j]] = 63232 + j; d[63232 + j] = D[247][j];}\nD[248] = \"����������������������������������������������������������������鳣鳤鳥鳦鳧鳨鳩鳪鳫鳬鳭鳮鳯鳰鳱鳲鳳鳴鳵鳶鳷鳸鳹鳺鳻鳼鳽鳾鳿鴀鴁鴂鴃鴄鴅鴆鴇鴈鴉鴊鴋鴌鴍鴎鴏鴐鴑鴒鴓鴔鴕鴖鴗鴘鴙鴚鴛鴜鴝鴞鴟鴠鴡�鴢鴣鴤鴥鴦鴧鴨鴩鴪鴫鴬鴭鴮鴯鴰鴱鴲鴳鴴鴵鴶鴷鴸鴹鴺鴻鴼鴽鴾鴿鵀鵁鵂�����������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[248].length; ++j) if(D[248][j].charCodeAt(0) !== 0xFFFD) { e[D[248][j]] = 63488 + j; d[63488 + j] = D[248][j];}\nD[249] = \"����������������������������������������������������������������鵃鵄鵅鵆鵇鵈鵉鵊鵋鵌鵍鵎鵏鵐鵑鵒鵓鵔鵕鵖鵗鵘鵙鵚鵛鵜鵝鵞鵟鵠鵡鵢鵣鵤鵥鵦鵧鵨鵩鵪鵫鵬鵭鵮鵯鵰鵱鵲鵳鵴鵵鵶鵷鵸鵹鵺鵻鵼鵽鵾鵿鶀鶁�鶂鶃鶄鶅鶆鶇鶈鶉鶊鶋鶌鶍鶎鶏鶐鶑鶒鶓鶔鶕鶖鶗鶘鶙鶚鶛鶜鶝鶞鶟鶠鶡鶢�����������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[249].length; ++j) if(D[249][j].charCodeAt(0) !== 0xFFFD) { e[D[249][j]] = 63744 + j; d[63744 + j] = D[249][j];}\nD[250] = \"����������������������������������������������������������������鶣鶤鶥鶦鶧鶨鶩鶪鶫鶬鶭鶮鶯鶰鶱鶲鶳鶴鶵鶶鶷鶸鶹鶺鶻鶼鶽鶾鶿鷀鷁鷂鷃鷄鷅鷆鷇鷈鷉鷊鷋鷌鷍鷎鷏鷐鷑鷒鷓鷔鷕鷖鷗鷘鷙鷚鷛鷜鷝鷞鷟鷠鷡�鷢鷣鷤鷥鷦鷧鷨鷩鷪鷫鷬鷭鷮鷯鷰鷱鷲鷳鷴鷵鷶鷷鷸鷹鷺鷻鷼鷽鷾鷿鸀鸁鸂�����������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[250].length; ++j) if(D[250][j].charCodeAt(0) !== 0xFFFD) { e[D[250][j]] = 64000 + j; d[64000 + j] = D[250][j];}\nD[251] = \"����������������������������������������������������������������鸃鸄鸅鸆鸇鸈鸉鸊鸋鸌鸍鸎鸏鸐鸑鸒鸓鸔鸕鸖鸗鸘鸙鸚鸛鸜鸝鸞鸤鸧鸮鸰鸴鸻鸼鹀鹍鹐鹒鹓鹔鹖鹙鹝鹟鹠鹡鹢鹥鹮鹯鹲鹴鹵鹶鹷鹸鹹鹺鹻鹼鹽麀�麁麃麄麅麆麉麊麌麍麎麏麐麑麔麕麖麗麘麙麚麛麜麞麠麡麢麣麤麥麧麨麩麪�����������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[251].length; ++j) if(D[251][j].charCodeAt(0) !== 0xFFFD) { e[D[251][j]] = 64256 + j; d[64256 + j] = D[251][j];}\nD[252] = \"����������������������������������������������������������������麫麬麭麮麯麰麱麲麳麵麶麷麹麺麼麿黀黁黂黃黅黆黇黈黊黋黌黐黒黓黕黖黗黙黚點黡黣黤黦黨黫黬黭黮黰黱黲黳黴黵黶黷黸黺黽黿鼀鼁鼂鼃鼄鼅�鼆鼇鼈鼉鼊鼌鼏鼑鼒鼔鼕鼖鼘鼚鼛鼜鼝鼞鼟鼡鼣鼤鼥鼦鼧鼨鼩鼪鼫鼭鼮鼰鼱�����������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[252].length; ++j) if(D[252][j].charCodeAt(0) !== 0xFFFD) { e[D[252][j]] = 64512 + j; d[64512 + j] = D[252][j];}\nD[253] = \"����������������������������������������������������������������鼲鼳鼴鼵鼶鼸鼺鼼鼿齀齁齂齃齅齆齇齈齉齊齋齌齍齎齏齒齓齔齕齖齗齘齙齚齛齜齝齞齟齠齡齢齣齤齥齦齧齨齩齪齫齬齭齮齯齰齱齲齳齴齵齶齷齸�齹齺齻齼齽齾龁龂龍龎龏龐龑龒龓龔龕龖龗龘龜龝龞龡龢龣龤龥郎凉秊裏隣�����������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[253].length; ++j) if(D[253][j].charCodeAt(0) !== 0xFFFD) { e[D[253][j]] = 64768 + j; d[64768 + j] = D[253][j];}\nD[254] = \"����������������������������������������������������������������兀嗀﨎﨏﨑﨓﨔礼﨟蘒﨡﨣﨤﨧﨨﨩��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[254].length; ++j) if(D[254][j].charCodeAt(0) !== 0xFFFD) { e[D[254][j]] = 65024 + j; d[65024 + j] = D[254][j];}\nreturn {\"enc\": e, \"dec\": d }; })();\ncptable[949] = (function(){ var d = [], e = {}, D = [], j;\nD[0] = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~��������������������������������������������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[0].length; ++j) if(D[0][j].charCodeAt(0) !== 0xFFFD) { e[D[0][j]] = 0 + j; d[0 + j] = D[0][j];}\nD[129] = \"�����������������������������������������������������������������갂갃갅갆갋갌갍갎갏갘갞갟갡갢갣갥갦갧갨갩갪갫갮갲갳갴������갵갶갷갺갻갽갾갿걁걂걃걄걅걆걇걈걉걊걌걎걏걐걑걒걓걕������걖걗걙걚걛걝걞걟걠걡걢걣걤걥걦걧걨걩걪걫걬걭걮걯걲걳걵걶걹걻걼걽걾걿겂겇겈겍겎겏겑겒겓겕겖겗겘겙겚겛겞겢겣겤겥겦겧겫겭겮겱겲겳겴겵겶겷겺겾겿곀곂곃곅곆곇곉곊곋곍곎곏곐곑곒곓곔곖곘곙곚곛곜곝곞곟곢곣곥곦곩곫곭곮곲곴곷곸곹곺곻곾곿괁괂괃괅괇괈괉괊괋괎괐괒괓�\".split(\"\");\nfor(j = 0; j != D[129].length; ++j) if(D[129][j].charCodeAt(0) !== 0xFFFD) { e[D[129][j]] = 33024 + j; d[33024 + j] = D[129][j];}\nD[130] = \"�����������������������������������������������������������������괔괕괖괗괙괚괛괝괞괟괡괢괣괤괥괦괧괨괪괫괮괯괰괱괲괳������괶괷괹괺괻괽괾괿굀굁굂굃굆굈굊굋굌굍굎굏굑굒굓굕굖굗������굙굚굛굜굝굞굟굠굢굤굥굦굧굨굩굪굫굮굯굱굲굷굸굹굺굾궀궃궄궅궆궇궊궋궍궎궏궑궒궓궔궕궖궗궘궙궚궛궞궟궠궡궢궣궥궦궧궨궩궪궫궬궭궮궯궰궱궲궳궴궵궶궸궹궺궻궼궽궾궿귂귃귅귆귇귉귊귋귌귍귎귏귒귔귕귖귗귘귙귚귛귝귞귟귡귢귣귥귦귧귨귩귪귫귬귭귮귯귰귱귲귳귴귵귶귷�\".split(\"\");\nfor(j = 0; j != D[130].length; ++j) if(D[130][j].charCodeAt(0) !== 0xFFFD) { e[D[130][j]] = 33280 + j; d[33280 + j] = D[130][j];}\nD[131] = \"�����������������������������������������������������������������귺귻귽귾긂긃긄긅긆긇긊긌긎긏긐긑긒긓긕긖긗긘긙긚긛긜������긝긞긟긠긡긢긣긤긥긦긧긨긩긪긫긬긭긮긯긲긳긵긶긹긻긼������긽긾긿깂깄깇깈깉깋깏깑깒깓깕깗깘깙깚깛깞깢깣깤깦깧깪깫깭깮깯깱깲깳깴깵깶깷깺깾깿꺀꺁꺂꺃꺆꺇꺈꺉꺊꺋꺍꺎꺏꺐꺑꺒꺓꺔꺕꺖꺗꺘꺙꺚꺛꺜꺝꺞꺟꺠꺡꺢꺣꺤꺥꺦꺧꺨꺩꺪꺫꺬꺭꺮꺯꺰꺱꺲꺳꺴꺵꺶꺷꺸꺹꺺꺻꺿껁껂껃껅껆껇껈껉껊껋껎껒껓껔껕껖껗껚껛껝껞껟껠껡껢껣껤껥�\".split(\"\");\nfor(j = 0; j != D[131].length; ++j) if(D[131][j].charCodeAt(0) !== 0xFFFD) { e[D[131][j]] = 33536 + j; d[33536 + j] = D[131][j];}\nD[132] = \"�����������������������������������������������������������������껦껧껩껪껬껮껯껰껱껲껳껵껶껷껹껺껻껽껾껿꼀꼁꼂꼃꼄꼅������꼆꼉꼊꼋꼌꼎꼏꼑꼒꼓꼔꼕꼖꼗꼘꼙꼚꼛꼜꼝꼞꼟꼠꼡꼢꼣������꼤꼥꼦꼧꼨꼩꼪꼫꼮꼯꼱꼳꼵꼶꼷꼸꼹꼺꼻꼾꽀꽄꽅꽆꽇꽊꽋꽌꽍꽎꽏꽑꽒꽓꽔꽕꽖꽗꽘꽙꽚꽛꽞꽟꽠꽡꽢꽣꽦꽧꽨꽩꽪꽫꽬꽭꽮꽯꽰꽱꽲꽳꽴꽵꽶꽷꽸꽺꽻꽼꽽꽾꽿꾁꾂꾃꾅꾆꾇꾉꾊꾋꾌꾍꾎꾏꾒꾓꾔꾖꾗꾘꾙꾚꾛꾝꾞꾟꾠꾡꾢꾣꾤꾥꾦꾧꾨꾩꾪꾫꾬꾭꾮꾯꾰꾱꾲꾳꾴꾵꾶꾷꾺꾻꾽꾾�\".split(\"\");\nfor(j = 0; j != D[132].length; ++j) if(D[132][j].charCodeAt(0) !== 0xFFFD) { e[D[132][j]] = 33792 + j; d[33792 + j] = D[132][j];}\nD[133] = \"�����������������������������������������������������������������꾿꿁꿂꿃꿄꿅꿆꿊꿌꿏꿐꿑꿒꿓꿕꿖꿗꿘꿙꿚꿛꿝꿞꿟꿠꿡������꿢꿣꿤꿥꿦꿧꿪꿫꿬꿭꿮꿯꿲꿳꿵꿶꿷꿹꿺꿻꿼꿽꿾꿿뀂뀃������뀅뀆뀇뀈뀉뀊뀋뀍뀎뀏뀑뀒뀓뀕뀖뀗뀘뀙뀚뀛뀞뀟뀠뀡뀢뀣뀤뀥뀦뀧뀩뀪뀫뀬뀭뀮뀯뀰뀱뀲뀳뀴뀵뀶뀷뀸뀹뀺뀻뀼뀽뀾뀿끀끁끂끃끆끇끉끋끍끏끐끑끒끖끘끚끛끜끞끟끠끡끢끣끤끥끦끧끨끩끪끫끬끭끮끯끰끱끲끳끴끵끶끷끸끹끺끻끾끿낁낂낃낅낆낇낈낉낊낋낎낐낒낓낔낕낖낗낛낝낞낣낤�\".split(\"\");\nfor(j = 0; j != D[133].length; ++j) if(D[133][j].charCodeAt(0) !== 0xFFFD) { e[D[133][j]] = 34048 + j; d[34048 + j] = D[133][j];}\nD[134] = \"�����������������������������������������������������������������낥낦낧낪낰낲낶낷낹낺낻낽낾낿냀냁냂냃냆냊냋냌냍냎냏냒������냓냕냖냗냙냚냛냜냝냞냟냡냢냣냤냦냧냨냩냪냫냬냭냮냯냰������냱냲냳냴냵냶냷냸냹냺냻냼냽냾냿넀넁넂넃넄넅넆넇넊넍넎넏넑넔넕넖넗넚넞넟넠넡넢넦넧넩넪넫넭넮넯넰넱넲넳넶넺넻넼넽넾넿녂녃녅녆녇녉녊녋녌녍녎녏녒녓녖녗녙녚녛녝녞녟녡녢녣녤녥녦녧녨녩녪녫녬녭녮녯녰녱녲녳녴녵녶녷녺녻녽녾녿놁놃놄놅놆놇놊놌놎놏놐놑놕놖놗놙놚놛놝�\".split(\"\");\nfor(j = 0; j != D[134].length; ++j) if(D[134][j].charCodeAt(0) !== 0xFFFD) { e[D[134][j]] = 34304 + j; d[34304 + j] = D[134][j];}\nD[135] = \"�����������������������������������������������������������������놞놟놠놡놢놣놤놥놦놧놩놪놫놬놭놮놯놰놱놲놳놴놵놶놷놸������놹놺놻놼놽놾놿뇀뇁뇂뇃뇄뇅뇆뇇뇈뇉뇊뇋뇍뇎뇏뇑뇒뇓뇕������뇖뇗뇘뇙뇚뇛뇞뇠뇡뇢뇣뇤뇥뇦뇧뇪뇫뇭뇮뇯뇱뇲뇳뇴뇵뇶뇷뇸뇺뇼뇾뇿눀눁눂눃눆눇눉눊눍눎눏눐눑눒눓눖눘눚눛눜눝눞눟눡눢눣눤눥눦눧눨눩눪눫눬눭눮눯눰눱눲눳눵눶눷눸눹눺눻눽눾눿뉀뉁뉂뉃뉄뉅뉆뉇뉈뉉뉊뉋뉌뉍뉎뉏뉐뉑뉒뉓뉔뉕뉖뉗뉙뉚뉛뉝뉞뉟뉡뉢뉣뉤뉥뉦뉧뉪뉫뉬뉭뉮�\".split(\"\");\nfor(j = 0; j != D[135].length; ++j) if(D[135][j].charCodeAt(0) !== 0xFFFD) { e[D[135][j]] = 34560 + j; d[34560 + j] = D[135][j];}\nD[136] = \"�����������������������������������������������������������������뉯뉰뉱뉲뉳뉶뉷뉸뉹뉺뉻뉽뉾뉿늀늁늂늃늆늇늈늊늋늌늍늎������늏늒늓늕늖늗늛늜늝늞늟늢늤늧늨늩늫늭늮늯늱늲늳늵늶늷������늸늹늺늻늼늽늾늿닀닁닂닃닄닅닆닇닊닋닍닎닏닑닓닔닕닖닗닚닜닞닟닠닡닣닧닩닪닰닱닲닶닼닽닾댂댃댅댆댇댉댊댋댌댍댎댏댒댖댗댘댙댚댛댝댞댟댠댡댢댣댤댥댦댧댨댩댪댫댬댭댮댯댰댱댲댳댴댵댶댷댸댹댺댻댼댽댾댿덀덁덂덃덄덅덆덇덈덉덊덋덌덍덎덏덐덑덒덓덗덙덚덝덠덡덢덣�\".split(\"\");\nfor(j = 0; j != D[136].length; ++j) if(D[136][j].charCodeAt(0) !== 0xFFFD) { e[D[136][j]] = 34816 + j; d[34816 + j] = D[136][j];}\nD[137] = \"�����������������������������������������������������������������덦덨덪덬덭덯덲덳덵덶덷덹덺덻덼덽덾덿뎂뎆뎇뎈뎉뎊뎋뎍������뎎뎏뎑뎒뎓뎕뎖뎗뎘뎙뎚뎛뎜뎝뎞뎟뎢뎣뎤뎥뎦뎧뎩뎪뎫뎭������뎮뎯뎰뎱뎲뎳뎴뎵뎶뎷뎸뎹뎺뎻뎼뎽뎾뎿돀돁돂돃돆돇돉돊돍돏돑돒돓돖돘돚돜돞돟돡돢돣돥돦돧돩돪돫돬돭돮돯돰돱돲돳돴돵돶돷돸돹돺돻돽돾돿됀됁됂됃됄됅됆됇됈됉됊됋됌됍됎됏됑됒됓됔됕됖됗됙됚됛됝됞됟됡됢됣됤됥됦됧됪됬됭됮됯됰됱됲됳됵됶됷됸됹됺됻됼됽됾됿둀둁둂둃둄�\".split(\"\");\nfor(j = 0; j != D[137].length; ++j) if(D[137][j].charCodeAt(0) !== 0xFFFD) { e[D[137][j]] = 35072 + j; d[35072 + j] = D[137][j];}\nD[138] = \"�����������������������������������������������������������������둅둆둇둈둉둊둋둌둍둎둏둒둓둕둖둗둙둚둛둜둝둞둟둢둤둦������둧둨둩둪둫둭둮둯둰둱둲둳둴둵둶둷둸둹둺둻둼둽둾둿뒁뒂������뒃뒄뒅뒆뒇뒉뒊뒋뒌뒍뒎뒏뒐뒑뒒뒓뒔뒕뒖뒗뒘뒙뒚뒛뒜뒞뒟뒠뒡뒢뒣뒥뒦뒧뒩뒪뒫뒭뒮뒯뒰뒱뒲뒳뒴뒶뒸뒺뒻뒼뒽뒾뒿듁듂듃듅듆듇듉듊듋듌듍듎듏듑듒듓듔듖듗듘듙듚듛듞듟듡듢듥듧듨듩듪듫듮듰듲듳듴듵듶듷듹듺듻듼듽듾듿딀딁딂딃딄딅딆딇딈딉딊딋딌딍딎딏딐딑딒딓딖딗딙딚딝�\".split(\"\");\nfor(j = 0; j != D[138].length; ++j) if(D[138][j].charCodeAt(0) !== 0xFFFD) { e[D[138][j]] = 35328 + j; d[35328 + j] = D[138][j];}\nD[139] = \"�����������������������������������������������������������������딞딟딠딡딢딣딦딫딬딭딮딯딲딳딵딶딷딹딺딻딼딽딾딿땂땆������땇땈땉땊땎땏땑땒땓땕땖땗땘땙땚땛땞땢땣땤땥땦땧땨땩땪������땫땬땭땮땯땰땱땲땳땴땵땶땷땸땹땺땻땼땽땾땿떀떁떂떃떄떅떆떇떈떉떊떋떌떍떎떏떐떑떒떓떔떕떖떗떘떙떚떛떜떝떞떟떢떣떥떦떧떩떬떭떮떯떲떶떷떸떹떺떾떿뗁뗂뗃뗅뗆뗇뗈뗉뗊뗋뗎뗒뗓뗔뗕뗖뗗뗙뗚뗛뗜뗝뗞뗟뗠뗡뗢뗣뗤뗥뗦뗧뗨뗩뗪뗫뗭뗮뗯뗰뗱뗲뗳뗴뗵뗶뗷뗸뗹뗺뗻뗼뗽뗾뗿�\".split(\"\");\nfor(j = 0; j != D[139].length; ++j) if(D[139][j].charCodeAt(0) !== 0xFFFD) { e[D[139][j]] = 35584 + j; d[35584 + j] = D[139][j];}\nD[140] = \"�����������������������������������������������������������������똀똁똂똃똄똅똆똇똈똉똊똋똌똍똎똏똒똓똕똖똗똙똚똛똜똝������똞똟똠똡똢똣똤똦똧똨똩똪똫똭똮똯똰똱똲똳똵똶똷똸똹똺������똻똼똽똾똿뙀뙁뙂뙃뙄뙅뙆뙇뙉뙊뙋뙌뙍뙎뙏뙐뙑뙒뙓뙔뙕뙖뙗뙘뙙뙚뙛뙜뙝뙞뙟뙠뙡뙢뙣뙥뙦뙧뙩뙪뙫뙬뙭뙮뙯뙰뙱뙲뙳뙴뙵뙶뙷뙸뙹뙺뙻뙼뙽뙾뙿뚀뚁뚂뚃뚄뚅뚆뚇뚈뚉뚊뚋뚌뚍뚎뚏뚐뚑뚒뚓뚔뚕뚖뚗뚘뚙뚚뚛뚞뚟뚡뚢뚣뚥뚦뚧뚨뚩뚪뚭뚮뚯뚰뚲뚳뚴뚵뚶뚷뚸뚹뚺뚻뚼뚽뚾뚿뛀뛁뛂�\".split(\"\");\nfor(j = 0; j != D[140].length; ++j) if(D[140][j].charCodeAt(0) !== 0xFFFD) { e[D[140][j]] = 35840 + j; d[35840 + j] = D[140][j];}\nD[141] = \"�����������������������������������������������������������������뛃뛄뛅뛆뛇뛈뛉뛊뛋뛌뛍뛎뛏뛐뛑뛒뛓뛕뛖뛗뛘뛙뛚뛛뛜뛝������뛞뛟뛠뛡뛢뛣뛤뛥뛦뛧뛨뛩뛪뛫뛬뛭뛮뛯뛱뛲뛳뛵뛶뛷뛹뛺������뛻뛼뛽뛾뛿뜂뜃뜄뜆뜇뜈뜉뜊뜋뜌뜍뜎뜏뜐뜑뜒뜓뜔뜕뜖뜗뜘뜙뜚뜛뜜뜝뜞뜟뜠뜡뜢뜣뜤뜥뜦뜧뜪뜫뜭뜮뜱뜲뜳뜴뜵뜶뜷뜺뜼뜽뜾뜿띀띁띂띃띅띆띇띉띊띋띍띎띏띐띑띒띓띖띗띘띙띚띛띜띝띞띟띡띢띣띥띦띧띩띪띫띬띭띮띯띲띴띶띷띸띹띺띻띾띿랁랂랃랅랆랇랈랉랊랋랎랓랔랕랚랛랝랞�\".split(\"\");\nfor(j = 0; j != D[141].length; ++j) if(D[141][j].charCodeAt(0) !== 0xFFFD) { e[D[141][j]] = 36096 + j; d[36096 + j] = D[141][j];}\nD[142] = \"�����������������������������������������������������������������랟랡랢랣랤랥랦랧랪랮랯랰랱랲랳랶랷랹랺랻랼랽랾랿럀럁������럂럃럄럅럆럈럊럋럌럍럎럏럐럑럒럓럔럕럖럗럘럙럚럛럜럝������럞럟럠럡럢럣럤럥럦럧럨럩럪럫럮럯럱럲럳럵럶럷럸럹럺럻럾렂렃렄렅렆렊렋렍렎렏렑렒렓렔렕렖렗렚렜렞렟렠렡렢렣렦렧렩렪렫렭렮렯렰렱렲렳렶렺렻렼렽렾렿롁롂롃롅롆롇롈롉롊롋롌롍롎롏롐롒롔롕롖롗롘롙롚롛롞롟롡롢롣롥롦롧롨롩롪롫롮롰롲롳롴롵롶롷롹롺롻롽롾롿뢀뢁뢂뢃뢄�\".split(\"\");\nfor(j = 0; j != D[142].length; ++j) if(D[142][j].charCodeAt(0) !== 0xFFFD) { e[D[142][j]] = 36352 + j; d[36352 + j] = D[142][j];}\nD[143] = \"�����������������������������������������������������������������뢅뢆뢇뢈뢉뢊뢋뢌뢎뢏뢐뢑뢒뢓뢔뢕뢖뢗뢘뢙뢚뢛뢜뢝뢞뢟������뢠뢡뢢뢣뢤뢥뢦뢧뢩뢪뢫뢬뢭뢮뢯뢱뢲뢳뢵뢶뢷뢹뢺뢻뢼뢽������뢾뢿룂룄룆룇룈룉룊룋룍룎룏룑룒룓룕룖룗룘룙룚룛룜룞룠룢룣룤룥룦룧룪룫룭룮룯룱룲룳룴룵룶룷룺룼룾룿뤀뤁뤂뤃뤅뤆뤇뤈뤉뤊뤋뤌뤍뤎뤏뤐뤑뤒뤓뤔뤕뤖뤗뤙뤚뤛뤜뤝뤞뤟뤡뤢뤣뤤뤥뤦뤧뤨뤩뤪뤫뤬뤭뤮뤯뤰뤱뤲뤳뤴뤵뤶뤷뤸뤹뤺뤻뤾뤿륁륂륃륅륆륇륈륉륊륋륍륎륐륒륓륔륕륖륗�\".split(\"\");\nfor(j = 0; j != D[143].length; ++j) if(D[143][j].charCodeAt(0) !== 0xFFFD) { e[D[143][j]] = 36608 + j; d[36608 + j] = D[143][j];}\nD[144] = \"�����������������������������������������������������������������륚륛륝륞륟륡륢륣륤륥륦륧륪륬륮륯륰륱륲륳륶륷륹륺륻륽������륾륿릀릁릂릃릆릈릋릌릏릐릑릒릓릔릕릖릗릘릙릚릛릜릝릞������릟릠릡릢릣릤릥릦릧릨릩릪릫릮릯릱릲릳릵릶릷릸릹릺릻릾맀맂맃맄맅맆맇맊맋맍맓맔맕맖맗맚맜맟맠맢맦맧맩맪맫맭맮맯맰맱맲맳맶맻맼맽맾맿먂먃먄먅먆먇먉먊먋먌먍먎먏먐먑먒먓먔먖먗먘먙먚먛먜먝먞먟먠먡먢먣먤먥먦먧먨먩먪먫먬먭먮먯먰먱먲먳먴먵먶먷먺먻먽먾먿멁멃멄멅멆�\".split(\"\");\nfor(j = 0; j != D[144].length; ++j) if(D[144][j].charCodeAt(0) !== 0xFFFD) { e[D[144][j]] = 36864 + j; d[36864 + j] = D[144][j];}\nD[145] = \"�����������������������������������������������������������������멇멊멌멏멐멑멒멖멗멙멚멛멝멞멟멠멡멢멣멦멪멫멬멭멮멯������멲멳멵멶멷멹멺멻멼멽멾멿몀몁몂몆몈몉몊몋몍몎몏몐몑몒������몓몔몕몖몗몘몙몚몛몜몝몞몟몠몡몢몣몤몥몦몧몪몭몮몯몱몳몴몵몶몷몺몼몾몿뫀뫁뫂뫃뫅뫆뫇뫉뫊뫋뫌뫍뫎뫏뫐뫑뫒뫓뫔뫕뫖뫗뫚뫛뫜뫝뫞뫟뫠뫡뫢뫣뫤뫥뫦뫧뫨뫩뫪뫫뫬뫭뫮뫯뫰뫱뫲뫳뫴뫵뫶뫷뫸뫹뫺뫻뫽뫾뫿묁묂묃묅묆묇묈묉묊묋묌묎묐묒묓묔묕묖묗묙묚묛묝묞묟묡묢묣묤묥묦묧�\".split(\"\");\nfor(j = 0; j != D[145].length; ++j) if(D[145][j].charCodeAt(0) !== 0xFFFD) { e[D[145][j]] = 37120 + j; d[37120 + j] = D[145][j];}\nD[146] = \"�����������������������������������������������������������������묨묪묬묭묮묯묰묱묲묳묷묹묺묿뭀뭁뭂뭃뭆뭈뭊뭋뭌뭎뭑뭒������뭓뭕뭖뭗뭙뭚뭛뭜뭝뭞뭟뭠뭢뭤뭥뭦뭧뭨뭩뭪뭫뭭뭮뭯뭰뭱������뭲뭳뭴뭵뭶뭷뭸뭹뭺뭻뭼뭽뭾뭿뮀뮁뮂뮃뮄뮅뮆뮇뮉뮊뮋뮍뮎뮏뮑뮒뮓뮔뮕뮖뮗뮘뮙뮚뮛뮜뮝뮞뮟뮠뮡뮢뮣뮥뮦뮧뮩뮪뮫뮭뮮뮯뮰뮱뮲뮳뮵뮶뮸뮹뮺뮻뮼뮽뮾뮿믁믂믃믅믆믇믉믊믋믌믍믎믏믑믒믔믕믖믗믘믙믚믛믜믝믞믟믠믡믢믣믤믥믦믧믨믩믪믫믬믭믮믯믰믱믲믳믴믵믶믷믺믻믽믾밁�\".split(\"\");\nfor(j = 0; j != D[146].length; ++j) if(D[146][j].charCodeAt(0) !== 0xFFFD) { e[D[146][j]] = 37376 + j; d[37376 + j] = D[146][j];}\nD[147] = \"�����������������������������������������������������������������밃밄밅밆밇밊밎밐밒밓밙밚밠밡밢밣밦밨밪밫밬밮밯밲밳밵������밶밷밹밺밻밼밽밾밿뱂뱆뱇뱈뱊뱋뱎뱏뱑뱒뱓뱔뱕뱖뱗뱘뱙������뱚뱛뱜뱞뱟뱠뱡뱢뱣뱤뱥뱦뱧뱨뱩뱪뱫뱬뱭뱮뱯뱰뱱뱲뱳뱴뱵뱶뱷뱸뱹뱺뱻뱼뱽뱾뱿벀벁벂벃벆벇벉벊벍벏벐벑벒벓벖벘벛벜벝벞벟벢벣벥벦벩벪벫벬벭벮벯벲벶벷벸벹벺벻벾벿볁볂볃볅볆볇볈볉볊볋볌볎볒볓볔볖볗볙볚볛볝볞볟볠볡볢볣볤볥볦볧볨볩볪볫볬볭볮볯볰볱볲볳볷볹볺볻볽�\".split(\"\");\nfor(j = 0; j != D[147].length; ++j) if(D[147][j].charCodeAt(0) !== 0xFFFD) { e[D[147][j]] = 37632 + j; d[37632 + j] = D[147][j];}\nD[148] = \"�����������������������������������������������������������������볾볿봀봁봂봃봆봈봊봋봌봍봎봏봑봒봓봕봖봗봘봙봚봛봜봝������봞봟봠봡봢봣봥봦봧봨봩봪봫봭봮봯봰봱봲봳봴봵봶봷봸봹������봺봻봼봽봾봿뵁뵂뵃뵄뵅뵆뵇뵊뵋뵍뵎뵏뵑뵒뵓뵔뵕뵖뵗뵚뵛뵜뵝뵞뵟뵠뵡뵢뵣뵥뵦뵧뵩뵪뵫뵬뵭뵮뵯뵰뵱뵲뵳뵴뵵뵶뵷뵸뵹뵺뵻뵼뵽뵾뵿붂붃붅붆붋붌붍붎붏붒붔붖붗붘붛붝붞붟붠붡붢붣붥붦붧붨붩붪붫붬붭붮붯붱붲붳붴붵붶붷붹붺붻붼붽붾붿뷀뷁뷂뷃뷄뷅뷆뷇뷈뷉뷊뷋뷌뷍뷎뷏뷐뷑�\".split(\"\");\nfor(j = 0; j != D[148].length; ++j) if(D[148][j].charCodeAt(0) !== 0xFFFD) { e[D[148][j]] = 37888 + j; d[37888 + j] = D[148][j];}\nD[149] = \"�����������������������������������������������������������������뷒뷓뷖뷗뷙뷚뷛뷝뷞뷟뷠뷡뷢뷣뷤뷥뷦뷧뷨뷪뷫뷬뷭뷮뷯뷱������뷲뷳뷵뷶뷷뷹뷺뷻뷼뷽뷾뷿븁븂븄븆븇븈븉븊븋븎븏븑븒븓������븕븖븗븘븙븚븛븞븠븡븢븣븤븥븦븧븨븩븪븫븬븭븮븯븰븱븲븳븴븵븶븷븸븹븺븻븼븽븾븿빀빁빂빃빆빇빉빊빋빍빏빐빑빒빓빖빘빜빝빞빟빢빣빥빦빧빩빫빬빭빮빯빲빶빷빸빹빺빾빿뺁뺂뺃뺅뺆뺇뺈뺉뺊뺋뺎뺒뺓뺔뺕뺖뺗뺚뺛뺜뺝뺞뺟뺠뺡뺢뺣뺤뺥뺦뺧뺩뺪뺫뺬뺭뺮뺯뺰뺱뺲뺳뺴뺵뺶뺷�\".split(\"\");\nfor(j = 0; j != D[149].length; ++j) if(D[149][j].charCodeAt(0) !== 0xFFFD) { e[D[149][j]] = 38144 + j; d[38144 + j] = D[149][j];}\nD[150] = \"�����������������������������������������������������������������뺸뺹뺺뺻뺼뺽뺾뺿뻀뻁뻂뻃뻄뻅뻆뻇뻈뻉뻊뻋뻌뻍뻎뻏뻒뻓������뻕뻖뻙뻚뻛뻜뻝뻞뻟뻡뻢뻦뻧뻨뻩뻪뻫뻭뻮뻯뻰뻱뻲뻳뻴뻵������뻶뻷뻸뻹뻺뻻뻼뻽뻾뻿뼀뼂뼃뼄뼅뼆뼇뼊뼋뼌뼍뼎뼏뼐뼑뼒뼓뼔뼕뼖뼗뼚뼞뼟뼠뼡뼢뼣뼤뼥뼦뼧뼨뼩뼪뼫뼬뼭뼮뼯뼰뼱뼲뼳뼴뼵뼶뼷뼸뼹뼺뼻뼼뼽뼾뼿뽂뽃뽅뽆뽇뽉뽊뽋뽌뽍뽎뽏뽒뽓뽔뽖뽗뽘뽙뽚뽛뽜뽝뽞뽟뽠뽡뽢뽣뽤뽥뽦뽧뽨뽩뽪뽫뽬뽭뽮뽯뽰뽱뽲뽳뽴뽵뽶뽷뽸뽹뽺뽻뽼뽽뽾뽿뾀뾁뾂�\".split(\"\");\nfor(j = 0; j != D[150].length; ++j) if(D[150][j].charCodeAt(0) !== 0xFFFD) { e[D[150][j]] = 38400 + j; d[38400 + j] = D[150][j];}\nD[151] = \"�����������������������������������������������������������������뾃뾄뾅뾆뾇뾈뾉뾊뾋뾌뾍뾎뾏뾐뾑뾒뾓뾕뾖뾗뾘뾙뾚뾛뾜뾝������뾞뾟뾠뾡뾢뾣뾤뾥뾦뾧뾨뾩뾪뾫뾬뾭뾮뾯뾱뾲뾳뾴뾵뾶뾷뾸������뾹뾺뾻뾼뾽뾾뾿뿀뿁뿂뿃뿄뿆뿇뿈뿉뿊뿋뿎뿏뿑뿒뿓뿕뿖뿗뿘뿙뿚뿛뿝뿞뿠뿢뿣뿤뿥뿦뿧뿨뿩뿪뿫뿬뿭뿮뿯뿰뿱뿲뿳뿴뿵뿶뿷뿸뿹뿺뿻뿼뿽뿾뿿쀀쀁쀂쀃쀄쀅쀆쀇쀈쀉쀊쀋쀌쀍쀎쀏쀐쀑쀒쀓쀔쀕쀖쀗쀘쀙쀚쀛쀜쀝쀞쀟쀠쀡쀢쀣쀤쀥쀦쀧쀨쀩쀪쀫쀬쀭쀮쀯쀰쀱쀲쀳쀴쀵쀶쀷쀸쀹쀺쀻쀽쀾쀿�\".split(\"\");\nfor(j = 0; j != D[151].length; ++j) if(D[151][j].charCodeAt(0) !== 0xFFFD) { e[D[151][j]] = 38656 + j; d[38656 + j] = D[151][j];}\nD[152] = \"�����������������������������������������������������������������쁀쁁쁂쁃쁄쁅쁆쁇쁈쁉쁊쁋쁌쁍쁎쁏쁐쁒쁓쁔쁕쁖쁗쁙쁚쁛������쁝쁞쁟쁡쁢쁣쁤쁥쁦쁧쁪쁫쁬쁭쁮쁯쁰쁱쁲쁳쁴쁵쁶쁷쁸쁹������쁺쁻쁼쁽쁾쁿삀삁삂삃삄삅삆삇삈삉삊삋삌삍삎삏삒삓삕삖삗삙삚삛삜삝삞삟삢삤삦삧삨삩삪삫삮삱삲삷삸삹삺삻삾샂샃샄샆샇샊샋샍샎샏샑샒샓샔샕샖샗샚샞샟샠샡샢샣샦샧샩샪샫샭샮샯샰샱샲샳샶샸샺샻샼샽샾샿섁섂섃섅섆섇섉섊섋섌섍섎섏섑섒섓섔섖섗섘섙섚섛섡섢섥섨섩섪섫섮�\".split(\"\");\nfor(j = 0; j != D[152].length; ++j) if(D[152][j].charCodeAt(0) !== 0xFFFD) { e[D[152][j]] = 38912 + j; d[38912 + j] = D[152][j];}\nD[153] = \"�����������������������������������������������������������������섲섳섴섵섷섺섻섽섾섿셁셂셃셄셅셆셇셊셎셏셐셑셒셓셖셗������셙셚셛셝셞셟셠셡셢셣셦셪셫셬셭셮셯셱셲셳셵셶셷셹셺셻������셼셽셾셿솀솁솂솃솄솆솇솈솉솊솋솏솑솒솓솕솗솘솙솚솛솞솠솢솣솤솦솧솪솫솭솮솯솱솲솳솴솵솶솷솸솹솺솻솼솾솿쇀쇁쇂쇃쇅쇆쇇쇉쇊쇋쇍쇎쇏쇐쇑쇒쇓쇕쇖쇙쇚쇛쇜쇝쇞쇟쇡쇢쇣쇥쇦쇧쇩쇪쇫쇬쇭쇮쇯쇲쇴쇵쇶쇷쇸쇹쇺쇻쇾쇿숁숂숃숅숆숇숈숉숊숋숎숐숒숓숔숕숖숗숚숛숝숞숡숢숣�\".split(\"\");\nfor(j = 0; j != D[153].length; ++j) if(D[153][j].charCodeAt(0) !== 0xFFFD) { e[D[153][j]] = 39168 + j; d[39168 + j] = D[153][j];}\nD[154] = \"�����������������������������������������������������������������숤숥숦숧숪숬숮숰숳숵숶숷숸숹숺숻숼숽숾숿쉀쉁쉂쉃쉄쉅������쉆쉇쉉쉊쉋쉌쉍쉎쉏쉒쉓쉕쉖쉗쉙쉚쉛쉜쉝쉞쉟쉡쉢쉣쉤쉦������쉧쉨쉩쉪쉫쉮쉯쉱쉲쉳쉵쉶쉷쉸쉹쉺쉻쉾슀슂슃슄슅슆슇슊슋슌슍슎슏슑슒슓슔슕슖슗슙슚슜슞슟슠슡슢슣슦슧슩슪슫슮슯슰슱슲슳슶슸슺슻슼슽슾슿싀싁싂싃싄싅싆싇싈싉싊싋싌싍싎싏싐싑싒싓싔싕싖싗싘싙싚싛싞싟싡싢싥싦싧싨싩싪싮싰싲싳싴싵싷싺싽싾싿쌁쌂쌃쌄쌅쌆쌇쌊쌋쌎쌏�\".split(\"\");\nfor(j = 0; j != D[154].length; ++j) if(D[154][j].charCodeAt(0) !== 0xFFFD) { e[D[154][j]] = 39424 + j; d[39424 + j] = D[154][j];}\nD[155] = \"�����������������������������������������������������������������쌐쌑쌒쌖쌗쌙쌚쌛쌝쌞쌟쌠쌡쌢쌣쌦쌧쌪쌫쌬쌭쌮쌯쌰쌱쌲������쌳쌴쌵쌶쌷쌸쌹쌺쌻쌼쌽쌾쌿썀썁썂썃썄썆썇썈썉썊썋썌썍������썎썏썐썑썒썓썔썕썖썗썘썙썚썛썜썝썞썟썠썡썢썣썤썥썦썧썪썫썭썮썯썱썳썴썵썶썷썺썻썾썿쎀쎁쎂쎃쎅쎆쎇쎉쎊쎋쎍쎎쎏쎐쎑쎒쎓쎔쎕쎖쎗쎘쎙쎚쎛쎜쎝쎞쎟쎠쎡쎢쎣쎤쎥쎦쎧쎨쎩쎪쎫쎬쎭쎮쎯쎰쎱쎲쎳쎴쎵쎶쎷쎸쎹쎺쎻쎼쎽쎾쎿쏁쏂쏃쏄쏅쏆쏇쏈쏉쏊쏋쏌쏍쏎쏏쏐쏑쏒쏓쏔쏕쏖쏗쏚�\".split(\"\");\nfor(j = 0; j != D[155].length; ++j) if(D[155][j].charCodeAt(0) !== 0xFFFD) { e[D[155][j]] = 39680 + j; d[39680 + j] = D[155][j];}\nD[156] = \"�����������������������������������������������������������������쏛쏝쏞쏡쏣쏤쏥쏦쏧쏪쏫쏬쏮쏯쏰쏱쏲쏳쏶쏷쏹쏺쏻쏼쏽쏾������쏿쐀쐁쐂쐃쐄쐅쐆쐇쐉쐊쐋쐌쐍쐎쐏쐑쐒쐓쐔쐕쐖쐗쐘쐙쐚������쐛쐜쐝쐞쐟쐠쐡쐢쐣쐥쐦쐧쐨쐩쐪쐫쐭쐮쐯쐱쐲쐳쐵쐶쐷쐸쐹쐺쐻쐾쐿쑀쑁쑂쑃쑄쑅쑆쑇쑉쑊쑋쑌쑍쑎쑏쑐쑑쑒쑓쑔쑕쑖쑗쑘쑙쑚쑛쑜쑝쑞쑟쑠쑡쑢쑣쑦쑧쑩쑪쑫쑭쑮쑯쑰쑱쑲쑳쑶쑷쑸쑺쑻쑼쑽쑾쑿쒁쒂쒃쒄쒅쒆쒇쒈쒉쒊쒋쒌쒍쒎쒏쒐쒑쒒쒓쒕쒖쒗쒘쒙쒚쒛쒝쒞쒟쒠쒡쒢쒣쒤쒥쒦쒧쒨쒩�\".split(\"\");\nfor(j = 0; j != D[156].length; ++j) if(D[156][j].charCodeAt(0) !== 0xFFFD) { e[D[156][j]] = 39936 + j; d[39936 + j] = D[156][j];}\nD[157] = \"�����������������������������������������������������������������쒪쒫쒬쒭쒮쒯쒰쒱쒲쒳쒴쒵쒶쒷쒹쒺쒻쒽쒾쒿쓀쓁쓂쓃쓄쓅������쓆쓇쓈쓉쓊쓋쓌쓍쓎쓏쓐쓑쓒쓓쓔쓕쓖쓗쓘쓙쓚쓛쓜쓝쓞쓟������쓠쓡쓢쓣쓤쓥쓦쓧쓨쓪쓫쓬쓭쓮쓯쓲쓳쓵쓶쓷쓹쓻쓼쓽쓾씂씃씄씅씆씇씈씉씊씋씍씎씏씑씒씓씕씖씗씘씙씚씛씝씞씟씠씡씢씣씤씥씦씧씪씫씭씮씯씱씲씳씴씵씶씷씺씼씾씿앀앁앂앃앆앇앋앏앐앑앒앖앚앛앜앟앢앣앥앦앧앩앪앫앬앭앮앯앲앶앷앸앹앺앻앾앿얁얂얃얅얆얈얉얊얋얎얐얒얓얔�\".split(\"\");\nfor(j = 0; j != D[157].length; ++j) if(D[157][j].charCodeAt(0) !== 0xFFFD) { e[D[157][j]] = 40192 + j; d[40192 + j] = D[157][j];}\nD[158] = \"�����������������������������������������������������������������얖얙얚얛얝얞얟얡얢얣얤얥얦얧얨얪얫얬얭얮얯얰얱얲얳얶������얷얺얿엀엁엂엃엋엍엏엒엓엕엖엗엙엚엛엜엝엞엟엢엤엦엧������엨엩엪엫엯엱엲엳엵엸엹엺엻옂옃옄옉옊옋옍옎옏옑옒옓옔옕옖옗옚옝옞옟옠옡옢옣옦옧옩옪옫옯옱옲옶옸옺옼옽옾옿왂왃왅왆왇왉왊왋왌왍왎왏왒왖왗왘왙왚왛왞왟왡왢왣왤왥왦왧왨왩왪왫왭왮왰왲왳왴왵왶왷왺왻왽왾왿욁욂욃욄욅욆욇욊욌욎욏욐욑욒욓욖욗욙욚욛욝욞욟욠욡욢욣욦�\".split(\"\");\nfor(j = 0; j != D[158].length; ++j) if(D[158][j].charCodeAt(0) !== 0xFFFD) { e[D[158][j]] = 40448 + j; d[40448 + j] = D[158][j];}\nD[159] = \"�����������������������������������������������������������������욨욪욫욬욭욮욯욲욳욵욶욷욻욼욽욾욿웂웄웆웇웈웉웊웋웎������웏웑웒웓웕웖웗웘웙웚웛웞웟웢웣웤웥웦웧웪웫웭웮웯웱웲������웳웴웵웶웷웺웻웼웾웿윀윁윂윃윆윇윉윊윋윍윎윏윐윑윒윓윖윘윚윛윜윝윞윟윢윣윥윦윧윩윪윫윬윭윮윯윲윴윶윸윹윺윻윾윿읁읂읃읅읆읇읈읉읋읎읐읙읚읛읝읞읟읡읢읣읤읥읦읧읩읪읬읭읮읯읰읱읲읳읶읷읹읺읻읿잀잁잂잆잋잌잍잏잒잓잕잙잛잜잝잞잟잢잧잨잩잪잫잮잯잱잲잳잵잶잷�\".split(\"\");\nfor(j = 0; j != D[159].length; ++j) if(D[159][j].charCodeAt(0) !== 0xFFFD) { e[D[159][j]] = 40704 + j; d[40704 + j] = D[159][j];}\nD[160] = \"�����������������������������������������������������������������잸잹잺잻잾쟂쟃쟄쟅쟆쟇쟊쟋쟍쟏쟑쟒쟓쟔쟕쟖쟗쟙쟚쟛쟜������쟞쟟쟠쟡쟢쟣쟥쟦쟧쟩쟪쟫쟭쟮쟯쟰쟱쟲쟳쟴쟵쟶쟷쟸쟹쟺������쟻쟼쟽쟾쟿젂젃젅젆젇젉젋젌젍젎젏젒젔젗젘젙젚젛젞젟젡젢젣젥젦젧젨젩젪젫젮젰젲젳젴젵젶젷젹젺젻젽젾젿졁졂졃졄졅졆졇졊졋졎졏졐졑졒졓졕졖졗졘졙졚졛졜졝졞졟졠졡졢졣졤졥졦졧졨졩졪졫졬졭졮졯졲졳졵졶졷졹졻졼졽졾졿좂좄좈좉좊좎좏좐좑좒좓좕좖좗좘좙좚좛좜좞좠좢좣좤�\".split(\"\");\nfor(j = 0; j != D[160].length; ++j) if(D[160][j].charCodeAt(0) !== 0xFFFD) { e[D[160][j]] = 40960 + j; d[40960 + j] = D[160][j];}\nD[161] = \"�����������������������������������������������������������������좥좦좧좩좪좫좬좭좮좯좰좱좲좳좴좵좶좷좸좹좺좻좾좿죀죁������죂죃죅죆죇죉죊죋죍죎죏죐죑죒죓죖죘죚죛죜죝죞죟죢죣죥������죦죧죨죩죪죫죬죭죮죯죰죱죲죳죴죶죷죸죹죺죻죾죿줁줂줃줇줈줉줊줋줎 、。·‥…¨〃­―∥\∼‘’“”〔〕〈〉《》「」『』【】±×÷≠≤≥∞∴°′″℃Å¢£¥♂♀∠⊥⌒∂∇≡≒§※☆★○●◎◇◆□■△▲▽▼→←↑↓↔〓≪≫√∽∝∵∫∬∈∋⊆⊇⊂⊃∪∩∧∨¬�\".split(\"\");\nfor(j = 0; j != D[161].length; ++j) if(D[161][j].charCodeAt(0) !== 0xFFFD) { e[D[161][j]] = 41216 + j; d[41216 + j] = D[161][j];}\nD[162] = \"�����������������������������������������������������������������줐줒줓줔줕줖줗줙줚줛줜줝줞줟줠줡줢줣줤줥줦줧줨줩줪줫������줭줮줯줰줱줲줳줵줶줷줸줹줺줻줼줽줾줿쥀쥁쥂쥃쥄쥅쥆쥇������쥈쥉쥊쥋쥌쥍쥎쥏쥒쥓쥕쥖쥗쥙쥚쥛쥜쥝쥞쥟쥢쥤쥥쥦쥧쥨쥩쥪쥫쥭쥮쥯⇒⇔∀∃´~ˇ˘˝˚˙¸˛¡¿ː∮∑∏¤℉‰◁◀▷▶♤♠♡♥♧♣⊙◈▣◐◑▒▤▥▨▧▦▩♨☏☎☜☞¶†‡↕↗↙↖↘♭♩♪♬㉿㈜№㏇™㏂㏘℡€®������������������������\".split(\"\");\nfor(j = 0; j != D[162].length; ++j) if(D[162][j].charCodeAt(0) !== 0xFFFD) { e[D[162][j]] = 41472 + j; d[41472 + j] = D[162][j];}\nD[163] = \"�����������������������������������������������������������������쥱쥲쥳쥵쥶쥷쥸쥹쥺쥻쥽쥾쥿즀즁즂즃즄즅즆즇즊즋즍즎즏������즑즒즓즔즕즖즗즚즜즞즟즠즡즢즣즤즥즦즧즨즩즪즫즬즭즮������즯즰즱즲즳즴즵즶즷즸즹즺즻즼즽즾즿짂짃짅짆짉짋짌짍짎짏짒짔짗짘짛!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[₩]^_`abcdefghijklmnopqrstuvwxyz{|} ̄�\".split(\"\");\nfor(j = 0; j != D[163].length; ++j) if(D[163][j].charCodeAt(0) !== 0xFFFD) { e[D[163][j]] = 41728 + j; d[41728 + j] = D[163][j];}\nD[164] = \"�����������������������������������������������������������������짞짟짡짣짥짦짨짩짪짫짮짲짳짴짵짶짷짺짻짽짾짿쨁쨂쨃쨄������쨅쨆쨇쨊쨎쨏쨐쨑쨒쨓쨕쨖쨗쨙쨚쨛쨜쨝쨞쨟쨠쨡쨢쨣쨤쨥������쨦쨧쨨쨪쨫쨬쨭쨮쨯쨰쨱쨲쨳쨴쨵쨶쨷쨸쨹쨺쨻쨼쨽쨾쨿쩀쩁쩂쩃쩄쩅쩆ㄱㄲㄳㄴㄵㄶㄷㄸㄹㄺㄻㄼㄽㄾㄿㅀㅁㅂㅃㅄㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣㅤㅥㅦㅧㅨㅩㅪㅫㅬㅭㅮㅯㅰㅱㅲㅳㅴㅵㅶㅷㅸㅹㅺㅻㅼㅽㅾㅿㆀㆁㆂㆃㆄㆅㆆㆇㆈㆉㆊㆋㆌㆍㆎ�\".split(\"\");\nfor(j = 0; j != D[164].length; ++j) if(D[164][j].charCodeAt(0) !== 0xFFFD) { e[D[164][j]] = 41984 + j; d[41984 + j] = D[164][j];}\nD[165] = \"�����������������������������������������������������������������쩇쩈쩉쩊쩋쩎쩏쩑쩒쩓쩕쩖쩗쩘쩙쩚쩛쩞쩢쩣쩤쩥쩦쩧쩩쩪������쩫쩬쩭쩮쩯쩰쩱쩲쩳쩴쩵쩶쩷쩸쩹쩺쩻쩼쩾쩿쪀쪁쪂쪃쪅쪆������쪇쪈쪉쪊쪋쪌쪍쪎쪏쪐쪑쪒쪓쪔쪕쪖쪗쪙쪚쪛쪜쪝쪞쪟쪠쪡쪢쪣쪤쪥쪦쪧ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ�����ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ�������ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ��������αβγδεζηθικλμνξοπρστυφχψω�������\".split(\"\");\nfor(j = 0; j != D[165].length; ++j) if(D[165][j].charCodeAt(0) !== 0xFFFD) { e[D[165][j]] = 42240 + j; d[42240 + j] = D[165][j];}\nD[166] = \"�����������������������������������������������������������������쪨쪩쪪쪫쪬쪭쪮쪯쪰쪱쪲쪳쪴쪵쪶쪷쪸쪹쪺쪻쪾쪿쫁쫂쫃쫅������쫆쫇쫈쫉쫊쫋쫎쫐쫒쫔쫕쫖쫗쫚쫛쫜쫝쫞쫟쫡쫢쫣쫤쫥쫦쫧������쫨쫩쫪쫫쫭쫮쫯쫰쫱쫲쫳쫵쫶쫷쫸쫹쫺쫻쫼쫽쫾쫿쬀쬁쬂쬃쬄쬅쬆쬇쬉쬊─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂┒┑┚┙┖┕┎┍┞┟┡┢┦┧┩┪┭┮┱┲┵┶┹┺┽┾╀╁╃╄╅╆╇╈╉╊���������������������������\".split(\"\");\nfor(j = 0; j != D[166].length; ++j) if(D[166][j].charCodeAt(0) !== 0xFFFD) { e[D[166][j]] = 42496 + j; d[42496 + j] = D[166][j];}\nD[167] = \"�����������������������������������������������������������������쬋쬌쬍쬎쬏쬑쬒쬓쬕쬖쬗쬙쬚쬛쬜쬝쬞쬟쬢쬣쬤쬥쬦쬧쬨쬩������쬪쬫쬬쬭쬮쬯쬰쬱쬲쬳쬴쬵쬶쬷쬸쬹쬺쬻쬼쬽쬾쬿쭀쭂쭃쭄������쭅쭆쭇쭊쭋쭍쭎쭏쭑쭒쭓쭔쭕쭖쭗쭚쭛쭜쭞쭟쭠쭡쭢쭣쭥쭦쭧쭨쭩쭪쭫쭬㎕㎖㎗ℓ㎘㏄㎣㎤㎥㎦㎙㎚㎛㎜㎝㎞㎟㎠㎡㎢㏊㎍㎎㎏㏏㎈㎉㏈㎧㎨㎰㎱㎲㎳㎴㎵㎶㎷㎸㎹㎀㎁㎂㎃㎄㎺㎻㎼㎽㎾㎿㎐㎑㎒㎓㎔Ω㏀㏁㎊㎋㎌㏖㏅㎭㎮㎯㏛㎩㎪㎫㎬㏝㏐㏓㏃㏉㏜㏆����������������\".split(\"\");\nfor(j = 0; j != D[167].length; ++j) if(D[167][j].charCodeAt(0) !== 0xFFFD) { e[D[167][j]] = 42752 + j; d[42752 + j] = D[167][j];}\nD[168] = \"�����������������������������������������������������������������쭭쭮쭯쭰쭱쭲쭳쭴쭵쭶쭷쭺쭻쭼쭽쭾쭿쮀쮁쮂쮃쮄쮅쮆쮇쮈������쮉쮊쮋쮌쮍쮎쮏쮐쮑쮒쮓쮔쮕쮖쮗쮘쮙쮚쮛쮝쮞쮟쮠쮡쮢쮣������쮤쮥쮦쮧쮨쮩쮪쮫쮬쮭쮮쮯쮰쮱쮲쮳쮴쮵쮶쮷쮹쮺쮻쮼쮽쮾쮿쯀쯁쯂쯃쯄ÆЪĦ�IJ�ĿŁØŒºÞŦŊ�㉠㉡㉢㉣㉤㉥㉦㉧㉨㉩㉪㉫㉬㉭㉮㉯㉰㉱㉲㉳㉴㉵㉶㉷㉸㉹㉺㉻ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮½⅓⅔¼¾⅛⅜⅝⅞�\".split(\"\");\nfor(j = 0; j != D[168].length; ++j) if(D[168][j].charCodeAt(0) !== 0xFFFD) { e[D[168][j]] = 43008 + j; d[43008 + j] = D[168][j];}\nD[169] = \"�����������������������������������������������������������������쯅쯆쯇쯈쯉쯊쯋쯌쯍쯎쯏쯐쯑쯒쯓쯕쯖쯗쯘쯙쯚쯛쯜쯝쯞쯟������쯠쯡쯢쯣쯥쯦쯨쯪쯫쯬쯭쯮쯯쯰쯱쯲쯳쯴쯵쯶쯷쯸쯹쯺쯻쯼������쯽쯾쯿찀찁찂찃찄찅찆찇찈찉찊찋찎찏찑찒찓찕찖찗찘찙찚찛찞찟찠찣찤æđðħıijĸŀłøœßþŧŋʼn㈀㈁㈂㈃㈄㈅㈆㈇㈈㈉㈊㈋㈌㈍㈎㈏㈐㈑㈒㈓㈔㈕㈖㈗㈘㈙㈚㈛⒜⒝⒞⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂¹²³⁴ⁿ₁₂₃₄�\".split(\"\");\nfor(j = 0; j != D[169].length; ++j) if(D[169][j].charCodeAt(0) !== 0xFFFD) { e[D[169][j]] = 43264 + j; d[43264 + j] = D[169][j];}\nD[170] = \"�����������������������������������������������������������������찥찦찪찫찭찯찱찲찳찴찵찶찷찺찿챀챁챂챃챆챇챉챊챋챍챎������챏챐챑챒챓챖챚챛챜챝챞챟챡챢챣챥챧챩챪챫챬챭챮챯챱챲������챳챴챶챷챸챹챺챻챼챽챾챿첀첁첂첃첄첅첆첇첈첉첊첋첌첍첎첏첐첑첒첓ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん������������\".split(\"\");\nfor(j = 0; j != D[170].length; ++j) if(D[170][j].charCodeAt(0) !== 0xFFFD) { e[D[170][j]] = 43520 + j; d[43520 + j] = D[170][j];}\nD[171] = \"�����������������������������������������������������������������첔첕첖첗첚첛첝첞첟첡첢첣첤첥첦첧첪첮첯첰첱첲첳첶첷첹������첺첻첽첾첿쳀쳁쳂쳃쳆쳈쳊쳋쳌쳍쳎쳏쳑쳒쳓쳕쳖쳗쳘쳙쳚������쳛쳜쳝쳞쳟쳠쳡쳢쳣쳥쳦쳧쳨쳩쳪쳫쳭쳮쳯쳱쳲쳳쳴쳵쳶쳷쳸쳹쳺쳻쳼쳽ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ���������\".split(\"\");\nfor(j = 0; j != D[171].length; ++j) if(D[171][j].charCodeAt(0) !== 0xFFFD) { e[D[171][j]] = 43776 + j; d[43776 + j] = D[171][j];}\nD[172] = \"�����������������������������������������������������������������쳾쳿촀촂촃촄촅촆촇촊촋촍촎촏촑촒촓촔촕촖촗촚촜촞촟촠������촡촢촣촥촦촧촩촪촫촭촮촯촰촱촲촳촴촵촶촷촸촺촻촼촽촾������촿쵀쵁쵂쵃쵄쵅쵆쵇쵈쵉쵊쵋쵌쵍쵎쵏쵐쵑쵒쵓쵔쵕쵖쵗쵘쵙쵚쵛쵝쵞쵟АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ���������������абвгдеёжзийклмнопрстуфхцчшщъыьэюя��������������\".split(\"\");\nfor(j = 0; j != D[172].length; ++j) if(D[172][j].charCodeAt(0) !== 0xFFFD) { e[D[172][j]] = 44032 + j; d[44032 + j] = D[172][j];}\nD[173] = \"�����������������������������������������������������������������쵡쵢쵣쵥쵦쵧쵨쵩쵪쵫쵮쵰쵲쵳쵴쵵쵶쵷쵹쵺쵻쵼쵽쵾쵿춀������춁춂춃춄춅춆춇춉춊춋춌춍춎춏춐춑춒춓춖춗춙춚춛춝춞춟������춠춡춢춣춦춨춪춫춬춭춮춯춱춲춳춴춵춶춷춸춹춺춻춼춽춾춿췀췁췂췃췅�����������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[173].length; ++j) if(D[173][j].charCodeAt(0) !== 0xFFFD) { e[D[173][j]] = 44288 + j; d[44288 + j] = D[173][j];}\nD[174] = \"�����������������������������������������������������������������췆췇췈췉췊췋췍췎췏췑췒췓췔췕췖췗췘췙췚췛췜췝췞췟췠췡������췢췣췤췥췦췧췩췪췫췭췮췯췱췲췳췴췵췶췷췺췼췾췿츀츁츂������츃츅츆츇츉츊츋츍츎츏츐츑츒츓츕츖츗츘츚츛츜츝츞츟츢츣츥츦츧츩츪츫�����������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[174].length; ++j) if(D[174][j].charCodeAt(0) !== 0xFFFD) { e[D[174][j]] = 44544 + j; d[44544 + j] = D[174][j];}\nD[175] = \"�����������������������������������������������������������������츬츭츮츯츲츴츶츷츸츹츺츻츼츽츾츿칀칁칂칃칄칅칆칇칈칉������칊칋칌칍칎칏칐칑칒칓칔칕칖칗칚칛칝칞칢칣칤칥칦칧칪칬������칮칯칰칱칲칳칶칷칹칺칻칽칾칿캀캁캂캃캆캈캊캋캌캍캎캏캒캓캕캖캗캙�����������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[175].length; ++j) if(D[175][j].charCodeAt(0) !== 0xFFFD) { e[D[175][j]] = 44800 + j; d[44800 + j] = D[175][j];}\nD[176] = \"�����������������������������������������������������������������캚캛캜캝캞캟캢캦캧캨캩캪캫캮캯캰캱캲캳캴캵캶캷캸캹캺������캻캼캽캾캿컀컂컃컄컅컆컇컈컉컊컋컌컍컎컏컐컑컒컓컔컕������컖컗컘컙컚컛컜컝컞컟컠컡컢컣컦컧컩컪컭컮컯컰컱컲컳컶컺컻컼컽컾컿가각간갇갈갉갊감갑값갓갔강갖갗같갚갛개객갠갤갬갭갯갰갱갸갹갼걀걋걍걔걘걜거걱건걷걸걺검겁것겄겅겆겉겊겋게겐겔겜겝겟겠겡겨격겪견겯결겸겹겻겼경곁계곈곌곕곗고곡곤곧골곪곬곯곰곱곳공곶과곽관괄괆�\".split(\"\");\nfor(j = 0; j != D[176].length; ++j) if(D[176][j].charCodeAt(0) !== 0xFFFD) { e[D[176][j]] = 45056 + j; d[45056 + j] = D[176][j];}\nD[177] = \"�����������������������������������������������������������������켂켃켅켆켇켉켊켋켌켍켎켏켒켔켖켗켘켙켚켛켝켞켟켡켢켣������켥켦켧켨켩켪켫켮켲켳켴켵켶켷켹켺켻켼켽켾켿콀콁콂콃콄������콅콆콇콈콉콊콋콌콍콎콏콐콑콒콓콖콗콙콚콛콝콞콟콠콡콢콣콦콨콪콫콬괌괍괏광괘괜괠괩괬괭괴괵괸괼굄굅굇굉교굔굘굡굣구국군굳굴굵굶굻굼굽굿궁궂궈궉권궐궜궝궤궷귀귁귄귈귐귑귓규균귤그극근귿글긁금급긋긍긔기긱긴긷길긺김깁깃깅깆깊까깍깎깐깔깖깜깝깟깠깡깥깨깩깬깰깸�\".split(\"\");\nfor(j = 0; j != D[177].length; ++j) if(D[177][j].charCodeAt(0) !== 0xFFFD) { e[D[177][j]] = 45312 + j; d[45312 + j] = D[177][j];}\nD[178] = \"�����������������������������������������������������������������콭콮콯콲콳콵콶콷콹콺콻콼콽콾콿쾁쾂쾃쾄쾆쾇쾈쾉쾊쾋쾍������쾎쾏쾐쾑쾒쾓쾔쾕쾖쾗쾘쾙쾚쾛쾜쾝쾞쾟쾠쾢쾣쾤쾥쾦쾧쾩������쾪쾫쾬쾭쾮쾯쾱쾲쾳쾴쾵쾶쾷쾸쾹쾺쾻쾼쾽쾾쾿쿀쿁쿂쿃쿅쿆쿇쿈쿉쿊쿋깹깻깼깽꺄꺅꺌꺼꺽꺾껀껄껌껍껏껐껑께껙껜껨껫껭껴껸껼꼇꼈꼍꼐꼬꼭꼰꼲꼴꼼꼽꼿꽁꽂꽃꽈꽉꽐꽜꽝꽤꽥꽹꾀꾄꾈꾐꾑꾕꾜꾸꾹꾼꿀꿇꿈꿉꿋꿍꿎꿔꿜꿨꿩꿰꿱꿴꿸뀀뀁뀄뀌뀐뀔뀜뀝뀨끄끅끈끊끌끎끓끔끕끗끙�\".split(\"\");\nfor(j = 0; j != D[178].length; ++j) if(D[178][j].charCodeAt(0) !== 0xFFFD) { e[D[178][j]] = 45568 + j; d[45568 + j] = D[178][j];}\nD[179] = \"�����������������������������������������������������������������쿌쿍쿎쿏쿐쿑쿒쿓쿔쿕쿖쿗쿘쿙쿚쿛쿜쿝쿞쿟쿢쿣쿥쿦쿧쿩������쿪쿫쿬쿭쿮쿯쿲쿴쿶쿷쿸쿹쿺쿻쿽쿾쿿퀁퀂퀃퀅퀆퀇퀈퀉퀊������퀋퀌퀍퀎퀏퀐퀒퀓퀔퀕퀖퀗퀙퀚퀛퀜퀝퀞퀟퀠퀡퀢퀣퀤퀥퀦퀧퀨퀩퀪퀫퀬끝끼끽낀낄낌낍낏낑나낙낚난낟날낡낢남납낫났낭낮낯낱낳내낵낸낼냄냅냇냈냉냐냑냔냘냠냥너넉넋넌널넒넓넘넙넛넜넝넣네넥넨넬넴넵넷넸넹녀녁년녈념녑녔녕녘녜녠노녹논놀놂놈놉놋농높놓놔놘놜놨뇌뇐뇔뇜뇝�\".split(\"\");\nfor(j = 0; j != D[179].length; ++j) if(D[179][j].charCodeAt(0) !== 0xFFFD) { e[D[179][j]] = 45824 + j; d[45824 + j] = D[179][j];}\nD[180] = \"�����������������������������������������������������������������퀮퀯퀰퀱퀲퀳퀶퀷퀹퀺퀻퀽퀾퀿큀큁큂큃큆큈큊큋큌큍큎큏������큑큒큓큕큖큗큙큚큛큜큝큞큟큡큢큣큤큥큦큧큨큩큪큫큮큯������큱큲큳큵큶큷큸큹큺큻큾큿킀킂킃킄킅킆킇킈킉킊킋킌킍킎킏킐킑킒킓킔뇟뇨뇩뇬뇰뇹뇻뇽누눅눈눋눌눔눕눗눙눠눴눼뉘뉜뉠뉨뉩뉴뉵뉼늄늅늉느늑는늘늙늚늠늡늣능늦늪늬늰늴니닉닌닐닒님닙닛닝닢다닥닦단닫달닭닮닯닳담답닷닸당닺닻닿대댁댄댈댐댑댓댔댕댜더덕덖던덛덜덞덟덤덥�\".split(\"\");\nfor(j = 0; j != D[180].length; ++j) if(D[180][j].charCodeAt(0) !== 0xFFFD) { e[D[180][j]] = 46080 + j; d[46080 + j] = D[180][j];}\nD[181] = \"�����������������������������������������������������������������킕킖킗킘킙킚킛킜킝킞킟킠킡킢킣킦킧킩킪킫킭킮킯킰킱킲������킳킶킸킺킻킼킽킾킿탂탃탅탆탇탊탋탌탍탎탏탒탖탗탘탙탚������탛탞탟탡탢탣탥탦탧탨탩탪탫탮탲탳탴탵탶탷탹탺탻탼탽탾탿턀턁턂턃턄덧덩덫덮데덱덴델뎀뎁뎃뎄뎅뎌뎐뎔뎠뎡뎨뎬도독돈돋돌돎돐돔돕돗동돛돝돠돤돨돼됐되된될됨됩됫됴두둑둔둘둠둡둣둥둬뒀뒈뒝뒤뒨뒬뒵뒷뒹듀듄듈듐듕드득든듣들듦듬듭듯등듸디딕딘딛딜딤딥딧딨딩딪따딱딴딸�\".split(\"\");\nfor(j = 0; j != D[181].length; ++j) if(D[181][j].charCodeAt(0) !== 0xFFFD) { e[D[181][j]] = 46336 + j; d[46336 + j] = D[181][j];}\nD[182] = \"�����������������������������������������������������������������턅턆턇턈턉턊턋턌턎턏턐턑턒턓턔턕턖턗턘턙턚턛턜턝턞턟������턠턡턢턣턤턥턦턧턨턩턪턫턬턭턮턯턲턳턵턶턷턹턻턼턽턾������턿텂텆텇텈텉텊텋텎텏텑텒텓텕텖텗텘텙텚텛텞텠텢텣텤텥텦텧텩텪텫텭땀땁땃땄땅땋때땍땐땔땜땝땟땠땡떠떡떤떨떪떫떰떱떳떴떵떻떼떽뗀뗄뗌뗍뗏뗐뗑뗘뗬또똑똔똘똥똬똴뙈뙤뙨뚜뚝뚠뚤뚫뚬뚱뛔뛰뛴뛸뜀뜁뜅뜨뜩뜬뜯뜰뜸뜹뜻띄띈띌띔띕띠띤띨띰띱띳띵라락란랄람랍랏랐랑랒랖랗�\".split(\"\");\nfor(j = 0; j != D[182].length; ++j) if(D[182][j].charCodeAt(0) !== 0xFFFD) { e[D[182][j]] = 46592 + j; d[46592 + j] = D[182][j];}\nD[183] = \"�����������������������������������������������������������������텮텯텰텱텲텳텴텵텶텷텸텹텺텻텽텾텿톀톁톂톃톅톆톇톉톊������톋톌톍톎톏톐톑톒톓톔톕톖톗톘톙톚톛톜톝톞톟톢톣톥톦톧������톩톪톫톬톭톮톯톲톴톶톷톸톹톻톽톾톿퇁퇂퇃퇄퇅퇆퇇퇈퇉퇊퇋퇌퇍퇎퇏래랙랜랠램랩랫랬랭랴략랸럇량러럭런럴럼럽럿렀렁렇레렉렌렐렘렙렛렝려력련렬렴렵렷렸령례롄롑롓로록론롤롬롭롯롱롸롼뢍뢨뢰뢴뢸룀룁룃룅료룐룔룝룟룡루룩룬룰룸룹룻룽뤄뤘뤠뤼뤽륀륄륌륏륑류륙륜률륨륩�\".split(\"\");\nfor(j = 0; j != D[183].length; ++j) if(D[183][j].charCodeAt(0) !== 0xFFFD) { e[D[183][j]] = 46848 + j; d[46848 + j] = D[183][j];}\nD[184] = \"�����������������������������������������������������������������퇐퇑퇒퇓퇔퇕퇖퇗퇙퇚퇛퇜퇝퇞퇟퇠퇡퇢퇣퇤퇥퇦퇧퇨퇩퇪������퇫퇬퇭퇮퇯퇰퇱퇲퇳퇵퇶퇷퇹퇺퇻퇼퇽퇾퇿툀툁툂툃툄툅툆������툈툊툋툌툍툎툏툑툒툓툔툕툖툗툘툙툚툛툜툝툞툟툠툡툢툣툤툥툦툧툨툩륫륭르륵른를름릅릇릉릊릍릎리릭린릴림립릿링마막만많맏말맑맒맘맙맛망맞맡맣매맥맨맬맴맵맷맸맹맺먀먁먈먕머먹먼멀멂멈멉멋멍멎멓메멕멘멜멤멥멧멨멩며멱면멸몃몄명몇몌모목몫몬몰몲몸몹못몽뫄뫈뫘뫙뫼�\".split(\"\");\nfor(j = 0; j != D[184].length; ++j) if(D[184][j].charCodeAt(0) !== 0xFFFD) { e[D[184][j]] = 47104 + j; d[47104 + j] = D[184][j];}\nD[185] = \"�����������������������������������������������������������������툪툫툮툯툱툲툳툵툶툷툸툹툺툻툾퉀퉂퉃퉄퉅퉆퉇퉉퉊퉋퉌������퉍퉎퉏퉐퉑퉒퉓퉔퉕퉖퉗퉘퉙퉚퉛퉝퉞퉟퉠퉡퉢퉣퉥퉦퉧퉨������퉩퉪퉫퉬퉭퉮퉯퉰퉱퉲퉳퉴퉵퉶퉷퉸퉹퉺퉻퉼퉽퉾퉿튂튃튅튆튇튉튊튋튌묀묄묍묏묑묘묜묠묩묫무묵묶문묻물묽묾뭄뭅뭇뭉뭍뭏뭐뭔뭘뭡뭣뭬뮈뮌뮐뮤뮨뮬뮴뮷므믄믈믐믓미믹민믿밀밂밈밉밋밌밍및밑바박밖밗반받발밝밞밟밤밥밧방밭배백밴밸뱀뱁뱃뱄뱅뱉뱌뱍뱐뱝버벅번벋벌벎범법벗�\".split(\"\");\nfor(j = 0; j != D[185].length; ++j) if(D[185][j].charCodeAt(0) !== 0xFFFD) { e[D[185][j]] = 47360 + j; d[47360 + j] = D[185][j];}\nD[186] = \"�����������������������������������������������������������������튍튎튏튒튓튔튖튗튘튙튚튛튝튞튟튡튢튣튥튦튧튨튩튪튫튭������튮튯튰튲튳튴튵튶튷튺튻튽튾틁틃틄틅틆틇틊틌틍틎틏틐틑������틒틓틕틖틗틙틚틛틝틞틟틠틡틢틣틦틧틨틩틪틫틬틭틮틯틲틳틵틶틷틹틺벙벚베벡벤벧벨벰벱벳벴벵벼벽변별볍볏볐병볕볘볜보복볶본볼봄봅봇봉봐봔봤봬뵀뵈뵉뵌뵐뵘뵙뵤뵨부북분붇불붉붊붐붑붓붕붙붚붜붤붰붸뷔뷕뷘뷜뷩뷰뷴뷸븀븃븅브븍븐블븜븝븟비빅빈빌빎빔빕빗빙빚빛빠빡빤�\".split(\"\");\nfor(j = 0; j != D[186].length; ++j) if(D[186][j].charCodeAt(0) !== 0xFFFD) { e[D[186][j]] = 47616 + j; d[47616 + j] = D[186][j];}\nD[187] = \"�����������������������������������������������������������������틻틼틽틾틿팂팄팆팇팈팉팊팋팏팑팒팓팕팗팘팙팚팛팞팢팣������팤팦팧팪팫팭팮팯팱팲팳팴팵팶팷팺팾팿퍀퍁퍂퍃퍆퍇퍈퍉������퍊퍋퍌퍍퍎퍏퍐퍑퍒퍓퍔퍕퍖퍗퍘퍙퍚퍛퍜퍝퍞퍟퍠퍡퍢퍣퍤퍥퍦퍧퍨퍩빨빪빰빱빳빴빵빻빼빽뺀뺄뺌뺍뺏뺐뺑뺘뺙뺨뻐뻑뻔뻗뻘뻠뻣뻤뻥뻬뼁뼈뼉뼘뼙뼛뼜뼝뽀뽁뽄뽈뽐뽑뽕뾔뾰뿅뿌뿍뿐뿔뿜뿟뿡쀼쁑쁘쁜쁠쁨쁩삐삑삔삘삠삡삣삥사삭삯산삳살삵삶삼삽삿샀상샅새색샌샐샘샙샛샜생샤�\".split(\"\");\nfor(j = 0; j != D[187].length; ++j) if(D[187][j].charCodeAt(0) !== 0xFFFD) { e[D[187][j]] = 47872 + j; d[47872 + j] = D[187][j];}\nD[188] = \"�����������������������������������������������������������������퍪퍫퍬퍭퍮퍯퍰퍱퍲퍳퍴퍵퍶퍷퍸퍹퍺퍻퍾퍿펁펂펃펅펆펇������펈펉펊펋펎펒펓펔펕펖펗펚펛펝펞펟펡펢펣펤펥펦펧펪펬펮������펯펰펱펲펳펵펶펷펹펺펻펽펾펿폀폁폂폃폆폇폊폋폌폍폎폏폑폒폓폔폕폖샥샨샬샴샵샷샹섀섄섈섐섕서석섞섟선섣설섦섧섬섭섯섰성섶세섹센셀셈셉셋셌셍셔셕션셜셤셥셧셨셩셰셴셸솅소속솎손솔솖솜솝솟송솥솨솩솬솰솽쇄쇈쇌쇔쇗쇘쇠쇤쇨쇰쇱쇳쇼쇽숀숄숌숍숏숑수숙순숟술숨숩숫숭�\".split(\"\");\nfor(j = 0; j != D[188].length; ++j) if(D[188][j].charCodeAt(0) !== 0xFFFD) { e[D[188][j]] = 48128 + j; d[48128 + j] = D[188][j];}\nD[189] = \"�����������������������������������������������������������������폗폙폚폛폜폝폞폟폠폢폤폥폦폧폨폩폪폫폮폯폱폲폳폵폶폷������폸폹폺폻폾퐀퐂퐃퐄퐅퐆퐇퐉퐊퐋퐌퐍퐎퐏퐐퐑퐒퐓퐔퐕퐖������퐗퐘퐙퐚퐛퐜퐞퐟퐠퐡퐢퐣퐤퐥퐦퐧퐨퐩퐪퐫퐬퐭퐮퐯퐰퐱퐲퐳퐴퐵퐶퐷숯숱숲숴쉈쉐쉑쉔쉘쉠쉥쉬쉭쉰쉴쉼쉽쉿슁슈슉슐슘슛슝스슥슨슬슭슴습슷승시식신싣실싫심십싯싱싶싸싹싻싼쌀쌈쌉쌌쌍쌓쌔쌕쌘쌜쌤쌥쌨쌩썅써썩썬썰썲썸썹썼썽쎄쎈쎌쏀쏘쏙쏜쏟쏠쏢쏨쏩쏭쏴쏵쏸쐈쐐쐤쐬쐰�\".split(\"\");\nfor(j = 0; j != D[189].length; ++j) if(D[189][j].charCodeAt(0) !== 0xFFFD) { e[D[189][j]] = 48384 + j; d[48384 + j] = D[189][j];}\nD[190] = \"�����������������������������������������������������������������퐸퐹퐺퐻퐼퐽퐾퐿푁푂푃푅푆푇푈푉푊푋푌푍푎푏푐푑푒푓������푔푕푖푗푘푙푚푛푝푞푟푡푢푣푥푦푧푨푩푪푫푬푮푰푱푲������푳푴푵푶푷푺푻푽푾풁풃풄풅풆풇풊풌풎풏풐풑풒풓풕풖풗풘풙풚풛풜풝쐴쐼쐽쑈쑤쑥쑨쑬쑴쑵쑹쒀쒔쒜쒸쒼쓩쓰쓱쓴쓸쓺쓿씀씁씌씐씔씜씨씩씬씰씸씹씻씽아악안앉않알앍앎앓암압앗았앙앝앞애액앤앨앰앱앳앴앵야약얀얄얇얌얍얏양얕얗얘얜얠얩어억언얹얻얼얽얾엄업없엇었엉엊엌엎�\".split(\"\");\nfor(j = 0; j != D[190].length; ++j) if(D[190][j].charCodeAt(0) !== 0xFFFD) { e[D[190][j]] = 48640 + j; d[48640 + j] = D[190][j];}\nD[191] = \"�����������������������������������������������������������������풞풟풠풡풢풣풤풥풦풧풨풪풫풬풭풮풯풰풱풲풳풴풵풶풷풸������풹풺풻풼풽풾풿퓀퓁퓂퓃퓄퓅퓆퓇퓈퓉퓊퓋퓍퓎퓏퓑퓒퓓퓕������퓖퓗퓘퓙퓚퓛퓝퓞퓠퓡퓢퓣퓤퓥퓦퓧퓩퓪퓫퓭퓮퓯퓱퓲퓳퓴퓵퓶퓷퓹퓺퓼에엑엔엘엠엡엣엥여역엮연열엶엷염엽엾엿였영옅옆옇예옌옐옘옙옛옜오옥온올옭옮옰옳옴옵옷옹옻와왁완왈왐왑왓왔왕왜왝왠왬왯왱외왹왼욀욈욉욋욍요욕욘욜욤욥욧용우욱운울욹욺움웁웃웅워웍원월웜웝웠웡웨�\".split(\"\");\nfor(j = 0; j != D[191].length; ++j) if(D[191][j].charCodeAt(0) !== 0xFFFD) { e[D[191][j]] = 48896 + j; d[48896 + j] = D[191][j];}\nD[192] = \"�����������������������������������������������������������������퓾퓿픀픁픂픃픅픆픇픉픊픋픍픎픏픐픑픒픓픖픘픙픚픛픜픝������픞픟픠픡픢픣픤픥픦픧픨픩픪픫픬픭픮픯픰픱픲픳픴픵픶픷������픸픹픺픻픾픿핁핂핃핅핆핇핈핉핊핋핎핐핒핓핔핕핖핗핚핛핝핞핟핡핢핣웩웬웰웸웹웽위윅윈윌윔윕윗윙유육윤율윰윱윳융윷으윽은을읊음읍읏응읒읓읔읕읖읗의읜읠읨읫이익인일읽읾잃임입잇있잉잊잎자작잔잖잗잘잚잠잡잣잤장잦재잭잰잴잼잽잿쟀쟁쟈쟉쟌쟎쟐쟘쟝쟤쟨쟬저적전절젊�\".split(\"\");\nfor(j = 0; j != D[192].length; ++j) if(D[192][j].charCodeAt(0) !== 0xFFFD) { e[D[192][j]] = 49152 + j; d[49152 + j] = D[192][j];}\nD[193] = \"�����������������������������������������������������������������핤핦핧핪핬핮핯핰핱핲핳핶핷핹핺핻핽핾핿햀햁햂햃햆햊햋������햌햍햎햏햑햒햓햔햕햖햗햘햙햚햛햜햝햞햟햠햡햢햣햤햦햧������햨햩햪햫햬햭햮햯햰햱햲햳햴햵햶햷햸햹햺햻햼햽햾햿헀헁헂헃헄헅헆헇점접젓정젖제젝젠젤젬젭젯젱져젼졀졈졉졌졍졔조족존졸졺좀좁좃종좆좇좋좌좍좔좝좟좡좨좼좽죄죈죌죔죕죗죙죠죡죤죵주죽준줄줅줆줌줍줏중줘줬줴쥐쥑쥔쥘쥠쥡쥣쥬쥰쥴쥼즈즉즌즐즘즙즛증지직진짇질짊짐집짓�\".split(\"\");\nfor(j = 0; j != D[193].length; ++j) if(D[193][j].charCodeAt(0) !== 0xFFFD) { e[D[193][j]] = 49408 + j; d[49408 + j] = D[193][j];}\nD[194] = \"�����������������������������������������������������������������헊헋헍헎헏헑헓헔헕헖헗헚헜헞헟헠헡헢헣헦헧헩헪헫헭헮������헯헰헱헲헳헶헸헺헻헼헽헾헿혂혃혅혆혇혉혊혋혌혍혎혏혒������혖혗혘혙혚혛혝혞혟혡혢혣혥혦혧혨혩혪혫혬혮혯혰혱혲혳혴혵혶혷혺혻징짖짙짚짜짝짠짢짤짧짬짭짯짰짱째짹짼쨀쨈쨉쨋쨌쨍쨔쨘쨩쩌쩍쩐쩔쩜쩝쩟쩠쩡쩨쩽쪄쪘쪼쪽쫀쫄쫌쫍쫏쫑쫓쫘쫙쫠쫬쫴쬈쬐쬔쬘쬠쬡쭁쭈쭉쭌쭐쭘쭙쭝쭤쭸쭹쮜쮸쯔쯤쯧쯩찌찍찐찔찜찝찡찢찧차착찬찮찰참찹찻�\".split(\"\");\nfor(j = 0; j != D[194].length; ++j) if(D[194][j].charCodeAt(0) !== 0xFFFD) { e[D[194][j]] = 49664 + j; d[49664 + j] = D[194][j];}\nD[195] = \"�����������������������������������������������������������������혽혾혿홁홂홃홄홆홇홊홌홎홏홐홒홓홖홗홙홚홛홝홞홟홠홡������홢홣홤홥홦홨홪홫홬홭홮홯홲홳홵홶홷홸홹홺홻홼홽홾홿횀������횁횂횄횆횇횈횉횊횋횎횏횑횒횓횕횖횗횘횙횚횛횜횞횠횢횣횤횥횦횧횩횪찼창찾채책챈챌챔챕챗챘챙챠챤챦챨챰챵처척천철첨첩첫첬청체첵첸첼쳄쳅쳇쳉쳐쳔쳤쳬쳰촁초촉촌촐촘촙촛총촤촨촬촹최쵠쵤쵬쵭쵯쵱쵸춈추축춘출춤춥춧충춰췄췌췐취췬췰췸췹췻췽츄츈츌츔츙츠측츤츨츰츱츳층�\".split(\"\");\nfor(j = 0; j != D[195].length; ++j) if(D[195][j].charCodeAt(0) !== 0xFFFD) { e[D[195][j]] = 49920 + j; d[49920 + j] = D[195][j];}\nD[196] = \"�����������������������������������������������������������������횫횭횮횯횱횲횳횴횵횶횷횸횺횼횽횾횿훀훁훂훃훆훇훉훊훋������훍훎훏훐훒훓훕훖훘훚훛훜훝훞훟훡훢훣훥훦훧훩훪훫훬훭������훮훯훱훲훳훴훶훷훸훹훺훻훾훿휁휂휃휅휆휇휈휉휊휋휌휍휎휏휐휒휓휔치칙친칟칠칡침칩칫칭카칵칸칼캄캅캇캉캐캑캔캘캠캡캣캤캥캬캭컁커컥컨컫컬컴컵컷컸컹케켁켄켈켐켑켓켕켜켠켤켬켭켯켰켱켸코콕콘콜콤콥콧콩콰콱콴콸쾀쾅쾌쾡쾨쾰쿄쿠쿡쿤쿨쿰쿱쿳쿵쿼퀀퀄퀑퀘퀭퀴퀵퀸퀼�\".split(\"\");\nfor(j = 0; j != D[196].length; ++j) if(D[196][j].charCodeAt(0) !== 0xFFFD) { e[D[196][j]] = 50176 + j; d[50176 + j] = D[196][j];}\nD[197] = \"�����������������������������������������������������������������휕휖휗휚휛휝휞휟휡휢휣휤휥휦휧휪휬휮휯휰휱휲휳휶휷휹������휺휻휽휾휿흀흁흂흃흅흆흈흊흋흌흍흎흏흒흓흕흚흛흜흝흞������흟흢흤흦흧흨흪흫흭흮흯흱흲흳흵흶흷흸흹흺흻흾흿힀힂힃힄힅힆힇힊힋큄큅큇큉큐큔큘큠크큭큰클큼큽킁키킥킨킬킴킵킷킹타탁탄탈탉탐탑탓탔탕태택탠탤탬탭탯탰탱탸턍터턱턴털턺텀텁텃텄텅테텍텐텔템텝텟텡텨텬텼톄톈토톡톤톨톰톱톳통톺톼퇀퇘퇴퇸툇툉툐투툭툰툴툼툽툿퉁퉈퉜�\".split(\"\");\nfor(j = 0; j != D[197].length; ++j) if(D[197][j].charCodeAt(0) !== 0xFFFD) { e[D[197][j]] = 50432 + j; d[50432 + j] = D[197][j];}\nD[198] = \"�����������������������������������������������������������������힍힎힏힑힒힓힔힕힖힗힚힜힞힟힠힡힢힣������������������������������������������������������������������������������퉤튀튁튄튈튐튑튕튜튠튤튬튱트특튼튿틀틂틈틉틋틔틘틜틤틥티틱틴틸팀팁팃팅파팍팎판팔팖팜팝팟팠팡팥패팩팬팰팸팹팻팼팽퍄퍅퍼퍽펀펄펌펍펏펐펑페펙펜펠펨펩펫펭펴편펼폄폅폈평폐폘폡폣포폭폰폴폼폽폿퐁�\".split(\"\");\nfor(j = 0; j != D[198].length; ++j) if(D[198][j].charCodeAt(0) !== 0xFFFD) { e[D[198][j]] = 50688 + j; d[50688 + j] = D[198][j];}\nD[199] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������퐈퐝푀푄표푠푤푭푯푸푹푼푿풀풂품풉풋풍풔풩퓌퓐퓔퓜퓟퓨퓬퓰퓸퓻퓽프픈플픔픕픗피픽핀필핌핍핏핑하학한할핥함합핫항해핵핸핼햄햅햇했행햐향허헉헌헐헒험헙헛헝헤헥헨헬헴헵헷헹혀혁현혈혐협혓혔형혜혠�\".split(\"\");\nfor(j = 0; j != D[199].length; ++j) if(D[199][j].charCodeAt(0) !== 0xFFFD) { e[D[199][j]] = 50944 + j; d[50944 + j] = D[199][j];}\nD[200] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������혤혭호혹혼홀홅홈홉홋홍홑화확환활홧황홰홱홴횃횅회획횐횔횝횟횡효횬횰횹횻후훅훈훌훑훔훗훙훠훤훨훰훵훼훽휀휄휑휘휙휜휠휨휩휫휭휴휵휸휼흄흇흉흐흑흔흖흗흘흙흠흡흣흥흩희흰흴흼흽힁히힉힌힐힘힙힛힝�\".split(\"\");\nfor(j = 0; j != D[200].length; ++j) if(D[200][j].charCodeAt(0) !== 0xFFFD) { e[D[200][j]] = 51200 + j; d[51200 + j] = D[200][j];}\nD[202] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������伽佳假價加可呵哥嘉嫁家暇架枷柯歌珂痂稼苛茄街袈訶賈跏軻迦駕刻却各恪慤殼珏脚覺角閣侃刊墾奸姦干幹懇揀杆柬桿澗癎看磵稈竿簡肝艮艱諫間乫喝曷渴碣竭葛褐蝎鞨勘坎堪嵌感憾戡敢柑橄減甘疳監瞰紺邯鑑鑒龕�\".split(\"\");\nfor(j = 0; j != D[202].length; ++j) if(D[202][j].charCodeAt(0) !== 0xFFFD) { e[D[202][j]] = 51712 + j; d[51712 + j] = D[202][j];}\nD[203] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������匣岬甲胛鉀閘剛堈姜岡崗康强彊慷江畺疆糠絳綱羌腔舡薑襁講鋼降鱇介价個凱塏愷愾慨改槪漑疥皆盖箇芥蓋豈鎧開喀客坑更粳羹醵倨去居巨拒据據擧渠炬祛距踞車遽鉅鋸乾件健巾建愆楗腱虔蹇鍵騫乞傑杰桀儉劍劒檢�\".split(\"\");\nfor(j = 0; j != D[203].length; ++j) if(D[203][j].charCodeAt(0) !== 0xFFFD) { e[D[203][j]] = 51968 + j; d[51968 + j] = D[203][j];}\nD[204] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������瞼鈐黔劫怯迲偈憩揭擊格檄激膈覡隔堅牽犬甄絹繭肩見譴遣鵑抉決潔結缺訣兼慊箝謙鉗鎌京俓倞傾儆勁勍卿坰境庚徑慶憬擎敬景暻更梗涇炅烱璟璥瓊痙硬磬竟競絅經耕耿脛莖警輕逕鏡頃頸驚鯨係啓堺契季屆悸戒桂械�\".split(\"\");\nfor(j = 0; j != D[204].length; ++j) if(D[204][j].charCodeAt(0) !== 0xFFFD) { e[D[204][j]] = 52224 + j; d[52224 + j] = D[204][j];}\nD[205] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������棨溪界癸磎稽系繫繼計誡谿階鷄古叩告呱固姑孤尻庫拷攷故敲暠枯槁沽痼皐睾稿羔考股膏苦苽菰藁蠱袴誥賈辜錮雇顧高鼓哭斛曲梏穀谷鵠困坤崑昆梱棍滾琨袞鯤汨滑骨供公共功孔工恐恭拱控攻珙空蚣貢鞏串寡戈果瓜�\".split(\"\");\nfor(j = 0; j != D[205].length; ++j) if(D[205][j].charCodeAt(0) !== 0xFFFD) { e[D[205][j]] = 52480 + j; d[52480 + j] = D[205][j];}\nD[206] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������科菓誇課跨過鍋顆廓槨藿郭串冠官寬慣棺款灌琯瓘管罐菅觀貫關館刮恝括适侊光匡壙廣曠洸炚狂珖筐胱鑛卦掛罫乖傀塊壞怪愧拐槐魁宏紘肱轟交僑咬喬嬌嶠巧攪敎校橋狡皎矯絞翹膠蕎蛟較轎郊餃驕鮫丘久九仇俱具勾�\".split(\"\");\nfor(j = 0; j != D[206].length; ++j) if(D[206][j].charCodeAt(0) !== 0xFFFD) { e[D[206][j]] = 52736 + j; d[52736 + j] = D[206][j];}\nD[207] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������區口句咎嘔坵垢寇嶇廐懼拘救枸柩構歐毆毬求溝灸狗玖球瞿矩究絿耉臼舅舊苟衢謳購軀逑邱鉤銶駒驅鳩鷗龜國局菊鞠鞫麴君窘群裙軍郡堀屈掘窟宮弓穹窮芎躬倦券勸卷圈拳捲權淃眷厥獗蕨蹶闕机櫃潰詭軌饋句晷歸貴�\".split(\"\");\nfor(j = 0; j != D[207].length; ++j) if(D[207][j].charCodeAt(0) !== 0xFFFD) { e[D[207][j]] = 52992 + j; d[52992 + j] = D[207][j];}\nD[208] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������鬼龜叫圭奎揆槻珪硅窺竅糾葵規赳逵閨勻均畇筠菌鈞龜橘克剋劇戟棘極隙僅劤勤懃斤根槿瑾筋芹菫覲謹近饉契今妗擒昑檎琴禁禽芩衾衿襟金錦伋及急扱汲級給亘兢矜肯企伎其冀嗜器圻基埼夔奇妓寄岐崎己幾忌技旗旣�\".split(\"\");\nfor(j = 0; j != D[208].length; ++j) if(D[208][j].charCodeAt(0) !== 0xFFFD) { e[D[208][j]] = 53248 + j; d[53248 + j] = D[208][j];}\nD[209] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������朞期杞棋棄機欺氣汽沂淇玘琦琪璂璣畸畿碁磯祁祇祈祺箕紀綺羈耆耭肌記譏豈起錡錤飢饑騎騏驥麒緊佶吉拮桔金喫儺喇奈娜懦懶拏拿癩羅蘿螺裸邏那樂洛烙珞落諾酪駱亂卵暖欄煖爛蘭難鸞捏捺南嵐枏楠湳濫男藍襤拉�\".split(\"\");\nfor(j = 0; j != D[209].length; ++j) if(D[209][j].charCodeAt(0) !== 0xFFFD) { e[D[209][j]] = 53504 + j; d[53504 + j] = D[209][j];}\nD[210] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������納臘蠟衲囊娘廊朗浪狼郎乃來內奈柰耐冷女年撚秊念恬拈捻寧寗努勞奴弩怒擄櫓爐瑙盧老蘆虜路露駑魯鷺碌祿綠菉錄鹿論壟弄濃籠聾膿農惱牢磊腦賂雷尿壘屢樓淚漏累縷陋嫩訥杻紐勒肋凜凌稜綾能菱陵尼泥匿溺多茶�\".split(\"\");\nfor(j = 0; j != D[210].length; ++j) if(D[210][j].charCodeAt(0) !== 0xFFFD) { e[D[210][j]] = 53760 + j; d[53760 + j] = D[210][j];}\nD[211] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������丹亶但單團壇彖斷旦檀段湍短端簞緞蛋袒鄲鍛撻澾獺疸達啖坍憺擔曇淡湛潭澹痰聃膽蕁覃談譚錟沓畓答踏遝唐堂塘幢戇撞棠當糖螳黨代垈坮大對岱帶待戴擡玳臺袋貸隊黛宅德悳倒刀到圖堵塗導屠島嶋度徒悼挑掉搗桃�\".split(\"\");\nfor(j = 0; j != D[211].length; ++j) if(D[211][j].charCodeAt(0) !== 0xFFFD) { e[D[211][j]] = 54016 + j; d[54016 + j] = D[211][j];}\nD[212] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������棹櫂淘渡滔濤燾盜睹禱稻萄覩賭跳蹈逃途道都鍍陶韜毒瀆牘犢獨督禿篤纛讀墩惇敦旽暾沌焞燉豚頓乭突仝冬凍動同憧東桐棟洞潼疼瞳童胴董銅兜斗杜枓痘竇荳讀豆逗頭屯臀芚遁遯鈍得嶝橙燈登等藤謄鄧騰喇懶拏癩羅�\".split(\"\");\nfor(j = 0; j != D[212].length; ++j) if(D[212][j].charCodeAt(0) !== 0xFFFD) { e[D[212][j]] = 54272 + j; d[54272 + j] = D[212][j];}\nD[213] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������蘿螺裸邏樂洛烙珞絡落諾酪駱丹亂卵欄欒瀾爛蘭鸞剌辣嵐擥攬欖濫籃纜藍襤覽拉臘蠟廊朗浪狼琅瑯螂郞來崍徠萊冷掠略亮倆兩凉梁樑粮粱糧良諒輛量侶儷勵呂廬慮戾旅櫚濾礪藜蠣閭驢驪麗黎力曆歷瀝礫轢靂憐戀攣漣�\".split(\"\");\nfor(j = 0; j != D[213].length; ++j) if(D[213][j].charCodeAt(0) !== 0xFFFD) { e[D[213][j]] = 54528 + j; d[54528 + j] = D[213][j];}\nD[214] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������煉璉練聯蓮輦連鍊冽列劣洌烈裂廉斂殮濂簾獵令伶囹寧岺嶺怜玲笭羚翎聆逞鈴零靈領齡例澧禮醴隷勞怒撈擄櫓潞瀘爐盧老蘆虜路輅露魯鷺鹵碌祿綠菉錄鹿麓論壟弄朧瀧瓏籠聾儡瀨牢磊賂賚賴雷了僚寮廖料燎療瞭聊蓼�\".split(\"\");\nfor(j = 0; j != D[214].length; ++j) if(D[214][j].charCodeAt(0) !== 0xFFFD) { e[D[214][j]] = 54784 + j; d[54784 + j] = D[214][j];}\nD[215] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������遼鬧龍壘婁屢樓淚漏瘻累縷蔞褸鏤陋劉旒柳榴流溜瀏琉瑠留瘤硫謬類六戮陸侖倫崙淪綸輪律慄栗率隆勒肋凜凌楞稜綾菱陵俚利厘吏唎履悧李梨浬犁狸理璃異痢籬罹羸莉裏裡里釐離鯉吝潾燐璘藺躪隣鱗麟林淋琳臨霖砬�\".split(\"\");\nfor(j = 0; j != D[215].length; ++j) if(D[215][j].charCodeAt(0) !== 0xFFFD) { e[D[215][j]] = 55040 + j; d[55040 + j] = D[215][j];}\nD[216] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������立笠粒摩瑪痲碼磨馬魔麻寞幕漠膜莫邈万卍娩巒彎慢挽晩曼滿漫灣瞞萬蔓蠻輓饅鰻唜抹末沫茉襪靺亡妄忘忙望網罔芒茫莽輞邙埋妹媒寐昧枚梅每煤罵買賣邁魅脈貊陌驀麥孟氓猛盲盟萌冪覓免冕勉棉沔眄眠綿緬面麵滅�\".split(\"\");\nfor(j = 0; j != D[216].length; ++j) if(D[216][j].charCodeAt(0) !== 0xFFFD) { e[D[216][j]] = 55296 + j; d[55296 + j] = D[216][j];}\nD[217] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������蔑冥名命明暝椧溟皿瞑茗蓂螟酩銘鳴袂侮冒募姆帽慕摸摹暮某模母毛牟牡瑁眸矛耗芼茅謀謨貌木沐牧目睦穆鶩歿沒夢朦蒙卯墓妙廟描昴杳渺猫竗苗錨務巫憮懋戊拇撫无楙武毋無珷畝繆舞茂蕪誣貿霧鵡墨默們刎吻問文�\".split(\"\");\nfor(j = 0; j != D[217].length; ++j) if(D[217][j].charCodeAt(0) !== 0xFFFD) { e[D[217][j]] = 55552 + j; d[55552 + j] = D[217][j];}\nD[218] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������汶紊紋聞蚊門雯勿沕物味媚尾嵋彌微未梶楣渼湄眉米美薇謎迷靡黴岷悶愍憫敏旻旼民泯玟珉緡閔密蜜謐剝博拍搏撲朴樸泊珀璞箔粕縛膊舶薄迫雹駁伴半反叛拌搬攀斑槃泮潘班畔瘢盤盼磐磻礬絆般蟠返頒飯勃拔撥渤潑�\".split(\"\");\nfor(j = 0; j != D[218].length; ++j) if(D[218][j].charCodeAt(0) !== 0xFFFD) { e[D[218][j]] = 55808 + j; d[55808 + j] = D[218][j];}\nD[219] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������發跋醱鉢髮魃倣傍坊妨尨幇彷房放方旁昉枋榜滂磅紡肪膀舫芳蒡蚌訪謗邦防龐倍俳北培徘拜排杯湃焙盃背胚裴裵褙賠輩配陪伯佰帛柏栢白百魄幡樊煩燔番磻繁蕃藩飜伐筏罰閥凡帆梵氾汎泛犯範范法琺僻劈壁擘檗璧癖�\".split(\"\");\nfor(j = 0; j != D[219].length; ++j) if(D[219][j].charCodeAt(0) !== 0xFFFD) { e[D[219][j]] = 56064 + j; d[56064 + j] = D[219][j];}\nD[220] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������碧蘗闢霹便卞弁變辨辯邊別瞥鱉鼈丙倂兵屛幷昞昺柄棅炳甁病秉竝輧餠騈保堡報寶普步洑湺潽珤甫菩補褓譜輔伏僕匐卜宓復服福腹茯蔔複覆輹輻馥鰒本乶俸奉封峯峰捧棒烽熢琫縫蓬蜂逢鋒鳳不付俯傅剖副否咐埠夫婦�\".split(\"\");\nfor(j = 0; j != D[220].length; ++j) if(D[220][j].charCodeAt(0) !== 0xFFFD) { e[D[220][j]] = 56320 + j; d[56320 + j] = D[220][j];}\nD[221] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������孚孵富府復扶敷斧浮溥父符簿缶腐腑膚艀芙莩訃負賦賻赴趺部釜阜附駙鳧北分吩噴墳奔奮忿憤扮昐汾焚盆粉糞紛芬賁雰不佛弗彿拂崩朋棚硼繃鵬丕備匕匪卑妃婢庇悲憊扉批斐枇榧比毖毗毘沸泌琵痺砒碑秕秘粃緋翡肥�\".split(\"\");\nfor(j = 0; j != D[221].length; ++j) if(D[221][j].charCodeAt(0) !== 0xFFFD) { e[D[221][j]] = 56576 + j; d[56576 + j] = D[221][j];}\nD[222] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������脾臂菲蜚裨誹譬費鄙非飛鼻嚬嬪彬斌檳殯浜濱瀕牝玭貧賓頻憑氷聘騁乍事些仕伺似使俟僿史司唆嗣四士奢娑寫寺射巳師徙思捨斜斯柶査梭死沙泗渣瀉獅砂社祀祠私篩紗絲肆舍莎蓑蛇裟詐詞謝賜赦辭邪飼駟麝削數朔索�\".split(\"\");\nfor(j = 0; j != D[222].length; ++j) if(D[222][j].charCodeAt(0) !== 0xFFFD) { e[D[222][j]] = 56832 + j; d[56832 + j] = D[222][j];}\nD[223] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������傘刪山散汕珊産疝算蒜酸霰乷撒殺煞薩三參杉森渗芟蔘衫揷澁鈒颯上傷像償商喪嘗孀尙峠常床庠廂想桑橡湘爽牀狀相祥箱翔裳觴詳象賞霜塞璽賽嗇塞穡索色牲生甥省笙墅壻嶼序庶徐恕抒捿敍暑曙書栖棲犀瑞筮絮緖署�\".split(\"\");\nfor(j = 0; j != D[223].length; ++j) if(D[223][j].charCodeAt(0) !== 0xFFFD) { e[D[223][j]] = 57088 + j; d[57088 + j] = D[223][j];}\nD[224] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������胥舒薯西誓逝鋤黍鼠夕奭席惜昔晳析汐淅潟石碩蓆釋錫仙僊先善嬋宣扇敾旋渲煽琁瑄璇璿癬禪線繕羨腺膳船蘚蟬詵跣選銑鐥饍鮮卨屑楔泄洩渫舌薛褻設說雪齧剡暹殲纖蟾贍閃陝攝涉燮葉城姓宬性惺成星晟猩珹盛省筬�\".split(\"\");\nfor(j = 0; j != D[224].length; ++j) if(D[224][j].charCodeAt(0) !== 0xFFFD) { e[D[224][j]] = 57344 + j; d[57344 + j] = D[224][j];}\nD[225] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������聖聲腥誠醒世勢歲洗稅笹細說貰召嘯塑宵小少巢所掃搔昭梳沼消溯瀟炤燒甦疏疎瘙笑篠簫素紹蔬蕭蘇訴逍遡邵銷韶騷俗屬束涑粟續謖贖速孫巽損蓀遜飡率宋悚松淞訟誦送頌刷殺灑碎鎖衰釗修受嗽囚垂壽嫂守岫峀帥愁�\".split(\"\");\nfor(j = 0; j != D[225].length; ++j) if(D[225][j].charCodeAt(0) !== 0xFFFD) { e[D[225][j]] = 57600 + j; d[57600 + j] = D[225][j];}\nD[226] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������戍手授搜收數樹殊水洙漱燧狩獸琇璲瘦睡秀穗竪粹綏綬繡羞脩茱蒐蓚藪袖誰讐輸遂邃酬銖銹隋隧隨雖需須首髓鬚叔塾夙孰宿淑潚熟琡璹肅菽巡徇循恂旬栒楯橓殉洵淳珣盾瞬筍純脣舜荀蓴蕣詢諄醇錞順馴戌術述鉥崇崧�\".split(\"\");\nfor(j = 0; j != D[226].length; ++j) if(D[226][j].charCodeAt(0) !== 0xFFFD) { e[D[226][j]] = 57856 + j; d[57856 + j] = D[226][j];}\nD[227] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������嵩瑟膝蝨濕拾習褶襲丞乘僧勝升承昇繩蠅陞侍匙嘶始媤尸屎屍市弑恃施是時枾柴猜矢示翅蒔蓍視試詩諡豕豺埴寔式息拭植殖湜熄篒蝕識軾食飾伸侁信呻娠宸愼新晨燼申神紳腎臣莘薪藎蜃訊身辛辰迅失室實悉審尋心沁�\".split(\"\");\nfor(j = 0; j != D[227].length; ++j) if(D[227][j].charCodeAt(0) !== 0xFFFD) { e[D[227][j]] = 58112 + j; d[58112 + j] = D[227][j];}\nD[228] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������沈深瀋甚芯諶什十拾雙氏亞俄兒啞娥峨我牙芽莪蛾衙訝阿雅餓鴉鵝堊岳嶽幄惡愕握樂渥鄂鍔顎鰐齷安岸按晏案眼雁鞍顔鮟斡謁軋閼唵岩巖庵暗癌菴闇壓押狎鴨仰央怏昻殃秧鴦厓哀埃崖愛曖涯碍艾隘靄厄扼掖液縊腋額�\".split(\"\");\nfor(j = 0; j != D[228].length; ++j) if(D[228][j].charCodeAt(0) !== 0xFFFD) { e[D[228][j]] = 58368 + j; d[58368 + j] = D[228][j];}\nD[229] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������櫻罌鶯鸚也倻冶夜惹揶椰爺耶若野弱掠略約若葯蒻藥躍亮佯兩凉壤孃恙揚攘敭暘梁楊樣洋瀁煬痒瘍禳穰糧羊良襄諒讓釀陽量養圄御於漁瘀禦語馭魚齬億憶抑檍臆偃堰彦焉言諺孼蘖俺儼嚴奄掩淹嶪業円予余勵呂女如廬�\".split(\"\");\nfor(j = 0; j != D[229].length; ++j) if(D[229][j].charCodeAt(0) !== 0xFFFD) { e[D[229][j]] = 58624 + j; d[58624 + j] = D[229][j];}\nD[230] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������旅歟汝濾璵礖礪與艅茹輿轝閭餘驪麗黎亦力域役易曆歷疫繹譯轢逆驛嚥堧姸娟宴年延憐戀捐挻撚椽沇沿涎涓淵演漣烟然煙煉燃燕璉硏硯秊筵緣練縯聯衍軟輦蓮連鉛鍊鳶列劣咽悅涅烈熱裂說閱厭廉念捻染殮炎焰琰艶苒�\".split(\"\");\nfor(j = 0; j != D[230].length; ++j) if(D[230][j].charCodeAt(0) !== 0xFFFD) { e[D[230][j]] = 58880 + j; d[58880 + j] = D[230][j];}\nD[231] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������簾閻髥鹽曄獵燁葉令囹塋寧嶺嶸影怜映暎楹榮永泳渶潁濚瀛瀯煐營獰玲瑛瑩瓔盈穎纓羚聆英詠迎鈴鍈零霙靈領乂倪例刈叡曳汭濊猊睿穢芮藝蘂禮裔詣譽豫醴銳隸霓預五伍俉傲午吾吳嗚塢墺奧娛寤悟惡懊敖旿晤梧汚澳�\".split(\"\");\nfor(j = 0; j != D[231].length; ++j) if(D[231][j].charCodeAt(0) !== 0xFFFD) { e[D[231][j]] = 59136 + j; d[59136 + j] = D[231][j];}\nD[232] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������烏熬獒筽蜈誤鰲鼇屋沃獄玉鈺溫瑥瘟穩縕蘊兀壅擁瓮甕癰翁邕雍饔渦瓦窩窪臥蛙蝸訛婉完宛梡椀浣玩琓琬碗緩翫脘腕莞豌阮頑曰往旺枉汪王倭娃歪矮外嵬巍猥畏了僚僥凹堯夭妖姚寥寮尿嶢拗搖撓擾料曜樂橈燎燿瑤療�\".split(\"\");\nfor(j = 0; j != D[232].length; ++j) if(D[232][j].charCodeAt(0) !== 0xFFFD) { e[D[232][j]] = 59392 + j; d[59392 + j] = D[232][j];}\nD[233] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������窈窯繇繞耀腰蓼蟯要謠遙遼邀饒慾欲浴縟褥辱俑傭冗勇埇墉容庸慂榕涌湧溶熔瑢用甬聳茸蓉踊鎔鏞龍于佑偶優又友右宇寓尤愚憂旴牛玗瑀盂祐禑禹紆羽芋藕虞迂遇郵釪隅雨雩勖彧旭昱栯煜稶郁頊云暈橒殞澐熉耘芸蕓�\".split(\"\");\nfor(j = 0; j != D[233].length; ++j) if(D[233][j].charCodeAt(0) !== 0xFFFD) { e[D[233][j]] = 59648 + j; d[59648 + j] = D[233][j];}\nD[234] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������運隕雲韻蔚鬱亐熊雄元原員圓園垣媛嫄寃怨愿援沅洹湲源爰猿瑗苑袁轅遠阮院願鴛月越鉞位偉僞危圍委威尉慰暐渭爲瑋緯胃萎葦蔿蝟衛褘謂違韋魏乳侑儒兪劉唯喩孺宥幼幽庾悠惟愈愉揄攸有杻柔柚柳楡楢油洧流游溜�\".split(\"\");\nfor(j = 0; j != D[234].length; ++j) if(D[234][j].charCodeAt(0) !== 0xFFFD) { e[D[234][j]] = 59904 + j; d[59904 + j] = D[234][j];}\nD[235] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������濡猶猷琉瑜由留癒硫紐維臾萸裕誘諛諭踰蹂遊逾遺酉釉鍮類六堉戮毓肉育陸倫允奫尹崙淪潤玧胤贇輪鈗閏律慄栗率聿戎瀜絨融隆垠恩慇殷誾銀隱乙吟淫蔭陰音飮揖泣邑凝應膺鷹依倚儀宜意懿擬椅毅疑矣義艤薏蟻衣誼�\".split(\"\");\nfor(j = 0; j != D[235].length; ++j) if(D[235][j].charCodeAt(0) !== 0xFFFD) { e[D[235][j]] = 60160 + j; d[60160 + j] = D[235][j];}\nD[236] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������議醫二以伊利吏夷姨履已弛彛怡易李梨泥爾珥理異痍痢移罹而耳肄苡荑裏裡貽貳邇里離飴餌匿溺瀷益翊翌翼謚人仁刃印吝咽因姻寅引忍湮燐璘絪茵藺蚓認隣靭靷鱗麟一佚佾壹日溢逸鎰馹任壬妊姙恁林淋稔臨荏賃入卄�\".split(\"\");\nfor(j = 0; j != D[236].length; ++j) if(D[236][j].charCodeAt(0) !== 0xFFFD) { e[D[236][j]] = 60416 + j; d[60416 + j] = D[236][j];}\nD[237] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������立笠粒仍剩孕芿仔刺咨姉姿子字孜恣慈滋炙煮玆瓷疵磁紫者自茨蔗藉諮資雌作勺嚼斫昨灼炸爵綽芍酌雀鵲孱棧殘潺盞岑暫潛箴簪蠶雜丈仗匠場墻壯奬將帳庄張掌暲杖樟檣欌漿牆狀獐璋章粧腸臟臧莊葬蔣薔藏裝贓醬長�\".split(\"\");\nfor(j = 0; j != D[237].length; ++j) if(D[237][j].charCodeAt(0) !== 0xFFFD) { e[D[237][j]] = 60672 + j; d[60672 + j] = D[237][j];}\nD[238] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������障再哉在宰才材栽梓渽滓災縡裁財載齋齎爭箏諍錚佇低儲咀姐底抵杵楮樗沮渚狙猪疽箸紵苧菹著藷詛貯躇這邸雎齟勣吊嫡寂摘敵滴狄炙的積笛籍績翟荻謫賊赤跡蹟迪迹適鏑佃佺傳全典前剪塡塼奠專展廛悛戰栓殿氈澱�\".split(\"\");\nfor(j = 0; j != D[238].length; ++j) if(D[238][j].charCodeAt(0) !== 0xFFFD) { e[D[238][j]] = 60928 + j; d[60928 + j] = D[238][j];}\nD[239] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������煎琠田甸畑癲筌箋箭篆纏詮輾轉鈿銓錢鐫電顚顫餞切截折浙癤竊節絶占岾店漸点粘霑鮎點接摺蝶丁井亭停偵呈姃定幀庭廷征情挺政整旌晶晸柾楨檉正汀淀淨渟湞瀞炡玎珽町睛碇禎程穽精綎艇訂諪貞鄭酊釘鉦鋌錠霆靖�\".split(\"\");\nfor(j = 0; j != D[239].length; ++j) if(D[239][j].charCodeAt(0) !== 0xFFFD) { e[D[239][j]] = 61184 + j; d[61184 + j] = D[239][j];}\nD[240] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������靜頂鼎制劑啼堤帝弟悌提梯濟祭第臍薺製諸蹄醍除際霽題齊俎兆凋助嘲弔彫措操早晁曺曹朝條棗槽漕潮照燥爪璪眺祖祚租稠窕粗糟組繰肇藻蚤詔調趙躁造遭釣阻雕鳥族簇足鏃存尊卒拙猝倧宗從悰慫棕淙琮種終綜縱腫�\".split(\"\");\nfor(j = 0; j != D[240].length; ++j) if(D[240][j].charCodeAt(0) !== 0xFFFD) { e[D[240][j]] = 61440 + j; d[61440 + j] = D[240][j];}\nD[241] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������踪踵鍾鐘佐坐左座挫罪主住侏做姝胄呪周嗾奏宙州廚晝朱柱株注洲湊澍炷珠疇籌紂紬綢舟蛛註誅走躊輳週酎酒鑄駐竹粥俊儁准埈寯峻晙樽浚準濬焌畯竣蠢逡遵雋駿茁中仲衆重卽櫛楫汁葺增憎曾拯烝甑症繒蒸證贈之只�\".split(\"\");\nfor(j = 0; j != D[241].length; ++j) if(D[241][j].charCodeAt(0) !== 0xFFFD) { e[D[241][j]] = 61696 + j; d[61696 + j] = D[241][j];}\nD[242] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������咫地址志持指摯支旨智枝枳止池沚漬知砥祉祗紙肢脂至芝芷蜘誌識贄趾遲直稙稷織職唇嗔塵振搢晉晋桭榛殄津溱珍瑨璡畛疹盡眞瞋秦縉縝臻蔯袗診賑軫辰進鎭陣陳震侄叱姪嫉帙桎瓆疾秩窒膣蛭質跌迭斟朕什執潗緝輯�\".split(\"\");\nfor(j = 0; j != D[242].length; ++j) if(D[242][j].charCodeAt(0) !== 0xFFFD) { e[D[242][j]] = 61952 + j; d[61952 + j] = D[242][j];}\nD[243] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������鏶集徵懲澄且侘借叉嗟嵯差次此磋箚茶蹉車遮捉搾着窄錯鑿齪撰澯燦璨瓚竄簒纂粲纘讚贊鑽餐饌刹察擦札紮僭參塹慘慙懺斬站讒讖倉倡創唱娼廠彰愴敞昌昶暢槍滄漲猖瘡窓脹艙菖蒼債埰寀寨彩採砦綵菜蔡采釵冊柵策�\".split(\"\");\nfor(j = 0; j != D[243].length; ++j) if(D[243][j].charCodeAt(0) !== 0xFFFD) { e[D[243][j]] = 62208 + j; d[62208 + j] = D[243][j];}\nD[244] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������責凄妻悽處倜刺剔尺慽戚拓擲斥滌瘠脊蹠陟隻仟千喘天川擅泉淺玔穿舛薦賤踐遷釧闡阡韆凸哲喆徹撤澈綴輟轍鐵僉尖沾添甛瞻簽籤詹諂堞妾帖捷牒疊睫諜貼輒廳晴淸聽菁請靑鯖切剃替涕滯締諦逮遞體初剿哨憔抄招梢�\".split(\"\");\nfor(j = 0; j != D[244].length; ++j) if(D[244][j].charCodeAt(0) !== 0xFFFD) { e[D[244][j]] = 62464 + j; d[62464 + j] = D[244][j];}\nD[245] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������椒楚樵炒焦硝礁礎秒稍肖艸苕草蕉貂超酢醋醮促囑燭矗蜀觸寸忖村邨叢塚寵悤憁摠總聰蔥銃撮催崔最墜抽推椎楸樞湫皺秋芻萩諏趨追鄒酋醜錐錘鎚雛騶鰍丑畜祝竺筑築縮蓄蹙蹴軸逐春椿瑃出朮黜充忠沖蟲衝衷悴膵萃�\".split(\"\");\nfor(j = 0; j != D[245].length; ++j) if(D[245][j].charCodeAt(0) !== 0xFFFD) { e[D[245][j]] = 62720 + j; d[62720 + j] = D[245][j];}\nD[246] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������贅取吹嘴娶就炊翠聚脆臭趣醉驟鷲側仄厠惻測層侈値嗤峙幟恥梔治淄熾痔痴癡稚穉緇緻置致蚩輜雉馳齒則勅飭親七柒漆侵寢枕沈浸琛砧針鍼蟄秤稱快他咤唾墮妥惰打拖朶楕舵陀馱駝倬卓啄坼度托拓擢晫柝濁濯琢琸託�\".split(\"\");\nfor(j = 0; j != D[246].length; ++j) if(D[246][j].charCodeAt(0) !== 0xFFFD) { e[D[246][j]] = 62976 + j; d[62976 + j] = D[246][j];}\nD[247] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������鐸呑嘆坦彈憚歎灘炭綻誕奪脫探眈耽貪塔搭榻宕帑湯糖蕩兌台太怠態殆汰泰笞胎苔跆邰颱宅擇澤撑攄兎吐土討慟桶洞痛筒統通堆槌腿褪退頹偸套妬投透鬪慝特闖坡婆巴把播擺杷波派爬琶破罷芭跛頗判坂板版瓣販辦鈑�\".split(\"\");\nfor(j = 0; j != D[247].length; ++j) if(D[247][j].charCodeAt(0) !== 0xFFFD) { e[D[247][j]] = 63232 + j; d[63232 + j] = D[247][j];}\nD[248] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������阪八叭捌佩唄悖敗沛浿牌狽稗覇貝彭澎烹膨愎便偏扁片篇編翩遍鞭騙貶坪平枰萍評吠嬖幣廢弊斃肺蔽閉陛佈包匍匏咆哺圃布怖抛抱捕暴泡浦疱砲胞脯苞葡蒲袍褒逋鋪飽鮑幅暴曝瀑爆輻俵剽彪慓杓標漂瓢票表豹飇飄驃�\".split(\"\");\nfor(j = 0; j != D[248].length; ++j) if(D[248][j].charCodeAt(0) !== 0xFFFD) { e[D[248][j]] = 63488 + j; d[63488 + j] = D[248][j];}\nD[249] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������品稟楓諷豊風馮彼披疲皮被避陂匹弼必泌珌畢疋筆苾馝乏逼下何厦夏廈昰河瑕荷蝦賀遐霞鰕壑學虐謔鶴寒恨悍旱汗漢澣瀚罕翰閑閒限韓割轄函含咸啣喊檻涵緘艦銜陷鹹合哈盒蛤閤闔陜亢伉姮嫦巷恒抗杭桁沆港缸肛航�\".split(\"\");\nfor(j = 0; j != D[249].length; ++j) if(D[249][j].charCodeAt(0) !== 0xFFFD) { e[D[249][j]] = 63744 + j; d[63744 + j] = D[249][j];}\nD[250] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������行降項亥偕咳垓奚孩害懈楷海瀣蟹解該諧邂駭骸劾核倖幸杏荇行享向嚮珦鄕響餉饗香噓墟虛許憲櫶獻軒歇險驗奕爀赫革俔峴弦懸晛泫炫玄玹現眩睍絃絢縣舷衒見賢鉉顯孑穴血頁嫌俠協夾峽挾浹狹脅脇莢鋏頰亨兄刑型�\".split(\"\");\nfor(j = 0; j != D[250].length; ++j) if(D[250][j].charCodeAt(0) !== 0xFFFD) { e[D[250][j]] = 64000 + j; d[64000 + j] = D[250][j];}\nD[251] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������形泂滎瀅灐炯熒珩瑩荊螢衡逈邢鎣馨兮彗惠慧暳蕙蹊醯鞋乎互呼壕壺好岵弧戶扈昊晧毫浩淏湖滸澔濠濩灝狐琥瑚瓠皓祜糊縞胡芦葫蒿虎號蝴護豪鎬頀顥惑或酷婚昏混渾琿魂忽惚笏哄弘汞泓洪烘紅虹訌鴻化和嬅樺火畵�\".split(\"\");\nfor(j = 0; j != D[251].length; ++j) if(D[251][j].charCodeAt(0) !== 0xFFFD) { e[D[251][j]] = 64256 + j; d[64256 + j] = D[251][j];}\nD[252] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������禍禾花華話譁貨靴廓擴攫確碻穫丸喚奐宦幻患換歡晥桓渙煥環紈還驩鰥活滑猾豁闊凰幌徨恍惶愰慌晃晄榥況湟滉潢煌璜皇篁簧荒蝗遑隍黃匯回廻徊恢悔懷晦會檜淮澮灰獪繪膾茴蛔誨賄劃獲宖橫鐄哮嚆孝效斅曉梟涍淆�\".split(\"\");\nfor(j = 0; j != D[252].length; ++j) if(D[252][j].charCodeAt(0) !== 0xFFFD) { e[D[252][j]] = 64512 + j; d[64512 + j] = D[252][j];}\nD[253] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������爻肴酵驍侯候厚后吼喉嗅帿後朽煦珝逅勛勳塤壎焄熏燻薰訓暈薨喧暄煊萱卉喙毁彙徽揮暉煇諱輝麾休携烋畦虧恤譎鷸兇凶匈洶胸黑昕欣炘痕吃屹紇訖欠欽歆吸恰洽翕興僖凞喜噫囍姬嬉希憙憘戱晞曦熙熹熺犧禧稀羲詰�\".split(\"\");\nfor(j = 0; j != D[253].length; ++j) if(D[253][j].charCodeAt(0) !== 0xFFFD) { e[D[253][j]] = 64768 + j; d[64768 + j] = D[253][j];}\nreturn {\"enc\": e, \"dec\": d }; })();\ncptable[950] = (function(){ var d = [], e = {}, D = [], j;\nD[0] = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~��������������������������������������������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[0].length; ++j) if(D[0][j].charCodeAt(0) !== 0xFFFD) { e[D[0][j]] = 0 + j; d[0 + j] = D[0][j];}\nD[161] = \"���������������������������������������������������������������� ,、。.‧;:?!︰…‥﹐﹑﹒·﹔﹕﹖﹗|–︱—︳╴︴﹏()︵︶{}︷︸〔〕︹︺【】︻︼《》︽︾〈〉︿﹀「」﹁﹂『』﹃﹄﹙﹚����������������������������������﹛﹜﹝﹞‘’“”〝〞‵′#&*※§〃○●△▲◎☆★◇◆□■▽▼㊣℅¯ ̄_ˍ﹉﹊﹍﹎﹋﹌﹟﹠﹡+-×÷±√<>=≦≧≠∞≒≡﹢﹣﹤﹥﹦~∩∪⊥∠∟⊿㏒㏑∫∮∵∴♀♂⊕⊙↑↓←→↖↗↙↘∥∣/�\".split(\"\");\nfor(j = 0; j != D[161].length; ++j) if(D[161][j].charCodeAt(0) !== 0xFFFD) { e[D[161][j]] = 41216 + j; d[41216 + j] = D[161][j];}\nD[162] = \"����������������������������������������������������������������\∕﹨$¥〒¢£%@℃℉﹩﹪﹫㏕㎜㎝㎞㏎㎡㎎㎏㏄°兙兛兞兝兡兣嗧瓩糎▁▂▃▄▅▆▇█▏▎▍▌▋▊▉┼┴┬┤├▔─│▕┌┐└┘╭����������������������������������╮╰╯═╞╪╡◢◣◥◤╱╲╳0123456789ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ〡〢〣〤〥〦〧〨〩十卄卅ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuv�\".split(\"\");\nfor(j = 0; j != D[162].length; ++j) if(D[162][j].charCodeAt(0) !== 0xFFFD) { e[D[162][j]] = 41472 + j; d[41472 + j] = D[162][j];}\nD[163] = \"����������������������������������������������������������������wxyzΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρστυφχψωㄅㄆㄇㄈㄉㄊㄋㄌㄍㄎㄏ����������������������������������ㄐㄑㄒㄓㄔㄕㄖㄗㄘㄙㄚㄛㄜㄝㄞㄟㄠㄡㄢㄣㄤㄥㄦㄧㄨㄩ˙ˉˊˇˋ���������������������������������€������������������������������\".split(\"\");\nfor(j = 0; j != D[163].length; ++j) if(D[163][j].charCodeAt(0) !== 0xFFFD) { e[D[163][j]] = 41728 + j; d[41728 + j] = D[163][j];}\nD[164] = \"����������������������������������������������������������������一乙丁七乃九了二人儿入八几刀刁力匕十卜又三下丈上丫丸凡久么也乞于亡兀刃勺千叉口土士夕大女子孑孓寸小尢尸山川工己已巳巾干廾弋弓才����������������������������������丑丐不中丰丹之尹予云井互五亢仁什仃仆仇仍今介仄元允內六兮公冗凶分切刈勻勾勿化匹午升卅卞厄友及反壬天夫太夭孔少尤尺屯巴幻廿弔引心戈戶手扎支文斗斤方日曰月木欠止歹毋比毛氏水火爪父爻片牙牛犬王丙�\".split(\"\");\nfor(j = 0; j != D[164].length; ++j) if(D[164][j].charCodeAt(0) !== 0xFFFD) { e[D[164][j]] = 41984 + j; d[41984 + j] = D[164][j];}\nD[165] = \"����������������������������������������������������������������世丕且丘主乍乏乎以付仔仕他仗代令仙仞充兄冉冊冬凹出凸刊加功包匆北匝仟半卉卡占卯卮去可古右召叮叩叨叼司叵叫另只史叱台句叭叻四囚外����������������������������������央失奴奶孕它尼巨巧左市布平幼弁弘弗必戊打扔扒扑斥旦朮本未末札正母民氐永汁汀氾犯玄玉瓜瓦甘生用甩田由甲申疋白皮皿目矛矢石示禾穴立丞丟乒乓乩亙交亦亥仿伉伙伊伕伍伐休伏仲件任仰仳份企伋光兇兆先全�\".split(\"\");\nfor(j = 0; j != D[165].length; ++j) if(D[165][j].charCodeAt(0) !== 0xFFFD) { e[D[165][j]] = 42240 + j; d[42240 + j] = D[165][j];}\nD[166] = \"����������������������������������������������������������������共再冰列刑划刎刖劣匈匡匠印危吉吏同吊吐吁吋各向名合吃后吆吒因回囝圳地在圭圬圯圩夙多夷夸妄奸妃好她如妁字存宇守宅安寺尖屹州帆并年����������������������������������式弛忙忖戎戌戍成扣扛托收早旨旬旭曲曳有朽朴朱朵次此死氖汝汗汙江池汐汕污汛汍汎灰牟牝百竹米糸缶羊羽老考而耒耳聿肉肋肌臣自至臼舌舛舟艮色艾虫血行衣西阡串亨位住佇佗佞伴佛何估佐佑伽伺伸佃佔似但佣�\".split(\"\");\nfor(j = 0; j != D[166].length; ++j) if(D[166][j].charCodeAt(0) !== 0xFFFD) { e[D[166][j]] = 42496 + j; d[42496 + j] = D[166][j];}\nD[167] = \"����������������������������������������������������������������作你伯低伶余佝佈佚兌克免兵冶冷別判利刪刨劫助努劬匣即卵吝吭吞吾否呎吧呆呃吳呈呂君吩告吹吻吸吮吵吶吠吼呀吱含吟听囪困囤囫坊坑址坍����������������������������������均坎圾坐坏圻壯夾妝妒妨妞妣妙妖妍妤妓妊妥孝孜孚孛完宋宏尬局屁尿尾岐岑岔岌巫希序庇床廷弄弟彤形彷役忘忌志忍忱快忸忪戒我抄抗抖技扶抉扭把扼找批扳抒扯折扮投抓抑抆改攻攸旱更束李杏材村杜杖杞杉杆杠�\".split(\"\");\nfor(j = 0; j != D[167].length; ++j) if(D[167][j].charCodeAt(0) !== 0xFFFD) { e[D[167][j]] = 42752 + j; d[42752 + j] = D[167][j];}\nD[168] = \"����������������������������������������������������������������杓杗步每求汞沙沁沈沉沅沛汪決沐汰沌汨沖沒汽沃汲汾汴沆汶沍沔沘沂灶灼災灸牢牡牠狄狂玖甬甫男甸皂盯矣私秀禿究系罕肖肓肝肘肛肚育良芒����������������������������������芋芍見角言谷豆豕貝赤走足身車辛辰迂迆迅迄巡邑邢邪邦那酉釆里防阮阱阪阬並乖乳事些亞享京佯依侍佳使佬供例來侃佰併侈佩佻侖佾侏侑佺兔兒兕兩具其典冽函刻券刷刺到刮制剁劾劻卒協卓卑卦卷卸卹取叔受味呵�\".split(\"\");\nfor(j = 0; j != D[168].length; ++j) if(D[168][j].charCodeAt(0) !== 0xFFFD) { e[D[168][j]] = 43008 + j; d[43008 + j] = D[168][j];}\nD[169] = \"����������������������������������������������������������������咖呸咕咀呻呷咄咒咆呼咐呱呶和咚呢周咋命咎固垃坷坪坩坡坦坤坼夜奉奇奈奄奔妾妻委妹妮姑姆姐姍始姓姊妯妳姒姅孟孤季宗定官宜宙宛尚屈居����������������������������������屆岷岡岸岩岫岱岳帘帚帖帕帛帑幸庚店府底庖延弦弧弩往征彿彼忝忠忽念忿怏怔怯怵怖怪怕怡性怩怫怛或戕房戾所承拉拌拄抿拂抹拒招披拓拔拋拈抨抽押拐拙拇拍抵拚抱拘拖拗拆抬拎放斧於旺昔易昌昆昂明昀昏昕昊�\".split(\"\");\nfor(j = 0; j != D[169].length; ++j) if(D[169][j].charCodeAt(0) !== 0xFFFD) { e[D[169][j]] = 43264 + j; d[43264 + j] = D[169][j];}\nD[170] = \"����������������������������������������������������������������昇服朋杭枋枕東果杳杷枇枝林杯杰板枉松析杵枚枓杼杪杲欣武歧歿氓氛泣注泳沱泌泥河沽沾沼波沫法泓沸泄油況沮泗泅泱沿治泡泛泊沬泯泜泖泠����������������������������������炕炎炒炊炙爬爭爸版牧物狀狎狙狗狐玩玨玟玫玥甽疝疙疚的盂盲直知矽社祀祁秉秈空穹竺糾罔羌羋者肺肥肢肱股肫肩肴肪肯臥臾舍芳芝芙芭芽芟芹花芬芥芯芸芣芰芾芷虎虱初表軋迎返近邵邸邱邶采金長門阜陀阿阻附�\".split(\"\");\nfor(j = 0; j != D[170].length; ++j) if(D[170][j].charCodeAt(0) !== 0xFFFD) { e[D[170][j]] = 43520 + j; d[43520 + j] = D[170][j];}\nD[171] = \"����������������������������������������������������������������陂隹雨青非亟亭亮信侵侯便俠俑俏保促侶俘俟俊俗侮俐俄係俚俎俞侷兗冒冑冠剎剃削前剌剋則勇勉勃勁匍南卻厚叛咬哀咨哎哉咸咦咳哇哂咽咪品����������������������������������哄哈咯咫咱咻咩咧咿囿垂型垠垣垢城垮垓奕契奏奎奐姜姘姿姣姨娃姥姪姚姦威姻孩宣宦室客宥封屎屏屍屋峙峒巷帝帥帟幽庠度建弈弭彥很待徊律徇後徉怒思怠急怎怨恍恰恨恢恆恃恬恫恪恤扁拜挖按拼拭持拮拽指拱拷�\".split(\"\");\nfor(j = 0; j != D[171].length; ++j) if(D[171][j].charCodeAt(0) !== 0xFFFD) { e[D[171][j]] = 43776 + j; d[43776 + j] = D[171][j];}\nD[172] = \"����������������������������������������������������������������拯括拾拴挑挂政故斫施既春昭映昧是星昨昱昤曷柿染柱柔某柬架枯柵柩柯柄柑枴柚查枸柏柞柳枰柙柢柝柒歪殃殆段毒毗氟泉洋洲洪流津洌洱洞洗����������������������������������活洽派洶洛泵洹洧洸洩洮洵洎洫炫為炳炬炯炭炸炮炤爰牲牯牴狩狠狡玷珊玻玲珍珀玳甚甭畏界畎畋疫疤疥疢疣癸皆皇皈盈盆盃盅省盹相眉看盾盼眇矜砂研砌砍祆祉祈祇禹禺科秒秋穿突竿竽籽紂紅紀紉紇約紆缸美羿耄�\".split(\"\");\nfor(j = 0; j != D[172].length; ++j) if(D[172][j].charCodeAt(0) !== 0xFFFD) { e[D[172][j]] = 44032 + j; d[44032 + j] = D[172][j];}\nD[173] = \"����������������������������������������������������������������耐耍耑耶胖胥胚胃胄背胡胛胎胞胤胝致舢苧范茅苣苛苦茄若茂茉苒苗英茁苜苔苑苞苓苟苯茆虐虹虻虺衍衫要觔計訂訃貞負赴赳趴軍軌述迦迢迪迥����������������������������������迭迫迤迨郊郎郁郃酋酊重閂限陋陌降面革韋韭音頁風飛食首香乘亳倌倍倣俯倦倥俸倩倖倆值借倚倒們俺倀倔倨俱倡個候倘俳修倭倪俾倫倉兼冤冥冢凍凌准凋剖剜剔剛剝匪卿原厝叟哨唐唁唷哼哥哲唆哺唔哩哭員唉哮哪�\".split(\"\");\nfor(j = 0; j != D[173].length; ++j) if(D[173][j].charCodeAt(0) !== 0xFFFD) { e[D[173][j]] = 44288 + j; d[44288 + j] = D[173][j];}\nD[174] = \"����������������������������������������������������������������哦唧唇哽唏圃圄埂埔埋埃堉夏套奘奚娑娘娜娟娛娓姬娠娣娩娥娌娉孫屘宰害家宴宮宵容宸射屑展屐峭峽峻峪峨峰島崁峴差席師庫庭座弱徒徑徐恙����������������������������������恣恥恐恕恭恩息悄悟悚悍悔悌悅悖扇拳挈拿捎挾振捕捂捆捏捉挺捐挽挪挫挨捍捌效敉料旁旅時晉晏晃晒晌晅晁書朔朕朗校核案框桓根桂桔栩梳栗桌桑栽柴桐桀格桃株桅栓栘桁殊殉殷氣氧氨氦氤泰浪涕消涇浦浸海浙涓�\".split(\"\");\nfor(j = 0; j != D[174].length; ++j) if(D[174][j].charCodeAt(0) !== 0xFFFD) { e[D[174][j]] = 44544 + j; d[44544 + j] = D[174][j];}\nD[175] = \"����������������������������������������������������������������浬涉浮浚浴浩涌涊浹涅浥涔烊烘烤烙烈烏爹特狼狹狽狸狷玆班琉珮珠珪珞畔畝畜畚留疾病症疲疳疽疼疹痂疸皋皰益盍盎眩真眠眨矩砰砧砸砝破砷����������������������������������砥砭砠砟砲祕祐祠祟祖神祝祗祚秤秣秧租秦秩秘窄窈站笆笑粉紡紗紋紊素索純紐紕級紜納紙紛缺罟羔翅翁耆耘耕耙耗耽耿胱脂胰脅胭胴脆胸胳脈能脊胼胯臭臬舀舐航舫舨般芻茫荒荔荊茸荐草茵茴荏茲茹茶茗荀茱茨荃�\".split(\"\");\nfor(j = 0; j != D[175].length; ++j) if(D[175][j].charCodeAt(0) !== 0xFFFD) { e[D[175][j]] = 44800 + j; d[44800 + j] = D[175][j];}\nD[176] = \"����������������������������������������������������������������虔蚊蚪蚓蚤蚩蚌蚣蚜衰衷袁袂衽衹記訐討訌訕訊託訓訖訏訑豈豺豹財貢起躬軒軔軏辱送逆迷退迺迴逃追逅迸邕郡郝郢酒配酌釘針釗釜釙閃院陣陡����������������������������������陛陝除陘陞隻飢馬骨高鬥鬲鬼乾偺偽停假偃偌做偉健偶偎偕偵側偷偏倏偯偭兜冕凰剪副勒務勘動匐匏匙匿區匾參曼商啪啦啄啞啡啃啊唱啖問啕唯啤唸售啜唬啣唳啁啗圈國圉域堅堊堆埠埤基堂堵執培夠奢娶婁婉婦婪婀�\".split(\"\");\nfor(j = 0; j != D[176].length; ++j) if(D[176][j].charCodeAt(0) !== 0xFFFD) { e[D[176][j]] = 45056 + j; d[45056 + j] = D[176][j];}\nD[177] = \"����������������������������������������������������������������娼婢婚婆婊孰寇寅寄寂宿密尉專將屠屜屝崇崆崎崛崖崢崑崩崔崙崤崧崗巢常帶帳帷康庸庶庵庾張強彗彬彩彫得徙從徘御徠徜恿患悉悠您惋悴惦悽����������������������������������情悻悵惜悼惘惕惆惟悸惚惇戚戛扈掠控捲掖探接捷捧掘措捱掩掉掃掛捫推掄授掙採掬排掏掀捻捩捨捺敝敖救教敗啟敏敘敕敔斜斛斬族旋旌旎晝晚晤晨晦晞曹勗望梁梯梢梓梵桿桶梱梧梗械梃棄梭梆梅梔條梨梟梡梂欲殺�\".split(\"\");\nfor(j = 0; j != D[177].length; ++j) if(D[177][j].charCodeAt(0) !== 0xFFFD) { e[D[177][j]] = 45312 + j; d[45312 + j] = D[177][j];}\nD[178] = \"����������������������������������������������������������������毫毬氫涎涼淳淙液淡淌淤添淺清淇淋涯淑涮淞淹涸混淵淅淒渚涵淚淫淘淪深淮淨淆淄涪淬涿淦烹焉焊烽烯爽牽犁猜猛猖猓猙率琅琊球理現琍瓠瓶����������������������������������瓷甜產略畦畢異疏痔痕疵痊痍皎盔盒盛眷眾眼眶眸眺硫硃硎祥票祭移窒窕笠笨笛第符笙笞笮粒粗粕絆絃統紮紹紼絀細紳組累終紲紱缽羞羚翌翎習耜聊聆脯脖脣脫脩脰脤舂舵舷舶船莎莞莘荸莢莖莽莫莒莊莓莉莠荷荻荼�\".split(\"\");\nfor(j = 0; j != D[178].length; ++j) if(D[178][j].charCodeAt(0) !== 0xFFFD) { e[D[178][j]] = 45568 + j; d[45568 + j] = D[178][j];}\nD[179] = \"����������������������������������������������������������������莆莧處彪蛇蛀蚶蛄蚵蛆蛋蚱蚯蛉術袞袈被袒袖袍袋覓規訪訝訣訥許設訟訛訢豉豚販責貫貨貪貧赧赦趾趺軛軟這逍通逗連速逝逐逕逞造透逢逖逛途����������������������������������部郭都酗野釵釦釣釧釭釩閉陪陵陳陸陰陴陶陷陬雀雪雩章竟頂頃魚鳥鹵鹿麥麻傢傍傅備傑傀傖傘傚最凱割剴創剩勞勝勛博厥啻喀喧啼喊喝喘喂喜喪喔喇喋喃喳單喟唾喲喚喻喬喱啾喉喫喙圍堯堪場堤堰報堡堝堠壹壺奠�\".split(\"\");\nfor(j = 0; j != D[179].length; ++j) if(D[179][j].charCodeAt(0) !== 0xFFFD) { e[D[179][j]] = 45824 + j; d[45824 + j] = D[179][j];}\nD[180] = \"����������������������������������������������������������������婷媚婿媒媛媧孳孱寒富寓寐尊尋就嵌嵐崴嵇巽幅帽幀幃幾廊廁廂廄弼彭復循徨惑惡悲悶惠愜愣惺愕惰惻惴慨惱愎惶愉愀愒戟扉掣掌描揀揩揉揆揍����������������������������������插揣提握揖揭揮捶援揪換摒揚揹敞敦敢散斑斐斯普晰晴晶景暑智晾晷曾替期朝棺棕棠棘棗椅棟棵森棧棹棒棲棣棋棍植椒椎棉棚楮棻款欺欽殘殖殼毯氮氯氬港游湔渡渲湧湊渠渥渣減湛湘渤湖湮渭渦湯渴湍渺測湃渝渾滋�\".split(\"\");\nfor(j = 0; j != D[180].length; ++j) if(D[180][j].charCodeAt(0) !== 0xFFFD) { e[D[180][j]] = 46080 + j; d[46080 + j] = D[180][j];}\nD[181] = \"����������������������������������������������������������������溉渙湎湣湄湲湩湟焙焚焦焰無然煮焜牌犄犀猶猥猴猩琺琪琳琢琥琵琶琴琯琛琦琨甥甦畫番痢痛痣痙痘痞痠登發皖皓皴盜睏短硝硬硯稍稈程稅稀窘����������������������������������窗窖童竣等策筆筐筒答筍筋筏筑粟粥絞結絨絕紫絮絲絡給絢絰絳善翔翕耋聒肅腕腔腋腑腎脹腆脾腌腓腴舒舜菩萃菸萍菠菅萋菁華菱菴著萊菰萌菌菽菲菊萸萎萄菜萇菔菟虛蛟蛙蛭蛔蛛蛤蛐蛞街裁裂袱覃視註詠評詞証詁�\".split(\"\");\nfor(j = 0; j != D[181].length; ++j) if(D[181][j].charCodeAt(0) !== 0xFFFD) { e[D[181][j]] = 46336 + j; d[46336 + j] = D[181][j];}\nD[182] = \"����������������������������������������������������������������詔詛詐詆訴診訶詖象貂貯貼貳貽賁費賀貴買貶貿貸越超趁跎距跋跚跑跌跛跆軻軸軼辜逮逵週逸進逶鄂郵鄉郾酣酥量鈔鈕鈣鈉鈞鈍鈐鈇鈑閔閏開閑����������������������������������間閒閎隊階隋陽隅隆隍陲隄雁雅雄集雇雯雲韌項順須飧飪飯飩飲飭馮馭黃黍黑亂傭債傲傳僅傾催傷傻傯僇剿剷剽募勦勤勢勣匯嗟嗨嗓嗦嗎嗜嗇嗑嗣嗤嗯嗚嗡嗅嗆嗥嗉園圓塞塑塘塗塚塔填塌塭塊塢塒塋奧嫁嫉嫌媾媽媼�\".split(\"\");\nfor(j = 0; j != D[182].length; ++j) if(D[182][j].charCodeAt(0) !== 0xFFFD) { e[D[182][j]] = 46592 + j; d[46592 + j] = D[182][j];}\nD[183] = \"����������������������������������������������������������������媳嫂媲嵩嵯幌幹廉廈弒彙徬微愚意慈感想愛惹愁愈慎慌慄慍愾愴愧愍愆愷戡戢搓搾搞搪搭搽搬搏搜搔損搶搖搗搆敬斟新暗暉暇暈暖暄暘暍會榔業����������������������������������楚楷楠楔極椰概楊楨楫楞楓楹榆楝楣楛歇歲毀殿毓毽溢溯滓溶滂源溝滇滅溥溘溼溺溫滑準溜滄滔溪溧溴煎煙煩煤煉照煜煬煦煌煥煞煆煨煖爺牒猷獅猿猾瑯瑚瑕瑟瑞瑁琿瑙瑛瑜當畸瘀痰瘁痲痱痺痿痴痳盞盟睛睫睦睞督�\".split(\"\");\nfor(j = 0; j != D[183].length; ++j) if(D[183][j].charCodeAt(0) !== 0xFFFD) { e[D[183][j]] = 46848 + j; d[46848 + j] = D[183][j];}\nD[184] = \"����������������������������������������������������������������睹睪睬睜睥睨睢矮碎碰碗碘碌碉硼碑碓硿祺祿禁萬禽稜稚稠稔稟稞窟窠筷節筠筮筧粱粳粵經絹綑綁綏絛置罩罪署義羨群聖聘肆肄腱腰腸腥腮腳腫����������������������������������腹腺腦舅艇蒂葷落萱葵葦葫葉葬葛萼萵葡董葩葭葆虞虜號蛹蜓蜈蜇蜀蛾蛻蜂蜃蜆蜊衙裟裔裙補裘裝裡裊裕裒覜解詫該詳試詩詰誇詼詣誠話誅詭詢詮詬詹詻訾詨豢貊貉賊資賈賄貲賃賂賅跡跟跨路跳跺跪跤跦躲較載軾輊�\".split(\"\");\nfor(j = 0; j != D[184].length; ++j) if(D[184][j].charCodeAt(0) !== 0xFFFD) { e[D[184][j]] = 47104 + j; d[47104 + j] = D[184][j];}\nD[185] = \"����������������������������������������������������������������辟農運遊道遂達逼違遐遇遏過遍遑逾遁鄒鄗酬酪酩釉鈷鉗鈸鈽鉀鈾鉛鉋鉤鉑鈴鉉鉍鉅鈹鈿鉚閘隘隔隕雍雋雉雊雷電雹零靖靴靶預頑頓頊頒頌飼飴����������������������������������飽飾馳馱馴髡鳩麂鼎鼓鼠僧僮僥僖僭僚僕像僑僱僎僩兢凳劃劂匱厭嗾嘀嘛嘗嗽嘔嘆嘉嘍嘎嗷嘖嘟嘈嘐嗶團圖塵塾境墓墊塹墅塽壽夥夢夤奪奩嫡嫦嫩嫗嫖嫘嫣孵寞寧寡寥實寨寢寤察對屢嶄嶇幛幣幕幗幔廓廖弊彆彰徹慇�\".split(\"\");\nfor(j = 0; j != D[185].length; ++j) if(D[185][j].charCodeAt(0) !== 0xFFFD) { e[D[185][j]] = 47360 + j; d[47360 + j] = D[185][j];}\nD[186] = \"����������������������������������������������������������������愿態慷慢慣慟慚慘慵截撇摘摔撤摸摟摺摑摧搴摭摻敲斡旗旖暢暨暝榜榨榕槁榮槓構榛榷榻榫榴槐槍榭槌榦槃榣歉歌氳漳演滾漓滴漩漾漠漬漏漂漢����������������������������������滿滯漆漱漸漲漣漕漫漯澈漪滬漁滲滌滷熔熙煽熊熄熒爾犒犖獄獐瑤瑣瑪瑰瑭甄疑瘧瘍瘋瘉瘓盡監瞄睽睿睡磁碟碧碳碩碣禎福禍種稱窪窩竭端管箕箋筵算箝箔箏箸箇箄粹粽精綻綰綜綽綾綠緊綴網綱綺綢綿綵綸維緒緇綬�\".split(\"\");\nfor(j = 0; j != D[186].length; ++j) if(D[186][j].charCodeAt(0) !== 0xFFFD) { e[D[186][j]] = 47616 + j; d[47616 + j] = D[186][j];}\nD[187] = \"����������������������������������������������������������������罰翠翡翟聞聚肇腐膀膏膈膊腿膂臧臺與舔舞艋蓉蒿蓆蓄蒙蒞蒲蒜蓋蒸蓀蓓蒐蒼蓑蓊蜿蜜蜻蜢蜥蜴蜘蝕蜷蜩裳褂裴裹裸製裨褚裯誦誌語誣認誡誓誤����������������������������������說誥誨誘誑誚誧豪貍貌賓賑賒赫趙趕跼輔輒輕輓辣遠遘遜遣遙遞遢遝遛鄙鄘鄞酵酸酷酴鉸銀銅銘銖鉻銓銜銨鉼銑閡閨閩閣閥閤隙障際雌雒需靼鞅韶頗領颯颱餃餅餌餉駁骯骰髦魁魂鳴鳶鳳麼鼻齊億儀僻僵價儂儈儉儅凜�\".split(\"\");\nfor(j = 0; j != D[187].length; ++j) if(D[187][j].charCodeAt(0) !== 0xFFFD) { e[D[187][j]] = 47872 + j; d[47872 + j] = D[187][j];}\nD[188] = \"����������������������������������������������������������������劇劈劉劍劊勰厲嘮嘻嘹嘲嘿嘴嘩噓噎噗噴嘶嘯嘰墀墟增墳墜墮墩墦奭嬉嫻嬋嫵嬌嬈寮寬審寫層履嶝嶔幢幟幡廢廚廟廝廣廠彈影德徵慶慧慮慝慕憂����������������������������������慼慰慫慾憧憐憫憎憬憚憤憔憮戮摩摯摹撞撲撈撐撰撥撓撕撩撒撮播撫撚撬撙撢撳敵敷數暮暫暴暱樣樟槨樁樞標槽模樓樊槳樂樅槭樑歐歎殤毅毆漿潼澄潑潦潔澆潭潛潸潮澎潺潰潤澗潘滕潯潠潟熟熬熱熨牖犛獎獗瑩璋璃�\".split(\"\");\nfor(j = 0; j != D[188].length; ++j) if(D[188][j].charCodeAt(0) !== 0xFFFD) { e[D[188][j]] = 48128 + j; d[48128 + j] = D[188][j];}\nD[189] = \"����������������������������������������������������������������瑾璀畿瘠瘩瘟瘤瘦瘡瘢皚皺盤瞎瞇瞌瞑瞋磋磅確磊碾磕碼磐稿稼穀稽稷稻窯窮箭箱範箴篆篇篁箠篌糊締練緯緻緘緬緝編緣線緞緩綞緙緲緹罵罷羯����������������������������������翩耦膛膜膝膠膚膘蔗蔽蔚蓮蔬蔭蔓蔑蔣蔡蔔蓬蔥蓿蔆螂蝴蝶蝠蝦蝸蝨蝙蝗蝌蝓衛衝褐複褒褓褕褊誼諒談諄誕請諸課諉諂調誰論諍誶誹諛豌豎豬賠賞賦賤賬賭賢賣賜質賡赭趟趣踫踐踝踢踏踩踟踡踞躺輝輛輟輩輦輪輜輞�\".split(\"\");\nfor(j = 0; j != D[189].length; ++j) if(D[189][j].charCodeAt(0) !== 0xFFFD) { e[D[189][j]] = 48384 + j; d[48384 + j] = D[189][j];}\nD[190] = \"����������������������������������������������������������������輥適遮遨遭遷鄰鄭鄧鄱醇醉醋醃鋅銻銷鋪銬鋤鋁銳銼鋒鋇鋰銲閭閱霄霆震霉靠鞍鞋鞏頡頫頜颳養餓餒餘駝駐駟駛駑駕駒駙骷髮髯鬧魅魄魷魯鴆鴉����������������������������������鴃麩麾黎墨齒儒儘儔儐儕冀冪凝劑劓勳噙噫噹噩噤噸噪器噥噱噯噬噢噶壁墾壇壅奮嬝嬴學寰導彊憲憑憩憊懍憶憾懊懈戰擅擁擋撻撼據擄擇擂操撿擒擔撾整曆曉暹曄曇暸樽樸樺橙橫橘樹橄橢橡橋橇樵機橈歙歷氅濂澱澡�\".split(\"\");\nfor(j = 0; j != D[190].length; ++j) if(D[190][j].charCodeAt(0) !== 0xFFFD) { e[D[190][j]] = 48640 + j; d[48640 + j] = D[190][j];}\nD[191] = \"����������������������������������������������������������������濃澤濁澧澳激澹澶澦澠澴熾燉燐燒燈燕熹燎燙燜燃燄獨璜璣璘璟璞瓢甌甍瘴瘸瘺盧盥瞠瞞瞟瞥磨磚磬磧禦積穎穆穌穋窺篙簑築篤篛篡篩篦糕糖縊����������������������������������縑縈縛縣縞縝縉縐罹羲翰翱翮耨膳膩膨臻興艘艙蕊蕙蕈蕨蕩蕃蕉蕭蕪蕞螃螟螞螢融衡褪褲褥褫褡親覦諦諺諫諱謀諜諧諮諾謁謂諷諭諳諶諼豫豭貓賴蹄踱踴蹂踹踵輻輯輸輳辨辦遵遴選遲遼遺鄴醒錠錶鋸錳錯錢鋼錫錄錚�\".split(\"\");\nfor(j = 0; j != D[191].length; ++j) if(D[191][j].charCodeAt(0) !== 0xFFFD) { e[D[191][j]] = 48896 + j; d[48896 + j] = D[191][j];}\nD[192] = \"����������������������������������������������������������������錐錦錡錕錮錙閻隧隨險雕霎霑霖霍霓霏靛靜靦鞘頰頸頻頷頭頹頤餐館餞餛餡餚駭駢駱骸骼髻髭鬨鮑鴕鴣鴦鴨鴒鴛默黔龍龜優償儡儲勵嚎嚀嚐嚅嚇����������������������������������嚏壕壓壑壎嬰嬪嬤孺尷屨嶼嶺嶽嶸幫彌徽應懂懇懦懋戲戴擎擊擘擠擰擦擬擱擢擭斂斃曙曖檀檔檄檢檜櫛檣橾檗檐檠歜殮毚氈濘濱濟濠濛濤濫濯澀濬濡濩濕濮濰燧營燮燦燥燭燬燴燠爵牆獰獲璩環璦璨癆療癌盪瞳瞪瞰瞬�\".split(\"\");\nfor(j = 0; j != D[192].length; ++j) if(D[192][j].charCodeAt(0) !== 0xFFFD) { e[D[192][j]] = 49152 + j; d[49152 + j] = D[192][j];}\nD[193] = \"����������������������������������������������������������������瞧瞭矯磷磺磴磯礁禧禪穗窿簇簍篾篷簌篠糠糜糞糢糟糙糝縮績繆縷縲繃縫總縱繅繁縴縹繈縵縿縯罄翳翼聱聲聰聯聳臆臃膺臂臀膿膽臉膾臨舉艱薪����������������������������������薄蕾薜薑薔薯薛薇薨薊虧蟀蟑螳蟒蟆螫螻螺蟈蟋褻褶襄褸褽覬謎謗謙講謊謠謝謄謐豁谿豳賺賽購賸賻趨蹉蹋蹈蹊轄輾轂轅輿避遽還邁邂邀鄹醣醞醜鍍鎂錨鍵鍊鍥鍋錘鍾鍬鍛鍰鍚鍔闊闋闌闈闆隱隸雖霜霞鞠韓顆颶餵騁�\".split(\"\");\nfor(j = 0; j != D[193].length; ++j) if(D[193][j].charCodeAt(0) !== 0xFFFD) { e[D[193][j]] = 49408 + j; d[49408 + j] = D[193][j];}\nD[194] = \"����������������������������������������������������������������駿鮮鮫鮪鮭鴻鴿麋黏點黜黝黛鼾齋叢嚕嚮壙壘嬸彝懣戳擴擲擾攆擺擻擷斷曜朦檳檬櫃檻檸櫂檮檯歟歸殯瀉瀋濾瀆濺瀑瀏燻燼燾燸獷獵璧璿甕癖癘����������������������������������癒瞽瞿瞻瞼礎禮穡穢穠竄竅簫簧簪簞簣簡糧織繕繞繚繡繒繙罈翹翻職聶臍臏舊藏薩藍藐藉薰薺薹薦蟯蟬蟲蟠覆覲觴謨謹謬謫豐贅蹙蹣蹦蹤蹟蹕軀轉轍邇邃邈醫醬釐鎔鎊鎖鎢鎳鎮鎬鎰鎘鎚鎗闔闖闐闕離雜雙雛雞霤鞣鞦�\".split(\"\");\nfor(j = 0; j != D[194].length; ++j) if(D[194][j].charCodeAt(0) !== 0xFFFD) { e[D[194][j]] = 49664 + j; d[49664 + j] = D[194][j];}\nD[195] = \"����������������������������������������������������������������鞭韹額顏題顎顓颺餾餿餽餮馥騎髁鬃鬆魏魎魍鯊鯉鯽鯈鯀鵑鵝鵠黠鼕鼬儳嚥壞壟壢寵龐廬懲懷懶懵攀攏曠曝櫥櫝櫚櫓瀛瀟瀨瀚瀝瀕瀘爆爍牘犢獸����������������������������������獺璽瓊瓣疇疆癟癡矇礙禱穫穩簾簿簸簽簷籀繫繭繹繩繪羅繳羶羹羸臘藩藝藪藕藤藥藷蟻蠅蠍蟹蟾襠襟襖襞譁譜識證譚譎譏譆譙贈贊蹼蹲躇蹶蹬蹺蹴轔轎辭邊邋醱醮鏡鏑鏟鏃鏈鏜鏝鏖鏢鏍鏘鏤鏗鏨關隴難霪霧靡韜韻類�\".split(\"\");\nfor(j = 0; j != D[195].length; ++j) if(D[195][j].charCodeAt(0) !== 0xFFFD) { e[D[195][j]] = 49920 + j; d[49920 + j] = D[195][j];}\nD[196] = \"����������������������������������������������������������������願顛颼饅饉騖騙鬍鯨鯧鯖鯛鶉鵡鵲鵪鵬麒麗麓麴勸嚨嚷嚶嚴嚼壤孀孃孽寶巉懸懺攘攔攙曦朧櫬瀾瀰瀲爐獻瓏癢癥礦礪礬礫竇競籌籃籍糯糰辮繽繼����������������������������������纂罌耀臚艦藻藹蘑藺蘆蘋蘇蘊蠔蠕襤覺觸議譬警譯譟譫贏贍躉躁躅躂醴釋鐘鐃鏽闡霰飄饒饑馨騫騰騷騵鰓鰍鹹麵黨鼯齟齣齡儷儸囁囀囂夔屬巍懼懾攝攜斕曩櫻欄櫺殲灌爛犧瓖瓔癩矓籐纏續羼蘗蘭蘚蠣蠢蠡蠟襪襬覽譴�\".split(\"\");\nfor(j = 0; j != D[196].length; ++j) if(D[196][j].charCodeAt(0) !== 0xFFFD) { e[D[196][j]] = 50176 + j; d[50176 + j] = D[196][j];}\nD[197] = \"����������������������������������������������������������������護譽贓躊躍躋轟辯醺鐮鐳鐵鐺鐸鐲鐫闢霸霹露響顧顥饗驅驃驀騾髏魔魑鰭鰥鶯鶴鷂鶸麝黯鼙齜齦齧儼儻囈囊囉孿巔巒彎懿攤權歡灑灘玀瓤疊癮癬����������������������������������禳籠籟聾聽臟襲襯觼讀贖贗躑躓轡酈鑄鑑鑒霽霾韃韁顫饕驕驍髒鬚鱉鰱鰾鰻鷓鷗鼴齬齪龔囌巖戀攣攫攪曬欐瓚竊籤籣籥纓纖纔臢蘸蘿蠱變邐邏鑣鑠鑤靨顯饜驚驛驗髓體髑鱔鱗鱖鷥麟黴囑壩攬灞癱癲矗罐羈蠶蠹衢讓讒�\".split(\"\");\nfor(j = 0; j != D[197].length; ++j) if(D[197][j].charCodeAt(0) !== 0xFFFD) { e[D[197][j]] = 50432 + j; d[50432 + j] = D[197][j];}\nD[198] = \"����������������������������������������������������������������讖艷贛釀鑪靂靈靄韆顰驟鬢魘鱟鷹鷺鹼鹽鼇齷齲廳欖灣籬籮蠻觀躡釁鑲鑰顱饞髖鬣黌灤矚讚鑷韉驢驥纜讜躪釅鑽鑾鑼鱷鱸黷豔鑿鸚爨驪鬱鸛鸞籲���������������������������������������������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[198].length; ++j) if(D[198][j].charCodeAt(0) !== 0xFFFD) { e[D[198][j]] = 50688 + j; d[50688 + j] = D[198][j];}\nD[201] = \"����������������������������������������������������������������乂乜凵匚厂万丌乇亍囗兀屮彳丏冇与丮亓仂仉仈冘勼卬厹圠夃夬尐巿旡殳毌气爿丱丼仨仜仩仡仝仚刌匜卌圢圣夗夯宁宄尒尻屴屳帄庀庂忉戉扐氕����������������������������������氶汃氿氻犮犰玊禸肊阞伎优伬仵伔仱伀价伈伝伂伅伢伓伄仴伒冱刓刉刐劦匢匟卍厊吇囡囟圮圪圴夼妀奼妅奻奾奷奿孖尕尥屼屺屻屾巟幵庄异弚彴忕忔忏扜扞扤扡扦扢扙扠扚扥旯旮朾朹朸朻机朿朼朳氘汆汒汜汏汊汔汋�\".split(\"\");\nfor(j = 0; j != D[201].length; ++j) if(D[201][j].charCodeAt(0) !== 0xFFFD) { e[D[201][j]] = 51456 + j; d[51456 + j] = D[201][j];}\nD[202] = \"����������������������������������������������������������������汌灱牞犴犵玎甪癿穵网艸艼芀艽艿虍襾邙邗邘邛邔阢阤阠阣佖伻佢佉体佤伾佧佒佟佁佘伭伳伿佡冏冹刜刞刡劭劮匉卣卲厎厏吰吷吪呔呅吙吜吥吘����������������������������������吽呏呁吨吤呇囮囧囥坁坅坌坉坋坒夆奀妦妘妠妗妎妢妐妏妧妡宎宒尨尪岍岏岈岋岉岒岊岆岓岕巠帊帎庋庉庌庈庍弅弝彸彶忒忑忐忭忨忮忳忡忤忣忺忯忷忻怀忴戺抃抌抎抏抔抇扱扻扺扰抁抈扷扽扲扴攷旰旴旳旲旵杅杇�\".split(\"\");\nfor(j = 0; j != D[202].length; ++j) if(D[202][j].charCodeAt(0) !== 0xFFFD) { e[D[202][j]] = 51712 + j; d[51712 + j] = D[202][j];}\nD[203] = \"����������������������������������������������������������������杙杕杌杈杝杍杚杋毐氙氚汸汧汫沄沋沏汱汯汩沚汭沇沕沜汦汳汥汻沎灴灺牣犿犽狃狆狁犺狅玕玗玓玔玒町甹疔疕皁礽耴肕肙肐肒肜芐芏芅芎芑芓����������������������������������芊芃芄豸迉辿邟邡邥邞邧邠阰阨阯阭丳侘佼侅佽侀侇佶佴侉侄佷佌侗佪侚佹侁佸侐侜侔侞侒侂侕佫佮冞冼冾刵刲刳剆刱劼匊匋匼厒厔咇呿咁咑咂咈呫呺呾呥呬呴呦咍呯呡呠咘呣呧呤囷囹坯坲坭坫坱坰坶垀坵坻坳坴坢�\".split(\"\");\nfor(j = 0; j != D[203].length; ++j) if(D[203][j].charCodeAt(0) !== 0xFFFD) { e[D[203][j]] = 51968 + j; d[51968 + j] = D[203][j];}\nD[204] = \"����������������������������������������������������������������坨坽夌奅妵妺姏姎妲姌姁妶妼姃姖妱妽姀姈妴姇孢孥宓宕屄屇岮岤岠岵岯岨岬岟岣岭岢岪岧岝岥岶岰岦帗帔帙弨弢弣弤彔徂彾彽忞忥怭怦怙怲怋����������������������������������怴怊怗怳怚怞怬怢怍怐怮怓怑怌怉怜戔戽抭抴拑抾抪抶拊抮抳抯抻抩抰抸攽斨斻昉旼昄昒昈旻昃昋昍昅旽昑昐曶朊枅杬枎枒杶杻枘枆构杴枍枌杺枟枑枙枃杽极杸杹枔欥殀歾毞氝沓泬泫泮泙沶泔沭泧沷泐泂沺泃泆泭泲�\".split(\"\");\nfor(j = 0; j != D[204].length; ++j) if(D[204][j].charCodeAt(0) !== 0xFFFD) { e[D[204][j]] = 52224 + j; d[52224 + j] = D[204][j];}\nD[205] = \"����������������������������������������������������������������泒泝沴沊沝沀泞泀洰泍泇沰泹泏泩泑炔炘炅炓炆炄炑炖炂炚炃牪狖狋狘狉狜狒狔狚狌狑玤玡玭玦玢玠玬玝瓝瓨甿畀甾疌疘皯盳盱盰盵矸矼矹矻矺����������������������������������矷祂礿秅穸穻竻籵糽耵肏肮肣肸肵肭舠芠苀芫芚芘芛芵芧芮芼芞芺芴芨芡芩苂芤苃芶芢虰虯虭虮豖迒迋迓迍迖迕迗邲邴邯邳邰阹阽阼阺陃俍俅俓侲俉俋俁俔俜俙侻侳俛俇俖侺俀侹俬剄剉勀勂匽卼厗厖厙厘咺咡咭咥哏�\".split(\"\");\nfor(j = 0; j != D[205].length; ++j) if(D[205][j].charCodeAt(0) !== 0xFFFD) { e[D[205][j]] = 52480 + j; d[52480 + j] = D[205][j];}\nD[206] = \"����������������������������������������������������������������哃茍咷咮哖咶哅哆咠呰咼咢咾呲哞咰垵垞垟垤垌垗垝垛垔垘垏垙垥垚垕壴复奓姡姞姮娀姱姝姺姽姼姶姤姲姷姛姩姳姵姠姾姴姭宨屌峐峘峌峗峋峛����������������������������������峞峚峉峇峊峖峓峔峏峈峆峎峟峸巹帡帢帣帠帤庰庤庢庛庣庥弇弮彖徆怷怹恔恲恞恅恓恇恉恛恌恀恂恟怤恄恘恦恮扂扃拏挍挋拵挎挃拫拹挏挌拸拶挀挓挔拺挕拻拰敁敃斪斿昶昡昲昵昜昦昢昳昫昺昝昴昹昮朏朐柁柲柈枺�\".split(\"\");\nfor(j = 0; j != D[206].length; ++j) if(D[206][j].charCodeAt(0) !== 0xFFFD) { e[D[206][j]] = 52736 + j; d[52736 + j] = D[206][j];}\nD[207] = \"����������������������������������������������������������������柜枻柸柘柀枷柅柫柤柟枵柍枳柷柶柮柣柂枹柎柧柰枲柼柆柭柌枮柦柛柺柉柊柃柪柋欨殂殄殶毖毘毠氠氡洨洴洭洟洼洿洒洊泚洳洄洙洺洚洑洀洝浂����������������������������������洁洘洷洃洏浀洇洠洬洈洢洉洐炷炟炾炱炰炡炴炵炩牁牉牊牬牰牳牮狊狤狨狫狟狪狦狣玅珌珂珈珅玹玶玵玴珫玿珇玾珃珆玸珋瓬瓮甮畇畈疧疪癹盄眈眃眄眅眊盷盻盺矧矨砆砑砒砅砐砏砎砉砃砓祊祌祋祅祄秕种秏秖秎窀�\".split(\"\");\nfor(j = 0; j != D[207].length; ++j) if(D[207][j].charCodeAt(0) !== 0xFFFD) { e[D[207][j]] = 52992 + j; d[52992 + j] = D[207][j];}\nD[208] = \"����������������������������������������������������������������穾竑笀笁籺籸籹籿粀粁紃紈紁罘羑羍羾耇耎耏耔耷胘胇胠胑胈胂胐胅胣胙胜胊胕胉胏胗胦胍臿舡芔苙苾苹茇苨茀苕茺苫苖苴苬苡苲苵茌苻苶苰苪����������������������������������苤苠苺苳苭虷虴虼虳衁衎衧衪衩觓訄訇赲迣迡迮迠郱邽邿郕郅邾郇郋郈釔釓陔陏陑陓陊陎倞倅倇倓倢倰倛俵俴倳倷倬俶俷倗倜倠倧倵倯倱倎党冔冓凊凄凅凈凎剡剚剒剞剟剕剢勍匎厞唦哢唗唒哧哳哤唚哿唄唈哫唑唅哱�\".split(\"\");\nfor(j = 0; j != D[208].length; ++j) if(D[208][j].charCodeAt(0) !== 0xFFFD) { e[D[208][j]] = 53248 + j; d[53248 + j] = D[208][j];}\nD[209] = \"����������������������������������������������������������������唊哻哷哸哠唎唃唋圁圂埌堲埕埒垺埆垽垼垸垶垿埇埐垹埁夎奊娙娖娭娮娕娏娗娊娞娳孬宧宭宬尃屖屔峬峿峮峱峷崀峹帩帨庨庮庪庬弳弰彧恝恚恧����������������������������������恁悢悈悀悒悁悝悃悕悛悗悇悜悎戙扆拲挐捖挬捄捅挶捃揤挹捋捊挼挩捁挴捘捔捙挭捇挳捚捑挸捗捀捈敊敆旆旃旄旂晊晟晇晑朒朓栟栚桉栲栳栻桋桏栖栱栜栵栫栭栯桎桄栴栝栒栔栦栨栮桍栺栥栠欬欯欭欱欴歭肂殈毦毤�\".split(\"\");\nfor(j = 0; j != D[209].length; ++j) if(D[209][j].charCodeAt(0) !== 0xFFFD) { e[D[209][j]] = 53504 + j; d[53504 + j] = D[209][j];}\nD[210] = \"����������������������������������������������������������������毨毣毢毧氥浺浣浤浶洍浡涒浘浢浭浯涑涍淯浿涆浞浧浠涗浰浼浟涂涘洯浨涋浾涀涄洖涃浻浽浵涐烜烓烑烝烋缹烢烗烒烞烠烔烍烅烆烇烚烎烡牂牸����������������������������������牷牶猀狺狴狾狶狳狻猁珓珙珥珖玼珧珣珩珜珒珛珔珝珚珗珘珨瓞瓟瓴瓵甡畛畟疰痁疻痄痀疿疶疺皊盉眝眛眐眓眒眣眑眕眙眚眢眧砣砬砢砵砯砨砮砫砡砩砳砪砱祔祛祏祜祓祒祑秫秬秠秮秭秪秜秞秝窆窉窅窋窌窊窇竘笐�\".split(\"\");\nfor(j = 0; j != D[210].length; ++j) if(D[210][j].charCodeAt(0) !== 0xFFFD) { e[D[210][j]] = 53760 + j; d[53760 + j] = D[210][j];}\nD[211] = \"����������������������������������������������������������������笄笓笅笏笈笊笎笉笒粄粑粊粌粈粍粅紞紝紑紎紘紖紓紟紒紏紌罜罡罞罠罝罛羖羒翃翂翀耖耾耹胺胲胹胵脁胻脀舁舯舥茳茭荄茙荑茥荖茿荁茦茜茢����������������������������������荂荎茛茪茈茼荍茖茤茠茷茯茩荇荅荌荓茞茬荋茧荈虓虒蚢蚨蚖蚍蚑蚞蚇蚗蚆蚋蚚蚅蚥蚙蚡蚧蚕蚘蚎蚝蚐蚔衃衄衭衵衶衲袀衱衿衯袃衾衴衼訒豇豗豻貤貣赶赸趵趷趶軑軓迾迵适迿迻逄迼迶郖郠郙郚郣郟郥郘郛郗郜郤酐�\".split(\"\");\nfor(j = 0; j != D[211].length; ++j) if(D[211][j].charCodeAt(0) !== 0xFFFD) { e[D[211][j]] = 54016 + j; d[54016 + j] = D[211][j];}\nD[212] = \"����������������������������������������������������������������酎酏釕釢釚陜陟隼飣髟鬯乿偰偪偡偞偠偓偋偝偲偈偍偁偛偊偢倕偅偟偩偫偣偤偆偀偮偳偗偑凐剫剭剬剮勖勓匭厜啵啶唼啍啐唴唪啑啢唶唵唰啒啅����������������������������������唌唲啥啎唹啈唭唻啀啋圊圇埻堔埢埶埜埴堀埭埽堈埸堋埳埏堇埮埣埲埥埬埡堎埼堐埧堁堌埱埩埰堍堄奜婠婘婕婧婞娸娵婭婐婟婥婬婓婤婗婃婝婒婄婛婈媎娾婍娹婌婰婩婇婑婖婂婜孲孮寁寀屙崞崋崝崚崠崌崨崍崦崥崏�\".split(\"\");\nfor(j = 0; j != D[212].length; ++j) if(D[212][j].charCodeAt(0) !== 0xFFFD) { e[D[212][j]] = 54272 + j; d[54272 + j] = D[212][j];}\nD[213] = \"����������������������������������������������������������������崰崒崣崟崮帾帴庱庴庹庲庳弶弸徛徖徟悊悐悆悾悰悺惓惔惏惤惙惝惈悱惛悷惊悿惃惍惀挲捥掊掂捽掽掞掭掝掗掫掎捯掇掐据掯捵掜捭掮捼掤挻掟����������������������������������捸掅掁掑掍捰敓旍晥晡晛晙晜晢朘桹梇梐梜桭桮梮梫楖桯梣梬梩桵桴梲梏桷梒桼桫桲梪梀桱桾梛梖梋梠梉梤桸桻梑梌梊桽欶欳欷欸殑殏殍殎殌氪淀涫涴涳湴涬淩淢涷淶淔渀淈淠淟淖涾淥淜淝淛淴淊涽淭淰涺淕淂淏淉�\".split(\"\");\nfor(j = 0; j != D[213].length; ++j) if(D[213][j].charCodeAt(0) !== 0xFFFD) { e[D[213][j]] = 54528 + j; d[54528 + j] = D[213][j];}\nD[214] = \"����������������������������������������������������������������淐淲淓淽淗淍淣涻烺焍烷焗烴焌烰焄烳焐烼烿焆焓焀烸烶焋焂焎牾牻牼牿猝猗猇猑猘猊猈狿猏猞玈珶珸珵琄琁珽琇琀珺珼珿琌琋珴琈畤畣痎痒痏����������������������������������痋痌痑痐皏皉盓眹眯眭眱眲眴眳眽眥眻眵硈硒硉硍硊硌砦硅硐祤祧祩祪祣祫祡离秺秸秶秷窏窔窐笵筇笴笥笰笢笤笳笘笪笝笱笫笭笯笲笸笚笣粔粘粖粣紵紽紸紶紺絅紬紩絁絇紾紿絊紻紨罣羕羜羝羛翊翋翍翐翑翇翏翉耟�\".split(\"\");\nfor(j = 0; j != D[214].length; ++j) if(D[214][j].charCodeAt(0) !== 0xFFFD) { e[D[214][j]] = 54784 + j; d[54784 + j] = D[214][j];}\nD[215] = \"����������������������������������������������������������������耞耛聇聃聈脘脥脙脛脭脟脬脞脡脕脧脝脢舑舸舳舺舴舲艴莐莣莨莍荺荳莤荴莏莁莕莙荵莔莩荽莃莌莝莛莪莋荾莥莯莈莗莰荿莦莇莮荶莚虙虖蚿蚷����������������������������������蛂蛁蛅蚺蚰蛈蚹蚳蚸蛌蚴蚻蚼蛃蚽蚾衒袉袕袨袢袪袚袑袡袟袘袧袙袛袗袤袬袌袓袎覂觖觙觕訰訧訬訞谹谻豜豝豽貥赽赻赹趼跂趹趿跁軘軞軝軜軗軠軡逤逋逑逜逌逡郯郪郰郴郲郳郔郫郬郩酖酘酚酓酕釬釴釱釳釸釤釹釪�\".split(\"\");\nfor(j = 0; j != D[215].length; ++j) if(D[215][j].charCodeAt(0) !== 0xFFFD) { e[D[215][j]] = 55040 + j; d[55040 + j] = D[215][j];}\nD[216] = \"����������������������������������������������������������������釫釷釨釮镺閆閈陼陭陫陱陯隿靪頄飥馗傛傕傔傞傋傣傃傌傎傝偨傜傒傂傇兟凔匒匑厤厧喑喨喥喭啷噅喢喓喈喏喵喁喣喒喤啽喌喦啿喕喡喎圌堩堷����������������������������������堙堞堧堣堨埵塈堥堜堛堳堿堶堮堹堸堭堬堻奡媯媔媟婺媢媞婸媦婼媥媬媕媮娷媄媊媗媃媋媩婻婽媌媜媏媓媝寪寍寋寔寑寊寎尌尰崷嵃嵫嵁嵋崿崵嵑嵎嵕崳崺嵒崽崱嵙嵂崹嵉崸崼崲崶嵀嵅幄幁彘徦徥徫惉悹惌惢惎惄愔�\".split(\"\");\nfor(j = 0; j != D[216].length; ++j) if(D[216][j].charCodeAt(0) !== 0xFFFD) { e[D[216][j]] = 55296 + j; d[55296 + j] = D[216][j];}\nD[217] = \"����������������������������������������������������������������惲愊愖愅惵愓惸惼惾惁愃愘愝愐惿愄愋扊掔掱掰揎揥揨揯揃撝揳揊揠揶揕揲揵摡揟掾揝揜揄揘揓揂揇揌揋揈揰揗揙攲敧敪敤敜敨敥斌斝斞斮旐旒����������������������������������晼晬晻暀晱晹晪晲朁椌棓椄棜椪棬棪棱椏棖棷棫棤棶椓椐棳棡椇棌椈楰梴椑棯棆椔棸棐棽棼棨椋椊椗棎棈棝棞棦棴棑椆棔棩椕椥棇欹欻欿欼殔殗殙殕殽毰毲毳氰淼湆湇渟湉溈渼渽湅湢渫渿湁湝湳渜渳湋湀湑渻渃渮湞�\".split(\"\");\nfor(j = 0; j != D[217].length; ++j) if(D[217][j].charCodeAt(0) !== 0xFFFD) { e[D[217][j]] = 55552 + j; d[55552 + j] = D[217][j];}\nD[218] = \"����������������������������������������������������������������湨湜湡渱渨湠湱湫渹渢渰湓湥渧湸湤湷湕湹湒湦渵渶湚焠焞焯烻焮焱焣焥焢焲焟焨焺焛牋牚犈犉犆犅犋猒猋猰猢猱猳猧猲猭猦猣猵猌琮琬琰琫琖����������������������������������琚琡琭琱琤琣琝琩琠琲瓻甯畯畬痧痚痡痦痝痟痤痗皕皒盚睆睇睄睍睅睊睎睋睌矞矬硠硤硥硜硭硱硪确硰硩硨硞硢祴祳祲祰稂稊稃稌稄窙竦竤筊笻筄筈筌筎筀筘筅粢粞粨粡絘絯絣絓絖絧絪絏絭絜絫絒絔絩絑絟絎缾缿罥�\".split(\"\");\nfor(j = 0; j != D[218].length; ++j) if(D[218][j].charCodeAt(0) !== 0xFFFD) { e[D[218][j]] = 55808 + j; d[55808 + j] = D[218][j];}\nD[219] = \"����������������������������������������������������������������罦羢羠羡翗聑聏聐胾胔腃腊腒腏腇脽腍脺臦臮臷臸臹舄舼舽舿艵茻菏菹萣菀菨萒菧菤菼菶萐菆菈菫菣莿萁菝菥菘菿菡菋菎菖菵菉萉萏菞萑萆菂菳����������������������������������菕菺菇菑菪萓菃菬菮菄菻菗菢萛菛菾蛘蛢蛦蛓蛣蛚蛪蛝蛫蛜蛬蛩蛗蛨蛑衈衖衕袺裗袹袸裀袾袶袼袷袽袲褁裉覕覘覗觝觚觛詎詍訹詙詀詗詘詄詅詒詈詑詊詌詏豟貁貀貺貾貰貹貵趄趀趉跘跓跍跇跖跜跏跕跙跈跗跅軯軷軺�\".split(\"\");\nfor(j = 0; j != D[219].length; ++j) if(D[219][j].charCodeAt(0) !== 0xFFFD) { e[D[219][j]] = 56064 + j; d[56064 + j] = D[219][j];}\nD[220] = \"����������������������������������������������������������������軹軦軮軥軵軧軨軶軫軱軬軴軩逭逴逯鄆鄬鄄郿郼鄈郹郻鄁鄀鄇鄅鄃酡酤酟酢酠鈁鈊鈥鈃鈚鈦鈏鈌鈀鈒釿釽鈆鈄鈧鈂鈜鈤鈙鈗鈅鈖镻閍閌閐隇陾隈����������������������������������隉隃隀雂雈雃雱雰靬靰靮頇颩飫鳦黹亃亄亶傽傿僆傮僄僊傴僈僂傰僁傺傱僋僉傶傸凗剺剸剻剼嗃嗛嗌嗐嗋嗊嗝嗀嗔嗄嗩喿嗒喍嗏嗕嗢嗖嗈嗲嗍嗙嗂圔塓塨塤塏塍塉塯塕塎塝塙塥塛堽塣塱壼嫇嫄嫋媺媸媱媵媰媿嫈媻嫆�\".split(\"\");\nfor(j = 0; j != D[220].length; ++j) if(D[220][j].charCodeAt(0) !== 0xFFFD) { e[D[220][j]] = 56320 + j; d[56320 + j] = D[220][j];}\nD[221] = \"����������������������������������������������������������������媷嫀嫊媴媶嫍媹媐寖寘寙尟尳嵱嵣嵊嵥嵲嵬嵞嵨嵧嵢巰幏幎幊幍幋廅廌廆廋廇彀徯徭惷慉慊愫慅愶愲愮慆愯慏愩慀戠酨戣戥戤揅揱揫搐搒搉搠搤����������������������������������搳摃搟搕搘搹搷搢搣搌搦搰搨摁搵搯搊搚摀搥搧搋揧搛搮搡搎敯斒旓暆暌暕暐暋暊暙暔晸朠楦楟椸楎楢楱椿楅楪椹楂楗楙楺楈楉椵楬椳椽楥棰楸椴楩楀楯楄楶楘楁楴楌椻楋椷楜楏楑椲楒椯楻椼歆歅歃歂歈歁殛嗀毻毼�\".split(\"\");\nfor(j = 0; j != D[221].length; ++j) if(D[221][j].charCodeAt(0) !== 0xFFFD) { e[D[221][j]] = 56576 + j; d[56576 + j] = D[221][j];}\nD[222] = \"����������������������������������������������������������������毹毷毸溛滖滈溏滀溟溓溔溠溱溹滆滒溽滁溞滉溷溰滍溦滏溲溾滃滜滘溙溒溎溍溤溡溿溳滐滊溗溮溣煇煔煒煣煠煁煝煢煲煸煪煡煂煘煃煋煰煟煐煓����������������������������������煄煍煚牏犍犌犑犐犎猼獂猻猺獀獊獉瑄瑊瑋瑒瑑瑗瑀瑏瑐瑎瑂瑆瑍瑔瓡瓿瓾瓽甝畹畷榃痯瘏瘃痷痾痼痹痸瘐痻痶痭痵痽皙皵盝睕睟睠睒睖睚睩睧睔睙睭矠碇碚碔碏碄碕碅碆碡碃硹碙碀碖硻祼禂祽祹稑稘稙稒稗稕稢稓�\".split(\"\");\nfor(j = 0; j != D[222].length; ++j) if(D[222][j].charCodeAt(0) !== 0xFFFD) { e[D[222][j]] = 56832 + j; d[56832 + j] = D[222][j];}\nD[223] = \"����������������������������������������������������������������稛稐窣窢窞竫筦筤筭筴筩筲筥筳筱筰筡筸筶筣粲粴粯綈綆綀綍絿綅絺綎絻綃絼綌綔綄絽綒罭罫罧罨罬羦羥羧翛翜耡腤腠腷腜腩腛腢腲朡腞腶腧腯����������������������������������腄腡舝艉艄艀艂艅蓱萿葖葶葹蒏蒍葥葑葀蒆葧萰葍葽葚葙葴葳葝蔇葞萷萺萴葺葃葸萲葅萩菙葋萯葂萭葟葰萹葎葌葒葯蓅蒎萻葇萶萳葨葾葄萫葠葔葮葐蜋蜄蛷蜌蛺蛖蛵蝍蛸蜎蜉蜁蛶蜍蜅裖裋裍裎裞裛裚裌裐覅覛觟觥觤�\".split(\"\");\nfor(j = 0; j != D[223].length; ++j) if(D[223][j].charCodeAt(0) !== 0xFFFD) { e[D[223][j]] = 57088 + j; d[57088 + j] = D[223][j];}\nD[224] = \"����������������������������������������������������������������觡觠觢觜触詶誆詿詡訿詷誂誄詵誃誁詴詺谼豋豊豥豤豦貆貄貅賌赨赩趑趌趎趏趍趓趔趐趒跰跠跬跱跮跐跩跣跢跧跲跫跴輆軿輁輀輅輇輈輂輋遒逿����������������������������������遄遉逽鄐鄍鄏鄑鄖鄔鄋鄎酮酯鉈鉒鈰鈺鉦鈳鉥鉞銃鈮鉊鉆鉭鉬鉏鉠鉧鉯鈶鉡鉰鈱鉔鉣鉐鉲鉎鉓鉌鉖鈲閟閜閞閛隒隓隑隗雎雺雽雸雵靳靷靸靲頏頍頎颬飶飹馯馲馰馵骭骫魛鳪鳭鳧麀黽僦僔僗僨僳僛僪僝僤僓僬僰僯僣僠�\".split(\"\");\nfor(j = 0; j != D[224].length; ++j) if(D[224][j].charCodeAt(0) !== 0xFFFD) { e[D[224][j]] = 57344 + j; d[57344 + j] = D[224][j];}\nD[225] = \"����������������������������������������������������������������凘劀劁勩勫匰厬嘧嘕嘌嘒嗼嘏嘜嘁嘓嘂嗺嘝嘄嗿嗹墉塼墐墘墆墁塿塴墋塺墇墑墎塶墂墈塻墔墏壾奫嫜嫮嫥嫕嫪嫚嫭嫫嫳嫢嫠嫛嫬嫞嫝嫙嫨嫟孷寠����������������������������������寣屣嶂嶀嵽嶆嵺嶁嵷嶊嶉嶈嵾嵼嶍嵹嵿幘幙幓廘廑廗廎廜廕廙廒廔彄彃彯徶愬愨慁慞慱慳慒慓慲慬憀慴慔慺慛慥愻慪慡慖戩戧戫搫摍摛摝摴摶摲摳摽摵摦撦摎撂摞摜摋摓摠摐摿搿摬摫摙摥摷敳斠暡暠暟朅朄朢榱榶槉�\".split(\"\");\nfor(j = 0; j != D[225].length; ++j) if(D[225][j].charCodeAt(0) !== 0xFFFD) { e[D[225][j]] = 57600 + j; d[57600 + j] = D[225][j];}\nD[226] = \"����������������������������������������������������������������榠槎榖榰榬榼榑榙榎榧榍榩榾榯榿槄榽榤槔榹槊榚槏榳榓榪榡榞槙榗榐槂榵榥槆歊歍歋殞殟殠毃毄毾滎滵滱漃漥滸漷滻漮漉潎漙漚漧漘漻漒滭漊����������������������������������漶潳滹滮漭潀漰漼漵滫漇漎潃漅滽滶漹漜滼漺漟漍漞漈漡熇熐熉熀熅熂熏煻熆熁熗牄牓犗犕犓獃獍獑獌瑢瑳瑱瑵瑲瑧瑮甀甂甃畽疐瘖瘈瘌瘕瘑瘊瘔皸瞁睼瞅瞂睮瞀睯睾瞃碲碪碴碭碨硾碫碞碥碠碬碢碤禘禊禋禖禕禔禓�\".split(\"\");\nfor(j = 0; j != D[226].length; ++j) if(D[226][j].charCodeAt(0) !== 0xFFFD) { e[D[226][j]] = 57856 + j; d[57856 + j] = D[226][j];}\nD[227] = \"����������������������������������������������������������������禗禈禒禐稫穊稰稯稨稦窨窫窬竮箈箜箊箑箐箖箍箌箛箎箅箘劄箙箤箂粻粿粼粺綧綷緂綣綪緁緀緅綝緎緄緆緋緌綯綹綖綼綟綦綮綩綡緉罳翢翣翥翞����������������������������������耤聝聜膉膆膃膇膍膌膋舕蒗蒤蒡蒟蒺蓎蓂蒬蒮蒫蒹蒴蓁蓍蒪蒚蒱蓐蒝蒧蒻蒢蒔蓇蓌蒛蒩蒯蒨蓖蒘蒶蓏蒠蓗蓔蓒蓛蒰蒑虡蜳蜣蜨蝫蝀蜮蜞蜡蜙蜛蝃蜬蝁蜾蝆蜠蜲蜪蜭蜼蜒蜺蜱蜵蝂蜦蜧蜸蜤蜚蜰蜑裷裧裱裲裺裾裮裼裶裻�\".split(\"\");\nfor(j = 0; j != D[227].length; ++j) if(D[227][j].charCodeAt(0) !== 0xFFFD) { e[D[227][j]] = 58112 + j; d[58112 + j] = D[227][j];}\nD[228] = \"����������������������������������������������������������������裰裬裫覝覡覟覞觩觫觨誫誙誋誒誏誖谽豨豩賕賏賗趖踉踂跿踍跽踊踃踇踆踅跾踀踄輐輑輎輍鄣鄜鄠鄢鄟鄝鄚鄤鄡鄛酺酲酹酳銥銤鉶銛鉺銠銔銪銍����������������������������������銦銚銫鉹銗鉿銣鋮銎銂銕銢鉽銈銡銊銆銌銙銧鉾銇銩銝銋鈭隞隡雿靘靽靺靾鞃鞀鞂靻鞄鞁靿韎韍頖颭颮餂餀餇馝馜駃馹馻馺駂馽駇骱髣髧鬾鬿魠魡魟鳱鳲鳵麧僿儃儰僸儆儇僶僾儋儌僽儊劋劌勱勯噈噂噌嘵噁噊噉噆噘�\".split(\"\");\nfor(j = 0; j != D[228].length; ++j) if(D[228][j].charCodeAt(0) !== 0xFFFD) { e[D[228][j]] = 58368 + j; d[58368 + j] = D[228][j];}\nD[229] = \"����������������������������������������������������������������噚噀嘳嘽嘬嘾嘸嘪嘺圚墫墝墱墠墣墯墬墥墡壿嫿嫴嫽嫷嫶嬃嫸嬂嫹嬁嬇嬅嬏屧嶙嶗嶟嶒嶢嶓嶕嶠嶜嶡嶚嶞幩幝幠幜緳廛廞廡彉徲憋憃慹憱憰憢憉����������������������������������憛憓憯憭憟憒憪憡憍慦憳戭摮摰撖撠撅撗撜撏撋撊撌撣撟摨撱撘敶敺敹敻斲斳暵暰暩暲暷暪暯樀樆樗槥槸樕槱槤樠槿槬槢樛樝槾樧槲槮樔槷槧橀樈槦槻樍槼槫樉樄樘樥樏槶樦樇槴樖歑殥殣殢殦氁氀毿氂潁漦潾澇濆澒�\".split(\"\");\nfor(j = 0; j != D[229].length; ++j) if(D[229][j].charCodeAt(0) !== 0xFFFD) { e[D[229][j]] = 58624 + j; d[58624 + j] = D[229][j];}\nD[230] = \"����������������������������������������������������������������澍澉澌潢潏澅潚澖潶潬澂潕潲潒潐潗澔澓潝漀潡潫潽潧澐潓澋潩潿澕潣潷潪潻熲熯熛熰熠熚熩熵熝熥熞熤熡熪熜熧熳犘犚獘獒獞獟獠獝獛獡獚獙����������������������������������獢璇璉璊璆璁瑽璅璈瑼瑹甈甇畾瘥瘞瘙瘝瘜瘣瘚瘨瘛皜皝皞皛瞍瞏瞉瞈磍碻磏磌磑磎磔磈磃磄磉禚禡禠禜禢禛歶稹窲窴窳箷篋箾箬篎箯箹篊箵糅糈糌糋緷緛緪緧緗緡縃緺緦緶緱緰緮緟罶羬羰羭翭翫翪翬翦翨聤聧膣膟�\".split(\"\");\nfor(j = 0; j != D[230].length; ++j) if(D[230][j].charCodeAt(0) !== 0xFFFD) { e[D[230][j]] = 58880 + j; d[58880 + j] = D[230][j];}\nD[231] = \"����������������������������������������������������������������膞膕膢膙膗舖艏艓艒艐艎艑蔤蔻蔏蔀蔩蔎蔉蔍蔟蔊蔧蔜蓻蔫蓺蔈蔌蓴蔪蓲蔕蓷蓫蓳蓼蔒蓪蓩蔖蓾蔨蔝蔮蔂蓽蔞蓶蔱蔦蓧蓨蓰蓯蓹蔘蔠蔰蔋蔙蔯虢����������������������������������蝖蝣蝤蝷蟡蝳蝘蝔蝛蝒蝡蝚蝑蝞蝭蝪蝐蝎蝟蝝蝯蝬蝺蝮蝜蝥蝏蝻蝵蝢蝧蝩衚褅褌褔褋褗褘褙褆褖褑褎褉覢覤覣觭觰觬諏諆誸諓諑諔諕誻諗誾諀諅諘諃誺誽諙谾豍貏賥賟賙賨賚賝賧趠趜趡趛踠踣踥踤踮踕踛踖踑踙踦踧�\".split(\"\");\nfor(j = 0; j != D[231].length; ++j) if(D[231][j].charCodeAt(0) !== 0xFFFD) { e[D[231][j]] = 59136 + j; d[59136 + j] = D[231][j];}\nD[232] = \"����������������������������������������������������������������踔踒踘踓踜踗踚輬輤輘輚輠輣輖輗遳遰遯遧遫鄯鄫鄩鄪鄲鄦鄮醅醆醊醁醂醄醀鋐鋃鋄鋀鋙銶鋏鋱鋟鋘鋩鋗鋝鋌鋯鋂鋨鋊鋈鋎鋦鋍鋕鋉鋠鋞鋧鋑鋓����������������������������������銵鋡鋆銴镼閬閫閮閰隤隢雓霅霈霂靚鞊鞎鞈韐韏頞頝頦頩頨頠頛頧颲餈飺餑餔餖餗餕駜駍駏駓駔駎駉駖駘駋駗駌骳髬髫髳髲髱魆魃魧魴魱魦魶魵魰魨魤魬鳼鳺鳽鳿鳷鴇鴀鳹鳻鴈鴅鴄麃黓鼏鼐儜儓儗儚儑凞匴叡噰噠噮�\".split(\"\");\nfor(j = 0; j != D[232].length; ++j) if(D[232][j].charCodeAt(0) !== 0xFFFD) { e[D[232][j]] = 59392 + j; d[59392 + j] = D[232][j];}\nD[233] = \"����������������������������������������������������������������噳噦噣噭噲噞噷圜圛壈墽壉墿墺壂墼壆嬗嬙嬛嬡嬔嬓嬐嬖嬨嬚嬠嬞寯嶬嶱嶩嶧嶵嶰嶮嶪嶨嶲嶭嶯嶴幧幨幦幯廩廧廦廨廥彋徼憝憨憖懅憴懆懁懌憺����������������������������������憿憸憌擗擖擐擏擉撽撉擃擛擳擙攳敿敼斢曈暾曀曊曋曏暽暻暺曌朣樴橦橉橧樲橨樾橝橭橶橛橑樨橚樻樿橁橪橤橐橏橔橯橩橠樼橞橖橕橍橎橆歕歔歖殧殪殫毈毇氄氃氆澭濋澣濇澼濎濈潞濄澽澞濊澨瀄澥澮澺澬澪濏澿澸�\".split(\"\");\nfor(j = 0; j != D[233].length; ++j) if(D[233][j].charCodeAt(0) !== 0xFFFD) { e[D[233][j]] = 59648 + j; d[59648 + j] = D[233][j];}\nD[234] = \"����������������������������������������������������������������澢濉澫濍澯澲澰燅燂熿熸燖燀燁燋燔燊燇燏熽燘熼燆燚燛犝犞獩獦獧獬獥獫獪瑿璚璠璔璒璕璡甋疀瘯瘭瘱瘽瘳瘼瘵瘲瘰皻盦瞚瞝瞡瞜瞛瞢瞣瞕瞙����������������������������������瞗磝磩磥磪磞磣磛磡磢磭磟磠禤穄穈穇窶窸窵窱窷篞篣篧篝篕篥篚篨篹篔篪篢篜篫篘篟糒糔糗糐糑縒縡縗縌縟縠縓縎縜縕縚縢縋縏縖縍縔縥縤罃罻罼罺羱翯耪耩聬膱膦膮膹膵膫膰膬膴膲膷膧臲艕艖艗蕖蕅蕫蕍蕓蕡蕘�\".split(\"\");\nfor(j = 0; j != D[234].length; ++j) if(D[234][j].charCodeAt(0) !== 0xFFFD) { e[D[234][j]] = 59904 + j; d[59904 + j] = D[234][j];}\nD[235] = \"����������������������������������������������������������������蕀蕆蕤蕁蕢蕄蕑蕇蕣蔾蕛蕱蕎蕮蕵蕕蕧蕠薌蕦蕝蕔蕥蕬虣虥虤螛螏螗螓螒螈螁螖螘蝹螇螣螅螐螑螝螄螔螜螚螉褞褦褰褭褮褧褱褢褩褣褯褬褟觱諠����������������������������������諢諲諴諵諝謔諤諟諰諈諞諡諨諿諯諻貑貒貐賵賮賱賰賳赬赮趥趧踳踾踸蹀蹅踶踼踽蹁踰踿躽輶輮輵輲輹輷輴遶遹遻邆郺鄳鄵鄶醓醐醑醍醏錧錞錈錟錆錏鍺錸錼錛錣錒錁鍆錭錎錍鋋錝鋺錥錓鋹鋷錴錂錤鋿錩錹錵錪錔錌�\".split(\"\");\nfor(j = 0; j != D[235].length; ++j) if(D[235][j].charCodeAt(0) !== 0xFFFD) { e[D[235][j]] = 60160 + j; d[60160 + j] = D[235][j];}\nD[236] = \"����������������������������������������������������������������錋鋾錉錀鋻錖閼闍閾閹閺閶閿閵閽隩雔霋霒霐鞙鞗鞔韰韸頵頯頲餤餟餧餩馞駮駬駥駤駰駣駪駩駧骹骿骴骻髶髺髹髷鬳鮀鮅鮇魼魾魻鮂鮓鮒鮐魺鮕����������������������������������魽鮈鴥鴗鴠鴞鴔鴩鴝鴘鴢鴐鴙鴟麈麆麇麮麭黕黖黺鼒鼽儦儥儢儤儠儩勴嚓嚌嚍嚆嚄嚃噾嚂噿嚁壖壔壏壒嬭嬥嬲嬣嬬嬧嬦嬯嬮孻寱寲嶷幬幪徾徻懃憵憼懧懠懥懤懨懞擯擩擣擫擤擨斁斀斶旚曒檍檖檁檥檉檟檛檡檞檇檓檎�\".split(\"\");\nfor(j = 0; j != D[236].length; ++j) if(D[236][j].charCodeAt(0) !== 0xFFFD) { e[D[236][j]] = 60416 + j; d[60416 + j] = D[236][j];}\nD[237] = \"����������������������������������������������������������������檕檃檨檤檑橿檦檚檅檌檒歛殭氉濌澩濴濔濣濜濭濧濦濞濲濝濢濨燡燱燨燲燤燰燢獳獮獯璗璲璫璐璪璭璱璥璯甐甑甒甏疄癃癈癉癇皤盩瞵瞫瞲瞷瞶����������������������������������瞴瞱瞨矰磳磽礂磻磼磲礅磹磾礄禫禨穜穛穖穘穔穚窾竀竁簅簏篲簀篿篻簎篴簋篳簂簉簃簁篸篽簆篰篱簐簊糨縭縼繂縳顈縸縪繉繀繇縩繌縰縻縶繄縺罅罿罾罽翴翲耬膻臄臌臊臅臇膼臩艛艚艜薃薀薏薧薕薠薋薣蕻薤薚薞�\".split(\"\");\nfor(j = 0; j != D[237].length; ++j) if(D[237][j].charCodeAt(0) !== 0xFFFD) { e[D[237][j]] = 60672 + j; d[60672 + j] = D[237][j];}\nD[238] = \"����������������������������������������������������������������蕷蕼薉薡蕺蕸蕗薎薖薆薍薙薝薁薢薂薈薅蕹蕶薘薐薟虨螾螪螭蟅螰螬螹螵螼螮蟉蟃蟂蟌螷螯蟄蟊螴螶螿螸螽蟞螲褵褳褼褾襁襒褷襂覭覯覮觲觳謞����������������������������������謘謖謑謅謋謢謏謒謕謇謍謈謆謜謓謚豏豰豲豱豯貕貔賹赯蹎蹍蹓蹐蹌蹇轃轀邅遾鄸醚醢醛醙醟醡醝醠鎡鎃鎯鍤鍖鍇鍼鍘鍜鍶鍉鍐鍑鍠鍭鎏鍌鍪鍹鍗鍕鍒鍏鍱鍷鍻鍡鍞鍣鍧鎀鍎鍙闇闀闉闃闅閷隮隰隬霠霟霘霝霙鞚鞡鞜�\".split(\"\");\nfor(j = 0; j != D[238].length; ++j) if(D[238][j].charCodeAt(0) !== 0xFFFD) { e[D[238][j]] = 60928 + j; d[60928 + j] = D[238][j];}\nD[239] = \"����������������������������������������������������������������鞞鞝韕韔韱顁顄顊顉顅顃餥餫餬餪餳餲餯餭餱餰馘馣馡騂駺駴駷駹駸駶駻駽駾駼騃骾髾髽鬁髼魈鮚鮨鮞鮛鮦鮡鮥鮤鮆鮢鮠鮯鴳鵁鵧鴶鴮鴯鴱鴸鴰����������������������������������鵅鵂鵃鴾鴷鵀鴽翵鴭麊麉麍麰黈黚黻黿鼤鼣鼢齔龠儱儭儮嚘嚜嚗嚚嚝嚙奰嬼屩屪巀幭幮懘懟懭懮懱懪懰懫懖懩擿攄擽擸攁攃擼斔旛曚曛曘櫅檹檽櫡櫆檺檶檷櫇檴檭歞毉氋瀇瀌瀍瀁瀅瀔瀎濿瀀濻瀦濼濷瀊爁燿燹爃燽獶�\".split(\"\");\nfor(j = 0; j != D[239].length; ++j) if(D[239][j].charCodeAt(0) !== 0xFFFD) { e[D[239][j]] = 61184 + j; d[61184 + j] = D[239][j];}\nD[240] = \"����������������������������������������������������������������璸瓀璵瓁璾璶璻瓂甔甓癜癤癙癐癓癗癚皦皽盬矂瞺磿礌礓礔礉礐礒礑禭禬穟簜簩簙簠簟簭簝簦簨簢簥簰繜繐繖繣繘繢繟繑繠繗繓羵羳翷翸聵臑臒����������������������������������臐艟艞薴藆藀藃藂薳薵薽藇藄薿藋藎藈藅薱薶藒蘤薸薷薾虩蟧蟦蟢蟛蟫蟪蟥蟟蟳蟤蟔蟜蟓蟭蟘蟣螤蟗蟙蠁蟴蟨蟝襓襋襏襌襆襐襑襉謪謧謣謳謰謵譇謯謼謾謱謥謷謦謶謮謤謻謽謺豂豵貙貘貗賾贄贂贀蹜蹢蹠蹗蹖蹞蹥蹧�\".split(\"\");\nfor(j = 0; j != D[240].length; ++j) if(D[240][j].charCodeAt(0) !== 0xFFFD) { e[D[240][j]] = 61440 + j; d[61440 + j] = D[240][j];}\nD[241] = \"����������������������������������������������������������������蹛蹚蹡蹝蹩蹔轆轇轈轋鄨鄺鄻鄾醨醥醧醯醪鎵鎌鎒鎷鎛鎝鎉鎧鎎鎪鎞鎦鎕鎈鎙鎟鎍鎱鎑鎲鎤鎨鎴鎣鎥闒闓闑隳雗雚巂雟雘雝霣霢霥鞬鞮鞨鞫鞤鞪����������������������������������鞢鞥韗韙韖韘韺顐顑顒颸饁餼餺騏騋騉騍騄騑騊騅騇騆髀髜鬈鬄鬅鬩鬵魊魌魋鯇鯆鯃鮿鯁鮵鮸鯓鮶鯄鮹鮽鵜鵓鵏鵊鵛鵋鵙鵖鵌鵗鵒鵔鵟鵘鵚麎麌黟鼁鼀鼖鼥鼫鼪鼩鼨齌齕儴儵劖勷厴嚫嚭嚦嚧嚪嚬壚壝壛夒嬽嬾嬿巃幰�\".split(\"\");\nfor(j = 0; j != D[241].length; ++j) if(D[241][j].charCodeAt(0) !== 0xFFFD) { e[D[241][j]] = 61696 + j; d[61696 + j] = D[241][j];}\nD[242] = \"����������������������������������������������������������������徿懻攇攐攍攉攌攎斄旞旝曞櫧櫠櫌櫑櫙櫋櫟櫜櫐櫫櫏櫍櫞歠殰氌瀙瀧瀠瀖瀫瀡瀢瀣瀩瀗瀤瀜瀪爌爊爇爂爅犥犦犤犣犡瓋瓅璷瓃甖癠矉矊矄矱礝礛����������������������������������礡礜礗礞禰穧穨簳簼簹簬簻糬糪繶繵繸繰繷繯繺繲繴繨罋罊羃羆羷翽翾聸臗臕艤艡艣藫藱藭藙藡藨藚藗藬藲藸藘藟藣藜藑藰藦藯藞藢蠀蟺蠃蟶蟷蠉蠌蠋蠆蟼蠈蟿蠊蠂襢襚襛襗襡襜襘襝襙覈覷覶觶譐譈譊譀譓譖譔譋譕�\".split(\"\");\nfor(j = 0; j != D[242].length; ++j) if(D[242][j].charCodeAt(0) !== 0xFFFD) { e[D[242][j]] = 61952 + j; d[61952 + j] = D[242][j];}\nD[243] = \"����������������������������������������������������������������譑譂譒譗豃豷豶貚贆贇贉趬趪趭趫蹭蹸蹳蹪蹯蹻軂轒轑轏轐轓辴酀鄿醰醭鏞鏇鏏鏂鏚鏐鏹鏬鏌鏙鎩鏦鏊鏔鏮鏣鏕鏄鏎鏀鏒鏧镽闚闛雡霩霫霬霨霦����������������������������������鞳鞷鞶韝韞韟顜顙顝顗颿颽颻颾饈饇饃馦馧騚騕騥騝騤騛騢騠騧騣騞騜騔髂鬋鬊鬎鬌鬷鯪鯫鯠鯞鯤鯦鯢鯰鯔鯗鯬鯜鯙鯥鯕鯡鯚鵷鶁鶊鶄鶈鵱鶀鵸鶆鶋鶌鵽鵫鵴鵵鵰鵩鶅鵳鵻鶂鵯鵹鵿鶇鵨麔麑黀黼鼭齀齁齍齖齗齘匷嚲�\".split(\"\");\nfor(j = 0; j != D[243].length; ++j) if(D[243][j].charCodeAt(0) !== 0xFFFD) { e[D[243][j]] = 62208 + j; d[62208 + j] = D[243][j];}\nD[244] = \"����������������������������������������������������������������嚵嚳壣孅巆巇廮廯忀忁懹攗攖攕攓旟曨曣曤櫳櫰櫪櫨櫹櫱櫮櫯瀼瀵瀯瀷瀴瀱灂瀸瀿瀺瀹灀瀻瀳灁爓爔犨獽獼璺皫皪皾盭矌矎矏矍矲礥礣礧礨礤礩����������������������������������禲穮穬穭竷籉籈籊籇籅糮繻繾纁纀羺翿聹臛臙舋艨艩蘢藿蘁藾蘛蘀藶蘄蘉蘅蘌藽蠙蠐蠑蠗蠓蠖襣襦覹觷譠譪譝譨譣譥譧譭趮躆躈躄轙轖轗轕轘轚邍酃酁醷醵醲醳鐋鐓鏻鐠鐏鐔鏾鐕鐐鐨鐙鐍鏵鐀鏷鐇鐎鐖鐒鏺鐉鏸鐊鏿�\".split(\"\");\nfor(j = 0; j != D[244].length; ++j) if(D[244][j].charCodeAt(0) !== 0xFFFD) { e[D[244][j]] = 62464 + j; d[62464 + j] = D[244][j];}\nD[245] = \"����������������������������������������������������������������鏼鐌鏶鐑鐆闞闠闟霮霯鞹鞻韽韾顠顢顣顟飁飂饐饎饙饌饋饓騲騴騱騬騪騶騩騮騸騭髇髊髆鬐鬒鬑鰋鰈鯷鰅鰒鯸鱀鰇鰎鰆鰗鰔鰉鶟鶙鶤鶝鶒鶘鶐鶛����������������������������������鶠鶔鶜鶪鶗鶡鶚鶢鶨鶞鶣鶿鶩鶖鶦鶧麙麛麚黥黤黧黦鼰鼮齛齠齞齝齙龑儺儹劘劗囃嚽嚾孈孇巋巏廱懽攛欂櫼欃櫸欀灃灄灊灈灉灅灆爝爚爙獾甗癪矐礭礱礯籔籓糲纊纇纈纋纆纍罍羻耰臝蘘蘪蘦蘟蘣蘜蘙蘧蘮蘡蘠蘩蘞蘥�\".split(\"\");\nfor(j = 0; j != D[245].length; ++j) if(D[245][j].charCodeAt(0) !== 0xFFFD) { e[D[245][j]] = 62720 + j; d[62720 + j] = D[245][j];}\nD[246] = \"����������������������������������������������������������������蠩蠝蠛蠠蠤蠜蠫衊襭襩襮襫觺譹譸譅譺譻贐贔趯躎躌轞轛轝酆酄酅醹鐿鐻鐶鐩鐽鐼鐰鐹鐪鐷鐬鑀鐱闥闤闣霵霺鞿韡顤飉飆飀饘饖騹騽驆驄驂驁騺����������������������������������騿髍鬕鬗鬘鬖鬺魒鰫鰝鰜鰬鰣鰨鰩鰤鰡鶷鶶鶼鷁鷇鷊鷏鶾鷅鷃鶻鶵鷎鶹鶺鶬鷈鶱鶭鷌鶳鷍鶲鹺麜黫黮黭鼛鼘鼚鼱齎齥齤龒亹囆囅囋奱孋孌巕巑廲攡攠攦攢欋欈欉氍灕灖灗灒爞爟犩獿瓘瓕瓙瓗癭皭礵禴穰穱籗籜籙籛籚�\".split(\"\");\nfor(j = 0; j != D[246].length; ++j) if(D[246][j].charCodeAt(0) !== 0xFFFD) { e[D[246][j]] = 62976 + j; d[62976 + j] = D[246][j];}\nD[247] = \"����������������������������������������������������������������糴糱纑罏羇臞艫蘴蘵蘳蘬蘲蘶蠬蠨蠦蠪蠥襱覿覾觻譾讄讂讆讅譿贕躕躔躚躒躐躖躗轠轢酇鑌鑐鑊鑋鑏鑇鑅鑈鑉鑆霿韣顪顩飋饔饛驎驓驔驌驏驈驊����������������������������������驉驒驐髐鬙鬫鬻魖魕鱆鱈鰿鱄鰹鰳鱁鰼鰷鰴鰲鰽鰶鷛鷒鷞鷚鷋鷐鷜鷑鷟鷩鷙鷘鷖鷵鷕鷝麶黰鼵鼳鼲齂齫龕龢儽劙壨壧奲孍巘蠯彏戁戃戄攩攥斖曫欑欒欏毊灛灚爢玂玁玃癰矔籧籦纕艬蘺虀蘹蘼蘱蘻蘾蠰蠲蠮蠳襶襴襳觾�\".split(\"\");\nfor(j = 0; j != D[247].length; ++j) if(D[247][j].charCodeAt(0) !== 0xFFFD) { e[D[247][j]] = 63232 + j; d[63232 + j] = D[247][j];}\nD[248] = \"����������������������������������������������������������������讌讎讋讈豅贙躘轤轣醼鑢鑕鑝鑗鑞韄韅頀驖驙鬞鬟鬠鱒鱘鱐鱊鱍鱋鱕鱙鱌鱎鷻鷷鷯鷣鷫鷸鷤鷶鷡鷮鷦鷲鷰鷢鷬鷴鷳鷨鷭黂黐黲黳鼆鼜鼸鼷鼶齃齏����������������������������������齱齰齮齯囓囍孎屭攭曭曮欓灟灡灝灠爣瓛瓥矕礸禷禶籪纗羉艭虃蠸蠷蠵衋讔讕躞躟躠躝醾醽釂鑫鑨鑩雥靆靃靇韇韥驞髕魙鱣鱧鱦鱢鱞鱠鸂鷾鸇鸃鸆鸅鸀鸁鸉鷿鷽鸄麠鼞齆齴齵齶囔攮斸欘欙欗欚灢爦犪矘矙礹籩籫糶纚�\".split(\"\");\nfor(j = 0; j != D[248].length; ++j) if(D[248][j].charCodeAt(0) !== 0xFFFD) { e[D[248][j]] = 63488 + j; d[63488 + j] = D[248][j];}\nD[249] = \"����������������������������������������������������������������纘纛纙臠臡虆虇虈襹襺襼襻觿讘讙躥躤躣鑮鑭鑯鑱鑳靉顲饟鱨鱮鱭鸋鸍鸐鸏鸒鸑麡黵鼉齇齸齻齺齹圞灦籯蠼趲躦釃鑴鑸鑶鑵驠鱴鱳鱱鱵鸔鸓黶鼊����������������������������������龤灨灥糷虪蠾蠽蠿讞貜躩軉靋顳顴飌饡馫驤驦驧鬤鸕鸗齈戇欞爧虌躨钂钀钁驩驨鬮鸙爩虋讟钃鱹麷癵驫鱺鸝灩灪麤齾齉龘碁銹裏墻恒粧嫺╔╦╗╠╬╣╚╩╝╒╤╕╞╪╡╘╧╛╓╥╖╟╫╢╙╨╜║═╭╮╰╯▓�\".split(\"\");\nfor(j = 0; j != D[249].length; ++j) if(D[249][j].charCodeAt(0) !== 0xFFFD) { e[D[249][j]] = 63744 + j; d[63744 + j] = D[249][j];}\nreturn {\"enc\": e, \"dec\": d }; })();\ncptable[1250] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚�„…†‡�‰Š‹ŚŤŽŹ�‘’“”•–—�™š›śťžź ˇ˘Ł¤Ą¦§¨©Ş«¬­®Ż°±˛ł´µ¶·¸ąş»Ľ˝ľżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[1251] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—�™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬­®Ї°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[1252] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[1253] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡�‰�‹�����‘’“”•–—�™�›���� ΅Ά£¤¥¦§¨©�«¬­®―°±²³΄µ¶·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[1254] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰Š‹Œ����‘’“”•–—˜™š›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖ×ØÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[1255] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰�‹�����‘’“”•–—˜™�›���� ¡¢£₪¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾¿ְֱֲֳִֵֶַָֹ�ֻּֽ־ֿ׀ׁׂ׃װױײ׳״�������אבגדהוזחטיךכלםמןנסעףפץצקרשת��‎‏�\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[1256] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€پ‚ƒ„…†‡ˆ‰ٹ‹Œچژڈگ‘’“”•–—ک™ڑ›œ‌‍ں ،¢£¤¥¦§¨©ھ«¬­®¯°±²³´µ¶·¸¹؛»¼½¾؟ہءآأؤإئابةتثجحخدذرزسشصض×طظعغـفقكàلâمنهوçèéêëىيîïًٌٍَôُِ÷ّùْûü‎‏ے\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[1257] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚�„…†‡�‰�‹�¨ˇ¸�‘’“”•–—�™�›�¯˛� �¢£¤�¦§Ø©Ŗ«¬­®Æ°±²³´µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž˙\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[1258] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰�‹Œ����‘’“”•–—˜™�›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖ×ØÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[10000] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[10006] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦­ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ�\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[10007] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°¢£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµ∂ЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[10008] = (function(){ var d = [], e = {}, D = [], j;\nD[0] = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€���������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[0].length; ++j) if(D[0][j].charCodeAt(0) !== 0xFFFD) { e[D[0][j]] = 0 + j; d[0 + j] = D[0][j];}\nD[161] = \"����������������������������������������������������������������������������������������������������������������������������������������������������������������� 、。・ˉˇ¨〃々―~�…‘’“”〔〕〈〉《》「」『』〖〗【】±×÷∶∧∨∑∏∪∩∈∷√⊥∥∠⌒⊙∫∮≡≌≈∽∝≠≮≯≤≥∞∵∴♂♀°′″℃$¤¢£‰§№☆★○●◎◇◆□■△▲※→←↑↓〓�\".split(\"\");\nfor(j = 0; j != D[161].length; ++j) if(D[161][j].charCodeAt(0) !== 0xFFFD) { e[D[161][j]] = 41216 + j; d[41216 + j] = D[161][j];}\nD[162] = \"���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖⒗⒘⒙⒚⒛⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂⒃⒄⒅⒆⒇①②③④⑤⑥⑦⑧⑨⑩��㈠㈡㈢㈣㈤㈥㈦㈧㈨㈩��ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫ���\".split(\"\");\nfor(j = 0; j != D[162].length; ++j) if(D[162][j].charCodeAt(0) !== 0xFFFD) { e[D[162][j]] = 41472 + j; d[41472 + j] = D[162][j];}\nD[163] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������!"#¥%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} ̄�\".split(\"\");\nfor(j = 0; j != D[163].length; ++j) if(D[163][j].charCodeAt(0) !== 0xFFFD) { e[D[163][j]] = 41728 + j; d[41728 + j] = D[163][j];}\nD[164] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん������������\".split(\"\");\nfor(j = 0; j != D[164].length; ++j) if(D[164][j].charCodeAt(0) !== 0xFFFD) { e[D[164][j]] = 41984 + j; d[41984 + j] = D[164][j];}\nD[165] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ���������\".split(\"\");\nfor(j = 0; j != D[165].length; ++j) if(D[165][j].charCodeAt(0) !== 0xFFFD) { e[D[165][j]] = 42240 + j; d[42240 + j] = D[165][j];}\nD[166] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ��������αβγδεζηθικλμνξοπρστυφχψω���������������������������������������\".split(\"\");\nfor(j = 0; j != D[166].length; ++j) if(D[166][j].charCodeAt(0) !== 0xFFFD) { e[D[166][j]] = 42496 + j; d[42496 + j] = D[166][j];}\nD[167] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ���������������абвгдеёжзийклмнопрстуфхцчшщъыьэюя��������������\".split(\"\");\nfor(j = 0; j != D[167].length; ++j) if(D[167][j].charCodeAt(0) !== 0xFFFD) { e[D[167][j]] = 42752 + j; d[42752 + j] = D[167][j];}\nD[168] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜüê����������ㄅㄆㄇㄈㄉㄊㄋㄌㄍㄎㄏㄐㄑㄒㄓㄔㄕㄖㄗㄘㄙㄚㄛㄜㄝㄞㄟㄠㄡㄢㄣㄤㄥㄦㄧㄨㄩ����������������������\".split(\"\");\nfor(j = 0; j != D[168].length; ++j) if(D[168][j].charCodeAt(0) !== 0xFFFD) { e[D[168][j]] = 43008 + j; d[43008 + j] = D[168][j];}\nD[169] = \"��������������������������������������������������������������������������������������������������������������������������������������������������������������������─━│┃┄┅┆┇┈┉┊┋┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁╂╃╄╅╆╇╈╉╊╋����������������\".split(\"\");\nfor(j = 0; j != D[169].length; ++j) if(D[169][j].charCodeAt(0) !== 0xFFFD) { e[D[169][j]] = 43264 + j; d[43264 + j] = D[169][j];}\nD[176] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙坝霸罢爸白柏百摆佰败拜稗斑班搬扳般颁板版扮拌伴瓣半办绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞包褒剥�\".split(\"\");\nfor(j = 0; j != D[176].length; ++j) if(D[176][j].charCodeAt(0) !== 0xFFFD) { e[D[176][j]] = 45056 + j; d[45056 + j] = D[176][j];}\nD[177] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������薄雹保堡饱宝抱报暴豹鲍爆杯碑悲卑北辈背贝钡倍狈备惫焙被奔苯本笨崩绷甭泵蹦迸逼鼻比鄙笔彼碧蓖蔽毕毙毖币庇痹闭敝弊必辟壁臂避陛鞭边编贬扁便变卞辨辩辫遍标彪膘表鳖憋别瘪彬斌濒滨宾摈兵冰柄丙秉饼炳�\".split(\"\");\nfor(j = 0; j != D[177].length; ++j) if(D[177][j].charCodeAt(0) !== 0xFFFD) { e[D[177][j]] = 45312 + j; d[45312 + j] = D[177][j];}\nD[178] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������病并玻菠播拨钵波博勃搏铂箔伯帛舶脖膊渤泊驳捕卜哺补埠不布步簿部怖擦猜裁材才财睬踩采彩菜蔡餐参蚕残惭惨灿苍舱仓沧藏操糙槽曹草厕策侧册测层蹭插叉茬茶查碴搽察岔差诧拆柴豺搀掺蝉馋谗缠铲产阐颤昌猖�\".split(\"\");\nfor(j = 0; j != D[178].length; ++j) if(D[178][j].charCodeAt(0) !== 0xFFFD) { e[D[178][j]] = 45568 + j; d[45568 + j] = D[178][j];}\nD[179] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������场尝常长偿肠厂敞畅唱倡超抄钞朝嘲潮巢吵炒车扯撤掣彻澈郴臣辰尘晨忱沉陈趁衬撑称城橙成呈乘程惩澄诚承逞骋秤吃痴持匙池迟弛驰耻齿侈尺赤翅斥炽充冲虫崇宠抽酬畴踌稠愁筹仇绸瞅丑臭初出橱厨躇锄雏滁除楚�\".split(\"\");\nfor(j = 0; j != D[179].length; ++j) if(D[179][j].charCodeAt(0) !== 0xFFFD) { e[D[179][j]] = 45824 + j; d[45824 + j] = D[179][j];}\nD[180] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������础储矗搐触处揣川穿椽传船喘串疮窗幢床闯创吹炊捶锤垂春椿醇唇淳纯蠢戳绰疵茨磁雌辞慈瓷词此刺赐次聪葱囱匆从丛凑粗醋簇促蹿篡窜摧崔催脆瘁粹淬翠村存寸磋撮搓措挫错搭达答瘩打大呆歹傣戴带殆代贷袋待逮�\".split(\"\");\nfor(j = 0; j != D[180].length; ++j) if(D[180][j].charCodeAt(0) !== 0xFFFD) { e[D[180][j]] = 46080 + j; d[46080 + j] = D[180][j];}\nD[181] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������怠耽担丹单郸掸胆旦氮但惮淡诞弹蛋当挡党荡档刀捣蹈倒岛祷导到稻悼道盗德得的蹬灯登等瞪凳邓堤低滴迪敌笛狄涤翟嫡抵底地蒂第帝弟递缔颠掂滇碘点典靛垫电佃甸店惦奠淀殿碉叼雕凋刁掉吊钓调跌爹碟蝶迭谍叠�\".split(\"\");\nfor(j = 0; j != D[181].length; ++j) if(D[181][j].charCodeAt(0) !== 0xFFFD) { e[D[181][j]] = 46336 + j; d[46336 + j] = D[181][j];}\nD[182] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������丁盯叮钉顶鼎锭定订丢东冬董懂动栋侗恫冻洞兜抖斗陡豆逗痘都督毒犊独读堵睹赌杜镀肚度渡妒端短锻段断缎堆兑队对墩吨蹲敦顿囤钝盾遁掇哆多夺垛躲朵跺舵剁惰堕蛾峨鹅俄额讹娥恶厄扼遏鄂饿恩而儿耳尔饵洱二�\".split(\"\");\nfor(j = 0; j != D[182].length; ++j) if(D[182][j].charCodeAt(0) !== 0xFFFD) { e[D[182][j]] = 46592 + j; d[46592 + j] = D[182][j];}\nD[183] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������贰发罚筏伐乏阀法珐藩帆番翻樊矾钒繁凡烦反返范贩犯饭泛坊芳方肪房防妨仿访纺放菲非啡飞肥匪诽吠肺废沸费芬酚吩氛分纷坟焚汾粉奋份忿愤粪丰封枫蜂峰锋风疯烽逢冯缝讽奉凤佛否夫敷肤孵扶拂辐幅氟符伏俘服�\".split(\"\");\nfor(j = 0; j != D[183].length; ++j) if(D[183][j].charCodeAt(0) !== 0xFFFD) { e[D[183][j]] = 46848 + j; d[46848 + j] = D[183][j];}\nD[184] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������浮涪福袱弗甫抚辅俯釜斧脯腑府腐赴副覆赋复傅付阜父腹负富讣附妇缚咐噶嘎该改概钙盖溉干甘杆柑竿肝赶感秆敢赣冈刚钢缸肛纲岗港杠篙皋高膏羔糕搞镐稿告哥歌搁戈鸽胳疙割革葛格蛤阁隔铬个各给根跟耕更庚羹�\".split(\"\");\nfor(j = 0; j != D[184].length; ++j) if(D[184][j].charCodeAt(0) !== 0xFFFD) { e[D[184][j]] = 47104 + j; d[47104 + j] = D[184][j];}\nD[185] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������埂耿梗工攻功恭龚供躬公宫弓巩汞拱贡共钩勾沟苟狗垢构购够辜菇咕箍估沽孤姑鼓古蛊骨谷股故顾固雇刮瓜剐寡挂褂乖拐怪棺关官冠观管馆罐惯灌贯光广逛瑰规圭硅归龟闺轨鬼诡癸桂柜跪贵刽辊滚棍锅郭国果裹过哈�\".split(\"\");\nfor(j = 0; j != D[185].length; ++j) if(D[185][j].charCodeAt(0) !== 0xFFFD) { e[D[185][j]] = 47360 + j; d[47360 + j] = D[185][j];}\nD[186] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������骸孩海氦亥害骇酣憨邯韩含涵寒函喊罕翰撼捍旱憾悍焊汗汉夯杭航壕嚎豪毫郝好耗号浩呵喝荷菏核禾和何合盒貉阂河涸赫褐鹤贺嘿黑痕很狠恨哼亨横衡恒轰哄烘虹鸿洪宏弘红喉侯猴吼厚候后呼乎忽瑚壶葫胡蝴狐糊湖�\".split(\"\");\nfor(j = 0; j != D[186].length; ++j) if(D[186][j].charCodeAt(0) !== 0xFFFD) { e[D[186][j]] = 47616 + j; d[47616 + j] = D[186][j];}\nD[187] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������弧虎唬护互沪户花哗华猾滑画划化话槐徊怀淮坏欢环桓还缓换患唤痪豢焕涣宦幻荒慌黄磺蝗簧皇凰惶煌晃幌恍谎灰挥辉徽恢蛔回毁悔慧卉惠晦贿秽会烩汇讳诲绘荤昏婚魂浑混豁活伙火获或惑霍货祸击圾基机畸稽积箕�\".split(\"\");\nfor(j = 0; j != D[187].length; ++j) if(D[187][j].charCodeAt(0) !== 0xFFFD) { e[D[187][j]] = 47872 + j; d[47872 + j] = D[187][j];}\nD[188] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������肌饥迹激讥鸡姬绩缉吉极棘辑籍集及急疾汲即嫉级挤几脊己蓟技冀季伎祭剂悸济寄寂计记既忌际妓继纪嘉枷夹佳家加荚颊贾甲钾假稼价架驾嫁歼监坚尖笺间煎兼肩艰奸缄茧检柬碱硷拣捡简俭剪减荐槛鉴践贱见键箭件�\".split(\"\");\nfor(j = 0; j != D[188].length; ++j) if(D[188][j].charCodeAt(0) !== 0xFFFD) { e[D[188][j]] = 48128 + j; d[48128 + j] = D[188][j];}\nD[189] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������健舰剑饯渐溅涧建僵姜将浆江疆蒋桨奖讲匠酱降蕉椒礁焦胶交郊浇骄娇嚼搅铰矫侥脚狡角饺缴绞剿教酵轿较叫窖揭接皆秸街阶截劫节桔杰捷睫竭洁结解姐戒藉芥界借介疥诫届巾筋斤金今津襟紧锦仅谨进靳晋禁近烬浸�\".split(\"\");\nfor(j = 0; j != D[189].length; ++j) if(D[189][j].charCodeAt(0) !== 0xFFFD) { e[D[189][j]] = 48384 + j; d[48384 + j] = D[189][j];}\nD[190] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������尽劲荆兢茎睛晶鲸京惊精粳经井警景颈静境敬镜径痉靖竟竞净炯窘揪究纠玖韭久灸九酒厩救旧臼舅咎就疚鞠拘狙疽居驹菊局咀矩举沮聚拒据巨具距踞锯俱句惧炬剧捐鹃娟倦眷卷绢撅攫抉掘倔爵觉决诀绝均菌钧军君峻�\".split(\"\");\nfor(j = 0; j != D[190].length; ++j) if(D[190][j].charCodeAt(0) !== 0xFFFD) { e[D[190][j]] = 48640 + j; d[48640 + j] = D[190][j];}\nD[191] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������俊竣浚郡骏喀咖卡咯开揩楷凯慨刊堪勘坎砍看康慷糠扛抗亢炕考拷烤靠坷苛柯棵磕颗科壳咳可渴克刻客课肯啃垦恳坑吭空恐孔控抠口扣寇枯哭窟苦酷库裤夸垮挎跨胯块筷侩快宽款匡筐狂框矿眶旷况亏盔岿窥葵奎魁傀�\".split(\"\");\nfor(j = 0; j != D[191].length; ++j) if(D[191][j].charCodeAt(0) !== 0xFFFD) { e[D[191][j]] = 48896 + j; d[48896 + j] = D[191][j];}\nD[192] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������馈愧溃坤昆捆困括扩廓阔垃拉喇蜡腊辣啦莱来赖蓝婪栏拦篮阑兰澜谰揽览懒缆烂滥琅榔狼廊郎朗浪捞劳牢老佬姥酪烙涝勒乐雷镭蕾磊累儡垒擂肋类泪棱楞冷厘梨犁黎篱狸离漓理李里鲤礼莉荔吏栗丽厉励砾历利傈例俐�\".split(\"\");\nfor(j = 0; j != D[192].length; ++j) if(D[192][j].charCodeAt(0) !== 0xFFFD) { e[D[192][j]] = 49152 + j; d[49152 + j] = D[192][j];}\nD[193] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������痢立粒沥隶力璃哩俩联莲连镰廉怜涟帘敛脸链恋炼练粮凉梁粱良两辆量晾亮谅撩聊僚疗燎寥辽潦了撂镣廖料列裂烈劣猎琳林磷霖临邻鳞淋凛赁吝拎玲菱零龄铃伶羚凌灵陵岭领另令溜琉榴硫馏留刘瘤流柳六龙聋咙笼窿�\".split(\"\");\nfor(j = 0; j != D[193].length; ++j) if(D[193][j].charCodeAt(0) !== 0xFFFD) { e[D[193][j]] = 49408 + j; d[49408 + j] = D[193][j];}\nD[194] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������隆垄拢陇楼娄搂篓漏陋芦卢颅庐炉掳卤虏鲁麓碌露路赂鹿潞禄录陆戮驴吕铝侣旅履屡缕虑氯律率滤绿峦挛孪滦卵乱掠略抡轮伦仑沦纶论萝螺罗逻锣箩骡裸落洛骆络妈麻玛码蚂马骂嘛吗埋买麦卖迈脉瞒馒蛮满蔓曼慢漫�\".split(\"\");\nfor(j = 0; j != D[194].length; ++j) if(D[194][j].charCodeAt(0) !== 0xFFFD) { e[D[194][j]] = 49664 + j; d[49664 + j] = D[194][j];}\nD[195] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������谩芒茫盲氓忙莽猫茅锚毛矛铆卯茂冒帽貌贸么玫枚梅酶霉煤没眉媒镁每美昧寐妹媚门闷们萌蒙檬盟锰猛梦孟眯醚靡糜迷谜弥米秘觅泌蜜密幂棉眠绵冕免勉娩缅面苗描瞄藐秒渺庙妙蔑灭民抿皿敏悯闽明螟鸣铭名命谬摸�\".split(\"\");\nfor(j = 0; j != D[195].length; ++j) if(D[195][j].charCodeAt(0) !== 0xFFFD) { e[D[195][j]] = 49920 + j; d[49920 + j] = D[195][j];}\nD[196] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������摹蘑模膜磨摩魔抹末莫墨默沫漠寞陌谋牟某拇牡亩姆母墓暮幕募慕木目睦牧穆拿哪呐钠那娜纳氖乃奶耐奈南男难囊挠脑恼闹淖呢馁内嫩能妮霓倪泥尼拟你匿腻逆溺蔫拈年碾撵捻念娘酿鸟尿捏聂孽啮镊镍涅您柠狞凝宁�\".split(\"\");\nfor(j = 0; j != D[196].length; ++j) if(D[196][j].charCodeAt(0) !== 0xFFFD) { e[D[196][j]] = 50176 + j; d[50176 + j] = D[196][j];}\nD[197] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������拧泞牛扭钮纽脓浓农弄奴努怒女暖虐疟挪懦糯诺哦欧鸥殴藕呕偶沤啪趴爬帕怕琶拍排牌徘湃派攀潘盘磐盼畔判叛乓庞旁耪胖抛咆刨炮袍跑泡呸胚培裴赔陪配佩沛喷盆砰抨烹澎彭蓬棚硼篷膨朋鹏捧碰坯砒霹批披劈琵毗�\".split(\"\");\nfor(j = 0; j != D[197].length; ++j) if(D[197][j].charCodeAt(0) !== 0xFFFD) { e[D[197][j]] = 50432 + j; d[50432 + j] = D[197][j];}\nD[198] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������啤脾疲皮匹痞僻屁譬篇偏片骗飘漂瓢票撇瞥拼频贫品聘乒坪苹萍平凭瓶评屏坡泼颇婆破魄迫粕剖扑铺仆莆葡菩蒲埔朴圃普浦谱曝瀑期欺栖戚妻七凄漆柒沏其棋奇歧畦崎脐齐旗祈祁骑起岂乞企启契砌器气迄弃汽泣讫掐�\".split(\"\");\nfor(j = 0; j != D[198].length; ++j) if(D[198][j].charCodeAt(0) !== 0xFFFD) { e[D[198][j]] = 50688 + j; d[50688 + j] = D[198][j];}\nD[199] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������恰洽牵扦钎铅千迁签仟谦乾黔钱钳前潜遣浅谴堑嵌欠歉枪呛腔羌墙蔷强抢橇锹敲悄桥瞧乔侨巧鞘撬翘峭俏窍切茄且怯窃钦侵亲秦琴勤芹擒禽寝沁青轻氢倾卿清擎晴氰情顷请庆琼穷秋丘邱球求囚酋泅趋区蛆曲躯屈驱渠�\".split(\"\");\nfor(j = 0; j != D[199].length; ++j) if(D[199][j].charCodeAt(0) !== 0xFFFD) { e[D[199][j]] = 50944 + j; d[50944 + j] = D[199][j];}\nD[200] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������取娶龋趣去圈颧权醛泉全痊拳犬券劝缺炔瘸却鹊榷确雀裙群然燃冉染瓤壤攘嚷让饶扰绕惹热壬仁人忍韧任认刃妊纫扔仍日戎茸蓉荣融熔溶容绒冗揉柔肉茹蠕儒孺如辱乳汝入褥软阮蕊瑞锐闰润若弱撒洒萨腮鳃塞赛三叁�\".split(\"\");\nfor(j = 0; j != D[200].length; ++j) if(D[200][j].charCodeAt(0) !== 0xFFFD) { e[D[200][j]] = 51200 + j; d[51200 + j] = D[200][j];}\nD[201] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������伞散桑嗓丧搔骚扫嫂瑟色涩森僧莎砂杀刹沙纱傻啥煞筛晒珊苫杉山删煽衫闪陕擅赡膳善汕扇缮墒伤商赏晌上尚裳梢捎稍烧芍勺韶少哨邵绍奢赊蛇舌舍赦摄射慑涉社设砷申呻伸身深娠绅神沈审婶甚肾慎渗声生甥牲升绳�\".split(\"\");\nfor(j = 0; j != D[201].length; ++j) if(D[201][j].charCodeAt(0) !== 0xFFFD) { e[D[201][j]] = 51456 + j; d[51456 + j] = D[201][j];}\nD[202] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������省盛剩胜圣师失狮施湿诗尸虱十石拾时什食蚀实识史矢使屎驶始式示士世柿事拭誓逝势是嗜噬适仕侍释饰氏市恃室视试收手首守寿授售受瘦兽蔬枢梳殊抒输叔舒淑疏书赎孰熟薯暑曙署蜀黍鼠属术述树束戍竖墅庶数漱�\".split(\"\");\nfor(j = 0; j != D[202].length; ++j) if(D[202][j].charCodeAt(0) !== 0xFFFD) { e[D[202][j]] = 51712 + j; d[51712 + j] = D[202][j];}\nD[203] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������恕刷耍摔衰甩帅栓拴霜双爽谁水睡税吮瞬顺舜说硕朔烁斯撕嘶思私司丝死肆寺嗣四伺似饲巳松耸怂颂送宋讼诵搜艘擞嗽苏酥俗素速粟僳塑溯宿诉肃酸蒜算虽隋随绥髓碎岁穗遂隧祟孙损笋蓑梭唆缩琐索锁所塌他它她塔�\".split(\"\");\nfor(j = 0; j != D[203].length; ++j) if(D[203][j].charCodeAt(0) !== 0xFFFD) { e[D[203][j]] = 51968 + j; d[51968 + j] = D[203][j];}\nD[204] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������獭挞蹋踏胎苔抬台泰酞太态汰坍摊贪瘫滩坛檀痰潭谭谈坦毯袒碳探叹炭汤塘搪堂棠膛唐糖倘躺淌趟烫掏涛滔绦萄桃逃淘陶讨套特藤腾疼誊梯剔踢锑提题蹄啼体替嚏惕涕剃屉天添填田甜恬舔腆挑条迢眺跳贴铁帖厅听烃�\".split(\"\");\nfor(j = 0; j != D[204].length; ++j) if(D[204][j].charCodeAt(0) !== 0xFFFD) { e[D[204][j]] = 52224 + j; d[52224 + j] = D[204][j];}\nD[205] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������汀廷停亭庭挺艇通桐酮瞳同铜彤童桶捅筒统痛偷投头透凸秃突图徒途涂屠土吐兔湍团推颓腿蜕褪退吞屯臀拖托脱鸵陀驮驼椭妥拓唾挖哇蛙洼娃瓦袜歪外豌弯湾玩顽丸烷完碗挽晚皖惋宛婉万腕汪王亡枉网往旺望忘妄威�\".split(\"\");\nfor(j = 0; j != D[205].length; ++j) if(D[205][j].charCodeAt(0) !== 0xFFFD) { e[D[205][j]] = 52480 + j; d[52480 + j] = D[205][j];}\nD[206] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������巍微危韦违桅围唯惟为潍维苇萎委伟伪尾纬未蔚味畏胃喂魏位渭谓尉慰卫瘟温蚊文闻纹吻稳紊问嗡翁瓮挝蜗涡窝我斡卧握沃巫呜钨乌污诬屋无芜梧吾吴毋武五捂午舞伍侮坞戊雾晤物勿务悟误昔熙析西硒矽晰嘻吸锡牺�\".split(\"\");\nfor(j = 0; j != D[206].length; ++j) if(D[206][j].charCodeAt(0) !== 0xFFFD) { e[D[206][j]] = 52736 + j; d[52736 + j] = D[206][j];}\nD[207] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������稀息希悉膝夕惜熄烯溪汐犀檄袭席习媳喜铣洗系隙戏细瞎虾匣霞辖暇峡侠狭下厦夏吓掀锨先仙鲜纤咸贤衔舷闲涎弦嫌显险现献县腺馅羡宪陷限线相厢镶香箱襄湘乡翔祥详想响享项巷橡像向象萧硝霄削哮嚣销消宵淆晓�\".split(\"\");\nfor(j = 0; j != D[207].length; ++j) if(D[207][j].charCodeAt(0) !== 0xFFFD) { e[D[207][j]] = 52992 + j; d[52992 + j] = D[207][j];}\nD[208] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������小孝校肖啸笑效楔些歇蝎鞋协挟携邪斜胁谐写械卸蟹懈泄泻谢屑薪芯锌欣辛新忻心信衅星腥猩惺兴刑型形邢行醒幸杏性姓兄凶胸匈汹雄熊休修羞朽嗅锈秀袖绣墟戌需虚嘘须徐许蓄酗叙旭序畜恤絮婿绪续轩喧宣悬旋玄�\".split(\"\");\nfor(j = 0; j != D[208].length; ++j) if(D[208][j].charCodeAt(0) !== 0xFFFD) { e[D[208][j]] = 53248 + j; d[53248 + j] = D[208][j];}\nD[209] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������选癣眩绚靴薛学穴雪血勋熏循旬询寻驯巡殉汛训讯逊迅压押鸦鸭呀丫芽牙蚜崖衙涯雅哑亚讶焉咽阉烟淹盐严研蜒岩延言颜阎炎沿奄掩眼衍演艳堰燕厌砚雁唁彦焰宴谚验殃央鸯秧杨扬佯疡羊洋阳氧仰痒养样漾邀腰妖瑶�\".split(\"\");\nfor(j = 0; j != D[209].length; ++j) if(D[209][j].charCodeAt(0) !== 0xFFFD) { e[D[209][j]] = 53504 + j; d[53504 + j] = D[209][j];}\nD[210] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������摇尧遥窑谣姚咬舀药要耀椰噎耶爷野冶也页掖业叶曳腋夜液一壹医揖铱依伊衣颐夷遗移仪胰疑沂宜姨彝椅蚁倚已乙矣以艺抑易邑屹亿役臆逸肄疫亦裔意毅忆义益溢诣议谊译异翼翌绎茵荫因殷音阴姻吟银淫寅饮尹引隐�\".split(\"\");\nfor(j = 0; j != D[210].length; ++j) if(D[210][j].charCodeAt(0) !== 0xFFFD) { e[D[210][j]] = 53760 + j; d[53760 + j] = D[210][j];}\nD[211] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������印英樱婴鹰应缨莹萤营荧蝇迎赢盈影颖硬映哟拥佣臃痈庸雍踊蛹咏泳涌永恿勇用幽优悠忧尤由邮铀犹油游酉有友右佑釉诱又幼迂淤于盂榆虞愚舆余俞逾鱼愉渝渔隅予娱雨与屿禹宇语羽玉域芋郁吁遇喻峪御愈欲狱育誉�\".split(\"\");\nfor(j = 0; j != D[211].length; ++j) if(D[211][j].charCodeAt(0) !== 0xFFFD) { e[D[211][j]] = 54016 + j; d[54016 + j] = D[211][j];}\nD[212] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������浴寓裕预豫驭鸳渊冤元垣袁原援辕园员圆猿源缘远苑愿怨院曰约越跃钥岳粤月悦阅耘云郧匀陨允运蕴酝晕韵孕匝砸杂栽哉灾宰载再在咱攒暂赞赃脏葬遭糟凿藻枣早澡蚤躁噪造皂灶燥责择则泽贼怎增憎曾赠扎喳渣札轧�\".split(\"\");\nfor(j = 0; j != D[212].length; ++j) if(D[212][j].charCodeAt(0) !== 0xFFFD) { e[D[212][j]] = 54272 + j; d[54272 + j] = D[212][j];}\nD[213] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������铡闸眨栅榨咋乍炸诈摘斋宅窄债寨瞻毡詹粘沾盏斩辗崭展蘸栈占战站湛绽樟章彰漳张掌涨杖丈帐账仗胀瘴障招昭找沼赵照罩兆肇召遮折哲蛰辙者锗蔗这浙珍斟真甄砧臻贞针侦枕疹诊震振镇阵蒸挣睁征狰争怔整拯正政�\".split(\"\");\nfor(j = 0; j != D[213].length; ++j) if(D[213][j].charCodeAt(0) !== 0xFFFD) { e[D[213][j]] = 54528 + j; d[54528 + j] = D[213][j];}\nD[214] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������帧症郑证芝枝支吱蜘知肢脂汁之织职直植殖执值侄址指止趾只旨纸志挚掷至致置帜峙制智秩稚质炙痔滞治窒中盅忠钟衷终种肿重仲众舟周州洲诌粥轴肘帚咒皱宙昼骤珠株蛛朱猪诸诛逐竹烛煮拄瞩嘱主著柱助蛀贮铸筑�\".split(\"\");\nfor(j = 0; j != D[214].length; ++j) if(D[214][j].charCodeAt(0) !== 0xFFFD) { e[D[214][j]] = 54784 + j; d[54784 + j] = D[214][j];}\nD[215] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������住注祝驻抓爪拽专砖转撰赚篆桩庄装妆撞壮状椎锥追赘坠缀谆准捉拙卓桌琢茁酌啄着灼浊兹咨资姿滋淄孜紫仔籽滓子自渍字鬃棕踪宗综总纵邹走奏揍租足卒族祖诅阻组钻纂嘴醉最罪尊遵昨左佐柞做作坐座������\".split(\"\");\nfor(j = 0; j != D[215].length; ++j) if(D[215][j].charCodeAt(0) !== 0xFFFD) { e[D[215][j]] = 55040 + j; d[55040 + j] = D[215][j];}\nD[216] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������亍丌兀丐廿卅丕亘丞鬲孬噩丨禺丿匕乇夭爻卮氐囟胤馗毓睾鼗丶亟鼐乜乩亓芈孛啬嘏仄厍厝厣厥厮靥赝匚叵匦匮匾赜卦卣刂刈刎刭刳刿剀剌剞剡剜蒯剽劂劁劐劓冂罔亻仃仉仂仨仡仫仞伛仳伢佤仵伥伧伉伫佞佧攸佚佝�\".split(\"\");\nfor(j = 0; j != D[216].length; ++j) if(D[216][j].charCodeAt(0) !== 0xFFFD) { e[D[216][j]] = 55296 + j; d[55296 + j] = D[216][j];}\nD[217] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������佟佗伲伽佶佴侑侉侃侏佾佻侪佼侬侔俦俨俪俅俚俣俜俑俟俸倩偌俳倬倏倮倭俾倜倌倥倨偾偃偕偈偎偬偻傥傧傩傺僖儆僭僬僦僮儇儋仝氽佘佥俎龠汆籴兮巽黉馘冁夔勹匍訇匐凫夙兕亠兖亳衮袤亵脔裒禀嬴蠃羸冫冱冽冼�\".split(\"\");\nfor(j = 0; j != D[217].length; ++j) if(D[217][j].charCodeAt(0) !== 0xFFFD) { e[D[217][j]] = 55552 + j; d[55552 + j] = D[217][j];}\nD[218] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������凇冖冢冥讠讦讧讪讴讵讷诂诃诋诏诎诒诓诔诖诘诙诜诟诠诤诨诩诮诰诳诶诹诼诿谀谂谄谇谌谏谑谒谔谕谖谙谛谘谝谟谠谡谥谧谪谫谮谯谲谳谵谶卩卺阝阢阡阱阪阽阼陂陉陔陟陧陬陲陴隈隍隗隰邗邛邝邙邬邡邴邳邶邺�\".split(\"\");\nfor(j = 0; j != D[218].length; ++j) if(D[218][j].charCodeAt(0) !== 0xFFFD) { e[D[218][j]] = 55808 + j; d[55808 + j] = D[218][j];}\nD[219] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������邸邰郏郅邾郐郄郇郓郦郢郜郗郛郫郯郾鄄鄢鄞鄣鄱鄯鄹酃酆刍奂劢劬劭劾哿勐勖勰叟燮矍廴凵凼鬯厶弁畚巯坌垩垡塾墼壅壑圩圬圪圳圹圮圯坜圻坂坩垅坫垆坼坻坨坭坶坳垭垤垌垲埏垧垴垓垠埕埘埚埙埒垸埴埯埸埤埝�\".split(\"\");\nfor(j = 0; j != D[219].length; ++j) if(D[219][j].charCodeAt(0) !== 0xFFFD) { e[D[219][j]] = 56064 + j; d[56064 + j] = D[219][j];}\nD[220] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������堋堍埽埭堀堞堙塄堠塥塬墁墉墚墀馨鼙懿艹艽艿芏芊芨芄芎芑芗芙芫芸芾芰苈苊苣芘芷芮苋苌苁芩芴芡芪芟苄苎芤苡茉苷苤茏茇苜苴苒苘茌苻苓茑茚茆茔茕苠苕茜荑荛荜茈莒茼茴茱莛荞茯荏荇荃荟荀茗荠茭茺茳荦荥�\".split(\"\");\nfor(j = 0; j != D[220].length; ++j) if(D[220][j].charCodeAt(0) !== 0xFFFD) { e[D[220][j]] = 56320 + j; d[56320 + j] = D[220][j];}\nD[221] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������荨茛荩荬荪荭荮莰荸莳莴莠莪莓莜莅荼莶莩荽莸荻莘莞莨莺莼菁萁菥菘堇萘萋菝菽菖萜萸萑萆菔菟萏萃菸菹菪菅菀萦菰菡葜葑葚葙葳蒇蒈葺蒉葸萼葆葩葶蒌蒎萱葭蓁蓍蓐蓦蒽蓓蓊蒿蒺蓠蒡蒹蒴蒗蓥蓣蔌甍蔸蓰蔹蔟蔺�\".split(\"\");\nfor(j = 0; j != D[221].length; ++j) if(D[221][j].charCodeAt(0) !== 0xFFFD) { e[D[221][j]] = 56576 + j; d[56576 + j] = D[221][j];}\nD[222] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������蕖蔻蓿蓼蕙蕈蕨蕤蕞蕺瞢蕃蕲蕻薤薨薇薏蕹薮薜薅薹薷薰藓藁藜藿蘧蘅蘩蘖蘼廾弈夼奁耷奕奚奘匏尢尥尬尴扌扪抟抻拊拚拗拮挢拶挹捋捃掭揶捱捺掎掴捭掬掊捩掮掼揲揸揠揿揄揞揎摒揆掾摅摁搋搛搠搌搦搡摞撄摭撖�\".split(\"\");\nfor(j = 0; j != D[222].length; ++j) if(D[222][j].charCodeAt(0) !== 0xFFFD) { e[D[222][j]] = 56832 + j; d[56832 + j] = D[222][j];}\nD[223] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������摺撷撸撙撺擀擐擗擤擢攉攥攮弋忒甙弑卟叱叽叩叨叻吒吖吆呋呒呓呔呖呃吡呗呙吣吲咂咔呷呱呤咚咛咄呶呦咝哐咭哂咴哒咧咦哓哔呲咣哕咻咿哌哙哚哜咩咪咤哝哏哞唛哧唠哽唔哳唢唣唏唑唧唪啧喏喵啉啭啁啕唿啐唼�\".split(\"\");\nfor(j = 0; j != D[223].length; ++j) if(D[223][j].charCodeAt(0) !== 0xFFFD) { e[D[223][j]] = 57088 + j; d[57088 + j] = D[223][j];}\nD[224] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������唷啖啵啶啷唳唰啜喋嗒喃喱喹喈喁喟啾嗖喑啻嗟喽喾喔喙嗪嗷嗉嘟嗑嗫嗬嗔嗦嗝嗄嗯嗥嗲嗳嗌嗍嗨嗵嗤辔嘞嘈嘌嘁嘤嘣嗾嘀嘧嘭噘嘹噗嘬噍噢噙噜噌噔嚆噤噱噫噻噼嚅嚓嚯囔囗囝囡囵囫囹囿圄圊圉圜帏帙帔帑帱帻帼�\".split(\"\");\nfor(j = 0; j != D[224].length; ++j) if(D[224][j].charCodeAt(0) !== 0xFFFD) { e[D[224][j]] = 57344 + j; d[57344 + j] = D[224][j];}\nD[225] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������帷幄幔幛幞幡岌屺岍岐岖岈岘岙岑岚岜岵岢岽岬岫岱岣峁岷峄峒峤峋峥崂崃崧崦崮崤崞崆崛嵘崾崴崽嵬嵛嵯嵝嵫嵋嵊嵩嵴嶂嶙嶝豳嶷巅彳彷徂徇徉後徕徙徜徨徭徵徼衢彡犭犰犴犷犸狃狁狎狍狒狨狯狩狲狴狷猁狳猃狺�\".split(\"\");\nfor(j = 0; j != D[225].length; ++j) if(D[225][j].charCodeAt(0) !== 0xFFFD) { e[D[225][j]] = 57600 + j; d[57600 + j] = D[225][j];}\nD[226] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������狻猗猓猡猊猞猝猕猢猹猥猬猸猱獐獍獗獠獬獯獾舛夥飧夤夂饣饧饨饩饪饫饬饴饷饽馀馄馇馊馍馐馑馓馔馕庀庑庋庖庥庠庹庵庾庳赓廒廑廛廨廪膺忄忉忖忏怃忮怄忡忤忾怅怆忪忭忸怙怵怦怛怏怍怩怫怊怿怡恸恹恻恺恂�\".split(\"\");\nfor(j = 0; j != D[226].length; ++j) if(D[226][j].charCodeAt(0) !== 0xFFFD) { e[D[226][j]] = 57856 + j; d[57856 + j] = D[226][j];}\nD[227] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������恪恽悖悚悭悝悃悒悌悛惬悻悱惝惘惆惚悴愠愦愕愣惴愀愎愫慊慵憬憔憧憷懔懵忝隳闩闫闱闳闵闶闼闾阃阄阆阈阊阋阌阍阏阒阕阖阗阙阚丬爿戕氵汔汜汊沣沅沐沔沌汨汩汴汶沆沩泐泔沭泷泸泱泗沲泠泖泺泫泮沱泓泯泾�\".split(\"\");\nfor(j = 0; j != D[227].length; ++j) if(D[227][j].charCodeAt(0) !== 0xFFFD) { e[D[227][j]] = 58112 + j; d[58112 + j] = D[227][j];}\nD[228] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������洹洧洌浃浈洇洄洙洎洫浍洮洵洚浏浒浔洳涑浯涞涠浞涓涔浜浠浼浣渚淇淅淞渎涿淠渑淦淝淙渖涫渌涮渫湮湎湫溲湟溆湓湔渲渥湄滟溱溘滠漭滢溥溧溽溻溷滗溴滏溏滂溟潢潆潇漤漕滹漯漶潋潴漪漉漩澉澍澌潸潲潼潺濑�\".split(\"\");\nfor(j = 0; j != D[228].length; ++j) if(D[228][j].charCodeAt(0) !== 0xFFFD) { e[D[228][j]] = 58368 + j; d[58368 + j] = D[228][j];}\nD[229] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������濉澧澹澶濂濡濮濞濠濯瀚瀣瀛瀹瀵灏灞宀宄宕宓宥宸甯骞搴寤寮褰寰蹇謇辶迓迕迥迮迤迩迦迳迨逅逄逋逦逑逍逖逡逵逶逭逯遄遑遒遐遨遘遢遛暹遴遽邂邈邃邋彐彗彖彘尻咫屐屙孱屣屦羼弪弩弭艴弼鬻屮妁妃妍妩妪妣�\".split(\"\");\nfor(j = 0; j != D[229].length; ++j) if(D[229][j].charCodeAt(0) !== 0xFFFD) { e[D[229][j]] = 58624 + j; d[58624 + j] = D[229][j];}\nD[230] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������妗姊妫妞妤姒妲妯姗妾娅娆姝娈姣姘姹娌娉娲娴娑娣娓婀婧婊婕娼婢婵胬媪媛婷婺媾嫫媲嫒嫔媸嫠嫣嫱嫖嫦嫘嫜嬉嬗嬖嬲嬷孀尕尜孚孥孳孑孓孢驵驷驸驺驿驽骀骁骅骈骊骐骒骓骖骘骛骜骝骟骠骢骣骥骧纟纡纣纥纨纩�\".split(\"\");\nfor(j = 0; j != D[230].length; ++j) if(D[230][j].charCodeAt(0) !== 0xFFFD) { e[D[230][j]] = 58880 + j; d[58880 + j] = D[230][j];}\nD[231] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������纭纰纾绀绁绂绉绋绌绐绔绗绛绠绡绨绫绮绯绱绲缍绶绺绻绾缁缂缃缇缈缋缌缏缑缒缗缙缜缛缟缡缢缣缤缥缦缧缪缫缬缭缯缰缱缲缳缵幺畿巛甾邕玎玑玮玢玟珏珂珑玷玳珀珉珈珥珙顼琊珩珧珞玺珲琏琪瑛琦琥琨琰琮琬�\".split(\"\");\nfor(j = 0; j != D[231].length; ++j) if(D[231][j].charCodeAt(0) !== 0xFFFD) { e[D[231][j]] = 59136 + j; d[59136 + j] = D[231][j];}\nD[232] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������琛琚瑁瑜瑗瑕瑙瑷瑭瑾璜璎璀璁璇璋璞璨璩璐璧瓒璺韪韫韬杌杓杞杈杩枥枇杪杳枘枧杵枨枞枭枋杷杼柰栉柘栊柩枰栌柙枵柚枳柝栀柃枸柢栎柁柽栲栳桠桡桎桢桄桤梃栝桕桦桁桧桀栾桊桉栩梵梏桴桷梓桫棂楮棼椟椠棹�\".split(\"\");\nfor(j = 0; j != D[232].length; ++j) if(D[232][j].charCodeAt(0) !== 0xFFFD) { e[D[232][j]] = 59392 + j; d[59392 + j] = D[232][j];}\nD[233] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������椤棰椋椁楗棣椐楱椹楠楂楝榄楫榀榘楸椴槌榇榈槎榉楦楣楹榛榧榻榫榭槔榱槁槊槟榕槠榍槿樯槭樗樘橥槲橄樾檠橐橛樵檎橹樽樨橘橼檑檐檩檗檫猷獒殁殂殇殄殒殓殍殚殛殡殪轫轭轱轲轳轵轶轸轷轹轺轼轾辁辂辄辇辋�\".split(\"\");\nfor(j = 0; j != D[233].length; ++j) if(D[233][j].charCodeAt(0) !== 0xFFFD) { e[D[233][j]] = 59648 + j; d[59648 + j] = D[233][j];}\nD[234] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������辍辎辏辘辚軎戋戗戛戟戢戡戥戤戬臧瓯瓴瓿甏甑甓攴旮旯旰昊昙杲昃昕昀炅曷昝昴昱昶昵耆晟晔晁晏晖晡晗晷暄暌暧暝暾曛曜曦曩贲贳贶贻贽赀赅赆赈赉赇赍赕赙觇觊觋觌觎觏觐觑牮犟牝牦牯牾牿犄犋犍犏犒挈挲掰�\".split(\"\");\nfor(j = 0; j != D[234].length; ++j) if(D[234][j].charCodeAt(0) !== 0xFFFD) { e[D[234][j]] = 59904 + j; d[59904 + j] = D[234][j];}\nD[235] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������搿擘耄毪毳毽毵毹氅氇氆氍氕氘氙氚氡氩氤氪氲攵敕敫牍牒牖爰虢刖肟肜肓肼朊肽肱肫肭肴肷胧胨胩胪胛胂胄胙胍胗朐胝胫胱胴胭脍脎胲胼朕脒豚脶脞脬脘脲腈腌腓腴腙腚腱腠腩腼腽腭腧塍媵膈膂膑滕膣膪臌朦臊膻�\".split(\"\");\nfor(j = 0; j != D[235].length; ++j) if(D[235][j].charCodeAt(0) !== 0xFFFD) { e[D[235][j]] = 60160 + j; d[60160 + j] = D[235][j];}\nD[236] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������臁膦欤欷欹歃歆歙飑飒飓飕飙飚殳彀毂觳斐齑斓於旆旄旃旌旎旒旖炀炜炖炝炻烀炷炫炱烨烊焐焓焖焯焱煳煜煨煅煲煊煸煺熘熳熵熨熠燠燔燧燹爝爨灬焘煦熹戾戽扃扈扉礻祀祆祉祛祜祓祚祢祗祠祯祧祺禅禊禚禧禳忑忐�\".split(\"\");\nfor(j = 0; j != D[236].length; ++j) if(D[236][j].charCodeAt(0) !== 0xFFFD) { e[D[236][j]] = 60416 + j; d[60416 + j] = D[236][j];}\nD[237] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������怼恝恚恧恁恙恣悫愆愍慝憩憝懋懑戆肀聿沓泶淼矶矸砀砉砗砘砑斫砭砜砝砹砺砻砟砼砥砬砣砩硎硭硖硗砦硐硇硌硪碛碓碚碇碜碡碣碲碹碥磔磙磉磬磲礅磴礓礤礞礴龛黹黻黼盱眄眍盹眇眈眚眢眙眭眦眵眸睐睑睇睃睚睨�\".split(\"\");\nfor(j = 0; j != D[237].length; ++j) if(D[237][j].charCodeAt(0) !== 0xFFFD) { e[D[237][j]] = 60672 + j; d[60672 + j] = D[237][j];}\nD[238] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������睢睥睿瞍睽瞀瞌瞑瞟瞠瞰瞵瞽町畀畎畋畈畛畲畹疃罘罡罟詈罨罴罱罹羁罾盍盥蠲钅钆钇钋钊钌钍钏钐钔钗钕钚钛钜钣钤钫钪钭钬钯钰钲钴钶钷钸钹钺钼钽钿铄铈铉铊铋铌铍铎铐铑铒铕铖铗铙铘铛铞铟铠铢铤铥铧铨铪�\".split(\"\");\nfor(j = 0; j != D[238].length; ++j) if(D[238][j].charCodeAt(0) !== 0xFFFD) { e[D[238][j]] = 60928 + j; d[60928 + j] = D[238][j];}\nD[239] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������铩铫铮铯铳铴铵铷铹铼铽铿锃锂锆锇锉锊锍锎锏锒锓锔锕锖锘锛锝锞锟锢锪锫锩锬锱锲锴锶锷锸锼锾锿镂锵镄镅镆镉镌镎镏镒镓镔镖镗镘镙镛镞镟镝镡镢镤镥镦镧镨镩镪镫镬镯镱镲镳锺矧矬雉秕秭秣秫稆嵇稃稂稞稔�\".split(\"\");\nfor(j = 0; j != D[239].length; ++j) if(D[239][j].charCodeAt(0) !== 0xFFFD) { e[D[239][j]] = 61184 + j; d[61184 + j] = D[239][j];}\nD[240] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������稹稷穑黏馥穰皈皎皓皙皤瓞瓠甬鸠鸢鸨鸩鸪鸫鸬鸲鸱鸶鸸鸷鸹鸺鸾鹁鹂鹄鹆鹇鹈鹉鹋鹌鹎鹑鹕鹗鹚鹛鹜鹞鹣鹦鹧鹨鹩鹪鹫鹬鹱鹭鹳疒疔疖疠疝疬疣疳疴疸痄疱疰痃痂痖痍痣痨痦痤痫痧瘃痱痼痿瘐瘀瘅瘌瘗瘊瘥瘘瘕瘙�\".split(\"\");\nfor(j = 0; j != D[240].length; ++j) if(D[240][j].charCodeAt(0) !== 0xFFFD) { e[D[240][j]] = 61440 + j; d[61440 + j] = D[240][j];}\nD[241] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������瘛瘼瘢瘠癀瘭瘰瘿瘵癃瘾瘳癍癞癔癜癖癫癯翊竦穸穹窀窆窈窕窦窠窬窨窭窳衤衩衲衽衿袂袢裆袷袼裉裢裎裣裥裱褚裼裨裾裰褡褙褓褛褊褴褫褶襁襦襻疋胥皲皴矜耒耔耖耜耠耢耥耦耧耩耨耱耋耵聃聆聍聒聩聱覃顸颀颃�\".split(\"\");\nfor(j = 0; j != D[241].length; ++j) if(D[241][j].charCodeAt(0) !== 0xFFFD) { e[D[241][j]] = 61696 + j; d[61696 + j] = D[241][j];}\nD[242] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������颉颌颍颏颔颚颛颞颟颡颢颥颦虍虔虬虮虿虺虼虻蚨蚍蚋蚬蚝蚧蚣蚪蚓蚩蚶蛄蚵蛎蚰蚺蚱蚯蛉蛏蚴蛩蛱蛲蛭蛳蛐蜓蛞蛴蛟蛘蛑蜃蜇蛸蜈蜊蜍蜉蜣蜻蜞蜥蜮蜚蜾蝈蜴蜱蜩蜷蜿螂蜢蝽蝾蝻蝠蝰蝌蝮螋蝓蝣蝼蝤蝙蝥螓螯螨蟒�\".split(\"\");\nfor(j = 0; j != D[242].length; ++j) if(D[242][j].charCodeAt(0) !== 0xFFFD) { e[D[242][j]] = 61952 + j; d[61952 + j] = D[242][j];}\nD[243] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������蟆螈螅螭螗螃螫蟥螬螵螳蟋蟓螽蟑蟀蟊蟛蟪蟠蟮蠖蠓蟾蠊蠛蠡蠹蠼缶罂罄罅舐竺竽笈笃笄笕笊笫笏筇笸笪笙笮笱笠笥笤笳笾笞筘筚筅筵筌筝筠筮筻筢筲筱箐箦箧箸箬箝箨箅箪箜箢箫箴篑篁篌篝篚篥篦篪簌篾篼簏簖簋�\".split(\"\");\nfor(j = 0; j != D[243].length; ++j) if(D[243][j].charCodeAt(0) !== 0xFFFD) { e[D[243][j]] = 62208 + j; d[62208 + j] = D[243][j];}\nD[244] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������簟簪簦簸籁籀臾舁舂舄臬衄舡舢舣舭舯舨舫舸舻舳舴舾艄艉艋艏艚艟艨衾袅袈裘裟襞羝羟羧羯羰羲籼敉粑粝粜粞粢粲粼粽糁糇糌糍糈糅糗糨艮暨羿翎翕翥翡翦翩翮翳糸絷綦綮繇纛麸麴赳趄趔趑趱赧赭豇豉酊酐酎酏酤�\".split(\"\");\nfor(j = 0; j != D[244].length; ++j) if(D[244][j].charCodeAt(0) !== 0xFFFD) { e[D[244][j]] = 62464 + j; d[62464 + j] = D[244][j];}\nD[245] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������酢酡酰酩酯酽酾酲酴酹醌醅醐醍醑醢醣醪醭醮醯醵醴醺豕鹾趸跫踅蹙蹩趵趿趼趺跄跖跗跚跞跎跏跛跆跬跷跸跣跹跻跤踉跽踔踝踟踬踮踣踯踺蹀踹踵踽踱蹉蹁蹂蹑蹒蹊蹰蹶蹼蹯蹴躅躏躔躐躜躞豸貂貊貅貘貔斛觖觞觚觜�\".split(\"\");\nfor(j = 0; j != D[245].length; ++j) if(D[245][j].charCodeAt(0) !== 0xFFFD) { e[D[245][j]] = 62720 + j; d[62720 + j] = D[245][j];}\nD[246] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������觥觫觯訾謦靓雩雳雯霆霁霈霏霎霪霭霰霾龀龃龅龆龇龈龉龊龌黾鼋鼍隹隼隽雎雒瞿雠銎銮鋈錾鍪鏊鎏鐾鑫鱿鲂鲅鲆鲇鲈稣鲋鲎鲐鲑鲒鲔鲕鲚鲛鲞鲟鲠鲡鲢鲣鲥鲦鲧鲨鲩鲫鲭鲮鲰鲱鲲鲳鲴鲵鲶鲷鲺鲻鲼鲽鳄鳅鳆鳇鳊鳋�\".split(\"\");\nfor(j = 0; j != D[246].length; ++j) if(D[246][j].charCodeAt(0) !== 0xFFFD) { e[D[246][j]] = 62976 + j; d[62976 + j] = D[246][j];}\nD[247] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������鳌鳍鳎鳏鳐鳓鳔鳕鳗鳘鳙鳜鳝鳟鳢靼鞅鞑鞒鞔鞯鞫鞣鞲鞴骱骰骷鹘骶骺骼髁髀髅髂髋髌髑魅魃魇魉魈魍魑飨餍餮饕饔髟髡髦髯髫髻髭髹鬈鬏鬓鬟鬣麽麾縻麂麇麈麋麒鏖麝麟黛黜黝黠黟黢黩黧黥黪黯鼢鼬鼯鼹鼷鼽鼾齄�\".split(\"\");\nfor(j = 0; j != D[247].length; ++j) if(D[247][j].charCodeAt(0) !== 0xFFFD) { e[D[247][j]] = 63232 + j; d[63232 + j] = D[247][j];}\nreturn {\"enc\": e, \"dec\": d }; })();\ncptable[10029] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[10079] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüÝ°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[10081] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙ�ˆ˜¯˘˙˚¸˝˛ˇ\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\n// eslint-disable-next-line no-undef\nif (typeof module !== 'undefined' && module.exports && typeof DO_NOT_EXPORT_CODEPAGE === 'undefined') module.exports = cptable;\n/* cputils.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/* vim: set ft=javascript: */\n/*jshint newcap: false */\n(function(root, factory) {\n /*jshint ignore:start */\n /*eslint-disable */\n \"use strict\";\n if(typeof cptable === \"undefined\") {\n if(typeof require !== \"undefined\"){\n var cpt = cptable;\n if (typeof module !== 'undefined' && module.exports && typeof DO_NOT_EXPORT_CODEPAGE === 'undefined') module.exports = factory(cpt);\n else root.cptable = factory(cpt);\n } else throw new Error(\"cptable not found\");\n } else cptable = factory(cptable);\n /*eslint-enable */\n /*jshint ignore:end */\n}(this, function(cpt){\n \"use strict\";\n /*global module, Buffer */\n var magic = {\n \"1200\":\"utf16le\",\n \"1201\":\"utf16be\",\n \"12000\":\"utf32le\",\n \"12001\":\"utf32be\",\n \"16969\":\"utf64le\",\n \"20127\":\"ascii\",\n \"65000\":\"utf7\",\n \"65001\":\"utf8\"\n };\n\n var sbcs_cache = [874,1250,1251,1252,1253,1254,1255,1256,10000];\n var dbcs_cache = [932,936,949,950];\n var magic_cache = [65001];\n var magic_decode = {};\n var magic_encode = {};\n var cpdcache = {};\n var cpecache = {};\n\n var sfcc = function sfcc(x) { return String.fromCharCode(x); };\n var cca = function cca(x) { return x.charCodeAt(0); };\n\n var has_buf = (typeof Buffer !== 'undefined');\n var Buffer_from = function(){};\n if(has_buf) {\n var nbfs = !Buffer.from;\n if(!nbfs) try { Buffer.from(\"foo\", \"utf8\"); } catch(e) { nbfs = true; }\n Buffer_from = nbfs ? function(buf, enc) { return (enc) ? new Buffer(buf, enc) : new Buffer(buf); } : Buffer.from.bind(Buffer);\n // $FlowIgnore\n if(!Buffer.allocUnsafe) Buffer.allocUnsafe = function(n) { return new Buffer(n); };\n\n var mdl = 1024, mdb = Buffer.allocUnsafe(mdl);\n var make_EE = function make_EE(E){\n var EE = Buffer.allocUnsafe(65536);\n for(var i = 0; i < 65536;++i) EE[i] = 0;\n var keys = Object.keys(E), len = keys.length;\n for(var ee = 0, e = keys[ee]; ee < len; ++ee) {\n if(!(e = keys[ee])) continue;\n EE[e.charCodeAt(0)] = E[e];\n }\n return EE;\n };\n var sbcs_encode = function make_sbcs_encode(cp) {\n var EE = make_EE(cpt[cp].enc);\n return function sbcs_e(data, ofmt) {\n var len = data.length;\n var out, i=0, j=0, D=0, w=0;\n if(typeof data === 'string') {\n out = Buffer.allocUnsafe(len);\n for(i = 0; i < len; ++i) out[i] = EE[data.charCodeAt(i)];\n } else if(Buffer.isBuffer(data)) {\n out = Buffer.allocUnsafe(2*len);\n j = 0;\n for(i = 0; i < len; ++i) {\n D = data[i];\n if(D < 128) out[j++] = EE[D];\n else if(D < 224) { out[j++] = EE[((D&31)<<6)+(data[i+1]&63)]; ++i; }\n else if(D < 240) { out[j++] = EE[((D&15)<<12)+((data[i+1]&63)<<6)+(data[i+2]&63)]; i+=2; }\n else {\n w = ((D&7)<<18)+((data[i+1]&63)<<12)+((data[i+2]&63)<<6)+(data[i+3]&63); i+=3;\n if(w < 65536) out[j++] = EE[w];\n else { w -= 65536; out[j++] = EE[0xD800 + ((w>>10)&1023)]; out[j++] = EE[0xDC00 + (w&1023)]; }\n }\n }\n out = out.slice(0,j);\n } else {\n out = Buffer.allocUnsafe(len);\n for(i = 0; i < len; ++i) out[i] = EE[data[i].charCodeAt(0)];\n }\n if(!ofmt || ofmt === 'buf') return out;\n if(ofmt !== 'arr') return out.toString('binary');\n return [].slice.call(out);\n };\n };\n var sbcs_decode = function make_sbcs_decode(cp) {\n var D = cpt[cp].dec;\n var DD = Buffer.allocUnsafe(131072), d=0, c=\"\";\n for(d=0;d>8;\n }\n return function sbcs_d(data) {\n var len = data.length, i=0, j=0;\n if(2 * len > mdl) { mdl = 2 * len; mdb = Buffer.allocUnsafe(mdl); }\n if(Buffer.isBuffer(data)) {\n for(i = 0; i < len; i++) {\n j = 2*data[i];\n mdb[2*i] = DD[j]; mdb[2*i+1] = DD[j+1];\n }\n } else if(typeof data === \"string\") {\n for(i = 0; i < len; i++) {\n j = 2*data.charCodeAt(i);\n mdb[2*i] = DD[j]; mdb[2*i+1] = DD[j+1];\n }\n } else {\n for(i = 0; i < len; i++) {\n j = 2*data[i];\n mdb[2*i] = DD[j]; mdb[2*i+1] = DD[j+1];\n }\n }\n return mdb.slice(0, 2 * len).toString('ucs2');\n };\n };\n var dbcs_encode = function make_dbcs_encode(cp) {\n var E = cpt[cp].enc;\n var EE = Buffer.allocUnsafe(131072);\n for(var i = 0; i < 131072; ++i) EE[i] = 0;\n var keys = Object.keys(E);\n for(var ee = 0, e = keys[ee]; ee < keys.length; ++ee) {\n if(!(e = keys[ee])) continue;\n var f = e.charCodeAt(0);\n EE[2*f] = E[e] & 255; EE[2*f+1] = E[e]>>8;\n }\n return function dbcs_e(data, ofmt) {\n var len = data.length, out = Buffer.allocUnsafe(2*len), i=0, j=0, jj=0, k=0, D=0;\n if(typeof data === 'string') {\n for(i = k = 0; i < len; ++i) {\n j = data.charCodeAt(i)*2;\n out[k++] = EE[j+1] || EE[j]; if(EE[j+1] > 0) out[k++] = EE[j];\n }\n out = out.slice(0,k);\n } else if(Buffer.isBuffer(data)) {\n for(i = k = 0; i < len; ++i) {\n D = data[i];\n if(D < 128) j = D;\n else if(D < 224) { j = ((D&31)<<6)+(data[i+1]&63); ++i; }\n else if(D < 240) { j = ((D&15)<<12)+((data[i+1]&63)<<6)+(data[i+2]&63); i+=2; }\n else { j = ((D&7)<<18)+((data[i+1]&63)<<12)+((data[i+2]&63)<<6)+(data[i+3]&63); i+=3; }\n if(j<65536) { j*=2; out[k++] = EE[j+1] || EE[j]; if(EE[j+1] > 0) out[k++] = EE[j]; }\n else { jj = j-65536;\n j=2*(0xD800 + ((jj>>10)&1023)); out[k++] = EE[j+1] || EE[j]; if(EE[j+1] > 0) out[k++] = EE[j];\n j=2*(0xDC00 + (jj&1023)); out[k++] = EE[j+1] || EE[j]; if(EE[j+1] > 0) out[k++] = EE[j];\n }\n }\n out = out.slice(0,k);\n } else {\n for(i = k = 0; i < len; i++) {\n j = data[i].charCodeAt(0)*2;\n out[k++] = EE[j+1] || EE[j]; if(EE[j+1] > 0) out[k++] = EE[j];\n }\n }\n if(!ofmt || ofmt === 'buf') return out;\n if(ofmt !== 'arr') return out.toString('binary');\n return [].slice.call(out);\n };\n };\n var dbcs_decode = function make_dbcs_decode(cp) {\n var D = cpt[cp].dec;\n var DD = Buffer.allocUnsafe(131072), d=0, c, w=0, j=0, i=0;\n for(i = 0; i < 65536; ++i) { DD[2*i] = 0xFF; DD[2*i+1] = 0xFD;}\n for(d = 0; d < D.length; ++d) {\n if(!(c=D[d])) continue;\n w = c.charCodeAt(0);\n j = 2*d;\n DD[j] = w&255; DD[j+1] = w>>8;\n }\n return function dbcs_d(data) {\n var len = data.length, out = Buffer.allocUnsafe(2*len), i=0, j=0, k=0;\n if(Buffer.isBuffer(data)) {\n for(i = 0; i < len; i++) {\n j = 2*data[i];\n if(DD[j]===0xFF && DD[j+1]===0xFD) { j=2*((data[i]<<8)+data[i+1]); ++i; }\n out[k++] = DD[j]; out[k++] = DD[j+1];\n }\n } else if(typeof data === \"string\") {\n for(i = 0; i < len; i++) {\n j = 2*data.charCodeAt(i);\n if(DD[j]===0xFF && DD[j+1]===0xFD) { j=2*((data.charCodeAt(i)<<8)+data.charCodeAt(i+1)); ++i; }\n out[k++] = DD[j]; out[k++] = DD[j+1];\n }\n } else {\n for(i = 0; i < len; i++) {\n j = 2*data[i];\n if(DD[j]===0xFF && DD[j+1]===0xFD) { j=2*((data[i]<<8)+data[i+1]); ++i; }\n out[k++] = DD[j]; out[k++] = DD[j+1];\n }\n }\n return out.slice(0,k).toString('ucs2');\n };\n };\n magic_decode[65001] = function utf8_d(data) {\n if(typeof data === \"string\") return utf8_d(data.split(\"\").map(cca));\n var len = data.length, w = 0, ww = 0;\n if(4 * len > mdl) { mdl = 4 * len; mdb = Buffer.allocUnsafe(mdl); }\n var i = 0;\n if(len >= 3 && data[0] == 0xEF) if(data[1] == 0xBB && data[2] == 0xBF) i = 3;\n for(var j = 1, k = 0, D = 0; i < len; i+=j) {\n j = 1; D = data[i];\n if(D < 128) w = D;\n else if(D < 224) { w=(D&31)*64+(data[i+1]&63); j=2; }\n else if(D < 240) { w=((D&15)<<12)+(data[i+1]&63)*64+(data[i+2]&63); j=3; }\n else { w=(D&7)*262144+((data[i+1]&63)<<12)+(data[i+2]&63)*64+(data[i+3]&63); j=4; }\n if(w < 65536) { mdb[k++] = w&255; mdb[k++] = w>>8; }\n else {\n w -= 65536; ww = 0xD800 + ((w>>10)&1023); w = 0xDC00 + (w&1023);\n mdb[k++] = ww&255; mdb[k++] = ww>>>8; mdb[k++] = w&255; mdb[k++] = (w>>>8)&255;\n }\n }\n return mdb.slice(0,k).toString('ucs2');\n };\n magic_encode[65001] = function utf8_e(data, ofmt) {\n if(has_buf && Buffer.isBuffer(data)) {\n if(!ofmt || ofmt === 'buf') return data;\n if(ofmt !== 'arr') return data.toString('binary');\n return [].slice.call(data);\n }\n var len = data.length, w = 0, ww = 0, j = 0;\n var direct = typeof data === \"string\";\n if(4 * len > mdl) { mdl = 4 * len; mdb = Buffer.allocUnsafe(mdl); }\n for(var i = 0; i < len; ++i) {\n w = direct ? data.charCodeAt(i) : data[i].charCodeAt(0);\n if(w <= 0x007F) mdb[j++] = w;\n else if(w <= 0x07FF) {\n mdb[j++] = 192 + (w >> 6);\n mdb[j++] = 128 + (w&63);\n } else if(w >= 0xD800 && w <= 0xDFFF) {\n w -= 0xD800; ++i;\n ww = (direct ? data.charCodeAt(i) : data[i].charCodeAt(0)) - 0xDC00 + (w << 10);\n mdb[j++] = 240 + ((ww>>>18) & 0x07);\n mdb[j++] = 144 + ((ww>>>12) & 0x3F);\n mdb[j++] = 128 + ((ww>>>6) & 0x3F);\n mdb[j++] = 128 + (ww & 0x3F);\n } else {\n mdb[j++] = 224 + (w >> 12);\n mdb[j++] = 128 + ((w >> 6)&63);\n mdb[j++] = 128 + (w&63);\n }\n }\n if(!ofmt || ofmt === 'buf') return mdb.slice(0,j);\n if(ofmt !== 'arr') return mdb.slice(0,j).toString('binary');\n return [].slice.call(mdb, 0, j);\n };\n }\n\n var encache = function encache() {\n if(has_buf) {\n if(cpdcache[sbcs_cache[0]]) return;\n var i=0, s=0;\n for(i = 0; i < sbcs_cache.length; ++i) {\n s = sbcs_cache[i];\n if(cpt[s]) {\n cpdcache[s] = sbcs_decode(s);\n cpecache[s] = sbcs_encode(s);\n }\n }\n for(i = 0; i < dbcs_cache.length; ++i) {\n s = dbcs_cache[i];\n if(cpt[s]) {\n cpdcache[s] = dbcs_decode(s);\n cpecache[s] = dbcs_encode(s);\n }\n }\n for(i = 0; i < magic_cache.length; ++i) {\n s = magic_cache[i];\n if(magic_decode[s]) cpdcache[s] = magic_decode[s];\n if(magic_encode[s]) cpecache[s] = magic_encode[s];\n }\n }\n };\n var null_enc = function(data, ofmt) { void ofmt; return \"\"; };\n var cp_decache = function cp_decache(cp) { delete cpdcache[cp]; delete cpecache[cp]; };\n var decache = function decache() {\n if(has_buf) {\n if(!cpdcache[sbcs_cache[0]]) return;\n sbcs_cache.forEach(cp_decache);\n dbcs_cache.forEach(cp_decache);\n magic_cache.forEach(cp_decache);\n }\n last_enc = null_enc; last_cp = 0;\n };\n var cache = {\n encache: encache,\n decache: decache,\n sbcs: sbcs_cache,\n dbcs: dbcs_cache\n };\n\n encache();\n\n var BM = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n var SetD = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'(),-./:?\";\n var last_enc = null_enc, last_cp = 0;\n var encode = function encode(cp, data, ofmt) {\n if(cp === last_cp && last_enc) { return last_enc(data, ofmt); }\n if(cpecache[cp]) { last_enc = cpecache[last_cp=cp]; return last_enc(data, ofmt); }\n if(has_buf && Buffer.isBuffer(data)) data = data.toString('utf8');\n var len = data.length;\n var out = has_buf ? Buffer.allocUnsafe(4*len) : [], w=0, i=0, j = 0, ww=0;\n var C = cpt[cp], E, M = \"\";\n var isstr = typeof data === 'string';\n if(C && (E=C.enc)) for(i = 0; i < len; ++i, ++j) {\n w = E[isstr? data.charAt(i) : data[i]];\n if(w > 255) {\n out[j] = w>>8;\n out[++j] = w&255;\n } else out[j] = w&255;\n }\n else if((M=magic[cp])) switch(M) {\n case \"utf8\":\n if(has_buf && isstr) { out = Buffer_from(data, M); j = out.length; break; }\n for(i = 0; i < len; ++i, ++j) {\n w = isstr ? data.charCodeAt(i) : data[i].charCodeAt(0);\n if(w <= 0x007F) out[j] = w;\n else if(w <= 0x07FF) {\n out[j] = 192 + (w >> 6);\n out[++j] = 128 + (w&63);\n } else if(w >= 0xD800 && w <= 0xDFFF) {\n w -= 0xD800;\n ww = (isstr ? data.charCodeAt(++i) : data[++i].charCodeAt(0)) - 0xDC00 + (w << 10);\n out[j] = 240 + ((ww>>>18) & 0x07);\n out[++j] = 144 + ((ww>>>12) & 0x3F);\n out[++j] = 128 + ((ww>>>6) & 0x3F);\n out[++j] = 128 + (ww & 0x3F);\n } else {\n out[j] = 224 + (w >> 12);\n out[++j] = 128 + ((w >> 6)&63);\n out[++j] = 128 + (w&63);\n }\n }\n break;\n case \"ascii\":\n if(has_buf && typeof data === \"string\") { out = Buffer_from(data, M); j = out.length; break; }\n for(i = 0; i < len; ++i, ++j) {\n w = isstr ? data.charCodeAt(i) : data[i].charCodeAt(0);\n if(w <= 0x007F) out[j] = w;\n else throw new Error(\"bad ascii \" + w);\n }\n break;\n case \"utf16le\":\n if(has_buf && typeof data === \"string\") { out = Buffer_from(data, M); j = out.length; break; }\n for(i = 0; i < len; ++i) {\n w = isstr ? data.charCodeAt(i) : data[i].charCodeAt(0);\n out[j++] = w&255;\n out[j++] = w>>8;\n }\n break;\n case \"utf16be\":\n for(i = 0; i < len; ++i) {\n w = isstr ? data.charCodeAt(i) : data[i].charCodeAt(0);\n out[j++] = w>>8;\n out[j++] = w&255;\n }\n break;\n case \"utf32le\":\n for(i = 0; i < len; ++i) {\n w = isstr ? data.charCodeAt(i) : data[i].charCodeAt(0);\n if(w >= 0xD800 && w <= 0xDFFF) w = 0x10000 + ((w - 0xD800) << 10) + (data[++i].charCodeAt(0) - 0xDC00);\n out[j++] = w&255; w >>= 8;\n out[j++] = w&255; w >>= 8;\n out[j++] = w&255; w >>= 8;\n out[j++] = w&255;\n }\n break;\n case \"utf32be\":\n for(i = 0; i < len; ++i) {\n w = isstr ? data.charCodeAt(i) : data[i].charCodeAt(0);\n if(w >= 0xD800 && w <= 0xDFFF) w = 0x10000 + ((w - 0xD800) << 10) + (data[++i].charCodeAt(0) - 0xDC00);\n out[j+3] = w&255; w >>= 8;\n out[j+2] = w&255; w >>= 8;\n out[j+1] = w&255; w >>= 8;\n out[j] = w&255;\n j+=4;\n }\n break;\n case \"utf7\":\n for(i = 0; i < len; i++) {\n var c = isstr ? data.charAt(i) : data[i].charAt(0);\n if(c === \"+\") { out[j++] = 0x2b; out[j++] = 0x2d; continue; }\n if(SetD.indexOf(c) > -1) { out[j++] = c.charCodeAt(0); continue; }\n var tt = encode(1201, c);\n out[j++] = 0x2b;\n out[j++] = BM.charCodeAt(tt[0]>>2);\n out[j++] = BM.charCodeAt(((tt[0]&0x03)<<4) + ((tt[1]||0)>>4));\n out[j++] = BM.charCodeAt(((tt[1]&0x0F)<<2) + ((tt[2]||0)>>6));\n out[j++] = 0x2d;\n }\n break;\n default: throw new Error(\"Unsupported magic: \" + cp + \" \" + magic[cp]);\n }\n else throw new Error(\"Unrecognized CP: \" + cp);\n out = out.slice(0,j);\n if(!has_buf) return (ofmt == 'str') ? (out).map(sfcc).join(\"\") : out;\n if(!ofmt || ofmt === 'buf') return out;\n if(ofmt !== 'arr') return out.toString('binary');\n return [].slice.call(out);\n };\n var decode = function decode(cp, data) {\n var F; if((F=cpdcache[cp])) return F(data);\n if(typeof data === \"string\") return decode(cp, data.split(\"\").map(cca));\n var len = data.length, out = new Array(len), s=\"\", w=0, i=0, j=1, k=0, ww=0;\n var C = cpt[cp], D, M=\"\";\n if(C && (D=C.dec)) {\n for(i = 0; i < len; i+=j) {\n j = 2;\n s = D[(data[i]<<8)+ data[i+1]];\n if(!s) {\n j = 1;\n s = D[data[i]];\n }\n if(!s) throw new Error('Unrecognized code: ' + data[i] + ' ' + data[i+j-1] + ' ' + i + ' ' + j + ' ' + D[data[i]]);\n out[k++] = s;\n }\n }\n else if((M=magic[cp])) switch(M) {\n case \"utf8\":\n if(len >= 3 && data[0] == 0xEF) if(data[1] == 0xBB && data[2] == 0xBF) i = 3;\n for(; i < len; i+=j) {\n j = 1;\n if(data[i] < 128) w = data[i];\n else if(data[i] < 224) { w=(data[i]&31)*64+(data[i+1]&63); j=2; }\n else if(data[i] < 240) { w=((data[i]&15)<<12)+(data[i+1]&63)*64+(data[i+2]&63); j=3; }\n else { w=(data[i]&7)*262144+((data[i+1]&63)<<12)+(data[i+2]&63)*64+(data[i+3]&63); j=4; }\n if(w < 65536) { out[k++] = String.fromCharCode(w); }\n else {\n w -= 65536; ww = 0xD800 + ((w>>10)&1023); w = 0xDC00 + (w&1023);\n out[k++] = String.fromCharCode(ww); out[k++] = String.fromCharCode(w);\n }\n }\n break;\n case \"ascii\":\n if(has_buf && Buffer.isBuffer(data)) return data.toString(M);\n for(i = 0; i < len; i++) out[i] = String.fromCharCode(data[i]);\n k = len; break;\n case \"utf16le\":\n if(len >= 2 && data[0] == 0xFF) if(data[1] == 0xFE) i = 2;\n if(has_buf && Buffer.isBuffer(data)) return data.toString(M);\n j = 2;\n for(; i+1 < len; i+=j) {\n out[k++] = String.fromCharCode((data[i+1]<<8) + data[i]);\n }\n break;\n case \"utf16be\":\n if(len >= 2 && data[0] == 0xFE) if(data[1] == 0xFF) i = 2;\n j = 2;\n for(; i+1 < len; i+=j) {\n out[k++] = String.fromCharCode((data[i]<<8) + data[i+1]);\n }\n break;\n case \"utf32le\":\n if(len >= 4 && data[0] == 0xFF) if(data[1] == 0xFE && data[2] === 0 && data[3] === 0) i = 4;\n j = 4;\n for(; i < len; i+=j) {\n w = (data[i+3]<<24) + (data[i+2]<<16) + (data[i+1]<<8) + (data[i]);\n if(w > 0xFFFF) {\n w -= 0x10000;\n out[k++] = String.fromCharCode(0xD800 + ((w >> 10) & 0x3FF));\n out[k++] = String.fromCharCode(0xDC00 + (w & 0x3FF));\n }\n else out[k++] = String.fromCharCode(w);\n }\n break;\n case \"utf32be\":\n if(len >= 4 && data[3] == 0xFF) if(data[2] == 0xFE && data[1] === 0 && data[0] === 0) i = 4;\n j = 4;\n for(; i < len; i+=j) {\n w = (data[i]<<24) + (data[i+1]<<16) + (data[i+2]<<8) + (data[i+3]);\n if(w > 0xFFFF) {\n w -= 0x10000;\n out[k++] = String.fromCharCode(0xD800 + ((w >> 10) & 0x3FF));\n out[k++] = String.fromCharCode(0xDC00 + (w & 0x3FF));\n }\n else out[k++] = String.fromCharCode(w);\n }\n break;\n case \"utf7\":\n if(len >= 4 && data[0] == 0x2B && data[1] == 0x2F && data[2] == 0x76) {\n if(len >= 5 && data[3] == 0x38 && data[4] == 0x2D) i = 5;\n else if(data[3] == 0x38 || data[3] == 0x39 || data[3] == 0x2B || data[3] == 0x2F) i = 4;\n }\n for(; i < len; i+=j) {\n if(data[i] !== 0x2b) { j=1; out[k++] = String.fromCharCode(data[i]); continue; }\n j=1;\n if(data[i+1] === 0x2d) { j = 2; out[k++] = \"+\"; continue; }\n // eslint-disable-next-line no-useless-escape\n while(String.fromCharCode(data[i+j]).match(/[A-Za-z0-9+\\/]/)) j++;\n var dash = 0;\n if(data[i+j] === 0x2d) { ++j; dash=1; }\n var tt = [];\n var o64 = \"\";\n var c1=0, c2=0, c3=0;\n var e1=0, e2=0, e3=0, e4=0;\n for(var l = 1; l < j - dash;) {\n e1 = BM.indexOf(String.fromCharCode(data[i+l++]));\n e2 = BM.indexOf(String.fromCharCode(data[i+l++]));\n c1 = e1 << 2 | e2 >> 4;\n tt.push(c1);\n e3 = BM.indexOf(String.fromCharCode(data[i+l++]));\n if(e3 === -1) break;\n c2 = (e2 & 15) << 4 | e3 >> 2;\n tt.push(c2);\n e4 = BM.indexOf(String.fromCharCode(data[i+l++]));\n if(e4 === -1) break;\n c3 = (e3 & 3) << 6 | e4;\n if(e4 < 64) tt.push(c3);\n }\n o64 = decode(1201, tt);\n for(l = 0; l < o64.length; ++l) out[k++] = o64.charAt(l);\n }\n break;\n default: throw new Error(\"Unsupported magic: \" + cp + \" \" + magic[cp]);\n }\n else throw new Error(\"Unrecognized CP: \" + cp);\n return out.slice(0,k).join(\"\");\n };\n var hascp = function hascp(cp) { return !!(cpt[cp] || magic[cp]); };\n cpt.utils = { decode: decode, encode: encode, hascp: hascp, magic: magic, cache:cache };\n return cpt;\n}));\n","var anObject = require('../internals/an-object');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar toLength = require('../internals/to-length');\nvar bind = require('../internals/function-bind-context');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing');\n\nvar Result = function (stopped, result) {\n this.stopped = stopped;\n this.result = result;\n};\n\nvar iterate = module.exports = function (iterable, fn, that, AS_ENTRIES, IS_ITERATOR) {\n var boundFunction = bind(fn, that, AS_ENTRIES ? 2 : 1);\n var iterator, iterFn, index, length, result, next, step;\n\n if (IS_ITERATOR) {\n iterator = iterable;\n } else {\n iterFn = getIteratorMethod(iterable);\n if (typeof iterFn != 'function') throw TypeError('Target is not iterable');\n // optimisation for array iterators\n if (isArrayIteratorMethod(iterFn)) {\n for (index = 0, length = toLength(iterable.length); length > index; index++) {\n result = AS_ENTRIES\n ? boundFunction(anObject(step = iterable[index])[0], step[1])\n : boundFunction(iterable[index]);\n if (result && result instanceof Result) return result;\n } return new Result(false);\n }\n iterator = iterFn.call(iterable);\n }\n\n next = iterator.next;\n while (!(step = next.call(iterator)).done) {\n result = callWithSafeIterationClosing(iterator, boundFunction, step.value, AS_ENTRIES);\n if (typeof result == 'object' && result && result instanceof Result) return result;\n } return new Result(false);\n};\n\niterate.stop = function (result) {\n return new Result(true, result);\n};\n","var toInteger = require('../internals/to-integer');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toInteger(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar setGlobal = require('../internals/set-global');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.noTargetGet - prevent calling a getter on target\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = global;\n } else if (STATIC) {\n target = global[TARGET] || setGlobal(TARGET, {});\n } else {\n target = (global[TARGET] || {}).prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.noTargetGet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty === typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n // extend global\n redefine(target, key, sourceProperty, options);\n }\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.github.io/ecma262/#sec-object.getownpropertynames\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n","var MILLISECONDS_IN_MINUTE = 60000;\n\nfunction getDateMillisecondsPart(date) {\n return date.getTime() % MILLISECONDS_IN_MINUTE;\n}\n/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\n\n\nexport default function getTimezoneOffsetInMilliseconds(dirtyDate) {\n var date = new Date(dirtyDate.getTime());\n var baseTimezoneOffset = Math.ceil(date.getTimezoneOffset());\n date.setSeconds(0, 0);\n var hasNegativeUTCOffset = baseTimezoneOffset > 0;\n var millisecondsPartOfTimezoneOffset = hasNegativeUTCOffset ? (MILLISECONDS_IN_MINUTE + getDateMillisecondsPart(date)) % MILLISECONDS_IN_MINUTE : getDateMillisecondsPart(date);\n return baseTimezoneOffset * MILLISECONDS_IN_MINUTE + millisecondsPartOfTimezoneOffset;\n}","'use strict';\n\nvar utils = require('./utils');\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('./adapters/xhr');\n } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = require('./adapters/http');\n }\n return adapter;\n}\n\nvar defaults = {\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n if (utils.isObject(data)) {\n setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n /*eslint no-param-reassign:0*/\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (e) { /* Ignore */ }\n }\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\n\ndefaults.headers = {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","// Helpers\nimport { convertToUnit } from '../../util/helpers'\n\n// Types\nimport Vue, { PropType } from 'vue'\n\nexport type NumberOrNumberString = PropType\n\nexport default Vue.extend({\n name: 'measurable',\n\n props: {\n height: [Number, String] as NumberOrNumberString,\n maxHeight: [Number, String] as NumberOrNumberString,\n maxWidth: [Number, String] as NumberOrNumberString,\n minHeight: [Number, String] as NumberOrNumberString,\n minWidth: [Number, String] as NumberOrNumberString,\n width: [Number, String] as NumberOrNumberString,\n },\n\n computed: {\n measurableStyles (): object {\n const styles: Record = {}\n\n const height = convertToUnit(this.height)\n const minHeight = convertToUnit(this.minHeight)\n const minWidth = convertToUnit(this.minWidth)\n const maxHeight = convertToUnit(this.maxHeight)\n const maxWidth = convertToUnit(this.maxWidth)\n const width = convertToUnit(this.width)\n\n if (height) styles.height = height\n if (minHeight) styles.minHeight = minHeight\n if (minWidth) styles.minWidth = minWidth\n if (maxHeight) styles.maxHeight = maxHeight\n if (maxWidth) styles.maxWidth = maxWidth\n if (width) styles.width = width\n\n return styles\n },\n },\n})\n","'use strict';\nvar $ = require('../internals/export');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\n\n// `String.prototype.includes` method\n// https://tc39.github.io/ecma262/#sec-string.prototype.includes\n$({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~String(requireObjectCoercible(this))\n .indexOf(notARegExp(searchString), arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $reduceRight = require('../internals/array-reduce').right;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.reduceRicht` method\n// https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.reduceright\nexportTypedArrayMethod('reduceRight', function reduceRight(callbackfn /* , initialValue */) {\n return $reduceRight(aTypedArray(this), callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar redefine = require('../internals/redefine');\nvar anObject = require('../internals/an-object');\nvar fails = require('../internals/fails');\nvar flags = require('../internals/regexp-flags');\n\nvar TO_STRING = 'toString';\nvar RegExpPrototype = RegExp.prototype;\nvar nativeToString = RegExpPrototype[TO_STRING];\n\nvar NOT_GENERIC = fails(function () { return nativeToString.call({ source: 'a', flags: 'b' }) != '/a/b'; });\n// FF44- RegExp#toString has a wrong name\nvar INCORRECT_NAME = nativeToString.name != TO_STRING;\n\n// `RegExp.prototype.toString` method\n// https://tc39.github.io/ecma262/#sec-regexp.prototype.tostring\nif (NOT_GENERIC || INCORRECT_NAME) {\n redefine(RegExp.prototype, TO_STRING, function toString() {\n var R = anObject(this);\n var p = String(R.source);\n var rf = R.flags;\n var f = String(rf === undefined && R instanceof RegExp && !('flags' in RegExpPrototype) ? flags.call(R) : rf);\n return '/' + p + '/' + f;\n }, { unsafe: true });\n}\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar definePropertyModule = require('../internals/object-define-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n var defineProperty = definePropertyModule.f;\n\n if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n defineProperty(Constructor, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n }\n};\n","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf\";\nexport default function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) setPrototypeOf(subClass, superClass);\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\nexport default function normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\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 = 'data-v-' + 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 () {\n injectStyles.call(\n this,\n (options.functional ? this.parent : this).$root.$options.shadowRoot\n )\n }\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 functional 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","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar speciesConstructor = require('../internals/species-constructor');\nvar fails = require('../internals/fails');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar $slice = [].slice;\n\nvar FORCED = fails(function () {\n // eslint-disable-next-line no-undef\n new Int8Array(1).slice();\n});\n\n// `%TypedArray%.prototype.slice` method\n// https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.slice\nexportTypedArrayMethod('slice', function slice(start, end) {\n var list = $slice.call(aTypedArray(this), start, end);\n var C = speciesConstructor(this, this.constructor);\n var index = 0;\n var length = list.length;\n var result = new (aTypedArrayConstructor(C))(length);\n while (length > index) result[index] = list[index++];\n return result;\n}, FORCED);\n","import './VProgressLinear.sass'\n\n// Components\nimport {\n VFadeTransition,\n VSlideXTransition,\n} from '../transitions'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport { factory as PositionableFactory } from '../../mixins/positionable'\nimport Proxyable from '../../mixins/proxyable'\nimport Themeable from '../../mixins/themeable'\n\n// Utilities\nimport { convertToUnit, getSlot } from '../../util/helpers'\nimport mixins from '../../util/mixins'\n\n// Types\nimport { FunctionalComponentOptions } from 'vue/types'\nimport { VNode } from 'vue'\n\nconst baseMixins = mixins(\n Colorable,\n PositionableFactory(['absolute', 'fixed', 'top', 'bottom']),\n Proxyable,\n Themeable\n)\n\n/* @vue/component */\nexport default baseMixins.extend({\n name: 'v-progress-linear',\n\n props: {\n active: {\n type: Boolean,\n default: true,\n },\n backgroundColor: {\n type: String,\n default: null,\n },\n backgroundOpacity: {\n type: [Number, String],\n default: null,\n },\n bufferValue: {\n type: [Number, String],\n default: 100,\n },\n color: {\n type: String,\n default: 'primary',\n },\n height: {\n type: [Number, String],\n default: 4,\n },\n indeterminate: Boolean,\n query: Boolean,\n reverse: Boolean,\n rounded: Boolean,\n stream: Boolean,\n striped: Boolean,\n value: {\n type: [Number, String],\n default: 0,\n },\n },\n\n data () {\n return {\n internalLazyValue: this.value || 0,\n }\n },\n\n computed: {\n __cachedBackground (): VNode {\n return this.$createElement('div', this.setBackgroundColor(this.backgroundColor || this.color, {\n staticClass: 'v-progress-linear__background',\n style: this.backgroundStyle,\n }))\n },\n __cachedBar (): VNode {\n return this.$createElement(this.computedTransition, [this.__cachedBarType])\n },\n __cachedBarType (): VNode {\n return this.indeterminate ? this.__cachedIndeterminate : this.__cachedDeterminate\n },\n __cachedBuffer (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-progress-linear__buffer',\n style: this.styles,\n })\n },\n __cachedDeterminate (): VNode {\n return this.$createElement('div', this.setBackgroundColor(this.color, {\n staticClass: `v-progress-linear__determinate`,\n style: {\n width: convertToUnit(this.normalizedValue, '%'),\n },\n }))\n },\n __cachedIndeterminate (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-progress-linear__indeterminate',\n class: {\n 'v-progress-linear__indeterminate--active': this.active,\n },\n }, [\n this.genProgressBar('long'),\n this.genProgressBar('short'),\n ])\n },\n __cachedStream (): VNode | null {\n if (!this.stream) return null\n\n return this.$createElement('div', this.setTextColor(this.color, {\n staticClass: 'v-progress-linear__stream',\n style: {\n width: convertToUnit(100 - this.normalizedBuffer, '%'),\n },\n }))\n },\n backgroundStyle (): object {\n const backgroundOpacity = this.backgroundOpacity == null\n ? (this.backgroundColor ? 1 : 0.3)\n : parseFloat(this.backgroundOpacity)\n\n return {\n opacity: backgroundOpacity,\n [this.isReversed ? 'right' : 'left']: convertToUnit(this.normalizedValue, '%'),\n width: convertToUnit(this.normalizedBuffer - this.normalizedValue, '%'),\n }\n },\n classes (): object {\n return {\n 'v-progress-linear--absolute': this.absolute,\n 'v-progress-linear--fixed': this.fixed,\n 'v-progress-linear--query': this.query,\n 'v-progress-linear--reactive': this.reactive,\n 'v-progress-linear--reverse': this.isReversed,\n 'v-progress-linear--rounded': this.rounded,\n 'v-progress-linear--striped': this.striped,\n ...this.themeClasses,\n }\n },\n computedTransition (): FunctionalComponentOptions {\n return this.indeterminate ? VFadeTransition : VSlideXTransition\n },\n isReversed (): boolean {\n return this.$vuetify.rtl !== this.reverse\n },\n normalizedBuffer (): number {\n return this.normalize(this.bufferValue)\n },\n normalizedValue (): number {\n return this.normalize(this.internalLazyValue)\n },\n reactive (): boolean {\n return Boolean(this.$listeners.change)\n },\n styles (): object {\n const styles: Record = {}\n\n if (!this.active) {\n styles.height = 0\n }\n\n if (!this.indeterminate && parseFloat(this.normalizedBuffer) !== 100) {\n styles.width = convertToUnit(this.normalizedBuffer, '%')\n }\n\n return styles\n },\n },\n\n methods: {\n genContent () {\n const slot = getSlot(this, 'default', { value: this.internalLazyValue })\n\n if (!slot) return null\n\n return this.$createElement('div', {\n staticClass: 'v-progress-linear__content',\n }, slot)\n },\n genListeners () {\n const listeners = this.$listeners\n\n if (this.reactive) {\n listeners.click = this.onClick\n }\n\n return listeners\n },\n genProgressBar (name: 'long' | 'short') {\n return this.$createElement('div', this.setBackgroundColor(this.color, {\n staticClass: 'v-progress-linear__indeterminate',\n class: {\n [name]: true,\n },\n }))\n },\n onClick (e: MouseEvent) {\n if (!this.reactive) return\n\n const { width } = this.$el.getBoundingClientRect()\n\n this.internalValue = e.offsetX / width * 100\n },\n normalize (value: string | number) {\n if (value < 0) return 0\n if (value > 100) return 100\n return parseFloat(value)\n },\n },\n\n render (h): VNode {\n const data = {\n staticClass: 'v-progress-linear',\n attrs: {\n role: 'progressbar',\n 'aria-valuemin': 0,\n 'aria-valuemax': this.normalizedBuffer,\n 'aria-valuenow': this.indeterminate ? undefined : this.normalizedValue,\n },\n class: this.classes,\n style: {\n bottom: this.bottom ? 0 : undefined,\n height: this.active ? convertToUnit(this.height) : 0,\n top: this.top ? 0 : undefined,\n },\n on: this.genListeners(),\n }\n\n return h('div', data, [\n this.__cachedStream,\n this.__cachedBackground,\n this.__cachedBuffer,\n this.__cachedBar,\n this.genContent(),\n ])\n },\n})\n","import VProgressLinear from './VProgressLinear'\n\nexport { VProgressLinear }\nexport default VProgressLinear\n","import Vue, { VNode } from 'vue'\nimport VProgressLinear from '../../components/VProgressLinear'\n\ninterface colorable extends Vue {\n color?: string\n}\n\n/**\n * Loadable\n *\n * @mixin\n *\n * Used to add linear progress bar to components\n * Can use a default bar with a specific color\n * or designate a custom progress linear bar\n */\n/* @vue/component */\nexport default Vue.extend().extend({\n name: 'loadable',\n\n props: {\n loading: {\n type: [Boolean, String],\n default: false,\n },\n loaderHeight: {\n type: [Number, String],\n default: 2,\n },\n },\n\n methods: {\n genProgress (): VNode | VNode[] | null {\n if (this.loading === false) return null\n\n return this.$slots.progress || this.$createElement(VProgressLinear, {\n props: {\n absolute: true,\n color: (this.loading === true || this.loading === '')\n ? (this.color || 'primary')\n : this.loading,\n height: this.loaderHeight,\n indeterminate: true,\n },\n })\n },\n },\n})\n","/*!\n * Vue.js v2.6.12\n * (c) 2014-2020 Evan You\n * Released under the MIT License.\n */\n/* */\n\nvar emptyObject = Object.freeze({});\n\n// These helpers produce better VM code in JS engines due to their\n// explicitness and function inlining.\nfunction isUndef (v) {\n return v === undefined || v === null\n}\n\nfunction isDef (v) {\n return v !== undefined && v !== null\n}\n\nfunction isTrue (v) {\n return v === true\n}\n\nfunction isFalse (v) {\n return v === false\n}\n\n/**\n * Check if value is primitive.\n */\nfunction isPrimitive (value) {\n return (\n typeof value === 'string' ||\n typeof value === 'number' ||\n // $flow-disable-line\n typeof value === 'symbol' ||\n typeof value === 'boolean'\n )\n}\n\n/**\n * Quick object check - this is primarily used to tell\n * Objects from primitive values when we know the value\n * is a JSON-compliant type.\n */\nfunction isObject (obj) {\n return obj !== null && typeof obj === 'object'\n}\n\n/**\n * Get the raw type string of a value, e.g., [object Object].\n */\nvar _toString = Object.prototype.toString;\n\nfunction toRawType (value) {\n return _toString.call(value).slice(8, -1)\n}\n\n/**\n * Strict object type check. Only returns true\n * for plain JavaScript objects.\n */\nfunction isPlainObject (obj) {\n return _toString.call(obj) === '[object Object]'\n}\n\nfunction isRegExp (v) {\n return _toString.call(v) === '[object RegExp]'\n}\n\n/**\n * Check if val is a valid array index.\n */\nfunction isValidArrayIndex (val) {\n var n = parseFloat(String(val));\n return n >= 0 && Math.floor(n) === n && isFinite(val)\n}\n\nfunction isPromise (val) {\n return (\n isDef(val) &&\n typeof val.then === 'function' &&\n typeof val.catch === 'function'\n )\n}\n\n/**\n * Convert a value to a string that is actually rendered.\n */\nfunction toString (val) {\n return val == null\n ? ''\n : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)\n ? JSON.stringify(val, null, 2)\n : String(val)\n}\n\n/**\n * Convert an input value to a number for persistence.\n * If the conversion fails, return original string.\n */\nfunction toNumber (val) {\n var n = parseFloat(val);\n return isNaN(n) ? val : n\n}\n\n/**\n * Make a map and return a function for checking if a key\n * is in that map.\n */\nfunction makeMap (\n str,\n expectsLowerCase\n) {\n var map = Object.create(null);\n var list = str.split(',');\n for (var i = 0; i < list.length; i++) {\n map[list[i]] = true;\n }\n return expectsLowerCase\n ? function (val) { return map[val.toLowerCase()]; }\n : function (val) { return map[val]; }\n}\n\n/**\n * Check if a tag is a built-in tag.\n */\nvar isBuiltInTag = makeMap('slot,component', true);\n\n/**\n * Check if an attribute is a reserved attribute.\n */\nvar isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');\n\n/**\n * Remove an item from an array.\n */\nfunction remove (arr, item) {\n if (arr.length) {\n var index = arr.indexOf(item);\n if (index > -1) {\n return arr.splice(index, 1)\n }\n }\n}\n\n/**\n * Check whether an object has the property.\n */\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction hasOwn (obj, key) {\n return hasOwnProperty.call(obj, key)\n}\n\n/**\n * Create a cached version of a pure function.\n */\nfunction cached (fn) {\n var cache = Object.create(null);\n return (function cachedFn (str) {\n var hit = cache[str];\n return hit || (cache[str] = fn(str))\n })\n}\n\n/**\n * Camelize a hyphen-delimited string.\n */\nvar camelizeRE = /-(\\w)/g;\nvar camelize = cached(function (str) {\n return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })\n});\n\n/**\n * Capitalize a string.\n */\nvar capitalize = cached(function (str) {\n return str.charAt(0).toUpperCase() + str.slice(1)\n});\n\n/**\n * Hyphenate a camelCase string.\n */\nvar hyphenateRE = /\\B([A-Z])/g;\nvar hyphenate = cached(function (str) {\n return str.replace(hyphenateRE, '-$1').toLowerCase()\n});\n\n/**\n * Simple bind polyfill for environments that do not support it,\n * e.g., PhantomJS 1.x. Technically, we don't need this anymore\n * since native bind is now performant enough in most browsers.\n * But removing it would mean breaking code that was able to run in\n * PhantomJS 1.x, so this must be kept for backward compatibility.\n */\n\n/* istanbul ignore next */\nfunction polyfillBind (fn, ctx) {\n function boundFn (a) {\n var l = arguments.length;\n return l\n ? l > 1\n ? fn.apply(ctx, arguments)\n : fn.call(ctx, a)\n : fn.call(ctx)\n }\n\n boundFn._length = fn.length;\n return boundFn\n}\n\nfunction nativeBind (fn, ctx) {\n return fn.bind(ctx)\n}\n\nvar bind = Function.prototype.bind\n ? nativeBind\n : polyfillBind;\n\n/**\n * Convert an Array-like object to a real Array.\n */\nfunction toArray (list, start) {\n start = start || 0;\n var i = list.length - start;\n var ret = new Array(i);\n while (i--) {\n ret[i] = list[i + start];\n }\n return ret\n}\n\n/**\n * Mix properties into target object.\n */\nfunction extend (to, _from) {\n for (var key in _from) {\n to[key] = _from[key];\n }\n return to\n}\n\n/**\n * Merge an Array of Objects into a single Object.\n */\nfunction toObject (arr) {\n var res = {};\n for (var i = 0; i < arr.length; i++) {\n if (arr[i]) {\n extend(res, arr[i]);\n }\n }\n return res\n}\n\n/* eslint-disable no-unused-vars */\n\n/**\n * Perform no operation.\n * Stubbing args to make Flow happy without leaving useless transpiled code\n * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).\n */\nfunction noop (a, b, c) {}\n\n/**\n * Always return false.\n */\nvar no = function (a, b, c) { return false; };\n\n/* eslint-enable no-unused-vars */\n\n/**\n * Return the same value.\n */\nvar identity = function (_) { return _; };\n\n/**\n * Check if two values are loosely equal - that is,\n * if they are plain objects, do they have the same shape?\n */\nfunction looseEqual (a, b) {\n if (a === b) { return true }\n var isObjectA = isObject(a);\n var isObjectB = isObject(b);\n if (isObjectA && isObjectB) {\n try {\n var isArrayA = Array.isArray(a);\n var isArrayB = Array.isArray(b);\n if (isArrayA && isArrayB) {\n return a.length === b.length && a.every(function (e, i) {\n return looseEqual(e, b[i])\n })\n } else if (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime()\n } else if (!isArrayA && !isArrayB) {\n var keysA = Object.keys(a);\n var keysB = Object.keys(b);\n return keysA.length === keysB.length && keysA.every(function (key) {\n return looseEqual(a[key], b[key])\n })\n } else {\n /* istanbul ignore next */\n return false\n }\n } catch (e) {\n /* istanbul ignore next */\n return false\n }\n } else if (!isObjectA && !isObjectB) {\n return String(a) === String(b)\n } else {\n return false\n }\n}\n\n/**\n * Return the first index at which a loosely equal value can be\n * found in the array (if value is a plain object, the array must\n * contain an object of the same shape), or -1 if it is not present.\n */\nfunction looseIndexOf (arr, val) {\n for (var i = 0; i < arr.length; i++) {\n if (looseEqual(arr[i], val)) { return i }\n }\n return -1\n}\n\n/**\n * Ensure a function is called only once.\n */\nfunction once (fn) {\n var called = false;\n return function () {\n if (!called) {\n called = true;\n fn.apply(this, arguments);\n }\n }\n}\n\nvar SSR_ATTR = 'data-server-rendered';\n\nvar ASSET_TYPES = [\n 'component',\n 'directive',\n 'filter'\n];\n\nvar LIFECYCLE_HOOKS = [\n 'beforeCreate',\n 'created',\n 'beforeMount',\n 'mounted',\n 'beforeUpdate',\n 'updated',\n 'beforeDestroy',\n 'destroyed',\n 'activated',\n 'deactivated',\n 'errorCaptured',\n 'serverPrefetch'\n];\n\n/* */\n\n\n\nvar config = ({\n /**\n * Option merge strategies (used in core/util/options)\n */\n // $flow-disable-line\n optionMergeStrategies: Object.create(null),\n\n /**\n * Whether to suppress warnings.\n */\n silent: false,\n\n /**\n * Show production mode tip message on boot?\n */\n productionTip: process.env.NODE_ENV !== 'production',\n\n /**\n * Whether to enable devtools\n */\n devtools: process.env.NODE_ENV !== 'production',\n\n /**\n * Whether to record perf\n */\n performance: false,\n\n /**\n * Error handler for watcher errors\n */\n errorHandler: null,\n\n /**\n * Warn handler for watcher warns\n */\n warnHandler: null,\n\n /**\n * Ignore certain custom elements\n */\n ignoredElements: [],\n\n /**\n * Custom user key aliases for v-on\n */\n // $flow-disable-line\n keyCodes: Object.create(null),\n\n /**\n * Check if a tag is reserved so that it cannot be registered as a\n * component. This is platform-dependent and may be overwritten.\n */\n isReservedTag: no,\n\n /**\n * Check if an attribute is reserved so that it cannot be used as a component\n * prop. This is platform-dependent and may be overwritten.\n */\n isReservedAttr: no,\n\n /**\n * Check if a tag is an unknown element.\n * Platform-dependent.\n */\n isUnknownElement: no,\n\n /**\n * Get the namespace of an element\n */\n getTagNamespace: noop,\n\n /**\n * Parse the real tag name for the specific platform.\n */\n parsePlatformTagName: identity,\n\n /**\n * Check if an attribute must be bound using property, e.g. value\n * Platform-dependent.\n */\n mustUseProp: no,\n\n /**\n * Perform updates asynchronously. Intended to be used by Vue Test Utils\n * This will significantly reduce performance if set to false.\n */\n async: true,\n\n /**\n * Exposed for legacy reasons\n */\n _lifecycleHooks: LIFECYCLE_HOOKS\n});\n\n/* */\n\n/**\n * unicode letters used for parsing html tags, component names and property paths.\n * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname\n * skipping \\u10000-\\uEFFFF due to it freezing up PhantomJS\n */\nvar unicodeRegExp = /a-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD/;\n\n/**\n * Check if a string starts with $ or _\n */\nfunction isReserved (str) {\n var c = (str + '').charCodeAt(0);\n return c === 0x24 || c === 0x5F\n}\n\n/**\n * Define a property.\n */\nfunction def (obj, key, val, enumerable) {\n Object.defineProperty(obj, key, {\n value: val,\n enumerable: !!enumerable,\n writable: true,\n configurable: true\n });\n}\n\n/**\n * Parse simple path.\n */\nvar bailRE = new RegExp((\"[^\" + (unicodeRegExp.source) + \".$_\\\\d]\"));\nfunction parsePath (path) {\n if (bailRE.test(path)) {\n return\n }\n var segments = path.split('.');\n return function (obj) {\n for (var i = 0; i < segments.length; i++) {\n if (!obj) { return }\n obj = obj[segments[i]];\n }\n return obj\n }\n}\n\n/* */\n\n// can we use __proto__?\nvar hasProto = '__proto__' in {};\n\n// Browser environment sniffing\nvar inBrowser = typeof window !== 'undefined';\nvar inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform;\nvar weexPlatform = inWeex && WXEnvironment.platform.toLowerCase();\nvar UA = inBrowser && window.navigator.userAgent.toLowerCase();\nvar isIE = UA && /msie|trident/.test(UA);\nvar isIE9 = UA && UA.indexOf('msie 9.0') > 0;\nvar isEdge = UA && UA.indexOf('edge/') > 0;\nvar isAndroid = (UA && UA.indexOf('android') > 0) || (weexPlatform === 'android');\nvar isIOS = (UA && /iphone|ipad|ipod|ios/.test(UA)) || (weexPlatform === 'ios');\nvar isChrome = UA && /chrome\\/\\d+/.test(UA) && !isEdge;\nvar isPhantomJS = UA && /phantomjs/.test(UA);\nvar isFF = UA && UA.match(/firefox\\/(\\d+)/);\n\n// Firefox has a \"watch\" function on Object.prototype...\nvar nativeWatch = ({}).watch;\n\nvar supportsPassive = false;\nif (inBrowser) {\n try {\n var opts = {};\n Object.defineProperty(opts, 'passive', ({\n get: function get () {\n /* istanbul ignore next */\n supportsPassive = true;\n }\n })); // https://github.com/facebook/flow/issues/285\n window.addEventListener('test-passive', null, opts);\n } catch (e) {}\n}\n\n// this needs to be lazy-evaled because vue may be required before\n// vue-server-renderer can set VUE_ENV\nvar _isServer;\nvar isServerRendering = function () {\n if (_isServer === undefined) {\n /* istanbul ignore if */\n if (!inBrowser && !inWeex && typeof global !== 'undefined') {\n // detect presence of vue-server-renderer and avoid\n // Webpack shimming the process\n _isServer = global['process'] && global['process'].env.VUE_ENV === 'server';\n } else {\n _isServer = false;\n }\n }\n return _isServer\n};\n\n// detect devtools\nvar devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n\n/* istanbul ignore next */\nfunction isNative (Ctor) {\n return typeof Ctor === 'function' && /native code/.test(Ctor.toString())\n}\n\nvar hasSymbol =\n typeof Symbol !== 'undefined' && isNative(Symbol) &&\n typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys);\n\nvar _Set;\n/* istanbul ignore if */ // $flow-disable-line\nif (typeof Set !== 'undefined' && isNative(Set)) {\n // use native Set when available.\n _Set = Set;\n} else {\n // a non-standard Set polyfill that only works with primitive keys.\n _Set = /*@__PURE__*/(function () {\n function Set () {\n this.set = Object.create(null);\n }\n Set.prototype.has = function has (key) {\n return this.set[key] === true\n };\n Set.prototype.add = function add (key) {\n this.set[key] = true;\n };\n Set.prototype.clear = function clear () {\n this.set = Object.create(null);\n };\n\n return Set;\n }());\n}\n\n/* */\n\nvar warn = noop;\nvar tip = noop;\nvar generateComponentTrace = (noop); // work around flow check\nvar formatComponentName = (noop);\n\nif (process.env.NODE_ENV !== 'production') {\n var hasConsole = typeof console !== 'undefined';\n var classifyRE = /(?:^|[-_])(\\w)/g;\n var classify = function (str) { return str\n .replace(classifyRE, function (c) { return c.toUpperCase(); })\n .replace(/[-_]/g, ''); };\n\n warn = function (msg, vm) {\n var trace = vm ? generateComponentTrace(vm) : '';\n\n if (config.warnHandler) {\n config.warnHandler.call(null, msg, vm, trace);\n } else if (hasConsole && (!config.silent)) {\n console.error((\"[Vue warn]: \" + msg + trace));\n }\n };\n\n tip = function (msg, vm) {\n if (hasConsole && (!config.silent)) {\n console.warn(\"[Vue tip]: \" + msg + (\n vm ? generateComponentTrace(vm) : ''\n ));\n }\n };\n\n formatComponentName = function (vm, includeFile) {\n if (vm.$root === vm) {\n return ''\n }\n var options = typeof vm === 'function' && vm.cid != null\n ? vm.options\n : vm._isVue\n ? vm.$options || vm.constructor.options\n : vm;\n var name = options.name || options._componentTag;\n var file = options.__file;\n if (!name && file) {\n var match = file.match(/([^/\\\\]+)\\.vue$/);\n name = match && match[1];\n }\n\n return (\n (name ? (\"<\" + (classify(name)) + \">\") : \"\") +\n (file && includeFile !== false ? (\" at \" + file) : '')\n )\n };\n\n var repeat = function (str, n) {\n var res = '';\n while (n) {\n if (n % 2 === 1) { res += str; }\n if (n > 1) { str += str; }\n n >>= 1;\n }\n return res\n };\n\n generateComponentTrace = function (vm) {\n if (vm._isVue && vm.$parent) {\n var tree = [];\n var currentRecursiveSequence = 0;\n while (vm) {\n if (tree.length > 0) {\n var last = tree[tree.length - 1];\n if (last.constructor === vm.constructor) {\n currentRecursiveSequence++;\n vm = vm.$parent;\n continue\n } else if (currentRecursiveSequence > 0) {\n tree[tree.length - 1] = [last, currentRecursiveSequence];\n currentRecursiveSequence = 0;\n }\n }\n tree.push(vm);\n vm = vm.$parent;\n }\n return '\\n\\nfound in\\n\\n' + tree\n .map(function (vm, i) { return (\"\" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm)\n ? ((formatComponentName(vm[0])) + \"... (\" + (vm[1]) + \" recursive calls)\")\n : formatComponentName(vm))); })\n .join('\\n')\n } else {\n return (\"\\n\\n(found in \" + (formatComponentName(vm)) + \")\")\n }\n };\n}\n\n/* */\n\nvar uid = 0;\n\n/**\n * A dep is an observable that can have multiple\n * directives subscribing to it.\n */\nvar Dep = function Dep () {\n this.id = uid++;\n this.subs = [];\n};\n\nDep.prototype.addSub = function addSub (sub) {\n this.subs.push(sub);\n};\n\nDep.prototype.removeSub = function removeSub (sub) {\n remove(this.subs, sub);\n};\n\nDep.prototype.depend = function depend () {\n if (Dep.target) {\n Dep.target.addDep(this);\n }\n};\n\nDep.prototype.notify = function notify () {\n // stabilize the subscriber list first\n var subs = this.subs.slice();\n if (process.env.NODE_ENV !== 'production' && !config.async) {\n // subs aren't sorted in scheduler if not running async\n // we need to sort them now to make sure they fire in correct\n // order\n subs.sort(function (a, b) { return a.id - b.id; });\n }\n for (var i = 0, l = subs.length; i < l; i++) {\n subs[i].update();\n }\n};\n\n// The current target watcher being evaluated.\n// This is globally unique because only one watcher\n// can be evaluated at a time.\nDep.target = null;\nvar targetStack = [];\n\nfunction pushTarget (target) {\n targetStack.push(target);\n Dep.target = target;\n}\n\nfunction popTarget () {\n targetStack.pop();\n Dep.target = targetStack[targetStack.length - 1];\n}\n\n/* */\n\nvar VNode = function VNode (\n tag,\n data,\n children,\n text,\n elm,\n context,\n componentOptions,\n asyncFactory\n) {\n this.tag = tag;\n this.data = data;\n this.children = children;\n this.text = text;\n this.elm = elm;\n this.ns = undefined;\n this.context = context;\n this.fnContext = undefined;\n this.fnOptions = undefined;\n this.fnScopeId = undefined;\n this.key = data && data.key;\n this.componentOptions = componentOptions;\n this.componentInstance = undefined;\n this.parent = undefined;\n this.raw = false;\n this.isStatic = false;\n this.isRootInsert = true;\n this.isComment = false;\n this.isCloned = false;\n this.isOnce = false;\n this.asyncFactory = asyncFactory;\n this.asyncMeta = undefined;\n this.isAsyncPlaceholder = false;\n};\n\nvar prototypeAccessors = { child: { configurable: true } };\n\n// DEPRECATED: alias for componentInstance for backwards compat.\n/* istanbul ignore next */\nprototypeAccessors.child.get = function () {\n return this.componentInstance\n};\n\nObject.defineProperties( VNode.prototype, prototypeAccessors );\n\nvar createEmptyVNode = function (text) {\n if ( text === void 0 ) text = '';\n\n var node = new VNode();\n node.text = text;\n node.isComment = true;\n return node\n};\n\nfunction createTextVNode (val) {\n return new VNode(undefined, undefined, undefined, String(val))\n}\n\n// optimized shallow clone\n// used for static nodes and slot nodes because they may be reused across\n// multiple renders, cloning them avoids errors when DOM manipulations rely\n// on their elm reference.\nfunction cloneVNode (vnode) {\n var cloned = new VNode(\n vnode.tag,\n vnode.data,\n // #7975\n // clone children array to avoid mutating original in case of cloning\n // a child.\n vnode.children && vnode.children.slice(),\n vnode.text,\n vnode.elm,\n vnode.context,\n vnode.componentOptions,\n vnode.asyncFactory\n );\n cloned.ns = vnode.ns;\n cloned.isStatic = vnode.isStatic;\n cloned.key = vnode.key;\n cloned.isComment = vnode.isComment;\n cloned.fnContext = vnode.fnContext;\n cloned.fnOptions = vnode.fnOptions;\n cloned.fnScopeId = vnode.fnScopeId;\n cloned.asyncMeta = vnode.asyncMeta;\n cloned.isCloned = true;\n return cloned\n}\n\n/*\n * not type checking this file because flow doesn't play well with\n * dynamically accessing methods on Array prototype\n */\n\nvar arrayProto = Array.prototype;\nvar arrayMethods = Object.create(arrayProto);\n\nvar methodsToPatch = [\n 'push',\n 'pop',\n 'shift',\n 'unshift',\n 'splice',\n 'sort',\n 'reverse'\n];\n\n/**\n * Intercept mutating methods and emit events\n */\nmethodsToPatch.forEach(function (method) {\n // cache original method\n var original = arrayProto[method];\n def(arrayMethods, method, function mutator () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var result = original.apply(this, args);\n var ob = this.__ob__;\n var inserted;\n switch (method) {\n case 'push':\n case 'unshift':\n inserted = args;\n break\n case 'splice':\n inserted = args.slice(2);\n break\n }\n if (inserted) { ob.observeArray(inserted); }\n // notify change\n ob.dep.notify();\n return result\n });\n});\n\n/* */\n\nvar arrayKeys = Object.getOwnPropertyNames(arrayMethods);\n\n/**\n * In some cases we may want to disable observation inside a component's\n * update computation.\n */\nvar shouldObserve = true;\n\nfunction toggleObserving (value) {\n shouldObserve = value;\n}\n\n/**\n * Observer class that is attached to each observed\n * object. Once attached, the observer converts the target\n * object's property keys into getter/setters that\n * collect dependencies and dispatch updates.\n */\nvar Observer = function Observer (value) {\n this.value = value;\n this.dep = new Dep();\n this.vmCount = 0;\n def(value, '__ob__', this);\n if (Array.isArray(value)) {\n if (hasProto) {\n protoAugment(value, arrayMethods);\n } else {\n copyAugment(value, arrayMethods, arrayKeys);\n }\n this.observeArray(value);\n } else {\n this.walk(value);\n }\n};\n\n/**\n * Walk through all properties and convert them into\n * getter/setters. This method should only be called when\n * value type is Object.\n */\nObserver.prototype.walk = function walk (obj) {\n var keys = Object.keys(obj);\n for (var i = 0; i < keys.length; i++) {\n defineReactive$$1(obj, keys[i]);\n }\n};\n\n/**\n * Observe a list of Array items.\n */\nObserver.prototype.observeArray = function observeArray (items) {\n for (var i = 0, l = items.length; i < l; i++) {\n observe(items[i]);\n }\n};\n\n// helpers\n\n/**\n * Augment a target Object or Array by intercepting\n * the prototype chain using __proto__\n */\nfunction protoAugment (target, src) {\n /* eslint-disable no-proto */\n target.__proto__ = src;\n /* eslint-enable no-proto */\n}\n\n/**\n * Augment a target Object or Array by defining\n * hidden properties.\n */\n/* istanbul ignore next */\nfunction copyAugment (target, src, keys) {\n for (var i = 0, l = keys.length; i < l; i++) {\n var key = keys[i];\n def(target, key, src[key]);\n }\n}\n\n/**\n * Attempt to create an observer instance for a value,\n * returns the new observer if successfully observed,\n * or the existing observer if the value already has one.\n */\nfunction observe (value, asRootData) {\n if (!isObject(value) || value instanceof VNode) {\n return\n }\n var ob;\n if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {\n ob = value.__ob__;\n } else if (\n shouldObserve &&\n !isServerRendering() &&\n (Array.isArray(value) || isPlainObject(value)) &&\n Object.isExtensible(value) &&\n !value._isVue\n ) {\n ob = new Observer(value);\n }\n if (asRootData && ob) {\n ob.vmCount++;\n }\n return ob\n}\n\n/**\n * Define a reactive property on an Object.\n */\nfunction defineReactive$$1 (\n obj,\n key,\n val,\n customSetter,\n shallow\n) {\n var dep = new Dep();\n\n var property = Object.getOwnPropertyDescriptor(obj, key);\n if (property && property.configurable === false) {\n return\n }\n\n // cater for pre-defined getter/setters\n var getter = property && property.get;\n var setter = property && property.set;\n if ((!getter || setter) && arguments.length === 2) {\n val = obj[key];\n }\n\n var childOb = !shallow && observe(val);\n Object.defineProperty(obj, key, {\n enumerable: true,\n configurable: true,\n get: function reactiveGetter () {\n var value = getter ? getter.call(obj) : val;\n if (Dep.target) {\n dep.depend();\n if (childOb) {\n childOb.dep.depend();\n if (Array.isArray(value)) {\n dependArray(value);\n }\n }\n }\n return value\n },\n set: function reactiveSetter (newVal) {\n var value = getter ? getter.call(obj) : val;\n /* eslint-disable no-self-compare */\n if (newVal === value || (newVal !== newVal && value !== value)) {\n return\n }\n /* eslint-enable no-self-compare */\n if (process.env.NODE_ENV !== 'production' && customSetter) {\n customSetter();\n }\n // #7981: for accessor properties without setter\n if (getter && !setter) { return }\n if (setter) {\n setter.call(obj, newVal);\n } else {\n val = newVal;\n }\n childOb = !shallow && observe(newVal);\n dep.notify();\n }\n });\n}\n\n/**\n * Set a property on an object. Adds the new property and\n * triggers change notification if the property doesn't\n * already exist.\n */\nfunction set (target, key, val) {\n if (process.env.NODE_ENV !== 'production' &&\n (isUndef(target) || isPrimitive(target))\n ) {\n warn((\"Cannot set reactive property on undefined, null, or primitive value: \" + ((target))));\n }\n if (Array.isArray(target) && isValidArrayIndex(key)) {\n target.length = Math.max(target.length, key);\n target.splice(key, 1, val);\n return val\n }\n if (key in target && !(key in Object.prototype)) {\n target[key] = val;\n return val\n }\n var ob = (target).__ob__;\n if (target._isVue || (ob && ob.vmCount)) {\n process.env.NODE_ENV !== 'production' && warn(\n 'Avoid adding reactive properties to a Vue instance or its root $data ' +\n 'at runtime - declare it upfront in the data option.'\n );\n return val\n }\n if (!ob) {\n target[key] = val;\n return val\n }\n defineReactive$$1(ob.value, key, val);\n ob.dep.notify();\n return val\n}\n\n/**\n * Delete a property and trigger change if necessary.\n */\nfunction del (target, key) {\n if (process.env.NODE_ENV !== 'production' &&\n (isUndef(target) || isPrimitive(target))\n ) {\n warn((\"Cannot delete reactive property on undefined, null, or primitive value: \" + ((target))));\n }\n if (Array.isArray(target) && isValidArrayIndex(key)) {\n target.splice(key, 1);\n return\n }\n var ob = (target).__ob__;\n if (target._isVue || (ob && ob.vmCount)) {\n process.env.NODE_ENV !== 'production' && warn(\n 'Avoid deleting properties on a Vue instance or its root $data ' +\n '- just set it to null.'\n );\n return\n }\n if (!hasOwn(target, key)) {\n return\n }\n delete target[key];\n if (!ob) {\n return\n }\n ob.dep.notify();\n}\n\n/**\n * Collect dependencies on array elements when the array is touched, since\n * we cannot intercept array element access like property getters.\n */\nfunction dependArray (value) {\n for (var e = (void 0), i = 0, l = value.length; i < l; i++) {\n e = value[i];\n e && e.__ob__ && e.__ob__.dep.depend();\n if (Array.isArray(e)) {\n dependArray(e);\n }\n }\n}\n\n/* */\n\n/**\n * Option overwriting strategies are functions that handle\n * how to merge a parent option value and a child option\n * value into the final value.\n */\nvar strats = config.optionMergeStrategies;\n\n/**\n * Options with restrictions\n */\nif (process.env.NODE_ENV !== 'production') {\n strats.el = strats.propsData = function (parent, child, vm, key) {\n if (!vm) {\n warn(\n \"option \\\"\" + key + \"\\\" can only be used during instance \" +\n 'creation with the `new` keyword.'\n );\n }\n return defaultStrat(parent, child)\n };\n}\n\n/**\n * Helper that recursively merges two data objects together.\n */\nfunction mergeData (to, from) {\n if (!from) { return to }\n var key, toVal, fromVal;\n\n var keys = hasSymbol\n ? Reflect.ownKeys(from)\n : Object.keys(from);\n\n for (var i = 0; i < keys.length; i++) {\n key = keys[i];\n // in case the object is already observed...\n if (key === '__ob__') { continue }\n toVal = to[key];\n fromVal = from[key];\n if (!hasOwn(to, key)) {\n set(to, key, fromVal);\n } else if (\n toVal !== fromVal &&\n isPlainObject(toVal) &&\n isPlainObject(fromVal)\n ) {\n mergeData(toVal, fromVal);\n }\n }\n return to\n}\n\n/**\n * Data\n */\nfunction mergeDataOrFn (\n parentVal,\n childVal,\n vm\n) {\n if (!vm) {\n // in a Vue.extend merge, both should be functions\n if (!childVal) {\n return parentVal\n }\n if (!parentVal) {\n return childVal\n }\n // when parentVal & childVal are both present,\n // we need to return a function that returns the\n // merged result of both functions... no need to\n // check if parentVal is a function here because\n // it has to be a function to pass previous merges.\n return function mergedDataFn () {\n return mergeData(\n typeof childVal === 'function' ? childVal.call(this, this) : childVal,\n typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal\n )\n }\n } else {\n return function mergedInstanceDataFn () {\n // instance merge\n var instanceData = typeof childVal === 'function'\n ? childVal.call(vm, vm)\n : childVal;\n var defaultData = typeof parentVal === 'function'\n ? parentVal.call(vm, vm)\n : parentVal;\n if (instanceData) {\n return mergeData(instanceData, defaultData)\n } else {\n return defaultData\n }\n }\n }\n}\n\nstrats.data = function (\n parentVal,\n childVal,\n vm\n) {\n if (!vm) {\n if (childVal && typeof childVal !== 'function') {\n process.env.NODE_ENV !== 'production' && warn(\n 'The \"data\" option should be a function ' +\n 'that returns a per-instance value in component ' +\n 'definitions.',\n vm\n );\n\n return parentVal\n }\n return mergeDataOrFn(parentVal, childVal)\n }\n\n return mergeDataOrFn(parentVal, childVal, vm)\n};\n\n/**\n * Hooks and props are merged as arrays.\n */\nfunction mergeHook (\n parentVal,\n childVal\n) {\n var res = childVal\n ? parentVal\n ? parentVal.concat(childVal)\n : Array.isArray(childVal)\n ? childVal\n : [childVal]\n : parentVal;\n return res\n ? dedupeHooks(res)\n : res\n}\n\nfunction dedupeHooks (hooks) {\n var res = [];\n for (var i = 0; i < hooks.length; i++) {\n if (res.indexOf(hooks[i]) === -1) {\n res.push(hooks[i]);\n }\n }\n return res\n}\n\nLIFECYCLE_HOOKS.forEach(function (hook) {\n strats[hook] = mergeHook;\n});\n\n/**\n * Assets\n *\n * When a vm is present (instance creation), we need to do\n * a three-way merge between constructor options, instance\n * options and parent options.\n */\nfunction mergeAssets (\n parentVal,\n childVal,\n vm,\n key\n) {\n var res = Object.create(parentVal || null);\n if (childVal) {\n process.env.NODE_ENV !== 'production' && assertObjectType(key, childVal, vm);\n return extend(res, childVal)\n } else {\n return res\n }\n}\n\nASSET_TYPES.forEach(function (type) {\n strats[type + 's'] = mergeAssets;\n});\n\n/**\n * Watchers.\n *\n * Watchers hashes should not overwrite one\n * another, so we merge them as arrays.\n */\nstrats.watch = function (\n parentVal,\n childVal,\n vm,\n key\n) {\n // work around Firefox's Object.prototype.watch...\n if (parentVal === nativeWatch) { parentVal = undefined; }\n if (childVal === nativeWatch) { childVal = undefined; }\n /* istanbul ignore if */\n if (!childVal) { return Object.create(parentVal || null) }\n if (process.env.NODE_ENV !== 'production') {\n assertObjectType(key, childVal, vm);\n }\n if (!parentVal) { return childVal }\n var ret = {};\n extend(ret, parentVal);\n for (var key$1 in childVal) {\n var parent = ret[key$1];\n var child = childVal[key$1];\n if (parent && !Array.isArray(parent)) {\n parent = [parent];\n }\n ret[key$1] = parent\n ? parent.concat(child)\n : Array.isArray(child) ? child : [child];\n }\n return ret\n};\n\n/**\n * Other object hashes.\n */\nstrats.props =\nstrats.methods =\nstrats.inject =\nstrats.computed = function (\n parentVal,\n childVal,\n vm,\n key\n) {\n if (childVal && process.env.NODE_ENV !== 'production') {\n assertObjectType(key, childVal, vm);\n }\n if (!parentVal) { return childVal }\n var ret = Object.create(null);\n extend(ret, parentVal);\n if (childVal) { extend(ret, childVal); }\n return ret\n};\nstrats.provide = mergeDataOrFn;\n\n/**\n * Default strategy.\n */\nvar defaultStrat = function (parentVal, childVal) {\n return childVal === undefined\n ? parentVal\n : childVal\n};\n\n/**\n * Validate component names\n */\nfunction checkComponents (options) {\n for (var key in options.components) {\n validateComponentName(key);\n }\n}\n\nfunction validateComponentName (name) {\n if (!new RegExp((\"^[a-zA-Z][\\\\-\\\\.0-9_\" + (unicodeRegExp.source) + \"]*$\")).test(name)) {\n warn(\n 'Invalid component name: \"' + name + '\". Component names ' +\n 'should conform to valid custom element name in html5 specification.'\n );\n }\n if (isBuiltInTag(name) || config.isReservedTag(name)) {\n warn(\n 'Do not use built-in or reserved HTML elements as component ' +\n 'id: ' + name\n );\n }\n}\n\n/**\n * Ensure all props option syntax are normalized into the\n * Object-based format.\n */\nfunction normalizeProps (options, vm) {\n var props = options.props;\n if (!props) { return }\n var res = {};\n var i, val, name;\n if (Array.isArray(props)) {\n i = props.length;\n while (i--) {\n val = props[i];\n if (typeof val === 'string') {\n name = camelize(val);\n res[name] = { type: null };\n } else if (process.env.NODE_ENV !== 'production') {\n warn('props must be strings when using array syntax.');\n }\n }\n } else if (isPlainObject(props)) {\n for (var key in props) {\n val = props[key];\n name = camelize(key);\n res[name] = isPlainObject(val)\n ? val\n : { type: val };\n }\n } else if (process.env.NODE_ENV !== 'production') {\n warn(\n \"Invalid value for option \\\"props\\\": expected an Array or an Object, \" +\n \"but got \" + (toRawType(props)) + \".\",\n vm\n );\n }\n options.props = res;\n}\n\n/**\n * Normalize all injections into Object-based format\n */\nfunction normalizeInject (options, vm) {\n var inject = options.inject;\n if (!inject) { return }\n var normalized = options.inject = {};\n if (Array.isArray(inject)) {\n for (var i = 0; i < inject.length; i++) {\n normalized[inject[i]] = { from: inject[i] };\n }\n } else if (isPlainObject(inject)) {\n for (var key in inject) {\n var val = inject[key];\n normalized[key] = isPlainObject(val)\n ? extend({ from: key }, val)\n : { from: val };\n }\n } else if (process.env.NODE_ENV !== 'production') {\n warn(\n \"Invalid value for option \\\"inject\\\": expected an Array or an Object, \" +\n \"but got \" + (toRawType(inject)) + \".\",\n vm\n );\n }\n}\n\n/**\n * Normalize raw function directives into object format.\n */\nfunction normalizeDirectives (options) {\n var dirs = options.directives;\n if (dirs) {\n for (var key in dirs) {\n var def$$1 = dirs[key];\n if (typeof def$$1 === 'function') {\n dirs[key] = { bind: def$$1, update: def$$1 };\n }\n }\n }\n}\n\nfunction assertObjectType (name, value, vm) {\n if (!isPlainObject(value)) {\n warn(\n \"Invalid value for option \\\"\" + name + \"\\\": expected an Object, \" +\n \"but got \" + (toRawType(value)) + \".\",\n vm\n );\n }\n}\n\n/**\n * Merge two option objects into a new one.\n * Core utility used in both instantiation and inheritance.\n */\nfunction mergeOptions (\n parent,\n child,\n vm\n) {\n if (process.env.NODE_ENV !== 'production') {\n checkComponents(child);\n }\n\n if (typeof child === 'function') {\n child = child.options;\n }\n\n normalizeProps(child, vm);\n normalizeInject(child, vm);\n normalizeDirectives(child);\n\n // Apply extends and mixins on the child options,\n // but only if it is a raw options object that isn't\n // the result of another mergeOptions call.\n // Only merged options has the _base property.\n if (!child._base) {\n if (child.extends) {\n parent = mergeOptions(parent, child.extends, vm);\n }\n if (child.mixins) {\n for (var i = 0, l = child.mixins.length; i < l; i++) {\n parent = mergeOptions(parent, child.mixins[i], vm);\n }\n }\n }\n\n var options = {};\n var key;\n for (key in parent) {\n mergeField(key);\n }\n for (key in child) {\n if (!hasOwn(parent, key)) {\n mergeField(key);\n }\n }\n function mergeField (key) {\n var strat = strats[key] || defaultStrat;\n options[key] = strat(parent[key], child[key], vm, key);\n }\n return options\n}\n\n/**\n * Resolve an asset.\n * This function is used because child instances need access\n * to assets defined in its ancestor chain.\n */\nfunction resolveAsset (\n options,\n type,\n id,\n warnMissing\n) {\n /* istanbul ignore if */\n if (typeof id !== 'string') {\n return\n }\n var assets = options[type];\n // check local registration variations first\n if (hasOwn(assets, id)) { return assets[id] }\n var camelizedId = camelize(id);\n if (hasOwn(assets, camelizedId)) { return assets[camelizedId] }\n var PascalCaseId = capitalize(camelizedId);\n if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] }\n // fallback to prototype chain\n var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];\n if (process.env.NODE_ENV !== 'production' && warnMissing && !res) {\n warn(\n 'Failed to resolve ' + type.slice(0, -1) + ': ' + id,\n options\n );\n }\n return res\n}\n\n/* */\n\n\n\nfunction validateProp (\n key,\n propOptions,\n propsData,\n vm\n) {\n var prop = propOptions[key];\n var absent = !hasOwn(propsData, key);\n var value = propsData[key];\n // boolean casting\n var booleanIndex = getTypeIndex(Boolean, prop.type);\n if (booleanIndex > -1) {\n if (absent && !hasOwn(prop, 'default')) {\n value = false;\n } else if (value === '' || value === hyphenate(key)) {\n // only cast empty string / same name to boolean if\n // boolean has higher priority\n var stringIndex = getTypeIndex(String, prop.type);\n if (stringIndex < 0 || booleanIndex < stringIndex) {\n value = true;\n }\n }\n }\n // check default value\n if (value === undefined) {\n value = getPropDefaultValue(vm, prop, key);\n // since the default value is a fresh copy,\n // make sure to observe it.\n var prevShouldObserve = shouldObserve;\n toggleObserving(true);\n observe(value);\n toggleObserving(prevShouldObserve);\n }\n if (\n process.env.NODE_ENV !== 'production' &&\n // skip validation for weex recycle-list child component props\n !(false)\n ) {\n assertProp(prop, key, value, vm, absent);\n }\n return value\n}\n\n/**\n * Get the default value of a prop.\n */\nfunction getPropDefaultValue (vm, prop, key) {\n // no default, return undefined\n if (!hasOwn(prop, 'default')) {\n return undefined\n }\n var def = prop.default;\n // warn against non-factory defaults for Object & Array\n if (process.env.NODE_ENV !== 'production' && isObject(def)) {\n warn(\n 'Invalid default value for prop \"' + key + '\": ' +\n 'Props with type Object/Array must use a factory function ' +\n 'to return the default value.',\n vm\n );\n }\n // the raw prop value was also undefined from previous render,\n // return previous default value to avoid unnecessary watcher trigger\n if (vm && vm.$options.propsData &&\n vm.$options.propsData[key] === undefined &&\n vm._props[key] !== undefined\n ) {\n return vm._props[key]\n }\n // call factory function for non-Function types\n // a value is Function if its prototype is function even across different execution context\n return typeof def === 'function' && getType(prop.type) !== 'Function'\n ? def.call(vm)\n : def\n}\n\n/**\n * Assert whether a prop is valid.\n */\nfunction assertProp (\n prop,\n name,\n value,\n vm,\n absent\n) {\n if (prop.required && absent) {\n warn(\n 'Missing required prop: \"' + name + '\"',\n vm\n );\n return\n }\n if (value == null && !prop.required) {\n return\n }\n var type = prop.type;\n var valid = !type || type === true;\n var expectedTypes = [];\n if (type) {\n if (!Array.isArray(type)) {\n type = [type];\n }\n for (var i = 0; i < type.length && !valid; i++) {\n var assertedType = assertType(value, type[i]);\n expectedTypes.push(assertedType.expectedType || '');\n valid = assertedType.valid;\n }\n }\n\n if (!valid) {\n warn(\n getInvalidTypeMessage(name, value, expectedTypes),\n vm\n );\n return\n }\n var validator = prop.validator;\n if (validator) {\n if (!validator(value)) {\n warn(\n 'Invalid prop: custom validator check failed for prop \"' + name + '\".',\n vm\n );\n }\n }\n}\n\nvar simpleCheckRE = /^(String|Number|Boolean|Function|Symbol)$/;\n\nfunction assertType (value, type) {\n var valid;\n var expectedType = getType(type);\n if (simpleCheckRE.test(expectedType)) {\n var t = typeof value;\n valid = t === expectedType.toLowerCase();\n // for primitive wrapper objects\n if (!valid && t === 'object') {\n valid = value instanceof type;\n }\n } else if (expectedType === 'Object') {\n valid = isPlainObject(value);\n } else if (expectedType === 'Array') {\n valid = Array.isArray(value);\n } else {\n valid = value instanceof type;\n }\n return {\n valid: valid,\n expectedType: expectedType\n }\n}\n\n/**\n * Use function string name to check built-in types,\n * because a simple equality check will fail when running\n * across different vms / iframes.\n */\nfunction getType (fn) {\n var match = fn && fn.toString().match(/^\\s*function (\\w+)/);\n return match ? match[1] : ''\n}\n\nfunction isSameType (a, b) {\n return getType(a) === getType(b)\n}\n\nfunction getTypeIndex (type, expectedTypes) {\n if (!Array.isArray(expectedTypes)) {\n return isSameType(expectedTypes, type) ? 0 : -1\n }\n for (var i = 0, len = expectedTypes.length; i < len; i++) {\n if (isSameType(expectedTypes[i], type)) {\n return i\n }\n }\n return -1\n}\n\nfunction getInvalidTypeMessage (name, value, expectedTypes) {\n var message = \"Invalid prop: type check failed for prop \\\"\" + name + \"\\\".\" +\n \" Expected \" + (expectedTypes.map(capitalize).join(', '));\n var expectedType = expectedTypes[0];\n var receivedType = toRawType(value);\n var expectedValue = styleValue(value, expectedType);\n var receivedValue = styleValue(value, receivedType);\n // check if we need to specify expected value\n if (expectedTypes.length === 1 &&\n isExplicable(expectedType) &&\n !isBoolean(expectedType, receivedType)) {\n message += \" with value \" + expectedValue;\n }\n message += \", got \" + receivedType + \" \";\n // check if we need to specify received value\n if (isExplicable(receivedType)) {\n message += \"with value \" + receivedValue + \".\";\n }\n return message\n}\n\nfunction styleValue (value, type) {\n if (type === 'String') {\n return (\"\\\"\" + value + \"\\\"\")\n } else if (type === 'Number') {\n return (\"\" + (Number(value)))\n } else {\n return (\"\" + value)\n }\n}\n\nfunction isExplicable (value) {\n var explicitTypes = ['string', 'number', 'boolean'];\n return explicitTypes.some(function (elem) { return value.toLowerCase() === elem; })\n}\n\nfunction isBoolean () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; })\n}\n\n/* */\n\nfunction handleError (err, vm, info) {\n // Deactivate deps tracking while processing error handler to avoid possible infinite rendering.\n // See: https://github.com/vuejs/vuex/issues/1505\n pushTarget();\n try {\n if (vm) {\n var cur = vm;\n while ((cur = cur.$parent)) {\n var hooks = cur.$options.errorCaptured;\n if (hooks) {\n for (var i = 0; i < hooks.length; i++) {\n try {\n var capture = hooks[i].call(cur, err, vm, info) === false;\n if (capture) { return }\n } catch (e) {\n globalHandleError(e, cur, 'errorCaptured hook');\n }\n }\n }\n }\n }\n globalHandleError(err, vm, info);\n } finally {\n popTarget();\n }\n}\n\nfunction invokeWithErrorHandling (\n handler,\n context,\n args,\n vm,\n info\n) {\n var res;\n try {\n res = args ? handler.apply(context, args) : handler.call(context);\n if (res && !res._isVue && isPromise(res) && !res._handled) {\n res.catch(function (e) { return handleError(e, vm, info + \" (Promise/async)\"); });\n // issue #9511\n // avoid catch triggering multiple times when nested calls\n res._handled = true;\n }\n } catch (e) {\n handleError(e, vm, info);\n }\n return res\n}\n\nfunction globalHandleError (err, vm, info) {\n if (config.errorHandler) {\n try {\n return config.errorHandler.call(null, err, vm, info)\n } catch (e) {\n // if the user intentionally throws the original error in the handler,\n // do not log it twice\n if (e !== err) {\n logError(e, null, 'config.errorHandler');\n }\n }\n }\n logError(err, vm, info);\n}\n\nfunction logError (err, vm, info) {\n if (process.env.NODE_ENV !== 'production') {\n warn((\"Error in \" + info + \": \\\"\" + (err.toString()) + \"\\\"\"), vm);\n }\n /* istanbul ignore else */\n if ((inBrowser || inWeex) && typeof console !== 'undefined') {\n console.error(err);\n } else {\n throw err\n }\n}\n\n/* */\n\nvar isUsingMicroTask = false;\n\nvar callbacks = [];\nvar pending = false;\n\nfunction flushCallbacks () {\n pending = false;\n var copies = callbacks.slice(0);\n callbacks.length = 0;\n for (var i = 0; i < copies.length; i++) {\n copies[i]();\n }\n}\n\n// Here we have async deferring wrappers using microtasks.\n// In 2.5 we used (macro) tasks (in combination with microtasks).\n// However, it has subtle problems when state is changed right before repaint\n// (e.g. #6813, out-in transitions).\n// Also, using (macro) tasks in event handler would cause some weird behaviors\n// that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).\n// So we now use microtasks everywhere, again.\n// A major drawback of this tradeoff is that there are some scenarios\n// where microtasks have too high a priority and fire in between supposedly\n// sequential events (e.g. #4521, #6690, which have workarounds)\n// or even between bubbling of the same event (#6566).\nvar timerFunc;\n\n// The nextTick behavior leverages the microtask queue, which can be accessed\n// via either native Promise.then or MutationObserver.\n// MutationObserver has wider support, however it is seriously bugged in\n// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It\n// completely stops working after triggering a few times... so, if native\n// Promise is available, we will use it:\n/* istanbul ignore next, $flow-disable-line */\nif (typeof Promise !== 'undefined' && isNative(Promise)) {\n var p = Promise.resolve();\n timerFunc = function () {\n p.then(flushCallbacks);\n // In problematic UIWebViews, Promise.then doesn't completely break, but\n // it can get stuck in a weird state where callbacks are pushed into the\n // microtask queue but the queue isn't being flushed, until the browser\n // needs to do some other work, e.g. handle a timer. Therefore we can\n // \"force\" the microtask queue to be flushed by adding an empty timer.\n if (isIOS) { setTimeout(noop); }\n };\n isUsingMicroTask = true;\n} else if (!isIE && typeof MutationObserver !== 'undefined' && (\n isNative(MutationObserver) ||\n // PhantomJS and iOS 7.x\n MutationObserver.toString() === '[object MutationObserverConstructor]'\n)) {\n // Use MutationObserver where native Promise is not available,\n // e.g. PhantomJS, iOS7, Android 4.4\n // (#6466 MutationObserver is unreliable in IE11)\n var counter = 1;\n var observer = new MutationObserver(flushCallbacks);\n var textNode = document.createTextNode(String(counter));\n observer.observe(textNode, {\n characterData: true\n });\n timerFunc = function () {\n counter = (counter + 1) % 2;\n textNode.data = String(counter);\n };\n isUsingMicroTask = true;\n} else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {\n // Fallback to setImmediate.\n // Technically it leverages the (macro) task queue,\n // but it is still a better choice than setTimeout.\n timerFunc = function () {\n setImmediate(flushCallbacks);\n };\n} else {\n // Fallback to setTimeout.\n timerFunc = function () {\n setTimeout(flushCallbacks, 0);\n };\n}\n\nfunction nextTick (cb, ctx) {\n var _resolve;\n callbacks.push(function () {\n if (cb) {\n try {\n cb.call(ctx);\n } catch (e) {\n handleError(e, ctx, 'nextTick');\n }\n } else if (_resolve) {\n _resolve(ctx);\n }\n });\n if (!pending) {\n pending = true;\n timerFunc();\n }\n // $flow-disable-line\n if (!cb && typeof Promise !== 'undefined') {\n return new Promise(function (resolve) {\n _resolve = resolve;\n })\n }\n}\n\n/* */\n\n/* not type checking this file because flow doesn't play well with Proxy */\n\nvar initProxy;\n\nif (process.env.NODE_ENV !== 'production') {\n var allowedGlobals = makeMap(\n 'Infinity,undefined,NaN,isFinite,isNaN,' +\n 'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +\n 'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' +\n 'require' // for Webpack/Browserify\n );\n\n var warnNonPresent = function (target, key) {\n warn(\n \"Property or method \\\"\" + key + \"\\\" is not defined on the instance but \" +\n 'referenced during render. Make sure that this property is reactive, ' +\n 'either in the data option, or for class-based components, by ' +\n 'initializing the property. ' +\n 'See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.',\n target\n );\n };\n\n var warnReservedPrefix = function (target, key) {\n warn(\n \"Property \\\"\" + key + \"\\\" must be accessed with \\\"$data.\" + key + \"\\\" because \" +\n 'properties starting with \"$\" or \"_\" are not proxied in the Vue instance to ' +\n 'prevent conflicts with Vue internals. ' +\n 'See: https://vuejs.org/v2/api/#data',\n target\n );\n };\n\n var hasProxy =\n typeof Proxy !== 'undefined' && isNative(Proxy);\n\n if (hasProxy) {\n var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');\n config.keyCodes = new Proxy(config.keyCodes, {\n set: function set (target, key, value) {\n if (isBuiltInModifier(key)) {\n warn((\"Avoid overwriting built-in modifier in config.keyCodes: .\" + key));\n return false\n } else {\n target[key] = value;\n return true\n }\n }\n });\n }\n\n var hasHandler = {\n has: function has (target, key) {\n var has = key in target;\n var isAllowed = allowedGlobals(key) ||\n (typeof key === 'string' && key.charAt(0) === '_' && !(key in target.$data));\n if (!has && !isAllowed) {\n if (key in target.$data) { warnReservedPrefix(target, key); }\n else { warnNonPresent(target, key); }\n }\n return has || !isAllowed\n }\n };\n\n var getHandler = {\n get: function get (target, key) {\n if (typeof key === 'string' && !(key in target)) {\n if (key in target.$data) { warnReservedPrefix(target, key); }\n else { warnNonPresent(target, key); }\n }\n return target[key]\n }\n };\n\n initProxy = function initProxy (vm) {\n if (hasProxy) {\n // determine which proxy handler to use\n var options = vm.$options;\n var handlers = options.render && options.render._withStripped\n ? getHandler\n : hasHandler;\n vm._renderProxy = new Proxy(vm, handlers);\n } else {\n vm._renderProxy = vm;\n }\n };\n}\n\n/* */\n\nvar seenObjects = new _Set();\n\n/**\n * Recursively traverse an object to evoke all converted\n * getters, so that every nested property inside the object\n * is collected as a \"deep\" dependency.\n */\nfunction traverse (val) {\n _traverse(val, seenObjects);\n seenObjects.clear();\n}\n\nfunction _traverse (val, seen) {\n var i, keys;\n var isA = Array.isArray(val);\n if ((!isA && !isObject(val)) || Object.isFrozen(val) || val instanceof VNode) {\n return\n }\n if (val.__ob__) {\n var depId = val.__ob__.dep.id;\n if (seen.has(depId)) {\n return\n }\n seen.add(depId);\n }\n if (isA) {\n i = val.length;\n while (i--) { _traverse(val[i], seen); }\n } else {\n keys = Object.keys(val);\n i = keys.length;\n while (i--) { _traverse(val[keys[i]], seen); }\n }\n}\n\nvar mark;\nvar measure;\n\nif (process.env.NODE_ENV !== 'production') {\n var perf = inBrowser && window.performance;\n /* istanbul ignore if */\n if (\n perf &&\n perf.mark &&\n perf.measure &&\n perf.clearMarks &&\n perf.clearMeasures\n ) {\n mark = function (tag) { return perf.mark(tag); };\n measure = function (name, startTag, endTag) {\n perf.measure(name, startTag, endTag);\n perf.clearMarks(startTag);\n perf.clearMarks(endTag);\n // perf.clearMeasures(name)\n };\n }\n}\n\n/* */\n\nvar normalizeEvent = cached(function (name) {\n var passive = name.charAt(0) === '&';\n name = passive ? name.slice(1) : name;\n var once$$1 = name.charAt(0) === '~'; // Prefixed last, checked first\n name = once$$1 ? name.slice(1) : name;\n var capture = name.charAt(0) === '!';\n name = capture ? name.slice(1) : name;\n return {\n name: name,\n once: once$$1,\n capture: capture,\n passive: passive\n }\n});\n\nfunction createFnInvoker (fns, vm) {\n function invoker () {\n var arguments$1 = arguments;\n\n var fns = invoker.fns;\n if (Array.isArray(fns)) {\n var cloned = fns.slice();\n for (var i = 0; i < cloned.length; i++) {\n invokeWithErrorHandling(cloned[i], null, arguments$1, vm, \"v-on handler\");\n }\n } else {\n // return handler return value for single handlers\n return invokeWithErrorHandling(fns, null, arguments, vm, \"v-on handler\")\n }\n }\n invoker.fns = fns;\n return invoker\n}\n\nfunction updateListeners (\n on,\n oldOn,\n add,\n remove$$1,\n createOnceHandler,\n vm\n) {\n var name, def$$1, cur, old, event;\n for (name in on) {\n def$$1 = cur = on[name];\n old = oldOn[name];\n event = normalizeEvent(name);\n if (isUndef(cur)) {\n process.env.NODE_ENV !== 'production' && warn(\n \"Invalid handler for event \\\"\" + (event.name) + \"\\\": got \" + String(cur),\n vm\n );\n } else if (isUndef(old)) {\n if (isUndef(cur.fns)) {\n cur = on[name] = createFnInvoker(cur, vm);\n }\n if (isTrue(event.once)) {\n cur = on[name] = createOnceHandler(event.name, cur, event.capture);\n }\n add(event.name, cur, event.capture, event.passive, event.params);\n } else if (cur !== old) {\n old.fns = cur;\n on[name] = old;\n }\n }\n for (name in oldOn) {\n if (isUndef(on[name])) {\n event = normalizeEvent(name);\n remove$$1(event.name, oldOn[name], event.capture);\n }\n }\n}\n\n/* */\n\nfunction mergeVNodeHook (def, hookKey, hook) {\n if (def instanceof VNode) {\n def = def.data.hook || (def.data.hook = {});\n }\n var invoker;\n var oldHook = def[hookKey];\n\n function wrappedHook () {\n hook.apply(this, arguments);\n // important: remove merged hook to ensure it's called only once\n // and prevent memory leak\n remove(invoker.fns, wrappedHook);\n }\n\n if (isUndef(oldHook)) {\n // no existing hook\n invoker = createFnInvoker([wrappedHook]);\n } else {\n /* istanbul ignore if */\n if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {\n // already a merged invoker\n invoker = oldHook;\n invoker.fns.push(wrappedHook);\n } else {\n // existing plain hook\n invoker = createFnInvoker([oldHook, wrappedHook]);\n }\n }\n\n invoker.merged = true;\n def[hookKey] = invoker;\n}\n\n/* */\n\nfunction extractPropsFromVNodeData (\n data,\n Ctor,\n tag\n) {\n // we are only extracting raw values here.\n // validation and default values are handled in the child\n // component itself.\n var propOptions = Ctor.options.props;\n if (isUndef(propOptions)) {\n return\n }\n var res = {};\n var attrs = data.attrs;\n var props = data.props;\n if (isDef(attrs) || isDef(props)) {\n for (var key in propOptions) {\n var altKey = hyphenate(key);\n if (process.env.NODE_ENV !== 'production') {\n var keyInLowerCase = key.toLowerCase();\n if (\n key !== keyInLowerCase &&\n attrs && hasOwn(attrs, keyInLowerCase)\n ) {\n tip(\n \"Prop \\\"\" + keyInLowerCase + \"\\\" is passed to component \" +\n (formatComponentName(tag || Ctor)) + \", but the declared prop name is\" +\n \" \\\"\" + key + \"\\\". \" +\n \"Note that HTML attributes are case-insensitive and camelCased \" +\n \"props need to use their kebab-case equivalents when using in-DOM \" +\n \"templates. You should probably use \\\"\" + altKey + \"\\\" instead of \\\"\" + key + \"\\\".\"\n );\n }\n }\n checkProp(res, props, key, altKey, true) ||\n checkProp(res, attrs, key, altKey, false);\n }\n }\n return res\n}\n\nfunction checkProp (\n res,\n hash,\n key,\n altKey,\n preserve\n) {\n if (isDef(hash)) {\n if (hasOwn(hash, key)) {\n res[key] = hash[key];\n if (!preserve) {\n delete hash[key];\n }\n return true\n } else if (hasOwn(hash, altKey)) {\n res[key] = hash[altKey];\n if (!preserve) {\n delete hash[altKey];\n }\n return true\n }\n }\n return false\n}\n\n/* */\n\n// The template compiler attempts to minimize the need for normalization by\n// statically analyzing the template at compile time.\n//\n// For plain HTML markup, normalization can be completely skipped because the\n// generated render function is guaranteed to return Array. There are\n// two cases where extra normalization is needed:\n\n// 1. When the children contains components - because a functional component\n// may return an Array instead of a single root. In this case, just a simple\n// normalization is needed - if any child is an Array, we flatten the whole\n// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep\n// because functional components already normalize their own children.\nfunction simpleNormalizeChildren (children) {\n for (var i = 0; i < children.length; i++) {\n if (Array.isArray(children[i])) {\n return Array.prototype.concat.apply([], children)\n }\n }\n return children\n}\n\n// 2. When the children contains constructs that always generated nested Arrays,\n// e.g.